|
|
"use strict";function _createForOfIteratorHelper2(o){if(typeof Symbol==="undefined"||o[Symbol.iterator]==null){if(Array.isArray(o)||(o=_unsupportedIterableToArray2(o))){var i=0;var F=function F(){};return{s:F,n:function n(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]};},e:function e(_e3){throw _e3;},f:F};}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}var it,normalCompletion=true,didErr=false,err;return{s:function s(){it=o[Symbol.iterator]();},n:function n(){var step=it.next();normalCompletion=step.done;return step;},e:function e(_e4){didErr=true;err=_e4;},f:function f(){try{if(!normalCompletion&&it.return!=null)it.return();}finally{if(didErr)throw err;}}};}function _toConsumableArray2(arr){return _arrayWithoutHoles2(arr)||_iterableToArray2(arr)||_unsupportedIterableToArray2(arr)||_nonIterableSpread2();}function _nonIterableSpread2(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray2(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray2(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray2(o,minLen);}function _iterableToArray2(iter){if(typeof Symbol!=="undefined"&&Symbol.iterator in Object(iter))return Array.from(iter);}function _arrayWithoutHoles2(arr){if(Array.isArray(arr))return _arrayLikeToArray2(arr);}function _arrayLikeToArray2(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++){arr2[i]=arr[i];}return arr2;}function _get(target,property,receiver){if(typeof Reflect!=="undefined"&&Reflect.get){_get=Reflect.get;}else{_get=function _get(target,property,receiver){var base=_superPropBase(target,property);if(!base)return;var desc=Object.getOwnPropertyDescriptor(base,property);if(desc.get){return desc.get.call(receiver);}return desc.value;};}return _get(target,property,receiver||target);}function _superPropBase(object,property){while(!Object.prototype.hasOwnProperty.call(object,property)){object=_getPrototypeOf2(object);if(object===null)break;}return object;}function _classCallCheck2(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass2(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits2(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf2(subClass,superClass);}function _setPrototypeOf2(o,p){_setPrototypeOf2=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf2(o,p);}function _createSuper2(Derived){return function(){var Super=_getPrototypeOf2(Derived),result;if(_isNativeReflectConstruct2()){var NewTarget=_getPrototypeOf2(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn2(this,result);};}function _possibleConstructorReturn2(self,call){if(call&&(_typeof2(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized2(self);}function _assertThisInitialized2(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct2(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf2(o){_getPrototypeOf2=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf2(o);}function _typeof2(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof2=function _typeof2(obj){return typeof obj;};}else{_typeof2=function _typeof2(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof2(obj);}(function(f){if((typeof exports==="undefined"?"undefined":_typeof2(exports))==="object"&&typeof module!=="undefined"){module.exports=f();}else if(typeof define==="function"&&define.amd){define([],f);}else{var g;if(typeof window!=="undefined"){g=window;}else if(typeof global!=="undefined"){g=global;}else if(typeof self!=="undefined"){g=self;}else{g=this;}g.ExcelJS=f();}})(function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a;}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r);},p,p.exports,r,e,n,t);}return n[i].exports;}for(var u="function"==typeof require&&require,i=0;i<t.length;i++){o(t[i]);}return o;}return r;}()({1:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value;}catch(error){reject(error);return;}if(info.done){resolve(value);}else{Promise.resolve(value).then(_next,_throw);}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value);}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err);}_next(undefined);});};}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}var fs=require('fs');var fastCsv=require('fast-csv');var customParseFormat=require('dayjs/plugin/customParseFormat');var utc=require('dayjs/plugin/utc');var dayjs=require('dayjs').extend(customParseFormat).extend(utc);var StreamBuf=require('../utils/stream-buf');var _require=require('../utils/utils'),exists=_require.fs.exists;/* eslint-disable quote-props */var SpecialValues={true:true,false:false,'#N/A':{error:'#N/A'},'#REF!':{error:'#REF!'},'#NAME?':{error:'#NAME?'},'#DIV/0!':{error:'#DIV/0!'},'#NULL!':{error:'#NULL!'},'#VALUE!':{error:'#VALUE!'},'#NUM!':{error:'#NUM!'}};/* eslint-ensable quote-props */var CSV=/*#__PURE__*/function(){function CSV(workbook){_classCallCheck(this,CSV);this.workbook=workbook;this.worksheet=null;}_createClass(CSV,[{key:"readFile",value:function(){var _readFile=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee(filename,options){var stream,worksheet;return regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:options=options||{};_context.next=3;return exists(filename);case 3:if(_context.sent){_context.next=5;break;}throw new Error("File not found: ".concat(filename));case 5:stream=fs.createReadStream(filename);_context.next=8;return this.read(stream,options);case 8:worksheet=_context.sent;stream.close();return _context.abrupt("return",worksheet);case 11:case"end":return _context.stop();}}},_callee,this);}));function readFile(_x,_x2){return _readFile.apply(this,arguments);}return readFile;}()},{key:"read",value:function read(stream,options){var _this=this;options=options||{};return new Promise(function(resolve,reject){var worksheet=_this.workbook.addWorksheet(options.sheetName);var dateFormats=options.dateFormats||['YYYY-MM-DD[T]HH:mm:ssZ','YYYY-MM-DD[T]HH:mm:ss','MM-DD-YYYY','YYYY-MM-DD'];var map=options.map||function(datum){if(datum===''){return null;}var datumNumber=Number(datum);if(!Number.isNaN(datumNumber)&&datumNumber!==Infinity){return datumNumber;}var dt=dateFormats.reduce(function(matchingDate,currentDateFormat){if(matchingDate){return matchingDate;}var dayjsObj=dayjs(datum,currentDateFormat,true);if(dayjsObj.isValid()){return dayjsObj;}return null;},null);if(dt){return new Date(dt.valueOf());}var special=SpecialValues[datum];if(special!==undefined){return special;}return datum;};var csvStream=fastCsv.parse(options.parserOptions).on('data',function(data){worksheet.addRow(data.map(map));}).on('end',function(){csvStream.emit('worksheet',worksheet);});csvStream.on('worksheet',resolve).on('error',reject);stream.pipe(csvStream);});}/** |
|
|
* @deprecated since version 4.0. You should use `CSV#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md |
|
|
*/},{key:"createInputStream",value:function createInputStream(){throw new Error('`CSV#createInputStream` is deprecated. You should use `CSV#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md');}},{key:"write",value:function write(stream,options){var _this2=this;return new Promise(function(resolve,reject){options=options||{};// const encoding = options.encoding || 'utf8'; |
|
|
// const separator = options.separator || ','; |
|
|
// const quoteChar = options.quoteChar || '\''; |
|
|
var worksheet=_this2.workbook.getWorksheet(options.sheetName||options.sheetId);var csvStream=fastCsv.format(options.formatterOptions);stream.on('finish',function(){resolve();});csvStream.on('error',reject);csvStream.pipe(stream);var _options=options,dateFormat=_options.dateFormat,dateUTC=_options.dateUTC;var map=options.map||function(value){if(value){if(value.text||value.hyperlink){return value.hyperlink||value.text||'';}if(value.formula||value.result){return value.result||'';}if(value instanceof Date){if(dateFormat){return dateUTC?dayjs.utc(value).format(dateFormat):dayjs(value).format(dateFormat);}return dateUTC?dayjs.utc(value).format():dayjs(value).format();}if(value.error){return value.error;}if(_typeof(value)==='object'){return JSON.stringify(value);}}return value;};var includeEmptyRows=options.includeEmptyRows===undefined||options.includeEmptyRows;var lastRow=1;if(worksheet){worksheet.eachRow(function(row,rowNumber){if(includeEmptyRows){while(lastRow++<rowNumber-1){csvStream.write([]);}}var values=row.values;values.shift();csvStream.write(values.map(map));lastRow=rowNumber;});}csvStream.end();});}},{key:"writeFile",value:function writeFile(filename,options){options=options||{};var streamOptions={encoding:options.encoding||'utf8'};var stream=fs.createWriteStream(filename,streamOptions);return this.write(stream,options);}},{key:"writeBuffer",value:function(){var _writeBuffer=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee2(options){var stream;return regeneratorRuntime.wrap(function _callee2$(_context2){while(1){switch(_context2.prev=_context2.next){case 0:stream=new StreamBuf();_context2.next=3;return this.write(stream,options);case 3:return _context2.abrupt("return",stream.read());case 4:case"end":return _context2.stop();}}},_callee2,this);}));function writeBuffer(_x3){return _writeBuffer.apply(this,arguments);}return writeBuffer;}()}]);return CSV;}();module.exports=CSV;},{"../utils/stream-buf":21,"../utils/utils":24,"dayjs":313,"dayjs/plugin/customParseFormat":314,"dayjs/plugin/utc":315,"fast-csv":346,"fs":213}],2:[function(require,module,exports){'use strict';function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}var colCache=require('../utils/col-cache');var Anchor=/*#__PURE__*/function(){function Anchor(worksheet,address){var offset=arguments.length>2&&arguments[2]!==undefined?arguments[2]:0;_classCallCheck(this,Anchor);if(!address){this.nativeCol=0;this.nativeColOff=0;this.nativeRow=0;this.nativeRowOff=0;}else if(typeof address==='string'){var decoded=colCache.decodeAddress(address);this.nativeCol=decoded.col+offset;this.nativeColOff=0;this.nativeRow=decoded.row+offset;this.nativeRowOff=0;}else if(address.nativeCol!==undefined){this.nativeCol=address.nativeCol||0;this.nativeColOff=address.nativeColOff||0;this.nativeRow=address.nativeRow||0;this.nativeRowOff=address.nativeRowOff||0;}else if(address.col!==undefined){this.col=address.col+offset;this.row=address.row+offset;}else{this.nativeCol=0;this.nativeColOff=0;this.nativeRow=0;this.nativeRowOff=0;}this.worksheet=worksheet;}_createClass(Anchor,[{key:"col",get:function get(){return this.nativeCol+Math.min(this.colWidth-1,this.nativeColOff)/this.colWidth;},set:function set(v){this.nativeCol=Math.floor(v);this.nativeColOff=Math.floor((v-this.nativeCol)*this.colWidth);}},{key:"row",get:function get(){return this.nativeRow+Math.min(this.rowHeight-1,this.nativeRowOff)/this.rowHeight;},set:function set(v){this.nativeRow=Math.floor(v);this.nativeRowOff=Math.floor((v-this.nativeRow)*this.rowHeight);}},{key:"colWidth",get:function get(){return this.worksheet&&this.worksheet.getColumn(this.nativeCol+1)&&this.worksheet.getColumn(this.nativeCol+1).isCustomWidth?Math.floor(this.worksheet.getColumn(this.nativeCol+1).width*10000):640000;}},{key:"rowHeight",get:function get(){return this.worksheet&&this.worksheet.getRow(this.nativeRow+1)&&this.worksheet.getRow(this.nativeRow+1).height?Math.floor(this.worksheet.getRow(this.nativeRow+1).height*10000):180000;}},{key:"model",get:function get(){return{nativeCol:this.nativeCol,nativeColOff:this.nativeColOff,nativeRow:this.nativeRow,nativeRowOff:this.nativeRowOff};},set:function set(value){this.nativeCol=value.nativeCol;this.nativeColOff=value.nativeColOff;this.nativeRow=value.nativeRow;this.nativeRowOff=value.nativeRowOff;}}],[{key:"asInstance",value:function asInstance(model){return model instanceof Anchor||model==null?model:new Anchor(model);}}]);return Anchor;}();module.exports=Anchor;},{"../utils/col-cache":17}],3:[function(require,module,exports){"use strict";function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}/* eslint-disable max-classes-per-file */var colCache=require('../utils/col-cache');var _=require('../utils/under-dash');var Enums=require('./enums');var _require=require('../utils/shared-formula'),slideFormula=_require.slideFormula;var Note=require('./note');// Cell requirements |
|
|
// Operate inside a worksheet |
|
|
// Store and retrieve a value with a range of types: text, number, date, hyperlink, reference, formula, etc. |
|
|
// Manage/use and manipulate cell format either as local to cell or inherited from column or row. |
|
|
var Cell=/*#__PURE__*/function(){function Cell(row,column,address){_classCallCheck(this,Cell);if(!row||!column){throw new Error('A Cell needs a Row');}this._row=row;this._column=column;colCache.validateAddress(address);this._address=address;// TODO: lazy evaluation of this._value |
|
|
this._value=Value.create(Cell.Types.Null,this);this.style=this._mergeStyle(row.style,column.style,{});this._mergeCount=0;}_createClass(Cell,[{key:"destroy",// help GC by removing cyclic (and other) references |
|
|
value:function destroy(){delete this.style;delete this._value;delete this._row;delete this._column;delete this._address;}// ========================================================================= |
|
|
// Styles stuff |
|
|
},{key:"_mergeStyle",value:function _mergeStyle(rowStyle,colStyle,style){var numFmt=rowStyle&&rowStyle.numFmt||colStyle&&colStyle.numFmt;if(numFmt)style.numFmt=numFmt;var font=rowStyle&&rowStyle.font||colStyle&&colStyle.font;if(font)style.font=font;var alignment=rowStyle&&rowStyle.alignment||colStyle&&colStyle.alignment;if(alignment)style.alignment=alignment;var border=rowStyle&&rowStyle.border||colStyle&&colStyle.border;if(border)style.border=border;var fill=rowStyle&&rowStyle.fill||colStyle&&colStyle.fill;if(fill)style.fill=fill;var protection=rowStyle&&rowStyle.protection||colStyle&&colStyle.protection;if(protection)style.protection=protection;return style;}// ========================================================================= |
|
|
// return the address for this cell |
|
|
},{key:"toCsvString",value:function toCsvString(){return this._value.toCsvString();}// ========================================================================= |
|
|
// Merge stuff |
|
|
},{key:"addMergeRef",value:function addMergeRef(){this._mergeCount++;}},{key:"releaseMergeRef",value:function releaseMergeRef(){this._mergeCount--;}},{key:"merge",value:function merge(master,ignoreStyle){this._value.release();this._value=Value.create(Cell.Types.Merge,this,master);if(!ignoreStyle){this.style=master.style;}}},{key:"unmerge",value:function unmerge(){if(this.type===Cell.Types.Merge){this._value.release();this._value=Value.create(Cell.Types.Null,this);this.style=this._mergeStyle(this._row.style,this._column.style,{});}}},{key:"isMergedTo",value:function isMergedTo(master){if(this._value.type!==Cell.Types.Merge)return false;return this._value.isMergedTo(master);}},{key:"toString",value:function toString(){return this.text;}},{key:"_upgradeToHyperlink",value:function _upgradeToHyperlink(hyperlink){// if this cell is a string, turn it into a Hyperlink |
|
|
if(this.type===Cell.Types.String){this._value=Value.create(Cell.Types.Hyperlink,this,{text:this._value.value,hyperlink:hyperlink});}}// ========================================================================= |
|
|
// Formula stuff |
|
|
},{key:"addName",value:function addName(name){this.workbook.definedNames.addEx(this.fullAddress,name);}},{key:"removeName",value:function removeName(name){this.workbook.definedNames.removeEx(this.fullAddress,name);}},{key:"removeAllNames",value:function removeAllNames(){this.workbook.definedNames.removeAllNames(this.fullAddress);}// ========================================================================= |
|
|
// Data Validation stuff |
|
|
},{key:"worksheet",get:function get(){return this._row.worksheet;}},{key:"workbook",get:function get(){return this._row.worksheet.workbook;}},{key:"numFmt",get:function get(){return this.style.numFmt;},set:function set(value){this.style.numFmt=value;}},{key:"font",get:function get(){return this.style.font;},set:function set(value){this.style.font=value;}},{key:"alignment",get:function get(){return this.style.alignment;},set:function set(value){this.style.alignment=value;}},{key:"border",get:function get(){return this.style.border;},set:function set(value){this.style.border=value;}},{key:"fill",get:function get(){return this.style.fill;},set:function set(value){this.style.fill=value;}},{key:"protection",get:function get(){return this.style.protection;},set:function set(value){this.style.protection=value;}},{key:"address",get:function get(){return this._address;}},{key:"row",get:function get(){return this._row.number;}},{key:"col",get:function get(){return this._column.number;}},{key:"$col$row",get:function get(){return"$".concat(this._column.letter,"$").concat(this.row);}// ========================================================================= |
|
|
// Value stuff |
|
|
},{key:"type",get:function get(){return this._value.type;}},{key:"effectiveType",get:function get(){return this._value.effectiveType;}},{key:"isMerged",get:function get(){return this._mergeCount>0||this.type===Cell.Types.Merge;}},{key:"master",get:function get(){if(this.type===Cell.Types.Merge){return this._value.master;}return this;// an unmerged cell is its own master |
|
|
}},{key:"isHyperlink",get:function get(){return this._value.type===Cell.Types.Hyperlink;}},{key:"hyperlink",get:function get(){return this._value.hyperlink;}// return the value |
|
|
},{key:"value",get:function get(){return this._value.value;}// set the value - can be number, string or raw |
|
|
,set:function set(v){// special case - merge cells set their master's value |
|
|
if(this.type===Cell.Types.Merge){this._value.master.value=v;return;}this._value.release();// assign value |
|
|
this._value=Value.create(Value.getType(v),this,v);}},{key:"note",get:function get(){return this._comment&&this._comment.note;},set:function set(note){this._comment=new Note(note);}},{key:"text",get:function get(){return this._value.toString();}},{key:"html",get:function get(){return _.escapeHtml(this.text);}},{key:"formula",get:function get(){return this._value.formula;}},{key:"result",get:function get(){return this._value.result;}},{key:"formulaType",get:function get(){return this._value.formulaType;}// ========================================================================= |
|
|
// Name stuff |
|
|
},{key:"fullAddress",get:function get(){var worksheet=this._row.worksheet;return{sheetName:worksheet.name,address:this.address,row:this.row,col:this.col};}},{key:"name",get:function get(){return this.names[0];},set:function set(value){this.names=[value];}},{key:"names",get:function get(){return this.workbook.definedNames.getNamesEx(this.fullAddress);},set:function set(value){var _this=this;var definedNames=this.workbook.definedNames;definedNames.removeAllNames(this.fullAddress);value.forEach(function(name){definedNames.addEx(_this.fullAddress,name);});}},{key:"_dataValidations",get:function get(){return this.worksheet.dataValidations;}},{key:"dataValidation",get:function get(){return this._dataValidations.find(this.address);},set:function set(value){this._dataValidations.add(this.address,value);}// ========================================================================= |
|
|
// Model stuff |
|
|
},{key:"model",get:function get(){var model=this._value.model;model.style=this.style;if(this._comment){model.comment=this._comment.model;}return model;},set:function set(value){this._value.release();this._value=Value.create(value.type,this);this._value.model=value;if(value.comment){switch(value.comment.type){case'note':this._comment=Note.fromModel(value.comment);break;}}if(value.style){this.style=value.style;}else{this.style={};}}}]);return Cell;}();Cell.Types=Enums.ValueType;// ============================================================================= |
|
|
// Internal Value Types |
|
|
var NullValue=/*#__PURE__*/function(){function NullValue(cell){_classCallCheck(this,NullValue);this.model={address:cell.address,type:Cell.Types.Null};}_createClass(NullValue,[{key:"toCsvString",value:function toCsvString(){return'';}},{key:"release",value:function release(){}},{key:"toString",value:function toString(){return'';}},{key:"value",get:function get(){return null;},set:function set(value){// nothing to do |
|
|
}},{key:"type",get:function get(){return Cell.Types.Null;}},{key:"effectiveType",get:function get(){return Cell.Types.Null;}},{key:"address",get:function get(){return this.model.address;},set:function set(value){this.model.address=value;}}]);return NullValue;}();var NumberValue=/*#__PURE__*/function(){function NumberValue(cell,value){_classCallCheck(this,NumberValue);this.model={address:cell.address,type:Cell.Types.Number,value:value};}_createClass(NumberValue,[{key:"toCsvString",value:function toCsvString(){return this.model.value.toString();}},{key:"release",value:function release(){}},{key:"toString",value:function toString(){return this.model.value.toString();}},{key:"value",get:function get(){return this.model.value;},set:function set(value){this.model.value=value;}},{key:"type",get:function get(){return Cell.Types.Number;}},{key:"effectiveType",get:function get(){return Cell.Types.Number;}},{key:"address",get:function get(){return this.model.address;},set:function set(value){this.model.address=value;}}]);return NumberValue;}();var StringValue=/*#__PURE__*/function(){function StringValue(cell,value){_classCallCheck(this,StringValue);this.model={address:cell.address,type:Cell.Types.String,value:value};}_createClass(StringValue,[{key:"toCsvString",value:function toCsvString(){return"\"".concat(this.model.value.replace(/"/g,'""'),"\"");}},{key:"release",value:function release(){}},{key:"toString",value:function toString(){return this.model.value;}},{key:"value",get:function get(){return this.model.value;},set:function set(value){this.model.value=value;}},{key:"type",get:function get(){return Cell.Types.String;}},{key:"effectiveType",get:function get(){return Cell.Types.String;}},{key:"address",get:function get(){return this.model.address;},set:function set(value){this.model.address=value;}}]);return StringValue;}();var RichTextValue=/*#__PURE__*/function(){function RichTextValue(cell,value){_classCallCheck(this,RichTextValue);this.model={address:cell.address,type:Cell.Types.String,value:value};}_createClass(RichTextValue,[{key:"toString",value:function toString(){return this.model.value.richText.map(function(t){return t.text;}).join('');}},{key:"toCsvString",value:function toCsvString(){return"\"".concat(this.text.replace(/"/g,'""'),"\"");}},{key:"release",value:function release(){}},{key:"value",get:function get(){return this.model.value;},set:function set(value){this.model.value=value;}},{key:"type",get:function get(){return Cell.Types.RichText;}},{key:"effectiveType",get:function get(){return Cell.Types.RichText;}},{key:"address",get:function get(){return this.model.address;},set:function set(value){this.model.address=value;}}]);return RichTextValue;}();var DateValue=/*#__PURE__*/function(){function DateValue(cell,value){_classCallCheck(this,DateValue);this.model={address:cell.address,type:Cell.Types.Date,value:value};}_createClass(DateValue,[{key:"toCsvString",value:function toCsvString(){return this.model.value.toISOString();}},{key:"release",value:function release(){}},{key:"toString",value:function toString(){return this.model.value.toString();}},{key:"value",get:function get(){return this.model.value;},set:function set(value){this.model.value=value;}},{key:"type",get:function get(){return Cell.Types.Date;}},{key:"effectiveType",get:function get(){return Cell.Types.Date;}},{key:"address",get:function get(){return this.model.address;},set:function set(value){this.model.address=value;}}]);return DateValue;}();var HyperlinkValue=/*#__PURE__*/function(){function HyperlinkValue(cell,value){_classCallCheck(this,HyperlinkValue);this.model={address:cell.address,type:Cell.Types.Hyperlink,text:value?value.text:undefined,hyperlink:value?value.hyperlink:undefined};if(value&&value.tooltip){this.model.tooltip=value.tooltip;}}_createClass(HyperlinkValue,[{key:"toCsvString",value:function toCsvString(){return this.model.hyperlink;}},{key:"release",value:function release(){}},{key:"toString",value:function toString(){return this.model.text;}},{key:"value",get:function get(){var v={text:this.model.text,hyperlink:this.model.hyperlink};if(this.model.tooltip){v.tooltip=this.model.tooltip;}return v;},set:function set(value){this.model={text:value.text,hyperlink:value.hyperlink};if(value.tooltip){this.model.tooltip=value.tooltip;}}},{key:"text",get:function get(){return this.model.text;},set:function set(value){this.model.text=value;}/* |
|
|
get tooltip() { |
|
|
return this.model.tooltip; |
|
|
} |
|
|
set tooltip(value) { |
|
|
this.model.tooltip = value; |
|
|
} */},{key:"hyperlink",get:function get(){return this.model.hyperlink;},set:function set(value){this.model.hyperlink=value;}},{key:"type",get:function get(){return Cell.Types.Hyperlink;}},{key:"effectiveType",get:function get(){return Cell.Types.Hyperlink;}},{key:"address",get:function get(){return this.model.address;},set:function set(value){this.model.address=value;}}]);return HyperlinkValue;}();var MergeValue=/*#__PURE__*/function(){function MergeValue(cell,master){_classCallCheck(this,MergeValue);this.model={address:cell.address,type:Cell.Types.Merge,master:master?master.address:undefined};this._master=master;if(master){master.addMergeRef();}}_createClass(MergeValue,[{key:"isMergedTo",value:function isMergedTo(master){return master===this._master;}},{key:"toCsvString",value:function toCsvString(){return'';}},{key:"release",value:function release(){this._master.releaseMergeRef();}},{key:"toString",value:function toString(){return this.value.toString();}},{key:"value",get:function get(){return this._master.value;},set:function set(value){if(value instanceof Cell){if(this._master){this._master.releaseMergeRef();}value.addMergeRef();this._master=value;}else{this._master.value=value;}}},{key:"master",get:function get(){return this._master;}},{key:"type",get:function get(){return Cell.Types.Merge;}},{key:"effectiveType",get:function get(){return this._master.effectiveType;}},{key:"address",get:function get(){return this.model.address;},set:function set(value){this.model.address=value;}}]);return MergeValue;}();var FormulaValue=/*#__PURE__*/function(){function FormulaValue(cell,value){_classCallCheck(this,FormulaValue);this.cell=cell;this.model={address:cell.address,type:Cell.Types.Formula,shareType:value?value.shareType:undefined,ref:value?value.ref:undefined,formula:value?value.formula:undefined,sharedFormula:value?value.sharedFormula:undefined,result:value?value.result:undefined};}_createClass(FormulaValue,[{key:"_copyModel",value:function _copyModel(model){var copy={};var cp=function cp(name){var value=model[name];if(value){copy[name]=value;}};cp('formula');cp('result');cp('ref');cp('shareType');cp('sharedFormula');return copy;}},{key:"validate",value:function validate(value){switch(Value.getType(value)){case Cell.Types.Null:case Cell.Types.String:case Cell.Types.Number:case Cell.Types.Date:break;case Cell.Types.Hyperlink:case Cell.Types.Formula:default:throw new Error('Cannot process that type of result value');}}},{key:"_getTranslatedFormula",value:function _getTranslatedFormula(){if(!this._translatedFormula&&this.model.sharedFormula){var worksheet=this.cell.worksheet;var master=worksheet.findCell(this.model.sharedFormula);this._translatedFormula=master&&slideFormula(master.formula,master.address,this.model.address);}return this._translatedFormula;}},{key:"toCsvString",value:function toCsvString(){return"".concat(this.model.result||'');}},{key:"release",value:function release(){}},{key:"toString",value:function toString(){return this.model.result?this.model.result.toString():'';}},{key:"value",get:function get(){return this._copyModel(this.model);},set:function set(value){this.model=this._copyModel(value);}},{key:"dependencies",get:function get(){// find all the ranges and cells mentioned in the formula |
|
|
var ranges=this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g);var cells=this.formula.replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g,'').match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}/g);return{ranges:ranges,cells:cells};}},{key:"formula",get:function get(){return this.model.formula||this._getTranslatedFormula();},set:function set(value){this.model.formula=value;}},{key:"formulaType",get:function get(){if(this.model.formula){return Enums.FormulaType.Master;}if(this.model.sharedFormula){return Enums.FormulaType.Shared;}return Enums.FormulaType.None;}},{key:"result",get:function get(){return this.model.result;},set:function set(value){this.model.result=value;}},{key:"type",get:function get(){return Cell.Types.Formula;}},{key:"effectiveType",get:function get(){var v=this.model.result;if(v===null||v===undefined){return Enums.ValueType.Null;}if(v instanceof String||typeof v==='string'){return Enums.ValueType.String;}if(typeof v==='number'){return Enums.ValueType.Number;}if(v instanceof Date){return Enums.ValueType.Date;}if(v.text&&v.hyperlink){return Enums.ValueType.Hyperlink;}if(v.formula){return Enums.ValueType.Formula;}return Enums.ValueType.Null;}},{key:"address",get:function get(){return this.model.address;},set:function set(value){this.model.address=value;}}]);return FormulaValue;}();var SharedStringValue=/*#__PURE__*/function(){function SharedStringValue(cell,value){_classCallCheck(this,SharedStringValue);this.model={address:cell.address,type:Cell.Types.SharedString,value:value};}_createClass(SharedStringValue,[{key:"toCsvString",value:function toCsvString(){return this.model.value.toString();}},{key:"release",value:function release(){}},{key:"toString",value:function toString(){return this.model.value.toString();}},{key:"value",get:function get(){return this.model.value;},set:function set(value){this.model.value=value;}},{key:"type",get:function get(){return Cell.Types.SharedString;}},{key:"effectiveType",get:function get(){return Cell.Types.SharedString;}},{key:"address",get:function get(){return this.model.address;},set:function set(value){this.model.address=value;}}]);return SharedStringValue;}();var BooleanValue=/*#__PURE__*/function(){function BooleanValue(cell,value){_classCallCheck(this,BooleanValue);this.model={address:cell.address,type:Cell.Types.Boolean,value:value};}_createClass(BooleanValue,[{key:"toCsvString",value:function toCsvString(){return this.model.value?1:0;}},{key:"release",value:function release(){}},{key:"toString",value:function toString(){return this.model.value.toString();}},{key:"value",get:function get(){return this.model.value;},set:function set(value){this.model.value=value;}},{key:"type",get:function get(){return Cell.Types.Boolean;}},{key:"effectiveType",get:function get(){return Cell.Types.Boolean;}},{key:"address",get:function get(){return this.model.address;},set:function set(value){this.model.address=value;}}]);return BooleanValue;}();var ErrorValue=/*#__PURE__*/function(){function ErrorValue(cell,value){_classCallCheck(this,ErrorValue);this.model={address:cell.address,type:Cell.Types.Error,value:value};}_createClass(ErrorValue,[{key:"toCsvString",value:function toCsvString(){return this.toString();}},{key:"release",value:function release(){}},{key:"toString",value:function toString(){return this.model.value.error.toString();}},{key:"value",get:function get(){return this.model.value;},set:function set(value){this.model.value=value;}},{key:"type",get:function get(){return Cell.Types.Error;}},{key:"effectiveType",get:function get(){return Cell.Types.Error;}},{key:"address",get:function get(){return this.model.address;},set:function set(value){this.model.address=value;}}]);return ErrorValue;}();var JSONValue=/*#__PURE__*/function(){function JSONValue(cell,value){_classCallCheck(this,JSONValue);this.model={address:cell.address,type:Cell.Types.String,value:JSON.stringify(value),rawValue:value};}_createClass(JSONValue,[{key:"toCsvString",value:function toCsvString(){return this.model.value;}},{key:"release",value:function release(){}},{key:"toString",value:function toString(){return this.model.value;}},{key:"value",get:function get(){return this.model.rawValue;},set:function set(value){this.model.rawValue=value;this.model.value=JSON.stringify(value);}},{key:"type",get:function get(){return Cell.Types.String;}},{key:"effectiveType",get:function get(){return Cell.Types.String;}},{key:"address",get:function get(){return this.model.address;},set:function set(value){this.model.address=value;}}]);return JSONValue;}();// Value is a place to hold common static Value type functions |
|
|
var Value={getType:function getType(value){if(value===null||value===undefined){return Cell.Types.Null;}if(value instanceof String||typeof value==='string'){return Cell.Types.String;}if(typeof value==='number'){return Cell.Types.Number;}if(typeof value==='boolean'){return Cell.Types.Boolean;}if(value instanceof Date){return Cell.Types.Date;}if(value.text&&value.hyperlink){return Cell.Types.Hyperlink;}if(value.formula||value.sharedFormula){return Cell.Types.Formula;}if(value.richText){return Cell.Types.RichText;}if(value.sharedString){return Cell.Types.SharedString;}if(value.error){return Cell.Types.Error;}return Cell.Types.JSON;},// map valueType to constructor |
|
|
types:[{t:Cell.Types.Null,f:NullValue},{t:Cell.Types.Number,f:NumberValue},{t:Cell.Types.String,f:StringValue},{t:Cell.Types.Date,f:DateValue},{t:Cell.Types.Hyperlink,f:HyperlinkValue},{t:Cell.Types.Formula,f:FormulaValue},{t:Cell.Types.Merge,f:MergeValue},{t:Cell.Types.JSON,f:JSONValue},{t:Cell.Types.SharedString,f:SharedStringValue},{t:Cell.Types.RichText,f:RichTextValue},{t:Cell.Types.Boolean,f:BooleanValue},{t:Cell.Types.Error,f:ErrorValue}].reduce(function(p,t){p[t.t]=t.f;return p;},[]),create:function create(type,cell,value){var T=this.types[type];if(!T){throw new Error("Could not create Value of type ".concat(type));}return new T(cell,value);}};module.exports=Cell;},{"../utils/col-cache":17,"../utils/shared-formula":20,"../utils/under-dash":23,"./enums":7,"./note":9}],4:[function(require,module,exports){'use strict';function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}var _=require('../utils/under-dash');var Enums=require('./enums');var colCache=require('../utils/col-cache');var DEFAULT_COLUMN_WIDTH=9;// Column defines the column properties for 1 column. |
|
|
// This includes header rows, widths, key, (style), etc. |
|
|
// Worksheet will condense the columns as appropriate during serialization |
|
|
var Column=/*#__PURE__*/function(){function Column(worksheet,number,defn){_classCallCheck(this,Column);this._worksheet=worksheet;this._number=number;if(defn!==false){// sometimes defn will follow |
|
|
this.defn=defn;}}_createClass(Column,[{key:"toString",value:function toString(){return JSON.stringify({key:this.key,width:this.width,headers:this.headers.length?this.headers:undefined});}},{key:"equivalentTo",value:function equivalentTo(other){return this.width===other.width&&this.hidden===other.hidden&&this.outlineLevel===other.outlineLevel&&_.isEqual(this.style,other.style);}},{key:"eachCell",value:function eachCell(options,iteratee){var colNumber=this.number;if(!iteratee){iteratee=options;options=null;}this._worksheet.eachRow(options,function(row,rowNumber){iteratee(row.getCell(colNumber),rowNumber);});}},{key:"_applyStyle",// ========================================================================= |
|
|
// styles |
|
|
value:function _applyStyle(name,value){this.style[name]=value;this.eachCell(function(cell){cell[name]=value;});return value;}},{key:"number",get:function get(){return this._number;}},{key:"worksheet",get:function get(){return this._worksheet;}},{key:"letter",get:function get(){return colCache.n2l(this._number);}},{key:"isCustomWidth",get:function get(){return this.width!==undefined&&this.width!==DEFAULT_COLUMN_WIDTH;}},{key:"defn",get:function get(){return{header:this._header,key:this.key,width:this.width,style:this.style,hidden:this.hidden,outlineLevel:this.outlineLevel};},set:function set(value){if(value){this.key=value.key;this.width=value.width!==undefined?value.width:DEFAULT_COLUMN_WIDTH;this.outlineLevel=value.outlineLevel;if(value.style){this.style=value.style;}else{this.style={};}// headers must be set after style |
|
|
this.header=value.header;this._hidden=!!value.hidden;}else{delete this._header;delete this._key;delete this.width;this.style={};this.outlineLevel=0;}}},{key:"headers",get:function get(){return this._header&&this._header instanceof Array?this._header:[this._header];}},{key:"header",get:function get(){return this._header;},set:function set(value){var _this=this;if(value!==undefined){this._header=value;this.headers.forEach(function(text,index){_this._worksheet.getCell(index+1,_this.number).value=text;});}else{this._header=undefined;}}},{key:"key",get:function get(){return this._key;},set:function set(value){var column=this._key&&this._worksheet.getColumnKey(this._key);if(column===this){this._worksheet.deleteColumnKey(this._key);}this._key=value;if(value){this._worksheet.setColumnKey(this._key,this);}}},{key:"hidden",get:function get(){return!!this._hidden;},set:function set(value){this._hidden=value;}},{key:"outlineLevel",get:function get(){return this._outlineLevel||0;},set:function set(value){this._outlineLevel=value;}},{key:"collapsed",get:function get(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelCol);}},{key:"isDefault",get:function get(){if(this.isCustomWidth){return false;}if(this.hidden){return false;}if(this.outlineLevel){return false;}var s=this.style;if(s&&(s.font||s.numFmt||s.alignment||s.border||s.fill||s.protection)){return false;}return true;}},{key:"headerCount",get:function get(){return this.headers.length;}},{key:"values",get:function get(){var v=[];this.eachCell(function(cell,rowNumber){if(cell&&cell.type!==Enums.ValueType.Null){v[rowNumber]=cell.value;}});return v;},set:function set(v){var _this2=this;if(!v){return;}var colNumber=this.number;var offset=0;if(v.hasOwnProperty('0')){// assume contiguous array, start at row 1 |
|
|
offset=1;}v.forEach(function(value,index){_this2._worksheet.getCell(index+offset,colNumber).value=value;});}},{key:"numFmt",get:function get(){return this.style.numFmt;},set:function set(value){this._applyStyle('numFmt',value);}},{key:"font",get:function get(){return this.style.font;},set:function set(value){this._applyStyle('font',value);}},{key:"alignment",get:function get(){return this.style.alignment;},set:function set(value){this._applyStyle('alignment',value);}},{key:"protection",get:function get(){return this.style.protection;},set:function set(value){this._applyStyle('protection',value);}},{key:"border",get:function get(){return this.style.border;},set:function set(value){this._applyStyle('border',value);}},{key:"fill",get:function get(){return this.style.fill;},set:function set(value){this._applyStyle('fill',value);}// ============================================================================= |
|
|
// static functions |
|
|
}],[{key:"toModel",value:function toModel(columns){// Convert array of Column into compressed list cols |
|
|
var cols=[];var col=null;if(columns){columns.forEach(function(column,index){if(column.isDefault){if(col){col=null;}}else if(!col||!column.equivalentTo(col)){col={min:index+1,max:index+1,width:column.width!==undefined?column.width:DEFAULT_COLUMN_WIDTH,style:column.style,isCustomWidth:column.isCustomWidth,hidden:column.hidden,outlineLevel:column.outlineLevel,collapsed:column.collapsed};cols.push(col);}else{col.max=index+1;}});}return cols.length?cols:undefined;}},{key:"fromModel",value:function fromModel(worksheet,cols){cols=cols||[];var columns=[];var count=1;var index=0;while(index<cols.length){var col=cols[index++];while(count<col.min){columns.push(new Column(worksheet,count++));}while(count<=col.max){columns.push(new Column(worksheet,count++,col));}}return columns.length?columns:null;}}]);return Column;}();module.exports=Column;},{"../utils/col-cache":17,"../utils/under-dash":23,"./enums":7}],5:[function(require,module,exports){"use strict";function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}var DataValidations=/*#__PURE__*/function(){function DataValidations(model){_classCallCheck(this,DataValidations);this.model=model||{};}_createClass(DataValidations,[{key:"add",value:function add(address,validation){return this.model[address]=validation;}},{key:"find",value:function find(address){return this.model[address];}},{key:"remove",value:function remove(address){this.model[address]=undefined;}}]);return DataValidations;}();module.exports=DataValidations;},{}],6:[function(require,module,exports){'use strict';function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}var _=require('../utils/under-dash');var colCache=require('../utils/col-cache');var CellMatrix=require('../utils/cell-matrix');var Range=require('./range');var rangeRegexp=/[$](\w+)[$](\d+)(:[$](\w+)[$](\d+))?/;var DefinedNames=/*#__PURE__*/function(){function DefinedNames(){_classCallCheck(this,DefinedNames);this.matrixMap={};}_createClass(DefinedNames,[{key:"getMatrix",value:function getMatrix(name){var matrix=this.matrixMap[name]||(this.matrixMap[name]=new CellMatrix());return matrix;}// add a name to a cell. locStr in the form SheetName!$col$row or SheetName!$c1$r1:$c2:$r2 |
|
|
},{key:"add",value:function add(locStr,name){var location=colCache.decodeEx(locStr);this.addEx(location,name);}},{key:"addEx",value:function addEx(location,name){var matrix=this.getMatrix(name);if(location.top){for(var col=location.left;col<=location.right;col++){for(var row=location.top;row<=location.bottom;row++){var address={sheetName:location.sheetName,address:colCache.n2l(col)+row,row:row,col:col};matrix.addCellEx(address);}}}else{matrix.addCellEx(location);}}},{key:"remove",value:function remove(locStr,name){var location=colCache.decodeEx(locStr);this.removeEx(location,name);}},{key:"removeEx",value:function removeEx(location,name){var matrix=this.getMatrix(name);matrix.removeCellEx(location);}},{key:"removeAllNames",value:function removeAllNames(location){_.each(this.matrixMap,function(matrix){matrix.removeCellEx(location);});}},{key:"forEach",value:function forEach(callback){_.each(this.matrixMap,function(matrix,name){matrix.forEach(function(cell){callback(name,cell);});});}// get all the names of a cell |
|
|
},{key:"getNames",value:function getNames(addressStr){return this.getNamesEx(colCache.decodeEx(addressStr));}},{key:"getNamesEx",value:function getNamesEx(address){return _.map(this.matrixMap,function(matrix,name){return matrix.findCellEx(address)&&name;}).filter(Boolean);}},{key:"_explore",value:function _explore(matrix,cell){cell.mark=false;var sheetName=cell.sheetName;var range=new Range(cell.row,cell.col,cell.row,cell.col,sheetName);var x;var y;// grow vertical - only one col to worry about |
|
|
function vGrow(yy,edge){var c=matrix.findCellAt(sheetName,yy,cell.col);if(!c||!c.mark){return false;}range[edge]=yy;c.mark=false;return true;}for(y=cell.row-1;vGrow(y,'top');y--){;}for(y=cell.row+1;vGrow(y,'bottom');y++){;}// grow horizontal - ensure all rows can grow |
|
|
function hGrow(xx,edge){var cells=[];for(y=range.top;y<=range.bottom;y++){var c=matrix.findCellAt(sheetName,y,xx);if(c&&c.mark){cells.push(c);}else{return false;}}range[edge]=xx;for(var i=0;i<cells.length;i++){cells[i].mark=false;}return true;}for(x=cell.col-1;hGrow(x,'left');x--){;}for(x=cell.col+1;hGrow(x,'right');x++){;}return range;}},{key:"getRanges",value:function getRanges(name,matrix){var _this=this;matrix=matrix||this.matrixMap[name];if(!matrix){return{name:name,ranges:[]};}// mark and sweep! |
|
|
matrix.forEach(function(cell){cell.mark=true;});var ranges=matrix.map(function(cell){return cell.mark&&_this._explore(matrix,cell);}).filter(Boolean).map(function(range){return range.$shortRange;});return{name:name,ranges:ranges};}},{key:"normaliseMatrix",value:function normaliseMatrix(matrix,sheetName){// some of the cells might have shifted on specified sheet |
|
|
// need to reassign rows, cols |
|
|
matrix.forEachInSheet(sheetName,function(cell,row,col){if(cell){if(cell.row!==row||cell.col!==col){cell.row=row;cell.col=col;cell.address=colCache.n2l(col)+row;}}});}},{key:"spliceRows",value:function spliceRows(sheetName,start,numDelete,numInsert){var _this2=this;_.each(this.matrixMap,function(matrix){matrix.spliceRows(sheetName,start,numDelete,numInsert);_this2.normaliseMatrix(matrix,sheetName);});}},{key:"spliceColumns",value:function spliceColumns(sheetName,start,numDelete,numInsert){var _this3=this;_.each(this.matrixMap,function(matrix){matrix.spliceColumns(sheetName,start,numDelete,numInsert);_this3.normaliseMatrix(matrix,sheetName);});}},{key:"model",get:function get(){var _this4=this;// To get names per cell - just iterate over all names finding cells if they exist |
|
|
return _.map(this.matrixMap,function(matrix,name){return _this4.getRanges(name,matrix);}).filter(function(definedName){return definedName.ranges.length;});},set:function set(value){// value is [ { name, ranges }, ... ] |
|
|
var matrixMap=this.matrixMap={};value.forEach(function(definedName){var matrix=matrixMap[definedName.name]=new CellMatrix();definedName.ranges.forEach(function(rangeStr){if(rangeRegexp.test(rangeStr.split('!').pop()||'')){matrix.addCell(rangeStr);}});});}}]);return DefinedNames;}();module.exports=DefinedNames;},{"../utils/cell-matrix":16,"../utils/col-cache":17,"../utils/under-dash":23,"./range":10}],7:[function(require,module,exports){'use strict';module.exports={ValueType:{Null:0,Merge:1,Number:2,String:3,Date:4,Hyperlink:5,Formula:6,SharedString:7,RichText:8,Boolean:9,Error:10},FormulaType:{None:0,Master:1,Shared:2},RelationshipType:{None:0,OfficeDocument:1,Worksheet:2,CalcChain:3,SharedStrings:4,Styles:5,Theme:6,Hyperlink:7},DocumentType:{Xlsx:1},ReadingOrder:{LeftToRight:1,RightToLeft:2},ErrorValue:{NotApplicable:'#N/A',Ref:'#REF!',Name:'#NAME?',DivZero:'#DIV/0!',Null:'#NULL!',Value:'#VALUE!',Num:'#NUM!'}};},{}],8:[function(require,module,exports){"use strict";function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}var colCache=require('../utils/col-cache');var Anchor=require('./anchor');var Image=/*#__PURE__*/function(){function Image(worksheet,model){_classCallCheck(this,Image);this.worksheet=worksheet;this.model=model;}_createClass(Image,[{key:"model",get:function get(){switch(this.type){case'background':return{type:this.type,imageId:this.imageId};case'image':return{type:this.type,imageId:this.imageId,hyperlinks:this.range.hyperlinks,range:{tl:this.range.tl.model,br:this.range.br&&this.range.br.model,ext:this.range.ext,editAs:this.range.editAs}};default:throw new Error('Invalid Image Type');}},set:function set(_ref){var type=_ref.type,imageId=_ref.imageId,range=_ref.range,hyperlinks=_ref.hyperlinks;this.type=type;this.imageId=imageId;if(type==='image'){if(typeof range==='string'){var decoded=colCache.decode(range);this.range={tl:new Anchor(this.worksheet,{col:decoded.left,row:decoded.top},-1),br:new Anchor(this.worksheet,{col:decoded.right,row:decoded.bottom},0),editAs:'oneCell'};}else{this.range={tl:new Anchor(this.worksheet,range.tl,0),br:range.br&&new Anchor(this.worksheet,range.br,0),ext:range.ext,editAs:range.editAs,hyperlinks:hyperlinks||range.hyperlinks};}}}}]);return Image;}();module.exports=Image;},{"../utils/col-cache":17,"./anchor":2}],9:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}var _=require('../utils/under-dash');var Note=/*#__PURE__*/function(){function Note(note){_classCallCheck(this,Note);this.note=note;}_createClass(Note,[{key:"model",get:function get(){var value=null;switch(_typeof(this.note)){case'string':value={type:'note',note:{texts:[{text:this.note}]}};break;default:value={type:'note',note:this.note};break;}// Suitable for all cell comments |
|
|
return _.deepMerge({},Note.DEFAULT_CONFIGS,value);},set:function set(value){var note=value.note;var texts=note.texts;if(texts.length===1&&Object.keys(texts[0]).length===1){this.note=texts[0].text;}else{this.note=note;}}}],[{key:"fromModel",value:function fromModel(model){var note=new Note();note.model=model;return note;}}]);return Note;}();Note.DEFAULT_CONFIGS={note:{margins:{insetmode:'auto',inset:[0.13,0.13,0.25,0.25]},protection:{locked:'True',lockText:'True'},editAs:'absolute'}};module.exports=Note;},{"../utils/under-dash":23}],10:[function(require,module,exports){"use strict";function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}var colCache=require('./../utils/col-cache');// used by worksheet to calculate sheet dimensions |
|
|
var Range=/*#__PURE__*/function(){function Range(){_classCallCheck(this,Range);this.decode(arguments);}_createClass(Range,[{key:"setTLBR",value:function setTLBR(t,l,b,r,s){if(arguments.length<4){// setTLBR(tl, br, s) |
|
|
var tl=colCache.decodeAddress(t);var br=colCache.decodeAddress(l);this.model={top:Math.min(tl.row,br.row),left:Math.min(tl.col,br.col),bottom:Math.max(tl.row,br.row),right:Math.max(tl.col,br.col),sheetName:b};this.setTLBR(tl.row,tl.col,br.row,br.col,s);}else{// setTLBR(t, l, b, r, s) |
|
|
this.model={top:Math.min(t,b),left:Math.min(l,r),bottom:Math.max(t,b),right:Math.max(l,r),sheetName:s};}}},{key:"decode",value:function decode(argv){switch(argv.length){case 5:// [t,l,b,r,s] |
|
|
this.setTLBR(argv[0],argv[1],argv[2],argv[3],argv[4]);break;case 4:// [t,l,b,r] |
|
|
this.setTLBR(argv[0],argv[1],argv[2],argv[3]);break;case 3:// [tl,br,s] |
|
|
this.setTLBR(argv[0],argv[1],argv[2]);break;case 2:// [tl,br] |
|
|
this.setTLBR(argv[0],argv[1]);break;case 1:{var value=argv[0];if(value instanceof Range){// copy constructor |
|
|
this.model={top:value.model.top,left:value.model.left,bottom:value.model.bottom,right:value.model.right,sheetName:value.sheetName};}else if(value instanceof Array){// an arguments array |
|
|
this.decode(value);}else if(value.top&&value.left&&value.bottom&&value.right){// a model |
|
|
this.model={top:value.top,left:value.left,bottom:value.bottom,right:value.right,sheetName:value.sheetName};}else{// [sheetName!]tl:br |
|
|
var tlbr=colCache.decodeEx(value);if(tlbr.top){this.model={top:tlbr.top,left:tlbr.left,bottom:tlbr.bottom,right:tlbr.right,sheetName:tlbr.sheetName};}else{this.model={top:tlbr.row,left:tlbr.col,bottom:tlbr.row,right:tlbr.col,sheetName:tlbr.sheetName};}}break;}case 0:this.model={top:0,left:0,bottom:0,right:0};break;default:throw new Error("Invalid number of arguments to _getDimensions() - ".concat(argv.length));}}},{key:"expand",value:function expand(top,left,bottom,right){if(!this.model.top||top<this.top)this.top=top;if(!this.model.left||left<this.left)this.left=left;if(!this.model.bottom||bottom>this.bottom)this.bottom=bottom;if(!this.model.right||right>this.right)this.right=right;}},{key:"expandRow",value:function expandRow(row){if(row){var dimensions=row.dimensions,number=row.number;if(dimensions){this.expand(number,dimensions.min,number,dimensions.max);}}}},{key:"expandToAddress",value:function expandToAddress(addressStr){var address=colCache.decodeEx(addressStr);this.expand(address.row,address.col,address.row,address.col);}},{key:"toString",value:function toString(){return this.range;}},{key:"intersects",value:function intersects(other){if(other.sheetName&&this.sheetName&&other.sheetName!==this.sheetName)return false;if(other.bottom<this.top)return false;if(other.top>this.bottom)return false;if(other.right<this.left)return false;if(other.left>this.right)return false;return true;}},{key:"contains",value:function contains(addressStr){var address=colCache.decodeEx(addressStr);return this.containsEx(address);}},{key:"containsEx",value:function containsEx(address){if(address.sheetName&&this.sheetName&&address.sheetName!==this.sheetName)return false;return address.row>=this.top&&address.row<=this.bottom&&address.col>=this.left&&address.col<=this.right;}},{key:"forEachAddress",value:function forEachAddress(cb){for(var col=this.left;col<=this.right;col++){for(var row=this.top;row<=this.bottom;row++){cb(colCache.encodeAddress(row,col),row,col);}}}},{key:"top",get:function get(){return this.model.top||1;},set:function set(value){this.model.top=value;}},{key:"left",get:function get(){return this.model.left||1;},set:function set(value){this.model.left=value;}},{key:"bottom",get:function get(){return this.model.bottom||1;},set:function set(value){this.model.bottom=value;}},{key:"right",get:function get(){return this.model.right||1;},set:function set(value){this.model.right=value;}},{key:"sheetName",get:function get(){return this.model.sheetName;},set:function set(value){this.model.sheetName=value;}},{key:"_serialisedSheetName",get:function get(){var sheetName=this.model.sheetName;if(sheetName){if(/^[a-zA-Z0-9]*$/.test(sheetName)){return"".concat(sheetName,"!");}return"'".concat(sheetName,"'!");}return'';}},{key:"tl",get:function get(){return colCache.n2l(this.left)+this.top;}},{key:"$t$l",get:function get(){return"$".concat(colCache.n2l(this.left),"$").concat(this.top);}},{key:"br",get:function get(){return colCache.n2l(this.right)+this.bottom;}},{key:"$b$r",get:function get(){return"$".concat(colCache.n2l(this.right),"$").concat(this.bottom);}},{key:"range",get:function get(){return"".concat(this._serialisedSheetName+this.tl,":").concat(this.br);}},{key:"$range",get:function get(){return"".concat(this._serialisedSheetName+this.$t$l,":").concat(this.$b$r);}},{key:"shortRange",get:function get(){return this.count>1?this.range:this._serialisedSheetName+this.tl;}},{key:"$shortRange",get:function get(){return this.count>1?this.$range:this._serialisedSheetName+this.$t$l;}},{key:"count",get:function get(){return(1+this.bottom-this.top)*(1+this.right-this.left);}}]);return Range;}();module.exports=Range;},{"./../utils/col-cache":17}],11:[function(require,module,exports){'use strict';function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}var _=require('../utils/under-dash');var Enums=require('./enums');var colCache=require('../utils/col-cache');var Cell=require('./cell');var Row=/*#__PURE__*/function(){function Row(worksheet,number){_classCallCheck(this,Row);this._worksheet=worksheet;this._number=number;this._cells=[];this.style={};this.outlineLevel=0;}// return the row number |
|
|
_createClass(Row,[{key:"commit",// Inform Streaming Writer that this row (and all rows before it) are complete |
|
|
// and ready to write. Has no effect on Worksheet document |
|
|
value:function commit(){this._worksheet._commitRow(this);// eslint-disable-line no-underscore-dangle |
|
|
}// helps GC by breaking cyclic references |
|
|
},{key:"destroy",value:function destroy(){delete this._worksheet;delete this._cells;delete this.style;}},{key:"findCell",value:function findCell(colNumber){return this._cells[colNumber-1];}// given {address, row, col}, find or create new cell |
|
|
},{key:"getCellEx",value:function getCellEx(address){var cell=this._cells[address.col-1];if(!cell){var column=this._worksheet.getColumn(address.col);cell=new Cell(this,column,address.address);this._cells[address.col-1]=cell;}return cell;}// get cell by key, letter or column number |
|
|
},{key:"getCell",value:function getCell(col){if(typeof col==='string'){// is it a key? |
|
|
var column=this._worksheet.getColumnKey(col);if(column){col=column.number;}else{col=colCache.l2n(col);}}return this._cells[col-1]||this.getCellEx({address:colCache.encodeAddress(this._number,col),row:this._number,col:col});}// remove cell(s) and shift all higher cells down by count |
|
|
},{key:"splice",value:function splice(start,count){var nKeep=start+count;for(var _len=arguments.length,inserts=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++){inserts[_key-2]=arguments[_key];}var nExpand=inserts.length-count;var nEnd=this._cells.length;var i;var cSrc;var cDst;if(nExpand<0){// remove cells |
|
|
for(i=start+inserts.length;i<=nEnd;i++){cDst=this._cells[i-1];cSrc=this._cells[i-nExpand-1];if(cSrc){cDst=this.getCell(i);cDst.value=cSrc.value;cDst.style=cSrc.style;}else if(cDst){cDst.value=null;cDst.style={};}}}else if(nExpand>0){// insert new cells |
|
|
for(i=nEnd;i>=nKeep;i--){cSrc=this._cells[i-1];if(cSrc){cDst=this.getCell(i+nExpand);cDst.value=cSrc.value;cDst.style=cSrc.style;}else{this._cells[i+nExpand-1]=undefined;}}}// now add the new values |
|
|
for(i=0;i<inserts.length;i++){cDst=this.getCell(start+i);cDst.value=inserts[i];cDst.style={};}}// Iterate over all non-null cells in this row |
|
|
},{key:"eachCell",value:function eachCell(options,iteratee){if(!iteratee){iteratee=options;options=null;}if(options&&options.includeEmpty){var n=this._cells.length;for(var i=1;i<=n;i++){iteratee(this.getCell(i),i);}}else{this._cells.forEach(function(cell,index){if(cell&&cell.type!==Enums.ValueType.Null){iteratee(cell,index+1);}});}}// =========================================================================== |
|
|
// Page Breaks |
|
|
},{key:"addPageBreak",value:function addPageBreak(lft,rght){var ws=this._worksheet;var left=Math.max(0,lft-1)||0;var right=Math.max(0,rght-1)||16838;var pb={id:this._number,max:right,man:1};if(left)pb.min=left;ws.rowBreaks.push(pb);}// return a sparse array of cell values |
|
|
},{key:"_applyStyle",// ========================================================================= |
|
|
// styles |
|
|
value:function _applyStyle(name,value){this.style[name]=value;this._cells.forEach(function(cell){if(cell){cell[name]=value;}});return value;}},{key:"number",get:function get(){return this._number;}},{key:"worksheet",get:function get(){return this._worksheet;}},{key:"values",get:function get(){var values=[];this._cells.forEach(function(cell){if(cell&&cell.type!==Enums.ValueType.Null){values[cell.col]=cell.value;}});return values;}// set the values by contiguous or sparse array, or by key'd object literal |
|
|
,set:function set(value){var _this=this;// this operation is not additive - any prior cells are removed |
|
|
this._cells=[];if(!value){// empty row |
|
|
}else if(value instanceof Array){var offset=0;if(value.hasOwnProperty('0')){// contiguous array - start at column 1 |
|
|
offset=1;}value.forEach(function(item,index){if(item!==undefined){_this.getCellEx({address:colCache.encodeAddress(_this._number,index+offset),row:_this._number,col:index+offset}).value=item;}});}else{// assume object with column keys |
|
|
this._worksheet.eachColumnKey(function(column,key){if(value[key]!==undefined){_this.getCellEx({address:colCache.encodeAddress(_this._number,column.number),row:_this._number,col:column.number}).value=value[key];}});}}// returns true if the row includes at least one cell with a value |
|
|
},{key:"hasValues",get:function get(){return _.some(this._cells,function(cell){return cell&&cell.type!==Enums.ValueType.Null;});}},{key:"cellCount",get:function get(){return this._cells.length;}},{key:"actualCellCount",get:function get(){var count=0;this.eachCell(function(){count++;});return count;}// get the min and max column number for the non-null cells in this row or null |
|
|
},{key:"dimensions",get:function get(){var min=0;var max=0;this._cells.forEach(function(cell){if(cell&&cell.type!==Enums.ValueType.Null){if(!min||min>cell.col){min=cell.col;}if(max<cell.col){max=cell.col;}}});return min>0?{min:min,max:max}:null;}},{key:"numFmt",get:function get(){return this.style.numFmt;},set:function set(value){this._applyStyle('numFmt',value);}},{key:"font",get:function get(){return this.style.font;},set:function set(value){this._applyStyle('font',value);}},{key:"alignment",get:function get(){return this.style.alignment;},set:function set(value){this._applyStyle('alignment',value);}},{key:"protection",get:function get(){return this.style.protection;},set:function set(value){this._applyStyle('protection',value);}},{key:"border",get:function get(){return this.style.border;},set:function set(value){this._applyStyle('border',value);}},{key:"fill",get:function get(){return this.style.fill;},set:function set(value){this._applyStyle('fill',value);}},{key:"hidden",get:function get(){return!!this._hidden;},set:function set(value){this._hidden=value;}},{key:"outlineLevel",get:function get(){return this._outlineLevel||0;},set:function set(value){this._outlineLevel=value;}},{key:"collapsed",get:function get(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelRow);}// ========================================================================= |
|
|
},{key:"model",get:function get(){var cells=[];var min=0;var max=0;this._cells.forEach(function(cell){if(cell){var cellModel=cell.model;if(cellModel){if(!min||min>cell.col){min=cell.col;}if(max<cell.col){max=cell.col;}cells.push(cellModel);}}});return this.height||cells.length?{cells:cells,number:this.number,min:min,max:max,height:this.height,style:this.style,hidden:this.hidden,outlineLevel:this.outlineLevel,collapsed:this.collapsed}:null;},set:function set(value){var _this2=this;if(value.number!==this._number){throw new Error('Invalid row number in model');}this._cells=[];var previousAddress;value.cells.forEach(function(cellModel){switch(cellModel.type){case Cell.Types.Merge:// special case - don't add this types |
|
|
break;default:{var address;if(cellModel.address){address=colCache.decodeAddress(cellModel.address);}else if(previousAddress){// This is a <c> element without an r attribute |
|
|
// Assume that it's the cell for the next column |
|
|
var _previousAddress=previousAddress,row=_previousAddress.row;var col=previousAddress.col+1;address={row:row,col:col,address:colCache.encodeAddress(row,col),$col$row:"$".concat(colCache.n2l(col),"$").concat(row)};}previousAddress=address;var cell=_this2.getCellEx(address);cell.model=cellModel;break;}}});if(value.height){this.height=value.height;}else{delete this.height;}this.hidden=value.hidden;this.outlineLevel=value.outlineLevel||0;this.style=value.style&&JSON.parse(JSON.stringify(value.style))||{};}}]);return Row;}();module.exports=Row;},{"../utils/col-cache":17,"../utils/under-dash":23,"./cell":3,"./enums":7}],12:[function(require,module,exports){"use strict";function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}/* eslint-disable max-classes-per-file */var colCache=require('./../utils/col-cache');var Column=/*#__PURE__*/function(){// wrapper around column model, allowing access and manipulation |
|
|
function Column(table,column,index){_classCallCheck(this,Column);this.table=table;this.column=column;this.index=index;}_createClass(Column,[{key:"_set",value:function _set(name,value){this.table.cacheState();this.column[name]=value;}/* eslint-disable lines-between-class-members */},{key:"name",get:function get(){return this.column.name;},set:function set(value){this._set('name',value);}},{key:"filterButton",get:function get(){return this.column.filterButton;},set:function set(value){this.column.filterButton=value;}},{key:"style",get:function get(){return this.column.style;},set:function set(value){this.column.style=value;}},{key:"totalsRowLabel",get:function get(){return this.column.totalsRowLabel;},set:function set(value){this._set('totalsRowLabel',value);}},{key:"totalsRowFunction",get:function get(){return this.column.totalsRowFunction;},set:function set(value){this._set('totalsRowFunction',value);}},{key:"totalsRowResult",get:function get(){return this.column.totalsRowResult;},set:function set(value){this._set('totalsRowResult',value);}},{key:"totalsRowFormula",get:function get(){return this.column.totalsRowFormula;},set:function set(value){this._set('totalsRowFormula',value);}/* eslint-enable lines-between-class-members */}]);return Column;}();var Table=/*#__PURE__*/function(){function Table(worksheet,table){_classCallCheck(this,Table);this.worksheet=worksheet;if(table){this.table=table;// check things are ok first |
|
|
this.validate();this.store();}}_createClass(Table,[{key:"getFormula",value:function getFormula(column){// get the correct formula to apply to the totals row |
|
|
switch(column.totalsRowFunction){case'none':return null;case'average':return"SUBTOTAL(101,".concat(this.table.name,"[").concat(column.name,"])");case'countNums':return"SUBTOTAL(102,".concat(this.table.name,"[").concat(column.name,"])");case'count':return"SUBTOTAL(103,".concat(this.table.name,"[").concat(column.name,"])");case'max':return"SUBTOTAL(104,".concat(this.table.name,"[").concat(column.name,"])");case'min':return"SUBTOTAL(105,".concat(this.table.name,"[").concat(column.name,"])");case'stdDev':return"SUBTOTAL(106,".concat(this.table.name,"[").concat(column.name,"])");case'var':return"SUBTOTAL(107,".concat(this.table.name,"[").concat(column.name,"])");case'sum':return"SUBTOTAL(109,".concat(this.table.name,"[").concat(column.name,"])");case'custom':return column.totalsRowFormula;default:throw new Error("Invalid Totals Row Function: ".concat(column.totalsRowFunction));}}},{key:"validate",value:function validate(){var _this=this;var table=this.table;// set defaults and check is valid |
|
|
var assign=function assign(o,name,dflt){if(o[name]===undefined){o[name]=dflt;}};assign(table,'headerRow',true);assign(table,'totalsRow',false);assign(table,'style',{});assign(table.style,'theme','TableStyleMedium2');assign(table.style,'showFirstColumn',false);assign(table.style,'showLastColumn',false);assign(table.style,'showRowStripes',false);assign(table.style,'showColumnStripes',false);var assert=function assert(test,message){if(!test){throw new Error(message);}};assert(table.ref,'Table must have ref');assert(table.columns,'Table must have column definitions');assert(table.rows,'Table must have row definitions');table.tl=colCache.decodeAddress(table.ref);var _table$tl=table.tl,row=_table$tl.row,col=_table$tl.col;assert(row>0,'Table must be on valid row');assert(col>0,'Table must be on valid col');var width=this.width,filterHeight=this.filterHeight,tableHeight=this.tableHeight;// autoFilterRef is a range that includes optional headers only |
|
|
table.autoFilterRef=colCache.encode(row,col,row+filterHeight-1,col+width-1);// tableRef is a range that includes optional headers and totals |
|
|
table.tableRef=colCache.encode(row,col,row+tableHeight-1,col+width-1);table.columns.forEach(function(column,i){assert(column.name,"Column ".concat(i," must have a name"));if(i===0){assign(column,'totalsRowLabel','Total');}else{assign(column,'totalsRowFunction','none');column.totalsRowFormula=_this.getFormula(column);}});}},{key:"store",value:function store(){var _this2=this;// where the table needs to store table data, headers, footers in |
|
|
// the sheet... |
|
|
var assignStyle=function assignStyle(cell,style){if(style){Object.keys(style).forEach(function(key){cell[key]=style[key];});}};var worksheet=this.worksheet,table=this.table;var _table$tl2=table.tl,row=_table$tl2.row,col=_table$tl2.col;var count=0;if(table.headerRow){var r=worksheet.getRow(row+count++);table.columns.forEach(function(column,j){var style=column.style,name=column.name;var cell=r.getCell(col+j);cell.value=name;assignStyle(cell,style);});}table.rows.forEach(function(data){var r=worksheet.getRow(row+count++);data.forEach(function(value,j){var cell=r.getCell(col+j);cell.value=value;assignStyle(cell,table.columns[j].style);});});if(table.totalsRow){var _r=worksheet.getRow(row+count++);table.columns.forEach(function(column,j){var cell=_r.getCell(col+j);if(j===0){cell.value=column.totalsRowLabel;}else{var formula=_this2.getFormula(column);if(formula){cell.value={formula:column.totalsRowFormula,result:column.totalsRowResult};}else{cell.value=null;}}assignStyle(cell,column.style);});}}},{key:"load",value:function load(worksheet){var _this3=this;// where the table will read necessary features from a loaded sheet |
|
|
var table=this.table;var _table$tl3=table.tl,row=_table$tl3.row,col=_table$tl3.col;var count=0;if(table.headerRow){var r=worksheet.getRow(row+count++);table.columns.forEach(function(column,j){var cell=r.getCell(col+j);cell.value=column.name;});}table.rows.forEach(function(data){var r=worksheet.getRow(row+count++);data.forEach(function(value,j){var cell=r.getCell(col+j);cell.value=value;});});if(table.totalsRow){var _r2=worksheet.getRow(row+count++);table.columns.forEach(function(column,j){var cell=_r2.getCell(col+j);if(j===0){cell.value=column.totalsRowLabel;}else{var formula=_this3.getFormula(column);if(formula){cell.value={formula:column.totalsRowFormula,result:column.totalsRowResult};}}});}}},{key:"cacheState",// ================================================================ |
|
|
// TODO: Mutating methods |
|
|
value:function cacheState(){if(!this._cache){this._cache={ref:this.ref,width:this.width,tableHeight:this.tableHeight};}}},{key:"commit",value:function commit(){// changes may have been made that might have on-sheet effects |
|
|
if(!this._cache){return;}// check things are ok first |
|
|
this.validate();var ref=colCache.decodeAddress(this._cache.ref);if(this.ref!==this._cache.ref){// wipe out whole table footprint at previous location |
|
|
for(var i=0;i<this._cache.tableHeight;i++){var row=this.worksheet.getRow(ref.row+i);for(var j=0;j<this._cache.width;j++){var cell=row.getCell(ref.col+j);cell.value=null;}}}else{// clear out below table if it has shrunk |
|
|
for(var _i=this.tableHeight;_i<this._cache.tableHeight;_i++){var _row=this.worksheet.getRow(ref.row+_i);for(var _j=0;_j<this._cache.width;_j++){var _cell=_row.getCell(ref.col+_j);_cell.value=null;}}// clear out to right of table if it has lost columns |
|
|
for(var _i2=0;_i2<this.tableHeight;_i2++){var _row2=this.worksheet.getRow(ref.row+_i2);for(var _j2=this.width;_j2<this._cache.width;_j2++){var _cell2=_row2.getCell(ref.col+_j2);_cell2.value=null;}}}this.store();}},{key:"addRow",value:function addRow(values,rowNumber){// Add a row of data, either insert at rowNumber or append |
|
|
this.cacheState();if(rowNumber===undefined){this.table.rows.push(values);}else{this.table.rows.splice(rowNumber,0,values);}}},{key:"removeRows",value:function removeRows(rowIndex){var count=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1;// Remove a rows of data |
|
|
this.cacheState();this.table.rows.splice(rowIndex,count);}},{key:"getColumn",value:function getColumn(colIndex){var column=this.table.columns[colIndex];return new Column(this,column,colIndex);}},{key:"addColumn",value:function addColumn(column,values,colIndex){// Add a new column, including column defn and values |
|
|
// Inserts at colNumber or adds to the right |
|
|
this.cacheState();if(colIndex===undefined){this.table.columns.push(column);this.table.rows.forEach(function(row,i){row.push(values[i]);});}else{this.table.columns.splice(colIndex,0,column);this.table.rows.forEach(function(row,i){row.splice(colIndex,0,values[i]);});}}},{key:"removeColumns",value:function removeColumns(colIndex){var count=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1;// Remove a column with data |
|
|
this.cacheState();this.table.columns.splice(colIndex,count);this.table.rows.forEach(function(row){row.splice(colIndex,count);});}},{key:"_assign",value:function _assign(target,prop,value){this.cacheState();target[prop]=value;}/* eslint-disable lines-between-class-members */},{key:"width",get:function get(){// width of the table |
|
|
return this.table.columns.length;}},{key:"height",get:function get(){// height of the table data |
|
|
return this.table.rows.length;}},{key:"filterHeight",get:function get(){// height of the table data plus optional header row |
|
|
return this.height+(this.table.headerRow?1:0);}},{key:"tableHeight",get:function get(){// full height of the table on the sheet |
|
|
return this.filterHeight+(this.table.totalsRow?1:0);}},{key:"model",get:function get(){return this.table;},set:function set(value){this.table=value;}},{key:"ref",get:function get(){return this.table.ref;},set:function set(value){this._assign(this.table,'ref',value);}},{key:"name",get:function get(){return this.table.name;},set:function set(value){this.table.name=value;}},{key:"displayName",get:function get(){return this.table.displyName||this.table.name;}},{key:"displayNamename",set:function set(value){this.table.displayName=value;}},{key:"headerRow",get:function get(){return this.table.headerRow;},set:function set(value){this._assign(this.table,'headerRow',value);}},{key:"totalsRow",get:function get(){return this.table.totalsRow;},set:function set(value){this._assign(this.table,'totalsRow',value);}},{key:"theme",get:function get(){return this.table.style.name;},set:function set(value){this.table.style.name=value;}},{key:"showFirstColumn",get:function get(){return this.table.style.showFirstColumn;},set:function set(value){this.table.style.showFirstColumn=value;}},{key:"showLastColumn",get:function get(){return this.table.style.showLastColumn;},set:function set(value){this.table.style.showLastColumn=value;}},{key:"showRowStripes",get:function get(){return this.table.style.showRowStripes;},set:function set(value){this.table.style.showRowStripes=value;}},{key:"showColumnStripes",get:function get(){return this.table.style.showColumnStripes;},set:function set(value){this.table.style.showColumnStripes=value;}/* eslint-enable lines-between-class-members */}]);return Table;}();module.exports=Table;},{"./../utils/col-cache":17}],13:[function(require,module,exports){'use strict';function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}var Worksheet=require('./worksheet');var DefinedNames=require('./defined-names');var XLSX=require('./../xlsx/xlsx');var CSV=require('./../csv/csv');// Workbook requirements |
|
|
// Load and Save from file and stream |
|
|
// Access/Add/Delete individual worksheets |
|
|
// Manage String table, Hyperlink table, etc. |
|
|
// Manage scaffolding for contained objects to write to/read from |
|
|
var Workbook=/*#__PURE__*/function(){function Workbook(){_classCallCheck(this,Workbook);this.created=new Date();this.modified=this.created;this.properties={};this.calcProperties={};this._worksheets=[];this.views=[];this.media=[];this._definedNames=new DefinedNames();}_createClass(Workbook,[{key:"addWorksheet",value:function addWorksheet(name,options){var id=this.nextId;if(name&&name.length>31){// eslint-disable-next-line no-console |
|
|
console.warn("Worksheet name ".concat(name," exceeds 31 chars. This will be truncated"));}name=(name||"sheet".concat(id)).substring(0,31);if(this._worksheets.find(function(ws){return ws&&ws.name.toLowerCase()===name.toLowerCase();})){throw new Error("Worksheet name already exists: ".concat(name));}// if options is a color, call it tabColor (and signal deprecated message) |
|
|
if(options){if(typeof options==='string'){// eslint-disable-next-line no-console |
|
|
console.trace('tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { argb: "rbg value" } }');options={properties:{tabColor:{argb:options}}};}else if(options.argb||options.theme||options.indexed){// eslint-disable-next-line no-console |
|
|
console.trace('tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { ... } }');options={properties:{tabColor:options}};}}var lastOrderNo=this._worksheets.reduce(function(acc,ws){return(ws&&ws.orderNo)>acc?ws.orderNo:acc;},0);var worksheetOptions=Object.assign({},options,{id:id,name:name,orderNo:lastOrderNo+1,workbook:this});var worksheet=new Worksheet(worksheetOptions);this._worksheets[id]=worksheet;return worksheet;}},{key:"removeWorksheetEx",value:function removeWorksheetEx(worksheet){delete this._worksheets[worksheet.id];}},{key:"removeWorksheet",value:function removeWorksheet(id){var worksheet=this.getWorksheet(id);if(worksheet){worksheet.destroy();}}},{key:"getWorksheet",value:function getWorksheet(id){if(id===undefined){return this._worksheets.find(Boolean);}if(typeof id==='number'){return this._worksheets[id];}if(typeof id==='string'){return this._worksheets.find(function(worksheet){return worksheet&&worksheet.name===id;});}return undefined;}},{key:"eachSheet",value:function eachSheet(iteratee){this.worksheets.forEach(function(sheet){iteratee(sheet,sheet.id);});}},{key:"clearThemes",value:function clearThemes(){// Note: themes are not an exposed feature, meddle at your peril! |
|
|
this._themes=undefined;}},{key:"addImage",value:function addImage(image){// TODO: validation? |
|
|
var id=this.media.length;this.media.push(Object.assign({},image,{type:'image'}));return id;}},{key:"getImage",value:function getImage(id){return this.media[id];}},{key:"xlsx",get:function get(){if(!this._xlsx)this._xlsx=new XLSX(this);return this._xlsx;}},{key:"csv",get:function get(){if(!this._csv)this._csv=new CSV(this);return this._csv;}},{key:"nextId",get:function get(){// find the next unique spot to add worksheet |
|
|
for(var i=1;i<this._worksheets.length;i++){if(!this._worksheets[i]){return i;}}return this._worksheets.length||1;}},{key:"worksheets",get:function get(){// return a clone of _worksheets |
|
|
return this._worksheets.slice(1).sort(function(a,b){return a.orderNo-b.orderNo;}).filter(Boolean);}},{key:"definedNames",get:function get(){return this._definedNames;}},{key:"model",get:function get(){return{creator:this.creator||'Unknown',lastModifiedBy:this.lastModifiedBy||'Unknown',lastPrinted:this.lastPrinted,created:this.created,modified:this.modified,properties:this.properties,worksheets:this.worksheets.map(function(worksheet){return worksheet.model;}),sheets:this.worksheets.map(function(ws){return ws.model;}).filter(Boolean),definedNames:this._definedNames.model,views:this.views,company:this.company,manager:this.manager,title:this.title,subject:this.subject,keywords:this.keywords,category:this.category,description:this.description,language:this.language,revision:this.revision,contentStatus:this.contentStatus,themes:this._themes,media:this.media,calcProperties:this.calcProperties};},set:function set(value){var _this=this;this.creator=value.creator;this.lastModifiedBy=value.lastModifiedBy;this.lastPrinted=value.lastPrinted;this.created=value.created;this.modified=value.modified;this.company=value.company;this.manager=value.manager;this.title=value.title;this.subject=value.subject;this.keywords=value.keywords;this.category=value.category;this.description=value.description;this.language=value.language;this.revision=value.revision;this.contentStatus=value.contentStatus;this.properties=value.properties;this.calcProperties=value.calcProperties;this._worksheets=[];value.worksheets.forEach(function(worksheetModel){var id=worksheetModel.id,name=worksheetModel.name,state=worksheetModel.state;var orderNo=value.sheets&&value.sheets.findIndex(function(ws){return ws.id===id;});var worksheet=_this._worksheets[id]=new Worksheet({id:id,name:name,orderNo:orderNo,state:state,workbook:_this});worksheet.model=worksheetModel;});this._definedNames.model=value.definedNames;this.views=value.views;this._themes=value.themes;this.media=value.media||[];}}]);return Workbook;}();module.exports=Workbook;},{"./../csv/csv":1,"./../xlsx/xlsx":139,"./defined-names":6,"./worksheet":14}],14:[function(require,module,exports){"use strict";function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread();}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen);}function _iterableToArray(iter){if(typeof Symbol!=="undefined"&&Symbol.iterator in Object(iter))return Array.from(iter);}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr);}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++){arr2[i]=arr[i];}return arr2;}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}var _=require('../utils/under-dash');var colCache=require('../utils/col-cache');var Range=require('./range');var Row=require('./row');var Column=require('./column');var Enums=require('./enums');var Image=require('./image');var Table=require('./table');var DataValidations=require('./data-validations');var Encryptor=require('../utils/encryptor');// Worksheet requirements |
|
|
// Operate as sheet inside workbook or standalone |
|
|
// Load and Save from file and stream |
|
|
// Access/Add/Delete individual cells |
|
|
// Manage column widths and row heights |
|
|
var Worksheet=/*#__PURE__*/function(){function Worksheet(options){_classCallCheck(this,Worksheet);options=options||{};// in a workbook, each sheet will have a number |
|
|
this.id=options.id;this.orderNo=options.orderNo;// and a name |
|
|
this.name=options.name||"Sheet".concat(this.id);// add a state |
|
|
this.state=options.state||'visible';// rows allows access organised by row. Sparse array of arrays indexed by row-1, col |
|
|
// Note: _rows is zero based. Must subtract 1 to go from cell.row to index |
|
|
this._rows=[];// column definitions |
|
|
this._columns=null;// column keys (addRow convenience): key ==> this._collumns index |
|
|
this._keys={};// keep record of all merges |
|
|
this._merges={};// record of all row and column pageBreaks |
|
|
this.rowBreaks=[];this._workbook=options.workbook;// for tabColor, default row height, outline levels, etc |
|
|
this.properties=Object.assign({},{defaultRowHeight:15,dyDescent:55,outlineLevelCol:0,outlineLevelRow:0},options.properties);// for all things printing |
|
|
this.pageSetup=Object.assign({},{margins:{left:0.7,right:0.7,top:0.75,bottom:0.75,header:0.3,footer:0.3},orientation:'portrait',horizontalDpi:4294967295,verticalDpi:4294967295,fitToPage:!!(options.pageSetup&&(options.pageSetup.fitToWidth||options.pageSetup.fitToHeight)&&!options.pageSetup.scale),pageOrder:'downThenOver',blackAndWhite:false,draft:false,cellComments:'None',errors:'displayed',scale:100,fitToWidth:1,fitToHeight:1,paperSize:undefined,showRowColHeaders:false,showGridLines:false,firstPageNumber:undefined,horizontalCentered:false,verticalCentered:false,rowBreaks:null,colBreaks:null},options.pageSetup);this.headerFooter=Object.assign({},{differentFirst:false,differentOddEven:false,oddHeader:null,oddFooter:null,evenHeader:null,evenFooter:null,firstHeader:null,firstFooter:null},options.headerFooter);this.dataValidations=new DataValidations();// for freezepanes, split, zoom, gridlines, etc |
|
|
this.views=options.views||[];this.autoFilter=options.autoFilter||null;// for images, etc |
|
|
this._media=[];// worksheet protection |
|
|
this.sheetProtection=null;// for tables |
|
|
this.tables={};this.conditionalFormattings=[];}_createClass(Worksheet,[{key:"destroy",// when you're done with this worksheet, call this to remove from workbook |
|
|
value:function destroy(){this._workbook.removeWorksheetEx(this);}// Get the bounding range of the cells in this worksheet |
|
|
},{key:"getColumnKey",value:function getColumnKey(key){return this._keys[key];}},{key:"setColumnKey",value:function setColumnKey(key,value){this._keys[key]=value;}},{key:"deleteColumnKey",value:function deleteColumnKey(key){delete this._keys[key];}},{key:"eachColumnKey",value:function eachColumnKey(f){_.each(this._keys,f);}// get a single column by col number. If it doesn't exist, create it and any gaps before it |
|
|
},{key:"getColumn",value:function getColumn(c){if(typeof c==='string'){// if it matches a key'd column, return that |
|
|
var col=this._keys[c];if(col)return col;// otherwise, assume letter |
|
|
c=colCache.l2n(c);}if(!this._columns){this._columns=[];}if(c>this._columns.length){var n=this._columns.length+1;while(n<=c){this._columns.push(new Column(this,n++));}}return this._columns[c-1];}},{key:"spliceColumns",value:function spliceColumns(start,count){var _this=this;var rows=this._rows;var nRows=rows.length;for(var _len=arguments.length,inserts=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++){inserts[_key-2]=arguments[_key];}if(inserts.length>0){var _loop=function _loop(i){var rowArguments=[start,count];// eslint-disable-next-line no-loop-func |
|
|
inserts.forEach(function(insert){rowArguments.push(insert[i]||null);});var row=_this.getRow(i+1);// eslint-disable-next-line prefer-spread |
|
|
row.splice.apply(row,rowArguments);};// must iterate over all rows whether they exist yet or not |
|
|
for(var i=0;i<nRows;i++){_loop(i);}}else{// nothing to insert, so just splice all rows |
|
|
this._rows.forEach(function(r){if(r){r.splice(start,count);}});}// splice column definitions |
|
|
var nExpand=inserts.length-count;var nKeep=start+count;var nEnd=this._columns.length;if(nExpand<0){for(var _i=start+inserts.length;_i<=nEnd;_i++){this.getColumn(_i).defn=this.getColumn(_i-nExpand).defn;}}else if(nExpand>0){for(var _i2=nEnd;_i2>=nKeep;_i2--){this.getColumn(_i2+nExpand).defn=this.getColumn(_i2).defn;}}for(var _i3=start;_i3<start+inserts.length;_i3++){this.getColumn(_i3).defn=null;}// account for defined names |
|
|
this.workbook.definedNames.spliceColumns(this.name,start,count,inserts.length);}},{key:"_commitRow",// ========================================================================= |
|
|
// Rows |
|
|
value:function _commitRow(){// nop - allows streaming reader to fill a document |
|
|
}},{key:"findRow",// find a row (if exists) by row number |
|
|
value:function findRow(r){return this._rows[r-1];}},{key:"getRow",// get a row by row number. |
|
|
value:function getRow(r){var row=this._rows[r-1];if(!row){row=this._rows[r-1]=new Row(this,r);}return row;}},{key:"addRow",value:function addRow(value){var row=this.getRow(this._nextRow);row.values=value;return row;}},{key:"addRows",value:function addRows(value){var _this2=this;value.forEach(function(row){_this2.addRow(row);});}},{key:"duplicateRow",value:function duplicateRow(rowNum,count){var _this3=this;var insert=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;// create count duplicates of rowNum |
|
|
// either inserting new or overwriting existing rows |
|
|
var rSrc=this._rows[rowNum-1];var inserts=new Array(count).fill(rSrc.values);this.spliceRows.apply(this,[rowNum+1,insert?0:count].concat(_toConsumableArray(inserts)));// now copy styles... |
|
|
var _loop2=function _loop2(i){var rDst=_this3._rows[rowNum+i];rDst.style=rSrc.style;rDst.height=rSrc.height;// eslint-disable-next-line no-loop-func |
|
|
rSrc.eachCell({includeEmpty:true},function(cell,colNumber){rDst.getCell(colNumber).style=cell.style;});};for(var i=0;i<count;i++){_loop2(i);}}},{key:"spliceRows",value:function spliceRows(start,count){var _this4=this;// same problem as row.splice, except worse. |
|
|
var nKeep=start+count;for(var _len2=arguments.length,inserts=new Array(_len2>2?_len2-2:0),_key2=2;_key2<_len2;_key2++){inserts[_key2-2]=arguments[_key2];}var nExpand=inserts.length-count;var nEnd=this._rows.length;var i;var rSrc;if(nExpand<0){// remove rows |
|
|
for(i=nKeep;i<=nEnd;i++){rSrc=this._rows[i-1];if(rSrc){(function(){var rDst=_this4.getRow(i+nExpand);rDst.values=rSrc.values;rDst.style=rSrc.style;rDst.height=rSrc.height;// eslint-disable-next-line no-loop-func |
|
|
rSrc.eachCell({includeEmpty:true},function(cell,colNumber){rDst.getCell(colNumber).style=cell.style;});_this4._rows[i-1]=undefined;})();}else{this._rows[i+nExpand-1]=undefined;}}}else if(nExpand>0){// insert new cells |
|
|
for(i=nEnd;i>=nKeep;i--){rSrc=this._rows[i-1];if(rSrc){(function(){var rDst=_this4.getRow(i+nExpand);rDst.values=rSrc.values;rDst.style=rSrc.style;rDst.height=rSrc.height;// eslint-disable-next-line no-loop-func |
|
|
rSrc.eachCell({includeEmpty:true},function(cell,colNumber){rDst.getCell(colNumber).style=cell.style;});})();}else{this._rows[i+nExpand-1]=undefined;}}}// now copy over the new values |
|
|
for(i=0;i<inserts.length;i++){var rDst=this.getRow(start+i);rDst.style={};rDst.values=inserts[i];}// account for defined names |
|
|
this.workbook.definedNames.spliceRows(this.name,start,count,inserts.length);}// iterate over every row in the worksheet, including maybe empty rows |
|
|
},{key:"eachRow",value:function eachRow(options,iteratee){if(!iteratee){iteratee=options;options=undefined;}if(options&&options.includeEmpty){var n=this._rows.length;for(var i=1;i<=n;i++){iteratee(this.getRow(i),i);}}else{this._rows.forEach(function(row){if(row&&row.hasValues){iteratee(row,row.number);}});}}// return all rows as sparse array |
|
|
},{key:"getSheetValues",value:function getSheetValues(){var rows=[];this._rows.forEach(function(row){if(row){rows[row.number]=row.values;}});return rows;}// ========================================================================= |
|
|
// Cells |
|
|
// returns the cell at [r,c] or address given by r. If not found, return undefined |
|
|
},{key:"findCell",value:function findCell(r,c){var address=colCache.getAddress(r,c);var row=this._rows[address.row-1];return row?row.findCell(address.col):undefined;}// return the cell at [r,c] or address given by r. If not found, create a new one. |
|
|
},{key:"getCell",value:function getCell(r,c){var address=colCache.getAddress(r,c);var row=this.getRow(address.row);return row.getCellEx(address);}// ========================================================================= |
|
|
// Merge |
|
|
// convert the range defined by ['tl:br'], [tl,br] or [t,l,b,r] into a single 'merged' cell |
|
|
},{key:"mergeCells",value:function mergeCells(){for(var _len3=arguments.length,cells=new Array(_len3),_key3=0;_key3<_len3;_key3++){cells[_key3]=arguments[_key3];}var dimensions=new Range(cells);this._mergeCellsInternal(dimensions);}},{key:"mergeCellsWithoutStyle",value:function mergeCellsWithoutStyle(){for(var _len4=arguments.length,cells=new Array(_len4),_key4=0;_key4<_len4;_key4++){cells[_key4]=arguments[_key4];}var dimensions=new Range(cells);this._mergeCellsInternal(dimensions,true);}},{key:"_mergeCellsInternal",value:function _mergeCellsInternal(dimensions,ignoreStyle){// check cells aren't already merged |
|
|
_.each(this._merges,function(merge){if(merge.intersects(dimensions)){throw new Error('Cannot merge already merged cells');}});// apply merge |
|
|
var master=this.getCell(dimensions.top,dimensions.left);for(var i=dimensions.top;i<=dimensions.bottom;i++){for(var j=dimensions.left;j<=dimensions.right;j++){// merge all but the master cell |
|
|
if(i>dimensions.top||j>dimensions.left){this.getCell(i,j).merge(master,ignoreStyle);}}}// index merge |
|
|
this._merges[master.address]=dimensions;}},{key:"_unMergeMaster",value:function _unMergeMaster(master){// master is always top left of a rectangle |
|
|
var merge=this._merges[master.address];if(merge){for(var i=merge.top;i<=merge.bottom;i++){for(var j=merge.left;j<=merge.right;j++){this.getCell(i,j).unmerge();}}delete this._merges[master.address];}}},{key:"unMergeCells",// scan the range defined by ['tl:br'], [tl,br] or [t,l,b,r] and if any cell is part of a merge, |
|
|
// un-merge the group. Note this function can affect multiple merges and merge-blocks are |
|
|
// atomic - either they're all merged or all un-merged. |
|
|
value:function unMergeCells(){for(var _len5=arguments.length,cells=new Array(_len5),_key5=0;_key5<_len5;_key5++){cells[_key5]=arguments[_key5];}var dimensions=new Range(cells);// find any cells in that range and unmerge them |
|
|
for(var i=dimensions.top;i<=dimensions.bottom;i++){for(var j=dimensions.left;j<=dimensions.right;j++){var cell=this.findCell(i,j);if(cell){if(cell.type===Enums.ValueType.Merge){// this cell merges to another master |
|
|
this._unMergeMaster(cell.master);}else if(this._merges[cell.address]){// this cell is a master |
|
|
this._unMergeMaster(cell);}}}}}// =========================================================================== |
|
|
// Shared/Array Formula |
|
|
},{key:"fillFormula",value:function fillFormula(range,formula,results){var shareType=arguments.length>3&&arguments[3]!==undefined?arguments[3]:'shared';// Define formula for top-left cell and share to rest |
|
|
var decoded=colCache.decode(range);var top=decoded.top,left=decoded.left,bottom=decoded.bottom,right=decoded.right;var width=right-left+1;var masterAddress=colCache.encodeAddress(top,left);var isShared=shareType==='shared';// work out result accessor |
|
|
var getResult;if(typeof results==='function'){getResult=results;}else if(Array.isArray(results)){if(Array.isArray(results[0])){getResult=function getResult(row,col){return results[row-top][col-left];};}else{// eslint-disable-next-line no-mixed-operators |
|
|
getResult=function getResult(row,col){return results[(row-top)*width+(col-left)];};}}else{getResult=function getResult(){return undefined;};}var first=true;for(var r=top;r<=bottom;r++){for(var c=left;c<=right;c++){if(first){this.getCell(r,c).value={shareType:shareType,formula:formula,ref:range,result:getResult(r,c)};first=false;}else{this.getCell(r,c).value=isShared?{sharedFormula:masterAddress,result:getResult(r,c)}:getResult(r,c);}}}}// ========================================================================= |
|
|
// Images |
|
|
},{key:"addImage",value:function addImage(imageId,range){var model={type:'image',imageId:imageId,range:range};this._media.push(new Image(this,model));}},{key:"getImages",value:function getImages(){return this._media.filter(function(m){return m.type==='image';});}},{key:"addBackgroundImage",value:function addBackgroundImage(imageId){var model={type:'background',imageId:imageId};this._media.push(new Image(this,model));}},{key:"getBackgroundImageId",value:function getBackgroundImageId(){var image=this._media.find(function(m){return m.type==='background';});return image&&image.imageId;}// ========================================================================= |
|
|
// Worksheet Protection |
|
|
},{key:"protect",value:function protect(password,options){var _this5=this;// TODO: make this function truly async |
|
|
// perhaps marshal to worker thread or something |
|
|
return new Promise(function(resolve){_this5.sheetProtection={sheet:true};if(options&&'spinCount'in options){// force spinCount to be integer >= 0 |
|
|
options.spinCount=Number.isFinite(options.spinCount)?Math.round(Math.max(0,options.spinCount)):100000;}if(password){_this5.sheetProtection.algorithmName='SHA-512';_this5.sheetProtection.saltValue=Encryptor.randomBytes(16).toString('base64');_this5.sheetProtection.spinCount=options&&'spinCount'in options?options.spinCount:100000;// allow user specified spinCount |
|
|
_this5.sheetProtection.hashValue=Encryptor.convertPasswordToHash(password,'SHA512',_this5.sheetProtection.saltValue,_this5.sheetProtection.spinCount);}if(options){_this5.sheetProtection=Object.assign(_this5.sheetProtection,options);if(!password&&'spinCount'in options){delete _this5.sheetProtection.spinCount;}}resolve();});}},{key:"unprotect",value:function unprotect(){this.sheetProtection=null;}// ========================================================================= |
|
|
// Tables |
|
|
},{key:"addTable",value:function addTable(model){var table=new Table(this,model);this.tables[model.name]=table;return table;}},{key:"getTable",value:function getTable(name){return this.tables[name];}},{key:"removeTable",value:function removeTable(name){delete this.tables[name];}},{key:"getTables",value:function getTables(){return Object.values(this.tables);}// =========================================================================== |
|
|
// Conditional Formatting |
|
|
},{key:"addConditionalFormatting",value:function addConditionalFormatting(cf){this.conditionalFormattings.push(cf);}},{key:"removeConditionalFormatting",value:function removeConditionalFormatting(filter){if(typeof filter==='number'){this.conditionalFormattings.splice(filter,1);}else if(filter instanceof Function){this.conditionalFormattings=this.conditionalFormattings.filter(filter);}else{this.conditionalFormattings=[];}}// =========================================================================== |
|
|
// Deprecated |
|
|
},{key:"_parseRows",value:function _parseRows(model){var _this6=this;this._rows=[];model.rows.forEach(function(rowModel){var row=new Row(_this6,rowModel.number);_this6._rows[row.number-1]=row;row.model=rowModel;});}},{key:"_parseMergeCells",value:function _parseMergeCells(model){var _this7=this;_.each(model.mergeCells,function(merge){// Do not merge styles when importing an Excel file |
|
|
// since each cell may have different styles intentionally. |
|
|
_this7.mergeCellsWithoutStyle(merge);});}},{key:"workbook",get:function get(){return this._workbook;}},{key:"dimensions",get:function get(){var dimensions=new Range();this._rows.forEach(function(row){if(row){var rowDims=row.dimensions;if(rowDims){dimensions.expand(row.number,rowDims.min,row.number,rowDims.max);}}});return dimensions;}// ========================================================================= |
|
|
// Columns |
|
|
// get the current columns array. |
|
|
},{key:"columns",get:function get(){return this._columns;}// set the columns from an array of column definitions. |
|
|
// Note: any headers defined will overwrite existing values. |
|
|
,set:function set(value){var _this8=this;// calculate max header row count |
|
|
this._headerRowCount=value.reduce(function(pv,cv){var headerCount=cv.header&&1||cv.headers&&cv.headers.length||0;return Math.max(pv,headerCount);},0);// construct Column objects |
|
|
var count=1;var columns=this._columns=[];value.forEach(function(defn){var column=new Column(_this8,count++,false);columns.push(column);column.defn=defn;});}},{key:"columnCount",get:function get(){var maxCount=0;this.eachRow(function(row){maxCount=Math.max(maxCount,row.cellCount);});return maxCount;}},{key:"actualColumnCount",get:function get(){// performance nightmare - for each row, counts all the columns used |
|
|
var counts=[];var count=0;this.eachRow(function(row){row.eachCell(function(_ref){var col=_ref.col;if(!counts[col]){counts[col]=true;count++;}});});return count;}},{key:"_lastRowNumber",get:function get(){// need to cope with results of splice |
|
|
var rows=this._rows;var n=rows.length;while(n>0&&rows[n-1]===undefined){n--;}return n;}},{key:"_nextRow",get:function get(){return this._lastRowNumber+1;}},{key:"lastRow",get:function get(){if(this._rows.length){return this._rows[this._rows.length-1];}return undefined;}},{key:"rowCount",get:function get(){return this._lastRowNumber;}},{key:"actualRowCount",get:function get(){// counts actual rows that have actual data |
|
|
var count=0;this.eachRow(function(){count++;});return count;}},{key:"hasMerges",get:function get(){// return true if this._merges has a merge object |
|
|
return _.some(this._merges,Boolean);}},{key:"tabColor",get:function get(){// eslint-disable-next-line no-console |
|
|
console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor');return this.properties.tabColor;},set:function set(value){// eslint-disable-next-line no-console |
|
|
console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor');this.properties.tabColor=value;}// =========================================================================== |
|
|
// Model |
|
|
},{key:"model",get:function get(){var model={id:this.id,name:this.name,dataValidations:this.dataValidations.model,properties:this.properties,state:this.state,pageSetup:this.pageSetup,headerFooter:this.headerFooter,rowBreaks:this.rowBreaks,views:this.views,autoFilter:this.autoFilter,media:this._media.map(function(medium){return medium.model;}),sheetProtection:this.sheetProtection,tables:Object.values(this.tables).map(function(table){return table.model;}),conditionalFormattings:this.conditionalFormattings};// ================================================= |
|
|
// columns |
|
|
model.cols=Column.toModel(this.columns);// ========================================================== |
|
|
// Rows |
|
|
var rows=model.rows=[];var dimensions=model.dimensions=new Range();this._rows.forEach(function(row){var rowModel=row&&row.model;if(rowModel){dimensions.expand(rowModel.number,rowModel.min,rowModel.number,rowModel.max);rows.push(rowModel);}});// ========================================================== |
|
|
// Merges |
|
|
model.merges=[];_.each(this._merges,function(merge){model.merges.push(merge.range);});return model;},set:function set(value){var _this9=this;this.name=value.name;this._columns=Column.fromModel(this,value.cols);this._parseRows(value);this._parseMergeCells(value);this.dataValidations=new DataValidations(value.dataValidations);this.properties=value.properties;this.pageSetup=value.pageSetup;this.headerFooter=value.headerFooter;this.views=value.views;this.autoFilter=value.autoFilter;this._media=value.media.map(function(medium){return new Image(_this9,medium);});this.sheetProtection=value.sheetProtection;this.tables=value.tables.reduce(function(tables,table){var t=new Table();t.model=table;tables[table.name]=t;return tables;},{});this.conditionalFormattings=value.conditionalFormattings;}}]);return Worksheet;}();module.exports=Worksheet;},{"../utils/col-cache":17,"../utils/encryptor":18,"../utils/under-dash":23,"./column":4,"./data-validations":5,"./enums":7,"./image":8,"./range":10,"./row":11,"./table":12}],15:[function(require,module,exports){"use strict";/* eslint-disable import/no-extraneous-dependencies,node/no-unpublished-require */require('core-js/modules/es.promise');require('core-js/modules/es.object.assign');require('core-js/modules/es.object.keys');require('core-js/modules/es.symbol');require('core-js/modules/es.symbol.async-iterator');require('regenerator-runtime/runtime');var ExcelJS={Workbook:require('./doc/workbook')};// Object.assign mono-fill |
|
|
var Enums=require('./doc/enums');Object.keys(Enums).forEach(function(key){ExcelJS[key]=Enums[key];});module.exports=ExcelJS;},{"./doc/enums":7,"./doc/workbook":13,"core-js/modules/es.object.assign":300,"core-js/modules/es.object.keys":301,"core-js/modules/es.promise":302,"core-js/modules/es.symbol":304,"core-js/modules/es.symbol.async-iterator":303,"regenerator-runtime/runtime":468}],16:[function(require,module,exports){"use strict";function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}var _=require('./under-dash');var colCache=require('./col-cache');var CellMatrix=/*#__PURE__*/function(){function CellMatrix(template){_classCallCheck(this,CellMatrix);this.template=template;this.sheets={};}_createClass(CellMatrix,[{key:"addCell",value:function addCell(addressStr){this.addCellEx(colCache.decodeEx(addressStr));}},{key:"getCell",value:function getCell(addressStr){return this.findCellEx(colCache.decodeEx(addressStr),true);}},{key:"findCell",value:function findCell(addressStr){return this.findCellEx(colCache.decodeEx(addressStr),false);}},{key:"findCellAt",value:function findCellAt(sheetName,rowNumber,colNumber){var sheet=this.sheets[sheetName];var row=sheet&&sheet[rowNumber];return row&&row[colNumber];}},{key:"addCellEx",value:function addCellEx(address){if(address.top){for(var row=address.top;row<=address.bottom;row++){for(var col=address.left;col<=address.right;col++){this.getCellAt(address.sheetName,row,col);}}}else{this.findCellEx(address,true);}}},{key:"getCellEx",value:function getCellEx(address){return this.findCellEx(address,true);}},{key:"findCellEx",value:function findCellEx(address,create){var sheet=this.findSheet(address,create);var row=this.findSheetRow(sheet,address,create);return this.findRowCell(row,address,create);}},{key:"getCellAt",value:function getCellAt(sheetName,rowNumber,colNumber){var sheet=this.sheets[sheetName]||(this.sheets[sheetName]=[]);var row=sheet[rowNumber]||(sheet[rowNumber]=[]);var cell=row[colNumber]||(row[colNumber]={sheetName:sheetName,address:colCache.n2l(colNumber)+rowNumber,row:rowNumber,col:colNumber});return cell;}},{key:"removeCellEx",value:function removeCellEx(address){var sheet=this.findSheet(address);if(!sheet){return;}var row=this.findSheetRow(sheet,address);if(!row){return;}delete row[address.col];}},{key:"forEachInSheet",value:function forEachInSheet(sheetName,callback){var sheet=this.sheets[sheetName];if(sheet){sheet.forEach(function(row,rowNumber){if(row){row.forEach(function(cell,colNumber){if(cell){callback(cell,rowNumber,colNumber);}});}});}}},{key:"forEach",value:function forEach(callback){var _this=this;_.each(this.sheets,function(sheet,sheetName){_this.forEachInSheet(sheetName,callback);});}},{key:"map",value:function map(callback){var results=[];this.forEach(function(cell){results.push(callback(cell));});return results;}},{key:"findSheet",value:function findSheet(address,create){var name=address.sheetName;if(this.sheets[name]){return this.sheets[name];}if(create){return this.sheets[name]=[];}return undefined;}},{key:"findSheetRow",value:function findSheetRow(sheet,address,create){var row=address.row;if(sheet&&sheet[row]){return sheet[row];}if(create){return sheet[row]=[];}return undefined;}},{key:"findRowCell",value:function findRowCell(row,address,create){var col=address.col;if(row&&row[col]){return row[col];}if(create){return row[col]=this.template?Object.assign(address,JSON.parse(JSON.stringify(this.template))):address;}return undefined;}},{key:"spliceRows",value:function spliceRows(sheetName,start,numDelete,numInsert){var sheet=this.sheets[sheetName];if(sheet){var inserts=[];for(var i=0;i<numInsert;i++){inserts.push([]);}sheet.splice.apply(sheet,[start,numDelete].concat(inserts));}}},{key:"spliceColumns",value:function spliceColumns(sheetName,start,numDelete,numInsert){var sheet=this.sheets[sheetName];if(sheet){var inserts=[];for(var i=0;i<numInsert;i++){inserts.push(null);}_.each(sheet,function(row){row.splice.apply(row,[start,numDelete].concat(inserts));});}}}]);return CellMatrix;}();module.exports=CellMatrix;},{"./col-cache":17,"./under-dash":23}],17:[function(require,module,exports){"use strict";function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_unsupportedIterableToArray(arr,i)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen);}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++){arr2[i]=arr[i];}return arr2;}function _iterableToArrayLimit(arr,i){if(typeof Symbol==="undefined"||!(Symbol.iterator in Object(arr)))return;var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"]!=null)_i["return"]();}finally{if(_d)throw _e;}}return _arr;}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr;}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly)symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;});keys.push.apply(keys,symbols);}return keys;}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};if(i%2){ownKeys(Object(source),true).forEach(function(key){_defineProperty(target,key,source[key]);});}else if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source));}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key));});}}return target;}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}// ========================================================================= |
|
|
// Column Letter to Number conversion |
|
|
var colCache={_dictionary:['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'],_l2n:{},_n2l:[],_level:function _level(n){if(n<=26){return 1;}if(n<=26*26){return 2;}return 3;},_fill:function _fill(level){var c;var v;var l1;var l2;var l3;var n=1;if(level>=1){while(n<=26){c=this._dictionary[n-1];this._n2l[n]=c;this._l2n[c]=n;n++;}}if(level>=2){while(n<=26+26*26){v=n-(26+1);l1=v%26;l2=Math.floor(v/26);c=this._dictionary[l2]+this._dictionary[l1];this._n2l[n]=c;this._l2n[c]=n;n++;}}if(level>=3){while(n<=16384){v=n-(26*26+26+1);l1=v%26;l2=Math.floor(v/26)%26;l3=Math.floor(v/(26*26));c=this._dictionary[l3]+this._dictionary[l2]+this._dictionary[l1];this._n2l[n]=c;this._l2n[c]=n;n++;}}},l2n:function l2n(l){if(!this._l2n[l]){this._fill(l.length);}if(!this._l2n[l]){throw new Error("Out of bounds. Invalid column letter: ".concat(l));}return this._l2n[l];},n2l:function n2l(n){if(n<1||n>16384){throw new Error("".concat(n," is out of bounds. Excel supports columns from 1 to 16384"));}if(!this._n2l[n]){this._fill(this._level(n));}return this._n2l[n];},// ========================================================================= |
|
|
// Address processing |
|
|
_hash:{},// check if value looks like an address |
|
|
validateAddress:function validateAddress(value){if(!value.match(/^[A-Z]+\d+$/)){throw new Error("Invalid Address: ".concat(value));}return true;},// convert address string into structure |
|
|
decodeAddress:function decodeAddress(value){var addr=this._hash[value];if(addr){return addr;}var matchCol=value.match(/[A-Z]+/);var col;var colNumber;if(matchCol){col=matchCol[0];colNumber=this.l2n(col);}var matchRow=value.match(/\d+/);var row;var rowNumber;if(matchRow){row=matchRow[0];rowNumber=parseInt(row,10);}// in case $row$col |
|
|
value=(col||'')+(row||'');var address={address:value,col:colNumber,row:rowNumber,$col$row:"$".concat(col||'',"$").concat(row||'')};// mem fix - cache only the tl 100x100 square |
|
|
if(colNumber<=100&&rowNumber<=100){this._hash[value]=address;this._hash[address.$col$row]=address;}return address;},// convert r,c into structure (if only 1 arg, assume r is address string) |
|
|
getAddress:function getAddress(r,c){if(c){var address=this.n2l(c)+r;return this.decodeAddress(address);}return this.decodeAddress(r);},// convert [address], [tl:br] into address structures |
|
|
decode:function decode(value){var parts=value.split(':');if(parts.length===2){var tl=this.decodeAddress(parts[0]);var br=this.decodeAddress(parts[1]);var result={top:Math.min(tl.row,br.row),left:Math.min(tl.col,br.col),bottom:Math.max(tl.row,br.row),right:Math.max(tl.col,br.col)};// reconstruct tl, br and dimensions |
|
|
result.tl=this.n2l(result.left)+result.top;result.br=this.n2l(result.right)+result.bottom;result.dimensions="".concat(result.tl,":").concat(result.br);return result;}return this.decodeAddress(value);},// convert [sheetName!][$]col[$]row[[$]col[$]row] into address or range structures |
|
|
decodeEx:function decodeEx(value){var groups=value.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/);var sheetName=groups[1]||groups[2];// Qouted and unqouted groups |
|
|
var reference=groups[3];// Remaining address |
|
|
var parts=reference.split(':');if(parts.length>1){var tl=this.decodeAddress(parts[0]);var br=this.decodeAddress(parts[1]);var top=Math.min(tl.row,br.row);var left=Math.min(tl.col,br.col);var bottom=Math.max(tl.row,br.row);var right=Math.max(tl.col,br.col);tl=this.n2l(left)+top;br=this.n2l(right)+bottom;return{top:top,left:left,bottom:bottom,right:right,sheetName:sheetName,tl:{address:tl,col:left,row:top,$col$row:"$".concat(this.n2l(left),"$").concat(top),sheetName:sheetName},br:{address:br,col:right,row:bottom,$col$row:"$".concat(this.n2l(right),"$").concat(bottom),sheetName:sheetName},dimensions:"".concat(tl,":").concat(br)};}if(reference.startsWith('#')){return sheetName?{sheetName:sheetName,error:reference}:{error:reference};}var address=this.decodeAddress(reference);return sheetName?_objectSpread({sheetName:sheetName},address):address;},// convert row,col into address string |
|
|
encodeAddress:function encodeAddress(row,col){return colCache.n2l(col)+row;},// convert row,col into string address or t,l,b,r into range |
|
|
encode:function encode(){switch(arguments.length){case 2:return colCache.encodeAddress(arguments[0],arguments[1]);case 4:return"".concat(colCache.encodeAddress(arguments[0],arguments[1]),":").concat(colCache.encodeAddress(arguments[2],arguments[3]));default:throw new Error('Can only encode with 2 or 4 arguments');}},// return true if address is contained within range |
|
|
inRange:function inRange(range,address){var _range=_slicedToArray(range,5),left=_range[0],top=_range[1],right=_range[3],bottom=_range[4];var _address=_slicedToArray(address,2),col=_address[0],row=_address[1];return col>=left&&col<=right&&row>=top&&row<=bottom;}};module.exports=colCache;},{}],18:[function(require,module,exports){(function(Buffer){'use strict';var crypto=require('crypto');var Encryptor={/** |
|
|
* Calculate a hash of the concatenated buffers with the given algorithm. |
|
|
* @param {string} algorithm - The hash algorithm. |
|
|
* @returns {Buffer} The hash |
|
|
*/hash:function hash(algorithm){var hash=crypto.createHash(algorithm);for(var _len=arguments.length,buffers=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){buffers[_key-1]=arguments[_key];}hash.update(Buffer.concat(buffers));return hash.digest();},/** |
|
|
* Convert a password into an encryption key |
|
|
* @param {string} password - The password |
|
|
* @param {string} hashAlgorithm - The hash algoritm |
|
|
* @param {string} saltValue - The salt value |
|
|
* @param {number} spinCount - The spin count |
|
|
* @param {number} keyBits - The length of the key in bits |
|
|
* @param {Buffer} blockKey - The block key |
|
|
* @returns {Buffer} The encryption key |
|
|
*/convertPasswordToHash:function convertPasswordToHash(password,hashAlgorithm,saltValue,spinCount){hashAlgorithm=hashAlgorithm.toLowerCase();var hashes=crypto.getHashes();if(hashes.indexOf(hashAlgorithm)<0){throw new Error("Hash algorithm '".concat(hashAlgorithm,"' not supported!"));}// Password must be in unicode buffer |
|
|
var passwordBuffer=Buffer.from(password,'utf16le');// Generate the initial hash |
|
|
var key=this.hash(hashAlgorithm,Buffer.from(saltValue,'base64'),passwordBuffer);// Now regenerate until spin count |
|
|
for(var i=0;i<spinCount;i++){var iterator=Buffer.alloc(4);// this is the 'special' element of Excel password hashing |
|
|
// that stops us from using crypto.pbkdf2() |
|
|
iterator.writeUInt32LE(i,0);key=this.hash(hashAlgorithm,key,iterator);}return key.toString('base64');},/** |
|
|
* Generates cryptographically strong pseudo-random data. |
|
|
* @param size The size argument is a number indicating the number of bytes to generate. |
|
|
*/randomBytes:function randomBytes(size){return crypto.randomBytes(size);}};module.exports=Encryptor;}).call(this,require("buffer").Buffer);},{"buffer":214,"crypto":312}],19:[function(require,module,exports){"use strict";function _awaitAsyncGenerator(value){return new _AwaitValue(value);}function _wrapAsyncGenerator(fn){return function(){return new _AsyncGenerator(fn.apply(this,arguments));};}function _AsyncGenerator(gen){var front,back;function send(key,arg){return new Promise(function(resolve,reject){var request={key:key,arg:arg,resolve:resolve,reject:reject,next:null};if(back){back=back.next=request;}else{front=back=request;resume(key,arg);}});}function resume(key,arg){try{var result=gen[key](arg);var value=result.value;var wrappedAwait=value instanceof _AwaitValue;Promise.resolve(wrappedAwait?value.wrapped:value).then(function(arg){if(wrappedAwait){resume(key==="return"?"return":"next",arg);return;}settle(result.done?"return":"normal",arg);},function(err){resume("throw",err);});}catch(err){settle("throw",err);}}function settle(type,value){switch(type){case"return":front.resolve({value:value,done:true});break;case"throw":front.reject(value);break;default:front.resolve({value:value,done:false});break;}front=front.next;if(front){resume(front.key,front.arg);}else{back=null;}}this._invoke=send;if(typeof gen.return!=="function"){this.return=undefined;}}if(typeof Symbol==="function"&&Symbol.asyncIterator){_AsyncGenerator.prototype[Symbol.asyncIterator]=function(){return this;};}_AsyncGenerator.prototype.next=function(arg){return this._invoke("next",arg);};_AsyncGenerator.prototype.throw=function(arg){return this._invoke("throw",arg);};_AsyncGenerator.prototype.return=function(arg){return this._invoke("return",arg);};function _AwaitValue(value){this.wrapped=value;}function _asyncIterator(iterable){var method;if(typeof Symbol!=="undefined"){if(Symbol.asyncIterator){method=iterable[Symbol.asyncIterator];if(method!=null)return method.call(iterable);}if(Symbol.iterator){method=iterable[Symbol.iterator];if(method!=null)return method.call(iterable);}}throw new TypeError("Object is not async iterable");}var _require=require('saxes'),SaxesParser=_require.SaxesParser;var _require2=require('readable-stream'),PassThrough=_require2.PassThrough;module.exports=/*#__PURE__*/function(){var _ref=_wrapAsyncGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee(iterable){var saxesParser,error,events,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_iterator,_step,_value,chunk;return regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:// TODO: Remove once node v8 is deprecated |
|
|
// Detect and upgrade old streams |
|
|
if(iterable.pipe&&!iterable[Symbol.asyncIterator]){iterable=iterable.pipe(new PassThrough());}saxesParser=new SaxesParser();saxesParser.on('error',function(err){error=err;});events=[];saxesParser.on('opentag',function(value){return events.push({eventType:'opentag',value:value});});saxesParser.on('text',function(value){return events.push({eventType:'text',value:value});});saxesParser.on('closetag',function(value){return events.push({eventType:'closetag',value:value});});_iteratorNormalCompletion=true;_didIteratorError=false;_context.prev=9;_iterator=_asyncIterator(iterable);case 11:_context.next=13;return _awaitAsyncGenerator(_iterator.next());case 13:_step=_context.sent;_iteratorNormalCompletion=_step.done;_context.next=17;return _awaitAsyncGenerator(_step.value);case 17:_value=_context.sent;if(_iteratorNormalCompletion){_context.next=29;break;}chunk=_value;saxesParser.write(chunk.toString());// saxesParser.write and saxesParser.on() are synchronous, |
|
|
// so we can only reach the below line once all events have been emitted |
|
|
if(!error){_context.next=23;break;}throw error;case 23:_context.next=25;return events;case 25:events=[];case 26:_iteratorNormalCompletion=true;_context.next=11;break;case 29:_context.next=35;break;case 31:_context.prev=31;_context.t0=_context["catch"](9);_didIteratorError=true;_iteratorError=_context.t0;case 35:_context.prev=35;_context.prev=36;if(!(!_iteratorNormalCompletion&&_iterator.return!=null)){_context.next=40;break;}_context.next=40;return _awaitAsyncGenerator(_iterator.return());case 40:_context.prev=40;if(!_didIteratorError){_context.next=43;break;}throw _iteratorError;case 43:return _context.finish(40);case 44:return _context.finish(35);case 45:case"end":return _context.stop();}}},_callee,null,[[9,31,35,45],[36,,40,44]]);}));return function(_x){return _ref.apply(this,arguments);};}();},{"readable-stream":467,"saxes":471}],20:[function(require,module,exports){"use strict";var colCache=require('./col-cache');// const cellRefRegex = /(([a-z_\-0-9]*)!)?[$]?([a-z]+)[$]?([1-9][0-9]*)/i; |
|
|
var replacementCandidateRx=/(([a-z_\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi;var CRrx=/^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i;function slideFormula(formula,fromCell,toCell){var offset=colCache.decode(fromCell);var to=colCache.decode(toCell);return formula.replace(replacementCandidateRx,function(refMatch,sheet,sheetMaybe,addrPart,trailingParen){if(trailingParen){return refMatch;}var match=CRrx.exec(addrPart);if(match){var colDollar=match[1];var colStr=match[2].toUpperCase();var rowDollar=match[3];var rowStr=match[4];if(colStr.length>3||colStr.length===3&&colStr>'XFD'){// > XFD is the highest col number in excel 2007 and beyond, so this is a named range |
|
|
return refMatch;}var col=colCache.l2n(colStr);var row=parseInt(rowStr,10);if(!colDollar){col+=to.col-offset.col;}if(!rowDollar){row+=to.row-offset.row;}var res=(sheet||'')+(colDollar||'')+colCache.n2l(col)+(rowDollar||'')+row;return res;}return refMatch;});}module.exports={slideFormula:slideFormula};},{"./col-cache":17}],21:[function(require,module,exports){(function(process,Buffer){"use strict";function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value;}catch(error){reject(error);return;}if(info.done){resolve(value);}else{Promise.resolve(value).then(_next,_throw);}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value);}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err);}_next(undefined);});};}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}/* eslint-disable max-classes-per-file */var Stream=require('readable-stream');var utils=require('./utils');var StringBuf=require('./string-buf');// ============================================================================= |
|
|
// data chunks - encapsulating incoming data |
|
|
var StringChunk=/*#__PURE__*/function(){function StringChunk(data,encoding){_classCallCheck(this,StringChunk);this._data=data;this._encoding=encoding;}_createClass(StringChunk,[{key:"copy",// copy to target buffer |
|
|
value:function copy(target,targetOffset,offset,length){return this.toBuffer().copy(target,targetOffset,offset,length);}},{key:"toBuffer",value:function toBuffer(){if(!this._buffer){this._buffer=Buffer.from(this._data,this._encoding);}return this._buffer;}},{key:"length",get:function get(){return this.toBuffer().length;}}]);return StringChunk;}();var StringBufChunk=/*#__PURE__*/function(){function StringBufChunk(data){_classCallCheck(this,StringBufChunk);this._data=data;}_createClass(StringBufChunk,[{key:"copy",// copy to target buffer |
|
|
value:function copy(target,targetOffset,offset,length){// eslint-disable-next-line no-underscore-dangle |
|
|
return this._data._buf.copy(target,targetOffset,offset,length);}},{key:"toBuffer",value:function toBuffer(){return this._data.toBuffer();}},{key:"length",get:function get(){return this._data.length;}}]);return StringBufChunk;}();var BufferChunk=/*#__PURE__*/function(){function BufferChunk(data){_classCallCheck(this,BufferChunk);this._data=data;}_createClass(BufferChunk,[{key:"copy",// copy to target buffer |
|
|
value:function copy(target,targetOffset,offset,length){this._data.copy(target,targetOffset,offset,length);}},{key:"toBuffer",value:function toBuffer(){return this._data;}},{key:"length",get:function get(){return this._data.length;}}]);return BufferChunk;}();// ============================================================================= |
|
|
// ReadWriteBuf - a single buffer supporting simple read-write |
|
|
var ReadWriteBuf=/*#__PURE__*/function(){function ReadWriteBuf(size){_classCallCheck(this,ReadWriteBuf);this.size=size;// the buffer |
|
|
this.buffer=Buffer.alloc(size);// read index |
|
|
this.iRead=0;// write index |
|
|
this.iWrite=0;}_createClass(ReadWriteBuf,[{key:"toBuffer",value:function toBuffer(){if(this.iRead===0&&this.iWrite===this.size){return this.buffer;}var buf=Buffer.alloc(this.iWrite-this.iRead);this.buffer.copy(buf,0,this.iRead,this.iWrite);return buf;}},{key:"read",value:function read(size){var buf;// read size bytes from buffer and return buffer |
|
|
if(size===0){// special case - return null if no data requested |
|
|
return null;}if(size===undefined||size>=this.length){// if no size specified or size is at least what we have then return all of the bytes |
|
|
buf=this.toBuffer();this.iRead=this.iWrite;return buf;}// otherwise return a chunk |
|
|
buf=Buffer.alloc(size);this.buffer.copy(buf,0,this.iRead,size);this.iRead+=size;return buf;}},{key:"write",value:function write(chunk,offset,length){// write as many bytes from data from optional source offset |
|
|
// and return number of bytes written |
|
|
var size=Math.min(length,this.size-this.iWrite);chunk.copy(this.buffer,this.iWrite,offset,offset+size);this.iWrite+=size;return size;}},{key:"length",get:function get(){return this.iWrite-this.iRead;}},{key:"eod",get:function get(){return this.iRead===this.iWrite;}},{key:"full",get:function get(){return this.iWrite===this.size;}}]);return ReadWriteBuf;}();// ============================================================================= |
|
|
// StreamBuf - a multi-purpose read-write stream |
|
|
// As MemBuf - write as much data as you like. Then call toBuffer() to consolidate |
|
|
// As StreamHub - pipe to multiple writables |
|
|
// As readable stream - feed data into the writable part and have some other code read from it. |
|
|
// Note: Not sure why but StreamBuf does not like JS "class" sugar. It fails the |
|
|
// integration tests |
|
|
var StreamBuf=function StreamBuf(options){options=options||{};this.bufSize=options.bufSize||1024*1024;this.buffers=[];// batch mode fills a buffer completely before passing the data on |
|
|
// to pipes or 'readable' event listeners |
|
|
this.batch=options.batch||false;this.corked=false;// where in the current writable buffer we're up to |
|
|
this.inPos=0;// where in the current readable buffer we've read up to |
|
|
this.outPos=0;// consuming pipe streams go here |
|
|
this.pipes=[];// controls emit('data') |
|
|
this.paused=false;this.encoding=null;};utils.inherits(StreamBuf,Stream.Duplex,{toBuffer:function toBuffer(){switch(this.buffers.length){case 0:return null;case 1:return this.buffers[0].toBuffer();default:return Buffer.concat(this.buffers.map(function(rwBuf){return rwBuf.toBuffer();}));}},// writable |
|
|
// event drain - if write returns false (which it won't), indicates when safe to write again. |
|
|
// finish - end() has been called |
|
|
// pipe(src) - pipe() has been called on readable |
|
|
// unpipe(src) - unpipe() has been called on readable |
|
|
// error - duh |
|
|
_getWritableBuffer:function _getWritableBuffer(){if(this.buffers.length){var last=this.buffers[this.buffers.length-1];if(!last.full){return last;}}var buf=new ReadWriteBuf(this.bufSize);this.buffers.push(buf);return buf;},_pipe:function _pipe(chunk){var _this=this;return _asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee(){var write;return regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:write=function write(pipe){return new Promise(function(resolve){pipe.write(chunk.toBuffer(),function(){resolve();});});};_context.next=3;return Promise.all(_this.pipes.map(write));case 3:case"end":return _context.stop();}}},_callee);}))();},_writeToBuffers:function _writeToBuffers(chunk){var inPos=0;var inLen=chunk.length;while(inPos<inLen){// find writable buffer |
|
|
var buffer=this._getWritableBuffer();// write some data |
|
|
inPos+=buffer.write(chunk,inPos,inLen-inPos);}},write:function write(data,encoding,callback){var _this2=this;return _asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee2(){var chunk;return regeneratorRuntime.wrap(function _callee2$(_context2){while(1){switch(_context2.prev=_context2.next){case 0:if(encoding instanceof Function){callback=encoding;encoding='utf8';}callback=callback||utils.nop;// encapsulate data into a chunk |
|
|
if(!(data instanceof StringBuf)){_context2.next=6;break;}chunk=new StringBufChunk(data);_context2.next=15;break;case 6:if(!(data instanceof Buffer)){_context2.next=10;break;}chunk=new BufferChunk(data);_context2.next=15;break;case 10:if(!(typeof data==='string'||data instanceof String||data instanceof ArrayBuffer)){_context2.next=14;break;}chunk=new StringChunk(data,encoding);_context2.next=15;break;case 14:throw new Error('Chunk must be one of type String, Buffer or StringBuf.');case 15:if(!_this2.pipes.length){_context2.next=31;break;}if(!_this2.batch){_context2.next=21;break;}_this2._writeToBuffers(chunk);while(!_this2.corked&&_this2.buffers.length>1){_this2._pipe(_this2.buffers.shift());}_context2.next=29;break;case 21:if(_this2.corked){_context2.next=27;break;}_context2.next=24;return _this2._pipe(chunk);case 24:callback();_context2.next=29;break;case 27:_this2._writeToBuffers(chunk);process.nextTick(callback);case 29:_context2.next=34;break;case 31:if(!_this2.paused){_this2.emit('data',chunk.toBuffer());}_this2._writeToBuffers(chunk);_this2.emit('readable');case 34:return _context2.abrupt("return",true);case 35:case"end":return _context2.stop();}}},_callee2);}))();},cork:function cork(){this.corked=true;},_flush:function _flush()/* destination */{// if we have comsumers... |
|
|
if(this.pipes.length){// and there's stuff not written |
|
|
while(this.buffers.length){this._pipe(this.buffers.shift());}}},uncork:function uncork(){this.corked=false;this._flush();},end:function end(chunk,encoding,callback){var _this3=this;var writeComplete=function writeComplete(error){if(error){callback(error);}else{_this3._flush();_this3.pipes.forEach(function(pipe){pipe.end();});_this3.emit('finish');}};if(chunk){this.write(chunk,encoding,writeComplete);}else{writeComplete();}},// readable |
|
|
// event readable - some data is now available |
|
|
// event data - switch to flowing mode - feeds chunks to handler |
|
|
// event end - no more data |
|
|
// event close - optional, indicates upstream close |
|
|
// event error - duh |
|
|
read:function read(size){var buffers;// read min(buffer, size || infinity) |
|
|
if(size){buffers=[];while(size&&this.buffers.length&&!this.buffers[0].eod){var first=this.buffers[0];var buffer=first.read(size);size-=buffer.length;buffers.push(buffer);if(first.eod&&first.full){this.buffers.shift();}}return Buffer.concat(buffers);}buffers=this.buffers.map(function(buf){return buf.toBuffer();}).filter(Boolean);this.buffers=[];return Buffer.concat(buffers);},setEncoding:function setEncoding(encoding){// causes stream.read or stream.on('data) to return strings of encoding instead of Buffer objects |
|
|
this.encoding=encoding;},pause:function pause(){this.paused=true;},resume:function resume(){this.paused=false;},isPaused:function isPaused(){return!!this.paused;},pipe:function pipe(destination){// add destination to pipe list & write current buffer |
|
|
this.pipes.push(destination);if(!this.paused&&this.buffers.length){this.end();}},unpipe:function unpipe(destination){// remove destination from pipe list |
|
|
this.pipes=this.pipes.filter(function(pipe){return pipe!==destination;});},unshift:function unshift()/* chunk */{// some numpty has read some data that's not for them and they want to put it back! |
|
|
// Might implement this some day |
|
|
throw new Error('Not Implemented');},wrap:function wrap()/* stream */{// not implemented |
|
|
throw new Error('Not Implemented');}});module.exports=StreamBuf;}).call(this,require('_process'),require("buffer").Buffer);},{"./string-buf":22,"./utils":24,"_process":443,"buffer":214,"readable-stream":467}],22:[function(require,module,exports){(function(Buffer){"use strict";function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}// StringBuf - a way to keep string memory operations to a minimum |
|
|
// while building the strings for the xml files |
|
|
var StringBuf=/*#__PURE__*/function(){function StringBuf(options){_classCallCheck(this,StringBuf);this._buf=Buffer.alloc(options&&options.size||16384);this._encoding=options&&options.encoding||'utf8';// where in the buffer we are at |
|
|
this._inPos=0;// for use by toBuffer() |
|
|
this._buffer=undefined;}_createClass(StringBuf,[{key:"toBuffer",value:function toBuffer(){// return the current data as a single enclosing buffer |
|
|
if(!this._buffer){this._buffer=Buffer.alloc(this.length);this._buf.copy(this._buffer,0,0,this.length);}return this._buffer;}},{key:"reset",value:function reset(position){position=position||0;this._buffer=undefined;this._inPos=position;}},{key:"_grow",value:function _grow(min){var size=this._buf.length*2;while(size<min){size*=2;}var buf=Buffer.alloc(size);this._buf.copy(buf,0);this._buf=buf;}},{key:"addText",value:function addText(text){this._buffer=undefined;var inPos=this._inPos+this._buf.write(text,this._inPos,this._encoding);// if we've hit (or nearing capacity), grow the buf |
|
|
while(inPos>=this._buf.length-4){this._grow(this._inPos+text.length);// keep trying to write until we've completely written the text |
|
|
inPos=this._inPos+this._buf.write(text,this._inPos,this._encoding);}this._inPos=inPos;}},{key:"addStringBuf",value:function addStringBuf(inBuf){if(inBuf.length){this._buffer=undefined;if(this.length+inBuf.length>this.capacity){this._grow(this.length+inBuf.length);}// eslint-disable-next-line no-underscore-dangle |
|
|
inBuf._buf.copy(this._buf,this._inPos,0,inBuf.length);this._inPos+=inBuf.length;}}},{key:"length",get:function get(){return this._inPos;}},{key:"capacity",get:function get(){return this._buf.length;}},{key:"buffer",get:function get(){return this._buf;}}]);return StringBuf;}();module.exports=StringBuf;}).call(this,require("buffer").Buffer);},{"buffer":214}],23:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}var toString=Object.prototype.toString;var _={each:function each(obj,cb){if(obj){if(Array.isArray(obj)){obj.forEach(cb);}else{Object.keys(obj).forEach(function(key){cb(obj[key],key);});}}},some:function some(obj,cb){if(obj){if(Array.isArray(obj)){return obj.some(cb);}return Object.keys(obj).some(function(key){return cb(obj[key],key);});}return false;},every:function every(obj,cb){if(obj){if(Array.isArray(obj)){return obj.every(cb);}return Object.keys(obj).every(function(key){return cb(obj[key],key);});}return true;},map:function map(obj,cb){if(obj){if(Array.isArray(obj)){return obj.map(cb);}return Object.keys(obj).map(function(key){return cb(obj[key],key);});}return[];},keyBy:function keyBy(a,p){return a.reduce(function(o,v){o[v[p]]=v;return o;},{});},isEqual:function isEqual(a,b){var aType=_typeof(a);var bType=_typeof(b);var aArray=Array.isArray(a);var bArray=Array.isArray(b);if(aType!==bType){return false;}switch(_typeof(a)){case'object':if(aArray||bArray){if(aArray&&bArray){return a.length===b.length&&a.every(function(aValue,index){var bValue=b[index];return _.isEqual(aValue,bValue);});}return false;}return _.every(a,function(aValue,key){var bValue=b[key];return _.isEqual(aValue,bValue);});default:return a===b;}},escapeHtml:function escapeHtml(html){return html.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"').replace(/'/g,''');},strcmp:function strcmp(a,b){if(a<b)return-1;if(a>b)return 1;return 0;},isUndefined:function isUndefined(val){return toString.call(val)==='[object Undefined]';},isObject:function isObject(val){return toString.call(val)==='[object Object]';},deepMerge:function deepMerge(){var target=arguments[0]||{};var length=arguments.length;// eslint-disable-next-line one-var |
|
|
var src,clone,copyIsArray;function assignValue(val,key){src=target[key];copyIsArray=Array.isArray(val);if(_.isObject(val)||copyIsArray){if(copyIsArray){copyIsArray=false;clone=src&&Array.isArray(src)?src:[];}else{clone=src&&_.isObject(src)?src:{};}target[key]=_.deepMerge(clone,val);}else if(!_.isUndefined(val)){target[key]=val;}}for(var i=0;i<length;i++){_.each(arguments[i],assignValue);}return target;}};module.exports=_;},{}],24:[function(require,module,exports){(function(global,setImmediate){"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);};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){// eslint-disable-next-line no-control-regex |
|
|
return text.replace(/[<>&'"\x7F\x00-\x08\x0B-\x0C\x0E-\x1F]/g,function(c){switch(c){case'<':return'<';case'>':return'>';case'&':return'&';case'\'':return''';case'"':return'"';default:return'';}});},xmlDecode:function xmlDecode(text){return text.replace(/&([a-z]*);/,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;}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{},require("timers").setImmediate);},{"fs":213,"timers":496}],25:[function(require,module,exports){"use strict";function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}var _=require('./under-dash');var utils=require('./utils');// constants |
|
|
var OPEN_ANGLE='<';var CLOSE_ANGLE='>';var OPEN_ANGLE_SLASH='</';var CLOSE_SLASH_ANGLE='/>';var EQUALS_QUOTE='="';var QUOTE='"';var SPACE=' ';function pushAttribute(xml,name,value){xml.push(SPACE);xml.push(name);xml.push(EQUALS_QUOTE);xml.push(utils.xmlEncode(value.toString()));xml.push(QUOTE);}function pushAttributes(xml,attributes){if(attributes){_.each(attributes,function(value,name){if(value!==undefined){pushAttribute(xml,name,value);}});}}var XmlStream=/*#__PURE__*/function(){function XmlStream(){_classCallCheck(this,XmlStream);this._xml=[];this._stack=[];this._rollbacks=[];}_createClass(XmlStream,[{key:"openXml",value:function openXml(docAttributes){var xml=this._xml;// <?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
|
|
xml.push('<?xml');pushAttributes(xml,docAttributes);xml.push('?>\n');}},{key:"openNode",value:function openNode(name,attributes){var parent=this.tos;var xml=this._xml;if(parent&&this.open){xml.push(CLOSE_ANGLE);}this._stack.push(name);// start streaming node |
|
|
xml.push(OPEN_ANGLE);xml.push(name);pushAttributes(xml,attributes);this.leaf=true;this.open=true;}},{key:"addAttribute",value:function addAttribute(name,value){if(!this.open){throw new Error('Cannot write attributes to node if it is not open');}if(value!==undefined){pushAttribute(this._xml,name,value);}}},{key:"addAttributes",value:function addAttributes(attrs){if(!this.open){throw new Error('Cannot write attributes to node if it is not open');}pushAttributes(this._xml,attrs);}},{key:"writeText",value:function writeText(text){var xml=this._xml;if(this.open){xml.push(CLOSE_ANGLE);this.open=false;}this.leaf=false;xml.push(utils.xmlEncode(text.toString()));}},{key:"writeXml",value:function writeXml(xml){if(this.open){this._xml.push(CLOSE_ANGLE);this.open=false;}this.leaf=false;this._xml.push(xml);}},{key:"closeNode",value:function closeNode(){var node=this._stack.pop();var xml=this._xml;if(this.leaf){xml.push(CLOSE_SLASH_ANGLE);}else{xml.push(OPEN_ANGLE_SLASH);xml.push(node);xml.push(CLOSE_ANGLE);}this.open=false;this.leaf=false;}},{key:"leafNode",value:function leafNode(name,attributes,text){this.openNode(name,attributes);if(text!==undefined){// zeros need to be written |
|
|
this.writeText(text);}this.closeNode();}},{key:"closeAll",value:function closeAll(){while(this._stack.length){this.closeNode();}}},{key:"addRollback",value:function addRollback(){this._rollbacks.push({xml:this._xml.length,stack:this._stack.length,leaf:this.leaf,open:this.open});return this.cursor;}},{key:"commit",value:function commit(){this._rollbacks.pop();}},{key:"rollback",value:function rollback(){var r=this._rollbacks.pop();if(this._xml.length>r.xml){this._xml.splice(r.xml,this._xml.length-r.xml);}if(this._stack.length>r.stack){this._stack.splice(r.stack,this._stack.length-r.stack);}this.leaf=r.leaf;this.open=r.open;}},{key:"tos",get:function get(){return this._stack.length?this._stack[this._stack.length-1]:undefined;}},{key:"cursor",get:function get(){// handy way to track whether anything has been added |
|
|
return this._xml.length;}},{key:"xml",get:function get(){this.closeAll();return this._xml.join('');}}]);return XmlStream;}();XmlStream.StdDocAttributes={version:'1.0',encoding:'UTF-8',standalone:'yes'};module.exports=XmlStream;},{"./under-dash":23,"./utils":24}],26:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value;}catch(error){reject(error);return;}if(info.done){resolve(value);}else{Promise.resolve(value).then(_next,_throw);}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value);}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err);}_next(undefined);});};}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var events=require('events');var JSZip=require('jszip');var StreamBuf=require('./stream-buf');// ============================================================================= |
|
|
// The ZipWriter class |
|
|
// Packs streamed data into an output zip stream |
|
|
var ZipWriter=/*#__PURE__*/function(_events$EventEmitter){_inherits(ZipWriter,_events$EventEmitter);var _super=_createSuper(ZipWriter);function ZipWriter(options){var _this;_classCallCheck(this,ZipWriter);_this=_super.call(this);_this.options=Object.assign({type:'nodebuffer',compression:'DEFLATE'},options);_this.zip=new JSZip();_this.stream=new StreamBuf();return _this;}_createClass(ZipWriter,[{key:"append",value:function append(data,options){if(options.hasOwnProperty('base64')&&options.base64){this.zip.file(options.name,data,{base64:true});}else{this.zip.file(options.name,data);}}},{key:"finalize",value:function(){var _finalize=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee(){var content;return regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:_context.next=2;return this.zip.generateAsync(this.options);case 2:content=_context.sent;this.stream.end(content);this.emit('finish');case 5:case"end":return _context.stop();}}},_callee,this);}));function finalize(){return _finalize.apply(this,arguments);}return finalize;}()// ========================================================================== |
|
|
// Stream.Readable interface |
|
|
},{key:"read",value:function read(size){return this.stream.read(size);}},{key:"setEncoding",value:function setEncoding(encoding){return this.stream.setEncoding(encoding);}},{key:"pause",value:function pause(){return this.stream.pause();}},{key:"resume",value:function resume(){return this.stream.resume();}},{key:"isPaused",value:function isPaused(){return this.stream.isPaused();}},{key:"pipe",value:function pipe(destination,options){return this.stream.pipe(destination,options);}},{key:"unpipe",value:function unpipe(destination){return this.stream.unpipe(destination);}},{key:"unshift",value:function unshift(chunk){return this.stream.unshift(chunk);}},{key:"wrap",value:function wrap(stream){return this.stream.wrap(stream);}}]);return ZipWriter;}(events.EventEmitter);// ============================================================================= |
|
|
module.exports={ZipWriter:ZipWriter};},{"./stream-buf":21,"events":344,"jszip":376}],27:[function(require,module,exports){"use strict";module.exports={0:{f:'General'},1:{f:'0'},2:{f:'0.00'},3:{f:'#,##0'},4:{f:'#,##0.00'},9:{f:'0%'},10:{f:'0.00%'},11:{f:'0.00E+00'},12:{f:'# ?/?'},13:{f:'# ??/??'},14:{f:'mm-dd-yy'},15:{f:'d-mmm-yy'},16:{f:'d-mmm'},17:{f:'mmm-yy'},18:{f:'h:mm AM/PM'},19:{f:'h:mm:ss AM/PM'},20:{f:'h:mm'},21:{f:'h:mm:ss'},22:{f:'m/d/yy "h":mm'},27:{'zh-tw':'[$-404]e/m/d','zh-cn':'yyyy"年"m"月"','ja-jp':'[$-411]ge.m.d','ko-kr':'yyyy"年" mm"月" dd"日"'},28:{'zh-tw':'[$-404]e"年"m"月"d"日"','zh-cn':'m"月"d"日"','ja-jp':'[$-411]ggge"年"m"月"d"日"','ko-kr':'mm-dd'},29:{'zh-tw':'[$-404]e"年"m"月"d"日"','zh-cn':'m"月"d"日"','ja-jp':'[$-411]ggge"年"m"月"d"日"','ko-kr':'mm-dd'},30:{'zh-tw':'m/d/yy ','zh-cn':'m-d-yy','ja-jp':'m/d/yy','ko-kr':'mm-dd-yy'},31:{'zh-tw':'yyyy"年"m"月"d"日"','zh-cn':'yyyy"年"m"月"d"日"','ja-jp':'yyyy"年"m"月"d"日"','ko-kr':'yyyy"년" mm"월" dd"일"'},32:{'zh-tw':'hh"時"mm"分"','zh-cn':'h"时"mm"分"','ja-jp':'h"時"mm"分"','ko-kr':'h"시" mm"분"'},33:{'zh-tw':'hh"時"mm"分"ss"秒"','zh-cn':'h"时"mm"分"ss"秒"','ja-jp':'h"時"mm"分"ss"秒"','ko-kr':'h"시" mm"분" ss"초"'},34:{'zh-tw':'上午/下午 hh"時"mm"分"','zh-cn':'上午/下午 h"时"mm"分"','ja-jp':'yyyy"年"m"月"','ko-kr':'yyyy-mm-dd'},35:{'zh-tw':'上午/下午 hh"時"mm"分"ss"秒"','zh-cn':'上午/下午 h"时"mm"分"ss"秒"','ja-jp':'m"月"d"日"','ko-kr':'yyyy-mm-dd'},36:{'zh-tw':'[$-404]e/m/d','zh-cn':'yyyy"年"m"月"','ja-jp':'[$-411]ge.m.d','ko-kr':'yyyy"年" mm"月" dd"日"'},37:{f:'#,##0 ;(#,##0)'},38:{f:'#,##0 ;[Red](#,##0)'},39:{f:'#,##0.00 ;(#,##0.00)'},40:{f:'#,##0.00 ;[Red](#,##0.00)'},45:{f:'mm:ss'},46:{f:'[h]:mm:ss'},47:{f:'mmss.0'},48:{f:'##0.0E+0'},49:{f:'@'},50:{'zh-tw':'[$-404]e/m/d','zh-cn':'yyyy"年"m"月"','ja-jp':'[$-411]ge.m.d','ko-kr':'yyyy"年" mm"月" dd"日"'},51:{'zh-tw':'[$-404]e"年"m"月"d"日"','zh-cn':'m"月"d"日"','ja-jp':'[$-411]ggge"年"m"月"d"日"','ko-kr':'mm-dd'},52:{'zh-tw':'上午/下午 hh"時"mm"分"','zh-cn':'yyyy"年"m"月"','ja-jp':'yyyy"年"m"月"','ko-kr':'yyyy-mm-dd'},53:{'zh-tw':'上午/下午 hh"時"mm"分"ss"秒"','zh-cn':'m"月"d"日"','ja-jp':'m"月"d"日"','ko-kr':'yyyy-mm-dd'},54:{'zh-tw':'[$-404]e"年"m"月"d"日"','zh-cn':'m"月"d"日"','ja-jp':'[$-411]ggge"年"m"月"d"日"','ko-kr':'mm-dd'},55:{'zh-tw':'上午/下午 hh"時"mm"分"','zh-cn':'上午/下午 h"时"mm"分"','ja-jp':'yyyy"年"m"月"','ko-kr':'yyyy-mm-dd'},56:{'zh-tw':'上午/下午 hh"時"mm"分"ss"秒"','zh-cn':'上午/下午 h"时"mm"分"ss"秒"','ja-jp':'m"月"d"日"','ko-kr':'yyyy-mm-dd'},57:{'zh-tw':'[$-404]e/m/d','zh-cn':'yyyy"年"m"月"','ja-jp':'[$-411]ge.m.d','ko-kr':'yyyy"年" mm"月" dd"日"'},58:{'zh-tw':'[$-404]e"年"m"月"d"日"','zh-cn':'m"月"d"日"','ja-jp':'[$-411]ggge"年"m"月"d"日"','ko-kr':'mm-dd'},59:{'th-th':'t0'},60:{'th-th':'t0.00'},61:{'th-th':'t#,##0'},62:{'th-th':'t#,##0.00'},67:{'th-th':'t0%'},68:{'th-th':'t0.00%'},69:{'th-th':'t# ?/?'},70:{'th-th':'t# ??/??'},81:{'th-th':'d/m/bb'}};},{}],28:[function(require,module,exports){'use strict';module.exports={OfficeDocument:'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument',Worksheet:'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet',CalcChain:'http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain',SharedStrings:'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings',Styles:'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles',Theme:'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme',Hyperlink:'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink',Image:'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',CoreProperties:'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties',ExtenderProperties:'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',Comments:'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments',VmlDrawing:'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing',Table:'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table'};},{}],29:[function(require,module,exports){"use strict";function _createForOfIteratorHelper(o){if(typeof Symbol==="undefined"||o[Symbol.iterator]==null){if(Array.isArray(o)||(o=_unsupportedIterableToArray(o))){var i=0;var F=function F(){};return{s:F,n:function n(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]};},e:function e(_e){throw _e;},f:F};}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}var it,normalCompletion=true,didErr=false,err;return{s:function s(){it=o[Symbol.iterator]();},n:function n(){var step=it.next();normalCompletion=step.done;return step;},e:function e(_e2){didErr=true;err=_e2;},f:function f(){try{if(!normalCompletion&&it.return!=null)it.return();}finally{if(didErr)throw err;}}};}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen);}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++){arr2[i]=arr[i];}return arr2;}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value;}catch(error){reject(error);return;}if(info.done){resolve(value);}else{Promise.resolve(value).then(_next,_throw);}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value);}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err);}_next(undefined);});};}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _asyncIterator(iterable){var method;if(typeof Symbol!=="undefined"){if(Symbol.asyncIterator){method=iterable[Symbol.asyncIterator];if(method!=null)return method.call(iterable);}if(Symbol.iterator){method=iterable[Symbol.iterator];if(method!=null)return method.call(iterable);}}throw new TypeError("Object is not async iterable");}var parseSax=require('../../utils/parse-sax');var XmlStream=require('../../utils/xml-stream');/* 'virtual' methods used as a form of documentation */ /* eslint-disable class-methods-use-this */ // Base class for Xforms |
|
|
var BaseXform=/*#__PURE__*/function(){function BaseXform(){_classCallCheck(this,BaseXform);}_createClass(BaseXform,[{key:"prepare",// constructor(/* model, name */) {} |
|
|
// ============================================================ |
|
|
// Virtual Interface |
|
|
value:function prepare()/* model, options */{// optional preparation (mutation) of model so it is ready for write |
|
|
}},{key:"render",value:function render()/* xmlStream, model */{// convert model to xml |
|
|
}},{key:"parseOpen",value:function parseOpen(node){// XML node opened |
|
|
}},{key:"parseText",value:function parseText(text){// chunk of text encountered for current node |
|
|
}},{key:"parseClose",value:function parseClose(name){// XML node closed |
|
|
}},{key:"reconcile",value:function reconcile(model,options){}// optional post-parse step (opposite to prepare) |
|
|
// ============================================================ |
|
|
},{key:"reset",value:function reset(){// to make sure parses don't bleed to next iteration |
|
|
this.model=null;// if we have a map - reset them too |
|
|
if(this.map){Object.values(this.map).forEach(function(xform){if(xform instanceof BaseXform){xform.reset();}else if(xform.xform){xform.xform.reset();}});}}},{key:"mergeModel",value:function mergeModel(obj){// set obj's props to this.model |
|
|
this.model=Object.assign(this.model||{},obj);}},{key:"parse",value:function(){var _parse=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee(saxParser){var _iteratorNormalCompletion,_didIteratorError,_iteratorError,_iterator,_step,_value,events,_iterator2,_step2,_step2$value,eventType,value;return regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:_iteratorNormalCompletion=true;_didIteratorError=false;_context.prev=2;_iterator=_asyncIterator(saxParser);case 4:_context.next=6;return _iterator.next();case 6:_step=_context.sent;_iteratorNormalCompletion=_step.done;_context.next=10;return _step.value;case 10:_value=_context.sent;if(_iteratorNormalCompletion){_context.next=42;break;}events=_value;_iterator2=_createForOfIteratorHelper(events);_context.prev=14;_iterator2.s();case 16:if((_step2=_iterator2.n()).done){_context.next=31;break;}_step2$value=_step2.value,eventType=_step2$value.eventType,value=_step2$value.value;if(!(eventType==='opentag')){_context.next=22;break;}this.parseOpen(value);_context.next=29;break;case 22:if(!(eventType==='text')){_context.next=26;break;}this.parseText(value);_context.next=29;break;case 26:if(!(eventType==='closetag')){_context.next=29;break;}if(this.parseClose(value.name)){_context.next=29;break;}return _context.abrupt("return",this.model);case 29:_context.next=16;break;case 31:_context.next=36;break;case 33:_context.prev=33;_context.t0=_context["catch"](14);_iterator2.e(_context.t0);case 36:_context.prev=36;_iterator2.f();return _context.finish(36);case 39:_iteratorNormalCompletion=true;_context.next=4;break;case 42:_context.next=48;break;case 44:_context.prev=44;_context.t1=_context["catch"](2);_didIteratorError=true;_iteratorError=_context.t1;case 48:_context.prev=48;_context.prev=49;if(!(!_iteratorNormalCompletion&&_iterator.return!=null)){_context.next=53;break;}_context.next=53;return _iterator.return();case 53:_context.prev=53;if(!_didIteratorError){_context.next=56;break;}throw _iteratorError;case 56:return _context.finish(53);case 57:return _context.finish(48);case 58:return _context.abrupt("return",this.model);case 59:case"end":return _context.stop();}}},_callee,this,[[2,44,48,58],[14,33,36,39],[49,,53,57]]);}));function parse(_x){return _parse.apply(this,arguments);}return parse;}()},{key:"parseStream",value:function(){var _parseStream=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee2(stream){return regeneratorRuntime.wrap(function _callee2$(_context2){while(1){switch(_context2.prev=_context2.next){case 0:return _context2.abrupt("return",this.parse(parseSax(stream)));case 1:case"end":return _context2.stop();}}},_callee2,this);}));function parseStream(_x2){return _parseStream.apply(this,arguments);}return parseStream;}()},{key:"toXml",value:function toXml(model){var xmlStream=new XmlStream();this.render(xmlStream,model);return xmlStream.xml;}// ============================================================ |
|
|
// Useful Utilities |
|
|
},{key:"xml",get:function get(){// convenience function to get the xml of this.model |
|
|
// useful for manager types that are built during the prepare phase |
|
|
return this.toXml(this.model);}}],[{key:"toAttribute",value:function toAttribute(value,dflt){var always=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;if(value===undefined){if(always){return dflt;}}else if(always||value!==dflt){return value.toString();}return undefined;}},{key:"toStringAttribute",value:function toStringAttribute(value,dflt){var always=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;return BaseXform.toAttribute(value,dflt,always);}},{key:"toStringValue",value:function toStringValue(attr,dflt){return attr===undefined?dflt:attr;}},{key:"toBoolAttribute",value:function toBoolAttribute(value,dflt){var always=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;if(value===undefined){if(always){return dflt;}}else if(always||value!==dflt){return value?'1':'0';}return undefined;}},{key:"toBoolValue",value:function toBoolValue(attr,dflt){return attr===undefined?dflt:attr==='1';}},{key:"toIntAttribute",value:function toIntAttribute(value,dflt){var always=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;return BaseXform.toAttribute(value,dflt,always);}},{key:"toIntValue",value:function toIntValue(attr,dflt){return attr===undefined?dflt:parseInt(attr,10);}},{key:"toFloatAttribute",value:function toFloatAttribute(value,dflt){var always=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;return BaseXform.toAttribute(value,dflt,always);}},{key:"toFloatValue",value:function toFloatValue(attr,dflt){return attr===undefined?dflt:parseFloat(attr);}}]);return BaseXform;}();module.exports=BaseXform;},{"../../utils/parse-sax":19,"../../utils/xml-stream":25}],30:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var colCache=require('../../../utils/col-cache');var DefinedNamesXform=/*#__PURE__*/function(_BaseXform){_inherits(DefinedNamesXform,_BaseXform);var _super=_createSuper(DefinedNamesXform);function DefinedNamesXform(){_classCallCheck(this,DefinedNamesXform);return _super.apply(this,arguments);}_createClass(DefinedNamesXform,[{key:"render",value:function render(xmlStream,model){// <definedNames> |
|
|
// <definedName name="name">name.ranges.join(',')</definedName> |
|
|
// <definedName name="_xlnm.Print_Area" localSheetId="0">name.ranges.join(',')</definedName> |
|
|
// </definedNames> |
|
|
xmlStream.openNode('definedName',{name:model.name,localSheetId:model.localSheetId});xmlStream.writeText(model.ranges.join(','));xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case'definedName':this._parsedName=node.attributes.name;this._parsedLocalSheetId=node.attributes.localSheetId;this._parsedText=[];return true;default:return false;}}},{key:"parseText",value:function parseText(text){this._parsedText.push(text);}},{key:"parseClose",value:function parseClose(){this.model={name:this._parsedName,ranges:extractRanges(this._parsedText.join(''))};if(this._parsedLocalSheetId!==undefined){this.model.localSheetId=parseInt(this._parsedLocalSheetId,10);}return false;}}]);return DefinedNamesXform;}(BaseXform);function isValidRange(range){try{colCache.decodeEx(range);return true;}catch(err){return false;}}function extractRanges(parsedText){var ranges=[];var quotesOpened=false;var last='';parsedText.split(',').forEach(function(item){if(!item){return;}var quotes=(item.match(/'/g)||[]).length;if(!quotes){if(quotesOpened){last+="".concat(item,",");}else if(isValidRange(item)){ranges.push(item);}return;}var quotesEven=quotes%2===0;if(!quotesOpened&"esEven&&isValidRange(item)){ranges.push(item);}else if(quotesOpened&&!quotesEven){quotesOpened=false;if(isValidRange(last+item)){ranges.push(last+item);}last='';}else{quotesOpened=true;last+="".concat(item,",");}});return ranges;}module.exports=DefinedNamesXform;},{"../../../utils/col-cache":17,"../base-xform":29}],31:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var utils=require('../../../utils/utils');var BaseXform=require('../base-xform');var WorksheetXform=/*#__PURE__*/function(_BaseXform){_inherits(WorksheetXform,_BaseXform);var _super=_createSuper(WorksheetXform);function WorksheetXform(){_classCallCheck(this,WorksheetXform);return _super.apply(this,arguments);}_createClass(WorksheetXform,[{key:"render",value:function render(xmlStream,model){xmlStream.leafNode('sheet',{sheetId:model.id,name:model.name,state:model.state,'r:id':model.rId});}},{key:"parseOpen",value:function parseOpen(node){if(node.name==='sheet'){this.model={name:utils.xmlDecode(node.attributes.name),id:parseInt(node.attributes.sheetId,10),state:node.attributes.state,rId:node.attributes['r:id']};return true;}return false;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}}]);return WorksheetXform;}(BaseXform);module.exports=WorksheetXform;},{"../../../utils/utils":24,"../base-xform":29}],32:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var WorkbookCalcPropertiesXform=/*#__PURE__*/function(_BaseXform){_inherits(WorkbookCalcPropertiesXform,_BaseXform);var _super=_createSuper(WorkbookCalcPropertiesXform);function WorkbookCalcPropertiesXform(){_classCallCheck(this,WorkbookCalcPropertiesXform);return _super.apply(this,arguments);}_createClass(WorkbookCalcPropertiesXform,[{key:"render",value:function render(xmlStream,model){xmlStream.leafNode('calcPr',{calcId:171027,fullCalcOnLoad:model.fullCalcOnLoad?1:undefined});}},{key:"parseOpen",value:function parseOpen(node){if(node.name==='calcPr'){this.model={};return true;}return false;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}}]);return WorkbookCalcPropertiesXform;}(BaseXform);module.exports=WorkbookCalcPropertiesXform;},{"../base-xform":29}],33:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var WorksheetPropertiesXform=/*#__PURE__*/function(_BaseXform){_inherits(WorksheetPropertiesXform,_BaseXform);var _super=_createSuper(WorksheetPropertiesXform);function WorksheetPropertiesXform(){_classCallCheck(this,WorksheetPropertiesXform);return _super.apply(this,arguments);}_createClass(WorksheetPropertiesXform,[{key:"render",value:function render(xmlStream,model){xmlStream.leafNode('workbookPr',{date1904:model.date1904?1:undefined,defaultThemeVersion:164011,filterPrivacy:1});}},{key:"parseOpen",value:function parseOpen(node){if(node.name==='workbookPr'){this.model={date1904:node.attributes.date1904==='1'};return true;}return false;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}}]);return WorksheetPropertiesXform;}(BaseXform);module.exports=WorksheetPropertiesXform;},{"../base-xform":29}],34:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var WorkbookViewXform=/*#__PURE__*/function(_BaseXform){_inherits(WorkbookViewXform,_BaseXform);var _super=_createSuper(WorkbookViewXform);function WorkbookViewXform(){_classCallCheck(this,WorkbookViewXform);return _super.apply(this,arguments);}_createClass(WorkbookViewXform,[{key:"render",value:function render(xmlStream,model){var attributes={xWindow:model.x||0,yWindow:model.y||0,windowWidth:model.width||12000,windowHeight:model.height||24000,firstSheet:model.firstSheet,activeTab:model.activeTab};if(model.visibility&&model.visibility!=='visible'){attributes.visibility=model.visibility;}xmlStream.leafNode('workbookView',attributes);}},{key:"parseOpen",value:function parseOpen(node){if(node.name==='workbookView'){var model=this.model={};var addS=function addS(name,value,dflt){var s=value!==undefined?model[name]=value:dflt;if(s!==undefined){model[name]=s;}};var addN=function addN(name,value,dflt){var n=value!==undefined?model[name]=parseInt(value,10):dflt;if(n!==undefined){model[name]=n;}};addN('x',node.attributes.xWindow,0);addN('y',node.attributes.yWindow,0);addN('width',node.attributes.windowWidth,25000);addN('height',node.attributes.windowHeight,10000);addS('visibility',node.attributes.visibility,'visible');addN('activeTab',node.attributes.activeTab,undefined);addN('firstSheet',node.attributes.firstSheet,undefined);return true;}return false;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}}]);return WorkbookViewXform;}(BaseXform);module.exports=WorkbookViewXform;},{"../base-xform":29}],35:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var _=require('../../../utils/under-dash');var colCache=require('../../../utils/col-cache');var XmlStream=require('../../../utils/xml-stream');var BaseXform=require('../base-xform');var StaticXform=require('../static-xform');var ListXform=require('../list-xform');var DefinedNameXform=require('./defined-name-xform');var SheetXform=require('./sheet-xform');var WorkbookViewXform=require('./workbook-view-xform');var WorkbookPropertiesXform=require('./workbook-properties-xform');var WorkbookCalcPropertiesXform=require('./workbook-calc-properties-xform');var WorkbookXform=/*#__PURE__*/function(_BaseXform){_inherits(WorkbookXform,_BaseXform);var _super=_createSuper(WorkbookXform);function WorkbookXform(){var _this;_classCallCheck(this,WorkbookXform);_this=_super.call(this);_this.map={fileVersion:WorkbookXform.STATIC_XFORMS.fileVersion,workbookPr:new WorkbookPropertiesXform(),bookViews:new ListXform({tag:'bookViews',count:false,childXform:new WorkbookViewXform()}),sheets:new ListXform({tag:'sheets',count:false,childXform:new SheetXform()}),definedNames:new ListXform({tag:'definedNames',count:false,childXform:new DefinedNameXform()}),calcPr:new WorkbookCalcPropertiesXform()};return _this;}_createClass(WorkbookXform,[{key:"prepare",value:function prepare(model){model.sheets=model.worksheets;// collate all the print areas from all of the sheets and add them to the defined names |
|
|
var printAreas=[];var index=0;// sheets is sparse array - calc index manually |
|
|
model.sheets.forEach(function(sheet){if(sheet.pageSetup&&sheet.pageSetup.printArea){sheet.pageSetup.printArea.split('&&').forEach(function(printArea){var printAreaComponents=printArea.split(':');var definedName={name:'_xlnm.Print_Area',ranges:["'".concat(sheet.name,"'!$").concat(printAreaComponents[0],":$").concat(printAreaComponents[1])],localSheetId:index};printAreas.push(definedName);});}if(sheet.pageSetup&&(sheet.pageSetup.printTitlesRow||sheet.pageSetup.printTitlesColumn)){var ranges=[];if(sheet.pageSetup.printTitlesColumn){var titlesColumns=sheet.pageSetup.printTitlesColumn.split(':');ranges.push("'".concat(sheet.name,"'!$").concat(titlesColumns[0],":$").concat(titlesColumns[1]));}if(sheet.pageSetup.printTitlesRow){var titlesRows=sheet.pageSetup.printTitlesRow.split(':');ranges.push("'".concat(sheet.name,"'!$").concat(titlesRows[0],":$").concat(titlesRows[1]));}var definedName={name:'_xlnm.Print_Titles',ranges:ranges,localSheetId:index};printAreas.push(definedName);}index++;});if(printAreas.length){model.definedNames=model.definedNames.concat(printAreas);}(model.media||[]).forEach(function(medium,i){// assign name |
|
|
medium.name=medium.type+(i+1);});}},{key:"render",value:function render(xmlStream,model){xmlStream.openXml(XmlStream.StdDocAttributes);xmlStream.openNode('workbook',WorkbookXform.WORKBOOK_ATTRIBUTES);this.map.fileVersion.render(xmlStream);this.map.workbookPr.render(xmlStream,model.properties);this.map.bookViews.render(xmlStream,model.views);this.map.sheets.render(xmlStream,model.sheets);this.map.definedNames.render(xmlStream,model.definedNames);this.map.calcPr.render(xmlStream,model.calcProperties);xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case'workbook':return true;default:this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);}return true;}}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.parser=undefined;}return true;}switch(name){case'workbook':this.model={sheets:this.map.sheets.model,properties:this.map.workbookPr.model||{},views:this.map.bookViews.model,calcProperties:{}};if(this.map.definedNames.model){this.model.definedNames=this.map.definedNames.model;}return false;default:// not quite sure how we get here! |
|
|
return true;}}},{key:"reconcile",value:function reconcile(model){var rels=(model.workbookRels||[]).reduce(function(map,rel){map[rel.Id]=rel;return map;},{});// reconcile sheet ids, rIds and names |
|
|
var worksheets=[];var worksheet;var index=0;(model.sheets||[]).forEach(function(sheet){var rel=rels[sheet.rId];if(!rel){return;}// if rel.Target start with `[space]/xl/` or `/xl/` , then it will be replaced with `''` and spliced behind `xl/`, |
|
|
// otherwise it will be spliced directly behind `xl/`. i.g. |
|
|
worksheet=model.worksheetHash["xl/".concat(rel.Target.replace(/^(\s|\/xl\/)+/,''))];// If there are "chartsheets" in the file, rel.Target will |
|
|
// come out as chartsheets/sheet1.xml or similar here, and |
|
|
// that won't be in model.worksheetHash. |
|
|
// As we don't have the infrastructure to support chartsheets, |
|
|
// we will ignore them for now: |
|
|
if(worksheet){worksheet.name=sheet.name;worksheet.id=sheet.id;worksheet.state=sheet.state;worksheets[index++]=worksheet;}});// reconcile print areas |
|
|
var definedNames=[];_.each(model.definedNames,function(definedName){if(definedName.name==='_xlnm.Print_Area'){worksheet=worksheets[definedName.localSheetId];if(worksheet){if(!worksheet.pageSetup){worksheet.pageSetup={};}var range=colCache.decodeEx(definedName.ranges[0]);worksheet.pageSetup.printArea=worksheet.pageSetup.printArea?"".concat(worksheet.pageSetup.printArea,"&&").concat(range.dimensions):range.dimensions;}}else if(definedName.name==='_xlnm.Print_Titles'){worksheet=worksheets[definedName.localSheetId];if(worksheet){if(!worksheet.pageSetup){worksheet.pageSetup={};}var rangeString=definedName.ranges.join(',');var dollarRegex=/\$/g;var rowRangeRegex=/\$\d+:\$\d+/;var rowRangeMatches=rangeString.match(rowRangeRegex);if(rowRangeMatches&&rowRangeMatches.length){var _range=rowRangeMatches[0];worksheet.pageSetup.printTitlesRow=_range.replace(dollarRegex,'');}var columnRangeRegex=/\$[A-Z]+:\$[A-Z]+/;var columnRangeMatches=rangeString.match(columnRangeRegex);if(columnRangeMatches&&columnRangeMatches.length){var _range2=columnRangeMatches[0];worksheet.pageSetup.printTitlesColumn=_range2.replace(dollarRegex,'');}}}else{definedNames.push(definedName);}});model.definedNames=definedNames;// used by sheets to build their image models |
|
|
model.media.forEach(function(media,i){media.index=i;});}}]);return WorkbookXform;}(BaseXform);WorkbookXform.WORKBOOK_ATTRIBUTES={xmlns:'http://schemas.openxmlformats.org/spreadsheetml/2006/main','xmlns:r':'http://schemas.openxmlformats.org/officeDocument/2006/relationships','xmlns:mc':'http://schemas.openxmlformats.org/markup-compatibility/2006','mc:Ignorable':'x15','xmlns:x15':'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main'};WorkbookXform.STATIC_XFORMS={fileVersion:new StaticXform({tag:'fileVersion',$:{appName:'xl',lastEdited:5,lowestEdited:5,rupBuild:9303}})};module.exports=WorkbookXform;},{"../../../utils/col-cache":17,"../../../utils/under-dash":23,"../../../utils/xml-stream":25,"../base-xform":29,"../list-xform":68,"../static-xform":117,"./defined-name-xform":30,"./sheet-xform":31,"./workbook-calc-properties-xform":32,"./workbook-properties-xform":33,"./workbook-view-xform":34}],36:[function(require,module,exports){"use strict";function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly)symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;});keys.push.apply(keys,symbols);}return keys;}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};if(i%2){ownKeys(Object(source),true).forEach(function(key){_defineProperty(target,key,source[key]);});}else if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source));}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key));});}}return target;}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}var RichTextXform=require('../strings/rich-text-xform');var utils=require('../../../utils/utils');var BaseXform=require('../base-xform');/** |
|
|
<comment ref="B1" authorId="0"> |
|
|
<text> |
|
|
<r> |
|
|
<rPr> |
|
|
<b/> |
|
|
<sz val="9"/> |
|
|
<rFont val="宋体"/> |
|
|
<charset val="134"/> |
|
|
</rPr> |
|
|
<t>51422:</t> |
|
|
</r> |
|
|
<r> |
|
|
<rPr> |
|
|
<sz val="9"/> |
|
|
<rFont val="宋体"/> |
|
|
<charset val="134"/> |
|
|
</rPr> |
|
|
<t xml:space="preserve"> test</t> |
|
|
</r> |
|
|
</text> |
|
|
</comment> |
|
|
*/var CommentXform=module.exports=function(model){this.model=model;};utils.inherits(CommentXform,BaseXform,{get tag(){return'r';},get richTextXform(){if(!this._richTextXform){this._richTextXform=new RichTextXform();}return this._richTextXform;},render:function render(xmlStream,model){var _this=this;model=model||this.model;xmlStream.openNode('comment',{ref:model.ref,authorId:0});xmlStream.openNode('text');if(model&&model.note&&model.note.texts){model.note.texts.forEach(function(text){_this.richTextXform.render(xmlStream,text);});}xmlStream.closeNode();xmlStream.closeNode();},parseOpen:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case'comment':this.model=_objectSpread({type:'note',note:{texts:[]}},node.attributes);return true;case'r':this.parser=this.richTextXform;this.parser.parseOpen(node);return true;default:return false;}},parseText:function parseText(text){if(this.parser){this.parser.parseText(text);}},parseClose:function parseClose(name){switch(name){case'comment':return false;case'r':this.model.note.texts.push(this.parser.model);this.parser=undefined;return true;default:if(this.parser){this.parser.parseClose(name);}return true;}}});},{"../../../utils/utils":24,"../base-xform":29,"../strings/rich-text-xform":119}],37:[function(require,module,exports){"use strict";var XmlStream=require('../../../utils/xml-stream');var utils=require('../../../utils/utils');var BaseXform=require('../base-xform');var CommentXform=require('./comment-xform');var CommentsXform=module.exports=function(){this.map={comment:new CommentXform()};};utils.inherits(CommentsXform,BaseXform,{COMMENTS_ATTRIBUTES:{xmlns:'http://schemas.openxmlformats.org/spreadsheetml/2006/main'}},{render:function render(xmlStream,model){var _this=this;model=model||this.model;xmlStream.openXml(XmlStream.StdDocAttributes);xmlStream.openNode('comments',CommentsXform.COMMENTS_ATTRIBUTES);// authors |
|
|
// TODO: support authors properly |
|
|
xmlStream.openNode('authors');xmlStream.leafNode('author',null,'Author');xmlStream.closeNode();// comments |
|
|
xmlStream.openNode('commentList');model.comments.forEach(function(comment){_this.map.comment.render(xmlStream,comment);});xmlStream.closeNode();xmlStream.closeNode();},parseOpen:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case'commentList':this.model={comments:[]};return true;case'comment':this.parser=this.map.comment;this.parser.parseOpen(node);return true;default:return false;}},parseText:function parseText(text){if(this.parser){this.parser.parseText(text);}},parseClose:function parseClose(name){switch(name){case'commentList':return false;case'comment':this.model.comments.push(this.parser.model);this.parser=undefined;return true;default:if(this.parser){this.parser.parseClose(name);}return true;}}});},{"../../../utils/utils":24,"../../../utils/xml-stream":25,"../base-xform":29,"./comment-xform":36}],38:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../../base-xform');var VmlPositionXform=/*#__PURE__*/function(_BaseXform){_inherits(VmlPositionXform,_BaseXform);var _super=_createSuper(VmlPositionXform);function VmlPositionXform(model){var _this;_classCallCheck(this,VmlPositionXform);_this=_super.call(this);_this._model=model;return _this;}_createClass(VmlPositionXform,[{key:"render",value:function render(xmlStream,model,type){if(model===type[2]){xmlStream.leafNode(this.tag);}else if(this.tag==='x:SizeWithCells'&&model===type[1]){xmlStream.leafNode(this.tag);}}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case this.tag:this.model={};this.model[this.tag]=true;return true;default:return false;}}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return this._model&&this._model.tag;}}]);return VmlPositionXform;}(BaseXform);module.exports=VmlPositionXform;},{"../../base-xform":29}],39:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../../base-xform');var VmlProtectionXform=/*#__PURE__*/function(_BaseXform){_inherits(VmlProtectionXform,_BaseXform);var _super=_createSuper(VmlProtectionXform);function VmlProtectionXform(model){var _this;_classCallCheck(this,VmlProtectionXform);_this=_super.call(this);_this._model=model;return _this;}_createClass(VmlProtectionXform,[{key:"render",value:function render(xmlStream,model){xmlStream.leafNode(this.tag,null,model);}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case this.tag:this.text='';return true;default:return false;}}},{key:"parseText",value:function parseText(text){this.text=text;}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return this._model&&this._model.tag;}}]);return VmlProtectionXform;}(BaseXform);module.exports=VmlProtectionXform;},{"../../base-xform":29}],40:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');// render the triangle in the cell for the comment |
|
|
var VmlAnchorXform=/*#__PURE__*/function(_BaseXform){_inherits(VmlAnchorXform,_BaseXform);var _super=_createSuper(VmlAnchorXform);function VmlAnchorXform(){_classCallCheck(this,VmlAnchorXform);return _super.apply(this,arguments);}_createClass(VmlAnchorXform,[{key:"getAnchorRect",value:function getAnchorRect(anchor){var l=Math.floor(anchor.left);var lf=Math.floor((anchor.left-l)*68);var t=Math.floor(anchor.top);var tf=Math.floor((anchor.top-t)*18);var r=Math.floor(anchor.right);var rf=Math.floor((anchor.right-r)*68);var b=Math.floor(anchor.bottom);var bf=Math.floor((anchor.bottom-b)*18);return[l,lf,t,tf,r,rf,b,bf];}},{key:"getDefaultRect",value:function getDefaultRect(ref){var l=ref.col;var lf=6;var t=Math.max(ref.row-2,0);var tf=14;var r=l+2;var rf=2;var b=t+4;var bf=16;return[l,lf,t,tf,r,rf,b,bf];}},{key:"render",value:function render(xmlStream,model){var rect=model.anchor?this.getAnchorRect(model.anchor):this.getDefaultRect(model.refAddress);xmlStream.leafNode('x:Anchor',null,rect.join(', '));}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case this.tag:this.text='';return true;default:return false;}}},{key:"parseText",value:function parseText(text){this.text=text;}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'x:Anchor';}}]);return VmlAnchorXform;}(BaseXform);module.exports=VmlAnchorXform;},{"../base-xform":29}],41:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var VmlAnchorXform=require('./vml-anchor-xform');var VmlProtectionXform=require('./style/vml-protection-xform');var VmlPositionXform=require('./style/vml-position-xform');var POSITION_TYPE=['twoCells','oneCells','absolute'];var VmlClientDataXform=/*#__PURE__*/function(_BaseXform){_inherits(VmlClientDataXform,_BaseXform);var _super=_createSuper(VmlClientDataXform);function VmlClientDataXform(){var _this;_classCallCheck(this,VmlClientDataXform);_this=_super.call(this);_this.map={'x:Anchor':new VmlAnchorXform(),'x:Locked':new VmlProtectionXform({tag:'x:Locked'}),'x:LockText':new VmlProtectionXform({tag:'x:LockText'}),'x:SizeWithCells':new VmlPositionXform({tag:'x:SizeWithCells'}),'x:MoveWithCells':new VmlPositionXform({tag:'x:MoveWithCells'})};return _this;}_createClass(VmlClientDataXform,[{key:"render",value:function render(xmlStream,model){var _model$note=model.note,protection=_model$note.protection,editAs=_model$note.editAs;xmlStream.openNode(this.tag,{ObjectType:'Note'});this.map['x:MoveWithCells'].render(xmlStream,editAs,POSITION_TYPE);this.map['x:SizeWithCells'].render(xmlStream,editAs,POSITION_TYPE);this.map['x:Anchor'].render(xmlStream,model);this.map['x:Locked'].render(xmlStream,protection.locked);xmlStream.leafNode('x:AutoFill',null,'False');this.map['x:LockText'].render(xmlStream,protection.lockText);xmlStream.leafNode('x:Row',null,model.refAddress.row-1);xmlStream.leafNode('x:Column',null,model.refAddress.col-1);xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case this.tag:this.reset();this.model={anchor:[],protection:{},editAs:''};break;default:this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);}break;}return true;}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.parser=undefined;}return true;}switch(name){case this.tag:this.normalizeModel();return false;default:return true;}}},{key:"normalizeModel",value:function normalizeModel(){var position=Object.assign({},this.map['x:MoveWithCells'].model,this.map['x:SizeWithCells'].model);var len=Object.keys(position).length;this.model.editAs=POSITION_TYPE[len];this.model.anchor=this.map['x:Anchor'].text;this.model.protection.locked=this.map['x:Locked'].text;this.model.protection.lockText=this.map['x:LockText'].text;}},{key:"tag",get:function get(){return'x:ClientData';}}]);return VmlClientDataXform;}(BaseXform);module.exports=VmlClientDataXform;},{"../base-xform":29,"./style/vml-position-xform":38,"./style/vml-protection-xform":39,"./vml-anchor-xform":40}],42:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var XmlStream=require('../../../utils/xml-stream');var BaseXform=require('../base-xform');var VmlShapeXform=require('./vml-shape-xform');// This class is (currently) single purposed to insert the triangle |
|
|
// drawing icons on commented cells |
|
|
var VmlNotesXform=/*#__PURE__*/function(_BaseXform){_inherits(VmlNotesXform,_BaseXform);var _super=_createSuper(VmlNotesXform);function VmlNotesXform(){var _this;_classCallCheck(this,VmlNotesXform);_this=_super.call(this);_this.map={'v:shape':new VmlShapeXform()};return _this;}_createClass(VmlNotesXform,[{key:"render",value:function render(xmlStream,model){var _this2=this;xmlStream.openXml(XmlStream.StdDocAttributes);xmlStream.openNode(this.tag,VmlNotesXform.DRAWING_ATTRIBUTES);xmlStream.openNode('o:shapelayout',{'v:ext':'edit'});xmlStream.leafNode('o:idmap',{'v:ext':'edit',data:1});xmlStream.closeNode();xmlStream.openNode('v:shapetype',{id:'_x0000_t202',coordsize:'21600,21600','o:spt':202,path:'m,l,21600r21600,l21600,xe'});xmlStream.leafNode('v:stroke',{joinstyle:'miter'});xmlStream.leafNode('v:path',{gradientshapeok:'t','o:connecttype':'rect'});xmlStream.closeNode();model.comments.forEach(function(item,index){_this2.map['v:shape'].render(xmlStream,item,index);});xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case this.tag:this.reset();this.model={comments:[]};break;default:this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);}break;}return true;}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.model.comments.push(this.parser.model);this.parser=undefined;}return true;}switch(name){case this.tag:return false;default:// could be some unrecognised tags |
|
|
return true;}}},{key:"reconcile",value:function reconcile(model,options){var _this3=this;model.anchors.forEach(function(anchor){if(anchor.br){_this3.map['xdr:twoCellAnchor'].reconcile(anchor,options);}else{_this3.map['xdr:oneCellAnchor'].reconcile(anchor,options);}});}},{key:"tag",get:function get(){return'xml';}}]);return VmlNotesXform;}(BaseXform);VmlNotesXform.DRAWING_ATTRIBUTES={'xmlns:v':'urn:schemas-microsoft-com:vml','xmlns:o':'urn:schemas-microsoft-com:office:office','xmlns:x':'urn:schemas-microsoft-com:office:excel'};module.exports=VmlNotesXform;},{"../../../utils/xml-stream":25,"../base-xform":29,"./vml-shape-xform":43}],43:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var VmlTextboxXform=require('./vml-textbox-xform');var VmlClientDataXform=require('./vml-client-data-xform');var VmlShapeXform=/*#__PURE__*/function(_BaseXform){_inherits(VmlShapeXform,_BaseXform);var _super=_createSuper(VmlShapeXform);function VmlShapeXform(){var _this;_classCallCheck(this,VmlShapeXform);_this=_super.call(this);_this.map={'v:textbox':new VmlTextboxXform(),'x:ClientData':new VmlClientDataXform()};return _this;}_createClass(VmlShapeXform,[{key:"render",value:function render(xmlStream,model,index){xmlStream.openNode('v:shape',VmlShapeXform.V_SHAPE_ATTRIBUTES(model,index));xmlStream.leafNode('v:fill',{color2:'infoBackground [80]'});xmlStream.leafNode('v:shadow',{color:'none [81]',obscured:'t'});xmlStream.leafNode('v:path',{'o:connecttype':'none'});this.map['v:textbox'].render(xmlStream,model);this.map['x:ClientData'].render(xmlStream,model);xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case this.tag:this.reset();this.model={margins:{insetmode:node.attributes['o:insetmode']},anchor:'',editAs:'',protection:{}};break;default:this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);}break;}return true;}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.parser=undefined;}return true;}switch(name){case this.tag:this.model.margins.inset=this.map['v:textbox'].model&&this.map['v:textbox'].model.inset;this.model.protection=this.map['x:ClientData'].model&&this.map['x:ClientData'].model.protection;this.model.anchor=this.map['x:ClientData'].model&&this.map['x:ClientData'].model.anchor;this.model.editAs=this.map['x:ClientData'].model&&this.map['x:ClientData'].model.editAs;return false;default:return true;}}},{key:"tag",get:function get(){return'v:shape';}}]);return VmlShapeXform;}(BaseXform);VmlShapeXform.V_SHAPE_ATTRIBUTES=function(model,index){return{id:"_x0000_s".concat(1025+index),type:'#_x0000_t202',style:'position:absolute; margin-left:105.3pt;margin-top:10.5pt;width:97.8pt;height:59.1pt;z-index:1;visibility:hidden',fillcolor:'infoBackground [80]',strokecolor:'none [81]','o:insetmode':model.note.margins&&model.note.margins.insetmode};};module.exports=VmlShapeXform;},{"../base-xform":29,"./vml-client-data-xform":41,"./vml-textbox-xform":44}],44:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var VmlTextboxXform=/*#__PURE__*/function(_BaseXform){_inherits(VmlTextboxXform,_BaseXform);var _super=_createSuper(VmlTextboxXform);function VmlTextboxXform(){_classCallCheck(this,VmlTextboxXform);return _super.apply(this,arguments);}_createClass(VmlTextboxXform,[{key:"conversionUnit",value:function conversionUnit(value,multiple,unit){return"".concat(parseFloat(value)*multiple.toFixed(2)).concat(unit);}},{key:"reverseConversionUnit",value:function reverseConversionUnit(inset){var _this=this;return(inset||'').split(',').map(function(margin){return Number(parseFloat(_this.conversionUnit(parseFloat(margin),0.1,'')).toFixed(2));});}},{key:"render",value:function render(xmlStream,model){var _this2=this;var attributes={style:'mso-direction-alt:auto'};if(model&&model.note){var _ref=model.note&&model.note.margins,inset=_ref.inset;if(Array.isArray(inset)){inset=inset.map(function(margin){return _this2.conversionUnit(margin,10,'mm');}).join(',');}if(inset){attributes.inset=inset;}}xmlStream.openNode('v:textbox',attributes);xmlStream.leafNode('div',{style:'text-align:left'});xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case this.tag:this.model={inset:this.reverseConversionUnit(node.attributes.inset)};return true;default:return true;}}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(name){switch(name){case this.tag:return false;default:return true;}}},{key:"tag",get:function get(){return'v:textbox';}}]);return VmlTextboxXform;}(BaseXform);module.exports=VmlTextboxXform;},{"../base-xform":29}],45:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('./base-xform');/* 'virtual' methods used as a form of documentation */ /* eslint-disable class-methods-use-this */ // base class for xforms that are composed of other xforms |
|
|
// offers some default implementations |
|
|
var CompositeXform=/*#__PURE__*/function(_BaseXform){_inherits(CompositeXform,_BaseXform);var _super=_createSuper(CompositeXform);function CompositeXform(){_classCallCheck(this,CompositeXform);return _super.apply(this,arguments);}_createClass(CompositeXform,[{key:"createNewModel",value:function createNewModel(node){return{};}},{key:"parseOpen",value:function parseOpen(node){// Typical pattern for composite xform |
|
|
this.parser=this.parser||this.map[node.name];if(this.parser){this.parser.parseOpen(node);return true;}if(node.name===this.tag){this.model=this.createNewModel(node);return true;}return false;}},{key:"parseText",value:function parseText(text){// Default implementation. Send text to child parser |
|
|
if(this.parser){this.parser.parseText(text);}}},{key:"onParserClose",value:function onParserClose(name,parser){// parseClose has seen a child parser close |
|
|
// now need to incorporate into this.model somehow |
|
|
this.model[name]=parser.model;}},{key:"parseClose",value:function parseClose(name){// Default implementation |
|
|
if(this.parser){if(!this.parser.parseClose(name)){this.onParserClose(name,this.parser);this.parser=undefined;}return true;}return name!==this.tag;}}]);return CompositeXform;}(BaseXform);module.exports=CompositeXform;},{"./base-xform":29}],46:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var AppHeadingPairsXform=/*#__PURE__*/function(_BaseXform){_inherits(AppHeadingPairsXform,_BaseXform);var _super=_createSuper(AppHeadingPairsXform);function AppHeadingPairsXform(){_classCallCheck(this,AppHeadingPairsXform);return _super.apply(this,arguments);}_createClass(AppHeadingPairsXform,[{key:"render",value:function render(xmlStream,model){xmlStream.openNode('HeadingPairs');xmlStream.openNode('vt:vector',{size:2,baseType:'variant'});xmlStream.openNode('vt:variant');xmlStream.leafNode('vt:lpstr',undefined,'Worksheets');xmlStream.closeNode();xmlStream.openNode('vt:variant');xmlStream.leafNode('vt:i4',undefined,model.length);xmlStream.closeNode();xmlStream.closeNode();xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){// no parsing |
|
|
return node.name==='HeadingPairs';}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(name){return name!=='HeadingPairs';}}]);return AppHeadingPairsXform;}(BaseXform);module.exports=AppHeadingPairsXform;},{"../base-xform":29}],47:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var AppTitlesOfPartsXform=/*#__PURE__*/function(_BaseXform){_inherits(AppTitlesOfPartsXform,_BaseXform);var _super=_createSuper(AppTitlesOfPartsXform);function AppTitlesOfPartsXform(){_classCallCheck(this,AppTitlesOfPartsXform);return _super.apply(this,arguments);}_createClass(AppTitlesOfPartsXform,[{key:"render",value:function render(xmlStream,model){xmlStream.openNode('TitlesOfParts');xmlStream.openNode('vt:vector',{size:model.length,baseType:'lpstr'});model.forEach(function(sheet){xmlStream.leafNode('vt:lpstr',undefined,sheet.name);});xmlStream.closeNode();xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){// no parsing |
|
|
return node.name==='TitlesOfParts';}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(name){return name!=='TitlesOfParts';}}]);return AppTitlesOfPartsXform;}(BaseXform);module.exports=AppTitlesOfPartsXform;},{"../base-xform":29}],48:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var XmlStream=require('../../../utils/xml-stream');var BaseXform=require('../base-xform');var StringXform=require('../simple/string-xform');var AppHeadingPairsXform=require('./app-heading-pairs-xform');var AppTitleOfPartsXform=require('./app-titles-of-parts-xform');var AppXform=/*#__PURE__*/function(_BaseXform){_inherits(AppXform,_BaseXform);var _super=_createSuper(AppXform);function AppXform(){var _this;_classCallCheck(this,AppXform);_this=_super.call(this);_this.map={Company:new StringXform({tag:'Company'}),Manager:new StringXform({tag:'Manager'}),HeadingPairs:new AppHeadingPairsXform(),TitleOfParts:new AppTitleOfPartsXform()};return _this;}_createClass(AppXform,[{key:"render",value:function render(xmlStream,model){xmlStream.openXml(XmlStream.StdDocAttributes);xmlStream.openNode('Properties',AppXform.PROPERTY_ATTRIBUTES);xmlStream.leafNode('Application',undefined,'Microsoft Excel');xmlStream.leafNode('DocSecurity',undefined,'0');xmlStream.leafNode('ScaleCrop',undefined,'false');this.map.HeadingPairs.render(xmlStream,model.worksheets);this.map.TitleOfParts.render(xmlStream,model.worksheets);this.map.Company.render(xmlStream,model.company||'');this.map.Manager.render(xmlStream,model.manager);xmlStream.leafNode('LinksUpToDate',undefined,'false');xmlStream.leafNode('SharedDoc',undefined,'false');xmlStream.leafNode('HyperlinksChanged',undefined,'false');xmlStream.leafNode('AppVersion',undefined,'16.0300');xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case'Properties':return true;default:this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);return true;}// there's a lot we don't bother to parse |
|
|
return false;}}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.parser=undefined;}return true;}switch(name){case'Properties':this.model={worksheets:this.map.TitleOfParts.model,company:this.map.Company.model,manager:this.map.Manager.model};return false;default:return true;}}}]);return AppXform;}(BaseXform);AppXform.DateFormat=function(dt){return dt.toISOString().replace(/[.]\d{3,6}/,'');};AppXform.DateAttrs={'xsi:type':'dcterms:W3CDTF'};AppXform.PROPERTY_ATTRIBUTES={xmlns:'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties','xmlns:vt':'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes'};module.exports=AppXform;},{"../../../utils/xml-stream":25,"../base-xform":29,"../simple/string-xform":116,"./app-heading-pairs-xform":46,"./app-titles-of-parts-xform":47}],49:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var XmlStream=require('../../../utils/xml-stream');var BaseXform=require('../base-xform');// used for rendering the [Content_Types].xml file |
|
|
// not used for parsing |
|
|
var ContentTypesXform=/*#__PURE__*/function(_BaseXform){_inherits(ContentTypesXform,_BaseXform);var _super=_createSuper(ContentTypesXform);function ContentTypesXform(){_classCallCheck(this,ContentTypesXform);return _super.apply(this,arguments);}_createClass(ContentTypesXform,[{key:"render",value:function render(xmlStream,model){xmlStream.openXml(XmlStream.StdDocAttributes);xmlStream.openNode('Types',ContentTypesXform.PROPERTY_ATTRIBUTES);var mediaHash={};(model.media||[]).forEach(function(medium){if(medium.type==='image'){var imageType=medium.extension;if(!mediaHash[imageType]){mediaHash[imageType]=true;xmlStream.leafNode('Default',{Extension:imageType,ContentType:"image/".concat(imageType)});}}});xmlStream.leafNode('Default',{Extension:'rels',ContentType:'application/vnd.openxmlformats-package.relationships+xml'});xmlStream.leafNode('Default',{Extension:'xml',ContentType:'application/xml'});xmlStream.leafNode('Override',{PartName:'/xl/workbook.xml',ContentType:'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml'});model.worksheets.forEach(function(worksheet){var name="/xl/worksheets/sheet".concat(worksheet.id,".xml");xmlStream.leafNode('Override',{PartName:name,ContentType:'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml'});});xmlStream.leafNode('Override',{PartName:'/xl/theme/theme1.xml',ContentType:'application/vnd.openxmlformats-officedocument.theme+xml'});xmlStream.leafNode('Override',{PartName:'/xl/styles.xml',ContentType:'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml'});var hasSharedStrings=model.sharedStrings&&model.sharedStrings.count;if(hasSharedStrings){xmlStream.leafNode('Override',{PartName:'/xl/sharedStrings.xml',ContentType:'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml'});}if(model.tables){model.tables.forEach(function(table){xmlStream.leafNode('Override',{PartName:"/xl/tables/".concat(table.target),ContentType:'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml'});});}if(model.drawings){model.drawings.forEach(function(drawing){xmlStream.leafNode('Override',{PartName:"/xl/drawings/".concat(drawing.name,".xml"),ContentType:'application/vnd.openxmlformats-officedocument.drawing+xml'});});}if(model.commentRefs){xmlStream.leafNode('Default',{Extension:'vml',ContentType:'application/vnd.openxmlformats-officedocument.vmlDrawing'});model.commentRefs.forEach(function(_ref){var commentName=_ref.commentName;xmlStream.leafNode('Override',{PartName:"/xl/".concat(commentName,".xml"),ContentType:'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml'});});}xmlStream.leafNode('Override',{PartName:'/docProps/core.xml',ContentType:'application/vnd.openxmlformats-package.core-properties+xml'});xmlStream.leafNode('Override',{PartName:'/docProps/app.xml',ContentType:'application/vnd.openxmlformats-officedocument.extended-properties+xml'});xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(){return false;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}}]);return ContentTypesXform;}(BaseXform);ContentTypesXform.PROPERTY_ATTRIBUTES={xmlns:'http://schemas.openxmlformats.org/package/2006/content-types'};module.exports=ContentTypesXform;},{"../../../utils/xml-stream":25,"../base-xform":29}],50:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var XmlStream=require('../../../utils/xml-stream');var BaseXform=require('../base-xform');var DateXform=require('../simple/date-xform');var StringXform=require('../simple/string-xform');var IntegerXform=require('../simple/integer-xform');var CoreXform=/*#__PURE__*/function(_BaseXform){_inherits(CoreXform,_BaseXform);var _super=_createSuper(CoreXform);function CoreXform(){var _this;_classCallCheck(this,CoreXform);_this=_super.call(this);_this.map={'dc:creator':new StringXform({tag:'dc:creator'}),'dc:title':new StringXform({tag:'dc:title'}),'dc:subject':new StringXform({tag:'dc:subject'}),'dc:description':new StringXform({tag:'dc:description'}),'dc:identifier':new StringXform({tag:'dc:identifier'}),'dc:language':new StringXform({tag:'dc:language'}),'cp:keywords':new StringXform({tag:'cp:keywords'}),'cp:category':new StringXform({tag:'cp:category'}),'cp:lastModifiedBy':new StringXform({tag:'cp:lastModifiedBy'}),'cp:lastPrinted':new DateXform({tag:'cp:lastPrinted',format:CoreXform.DateFormat}),'cp:revision':new IntegerXform({tag:'cp:revision'}),'cp:version':new StringXform({tag:'cp:version'}),'cp:contentStatus':new StringXform({tag:'cp:contentStatus'}),'cp:contentType':new StringXform({tag:'cp:contentType'}),'dcterms:created':new DateXform({tag:'dcterms:created',attrs:CoreXform.DateAttrs,format:CoreXform.DateFormat}),'dcterms:modified':new DateXform({tag:'dcterms:modified',attrs:CoreXform.DateAttrs,format:CoreXform.DateFormat})};return _this;}_createClass(CoreXform,[{key:"render",value:function render(xmlStream,model){xmlStream.openXml(XmlStream.StdDocAttributes);xmlStream.openNode('cp:coreProperties',CoreXform.CORE_PROPERTY_ATTRIBUTES);this.map['dc:creator'].render(xmlStream,model.creator);this.map['dc:title'].render(xmlStream,model.title);this.map['dc:subject'].render(xmlStream,model.subject);this.map['dc:description'].render(xmlStream,model.description);this.map['dc:identifier'].render(xmlStream,model.identifier);this.map['dc:language'].render(xmlStream,model.language);this.map['cp:keywords'].render(xmlStream,model.keywords);this.map['cp:category'].render(xmlStream,model.category);this.map['cp:lastModifiedBy'].render(xmlStream,model.lastModifiedBy);this.map['cp:lastPrinted'].render(xmlStream,model.lastPrinted);this.map['cp:revision'].render(xmlStream,model.revision);this.map['cp:version'].render(xmlStream,model.version);this.map['cp:contentStatus'].render(xmlStream,model.contentStatus);this.map['cp:contentType'].render(xmlStream,model.contentType);this.map['dcterms:created'].render(xmlStream,model.created);this.map['dcterms:modified'].render(xmlStream,model.modified);xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case'cp:coreProperties':case'coreProperties':return true;default:this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);return true;}throw new Error("Unexpected xml node in parseOpen: ".concat(JSON.stringify(node)));}}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.parser=undefined;}return true;}switch(name){case'cp:coreProperties':case'coreProperties':this.model={creator:this.map['dc:creator'].model,title:this.map['dc:title'].model,subject:this.map['dc:subject'].model,description:this.map['dc:description'].model,identifier:this.map['dc:identifier'].model,language:this.map['dc:language'].model,keywords:this.map['cp:keywords'].model,category:this.map['cp:category'].model,lastModifiedBy:this.map['cp:lastModifiedBy'].model,lastPrinted:this.map['cp:lastPrinted'].model,revision:this.map['cp:revision'].model,contentStatus:this.map['cp:contentStatus'].model,contentType:this.map['cp:contentType'].model,created:this.map['dcterms:created'].model,modified:this.map['dcterms:modified'].model};return false;default:throw new Error("Unexpected xml node in parseClose: ".concat(name));}}}]);return CoreXform;}(BaseXform);CoreXform.DateFormat=function(dt){return dt.toISOString().replace(/[.]\d{3}/,'');};CoreXform.DateAttrs={'xsi:type':'dcterms:W3CDTF'};CoreXform.CORE_PROPERTY_ATTRIBUTES={'xmlns:cp':'http://schemas.openxmlformats.org/package/2006/metadata/core-properties','xmlns:dc':'http://purl.org/dc/elements/1.1/','xmlns:dcterms':'http://purl.org/dc/terms/','xmlns:dcmitype':'http://purl.org/dc/dcmitype/','xmlns:xsi':'http://www.w3.org/2001/XMLSchema-instance'};module.exports=CoreXform;},{"../../../utils/xml-stream":25,"../base-xform":29,"../simple/date-xform":114,"../simple/integer-xform":115,"../simple/string-xform":116}],51:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var RelationshipXform=/*#__PURE__*/function(_BaseXform){_inherits(RelationshipXform,_BaseXform);var _super=_createSuper(RelationshipXform);function RelationshipXform(){_classCallCheck(this,RelationshipXform);return _super.apply(this,arguments);}_createClass(RelationshipXform,[{key:"render",value:function render(xmlStream,model){xmlStream.leafNode('Relationship',model);}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case'Relationship':this.model=node.attributes;return true;default:return false;}}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}}]);return RelationshipXform;}(BaseXform);module.exports=RelationshipXform;},{"../base-xform":29}],52:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var XmlStream=require('../../../utils/xml-stream');var BaseXform=require('../base-xform');var RelationshipXform=require('./relationship-xform');var RelationshipsXform=/*#__PURE__*/function(_BaseXform){_inherits(RelationshipsXform,_BaseXform);var _super=_createSuper(RelationshipsXform);function RelationshipsXform(){var _this;_classCallCheck(this,RelationshipsXform);_this=_super.call(this);_this.map={Relationship:new RelationshipXform()};return _this;}_createClass(RelationshipsXform,[{key:"render",value:function render(xmlStream,model){var _this2=this;model=model||this._values;xmlStream.openXml(XmlStream.StdDocAttributes);xmlStream.openNode('Relationships',RelationshipsXform.RELATIONSHIPS_ATTRIBUTES);model.forEach(function(relationship){_this2.map.Relationship.render(xmlStream,relationship);});xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case'Relationships':this.model=[];return true;default:this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);return true;}throw new Error("Unexpected xml node in parseOpen: ".concat(JSON.stringify(node)));}}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.model.push(this.parser.model);this.parser=undefined;}return true;}switch(name){case'Relationships':return false;default:throw new Error("Unexpected xml node in parseClose: ".concat(name));}}}]);return RelationshipsXform;}(BaseXform);RelationshipsXform.RELATIONSHIPS_ATTRIBUTES={xmlns:'http://schemas.openxmlformats.org/package/2006/relationships'};module.exports=RelationshipsXform;},{"../../../utils/xml-stream":25,"../base-xform":29,"./relationship-xform":51}],53:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var BaseCellAnchorXform=/*#__PURE__*/function(_BaseXform){_inherits(BaseCellAnchorXform,_BaseXform);var _super=_createSuper(BaseCellAnchorXform);function BaseCellAnchorXform(){_classCallCheck(this,BaseCellAnchorXform);return _super.apply(this,arguments);}_createClass(BaseCellAnchorXform,[{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case this.tag:this.reset();this.model={range:{editAs:node.attributes.editAs||'oneCell'}};break;default:this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);}break;}return true;}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"reconcilePicture",value:function reconcilePicture(model,options){if(model&&model.rId){var rel=options.rels[model.rId];var match=rel.Target.match(/.*\/media\/(.+[.][a-zA-Z]{3,4})/);if(match){var name=match[1];var mediaId=options.mediaIndex[name];return options.media[mediaId];}}return undefined;}}]);return BaseCellAnchorXform;}(BaseXform);module.exports=BaseCellAnchorXform;},{"../base-xform":29}],54:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var BlipXform=require('./blip-xform');var BlipFillXform=/*#__PURE__*/function(_BaseXform){_inherits(BlipFillXform,_BaseXform);var _super=_createSuper(BlipFillXform);function BlipFillXform(){var _this;_classCallCheck(this,BlipFillXform);_this=_super.call(this);_this.map={'a:blip':new BlipXform()};return _this;}_createClass(BlipFillXform,[{key:"render",value:function render(xmlStream,model){xmlStream.openNode(this.tag);this.map['a:blip'].render(xmlStream,model);// TODO: options for this + parsing |
|
|
xmlStream.openNode('a:stretch');xmlStream.leafNode('a:fillRect');xmlStream.closeNode();xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case this.tag:this.reset();break;default:this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);}break;}return true;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.parser=undefined;}return true;}switch(name){case this.tag:this.model=this.map['a:blip'].model;return false;default:return true;}}},{key:"tag",get:function get(){return'xdr:blipFill';}}]);return BlipFillXform;}(BaseXform);module.exports=BlipFillXform;},{"../base-xform":29,"./blip-xform":55}],55:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var BlipXform=/*#__PURE__*/function(_BaseXform){_inherits(BlipXform,_BaseXform);var _super=_createSuper(BlipXform);function BlipXform(){_classCallCheck(this,BlipXform);return _super.apply(this,arguments);}_createClass(BlipXform,[{key:"render",value:function render(xmlStream,model){xmlStream.leafNode(this.tag,{'xmlns:r':'http://schemas.openxmlformats.org/officeDocument/2006/relationships','r:embed':model.rId,cstate:'print'});// TODO: handle children (e.g. a:extLst=>a:ext=>a14:useLocalDpi |
|
|
}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case this.tag:this.model={rId:node.attributes['r:embed']};return true;default:return true;}}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(name){switch(name){case this.tag:return false;default:// unprocessed internal nodes |
|
|
return true;}}},{key:"tag",get:function get(){return'a:blip';}}]);return BlipXform;}(BaseXform);module.exports=BlipXform;},{"../base-xform":29}],56:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var CNvPicPrXform=/*#__PURE__*/function(_BaseXform){_inherits(CNvPicPrXform,_BaseXform);var _super=_createSuper(CNvPicPrXform);function CNvPicPrXform(){_classCallCheck(this,CNvPicPrXform);return _super.apply(this,arguments);}_createClass(CNvPicPrXform,[{key:"render",value:function render(xmlStream){xmlStream.openNode(this.tag);xmlStream.leafNode('a:picLocks',{noChangeAspect:'1'});xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case this.tag:return true;default:return true;}}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(name){switch(name){case this.tag:return false;default:// unprocessed internal nodes |
|
|
return true;}}},{key:"tag",get:function get(){return'xdr:cNvPicPr';}}]);return CNvPicPrXform;}(BaseXform);module.exports=CNvPicPrXform;},{"../base-xform":29}],57:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var HlickClickXform=require('./hlink-click-xform');var ExtLstXform=require('./ext-lst-xform');var CNvPrXform=/*#__PURE__*/function(_BaseXform){_inherits(CNvPrXform,_BaseXform);var _super=_createSuper(CNvPrXform);function CNvPrXform(){var _this;_classCallCheck(this,CNvPrXform);_this=_super.call(this);_this.map={'a:hlinkClick':new HlickClickXform(),'a:extLst':new ExtLstXform()};return _this;}_createClass(CNvPrXform,[{key:"render",value:function render(xmlStream,model){xmlStream.openNode(this.tag,{id:model.index,name:"Picture ".concat(model.index)});this.map['a:hlinkClick'].render(xmlStream,model);this.map['a:extLst'].render(xmlStream,model);xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case this.tag:this.reset();break;default:this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);}break;}return true;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.parser=undefined;}return true;}switch(name){case this.tag:this.model=this.map['a:hlinkClick'].model;return false;default:return true;}}},{key:"tag",get:function get(){return'xdr:cNvPr';}}]);return CNvPrXform;}(BaseXform);module.exports=CNvPrXform;},{"../base-xform":29,"./ext-lst-xform":60,"./hlink-click-xform":62}],58:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var IntegerXform=require('../simple/integer-xform');var CellPositionXform=/*#__PURE__*/function(_BaseXform){_inherits(CellPositionXform,_BaseXform);var _super=_createSuper(CellPositionXform);function CellPositionXform(options){var _this;_classCallCheck(this,CellPositionXform);_this=_super.call(this);_this.tag=options.tag;_this.map={'xdr:col':new IntegerXform({tag:'xdr:col',zero:true}),'xdr:colOff':new IntegerXform({tag:'xdr:colOff',zero:true}),'xdr:row':new IntegerXform({tag:'xdr:row',zero:true}),'xdr:rowOff':new IntegerXform({tag:'xdr:rowOff',zero:true})};return _this;}_createClass(CellPositionXform,[{key:"render",value:function render(xmlStream,model){xmlStream.openNode(this.tag);this.map['xdr:col'].render(xmlStream,model.nativeCol);this.map['xdr:colOff'].render(xmlStream,model.nativeColOff);this.map['xdr:row'].render(xmlStream,model.nativeRow);this.map['xdr:rowOff'].render(xmlStream,model.nativeRowOff);xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case this.tag:this.reset();break;default:this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);}break;}return true;}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.parser=undefined;}return true;}switch(name){case this.tag:this.model={nativeCol:this.map['xdr:col'].model,nativeColOff:this.map['xdr:colOff'].model,nativeRow:this.map['xdr:row'].model,nativeRowOff:this.map['xdr:rowOff'].model};return false;default:// not quite sure how we get here! |
|
|
return true;}}}]);return CellPositionXform;}(BaseXform);module.exports=CellPositionXform;},{"../base-xform":29,"../simple/integer-xform":115}],59:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var colCache=require('../../../utils/col-cache');var XmlStream=require('../../../utils/xml-stream');var BaseXform=require('../base-xform');var TwoCellAnchorXform=require('./two-cell-anchor-xform');var OneCellAnchorXform=require('./one-cell-anchor-xform');function getAnchorType(model){var range=typeof model.range==='string'?colCache.decode(model.range):model.range;return range.br?'xdr:twoCellAnchor':'xdr:oneCellAnchor';}var DrawingXform=/*#__PURE__*/function(_BaseXform){_inherits(DrawingXform,_BaseXform);var _super=_createSuper(DrawingXform);function DrawingXform(){var _this;_classCallCheck(this,DrawingXform);_this=_super.call(this);_this.map={'xdr:twoCellAnchor':new TwoCellAnchorXform(),'xdr:oneCellAnchor':new OneCellAnchorXform()};return _this;}_createClass(DrawingXform,[{key:"prepare",value:function prepare(model){var _this2=this;model.anchors.forEach(function(item,index){item.anchorType=getAnchorType(item);var anchor=_this2.map[item.anchorType];anchor.prepare(item,{index:index});});}},{key:"render",value:function render(xmlStream,model){var _this3=this;xmlStream.openXml(XmlStream.StdDocAttributes);xmlStream.openNode(this.tag,DrawingXform.DRAWING_ATTRIBUTES);model.anchors.forEach(function(item){var anchor=_this3.map[item.anchorType];anchor.render(xmlStream,item);});xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case this.tag:this.reset();this.model={anchors:[]};break;default:this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);}break;}return true;}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.model.anchors.push(this.parser.model);this.parser=undefined;}return true;}switch(name){case this.tag:return false;default:// could be some unrecognised tags |
|
|
return true;}}},{key:"reconcile",value:function reconcile(model,options){var _this4=this;model.anchors.forEach(function(anchor){if(anchor.br){_this4.map['xdr:twoCellAnchor'].reconcile(anchor,options);}else{_this4.map['xdr:oneCellAnchor'].reconcile(anchor,options);}});}},{key:"tag",get:function get(){return'xdr:wsDr';}}]);return DrawingXform;}(BaseXform);DrawingXform.DRAWING_ATTRIBUTES={'xmlns:xdr':'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing','xmlns:a':'http://schemas.openxmlformats.org/drawingml/2006/main'};module.exports=DrawingXform;},{"../../../utils/col-cache":17,"../../../utils/xml-stream":25,"../base-xform":29,"./one-cell-anchor-xform":64,"./two-cell-anchor-xform":67}],60:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var ExtLstXform=/*#__PURE__*/function(_BaseXform){_inherits(ExtLstXform,_BaseXform);var _super=_createSuper(ExtLstXform);function ExtLstXform(){_classCallCheck(this,ExtLstXform);return _super.apply(this,arguments);}_createClass(ExtLstXform,[{key:"render",value:function render(xmlStream){xmlStream.openNode(this.tag);xmlStream.openNode('a:ext',{uri:'{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}'});xmlStream.leafNode('a16:creationId',{'xmlns:a16':'http://schemas.microsoft.com/office/drawing/2014/main',id:'{00000000-0008-0000-0000-000002000000}'});xmlStream.closeNode();xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case this.tag:return true;default:return true;}}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(name){switch(name){case this.tag:return false;default:// unprocessed internal nodes |
|
|
return true;}}},{key:"tag",get:function get(){return'a:extLst';}}]);return ExtLstXform;}(BaseXform);module.exports=ExtLstXform;},{"../base-xform":29}],61:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');/** https://en.wikipedia.org/wiki/Office_Open_XML_file_formats#DrawingML */var EMU_PER_PIXEL_AT_96_DPI=9525;var ExtXform=/*#__PURE__*/function(_BaseXform){_inherits(ExtXform,_BaseXform);var _super=_createSuper(ExtXform);function ExtXform(options){var _this;_classCallCheck(this,ExtXform);_this=_super.call(this);_this.tag=options.tag;_this.map={};return _this;}_createClass(ExtXform,[{key:"render",value:function render(xmlStream,model){xmlStream.openNode(this.tag);var width=Math.floor(model.width*EMU_PER_PIXEL_AT_96_DPI);var height=Math.floor(model.height*EMU_PER_PIXEL_AT_96_DPI);xmlStream.addAttribute('cx',width);xmlStream.addAttribute('cy',height);xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(node.name===this.tag){this.model={width:parseInt(node.attributes.cx||'0',10)/EMU_PER_PIXEL_AT_96_DPI,height:parseInt(node.attributes.cy||'0',10)/EMU_PER_PIXEL_AT_96_DPI};return true;}return false;}},{key:"parseText",value:function parseText()/* text */{}},{key:"parseClose",value:function parseClose()/* name */{return false;}}]);return ExtXform;}(BaseXform);module.exports=ExtXform;},{"../base-xform":29}],62:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var HLinkClickXform=/*#__PURE__*/function(_BaseXform){_inherits(HLinkClickXform,_BaseXform);var _super=_createSuper(HLinkClickXform);function HLinkClickXform(){_classCallCheck(this,HLinkClickXform);return _super.apply(this,arguments);}_createClass(HLinkClickXform,[{key:"render",value:function render(xmlStream,model){if(!(model.hyperlinks&&model.hyperlinks.rId)){return;}xmlStream.leafNode(this.tag,{'xmlns:r':'http://schemas.openxmlformats.org/officeDocument/2006/relationships','r:id':model.hyperlinks.rId,tooltip:model.hyperlinks.tooltip});}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case this.tag:this.model={hyperlinks:{rId:node.attributes['r:id'],tooltip:node.attributes.tooltip}};return true;default:return true;}}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'a:hlinkClick';}}]);return HLinkClickXform;}(BaseXform);module.exports=HLinkClickXform;},{"../base-xform":29}],63:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var CNvPrXform=require('./c-nv-pr-xform');var CNvPicPrXform=require('./c-nv-pic-pr-xform');var NvPicPrXform=/*#__PURE__*/function(_BaseXform){_inherits(NvPicPrXform,_BaseXform);var _super=_createSuper(NvPicPrXform);function NvPicPrXform(){var _this;_classCallCheck(this,NvPicPrXform);_this=_super.call(this);_this.map={'xdr:cNvPr':new CNvPrXform(),'xdr:cNvPicPr':new CNvPicPrXform()};return _this;}_createClass(NvPicPrXform,[{key:"render",value:function render(xmlStream,model){xmlStream.openNode(this.tag);this.map['xdr:cNvPr'].render(xmlStream,model);this.map['xdr:cNvPicPr'].render(xmlStream,model);xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case this.tag:this.reset();break;default:this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);}break;}return true;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.parser=undefined;}return true;}switch(name){case this.tag:this.model=this.map['xdr:cNvPr'].model;return false;default:return true;}}},{key:"tag",get:function get(){return'xdr:nvPicPr';}}]);return NvPicPrXform;}(BaseXform);module.exports=NvPicPrXform;},{"../base-xform":29,"./c-nv-pic-pr-xform":56,"./c-nv-pr-xform":57}],64:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseCellAnchorXform=require('./base-cell-anchor-xform');var StaticXform=require('../static-xform');var CellPositionXform=require('./cell-position-xform');var ExtXform=require('./ext-xform');var PicXform=require('./pic-xform');var OneCellAnchorXform=/*#__PURE__*/function(_BaseCellAnchorXform){_inherits(OneCellAnchorXform,_BaseCellAnchorXform);var _super=_createSuper(OneCellAnchorXform);function OneCellAnchorXform(){var _this;_classCallCheck(this,OneCellAnchorXform);_this=_super.call(this);_this.map={'xdr:from':new CellPositionXform({tag:'xdr:from'}),'xdr:ext':new ExtXform({tag:'xdr:ext'}),'xdr:pic':new PicXform(),'xdr:clientData':new StaticXform({tag:'xdr:clientData'})};return _this;}_createClass(OneCellAnchorXform,[{key:"prepare",value:function prepare(model,options){this.map['xdr:pic'].prepare(model.picture,options);}},{key:"render",value:function render(xmlStream,model){xmlStream.openNode(this.tag,{editAs:model.range.editAs||'oneCell'});this.map['xdr:from'].render(xmlStream,model.range.tl);this.map['xdr:ext'].render(xmlStream,model.range.ext);this.map['xdr:pic'].render(xmlStream,model.picture);this.map['xdr:clientData'].render(xmlStream,{});xmlStream.closeNode();}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.parser=undefined;}return true;}switch(name){case this.tag:this.model.range.tl=this.map['xdr:from'].model;this.model.range.ext=this.map['xdr:ext'].model;this.model.picture=this.map['xdr:pic'].model;return false;default:// could be some unrecognised tags |
|
|
return true;}}},{key:"reconcile",value:function reconcile(model,options){model.medium=this.reconcilePicture(model.picture,options);}},{key:"tag",get:function get(){return'xdr:oneCellAnchor';}}]);return OneCellAnchorXform;}(BaseCellAnchorXform);module.exports=OneCellAnchorXform;},{"../static-xform":117,"./base-cell-anchor-xform":53,"./cell-position-xform":58,"./ext-xform":61,"./pic-xform":65}],65:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var StaticXform=require('../static-xform');var BlipFillXform=require('./blip-fill-xform');var NvPicPrXform=require('./nv-pic-pr-xform');var spPrJSON=require('./sp-pr');var PicXform=/*#__PURE__*/function(_BaseXform){_inherits(PicXform,_BaseXform);var _super=_createSuper(PicXform);function PicXform(){var _this;_classCallCheck(this,PicXform);_this=_super.call(this);_this.map={'xdr:nvPicPr':new NvPicPrXform(),'xdr:blipFill':new BlipFillXform(),'xdr:spPr':new StaticXform(spPrJSON)};return _this;}_createClass(PicXform,[{key:"prepare",value:function prepare(model,options){model.index=options.index+1;}},{key:"render",value:function render(xmlStream,model){xmlStream.openNode(this.tag);this.map['xdr:nvPicPr'].render(xmlStream,model);this.map['xdr:blipFill'].render(xmlStream,model);this.map['xdr:spPr'].render(xmlStream,model);xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case this.tag:this.reset();break;default:this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);}break;}return true;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.mergeModel(this.parser.model);this.parser=undefined;}return true;}switch(name){case this.tag:return false;default:// not quite sure how we get here! |
|
|
return true;}}},{key:"tag",get:function get(){return'xdr:pic';}}]);return PicXform;}(BaseXform);module.exports=PicXform;},{"../base-xform":29,"../static-xform":117,"./blip-fill-xform":54,"./nv-pic-pr-xform":63,"./sp-pr":66}],66:[function(require,module,exports){"use strict";module.exports={tag:'xdr:spPr',c:[{tag:'a:xfrm',c:[{tag:'a:off',$:{x:'0',y:'0'}},{tag:'a:ext',$:{cx:'0',cy:'0'}}]},{tag:'a:prstGeom',$:{prst:'rect'},c:[{tag:'a:avLst'}]}]};},{}],67:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseCellAnchorXform=require('./base-cell-anchor-xform');var StaticXform=require('../static-xform');var CellPositionXform=require('./cell-position-xform');var PicXform=require('./pic-xform');var TwoCellAnchorXform=/*#__PURE__*/function(_BaseCellAnchorXform){_inherits(TwoCellAnchorXform,_BaseCellAnchorXform);var _super=_createSuper(TwoCellAnchorXform);function TwoCellAnchorXform(){var _this;_classCallCheck(this,TwoCellAnchorXform);_this=_super.call(this);_this.map={'xdr:from':new CellPositionXform({tag:'xdr:from'}),'xdr:to':new CellPositionXform({tag:'xdr:to'}),'xdr:pic':new PicXform(),'xdr:clientData':new StaticXform({tag:'xdr:clientData'})};return _this;}_createClass(TwoCellAnchorXform,[{key:"prepare",value:function prepare(model,options){this.map['xdr:pic'].prepare(model.picture,options);}},{key:"render",value:function render(xmlStream,model){xmlStream.openNode(this.tag,{editAs:model.range.editAs||'oneCell'});this.map['xdr:from'].render(xmlStream,model.range.tl);this.map['xdr:to'].render(xmlStream,model.range.br);this.map['xdr:pic'].render(xmlStream,model.picture);this.map['xdr:clientData'].render(xmlStream,{});xmlStream.closeNode();}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.parser=undefined;}return true;}switch(name){case this.tag:this.model.range.tl=this.map['xdr:from'].model;this.model.range.br=this.map['xdr:to'].model;this.model.picture=this.map['xdr:pic'].model;return false;default:// could be some unrecognised tags |
|
|
return true;}}},{key:"reconcile",value:function reconcile(model,options){model.medium=this.reconcilePicture(model.picture,options);}},{key:"tag",get:function get(){return'xdr:twoCellAnchor';}}]);return TwoCellAnchorXform;}(BaseCellAnchorXform);module.exports=TwoCellAnchorXform;},{"../static-xform":117,"./base-cell-anchor-xform":53,"./cell-position-xform":58,"./pic-xform":65}],68:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('./base-xform');var ListXform=/*#__PURE__*/function(_BaseXform){_inherits(ListXform,_BaseXform);var _super=_createSuper(ListXform);function ListXform(options){var _this;_classCallCheck(this,ListXform);_this=_super.call(this);_this.tag=options.tag;_this.always=!!options.always;_this.count=options.count;_this.empty=options.empty;_this.$count=options.$count||'count';_this.$=options.$;_this.childXform=options.childXform;_this.maxItems=options.maxItems;return _this;}_createClass(ListXform,[{key:"prepare",value:function prepare(model,options){var childXform=this.childXform;if(model){model.forEach(function(childModel,index){options.index=index;childXform.prepare(childModel,options);});}}},{key:"render",value:function render(xmlStream,model){if(this.always||model&&model.length){xmlStream.openNode(this.tag,this.$);if(this.count){xmlStream.addAttribute(this.$count,model&&model.length||0);}var childXform=this.childXform;(model||[]).forEach(function(childModel,index){childXform.render(xmlStream,childModel,index);});xmlStream.closeNode();}else if(this.empty){xmlStream.leafNode(this.tag);}}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case this.tag:this.model=[];return true;default:if(this.childXform.parseOpen(node)){this.parser=this.childXform;return true;}return false;}}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.model.push(this.parser.model);this.parser=undefined;if(this.maxItems&&this.model.length>this.maxItems){throw new Error("Max ".concat(this.childXform.tag," count (").concat(this.maxItems,") exceeded"));}}return true;}return false;}},{key:"reconcile",value:function reconcile(model,options){if(model){var childXform=this.childXform;model.forEach(function(childModel){childXform.reconcile(childModel,options);});}}}]);return ListXform;}(BaseXform);module.exports=ListXform;},{"./base-xform":29}],69:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var colCache=require('../../../utils/col-cache');var BaseXform=require('../base-xform');var AutoFilterXform=/*#__PURE__*/function(_BaseXform){_inherits(AutoFilterXform,_BaseXform);var _super=_createSuper(AutoFilterXform);function AutoFilterXform(){_classCallCheck(this,AutoFilterXform);return _super.apply(this,arguments);}_createClass(AutoFilterXform,[{key:"render",value:function render(xmlStream,model){if(model){if(typeof model==='string'){// assume range |
|
|
xmlStream.leafNode('autoFilter',{ref:model});}else{var getAddress=function getAddress(addr){if(typeof addr==='string'){return addr;}return colCache.getAddress(addr.row,addr.column).address;};var firstAddress=getAddress(model.from);var secondAddress=getAddress(model.to);if(firstAddress&&secondAddress){xmlStream.leafNode('autoFilter',{ref:"".concat(firstAddress,":").concat(secondAddress)});}}}}},{key:"parseOpen",value:function parseOpen(node){if(node.name==='autoFilter'){this.model=node.attributes.ref;}}},{key:"tag",get:function get(){return'autoFilter';}}]);return AutoFilterXform;}(BaseXform);module.exports=AutoFilterXform;},{"../../../utils/col-cache":17,"../base-xform":29}],70:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly)symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;});keys.push.apply(keys,symbols);}return keys;}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};if(i%2){ownKeys(Object(source),true).forEach(function(key){_defineProperty(target,key,source[key]);});}else if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source));}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key));});}}return target;}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var utils=require('../../../utils/utils');var BaseXform=require('../base-xform');var Range=require('../../../doc/range');var Enums=require('../../../doc/enums');var RichTextXform=require('../strings/rich-text-xform');function getValueType(v){if(v===null||v===undefined){return Enums.ValueType.Null;}if(v instanceof String||typeof v==='string'){return Enums.ValueType.String;}if(typeof v==='number'){return Enums.ValueType.Number;}if(typeof v==='boolean'){return Enums.ValueType.Boolean;}if(v instanceof Date){return Enums.ValueType.Date;}if(v.text&&v.hyperlink){return Enums.ValueType.Hyperlink;}if(v.formula){return Enums.ValueType.Formula;}if(v.error){return Enums.ValueType.Error;}throw new Error('I could not understand type of value');}function getEffectiveCellType(cell){switch(cell.type){case Enums.ValueType.Formula:return getValueType(cell.result);default:return cell.type;}}var CellXform=/*#__PURE__*/function(_BaseXform){_inherits(CellXform,_BaseXform);var _super=_createSuper(CellXform);function CellXform(){var _this;_classCallCheck(this,CellXform);_this=_super.call(this);_this.richTextXForm=new RichTextXform();return _this;}_createClass(CellXform,[{key:"prepare",value:function prepare(model,options){var styleId=options.styles.addStyleModel(model.style||{},getEffectiveCellType(model));if(styleId){model.styleId=styleId;}if(model.comment){options.comments.push(_objectSpread(_objectSpread({},model.comment),{},{ref:model.address}));}switch(model.type){case Enums.ValueType.String:case Enums.ValueType.RichText:if(options.sharedStrings){model.ssId=options.sharedStrings.add(model.value);}break;case Enums.ValueType.Date:if(options.date1904){model.date1904=true;}break;case Enums.ValueType.Hyperlink:if(options.sharedStrings&&model.text!==undefined&&model.text!==null){model.ssId=options.sharedStrings.add(model.text);}options.hyperlinks.push({address:model.address,target:model.hyperlink,tooltip:model.tooltip});break;case Enums.ValueType.Merge:options.merges.add(model);break;case Enums.ValueType.Formula:if(options.date1904){// in case valueType is date |
|
|
model.date1904=true;}if(model.shareType==='shared'){model.si=options.siFormulae++;}if(model.formula){options.formulae[model.address]=model;}else if(model.sharedFormula){var master=options.formulae[model.sharedFormula];if(!master){throw new Error("Shared Formula master must exist above and or left of clone for cell ".concat(model.address));}if(master.si===undefined){master.shareType='shared';master.si=options.siFormulae++;master.range=new Range(master.address,model.address);}else if(master.range){master.range.expandToAddress(model.address);}model.si=master.si;}break;default:break;}}},{key:"renderFormula",value:function renderFormula(xmlStream,model){var attrs=null;switch(model.shareType){case'shared':attrs={t:'shared',ref:model.ref||model.range.range,si:model.si};break;case'array':attrs={t:'array',ref:model.ref};break;default:if(model.si!==undefined){attrs={t:'shared',si:model.si};}break;}switch(getValueType(model.result)){case Enums.ValueType.Null:// ? |
|
|
xmlStream.leafNode('f',attrs,model.formula);break;case Enums.ValueType.String:// oddly, formula results don't ever use shared strings |
|
|
xmlStream.addAttribute('t','str');xmlStream.leafNode('f',attrs,model.formula);xmlStream.leafNode('v',null,model.result);break;case Enums.ValueType.Number:xmlStream.leafNode('f',attrs,model.formula);xmlStream.leafNode('v',null,model.result);break;case Enums.ValueType.Boolean:xmlStream.addAttribute('t','b');xmlStream.leafNode('f',attrs,model.formula);xmlStream.leafNode('v',null,model.result?1:0);break;case Enums.ValueType.Error:xmlStream.addAttribute('t','e');xmlStream.leafNode('f',attrs,model.formula);xmlStream.leafNode('v',null,model.result.error);break;case Enums.ValueType.Date:xmlStream.leafNode('f',attrs,model.formula);xmlStream.leafNode('v',null,utils.dateToExcel(model.result,model.date1904));break;// case Enums.ValueType.Hyperlink: // ?? |
|
|
// case Enums.ValueType.Formula: |
|
|
default:throw new Error('I could not understand type of value');}}},{key:"render",value:function render(xmlStream,model){var _this2=this;if(model.type===Enums.ValueType.Null&&!model.styleId){// if null and no style, exit |
|
|
return;}xmlStream.openNode('c');xmlStream.addAttribute('r',model.address);if(model.styleId){xmlStream.addAttribute('s',model.styleId);}switch(model.type){case Enums.ValueType.Null:break;case Enums.ValueType.Number:xmlStream.leafNode('v',null,model.value);break;case Enums.ValueType.Boolean:xmlStream.addAttribute('t','b');xmlStream.leafNode('v',null,model.value?'1':'0');break;case Enums.ValueType.Error:xmlStream.addAttribute('t','e');xmlStream.leafNode('v',null,model.value.error);break;case Enums.ValueType.String:case Enums.ValueType.RichText:if(model.ssId!==undefined){xmlStream.addAttribute('t','s');xmlStream.leafNode('v',null,model.ssId);}else if(model.value&&model.value.richText){xmlStream.addAttribute('t','inlineStr');xmlStream.openNode('is');model.value.richText.forEach(function(text){_this2.richTextXForm.render(xmlStream,text);});xmlStream.closeNode('is');}else{xmlStream.addAttribute('t','str');xmlStream.leafNode('v',null,model.value);}break;case Enums.ValueType.Date:xmlStream.leafNode('v',null,utils.dateToExcel(model.value,model.date1904));break;case Enums.ValueType.Hyperlink:if(model.ssId!==undefined){xmlStream.addAttribute('t','s');xmlStream.leafNode('v',null,model.ssId);}else{xmlStream.addAttribute('t','str');xmlStream.leafNode('v',null,model.text);}break;case Enums.ValueType.Formula:this.renderFormula(xmlStream,model);break;case Enums.ValueType.Merge:// nothing to add |
|
|
break;default:break;}xmlStream.closeNode();// </c> |
|
|
}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case'c':// const address = colCache.decodeAddress(node.attributes.r); |
|
|
this.model={address:node.attributes.r};this.t=node.attributes.t;if(node.attributes.s){this.model.styleId=parseInt(node.attributes.s,10);}return true;case'f':this.currentNode='f';this.model.si=node.attributes.si;this.model.shareType=node.attributes.t;this.model.ref=node.attributes.ref;return true;case'v':this.currentNode='v';return true;case't':this.currentNode='t';return true;case'r':this.parser=this.richTextXForm;this.parser.parseOpen(node);return true;default:return false;}}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);return;}switch(this.currentNode){case'f':this.model.formula=this.model.formula?this.model.formula+text:text;break;case'v':case't':if(this.model.value&&this.model.value.richText){this.model.value.richText.text=this.model.value.richText.text?this.model.value.richText.text+text:text;}else{this.model.value=this.model.value?this.model.value+text:text;}break;default:break;}}},{key:"parseClose",value:function parseClose(name){switch(name){case'c':{var model=this.model;// first guess on cell type |
|
|
if(model.formula||model.shareType){model.type=Enums.ValueType.Formula;if(model.value){if(this.t==='str'){model.result=utils.xmlDecode(model.value);}else if(this.t==='b'){model.result=parseInt(model.value,10)!==0;}else if(this.t==='e'){model.result={error:model.value};}else{model.result=parseFloat(model.value);}model.value=undefined;}}else if(model.value!==undefined){switch(this.t){case's':model.type=Enums.ValueType.String;model.value=parseInt(model.value,10);break;case'str':model.type=Enums.ValueType.String;model.value=utils.xmlDecode(model.value);break;case'inlineStr':model.type=Enums.ValueType.String;break;case'b':model.type=Enums.ValueType.Boolean;model.value=parseInt(model.value,10)!==0;break;case'e':model.type=Enums.ValueType.Error;model.value={error:model.value};break;default:model.type=Enums.ValueType.Number;model.value=parseFloat(model.value);break;}}else if(model.styleId){model.type=Enums.ValueType.Null;}else{model.type=Enums.ValueType.Merge;}return false;}case'f':case'v':case'is':this.currentNode=undefined;return true;case't':if(this.parser){this.parser.parseClose(name);return true;}this.currentNode=undefined;return true;case'r':this.model.value=this.model.value||{};this.model.value.richText=this.model.value.richText||[];this.model.value.richText.push(this.parser.model);this.parser=undefined;this.currentNode=undefined;return true;default:if(this.parser){this.parser.parseClose(name);return true;}return false;}}},{key:"reconcile",value:function reconcile(model,options){var style=model.styleId&&options.styles&&options.styles.getStyleModel(model.styleId);if(style){model.style=style;}if(model.styleId!==undefined){model.styleId=undefined;}switch(model.type){case Enums.ValueType.String:if(typeof model.value==='number'){if(options.sharedStrings){model.value=options.sharedStrings.getString(model.value);}}if(model.value.richText){model.type=Enums.ValueType.RichText;}break;case Enums.ValueType.Number:if(style&&utils.isDateFmt(style.numFmt)){model.type=Enums.ValueType.Date;model.value=utils.excelToDate(model.value,options.date1904);}break;case Enums.ValueType.Formula:if(model.result!==undefined&&style&&utils.isDateFmt(style.numFmt)){model.result=utils.excelToDate(model.result,options.date1904);}if(model.shareType==='shared'){if(model.ref){// master |
|
|
options.formulae[model.si]=model.address;}else{// slave |
|
|
model.sharedFormula=options.formulae[model.si];delete model.shareType;}delete model.si;}break;default:break;}// look for hyperlink |
|
|
var hyperlink=options.hyperlinkMap[model.address];if(hyperlink){if(model.type===Enums.ValueType.Formula){model.text=model.result;model.result=undefined;}else{model.text=model.value;model.value=undefined;}model.type=Enums.ValueType.Hyperlink;model.hyperlink=hyperlink;}var comment=options.commentsMap&&options.commentsMap[model.address];if(comment){model.comment=comment;}}},{key:"tag",get:function get(){return'c';}}]);return CellXform;}(BaseXform);module.exports=CellXform;},{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/utils":24,"../base-xform":29,"../strings/rich-text-xform":119}],71:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../../base-xform');var CfIconExtXform=/*#__PURE__*/function(_BaseXform){_inherits(CfIconExtXform,_BaseXform);var _super=_createSuper(CfIconExtXform);function CfIconExtXform(){_classCallCheck(this,CfIconExtXform);return _super.apply(this,arguments);}_createClass(CfIconExtXform,[{key:"render",value:function render(xmlStream,model){xmlStream.leafNode(this.tag,{iconSet:model.iconSet,iconId:model.iconId});}},{key:"parseOpen",value:function parseOpen(_ref){var attributes=_ref.attributes;this.model={iconSet:attributes.iconSet,iconId:BaseXform.toIntValue(attributes.iconId)};}},{key:"parseClose",value:function parseClose(name){return name!==this.tag;}},{key:"tag",get:function get(){return'x14:cfIcon';}}]);return CfIconExtXform;}(BaseXform);module.exports=CfIconExtXform;},{"../../base-xform":29}],72:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var _require=require('uuid'),uuidv4=_require.v4;var BaseXform=require('../../base-xform');var CompositeXform=require('../../composite-xform');var DatabarExtXform=require('./databar-ext-xform');var IconSetExtXform=require('./icon-set-ext-xform');var extIcons={'3Triangles':true,'3Stars':true,'5Boxes':true};var CfRuleExtXform=/*#__PURE__*/function(_CompositeXform){_inherits(CfRuleExtXform,_CompositeXform);var _super=_createSuper(CfRuleExtXform);function CfRuleExtXform(){var _this;_classCallCheck(this,CfRuleExtXform);_this=_super.call(this);_this.map={'x14:dataBar':_this.databarXform=new DatabarExtXform(),'x14:iconSet':_this.iconSetXform=new IconSetExtXform()};return _this;}_createClass(CfRuleExtXform,[{key:"prepare",value:function prepare(model){if(CfRuleExtXform.isExt(model)){model.x14Id="{".concat(uuidv4(),"}").toUpperCase();}}},{key:"render",value:function render(xmlStream,model){if(!CfRuleExtXform.isExt(model)){return;}switch(model.type){case'dataBar':this.renderDataBar(xmlStream,model);break;case'iconSet':this.renderIconSet(xmlStream,model);break;}}},{key:"renderDataBar",value:function renderDataBar(xmlStream,model){xmlStream.openNode(this.tag,{type:'dataBar',id:model.x14Id});this.databarXform.render(xmlStream,model);xmlStream.closeNode();}},{key:"renderIconSet",value:function renderIconSet(xmlStream,model){xmlStream.openNode(this.tag,{type:'iconSet',priority:model.priority,id:model.x14Id||"{".concat(uuidv4(),"}")});this.iconSetXform.render(xmlStream,model);xmlStream.closeNode();}},{key:"createNewModel",value:function createNewModel(_ref){var attributes=_ref.attributes;return{type:attributes.type,x14Id:attributes.id,priority:BaseXform.toIntValue(attributes.priority)};}},{key:"onParserClose",value:function onParserClose(name,parser){Object.assign(this.model,parser.model);}},{key:"tag",get:function get(){return'x14:cfRule';}}],[{key:"isExt",value:function isExt(rule){// is this rule primitive? |
|
|
if(rule.type==='dataBar'){return DatabarExtXform.isExt(rule);}if(rule.type==='iconSet'){if(rule.custom||extIcons[rule.iconSet]){return true;}}return false;}}]);return CfRuleExtXform;}(CompositeXform);module.exports=CfRuleExtXform;},{"../../base-xform":29,"../../composite-xform":45,"./databar-ext-xform":76,"./icon-set-ext-xform":78,"uuid":502}],73:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var CompositeXform=require('../../composite-xform');var FExtXform=require('./f-ext-xform');var CfvoExtXform=/*#__PURE__*/function(_CompositeXform){_inherits(CfvoExtXform,_CompositeXform);var _super=_createSuper(CfvoExtXform);function CfvoExtXform(){var _this;_classCallCheck(this,CfvoExtXform);_this=_super.call(this);_this.map={'xm:f':_this.fExtXform=new FExtXform()};return _this;}_createClass(CfvoExtXform,[{key:"render",value:function render(xmlStream,model){xmlStream.openNode(this.tag,{type:model.type});if(model.value!==undefined){this.fExtXform.render(xmlStream,model.value);}xmlStream.closeNode();}},{key:"createNewModel",value:function createNewModel(node){return{type:node.attributes.type};}},{key:"onParserClose",value:function onParserClose(name,parser){switch(name){case'xm:f':this.model.value=parser.model?parseFloat(parser.model):0;break;}}},{key:"tag",get:function get(){return'x14:cfvo';}}]);return CfvoExtXform;}(CompositeXform);module.exports=CfvoExtXform;},{"../../composite-xform":45,"./f-ext-xform":77}],74:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var CompositeXform=require('../../composite-xform');var SqRefExtXform=require('./sqref-ext-xform');var CfRuleExtXform=require('./cf-rule-ext-xform');var ConditionalFormattingExtXform=/*#__PURE__*/function(_CompositeXform){_inherits(ConditionalFormattingExtXform,_CompositeXform);var _super=_createSuper(ConditionalFormattingExtXform);function ConditionalFormattingExtXform(){var _this;_classCallCheck(this,ConditionalFormattingExtXform);_this=_super.call(this);_this.map={'xm:sqref':_this.sqRef=new SqRefExtXform(),'x14:cfRule':_this.cfRule=new CfRuleExtXform()};return _this;}_createClass(ConditionalFormattingExtXform,[{key:"prepare",value:function prepare(model,options){var _this2=this;model.rules.forEach(function(rule){_this2.cfRule.prepare(rule,options);});}},{key:"render",value:function render(xmlStream,model){var _this3=this;if(!model.rules.some(CfRuleExtXform.isExt)){return;}xmlStream.openNode(this.tag,{'xmlns:xm':'http://schemas.microsoft.com/office/excel/2006/main'});model.rules.filter(CfRuleExtXform.isExt).forEach(function(rule){return _this3.cfRule.render(xmlStream,rule);});// for some odd reason, Excel needs the <xm:sqref> node to be after the rules |
|
|
this.sqRef.render(xmlStream,model.ref);xmlStream.closeNode();}},{key:"createNewModel",value:function createNewModel(){return{rules:[]};}},{key:"onParserClose",value:function onParserClose(name,parser){switch(name){case'xm:sqref':this.model.ref=parser.model;break;case'x14:cfRule':this.model.rules.push(parser.model);break;}}},{key:"tag",get:function get(){return'x14:conditionalFormatting';}}]);return ConditionalFormattingExtXform;}(CompositeXform);module.exports=ConditionalFormattingExtXform;},{"../../composite-xform":45,"./cf-rule-ext-xform":72,"./sqref-ext-xform":79}],75:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var CompositeXform=require('../../composite-xform');var CfRuleExtXform=require('./cf-rule-ext-xform');var ConditionalFormattingExtXform=require('./conditional-formatting-ext-xform');var ConditionalFormattingsExtXform=/*#__PURE__*/function(_CompositeXform){_inherits(ConditionalFormattingsExtXform,_CompositeXform);var _super=_createSuper(ConditionalFormattingsExtXform);function ConditionalFormattingsExtXform(){var _this;_classCallCheck(this,ConditionalFormattingsExtXform);_this=_super.call(this);_this.map={'x14:conditionalFormatting':_this.cfXform=new ConditionalFormattingExtXform()};return _this;}_createClass(ConditionalFormattingsExtXform,[{key:"hasContent",value:function hasContent(model){if(model.hasExtContent===undefined){model.hasExtContent=model.some(function(cf){return cf.rules.some(CfRuleExtXform.isExt);});}return model.hasExtContent;}},{key:"prepare",value:function prepare(model,options){var _this2=this;model.forEach(function(cf){_this2.cfXform.prepare(cf,options);});}},{key:"render",value:function render(xmlStream,model){var _this3=this;if(this.hasContent(model)){xmlStream.openNode(this.tag);model.forEach(function(cf){return _this3.cfXform.render(xmlStream,cf);});xmlStream.closeNode();}}},{key:"createNewModel",value:function createNewModel(){return[];}},{key:"onParserClose",value:function onParserClose(name,parser){// model is array of conditional formatting objects |
|
|
this.model.push(parser.model);}},{key:"tag",get:function get(){return'x14:conditionalFormattings';}}]);return ConditionalFormattingsExtXform;}(CompositeXform);module.exports=ConditionalFormattingsExtXform;},{"../../composite-xform":45,"./cf-rule-ext-xform":72,"./conditional-formatting-ext-xform":74}],76:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_unsupportedIterableToArray(arr,i)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen);}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++){arr2[i]=arr[i];}return arr2;}function _iterableToArrayLimit(arr,i){if(typeof Symbol==="undefined"||!(Symbol.iterator in Object(arr)))return;var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"]!=null)_i["return"]();}finally{if(_d)throw _e;}}return _arr;}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr;}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../../base-xform');var CompositeXform=require('../../composite-xform');var ColorXform=require('../../style/color-xform');var CfvoExtXform=require('./cfvo-ext-xform');var DatabarExtXform=/*#__PURE__*/function(_CompositeXform){_inherits(DatabarExtXform,_CompositeXform);var _super=_createSuper(DatabarExtXform);function DatabarExtXform(){var _this;_classCallCheck(this,DatabarExtXform);_this=_super.call(this);_this.map={'x14:cfvo':_this.cfvoXform=new CfvoExtXform(),'x14:borderColor':_this.borderColorXform=new ColorXform('x14:borderColor'),'x14:negativeBorderColor':_this.negativeBorderColorXform=new ColorXform('x14:negativeBorderColor'),'x14:negativeFillColor':_this.negativeFillColorXform=new ColorXform('x14:negativeFillColor'),'x14:axisColor':_this.axisColorXform=new ColorXform('x14:axisColor')};return _this;}_createClass(DatabarExtXform,[{key:"render",value:function render(xmlStream,model){var _this2=this;xmlStream.openNode(this.tag,{minLength:BaseXform.toIntAttribute(model.minLength,0,true),maxLength:BaseXform.toIntAttribute(model.maxLength,100,true),border:BaseXform.toBoolAttribute(model.border,false),gradient:BaseXform.toBoolAttribute(model.gradient,true),negativeBarColorSameAsPositive:BaseXform.toBoolAttribute(model.negativeBarColorSameAsPositive,true),negativeBarBorderColorSameAsPositive:BaseXform.toBoolAttribute(model.negativeBarBorderColorSameAsPositive,true),axisPosition:BaseXform.toAttribute(model.axisPosition,'auto'),direction:BaseXform.toAttribute(model.direction,'leftToRight')});model.cfvo.forEach(function(cfvo){_this2.cfvoXform.render(xmlStream,cfvo);});this.borderColorXform.render(xmlStream,model.borderColor);this.negativeBorderColorXform.render(xmlStream,model.negativeBorderColor);this.negativeFillColorXform.render(xmlStream,model.negativeFillColor);this.axisColorXform.render(xmlStream,model.axisColor);xmlStream.closeNode();}},{key:"createNewModel",value:function createNewModel(_ref){var attributes=_ref.attributes;return{cfvo:[],minLength:BaseXform.toIntValue(attributes.minLength,0),maxLength:BaseXform.toIntValue(attributes.maxLength,100),border:BaseXform.toBoolValue(attributes.border,false),gradient:BaseXform.toBoolValue(attributes.gradient,true),negativeBarColorSameAsPositive:BaseXform.toBoolValue(attributes.negativeBarColorSameAsPositive,true),negativeBarBorderColorSameAsPositive:BaseXform.toBoolValue(attributes.negativeBarBorderColorSameAsPositive,true),axisPosition:BaseXform.toStringValue(attributes.axisPosition,'auto'),direction:BaseXform.toStringValue(attributes.direction,'leftToRight')};}},{key:"onParserClose",value:function onParserClose(name,parser){var _name$split=name.split(':'),_name$split2=_slicedToArray(_name$split,2),prop=_name$split2[1];switch(prop){case'cfvo':this.model.cfvo.push(parser.model);break;default:this.model[prop]=parser.model;break;}}},{key:"tag",get:function get(){return'x14:dataBar';}}],[{key:"isExt",value:function isExt(rule){// not all databars need ext |
|
|
// TODO: refine this |
|
|
return!rule.gradient;}}]);return DatabarExtXform;}(CompositeXform);module.exports=DatabarExtXform;},{"../../base-xform":29,"../../composite-xform":45,"../../style/color-xform":125,"./cfvo-ext-xform":73}],77:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../../base-xform');var FExtXform=/*#__PURE__*/function(_BaseXform){_inherits(FExtXform,_BaseXform);var _super=_createSuper(FExtXform);function FExtXform(){_classCallCheck(this,FExtXform);return _super.apply(this,arguments);}_createClass(FExtXform,[{key:"render",value:function render(xmlStream,model){xmlStream.leafNode(this.tag,null,model);}},{key:"parseOpen",value:function parseOpen(){this.model='';}},{key:"parseText",value:function parseText(text){this.model+=text;}},{key:"parseClose",value:function parseClose(name){return name!==this.tag;}},{key:"tag",get:function get(){return'xm:f';}}]);return FExtXform;}(BaseXform);module.exports=FExtXform;},{"../../base-xform":29}],78:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_unsupportedIterableToArray(arr,i)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen);}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++){arr2[i]=arr[i];}return arr2;}function _iterableToArrayLimit(arr,i){if(typeof Symbol==="undefined"||!(Symbol.iterator in Object(arr)))return;var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"]!=null)_i["return"]();}finally{if(_d)throw _e;}}return _arr;}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr;}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../../base-xform');var CompositeXform=require('../../composite-xform');var CfvoExtXform=require('./cfvo-ext-xform');var CfIconExtXform=require('./cf-icon-ext-xform');var IconSetExtXform=/*#__PURE__*/function(_CompositeXform){_inherits(IconSetExtXform,_CompositeXform);var _super=_createSuper(IconSetExtXform);function IconSetExtXform(){var _this;_classCallCheck(this,IconSetExtXform);_this=_super.call(this);_this.map={'x14:cfvo':_this.cfvoXform=new CfvoExtXform(),'x14:cfIcon':_this.cfIconXform=new CfIconExtXform()};return _this;}_createClass(IconSetExtXform,[{key:"render",value:function render(xmlStream,model){var _this2=this;xmlStream.openNode(this.tag,{iconSet:BaseXform.toStringAttribute(model.iconSet),reverse:BaseXform.toBoolAttribute(model.reverse,false),showValue:BaseXform.toBoolAttribute(model.showValue,true),custom:BaseXform.toBoolAttribute(model.icons,false)});model.cfvo.forEach(function(cfvo){_this2.cfvoXform.render(xmlStream,cfvo);});if(model.icons){model.icons.forEach(function(icon,i){icon.iconId=i;_this2.cfIconXform.render(xmlStream,icon);});}xmlStream.closeNode();}},{key:"createNewModel",value:function createNewModel(_ref){var attributes=_ref.attributes;return{cfvo:[],iconSet:BaseXform.toStringValue(attributes.iconSet,'3TrafficLights'),reverse:BaseXform.toBoolValue(attributes.reverse,false),showValue:BaseXform.toBoolValue(attributes.showValue,true)};}},{key:"onParserClose",value:function onParserClose(name,parser){var _name$split=name.split(':'),_name$split2=_slicedToArray(_name$split,2),prop=_name$split2[1];switch(prop){case'cfvo':this.model.cfvo.push(parser.model);break;case'cfIcon':if(!this.model.icons){this.model.icons=[];}this.model.icons.push(parser.model);break;default:this.model[prop]=parser.model;break;}}},{key:"tag",get:function get(){return'x14:iconSet';}}]);return IconSetExtXform;}(CompositeXform);module.exports=IconSetExtXform;},{"../../base-xform":29,"../../composite-xform":45,"./cf-icon-ext-xform":71,"./cfvo-ext-xform":73}],79:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../../base-xform');var SqrefExtXform=/*#__PURE__*/function(_BaseXform){_inherits(SqrefExtXform,_BaseXform);var _super=_createSuper(SqrefExtXform);function SqrefExtXform(){_classCallCheck(this,SqrefExtXform);return _super.apply(this,arguments);}_createClass(SqrefExtXform,[{key:"render",value:function render(xmlStream,model){xmlStream.leafNode(this.tag,null,model);}},{key:"parseOpen",value:function parseOpen(){this.model='';}},{key:"parseText",value:function parseText(text){this.model+=text;}},{key:"parseClose",value:function parseClose(name){return name!==this.tag;}},{key:"tag",get:function get(){return'xm:sqref';}}]);return SqrefExtXform;}(BaseXform);module.exports=SqrefExtXform;},{"../../base-xform":29}],80:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly)symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;});keys.push.apply(keys,symbols);}return keys;}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};if(i%2){ownKeys(Object(source),true).forEach(function(key){_defineProperty(target,key,source[key]);});}else if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source));}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key));});}}return target;}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../../base-xform');var CompositeXform=require('../../composite-xform');var Range=require('../../../../doc/range');var DatabarXform=require('./databar-xform');var ExtLstRefXform=require('./ext-lst-ref-xform');var FormulaXform=require('./formula-xform');var ColorScaleXform=require('./color-scale-xform');var IconSetXform=require('./icon-set-xform');var extIcons={'3Triangles':true,'3Stars':true,'5Boxes':true};var getTextFormula=function getTextFormula(model){if(model.formulae&&model.formulae[0]){return model.formulae[0];}var range=new Range(model.ref);var tl=range.tl;switch(model.operator){case'containsText':return"NOT(ISERROR(SEARCH(\"".concat(model.text,"\",").concat(tl,")))");case'containsBlanks':return"LEN(TRIM(".concat(tl,"))=0");case'notContainsBlanks':return"LEN(TRIM(".concat(tl,"))>0");case'containsErrors':return"ISERROR(".concat(tl,")");case'notContainsErrors':return"NOT(ISERROR(".concat(tl,"))");default:return undefined;}};var getTimePeriodFormula=function getTimePeriodFormula(model){if(model.formulae&&model.formulae[0]){return model.formulae[0];}var range=new Range(model.ref);var tl=range.tl;switch(model.timePeriod){case'thisWeek':return"AND(TODAY()-ROUNDDOWN(".concat(tl,",0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(").concat(tl,",0)-TODAY()<=7-WEEKDAY(TODAY()))");case'lastWeek':return"AND(TODAY()-ROUNDDOWN(".concat(tl,",0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(").concat(tl,",0)<(WEEKDAY(TODAY())+7))");case'nextWeek':return"AND(ROUNDDOWN(".concat(tl,",0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(").concat(tl,",0)-TODAY()<(15-WEEKDAY(TODAY())))");case'yesterday':return"FLOOR(".concat(tl,",1)=TODAY()-1");case'today':return"FLOOR(".concat(tl,",1)=TODAY()");case'tomorrow':return"FLOOR(".concat(tl,",1)=TODAY()+1");case'last7Days':return"AND(TODAY()-FLOOR(".concat(tl,",1)<=6,FLOOR(").concat(tl,",1)<=TODAY())");case'lastMonth':return"AND(MONTH(".concat(tl,")=MONTH(EDATE(TODAY(),0-1)),YEAR(").concat(tl,")=YEAR(EDATE(TODAY(),0-1)))");case'thisMonth':return"AND(MONTH(".concat(tl,")=MONTH(TODAY()),YEAR(").concat(tl,")=YEAR(TODAY()))");case'nextMonth':return"AND(MONTH(".concat(tl,")=MONTH(EDATE(TODAY(),0+1)),YEAR(").concat(tl,")=YEAR(EDATE(TODAY(),0+1)))");default:return undefined;}};var opType=function opType(attributes){var type=attributes.type,operator=attributes.operator;switch(type){case'containsText':case'containsBlanks':case'notContainsBlanks':case'containsErrors':case'notContainsErrors':return{type:'containsText',operator:type};default:return{type:type,operator:operator};}};var CfRuleXform=/*#__PURE__*/function(_CompositeXform){_inherits(CfRuleXform,_CompositeXform);var _super=_createSuper(CfRuleXform);function CfRuleXform(){var _this;_classCallCheck(this,CfRuleXform);_this=_super.call(this);_this.map={dataBar:_this.databarXform=new DatabarXform(),extLst:_this.extLstRefXform=new ExtLstRefXform(),formula:_this.formulaXform=new FormulaXform(),colorScale:_this.colorScaleXform=new ColorScaleXform(),iconSet:_this.iconSetXform=new IconSetXform()};return _this;}_createClass(CfRuleXform,[{key:"render",value:function render(xmlStream,model){switch(model.type){case'expression':this.renderExpression(xmlStream,model);break;case'cellIs':this.renderCellIs(xmlStream,model);break;case'top10':this.renderTop10(xmlStream,model);break;case'aboveAverage':this.renderAboveAverage(xmlStream,model);break;case'dataBar':this.renderDataBar(xmlStream,model);break;case'colorScale':this.renderColorScale(xmlStream,model);break;case'iconSet':this.renderIconSet(xmlStream,model);break;case'containsText':this.renderText(xmlStream,model);break;case'timePeriod':this.renderTimePeriod(xmlStream,model);break;}}},{key:"renderExpression",value:function renderExpression(xmlStream,model){xmlStream.openNode(this.tag,{type:'expression',dxfId:model.dxfId,priority:model.priority});this.formulaXform.render(xmlStream,model.formulae[0]);xmlStream.closeNode();}},{key:"renderCellIs",value:function renderCellIs(xmlStream,model){var _this2=this;xmlStream.openNode(this.tag,{type:'cellIs',dxfId:model.dxfId,priority:model.priority,operator:model.operator});model.formulae.forEach(function(formula){_this2.formulaXform.render(xmlStream,formula);});xmlStream.closeNode();}},{key:"renderTop10",value:function renderTop10(xmlStream,model){xmlStream.leafNode(this.tag,{type:'top10',dxfId:model.dxfId,priority:model.priority,percent:BaseXform.toBoolAttribute(model.percent,false),bottom:BaseXform.toBoolAttribute(model.bottom,false),rank:BaseXform.toIntValue(model.rank,10,true)});}},{key:"renderAboveAverage",value:function renderAboveAverage(xmlStream,model){xmlStream.leafNode(this.tag,{type:'aboveAverage',dxfId:model.dxfId,priority:model.priority,aboveAverage:BaseXform.toBoolAttribute(model.aboveAverage,true)});}},{key:"renderDataBar",value:function renderDataBar(xmlStream,model){xmlStream.openNode(this.tag,{type:'dataBar',priority:model.priority});this.databarXform.render(xmlStream,model);this.extLstRefXform.render(xmlStream,model);xmlStream.closeNode();}},{key:"renderColorScale",value:function renderColorScale(xmlStream,model){xmlStream.openNode(this.tag,{type:'colorScale',priority:model.priority});this.colorScaleXform.render(xmlStream,model);xmlStream.closeNode();}},{key:"renderIconSet",value:function renderIconSet(xmlStream,model){// iconset is all primitive or all extLst |
|
|
if(!CfRuleXform.isPrimitive(model)){return;}xmlStream.openNode(this.tag,{type:'iconSet',priority:model.priority});this.iconSetXform.render(xmlStream,model);xmlStream.closeNode();}},{key:"renderText",value:function renderText(xmlStream,model){xmlStream.openNode(this.tag,{type:model.operator,dxfId:model.dxfId,priority:model.priority,operator:BaseXform.toStringAttribute(model.operator,'containsText')});var formula=getTextFormula(model);if(formula){this.formulaXform.render(xmlStream,formula);}xmlStream.closeNode();}},{key:"renderTimePeriod",value:function renderTimePeriod(xmlStream,model){xmlStream.openNode(this.tag,{type:'timePeriod',dxfId:model.dxfId,priority:model.priority,timePeriod:model.timePeriod});var formula=getTimePeriodFormula(model);if(formula){this.formulaXform.render(xmlStream,formula);}xmlStream.closeNode();}},{key:"createNewModel",value:function createNewModel(_ref){var attributes=_ref.attributes;return _objectSpread(_objectSpread({},opType(attributes)),{},{dxfId:BaseXform.toIntValue(attributes.dxfId),priority:BaseXform.toIntValue(attributes.priority),timePeriod:attributes.timePeriod,percent:BaseXform.toBoolValue(attributes.percent),bottom:BaseXform.toBoolValue(attributes.bottom),rank:BaseXform.toIntValue(attributes.rank),aboveAverage:BaseXform.toBoolValue(attributes.aboveAverage)});}},{key:"onParserClose",value:function onParserClose(name,parser){switch(name){case'dataBar':case'extLst':case'colorScale':case'iconSet':// merge parser model with ours |
|
|
Object.assign(this.model,parser.model);break;case'formula':// except - formula is a string and appends to formulae |
|
|
this.model.formulae=this.model.formulae||[];this.model.formulae.push(parser.model);break;}}},{key:"tag",get:function get(){return'cfRule';}}],[{key:"isPrimitive",value:function isPrimitive(rule){// is this rule primitive? |
|
|
if(rule.type==='iconSet'){if(rule.custom||extIcons[rule.iconSet]){return false;}}return true;}}]);return CfRuleXform;}(CompositeXform);module.exports=CfRuleXform;},{"../../../../doc/range":10,"../../base-xform":29,"../../composite-xform":45,"./color-scale-xform":82,"./databar-xform":85,"./ext-lst-ref-xform":86,"./formula-xform":87,"./icon-set-xform":88}],81:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../../base-xform');var CfvoXform=/*#__PURE__*/function(_BaseXform){_inherits(CfvoXform,_BaseXform);var _super=_createSuper(CfvoXform);function CfvoXform(){_classCallCheck(this,CfvoXform);return _super.apply(this,arguments);}_createClass(CfvoXform,[{key:"render",value:function render(xmlStream,model){xmlStream.leafNode(this.tag,{type:model.type,val:model.value});}},{key:"parseOpen",value:function parseOpen(node){this.model={type:node.attributes.type,value:BaseXform.toFloatValue(node.attributes.val)};}},{key:"parseClose",value:function parseClose(name){return name!==this.tag;}},{key:"tag",get:function get(){return'cfvo';}}]);return CfvoXform;}(BaseXform);module.exports=CfvoXform;},{"../../base-xform":29}],82:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var CompositeXform=require('../../composite-xform');var ColorXform=require('../../style/color-xform');var CfvoXform=require('./cfvo-xform');var ColorScaleXform=/*#__PURE__*/function(_CompositeXform){_inherits(ColorScaleXform,_CompositeXform);var _super=_createSuper(ColorScaleXform);function ColorScaleXform(){var _this;_classCallCheck(this,ColorScaleXform);_this=_super.call(this);_this.map={cfvo:_this.cfvoXform=new CfvoXform(),color:_this.colorXform=new ColorXform()};return _this;}_createClass(ColorScaleXform,[{key:"render",value:function render(xmlStream,model){var _this2=this;xmlStream.openNode(this.tag);model.cfvo.forEach(function(cfvo){_this2.cfvoXform.render(xmlStream,cfvo);});model.color.forEach(function(color){_this2.colorXform.render(xmlStream,color);});xmlStream.closeNode();}},{key:"createNewModel",value:function createNewModel(node){return{cfvo:[],color:[]};}},{key:"onParserClose",value:function onParserClose(name,parser){this.model[name].push(parser.model);}},{key:"tag",get:function get(){return'colorScale';}}]);return ColorScaleXform;}(CompositeXform);module.exports=ColorScaleXform;},{"../../composite-xform":45,"../../style/color-xform":125,"./cfvo-xform":81}],83:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var CompositeXform=require('../../composite-xform');var CfRuleXform=require('./cf-rule-xform');var ConditionalFormattingXform=/*#__PURE__*/function(_CompositeXform){_inherits(ConditionalFormattingXform,_CompositeXform);var _super=_createSuper(ConditionalFormattingXform);function ConditionalFormattingXform(){var _this;_classCallCheck(this,ConditionalFormattingXform);_this=_super.call(this);_this.map={cfRule:new CfRuleXform()};return _this;}_createClass(ConditionalFormattingXform,[{key:"render",value:function render(xmlStream,model){var _this2=this;// if there are no primitive rules, exit now |
|
|
if(!model.rules.some(CfRuleXform.isPrimitive)){return;}xmlStream.openNode(this.tag,{sqref:model.ref});model.rules.forEach(function(rule){if(CfRuleXform.isPrimitive(rule)){rule.ref=model.ref;_this2.map.cfRule.render(xmlStream,rule);}});xmlStream.closeNode();}},{key:"createNewModel",value:function createNewModel(_ref){var attributes=_ref.attributes;return{ref:attributes.sqref,rules:[]};}},{key:"onParserClose",value:function onParserClose(name,parser){this.model.rules.push(parser.model);}},{key:"tag",get:function get(){return'conditionalFormatting';}}]);return ConditionalFormattingXform;}(CompositeXform);module.exports=ConditionalFormattingXform;},{"../../composite-xform":45,"./cf-rule-xform":80}],84:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread();}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen);}function _iterableToArray(iter){if(typeof Symbol!=="undefined"&&Symbol.iterator in Object(iter))return Array.from(iter);}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr);}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++){arr2[i]=arr[i];}return arr2;}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../../base-xform');var ConditionalFormattingXform=require('./conditional-formatting-xform');var ConditionalFormattingsXform=/*#__PURE__*/function(_BaseXform){_inherits(ConditionalFormattingsXform,_BaseXform);var _super=_createSuper(ConditionalFormattingsXform);function ConditionalFormattingsXform(){var _this;_classCallCheck(this,ConditionalFormattingsXform);_this=_super.call(this);_this.cfXform=new ConditionalFormattingXform();return _this;}_createClass(ConditionalFormattingsXform,[{key:"reset",value:function reset(){this.model=[];}},{key:"prepare",value:function prepare(model,options){// ensure each rule has a priority value |
|
|
var nextPriority=model.reduce(function(p,cf){return Math.max.apply(Math,[p].concat(_toConsumableArray(cf.rules.map(function(rule){return rule.priority||0;}))));},1);model.forEach(function(cf){cf.rules.forEach(function(rule){if(!rule.priority){rule.priority=nextPriority++;}if(rule.style){rule.dxfId=options.styles.addDxfStyle(rule.style);}});});}},{key:"render",value:function render(xmlStream,model){var _this2=this;model.forEach(function(cf){_this2.cfXform.render(xmlStream,cf);});}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case'conditionalFormatting':this.parser=this.cfXform;this.parser.parseOpen(node);return true;default:return false;}}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.model.push(this.parser.model);this.parser=undefined;return false;}return true;}return false;}},{key:"reconcile",value:function reconcile(model,options){model.forEach(function(cf){cf.rules.forEach(function(rule){if(rule.dxfId!==undefined){rule.style=options.styles.getDxfStyle(rule.dxfId);delete rule.dxfId;}});});}},{key:"tag",get:function get(){return'conditionalFormatting';}}]);return ConditionalFormattingsXform;}(BaseXform);module.exports=ConditionalFormattingsXform;},{"../../base-xform":29,"./conditional-formatting-xform":83}],85:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var CompositeXform=require('../../composite-xform');var ColorXform=require('../../style/color-xform');var CfvoXform=require('./cfvo-xform');var DatabarXform=/*#__PURE__*/function(_CompositeXform){_inherits(DatabarXform,_CompositeXform);var _super=_createSuper(DatabarXform);function DatabarXform(){var _this;_classCallCheck(this,DatabarXform);_this=_super.call(this);_this.map={cfvo:_this.cfvoXform=new CfvoXform(),color:_this.colorXform=new ColorXform()};return _this;}_createClass(DatabarXform,[{key:"render",value:function render(xmlStream,model){var _this2=this;xmlStream.openNode(this.tag);model.cfvo.forEach(function(cfvo){_this2.cfvoXform.render(xmlStream,cfvo);});this.colorXform.render(xmlStream,model.color);xmlStream.closeNode();}},{key:"createNewModel",value:function createNewModel(){return{cfvo:[]};}},{key:"onParserClose",value:function onParserClose(name,parser){switch(name){case'cfvo':this.model.cfvo.push(parser.model);break;case'color':this.model.color=parser.model;break;}}},{key:"tag",get:function get(){return'dataBar';}}]);return DatabarXform;}(CompositeXform);module.exports=DatabarXform;},{"../../composite-xform":45,"../../style/color-xform":125,"./cfvo-xform":81}],86:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}/* eslint-disable max-classes-per-file */var BaseXform=require('../../base-xform');var CompositeXform=require('../../composite-xform');var X14IdXform=/*#__PURE__*/function(_BaseXform){_inherits(X14IdXform,_BaseXform);var _super=_createSuper(X14IdXform);function X14IdXform(){_classCallCheck(this,X14IdXform);return _super.apply(this,arguments);}_createClass(X14IdXform,[{key:"render",value:function render(xmlStream,model){xmlStream.leafNode(this.tag,null,model);}},{key:"parseOpen",value:function parseOpen(){this.model='';}},{key:"parseText",value:function parseText(text){this.model+=text;}},{key:"parseClose",value:function parseClose(name){return name!==this.tag;}},{key:"tag",get:function get(){return'x14:id';}}]);return X14IdXform;}(BaseXform);var ExtXform=/*#__PURE__*/function(_CompositeXform){_inherits(ExtXform,_CompositeXform);var _super2=_createSuper(ExtXform);function ExtXform(){var _this;_classCallCheck(this,ExtXform);_this=_super2.call(this);_this.map={'x14:id':_this.idXform=new X14IdXform()};return _this;}_createClass(ExtXform,[{key:"render",value:function render(xmlStream,model){xmlStream.openNode(this.tag,{uri:'{B025F937-C7B1-47D3-B67F-A62EFF666E3E}','xmlns:x14':'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main'});this.idXform.render(xmlStream,model.x14Id);xmlStream.closeNode();}},{key:"createNewModel",value:function createNewModel(){return{};}},{key:"onParserClose",value:function onParserClose(name,parser){this.model.x14Id=parser.model;}},{key:"tag",get:function get(){return'ext';}}]);return ExtXform;}(CompositeXform);var ExtLstRefXform=/*#__PURE__*/function(_CompositeXform2){_inherits(ExtLstRefXform,_CompositeXform2);var _super3=_createSuper(ExtLstRefXform);function ExtLstRefXform(){var _this2;_classCallCheck(this,ExtLstRefXform);_this2=_super3.call(this);_this2.map={ext:new ExtXform()};return _this2;}_createClass(ExtLstRefXform,[{key:"render",value:function render(xmlStream,model){xmlStream.openNode(this.tag);this.map.ext.render(xmlStream,model);xmlStream.closeNode();}},{key:"createNewModel",value:function createNewModel(){return{};}},{key:"onParserClose",value:function onParserClose(name,parser){Object.assign(this.model,parser.model);}},{key:"tag",get:function get(){return'extLst';}}]);return ExtLstRefXform;}(CompositeXform);module.exports=ExtLstRefXform;},{"../../base-xform":29,"../../composite-xform":45}],87:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../../base-xform');var FormulaXform=/*#__PURE__*/function(_BaseXform){_inherits(FormulaXform,_BaseXform);var _super=_createSuper(FormulaXform);function FormulaXform(){_classCallCheck(this,FormulaXform);return _super.apply(this,arguments);}_createClass(FormulaXform,[{key:"render",value:function render(xmlStream,model){xmlStream.leafNode(this.tag,null,model);}},{key:"parseOpen",value:function parseOpen(){this.model='';}},{key:"parseText",value:function parseText(text){this.model+=text;}},{key:"parseClose",value:function parseClose(name){return name!==this.tag;}},{key:"tag",get:function get(){return'formula';}}]);return FormulaXform;}(BaseXform);module.exports=FormulaXform;},{"../../base-xform":29}],88:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../../base-xform');var CompositeXform=require('../../composite-xform');var CfvoXform=require('./cfvo-xform');var IconSetXform=/*#__PURE__*/function(_CompositeXform){_inherits(IconSetXform,_CompositeXform);var _super=_createSuper(IconSetXform);function IconSetXform(){var _this;_classCallCheck(this,IconSetXform);_this=_super.call(this);_this.map={cfvo:_this.cfvoXform=new CfvoXform()};return _this;}_createClass(IconSetXform,[{key:"render",value:function render(xmlStream,model){var _this2=this;xmlStream.openNode(this.tag,{iconSet:BaseXform.toStringAttribute(model.iconSet,'3TrafficLights'),reverse:BaseXform.toBoolAttribute(model.reverse,false),showValue:BaseXform.toBoolAttribute(model.showValue,true)});model.cfvo.forEach(function(cfvo){_this2.cfvoXform.render(xmlStream,cfvo);});xmlStream.closeNode();}},{key:"createNewModel",value:function createNewModel(_ref){var attributes=_ref.attributes;return{iconSet:BaseXform.toStringValue(attributes.iconSet,'3TrafficLights'),reverse:BaseXform.toBoolValue(attributes.reverse),showValue:BaseXform.toBoolValue(attributes.showValue),cfvo:[]};}},{key:"onParserClose",value:function onParserClose(name,parser){this.model[name].push(parser.model);}},{key:"tag",get:function get(){return'iconSet';}}]);return IconSetXform;}(CompositeXform);module.exports=IconSetXform;},{"../../base-xform":29,"../../composite-xform":45,"./cfvo-xform":81}],89:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var ColXform=/*#__PURE__*/function(_BaseXform){_inherits(ColXform,_BaseXform);var _super=_createSuper(ColXform);function ColXform(){_classCallCheck(this,ColXform);return _super.apply(this,arguments);}_createClass(ColXform,[{key:"prepare",value:function prepare(model,options){var styleId=options.styles.addStyleModel(model.style||{});if(styleId){model.styleId=styleId;}}},{key:"render",value:function render(xmlStream,model){xmlStream.openNode('col');xmlStream.addAttribute('min',model.min);xmlStream.addAttribute('max',model.max);if(model.width){xmlStream.addAttribute('width',model.width);}if(model.styleId){xmlStream.addAttribute('style',model.styleId);}if(model.hidden){xmlStream.addAttribute('hidden','1');}if(model.bestFit){xmlStream.addAttribute('bestFit','1');}if(model.outlineLevel){xmlStream.addAttribute('outlineLevel',model.outlineLevel);}if(model.collapsed){xmlStream.addAttribute('collapsed','1');}xmlStream.addAttribute('customWidth','1');xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(node.name==='col'){var model=this.model={min:parseInt(node.attributes.min||'0',10),max:parseInt(node.attributes.max||'0',10),width:node.attributes.width===undefined?undefined:parseFloat(node.attributes.width||'0')};if(node.attributes.style){model.styleId=parseInt(node.attributes.style,10);}if(node.attributes.hidden===true||node.attributes.hidden==='true'||node.attributes.hidden===1||node.attributes.hidden==='1'){model.hidden=true;}if(node.attributes.bestFit){model.bestFit=true;}if(node.attributes.outlineLevel){model.outlineLevel=parseInt(node.attributes.outlineLevel,10);}if(node.attributes.collapsed){model.collapsed=true;}return true;}return false;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"reconcile",value:function reconcile(model,options){// reconcile column styles |
|
|
if(model.styleId){model.style=options.styles.getStyleModel(model.styleId);}}},{key:"tag",get:function get(){return'col';}}]);return ColXform;}(BaseXform);module.exports=ColXform;},{"../base-xform":29}],90:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly)symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;});keys.push.apply(keys,symbols);}return keys;}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};if(i%2){ownKeys(Object(source),true).forEach(function(key){_defineProperty(target,key,source[key]);});}else if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source));}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key));});}}return target;}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}var _=require('../../../utils/under-dash');var utils=require('../../../utils/utils');var colCache=require('../../../utils/col-cache');var BaseXform=require('../base-xform');var Range=require('../../../doc/range');function assign(definedName,attributes,name,defaultValue){var value=attributes[name];if(value!==undefined){definedName[name]=value;}else if(defaultValue!==undefined){definedName[name]=defaultValue;}}function parseBool(value){switch(value){case'1':case'true':return true;default:return false;}}function assignBool(definedName,attributes,name,defaultValue){var value=attributes[name];if(value!==undefined){definedName[name]=parseBool(value);}else if(defaultValue!==undefined){definedName[name]=defaultValue;}}function optimiseDataValidations(model){// Squeeze alike data validations together into rectangular ranges |
|
|
// to reduce file size and speed up Excel load time |
|
|
var dvList=_.map(model,function(dataValidation,address){return{address:address,dataValidation:dataValidation,marked:false};}).sort(function(a,b){return _.strcmp(a.address,b.address);});var dvMap=_.keyBy(dvList,'address');var matchCol=function matchCol(addr,height,col){for(var i=0;i<height;i++){var otherAddress=colCache.encodeAddress(addr.row+i,col);if(!model[otherAddress]||!_.isEqual(model[addr.address],model[otherAddress])){return false;}}return true;};return dvList.map(function(dv){if(!dv.marked){var addr=colCache.decodeAddress(dv.address);// iterate downwards - finding matching cells |
|
|
var height=1;var otherAddress=colCache.encodeAddress(addr.row+height,addr.col);while(model[otherAddress]&&_.isEqual(dv.dataValidation,model[otherAddress])){height++;otherAddress=colCache.encodeAddress(addr.row+height,addr.col);}// iterate rightwards... |
|
|
var width=1;while(matchCol(addr,height,addr.col+width)){width++;}// mark all included addresses |
|
|
for(var i=0;i<height;i++){for(var j=0;j<width;j++){otherAddress=colCache.encodeAddress(addr.row+i,addr.col+j);dvMap[otherAddress].marked=true;}}if(height>1||width>1){var bottom=addr.row+(height-1);var right=addr.col+(width-1);return _objectSpread(_objectSpread({},dv.dataValidation),{},{sqref:"".concat(dv.address,":").concat(colCache.encodeAddress(bottom,right))});}return _objectSpread(_objectSpread({},dv.dataValidation),{},{sqref:dv.address});}return null;}).filter(Boolean);}var DataValidationsXform=/*#__PURE__*/function(_BaseXform){_inherits(DataValidationsXform,_BaseXform);var _super=_createSuper(DataValidationsXform);function DataValidationsXform(){_classCallCheck(this,DataValidationsXform);return _super.apply(this,arguments);}_createClass(DataValidationsXform,[{key:"render",value:function render(xmlStream,model){var optimizedModel=optimiseDataValidations(model);if(optimizedModel.length){xmlStream.openNode('dataValidations',{count:optimizedModel.length});optimizedModel.forEach(function(value){xmlStream.openNode('dataValidation');if(value.type!=='any'){xmlStream.addAttribute('type',value.type);if(value.operator&&value.type!=='list'&&value.operator!=='between'){xmlStream.addAttribute('operator',value.operator);}if(value.allowBlank){xmlStream.addAttribute('allowBlank','1');}}if(value.showInputMessage){xmlStream.addAttribute('showInputMessage','1');}if(value.promptTitle){xmlStream.addAttribute('promptTitle',value.promptTitle);}if(value.prompt){xmlStream.addAttribute('prompt',value.prompt);}if(value.showErrorMessage){xmlStream.addAttribute('showErrorMessage','1');}if(value.errorStyle){xmlStream.addAttribute('errorStyle',value.errorStyle);}if(value.errorTitle){xmlStream.addAttribute('errorTitle',value.errorTitle);}if(value.error){xmlStream.addAttribute('error',value.error);}xmlStream.addAttribute('sqref',value.sqref);(value.formulae||[]).forEach(function(formula,index){xmlStream.openNode("formula".concat(index+1));if(value.type==='date'){xmlStream.writeText(utils.dateToExcel(new Date(formula)));}else{xmlStream.writeText(formula);}xmlStream.closeNode();});xmlStream.closeNode();});xmlStream.closeNode();}}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case'dataValidations':this.model={};return true;case'dataValidation':{this._address=node.attributes.sqref;var dataValidation={type:node.attributes.type||'any',formulae:[]};if(node.attributes.type){assignBool(dataValidation,node.attributes,'allowBlank');}assignBool(dataValidation,node.attributes,'showInputMessage');assignBool(dataValidation,node.attributes,'showErrorMessage');switch(dataValidation.type){case'any':case'list':case'custom':break;default:assign(dataValidation,node.attributes,'operator','between');break;}assign(dataValidation,node.attributes,'promptTitle');assign(dataValidation,node.attributes,'prompt');assign(dataValidation,node.attributes,'errorStyle');assign(dataValidation,node.attributes,'errorTitle');assign(dataValidation,node.attributes,'error');this._dataValidation=dataValidation;return true;}case'formula1':case'formula2':this._formula=[];return true;default:return false;}}},{key:"parseText",value:function parseText(text){if(this._formula){this._formula.push(text);}}},{key:"parseClose",value:function parseClose(name){var _this=this;switch(name){case'dataValidations':return false;case'dataValidation':{if(!this._dataValidation.formulae||!this._dataValidation.formulae.length){delete this._dataValidation.formulae;delete this._dataValidation.operator;}// The four known cases: 1. E4:L9 N4:U9 2.E4 L9 3. N4:U9 4. E4 |
|
|
var list=this._address.split(/\s+/g)||[];list.forEach(function(addr){if(addr.includes(':')){var range=new Range(addr);range.forEachAddress(function(address){_this.model[address]=_this._dataValidation;});}else{_this.model[addr]=_this._dataValidation;}});return true;}case'formula1':case'formula2':{var formula=this._formula.join('');switch(this._dataValidation.type){case'whole':case'textLength':formula=parseInt(formula,10);break;case'decimal':formula=parseFloat(formula);break;case'date':formula=utils.excelToDate(parseFloat(formula));break;default:break;}this._dataValidation.formulae.push(formula);this._formula=undefined;return true;}default:return true;}}},{key:"tag",get:function get(){return'dataValidations';}}]);return DataValidationsXform;}(BaseXform);module.exports=DataValidationsXform;},{"../../../doc/range":10,"../../../utils/col-cache":17,"../../../utils/under-dash":23,"../../../utils/utils":24,"../base-xform":29}],91:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var DimensionXform=/*#__PURE__*/function(_BaseXform){_inherits(DimensionXform,_BaseXform);var _super=_createSuper(DimensionXform);function DimensionXform(){_classCallCheck(this,DimensionXform);return _super.apply(this,arguments);}_createClass(DimensionXform,[{key:"render",value:function render(xmlStream,model){if(model){xmlStream.leafNode('dimension',{ref:model});}}},{key:"parseOpen",value:function parseOpen(node){if(node.name==='dimension'){this.model=node.attributes.ref;return true;}return false;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'dimension';}}]);return DimensionXform;}(BaseXform);module.exports=DimensionXform;},{"../base-xform":29}],92:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var DrawingXform=/*#__PURE__*/function(_BaseXform){_inherits(DrawingXform,_BaseXform);var _super=_createSuper(DrawingXform);function DrawingXform(){_classCallCheck(this,DrawingXform);return _super.apply(this,arguments);}_createClass(DrawingXform,[{key:"render",value:function render(xmlStream,model){if(model){xmlStream.leafNode(this.tag,{'r:id':model.rId});}}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case this.tag:this.model={rId:node.attributes['r:id']};return true;default:return false;}}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'drawing';}}]);return DrawingXform;}(BaseXform);module.exports=DrawingXform;},{"../base-xform":29}],93:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}/* eslint-disable max-classes-per-file */var CompositeXform=require('../composite-xform');var ConditionalFormattingsExt=require('./cf-ext/conditional-formattings-ext-xform');var ExtXform=/*#__PURE__*/function(_CompositeXform){_inherits(ExtXform,_CompositeXform);var _super=_createSuper(ExtXform);function ExtXform(){var _this;_classCallCheck(this,ExtXform);_this=_super.call(this);_this.map={'x14:conditionalFormattings':_this.conditionalFormattings=new ConditionalFormattingsExt()};return _this;}_createClass(ExtXform,[{key:"hasContent",value:function hasContent(model){return this.conditionalFormattings.hasContent(model.conditionalFormattings);}},{key:"prepare",value:function prepare(model,options){this.conditionalFormattings.prepare(model.conditionalFormattings,options);}},{key:"render",value:function render(xmlStream,model){xmlStream.openNode('ext',{uri:'{78C0D931-6437-407d-A8EE-F0AAD7539E65}','xmlns:x14':'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main'});this.conditionalFormattings.render(xmlStream,model.conditionalFormattings);xmlStream.closeNode();}},{key:"createNewModel",value:function createNewModel(){return{};}},{key:"onParserClose",value:function onParserClose(name,parser){this.model[name]=parser.model;}},{key:"tag",get:function get(){return'ext';}}]);return ExtXform;}(CompositeXform);var ExtLstXform=/*#__PURE__*/function(_CompositeXform2){_inherits(ExtLstXform,_CompositeXform2);var _super2=_createSuper(ExtLstXform);function ExtLstXform(){var _this2;_classCallCheck(this,ExtLstXform);_this2=_super2.call(this);_this2.map={ext:_this2.ext=new ExtXform()};return _this2;}_createClass(ExtLstXform,[{key:"prepare",value:function prepare(model,options){this.ext.prepare(model,options);}},{key:"hasContent",value:function hasContent(model){return this.ext.hasContent(model);}},{key:"render",value:function render(xmlStream,model){if(!this.hasContent(model)){return;}xmlStream.openNode('extLst');this.ext.render(xmlStream,model);xmlStream.closeNode();}},{key:"createNewModel",value:function createNewModel(){return{};}},{key:"onParserClose",value:function onParserClose(name,parser){Object.assign(this.model,parser.model);}},{key:"tag",get:function get(){return'extLst';}}]);return ExtLstXform;}(CompositeXform);module.exports=ExtLstXform;},{"../composite-xform":45,"./cf-ext/conditional-formattings-ext-xform":75}],94:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var HeaderFooterXform=/*#__PURE__*/function(_BaseXform){_inherits(HeaderFooterXform,_BaseXform);var _super=_createSuper(HeaderFooterXform);function HeaderFooterXform(){_classCallCheck(this,HeaderFooterXform);return _super.apply(this,arguments);}_createClass(HeaderFooterXform,[{key:"render",value:function render(xmlStream,model){if(model){xmlStream.addRollback();var createTag=false;xmlStream.openNode('headerFooter');if(model.differentFirst){xmlStream.addAttribute('differentFirst','1');createTag=true;}if(model.differentOddEven){xmlStream.addAttribute('differentOddEven','1');createTag=true;}if(model.oddHeader&&typeof model.oddHeader==='string'){xmlStream.leafNode('oddHeader',null,model.oddHeader);createTag=true;}if(model.oddFooter&&typeof model.oddFooter==='string'){xmlStream.leafNode('oddFooter',null,model.oddFooter);createTag=true;}if(model.evenHeader&&typeof model.evenHeader==='string'){xmlStream.leafNode('evenHeader',null,model.evenHeader);createTag=true;}if(model.evenFooter&&typeof model.evenFooter==='string'){xmlStream.leafNode('evenFooter',null,model.evenFooter);createTag=true;}if(model.firstHeader&&typeof model.firstHeader==='string'){xmlStream.leafNode('firstHeader',null,model.firstHeader);createTag=true;}if(model.firstFooter&&typeof model.firstFooter==='string'){xmlStream.leafNode('firstFooter',null,model.firstFooter);createTag=true;}if(createTag){xmlStream.closeNode();xmlStream.commit();}else{xmlStream.rollback();}}}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case'headerFooter':this.model={};if(node.attributes.differentFirst){this.model.differentFirst=parseInt(node.attributes.differentFirst,0)===1;}if(node.attributes.differentOddEven){this.model.differentOddEven=parseInt(node.attributes.differentOddEven,0)===1;}return true;case'oddHeader':this.currentNode='oddHeader';return true;case'oddFooter':this.currentNode='oddFooter';return true;case'evenHeader':this.currentNode='evenHeader';return true;case'evenFooter':this.currentNode='evenFooter';return true;case'firstHeader':this.currentNode='firstHeader';return true;case'firstFooter':this.currentNode='firstFooter';return true;default:return false;}}},{key:"parseText",value:function parseText(text){switch(this.currentNode){case'oddHeader':this.model.oddHeader=text;break;case'oddFooter':this.model.oddFooter=text;break;case'evenHeader':this.model.evenHeader=text;break;case'evenFooter':this.model.evenFooter=text;break;case'firstHeader':this.model.firstHeader=text;break;case'firstFooter':this.model.firstFooter=text;break;default:break;}}},{key:"parseClose",value:function parseClose(){switch(this.currentNode){case'oddHeader':case'oddFooter':case'evenHeader':case'evenFooter':case'firstHeader':case'firstFooter':this.currentNode=undefined;return true;default:return false;}}},{key:"tag",get:function get(){return'headerFooter';}}]);return HeaderFooterXform;}(BaseXform);module.exports=HeaderFooterXform;},{"../base-xform":29}],95:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var HyperlinkXform=/*#__PURE__*/function(_BaseXform){_inherits(HyperlinkXform,_BaseXform);var _super=_createSuper(HyperlinkXform);function HyperlinkXform(){_classCallCheck(this,HyperlinkXform);return _super.apply(this,arguments);}_createClass(HyperlinkXform,[{key:"render",value:function render(xmlStream,model){xmlStream.leafNode('hyperlink',{ref:model.address,'r:id':model.rId,tooltip:model.tooltip});}},{key:"parseOpen",value:function parseOpen(node){if(node.name==='hyperlink'){this.model={address:node.attributes.ref,rId:node.attributes['r:id'],tooltip:node.attributes.tooltip};return true;}return false;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'hyperlink';}}]);return HyperlinkXform;}(BaseXform);module.exports=HyperlinkXform;},{"../base-xform":29}],96:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var MergeCellXform=/*#__PURE__*/function(_BaseXform){_inherits(MergeCellXform,_BaseXform);var _super=_createSuper(MergeCellXform);function MergeCellXform(){_classCallCheck(this,MergeCellXform);return _super.apply(this,arguments);}_createClass(MergeCellXform,[{key:"render",value:function render(xmlStream,model){xmlStream.leafNode('mergeCell',{ref:model});}},{key:"parseOpen",value:function parseOpen(node){if(node.name==='mergeCell'){this.model=node.attributes.ref;return true;}return false;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'mergeCell';}}]);return MergeCellXform;}(BaseXform);module.exports=MergeCellXform;},{"../base-xform":29}],97:[function(require,module,exports){"use strict";function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}var _=require('../../../utils/under-dash');var Range=require('../../../doc/range');var colCache=require('../../../utils/col-cache');var Enums=require('../../../doc/enums');var Merges=/*#__PURE__*/function(){function Merges(){_classCallCheck(this,Merges);// optional mergeCells is array of ranges (like the xml) |
|
|
this.merges={};}_createClass(Merges,[{key:"add",value:function add(merge){// merge is {address, master} |
|
|
if(this.merges[merge.master]){this.merges[merge.master].expandToAddress(merge.address);}else{var range="".concat(merge.master,":").concat(merge.address);this.merges[merge.master]=new Range(range);}}},{key:"reconcile",value:function reconcile(mergeCells,rows){// reconcile merge list with merge cells |
|
|
_.each(mergeCells,function(merge){var dimensions=colCache.decode(merge);for(var i=dimensions.top;i<=dimensions.bottom;i++){var row=rows[i-1];for(var j=dimensions.left;j<=dimensions.right;j++){var cell=row.cells[j-1];if(!cell){// nulls are not included in document - so if master cell has no value - add a null one here |
|
|
row.cells[j]={type:Enums.ValueType.Null,address:colCache.encodeAddress(i,j)};}else if(cell.type===Enums.ValueType.Merge){cell.master=dimensions.tl;}}}});}},{key:"getMasterAddress",value:function getMasterAddress(address){// if address has been merged, return its master's address. Assumes reconcile has been called |
|
|
var range=this.hash[address];return range&&range.tl;}},{key:"mergeCells",get:function get(){return _.map(this.merges,function(merge){return merge.range;});}}]);return Merges;}();module.exports=Merges;},{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/col-cache":17,"../../../utils/under-dash":23}],98:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var isDefined=function isDefined(attr){return typeof attr!=='undefined';};var OutlinePropertiesXform=/*#__PURE__*/function(_BaseXform){_inherits(OutlinePropertiesXform,_BaseXform);var _super=_createSuper(OutlinePropertiesXform);function OutlinePropertiesXform(){_classCallCheck(this,OutlinePropertiesXform);return _super.apply(this,arguments);}_createClass(OutlinePropertiesXform,[{key:"render",value:function render(xmlStream,model){if(model&&(isDefined(model.summaryBelow)||isDefined(model.summaryRight))){xmlStream.leafNode(this.tag,{summaryBelow:isDefined(model.summaryBelow)?Number(model.summaryBelow):undefined,summaryRight:isDefined(model.summaryRight)?Number(model.summaryRight):undefined});return true;}return false;}},{key:"parseOpen",value:function parseOpen(node){if(node.name===this.tag){this.model={summaryBelow:isDefined(node.attributes.summaryBelow)?Boolean(Number(node.attributes.summaryBelow)):undefined,summaryRight:isDefined(node.attributes.summaryRight)?Boolean(Number(node.attributes.summaryRight)):undefined};return true;}return false;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'outlinePr';}}]);return OutlinePropertiesXform;}(BaseXform);module.exports=OutlinePropertiesXform;},{"../base-xform":29}],99:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var PageBreaksXform=/*#__PURE__*/function(_BaseXform){_inherits(PageBreaksXform,_BaseXform);var _super=_createSuper(PageBreaksXform);function PageBreaksXform(){_classCallCheck(this,PageBreaksXform);return _super.apply(this,arguments);}_createClass(PageBreaksXform,[{key:"render",value:function render(xmlStream,model){xmlStream.leafNode('brk',model);}},{key:"parseOpen",value:function parseOpen(node){if(node.name==='brk'){this.model=node.attributes.ref;return true;}return false;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'brk';}}]);return PageBreaksXform;}(BaseXform);module.exports=PageBreaksXform;},{"../base-xform":29}],100:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var _=require('../../../utils/under-dash');var BaseXform=require('../base-xform');var PageMarginsXform=/*#__PURE__*/function(_BaseXform){_inherits(PageMarginsXform,_BaseXform);var _super=_createSuper(PageMarginsXform);function PageMarginsXform(){_classCallCheck(this,PageMarginsXform);return _super.apply(this,arguments);}_createClass(PageMarginsXform,[{key:"render",value:function render(xmlStream,model){if(model){var attributes={left:model.left,right:model.right,top:model.top,bottom:model.bottom,header:model.header,footer:model.footer};if(_.some(attributes,function(value){return value!==undefined;})){xmlStream.leafNode(this.tag,attributes);}}}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case this.tag:this.model={left:parseFloat(node.attributes.left||0.7),right:parseFloat(node.attributes.right||0.7),top:parseFloat(node.attributes.top||0.75),bottom:parseFloat(node.attributes.bottom||0.75),header:parseFloat(node.attributes.header||0.3),footer:parseFloat(node.attributes.footer||0.3)};return true;default:return false;}}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'pageMargins';}}]);return PageMarginsXform;}(BaseXform);module.exports=PageMarginsXform;},{"../../../utils/under-dash":23,"../base-xform":29}],101:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var PageSetupPropertiesXform=/*#__PURE__*/function(_BaseXform){_inherits(PageSetupPropertiesXform,_BaseXform);var _super=_createSuper(PageSetupPropertiesXform);function PageSetupPropertiesXform(){_classCallCheck(this,PageSetupPropertiesXform);return _super.apply(this,arguments);}_createClass(PageSetupPropertiesXform,[{key:"render",value:function render(xmlStream,model){if(model&&model.fitToPage){xmlStream.leafNode(this.tag,{fitToPage:model.fitToPage?'1':undefined});return true;}return false;}},{key:"parseOpen",value:function parseOpen(node){if(node.name===this.tag){this.model={fitToPage:node.attributes.fitToPage==='1'};return true;}return false;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'pageSetUpPr';}}]);return PageSetupPropertiesXform;}(BaseXform);module.exports=PageSetupPropertiesXform;},{"../base-xform":29}],102:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var _=require('../../../utils/under-dash');var BaseXform=require('../base-xform');function booleanToXml(model){return model?'1':undefined;}function pageOrderToXml(model){switch(model){case'overThenDown':return model;default:return undefined;}}function cellCommentsToXml(model){switch(model){case'atEnd':case'asDisplyed':return model;default:return undefined;}}function errorsToXml(model){switch(model){case'dash':case'blank':case'NA':return model;default:return undefined;}}function pageSizeToModel(value){return value!==undefined?parseInt(value,10):undefined;}var PageSetupXform=/*#__PURE__*/function(_BaseXform){_inherits(PageSetupXform,_BaseXform);var _super=_createSuper(PageSetupXform);function PageSetupXform(){_classCallCheck(this,PageSetupXform);return _super.apply(this,arguments);}_createClass(PageSetupXform,[{key:"render",value:function render(xmlStream,model){if(model){var attributes={paperSize:model.paperSize,orientation:model.orientation,horizontalDpi:model.horizontalDpi,verticalDpi:model.verticalDpi,pageOrder:pageOrderToXml(model.pageOrder),blackAndWhite:booleanToXml(model.blackAndWhite),draft:booleanToXml(model.draft),cellComments:cellCommentsToXml(model.cellComments),errors:errorsToXml(model.errors),scale:model.scale,fitToWidth:model.fitToWidth,fitToHeight:model.fitToHeight,firstPageNumber:model.firstPageNumber,useFirstPageNumber:booleanToXml(model.firstPageNumber),usePrinterDefaults:booleanToXml(model.usePrinterDefaults),copies:model.copies};if(_.some(attributes,function(value){return value!==undefined;})){xmlStream.leafNode(this.tag,attributes);}}}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case this.tag:this.model={paperSize:pageSizeToModel(node.attributes.paperSize),orientation:node.attributes.orientation||'portrait',horizontalDpi:parseInt(node.attributes.horizontalDpi||'4294967295',10),verticalDpi:parseInt(node.attributes.verticalDpi||'4294967295',10),pageOrder:node.attributes.pageOrder||'downThenOver',blackAndWhite:node.attributes.blackAndWhite==='1',draft:node.attributes.draft==='1',cellComments:node.attributes.cellComments||'None',errors:node.attributes.errors||'displayed',scale:parseInt(node.attributes.scale||'100',10),fitToWidth:parseInt(node.attributes.fitToWidth||'1',10),fitToHeight:parseInt(node.attributes.fitToHeight||'1',10),firstPageNumber:parseInt(node.attributes.firstPageNumber||'1',10),useFirstPageNumber:node.attributes.useFirstPageNumber==='1',usePrinterDefaults:node.attributes.usePrinterDefaults==='1',copies:parseInt(node.attributes.copies||'1',10)};return true;default:return false;}}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'pageSetup';}}]);return PageSetupXform;}(BaseXform);module.exports=PageSetupXform;},{"../../../utils/under-dash":23,"../base-xform":29}],103:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var PictureXform=/*#__PURE__*/function(_BaseXform){_inherits(PictureXform,_BaseXform);var _super=_createSuper(PictureXform);function PictureXform(){_classCallCheck(this,PictureXform);return _super.apply(this,arguments);}_createClass(PictureXform,[{key:"render",value:function render(xmlStream,model){if(model){xmlStream.leafNode(this.tag,{'r:id':model.rId});}}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case this.tag:this.model={rId:node.attributes['r:id']};return true;default:return false;}}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'picture';}}]);return PictureXform;}(BaseXform);module.exports=PictureXform;},{"../base-xform":29}],104:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var _=require('../../../utils/under-dash');var BaseXform=require('../base-xform');function booleanToXml(model){return model?'1':undefined;}var PrintOptionsXform=/*#__PURE__*/function(_BaseXform){_inherits(PrintOptionsXform,_BaseXform);var _super=_createSuper(PrintOptionsXform);function PrintOptionsXform(){_classCallCheck(this,PrintOptionsXform);return _super.apply(this,arguments);}_createClass(PrintOptionsXform,[{key:"render",value:function render(xmlStream,model){if(model){var attributes={headings:booleanToXml(model.showRowColHeaders),gridLines:booleanToXml(model.showGridLines),horizontalCentered:booleanToXml(model.horizontalCentered),verticalCentered:booleanToXml(model.verticalCentered)};if(_.some(attributes,function(value){return value!==undefined;})){xmlStream.leafNode(this.tag,attributes);}}}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case this.tag:this.model={showRowColHeaders:node.attributes.headings==='1',showGridLines:node.attributes.gridLines==='1',horizontalCentered:node.attributes.horizontalCentered==='1',verticalCentered:node.attributes.verticalCentered==='1'};return true;default:return false;}}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'printOptions';}}]);return PrintOptionsXform;}(BaseXform);module.exports=PrintOptionsXform;},{"../../../utils/under-dash":23,"../base-xform":29}],105:[function(require,module,exports){'use strict';function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var PageBreaksXform=require('./page-breaks-xform');var ListXform=require('../list-xform');var RowBreaksXform=/*#__PURE__*/function(_ListXform){_inherits(RowBreaksXform,_ListXform);var _super=_createSuper(RowBreaksXform);function RowBreaksXform(){_classCallCheck(this,RowBreaksXform);var options={tag:'rowBreaks',count:true,childXform:new PageBreaksXform()};return _super.call(this,options);}// get tag() { return 'rowBreaks'; } |
|
|
_createClass(RowBreaksXform,[{key:"render",value:function render(xmlStream,model){if(model&&model.length){xmlStream.openNode(this.tag,this.$);if(this.count){xmlStream.addAttribute(this.$count,model.length);xmlStream.addAttribute('manualBreakCount',model.length);}var childXform=this.childXform;model.forEach(function(childModel){childXform.render(xmlStream,childModel);});xmlStream.closeNode();}else if(this.empty){xmlStream.leafNode(this.tag);}}}]);return RowBreaksXform;}(ListXform);module.exports=RowBreaksXform;},{"../list-xform":68,"./page-breaks-xform":99}],106:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var CellXform=require('./cell-xform');var RowXform=/*#__PURE__*/function(_BaseXform){_inherits(RowXform,_BaseXform);var _super=_createSuper(RowXform);function RowXform(options){var _this;_classCallCheck(this,RowXform);_this=_super.call(this);_this.maxItems=options&&options.maxItems;_this.map={c:new CellXform()};return _this;}_createClass(RowXform,[{key:"prepare",value:function prepare(model,options){var styleId=options.styles.addStyleModel(model.style);if(styleId){model.styleId=styleId;}var cellXform=this.map.c;model.cells.forEach(function(cellModel){cellXform.prepare(cellModel,options);});}},{key:"render",value:function render(xmlStream,model,options){xmlStream.openNode('row');xmlStream.addAttribute('r',model.number);if(model.height){xmlStream.addAttribute('ht',model.height);xmlStream.addAttribute('customHeight','1');}if(model.hidden){xmlStream.addAttribute('hidden','1');}if(model.min>0&&model.max>0&&model.min<=model.max){xmlStream.addAttribute('spans',"".concat(model.min,":").concat(model.max));}if(model.styleId){xmlStream.addAttribute('s',model.styleId);xmlStream.addAttribute('customFormat','1');}xmlStream.addAttribute('x14ac:dyDescent','0.25');if(model.outlineLevel){xmlStream.addAttribute('outlineLevel',model.outlineLevel);}if(model.collapsed){xmlStream.addAttribute('collapsed','1');}var cellXform=this.map.c;model.cells.forEach(function(cellModel){cellXform.render(xmlStream,cellModel,options);});xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}if(node.name==='row'){this.numRowsSeen+=1;var spans=node.attributes.spans?node.attributes.spans.split(':').map(function(span){return parseInt(span,10);}):[undefined,undefined];var model=this.model={number:parseInt(node.attributes.r,10),min:spans[0],max:spans[1],cells:[]};if(node.attributes.s){model.styleId=parseInt(node.attributes.s,10);}if(node.attributes.hidden===true||node.attributes.hidden==='true'||node.attributes.hidden===1||node.attributes.hidden==='1'){model.hidden=true;}if(node.attributes.bestFit){model.bestFit=true;}if(node.attributes.ht){model.height=parseFloat(node.attributes.ht);}if(node.attributes.outlineLevel){model.outlineLevel=parseInt(node.attributes.outlineLevel,10);}if(node.attributes.collapsed){model.collapsed=true;}return true;}this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);return true;}return false;}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.model.cells.push(this.parser.model);if(this.maxItems&&this.model.cells.length>this.maxItems){throw new Error("Max column count (".concat(this.maxItems,") exceeded"));}this.parser=undefined;}return true;}return false;}},{key:"reconcile",value:function reconcile(model,options){model.style=model.styleId?options.styles.getStyleModel(model.styleId):{};if(model.styleId!==undefined){model.styleId=undefined;}var cellXform=this.map.c;model.cells.forEach(function(cellModel){cellXform.reconcile(cellModel,options);});}},{key:"tag",get:function get(){return'row';}}]);return RowXform;}(BaseXform);module.exports=RowXform;},{"../base-xform":29,"./cell-xform":70}],107:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var _=require('../../../utils/under-dash');var BaseXform=require('../base-xform');var SheetFormatPropertiesXform=/*#__PURE__*/function(_BaseXform){_inherits(SheetFormatPropertiesXform,_BaseXform);var _super=_createSuper(SheetFormatPropertiesXform);function SheetFormatPropertiesXform(){_classCallCheck(this,SheetFormatPropertiesXform);return _super.apply(this,arguments);}_createClass(SheetFormatPropertiesXform,[{key:"render",value:function render(xmlStream,model){if(model){var attributes={defaultRowHeight:model.defaultRowHeight,outlineLevelRow:model.outlineLevelRow,outlineLevelCol:model.outlineLevelCol,'x14ac:dyDescent':model.dyDescent};if(model.defaultColWidth){attributes.defaultColWidth=model.defaultColWidth;}// default value for 'defaultRowHeight' is 15, this should not be 'custom' |
|
|
if(!model.defaultRowHeight||model.defaultRowHeight!==15){attributes.customHeight='1';}if(_.some(attributes,function(value){return value!==undefined;})){xmlStream.leafNode('sheetFormatPr',attributes);}}}},{key:"parseOpen",value:function parseOpen(node){if(node.name==='sheetFormatPr'){this.model={defaultRowHeight:parseFloat(node.attributes.defaultRowHeight||'0'),dyDescent:parseFloat(node.attributes['x14ac:dyDescent']||'0'),outlineLevelRow:parseInt(node.attributes.outlineLevelRow||'0',10),outlineLevelCol:parseInt(node.attributes.outlineLevelCol||'0',10)};if(node.attributes.defaultColWidth){this.model.defaultColWidth=parseFloat(node.attributes.defaultColWidth);}return true;}return false;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'sheetFormatPr';}}]);return SheetFormatPropertiesXform;}(BaseXform);module.exports=SheetFormatPropertiesXform;},{"../../../utils/under-dash":23,"../base-xform":29}],108:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var ColorXform=require('../style/color-xform');var PageSetupPropertiesXform=require('./page-setup-properties-xform');var OutlinePropertiesXform=require('./outline-properties-xform');var SheetPropertiesXform=/*#__PURE__*/function(_BaseXform){_inherits(SheetPropertiesXform,_BaseXform);var _super=_createSuper(SheetPropertiesXform);function SheetPropertiesXform(){var _this;_classCallCheck(this,SheetPropertiesXform);_this=_super.call(this);_this.map={tabColor:new ColorXform('tabColor'),pageSetUpPr:new PageSetupPropertiesXform(),outlinePr:new OutlinePropertiesXform()};return _this;}_createClass(SheetPropertiesXform,[{key:"render",value:function render(xmlStream,model){if(model){xmlStream.addRollback();xmlStream.openNode('sheetPr');var inner=false;inner=this.map.tabColor.render(xmlStream,model.tabColor)||inner;inner=this.map.pageSetUpPr.render(xmlStream,model.pageSetup)||inner;inner=this.map.outlinePr.render(xmlStream,model.outlineProperties)||inner;if(inner){xmlStream.closeNode();xmlStream.commit();}else{xmlStream.rollback();}}}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}if(node.name===this.tag){this.reset();return true;}if(this.map[node.name]){this.parser=this.map[node.name];this.parser.parseOpen(node);return true;}return false;}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);return true;}return false;}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.parser=undefined;}return true;}if(this.map.tabColor.model||this.map.pageSetUpPr.model||this.map.outlinePr.model){this.model={};if(this.map.tabColor.model){this.model.tabColor=this.map.tabColor.model;}if(this.map.pageSetUpPr.model){this.model.pageSetup=this.map.pageSetUpPr.model;}if(this.map.outlinePr.model){this.model.outlineProperties=this.map.outlinePr.model;}}else{this.model=null;}return false;}},{key:"tag",get:function get(){return'sheetPr';}}]);return SheetPropertiesXform;}(BaseXform);module.exports=SheetPropertiesXform;},{"../base-xform":29,"../style/color-xform":125,"./outline-properties-xform":98,"./page-setup-properties-xform":101}],109:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var _=require('../../../utils/under-dash');var BaseXform=require('../base-xform');function booleanToXml(model,value){return model?value:undefined;}function xmlToBoolean(value,equals){return value===equals?true:undefined;}var SheetProtectionXform=/*#__PURE__*/function(_BaseXform){_inherits(SheetProtectionXform,_BaseXform);var _super=_createSuper(SheetProtectionXform);function SheetProtectionXform(){_classCallCheck(this,SheetProtectionXform);return _super.apply(this,arguments);}_createClass(SheetProtectionXform,[{key:"render",value:function render(xmlStream,model){if(model){var attributes={sheet:booleanToXml(model.sheet,'1'),selectLockedCells:model.selectLockedCells===false?'1':undefined,selectUnlockedCells:model.selectUnlockedCells===false?'1':undefined,formatCells:booleanToXml(model.formatCells,'0'),formatColumns:booleanToXml(model.formatColumns,'0'),formatRows:booleanToXml(model.formatRows,'0'),insertColumns:booleanToXml(model.insertColumns,'0'),insertRows:booleanToXml(model.insertRows,'0'),insertHyperlinks:booleanToXml(model.insertHyperlinks,'0'),deleteColumns:booleanToXml(model.deleteColumns,'0'),deleteRows:booleanToXml(model.deleteRows,'0'),sort:booleanToXml(model.sort,'0'),autoFilter:booleanToXml(model.autoFilter,'0'),pivotTables:booleanToXml(model.pivotTables,'0')};if(model.sheet){attributes.algorithmName=model.algorithmName;attributes.hashValue=model.hashValue;attributes.saltValue=model.saltValue;attributes.spinCount=model.spinCount;attributes.objects=booleanToXml(model.objects===false,'1');attributes.scenarios=booleanToXml(model.scenarios===false,'1');}if(_.some(attributes,function(value){return value!==undefined;})){xmlStream.leafNode(this.tag,attributes);}}}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case this.tag:this.model={sheet:xmlToBoolean(node.attributes.sheet,'1'),objects:node.attributes.objects==='1'?false:undefined,scenarios:node.attributes.scenarios==='1'?false:undefined,selectLockedCells:node.attributes.selectLockedCells==='1'?false:undefined,selectUnlockedCells:node.attributes.selectUnlockedCells==='1'?false:undefined,formatCells:xmlToBoolean(node.attributes.formatCells,'0'),formatColumns:xmlToBoolean(node.attributes.formatColumns,'0'),formatRows:xmlToBoolean(node.attributes.formatRows,'0'),insertColumns:xmlToBoolean(node.attributes.insertColumns,'0'),insertRows:xmlToBoolean(node.attributes.insertRows,'0'),insertHyperlinks:xmlToBoolean(node.attributes.insertHyperlinks,'0'),deleteColumns:xmlToBoolean(node.attributes.deleteColumns,'0'),deleteRows:xmlToBoolean(node.attributes.deleteRows,'0'),sort:xmlToBoolean(node.attributes.sort,'0'),autoFilter:xmlToBoolean(node.attributes.autoFilter,'0'),pivotTables:xmlToBoolean(node.attributes.pivotTables,'0')};if(node.attributes.algorithmName){this.model.algorithmName=node.attributes.algorithmName;this.model.hashValue=node.attributes.hashValue;this.model.saltValue=node.attributes.saltValue;this.model.spinCount=parseInt(node.attributes.spinCount,10);}return true;default:return false;}}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'sheetProtection';}}]);return SheetProtectionXform;}(BaseXform);module.exports=SheetProtectionXform;},{"../../../utils/under-dash":23,"../base-xform":29}],110:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var colCache=require('../../../utils/col-cache');var BaseXform=require('../base-xform');var VIEW_STATES={frozen:'frozen',frozenSplit:'frozen',split:'split'};var SheetViewXform=/*#__PURE__*/function(_BaseXform){_inherits(SheetViewXform,_BaseXform);var _super=_createSuper(SheetViewXform);function SheetViewXform(){_classCallCheck(this,SheetViewXform);return _super.apply(this,arguments);}_createClass(SheetViewXform,[{key:"prepare",value:function prepare(model){switch(model.state){case'frozen':case'split':break;default:model.state='normal';break;}}},{key:"render",value:function render(xmlStream,model){xmlStream.openNode('sheetView',{workbookViewId:model.workbookViewId||0});var add=function add(name,value,included){if(included){xmlStream.addAttribute(name,value);}};add('rightToLeft','1',model.rightToLeft===true);add('tabSelected','1',model.tabSelected);add('showRuler','0',model.showRuler===false);add('showRowColHeaders','0',model.showRowColHeaders===false);add('showGridLines','0',model.showGridLines===false);add('zoomScale',model.zoomScale,model.zoomScale);add('zoomScaleNormal',model.zoomScaleNormal,model.zoomScaleNormal);add('view',model.style,model.style);var topLeftCell;var xSplit;var ySplit;var activePane;switch(model.state){case'frozen':xSplit=model.xSplit||0;ySplit=model.ySplit||0;topLeftCell=model.topLeftCell||colCache.getAddress(ySplit+1,xSplit+1).address;activePane=model.xSplit&&model.ySplit&&'bottomRight'||model.xSplit&&'topRight'||'bottomLeft';xmlStream.leafNode('pane',{xSplit:model.xSplit||undefined,ySplit:model.ySplit||undefined,topLeftCell:topLeftCell,activePane:activePane,state:'frozen'});xmlStream.leafNode('selection',{pane:activePane,activeCell:model.activeCell,sqref:model.activeCell});break;case'split':if(model.activePane==='topLeft'){model.activePane=undefined;}xmlStream.leafNode('pane',{xSplit:model.xSplit||undefined,ySplit:model.ySplit||undefined,topLeftCell:model.topLeftCell,activePane:model.activePane});xmlStream.leafNode('selection',{pane:model.activePane,activeCell:model.activeCell,sqref:model.activeCell});break;case'normal':if(model.activeCell){xmlStream.leafNode('selection',{activeCell:model.activeCell,sqref:model.activeCell});}break;default:break;}xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case'sheetView':this.sheetView={workbookViewId:parseInt(node.attributes.workbookViewId,10),rightToLeft:node.attributes.rightToLeft==='1',tabSelected:node.attributes.tabSelected==='1',showRuler:!(node.attributes.showRuler==='0'),showRowColHeaders:!(node.attributes.showRowColHeaders==='0'),showGridLines:!(node.attributes.showGridLines==='0'),zoomScale:parseInt(node.attributes.zoomScale||'100',10),zoomScaleNormal:parseInt(node.attributes.zoomScaleNormal||'100',10),style:node.attributes.view};this.pane=undefined;this.selections={};return true;case'pane':this.pane={xSplit:parseInt(node.attributes.xSplit||'0',10),ySplit:parseInt(node.attributes.ySplit||'0',10),topLeftCell:node.attributes.topLeftCell,activePane:node.attributes.activePane||'topLeft',state:node.attributes.state};return true;case'selection':{var name=node.attributes.pane||'topLeft';this.selections[name]={pane:name,activeCell:node.attributes.activeCell};return true;}default:return false;}}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(name){var model;var selection;switch(name){case'sheetView':if(this.sheetView&&this.pane){model=this.model={workbookViewId:this.sheetView.workbookViewId,rightToLeft:this.sheetView.rightToLeft,state:VIEW_STATES[this.pane.state]||'split',// split is default |
|
|
xSplit:this.pane.xSplit,ySplit:this.pane.ySplit,topLeftCell:this.pane.topLeftCell,showRuler:this.sheetView.showRuler,showRowColHeaders:this.sheetView.showRowColHeaders,showGridLines:this.sheetView.showGridLines,zoomScale:this.sheetView.zoomScale,zoomScaleNormal:this.sheetView.zoomScaleNormal};if(this.model.state==='split'){model.activePane=this.pane.activePane;}selection=this.selections[this.pane.activePane];if(selection&&selection.activeCell){model.activeCell=selection.activeCell;}if(this.sheetView.style){model.style=this.sheetView.style;}}else{model=this.model={workbookViewId:this.sheetView.workbookViewId,rightToLeft:this.sheetView.rightToLeft,state:'normal',showRuler:this.sheetView.showRuler,showRowColHeaders:this.sheetView.showRowColHeaders,showGridLines:this.sheetView.showGridLines,zoomScale:this.sheetView.zoomScale,zoomScaleNormal:this.sheetView.zoomScaleNormal};selection=this.selections.topLeft;if(selection&&selection.activeCell){model.activeCell=selection.activeCell;}if(this.sheetView.style){model.style=this.sheetView.style;}}return false;default:return true;}}},{key:"reconcile",value:function reconcile(){}},{key:"tag",get:function get(){return'sheetView';}}]);return SheetViewXform;}(BaseXform);module.exports=SheetViewXform;},{"../../../utils/col-cache":17,"../base-xform":29}],111:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var TablePartXform=/*#__PURE__*/function(_BaseXform){_inherits(TablePartXform,_BaseXform);var _super=_createSuper(TablePartXform);function TablePartXform(){_classCallCheck(this,TablePartXform);return _super.apply(this,arguments);}_createClass(TablePartXform,[{key:"render",value:function render(xmlStream,model){if(model){xmlStream.leafNode(this.tag,{'r:id':model.rId});}}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case this.tag:this.model={rId:node.attributes['r:id']};return true;default:return false;}}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'tablePart';}}]);return TablePartXform;}(BaseXform);module.exports=TablePartXform;},{"../base-xform":29}],112:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var _=require('../../../utils/under-dash');var colCache=require('../../../utils/col-cache');var XmlStream=require('../../../utils/xml-stream');var RelType=require('../../rel-type');var Merges=require('./merges');var BaseXform=require('../base-xform');var ListXform=require('../list-xform');var RowXform=require('./row-xform');var ColXform=require('./col-xform');var DimensionXform=require('./dimension-xform');var HyperlinkXform=require('./hyperlink-xform');var MergeCellXform=require('./merge-cell-xform');var DataValidationsXform=require('./data-validations-xform');var SheetPropertiesXform=require('./sheet-properties-xform');var SheetFormatPropertiesXform=require('./sheet-format-properties-xform');var SheetViewXform=require('./sheet-view-xform');var SheetProtectionXform=require('./sheet-protection-xform');var PageMarginsXform=require('./page-margins-xform');var PageSetupXform=require('./page-setup-xform');var PrintOptionsXform=require('./print-options-xform');var AutoFilterXform=require('./auto-filter-xform');var PictureXform=require('./picture-xform');var DrawingXform=require('./drawing-xform');var TablePartXform=require('./table-part-xform');var RowBreaksXform=require('./row-breaks-xform');var HeaderFooterXform=require('./header-footer-xform');var ConditionalFormattingsXform=require('./cf/conditional-formattings-xform');var ExtListXform=require('./ext-lst-xform');var mergeRule=function mergeRule(rule,extRule){Object.keys(extRule).forEach(function(key){var value=rule[key];var extValue=extRule[key];if(value===undefined&&extValue!==undefined){rule[key]=extValue;}});};var mergeConditionalFormattings=function mergeConditionalFormattings(model,extModel){// conditional formattings are rendered in worksheet.conditionalFormatting and also in |
|
|
// worksheet.extLst.ext.x14:conditionalFormattings |
|
|
// some (e.g. dataBar) are even spread across both! |
|
|
if(!extModel||!extModel.length){return model;}if(!model||!model.length){return extModel;}// index model rules by x14Id |
|
|
var cfMap={};var ruleMap={};model.forEach(function(cf){cfMap[cf.ref]=cf;cf.rules.forEach(function(rule){var x14Id=rule.x14Id;if(x14Id){ruleMap[x14Id]=rule;}});});extModel.forEach(function(extCf){extCf.rules.forEach(function(extRule){var rule=ruleMap[extRule.x14Id];if(rule){// merge with matching rule |
|
|
mergeRule(rule,extRule);}else if(cfMap[extCf.ref]){// reuse existing cf ref |
|
|
cfMap[extCf.ref].rules.push(extRule);}else{// create new cf |
|
|
model.push({ref:extCf.ref,rules:[extRule]});}});});// need to cope with rules in extModel that don't exist in model |
|
|
return model;};var WorkSheetXform=/*#__PURE__*/function(_BaseXform){_inherits(WorkSheetXform,_BaseXform);var _super=_createSuper(WorkSheetXform);function WorkSheetXform(options){var _this;_classCallCheck(this,WorkSheetXform);_this=_super.call(this);var _ref=options||{},maxRows=_ref.maxRows,maxCols=_ref.maxCols;_this.map={sheetPr:new SheetPropertiesXform(),dimension:new DimensionXform(),sheetViews:new ListXform({tag:'sheetViews',count:false,childXform:new SheetViewXform()}),sheetFormatPr:new SheetFormatPropertiesXform(),cols:new ListXform({tag:'cols',count:false,childXform:new ColXform()}),sheetData:new ListXform({tag:'sheetData',count:false,empty:true,childXform:new RowXform({maxItems:maxCols}),maxItems:maxRows}),autoFilter:new AutoFilterXform(),mergeCells:new ListXform({tag:'mergeCells',count:true,childXform:new MergeCellXform()}),rowBreaks:new RowBreaksXform(),hyperlinks:new ListXform({tag:'hyperlinks',count:false,childXform:new HyperlinkXform()}),pageMargins:new PageMarginsXform(),dataValidations:new DataValidationsXform(),pageSetup:new PageSetupXform(),headerFooter:new HeaderFooterXform(),printOptions:new PrintOptionsXform(),picture:new PictureXform(),drawing:new DrawingXform(),sheetProtection:new SheetProtectionXform(),tableParts:new ListXform({tag:'tableParts',count:true,childXform:new TablePartXform()}),conditionalFormatting:new ConditionalFormattingsXform(),extLst:new ExtListXform()};return _this;}_createClass(WorkSheetXform,[{key:"prepare",value:function prepare(model,options){var _this2=this;options.merges=new Merges();model.hyperlinks=options.hyperlinks=[];model.comments=options.comments=[];options.formulae={};options.siFormulae=0;this.map.cols.prepare(model.cols,options);this.map.sheetData.prepare(model.rows,options);this.map.conditionalFormatting.prepare(model.conditionalFormattings,options);model.mergeCells=options.merges.mergeCells;// prepare relationships |
|
|
var rels=model.rels=[];function nextRid(r){return"rId".concat(r.length+1);}model.hyperlinks.forEach(function(hyperlink){var rId=nextRid(rels);hyperlink.rId=rId;rels.push({Id:rId,Type:RelType.Hyperlink,Target:hyperlink.target,TargetMode:'External'});});// prepare comment relationships |
|
|
if(model.comments.length>0){var comment={Id:nextRid(rels),Type:RelType.Comments,Target:"../comments".concat(model.id,".xml")};rels.push(comment);var vmlDrawing={Id:nextRid(rels),Type:RelType.VmlDrawing,Target:"../drawings/vmlDrawing".concat(model.id,".vml")};rels.push(vmlDrawing);model.comments.forEach(function(item){item.refAddress=colCache.decodeAddress(item.ref);});options.commentRefs.push({commentName:"comments".concat(model.id),vmlDrawing:"vmlDrawing".concat(model.id)});}var drawingRelsHash=[];var bookImage;model.media.forEach(function(medium){if(medium.type==='background'){var rId=nextRid(rels);bookImage=options.media[medium.imageId];rels.push({Id:rId,Type:RelType.Image,Target:"../media/".concat(bookImage.name,".").concat(bookImage.extension)});model.background={rId:rId};model.image=options.media[medium.imageId];}else if(medium.type==='image'){var drawing=model.drawing;bookImage=options.media[medium.imageId];if(!drawing){drawing=model.drawing={rId:nextRid(rels),name:"drawing".concat(++options.drawingsCount),anchors:[],rels:[]};options.drawings.push(drawing);rels.push({Id:drawing.rId,Type:'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing',Target:"../drawings/".concat(drawing.name,".xml")});}var rIdImage=_this2.preImageId===medium.imageId?drawingRelsHash[medium.imageId]:drawingRelsHash[drawing.rels.length];if(!rIdImage){rIdImage=nextRid(drawing.rels);drawingRelsHash[drawing.rels.length]=rIdImage;drawing.rels.push({Id:rIdImage,Type:'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',Target:"../media/".concat(bookImage.name,".").concat(bookImage.extension)});}var anchor={picture:{rId:rIdImage},range:medium.range};if(medium.hyperlinks&&medium.hyperlinks.hyperlink){var rIdHyperLink=nextRid(drawing.rels);drawingRelsHash[drawing.rels.length]=rIdHyperLink;anchor.picture.hyperlinks={tooltip:medium.hyperlinks.tooltip,rId:rIdHyperLink};drawing.rels.push({Id:rIdHyperLink,Type:RelType.Hyperlink,Target:medium.hyperlinks.hyperlink,TargetMode:'External'});}_this2.preImageId=medium.imageId;drawing.anchors.push(anchor);}});// prepare tables |
|
|
model.tables.forEach(function(table){// relationships |
|
|
var rId=nextRid(rels);table.rId=rId;rels.push({Id:rId,Type:RelType.Table,Target:"../tables/".concat(table.target)});// dynamic styles |
|
|
table.columns.forEach(function(column){var style=column.style;if(style){column.dxfId=options.styles.addDxfStyle(style);}});});// prepare ext items |
|
|
this.map.extLst.prepare(model,options);}},{key:"render",value:function render(xmlStream,model){xmlStream.openXml(XmlStream.StdDocAttributes);xmlStream.openNode('worksheet',WorkSheetXform.WORKSHEET_ATTRIBUTES);var sheetFormatPropertiesModel=model.properties?{defaultRowHeight:model.properties.defaultRowHeight,dyDescent:model.properties.dyDescent,outlineLevelCol:model.properties.outlineLevelCol,outlineLevelRow:model.properties.outlineLevelRow}:undefined;if(model.properties&&model.properties.defaultColWidth){sheetFormatPropertiesModel.defaultColWidth=model.properties.defaultColWidth;}var sheetPropertiesModel={outlineProperties:model.properties&&model.properties.outlineProperties,tabColor:model.properties&&model.properties.tabColor,pageSetup:model.pageSetup&&model.pageSetup.fitToPage?{fitToPage:model.pageSetup.fitToPage}:undefined};var pageMarginsModel=model.pageSetup&&model.pageSetup.margins;var printOptionsModel={showRowColHeaders:model.pageSetup&&model.pageSetup.showRowColHeaders,showGridLines:model.pageSetup&&model.pageSetup.showGridLines,horizontalCentered:model.pageSetup&&model.pageSetup.horizontalCentered,verticalCentered:model.pageSetup&&model.pageSetup.verticalCentered};var sheetProtectionModel=model.sheetProtection;this.map.sheetPr.render(xmlStream,sheetPropertiesModel);this.map.dimension.render(xmlStream,model.dimensions);this.map.sheetViews.render(xmlStream,model.views);this.map.sheetFormatPr.render(xmlStream,sheetFormatPropertiesModel);this.map.cols.render(xmlStream,model.cols);this.map.sheetData.render(xmlStream,model.rows);this.map.sheetProtection.render(xmlStream,sheetProtectionModel);// Note: must be after sheetData and before autoFilter |
|
|
this.map.autoFilter.render(xmlStream,model.autoFilter);this.map.mergeCells.render(xmlStream,model.mergeCells);this.map.conditionalFormatting.render(xmlStream,model.conditionalFormattings);// Note: must be before dataValidations |
|
|
this.map.dataValidations.render(xmlStream,model.dataValidations);// For some reason hyperlinks have to be after the data validations |
|
|
this.map.hyperlinks.render(xmlStream,model.hyperlinks);this.map.printOptions.render(xmlStream,printOptionsModel);// Note: must be before pageMargins |
|
|
this.map.pageMargins.render(xmlStream,pageMarginsModel);this.map.pageSetup.render(xmlStream,model.pageSetup);this.map.headerFooter.render(xmlStream,model.headerFooter);this.map.rowBreaks.render(xmlStream,model.rowBreaks);this.map.drawing.render(xmlStream,model.drawing);// Note: must be after rowBreaks |
|
|
this.map.picture.render(xmlStream,model.background);// Note: must be after drawing |
|
|
this.map.tableParts.render(xmlStream,model.tables);this.map.extLst.render(xmlStream,model);if(model.rels){// add a <legacyDrawing /> node for each comment |
|
|
model.rels.forEach(function(rel){if(rel.Type===RelType.VmlDrawing){xmlStream.leafNode('legacyDrawing',{'r:id':rel.Id});}});}xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}if(node.name==='worksheet'){_.each(this.map,function(xform){xform.reset();});return true;}this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);}return true;}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.parser=undefined;}return true;}switch(name){case'worksheet':{var properties=this.map.sheetFormatPr.model||{};if(this.map.sheetPr.model&&this.map.sheetPr.model.tabColor){properties.tabColor=this.map.sheetPr.model.tabColor;}if(this.map.sheetPr.model&&this.map.sheetPr.model.outlineProperties){properties.outlineProperties=this.map.sheetPr.model.outlineProperties;}var sheetProperties={fitToPage:this.map.sheetPr.model&&this.map.sheetPr.model.pageSetup&&this.map.sheetPr.model.pageSetup.fitToPage||false,margins:this.map.pageMargins.model};var pageSetup=Object.assign(sheetProperties,this.map.pageSetup.model,this.map.printOptions.model);var conditionalFormattings=mergeConditionalFormattings(this.map.conditionalFormatting.model,this.map.extLst.model&&this.map.extLst.model['x14:conditionalFormattings']);this.model={dimensions:this.map.dimension.model,cols:this.map.cols.model,rows:this.map.sheetData.model,mergeCells:this.map.mergeCells.model,hyperlinks:this.map.hyperlinks.model,dataValidations:this.map.dataValidations.model,properties:properties,views:this.map.sheetViews.model,pageSetup:pageSetup,headerFooter:this.map.headerFooter.model,background:this.map.picture.model,drawing:this.map.drawing.model,tables:this.map.tableParts.model,conditionalFormattings:conditionalFormattings};if(this.map.autoFilter.model){this.model.autoFilter=this.map.autoFilter.model;}if(this.map.sheetProtection.model){this.model.sheetProtection=this.map.sheetProtection.model;}return false;}default:// not quite sure how we get here! |
|
|
return true;}}},{key:"reconcile",value:function reconcile(model,options){// options.merges = new Merges(); |
|
|
// options.merges.reconcile(model.mergeCells, model.rows); |
|
|
var rels=(model.relationships||[]).reduce(function(h,rel){h[rel.Id]=rel;if(rel.Type===RelType.Comments){model.comments=options.comments[rel.Target].comments;}if(rel.Type===RelType.VmlDrawing&&model.comments&&model.comments.length){var vmlComment=options.vmlDrawings[rel.Target].comments;model.comments.forEach(function(comment,index){comment.note=Object.assign({},comment.note,vmlComment[index]);});}return h;},{});options.commentsMap=(model.comments||[]).reduce(function(h,comment){if(comment.ref){h[comment.ref]=comment;}return h;},{});options.hyperlinkMap=(model.hyperlinks||[]).reduce(function(h,hyperlink){if(hyperlink.rId){h[hyperlink.address]=rels[hyperlink.rId].Target;}return h;},{});options.formulae={};// compact the rows and cells |
|
|
model.rows=model.rows&&model.rows.filter(Boolean)||[];model.rows.forEach(function(row){row.cells=row.cells&&row.cells.filter(Boolean)||[];});this.map.cols.reconcile(model.cols,options);this.map.sheetData.reconcile(model.rows,options);this.map.conditionalFormatting.reconcile(model.conditionalFormattings,options);model.media=[];if(model.drawing){var drawingRel=rels[model.drawing.rId];var match=drawingRel.Target.match(/\/drawings\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/);if(match){var drawingName=match[1];var drawing=options.drawings[drawingName];drawing.anchors.forEach(function(anchor){if(anchor.medium){var image={type:'image',imageId:anchor.medium.index,range:anchor.range,hyperlinks:anchor.picture.hyperlinks};model.media.push(image);}});}}var backgroundRel=model.background&&rels[model.background.rId];if(backgroundRel){var target=backgroundRel.Target.split('/media/')[1];var imageId=options.mediaIndex&&options.mediaIndex[target];if(imageId!==undefined){model.media.push({type:'background',imageId:imageId});}}model.tables=(model.tables||[]).map(function(tablePart){var rel=rels[tablePart.rId];return options.tables[rel.Target];});delete model.relationships;delete model.hyperlinks;delete model.comments;}}]);return WorkSheetXform;}(BaseXform);WorkSheetXform.WORKSHEET_ATTRIBUTES={xmlns:'http://schemas.openxmlformats.org/spreadsheetml/2006/main','xmlns:r':'http://schemas.openxmlformats.org/officeDocument/2006/relationships','xmlns:mc':'http://schemas.openxmlformats.org/markup-compatibility/2006','mc:Ignorable':'x14ac','xmlns:x14ac':'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac'};module.exports=WorkSheetXform;},{"../../../utils/col-cache":17,"../../../utils/under-dash":23,"../../../utils/xml-stream":25,"../../rel-type":28,"../base-xform":29,"../list-xform":68,"./auto-filter-xform":69,"./cf/conditional-formattings-xform":84,"./col-xform":89,"./data-validations-xform":90,"./dimension-xform":91,"./drawing-xform":92,"./ext-lst-xform":93,"./header-footer-xform":94,"./hyperlink-xform":95,"./merge-cell-xform":96,"./merges":97,"./page-margins-xform":100,"./page-setup-xform":102,"./picture-xform":103,"./print-options-xform":104,"./row-breaks-xform":105,"./row-xform":106,"./sheet-format-properties-xform":107,"./sheet-properties-xform":108,"./sheet-protection-xform":109,"./sheet-view-xform":110,"./table-part-xform":111}],113:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var BooleanXform=/*#__PURE__*/function(_BaseXform){_inherits(BooleanXform,_BaseXform);var _super=_createSuper(BooleanXform);function BooleanXform(options){var _this;_classCallCheck(this,BooleanXform);_this=_super.call(this);_this.tag=options.tag;_this.attr=options.attr;return _this;}_createClass(BooleanXform,[{key:"render",value:function render(xmlStream,model){if(model){xmlStream.openNode(this.tag);xmlStream.closeNode();}}},{key:"parseOpen",value:function parseOpen(node){if(node.name===this.tag){this.model=true;}}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}}]);return BooleanXform;}(BaseXform);module.exports=BooleanXform;},{"../base-xform":29}],114:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var DateXform=/*#__PURE__*/function(_BaseXform){_inherits(DateXform,_BaseXform);var _super=_createSuper(DateXform);function DateXform(options){var _this;_classCallCheck(this,DateXform);_this=_super.call(this);_this.tag=options.tag;_this.attr=options.attr;_this.attrs=options.attrs;_this._format=options.format||function(dt){try{if(Number.isNaN(dt.getTime()))return'';return dt.toISOString();}catch(e){return'';}};_this._parse=options.parse||function(str){return new Date(str);};return _this;}_createClass(DateXform,[{key:"render",value:function render(xmlStream,model){if(model){xmlStream.openNode(this.tag);if(this.attrs){xmlStream.addAttributes(this.attrs);}if(this.attr){xmlStream.addAttribute(this.attr,this._format(model));}else{xmlStream.writeText(this._format(model));}xmlStream.closeNode();}}},{key:"parseOpen",value:function parseOpen(node){if(node.name===this.tag){if(this.attr){this.model=this._parse(node.attributes[this.attr]);}else{this.text=[];}}}},{key:"parseText",value:function parseText(text){if(!this.attr){this.text.push(text);}}},{key:"parseClose",value:function parseClose(){if(!this.attr){this.model=this._parse(this.text.join(''));}return false;}}]);return DateXform;}(BaseXform);module.exports=DateXform;},{"../base-xform":29}],115:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var IntegerXform=/*#__PURE__*/function(_BaseXform){_inherits(IntegerXform,_BaseXform);var _super=_createSuper(IntegerXform);function IntegerXform(options){var _this;_classCallCheck(this,IntegerXform);_this=_super.call(this);_this.tag=options.tag;_this.attr=options.attr;_this.attrs=options.attrs;// option to render zero |
|
|
_this.zero=options.zero;return _this;}_createClass(IntegerXform,[{key:"render",value:function render(xmlStream,model){// int is different to float in that zero is not rendered |
|
|
if(model||this.zero){xmlStream.openNode(this.tag);if(this.attrs){xmlStream.addAttributes(this.attrs);}if(this.attr){xmlStream.addAttribute(this.attr,model);}else{xmlStream.writeText(model);}xmlStream.closeNode();}}},{key:"parseOpen",value:function parseOpen(node){if(node.name===this.tag){if(this.attr){this.model=parseInt(node.attributes[this.attr],10);}else{this.text=[];}return true;}return false;}},{key:"parseText",value:function parseText(text){if(!this.attr){this.text.push(text);}}},{key:"parseClose",value:function parseClose(){if(!this.attr){this.model=parseInt(this.text.join('')||0,10);}return false;}}]);return IntegerXform;}(BaseXform);module.exports=IntegerXform;},{"../base-xform":29}],116:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var StringXform=/*#__PURE__*/function(_BaseXform){_inherits(StringXform,_BaseXform);var _super=_createSuper(StringXform);function StringXform(options){var _this;_classCallCheck(this,StringXform);_this=_super.call(this);_this.tag=options.tag;_this.attr=options.attr;_this.attrs=options.attrs;return _this;}_createClass(StringXform,[{key:"render",value:function render(xmlStream,model){if(model!==undefined){xmlStream.openNode(this.tag);if(this.attrs){xmlStream.addAttributes(this.attrs);}if(this.attr){xmlStream.addAttribute(this.attr,model);}else{xmlStream.writeText(model);}xmlStream.closeNode();}}},{key:"parseOpen",value:function parseOpen(node){if(node.name===this.tag){if(this.attr){this.model=node.attributes[this.attr];}else{this.text=[];}}}},{key:"parseText",value:function parseText(text){if(!this.attr){this.text.push(text);}}},{key:"parseClose",value:function parseClose(){if(!this.attr){this.model=this.text.join('');}return false;}}]);return StringXform;}(BaseXform);module.exports=StringXform;},{"../base-xform":29}],117:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('./base-xform');var XmlStream=require('../../utils/xml-stream');// const model = { |
|
|
// tag: 'name', |
|
|
// $: {attr: 'value'}, |
|
|
// c: [ |
|
|
// { tag: 'child' } |
|
|
// ], |
|
|
// t: 'some text' |
|
|
// }; |
|
|
function build(xmlStream,model){xmlStream.openNode(model.tag,model.$);if(model.c){model.c.forEach(function(child){build(xmlStream,child);});}if(model.t){xmlStream.writeText(model.t);}xmlStream.closeNode();}var StaticXform=/*#__PURE__*/function(_BaseXform){_inherits(StaticXform,_BaseXform);var _super=_createSuper(StaticXform);function StaticXform(model){var _this;_classCallCheck(this,StaticXform);_this=_super.call(this);// This class is an optimisation for static (unimportant and unchanging) xml |
|
|
// It is stateless - apart from its static model and so can be used as a singleton |
|
|
// Being stateless - it will only track entry to and exit from it's root xml tag during parsing and nothing else |
|
|
// Known issues: |
|
|
// since stateless - parseOpen always returns true. Parent xform must know when to start using this xform |
|
|
// if the root tag is recursive, the parsing will behave unpredictably |
|
|
_this._model=model;return _this;}_createClass(StaticXform,[{key:"render",value:function render(xmlStream){if(!this._xml){var stream=new XmlStream();build(stream,this._model);this._xml=stream.xml;}xmlStream.writeXml(this._xml);}},{key:"parseOpen",value:function parseOpen(){return true;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(name){switch(name){case this._model.tag:return false;default:return true;}}}]);return StaticXform;}(BaseXform);module.exports=StaticXform;},{"../../utils/xml-stream":25,"./base-xform":29}],118:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var TextXform=require('./text-xform');var RichTextXform=require('./rich-text-xform');var BaseXform=require('../base-xform');// <rPh sb="0" eb="1"> |
|
|
// <t>(its pronounciation in KATAKANA)</t> |
|
|
// </rPh> |
|
|
var PhoneticTextXform=/*#__PURE__*/function(_BaseXform){_inherits(PhoneticTextXform,_BaseXform);var _super=_createSuper(PhoneticTextXform);function PhoneticTextXform(){var _this;_classCallCheck(this,PhoneticTextXform);_this=_super.call(this);_this.map={r:new RichTextXform(),t:new TextXform()};return _this;}_createClass(PhoneticTextXform,[{key:"render",value:function render(xmlStream,model){xmlStream.openNode(this.tag,{sb:model.sb||0,eb:model.eb||0});if(model&&model.hasOwnProperty('richText')&&model.richText){var r=this.map.r;model.richText.forEach(function(text){r.render(xmlStream,text);});}else if(model){this.map.t.render(xmlStream,model.text);}xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){var name=node.name;if(this.parser){this.parser.parseOpen(node);return true;}if(name===this.tag){this.model={sb:parseInt(node.attributes.sb,10),eb:parseInt(node.attributes.eb,10)};return true;}this.parser=this.map[name];if(this.parser){this.parser.parseOpen(node);return true;}return false;}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){switch(name){case'r':{var rt=this.model.richText;if(!rt){rt=this.model.richText=[];}rt.push(this.parser.model);break;}case't':this.model.text=this.parser.model;break;default:break;}this.parser=undefined;}return true;}switch(name){case this.tag:return false;default:return true;}}},{key:"tag",get:function get(){return'rPh';}}]);return PhoneticTextXform;}(BaseXform);module.exports=PhoneticTextXform;},{"../base-xform":29,"./rich-text-xform":119,"./text-xform":122}],119:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var TextXform=require('./text-xform');var FontXform=require('../style/font-xform');var BaseXform=require('../base-xform');// <r> |
|
|
// <rPr> |
|
|
// <sz val="11"/> |
|
|
// <color theme="1" tint="5"/> |
|
|
// <rFont val="Calibri"/> |
|
|
// <family val="2"/> |
|
|
// <scheme val="minor"/> |
|
|
// </rPr> |
|
|
// <t xml:space="preserve"> is </t> |
|
|
// </r> |
|
|
var RichTextXform=/*#__PURE__*/function(_BaseXform){_inherits(RichTextXform,_BaseXform);var _super=_createSuper(RichTextXform);function RichTextXform(model){var _this;_classCallCheck(this,RichTextXform);_this=_super.call(this);_this.model=model;return _this;}_createClass(RichTextXform,[{key:"render",value:function render(xmlStream,model){model=model||this.model;xmlStream.openNode('r');if(model.font){this.fontXform.render(xmlStream,model.font);}this.textXform.render(xmlStream,model.text);xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case'r':this.model={};return true;case't':this.parser=this.textXform;this.parser.parseOpen(node);return true;case'rPr':this.parser=this.fontXform;this.parser.parseOpen(node);return true;default:return false;}}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){switch(name){case'r':return false;case't':this.model.text=this.parser.model;this.parser=undefined;return true;case'rPr':this.model.font=this.parser.model;this.parser=undefined;return true;default:if(this.parser){this.parser.parseClose(name);}return true;}}},{key:"tag",get:function get(){return'r';}},{key:"textXform",get:function get(){return this._textXform||(this._textXform=new TextXform());}},{key:"fontXform",get:function get(){return this._fontXform||(this._fontXform=new FontXform(RichTextXform.FONT_OPTIONS));}}]);return RichTextXform;}(BaseXform);RichTextXform.FONT_OPTIONS={tagName:'rPr',fontNameTag:'rFont'};module.exports=RichTextXform;},{"../base-xform":29,"../style/font-xform":128,"./text-xform":122}],120:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var TextXform=require('./text-xform');var RichTextXform=require('./rich-text-xform');var PhoneticTextXform=require('./phonetic-text-xform');var BaseXform=require('../base-xform');// <si> |
|
|
// <r></r><r></r>... |
|
|
// </si> |
|
|
// <si> |
|
|
// <t></t> |
|
|
// </si> |
|
|
var SharedStringXform=/*#__PURE__*/function(_BaseXform){_inherits(SharedStringXform,_BaseXform);var _super=_createSuper(SharedStringXform);function SharedStringXform(model){var _this;_classCallCheck(this,SharedStringXform);_this=_super.call(this);_this.model=model;_this.map={r:new RichTextXform(),t:new TextXform(),rPh:new PhoneticTextXform()};return _this;}_createClass(SharedStringXform,[{key:"render",value:function render(xmlStream,model){var _this2=this;xmlStream.openNode(this.tag);if(model&&model.hasOwnProperty('richText')&&model.richText){if(model.richText.length){model.richText.forEach(function(text){_this2.map.r.render(xmlStream,text);});}else{this.map.t.render(xmlStream,'');}}else if(model!==undefined&&model!==null){this.map.t.render(xmlStream,model);}xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){var name=node.name;if(this.parser){this.parser.parseOpen(node);return true;}if(name===this.tag){this.model={};return true;}this.parser=this.map[name];if(this.parser){this.parser.parseOpen(node);return true;}return false;}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){switch(name){case'r':{var rt=this.model.richText;if(!rt){rt=this.model.richText=[];}rt.push(this.parser.model);break;}case't':this.model=this.parser.model;break;default:break;}this.parser=undefined;}return true;}switch(name){case this.tag:return false;default:return true;}}},{key:"tag",get:function get(){return'si';}}]);return SharedStringXform;}(BaseXform);module.exports=SharedStringXform;},{"../base-xform":29,"./phonetic-text-xform":118,"./rich-text-xform":119,"./text-xform":122}],121:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var XmlStream=require('../../../utils/xml-stream');var BaseXform=require('../base-xform');var SharedStringXform=require('./shared-string-xform');var SharedStringsXform=/*#__PURE__*/function(_BaseXform){_inherits(SharedStringsXform,_BaseXform);var _super=_createSuper(SharedStringsXform);function SharedStringsXform(model){var _this;_classCallCheck(this,SharedStringsXform);_this=_super.call(this);_this.model=model||{values:[],count:0};_this.hash=Object.create(null);_this.rich=Object.create(null);return _this;}_createClass(SharedStringsXform,[{key:"getString",value:function getString(index){return this.model.values[index];}},{key:"add",value:function add(value){return value.richText?this.addRichText(value):this.addText(value);}},{key:"addText",value:function addText(value){var index=this.hash[value];if(index===undefined){index=this.hash[value]=this.model.values.length;this.model.values.push(value);}this.model.count++;return index;}},{key:"addRichText",value:function addRichText(value){// TODO: add WeakMap here |
|
|
var xml=this.sharedStringXform.toXml(value);var index=this.rich[xml];if(index===undefined){index=this.rich[xml]=this.model.values.length;this.model.values.push(value);}this.model.count++;return index;}// <?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
|
|
// <sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="<%=totalRefs%>" uniqueCount="<%=count%>"> |
|
|
// <si><t><%=text%></t></si> |
|
|
// <si><r><rPr></rPr><t></t></r></si> |
|
|
// </sst> |
|
|
},{key:"render",value:function render(xmlStream,model){model=model||this._values;xmlStream.openXml(XmlStream.StdDocAttributes);xmlStream.openNode('sst',{xmlns:'http://schemas.openxmlformats.org/spreadsheetml/2006/main',count:model.count,uniqueCount:model.values.length});var sx=this.sharedStringXform;model.values.forEach(function(sharedString){sx.render(xmlStream,sharedString);});xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case'sst':return true;case'si':this.parser=this.sharedStringXform;this.parser.parseOpen(node);return true;default:throw new Error("Unexpected xml node in parseOpen: ".concat(JSON.stringify(node)));}}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.model.values.push(this.parser.model);this.model.count++;this.parser=undefined;}return true;}switch(name){case'sst':return false;default:throw new Error("Unexpected xml node in parseClose: ".concat(name));}}},{key:"sharedStringXform",get:function get(){return this._sharedStringXform||(this._sharedStringXform=new SharedStringXform());}},{key:"values",get:function get(){return this.model.values;}},{key:"uniqueCount",get:function get(){return this.model.values.length;}},{key:"count",get:function get(){return this.model.count;}}]);return SharedStringsXform;}(BaseXform);module.exports=SharedStringsXform;},{"../../../utils/xml-stream":25,"../base-xform":29,"./shared-string-xform":120}],122:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');// <t xml:space="preserve"> is </t> |
|
|
var TextXform=/*#__PURE__*/function(_BaseXform){_inherits(TextXform,_BaseXform);var _super=_createSuper(TextXform);function TextXform(){_classCallCheck(this,TextXform);return _super.apply(this,arguments);}_createClass(TextXform,[{key:"render",value:function render(xmlStream,model){xmlStream.openNode('t');if(/^\s|\n|\s$/.test(model)){xmlStream.addAttribute('xml:space','preserve');}xmlStream.writeText(model);xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case't':this._text=[];return true;default:return false;}}},{key:"parseText",value:function parseText(text){this._text.push(text);}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return't';}},{key:"model",get:function get(){return this._text.join('').replace(/_x([0-9A-F]{4})_/g,function($0,$1){return String.fromCharCode(parseInt($1,16));});}}]);return TextXform;}(BaseXform);module.exports=TextXform;},{"../base-xform":29}],123:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var Enums=require('../../../doc/enums');var utils=require('../../../utils/utils');var BaseXform=require('../base-xform');var validation={horizontalValues:['left','center','right','fill','centerContinuous','distributed','justify'].reduce(function(p,v){p[v]=true;return p;},{}),horizontal:function horizontal(value){return this.horizontalValues[value]?value:undefined;},verticalValues:['top','middle','bottom','distributed','justify'].reduce(function(p,v){p[v]=true;return p;},{}),vertical:function vertical(value){if(value==='middle')return'center';return this.verticalValues[value]?value:undefined;},wrapText:function wrapText(value){return value?true:undefined;},shrinkToFit:function shrinkToFit(value){return value?true:undefined;},textRotation:function textRotation(value){switch(value){case'vertical':return value;default:value=utils.validInt(value);return value>=-90&&value<=90?value:undefined;}},indent:function indent(value){value=utils.validInt(value);return Math.max(0,value);},readingOrder:function readingOrder(value){switch(value){case'ltr':return Enums.ReadingOrder.LeftToRight;case'rtl':return Enums.ReadingOrder.RightToLeft;default:return undefined;}}};var textRotationXform={toXml:function toXml(textRotation){textRotation=validation.textRotation(textRotation);if(textRotation){if(textRotation==='vertical'){return 255;}var tr=Math.round(textRotation);if(tr>=0&&tr<=90){return tr;}if(tr<0&&tr>=-90){return 90-tr;}}return undefined;},toModel:function toModel(textRotation){var tr=utils.validInt(textRotation);if(tr!==undefined){if(tr===255){return'vertical';}if(tr>=0&&tr<=90){return tr;}if(tr>90&&tr<=180){return 90-tr;}}return undefined;}};// Alignment encapsulates translation from style.alignment model to/from xlsx |
|
|
var AlignmentXform=/*#__PURE__*/function(_BaseXform){_inherits(AlignmentXform,_BaseXform);var _super=_createSuper(AlignmentXform);function AlignmentXform(){_classCallCheck(this,AlignmentXform);return _super.apply(this,arguments);}_createClass(AlignmentXform,[{key:"render",value:function render(xmlStream,model){xmlStream.addRollback();xmlStream.openNode('alignment');var isValid=false;function add(name,value){if(value){xmlStream.addAttribute(name,value);isValid=true;}}add('horizontal',validation.horizontal(model.horizontal));add('vertical',validation.vertical(model.vertical));add('wrapText',validation.wrapText(model.wrapText)?'1':false);add('shrinkToFit',validation.shrinkToFit(model.shrinkToFit)?'1':false);add('indent',validation.indent(model.indent));add('textRotation',textRotationXform.toXml(model.textRotation));add('readingOrder',validation.readingOrder(model.readingOrder));xmlStream.closeNode();if(isValid){xmlStream.commit();}else{xmlStream.rollback();}}},{key:"parseOpen",value:function parseOpen(node){var model={};var valid=false;function add(truthy,name,value){if(truthy){model[name]=value;valid=true;}}add(node.attributes.horizontal,'horizontal',node.attributes.horizontal);add(node.attributes.vertical,'vertical',node.attributes.vertical==='center'?'middle':node.attributes.vertical);add(node.attributes.wrapText,'wrapText',!!node.attributes.wrapText);add(node.attributes.shrinkToFit,'shrinkToFit',!!node.attributes.shrinkToFit);add(node.attributes.indent,'indent',parseInt(node.attributes.indent,10));add(node.attributes.textRotation,'textRotation',textRotationXform.toModel(node.attributes.textRotation));add(node.attributes.readingOrder,'readingOrder',node.attributes.readingOrder==='2'?'rtl':'ltr');this.model=valid?model:null;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'alignment';}}]);return AlignmentXform;}(BaseXform);module.exports=AlignmentXform;},{"../../../doc/enums":7,"../../../utils/utils":24,"../base-xform":29}],124:[function(require,module,exports){"use strict";function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly)symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;});keys.push.apply(keys,symbols);}return keys;}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};if(i%2){ownKeys(Object(source),true).forEach(function(key){_defineProperty(target,key,source[key]);});}else if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source));}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key));});}}return target;}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}/* eslint-disable max-classes-per-file */var BaseXform=require('../base-xform');var ColorXform=require('./color-xform');var EdgeXform=/*#__PURE__*/function(_BaseXform){_inherits(EdgeXform,_BaseXform);var _super=_createSuper(EdgeXform);function EdgeXform(name){var _this;_classCallCheck(this,EdgeXform);_this=_super.call(this);_this.name=name;_this.map={color:new ColorXform()};return _this;}_createClass(EdgeXform,[{key:"render",value:function render(xmlStream,model,defaultColor){var color=model&&model.color||defaultColor||this.defaultColor;xmlStream.openNode(this.name);if(model&&model.style){xmlStream.addAttribute('style',model.style);if(color){this.map.color.render(xmlStream,color);}}xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case this.name:{var style=node.attributes.style;if(style){this.model={style:style};}else{this.model=undefined;}return true;}case'color':this.parser=this.map.color;this.parser.parseOpen(node);return true;default:return false;}}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.parser=undefined;}return true;}if(name===this.name){if(this.map.color.model){if(!this.model){this.model={};}this.model.color=this.map.color.model;}}return false;}},{key:"validStyle",value:function validStyle(value){return EdgeXform.validStyleValues[value];}},{key:"tag",get:function get(){return this.name;}}]);return EdgeXform;}(BaseXform);EdgeXform.validStyleValues=['thin','dotted','dashDot','hair','dashDotDot','slantDashDot','mediumDashed','mediumDashDotDot','mediumDashDot','medium','double','thick'].reduce(function(p,v){p[v]=true;return p;},{});// Border encapsulates translation from border model to/from xlsx |
|
|
var BorderXform=/*#__PURE__*/function(_BaseXform2){_inherits(BorderXform,_BaseXform2);var _super2=_createSuper(BorderXform);function BorderXform(){var _this2;_classCallCheck(this,BorderXform);_this2=_super2.call(this);_this2.map={top:new EdgeXform('top'),left:new EdgeXform('left'),bottom:new EdgeXform('bottom'),right:new EdgeXform('right'),diagonal:new EdgeXform('diagonal')};return _this2;}_createClass(BorderXform,[{key:"render",value:function render(xmlStream,model){var color=model.color;xmlStream.openNode('border');if(model.diagonal&&model.diagonal.style){if(model.diagonal.up){xmlStream.addAttribute('diagonalUp','1');}if(model.diagonal.down){xmlStream.addAttribute('diagonalDown','1');}}function add(edgeModel,edgeXform){if(edgeModel&&!edgeModel.color&&model.color){// don't mess with incoming models |
|
|
edgeModel=_objectSpread(_objectSpread({},edgeModel),{},{color:model.color});}edgeXform.render(xmlStream,edgeModel,color);}add(model.left,this.map.left);add(model.right,this.map.right);add(model.top,this.map.top);add(model.bottom,this.map.bottom);add(model.diagonal,this.map.diagonal);xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case'border':this.reset();this.diagonalUp=!!node.attributes.diagonalUp;this.diagonalDown=!!node.attributes.diagonalDown;return true;default:this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);return true;}return false;}}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.parser=undefined;}return true;}if(name==='border'){var model=this.model={};var add=function add(key,edgeModel,extensions){if(edgeModel){if(extensions){Object.assign(edgeModel,extensions);}model[key]=edgeModel;}};add('left',this.map.left.model);add('right',this.map.right.model);add('top',this.map.top.model);add('bottom',this.map.bottom.model);add('diagonal',this.map.diagonal.model,{up:this.diagonalUp,down:this.diagonalDown});}return false;}}]);return BorderXform;}(BaseXform);module.exports=BorderXform;},{"../base-xform":29,"./color-xform":125}],125:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');// Color encapsulates translation from color model to/from xlsx |
|
|
var ColorXform=/*#__PURE__*/function(_BaseXform){_inherits(ColorXform,_BaseXform);var _super=_createSuper(ColorXform);function ColorXform(name){var _this;_classCallCheck(this,ColorXform);_this=_super.call(this);// this.name controls the xm node name |
|
|
_this.name=name||'color';return _this;}_createClass(ColorXform,[{key:"render",value:function render(xmlStream,model){if(model){xmlStream.openNode(this.name);if(model.argb){xmlStream.addAttribute('rgb',model.argb);}else if(model.theme!==undefined){xmlStream.addAttribute('theme',model.theme);if(model.tint!==undefined){xmlStream.addAttribute('tint',model.tint);}}else if(model.indexed!==undefined){xmlStream.addAttribute('indexed',model.indexed);}else{xmlStream.addAttribute('auto','1');}xmlStream.closeNode();return true;}return false;}},{key:"parseOpen",value:function parseOpen(node){if(node.name===this.name){if(node.attributes.rgb){this.model={argb:node.attributes.rgb};}else if(node.attributes.theme){this.model={theme:parseInt(node.attributes.theme,10)};if(node.attributes.tint){this.model.tint=parseFloat(node.attributes.tint);}}else if(node.attributes.indexed){this.model={indexed:parseInt(node.attributes.indexed,10)};}else{this.model=undefined;}return true;}return false;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return this.name;}}]);return ColorXform;}(BaseXform);module.exports=ColorXform;},{"../base-xform":29}],126:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var AlignmentXform=require('./alignment-xform');var BorderXform=require('./border-xform');var FillXform=require('./fill-xform');var FontXform=require('./font-xform');var NumFmtXform=require('./numfmt-xform');var ProtectionXform=require('./protection-xform');// <xf numFmtId="[numFmtId]" fontId="[fontId]" fillId="[fillId]" borderId="[xf.borderId]" xfId="[xfId]"> |
|
|
// Optional <alignment> |
|
|
// Optional <protection> |
|
|
// </xf> |
|
|
// Style assists translation from style model to/from xlsx |
|
|
var DxfXform=/*#__PURE__*/function(_BaseXform){_inherits(DxfXform,_BaseXform);var _super=_createSuper(DxfXform);function DxfXform(){var _this;_classCallCheck(this,DxfXform);_this=_super.call(this);_this.map={alignment:new AlignmentXform(),border:new BorderXform(),fill:new FillXform(),font:new FontXform(),numFmt:new NumFmtXform(),protection:new ProtectionXform()};return _this;}_createClass(DxfXform,[{key:"render",// how do we generate dxfid? |
|
|
value:function render(xmlStream,model){xmlStream.openNode(this.tag);if(model.alignment){this.map.alignment.render(xmlStream,model.alignment);}if(model.border){this.map.border.render(xmlStream,model.border);}if(model.fill){this.map.fill.render(xmlStream,model.fill);}if(model.font){this.map.font.render(xmlStream,model.font);}if(model.numFmt){this.map.numFmt.render(xmlStream,model.numFmt);}if(model.protection){this.map.protection.render(xmlStream,model.protection);}xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case this.tag:// this node is often repeated. Need to reset children |
|
|
this.reset();return true;default:this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);}return true;}}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.parser=undefined;}return true;}if(name===this.tag){this.model={alignment:this.map.alignment.model,border:this.map.border.model,fill:this.map.fill.model,font:this.map.font.model,numFmt:this.map.numFmt.model,protection:this.map.protection.model};return false;}return true;}},{key:"tag",get:function get(){return'dxf';}}]);return DxfXform;}(BaseXform);module.exports=DxfXform;},{"../base-xform":29,"./alignment-xform":123,"./border-xform":124,"./fill-xform":127,"./font-xform":128,"./numfmt-xform":129,"./protection-xform":130}],127:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}/* eslint-disable max-classes-per-file */var BaseXform=require('../base-xform');var ColorXform=require('./color-xform');var StopXform=/*#__PURE__*/function(_BaseXform){_inherits(StopXform,_BaseXform);var _super=_createSuper(StopXform);function StopXform(){var _this;_classCallCheck(this,StopXform);_this=_super.call(this);_this.map={color:new ColorXform()};return _this;}_createClass(StopXform,[{key:"render",value:function render(xmlStream,model){xmlStream.openNode('stop');xmlStream.addAttribute('position',model.position);this.map.color.render(xmlStream,model.color);xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case'stop':this.model={position:parseFloat(node.attributes.position)};return true;case'color':this.parser=this.map.color;this.parser.parseOpen(node);return true;default:return false;}}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.model.color=this.parser.model;this.parser=undefined;}return true;}return false;}},{key:"tag",get:function get(){return'stop';}}]);return StopXform;}(BaseXform);var PatternFillXform=/*#__PURE__*/function(_BaseXform2){_inherits(PatternFillXform,_BaseXform2);var _super2=_createSuper(PatternFillXform);function PatternFillXform(){var _this2;_classCallCheck(this,PatternFillXform);_this2=_super2.call(this);_this2.map={fgColor:new ColorXform('fgColor'),bgColor:new ColorXform('bgColor')};return _this2;}_createClass(PatternFillXform,[{key:"render",value:function render(xmlStream,model){xmlStream.openNode('patternFill');xmlStream.addAttribute('patternType',model.pattern);if(model.fgColor){this.map.fgColor.render(xmlStream,model.fgColor);}if(model.bgColor){this.map.bgColor.render(xmlStream,model.bgColor);}xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case'patternFill':this.model={type:'pattern',pattern:node.attributes.patternType};return true;default:this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);return true;}return false;}}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){if(this.parser.model){this.model[name]=this.parser.model;}this.parser=undefined;}return true;}return false;}},{key:"name",get:function get(){return'pattern';}},{key:"tag",get:function get(){return'patternFill';}}]);return PatternFillXform;}(BaseXform);var GradientFillXform=/*#__PURE__*/function(_BaseXform3){_inherits(GradientFillXform,_BaseXform3);var _super3=_createSuper(GradientFillXform);function GradientFillXform(){var _this3;_classCallCheck(this,GradientFillXform);_this3=_super3.call(this);_this3.map={stop:new StopXform()};// if (model) { |
|
|
// this.gradient = model.gradient; |
|
|
// if (model.center) { |
|
|
// this.center = model.center; |
|
|
// } |
|
|
// if (model.degree !== undefined) { |
|
|
// this.degree = model.degree; |
|
|
// } |
|
|
// this.stops = model.stops.map(function(stop) { return new StopXform(stop); }); |
|
|
// } else { |
|
|
// this.stops = []; |
|
|
// } |
|
|
return _this3;}_createClass(GradientFillXform,[{key:"render",value:function render(xmlStream,model){xmlStream.openNode('gradientFill');switch(model.gradient){case'angle':xmlStream.addAttribute('degree',model.degree);break;case'path':xmlStream.addAttribute('type','path');if(model.center.left){xmlStream.addAttribute('left',model.center.left);if(model.center.right===undefined){xmlStream.addAttribute('right',model.center.left);}}if(model.center.right){xmlStream.addAttribute('right',model.center.right);}if(model.center.top){xmlStream.addAttribute('top',model.center.top);if(model.center.bottom===undefined){xmlStream.addAttribute('bottom',model.center.top);}}if(model.center.bottom){xmlStream.addAttribute('bottom',model.center.bottom);}break;default:break;}var stopXform=this.map.stop;model.stops.forEach(function(stopModel){stopXform.render(xmlStream,stopModel);});xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case'gradientFill':{var model=this.model={stops:[]};if(node.attributes.degree){model.gradient='angle';model.degree=parseInt(node.attributes.degree,10);}else if(node.attributes.type==='path'){model.gradient='path';model.center={left:node.attributes.left?parseFloat(node.attributes.left):0,top:node.attributes.top?parseFloat(node.attributes.top):0};if(node.attributes.right!==node.attributes.left){model.center.right=node.attributes.right?parseFloat(node.attributes.right):0;}if(node.attributes.bottom!==node.attributes.top){model.center.bottom=node.attributes.bottom?parseFloat(node.attributes.bottom):0;}}return true;}case'stop':this.parser=this.map.stop;this.parser.parseOpen(node);return true;default:return false;}}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.model.stops.push(this.parser.model);this.parser=undefined;}return true;}return false;}},{key:"name",get:function get(){return'gradient';}},{key:"tag",get:function get(){return'gradientFill';}}]);return GradientFillXform;}(BaseXform);// Fill encapsulates translation from fill model to/from xlsx |
|
|
var FillXform=/*#__PURE__*/function(_BaseXform4){_inherits(FillXform,_BaseXform4);var _super4=_createSuper(FillXform);function FillXform(){var _this4;_classCallCheck(this,FillXform);_this4=_super4.call(this);_this4.map={patternFill:new PatternFillXform(),gradientFill:new GradientFillXform()};return _this4;}_createClass(FillXform,[{key:"render",value:function render(xmlStream,model){xmlStream.addRollback();xmlStream.openNode('fill');switch(model.type){case'pattern':this.map.patternFill.render(xmlStream,model);break;case'gradient':this.map.gradientFill.render(xmlStream,model);break;default:xmlStream.rollback();return;}xmlStream.closeNode();xmlStream.commit();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case'fill':this.model={};return true;default:this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);return true;}return false;}}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.model=this.parser.model;this.model.type=this.parser.name;this.parser=undefined;}return true;}return false;}},{key:"validStyle",value:function validStyle(value){return FillXform.validPatternValues[value];}},{key:"tag",get:function get(){return'fill';}}]);return FillXform;}(BaseXform);FillXform.validPatternValues=['none','solid','darkVertical','darkGray','mediumGray','lightGray','gray125','gray0625','darkHorizontal','darkVertical','darkDown','darkUp','darkGrid','darkTrellis','lightHorizontal','lightVertical','lightDown','lightUp','lightGrid','lightTrellis','lightGrid'].reduce(function(p,v){p[v]=true;return p;},{});FillXform.StopXform=StopXform;FillXform.PatternFillXform=PatternFillXform;FillXform.GradientFillXform=GradientFillXform;module.exports=FillXform;},{"../base-xform":29,"./color-xform":125}],128:[function(require,module,exports){'use strict';function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var ColorXform=require('./color-xform');var BooleanXform=require('../simple/boolean-xform');var IntegerXform=require('../simple/integer-xform');var StringXform=require('../simple/string-xform');var UnderlineXform=require('./underline-xform');var _=require('../../../utils/under-dash');var BaseXform=require('../base-xform');// Font encapsulates translation from font model to xlsx |
|
|
var FontXform=/*#__PURE__*/function(_BaseXform){_inherits(FontXform,_BaseXform);var _super=_createSuper(FontXform);function FontXform(options){var _this;_classCallCheck(this,FontXform);_this=_super.call(this);_this.options=options||FontXform.OPTIONS;_this.map={b:{prop:'bold',xform:new BooleanXform({tag:'b',attr:'val'})},i:{prop:'italic',xform:new BooleanXform({tag:'i',attr:'val'})},u:{prop:'underline',xform:new UnderlineXform()},charset:{prop:'charset',xform:new IntegerXform({tag:'charset',attr:'val'})},color:{prop:'color',xform:new ColorXform()},condense:{prop:'condense',xform:new BooleanXform({tag:'condense',attr:'val'})},extend:{prop:'extend',xform:new BooleanXform({tag:'extend',attr:'val'})},family:{prop:'family',xform:new IntegerXform({tag:'family',attr:'val'})},outline:{prop:'outline',xform:new BooleanXform({tag:'outline',attr:'val'})},vertAlign:{prop:'vertAlign',xform:new StringXform({tag:'vertAlign',attr:'val'})},scheme:{prop:'scheme',xform:new StringXform({tag:'scheme',attr:'val'})},shadow:{prop:'shadow',xform:new BooleanXform({tag:'shadow',attr:'val'})},strike:{prop:'strike',xform:new BooleanXform({tag:'strike',attr:'val'})},sz:{prop:'size',xform:new IntegerXform({tag:'sz',attr:'val'})}};_this.map[_this.options.fontNameTag]={prop:'name',xform:new StringXform({tag:_this.options.fontNameTag,attr:'val'})};return _this;}_createClass(FontXform,[{key:"render",value:function render(xmlStream,model){var map=this.map;xmlStream.openNode(this.options.tagName);_.each(this.map,function(defn,tag){map[tag].xform.render(xmlStream,model[defn.prop]);});xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}if(this.map[node.name]){this.parser=this.map[node.name].xform;return this.parser.parseOpen(node);}switch(node.name){case this.options.tagName:this.model={};return true;default:return false;}}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser&&!this.parser.parseClose(name)){var item=this.map[name];if(this.parser.model){this.model[item.prop]=this.parser.model;}this.parser=undefined;return true;}switch(name){case this.options.tagName:return false;default:return true;}}},{key:"tag",get:function get(){return this.options.tagName;}}]);return FontXform;}(BaseXform);FontXform.OPTIONS={tagName:'font',fontNameTag:'name'};module.exports=FontXform;},{"../../../utils/under-dash":23,"../base-xform":29,"../simple/boolean-xform":113,"../simple/integer-xform":115,"../simple/string-xform":116,"./color-xform":125,"./underline-xform":133}],129:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var _=require('../../../utils/under-dash');var defaultNumFormats=require('../../defaultnumformats');var BaseXform=require('../base-xform');function hashDefaultFormats(){var hash={};_.each(defaultNumFormats,function(dnf,id){if(dnf.f){hash[dnf.f]=parseInt(id,10);}// at some point, add the other cultures here... |
|
|
});return hash;}var defaultFmtHash=hashDefaultFormats();// NumFmt encapsulates translation between number format and xlsx |
|
|
var NumFmtXform=/*#__PURE__*/function(_BaseXform){_inherits(NumFmtXform,_BaseXform);var _super=_createSuper(NumFmtXform);function NumFmtXform(id,formatCode){var _this;_classCallCheck(this,NumFmtXform);_this=_super.call(this);_this.id=id;_this.formatCode=formatCode;return _this;}_createClass(NumFmtXform,[{key:"render",value:function render(xmlStream,model){xmlStream.leafNode('numFmt',{numFmtId:model.id,formatCode:model.formatCode});}},{key:"parseOpen",value:function parseOpen(node){switch(node.name){case'numFmt':this.model={id:parseInt(node.attributes.numFmtId,10),formatCode:node.attributes.formatCode.replace(/[\\](.)/g,'$1')};return true;default:return false;}}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'numFmt';}}]);return NumFmtXform;}(BaseXform);NumFmtXform.getDefaultFmtId=function getDefaultFmtId(formatCode){return defaultFmtHash[formatCode];};NumFmtXform.getDefaultFmtCode=function getDefaultFmtCode(numFmtId){return defaultNumFormats[numFmtId]&&defaultNumFormats[numFmtId].f;};module.exports=NumFmtXform;},{"../../../utils/under-dash":23,"../../defaultnumformats":27,"../base-xform":29}],130:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var validation={boolean:function boolean(value,dflt){if(value===undefined){return dflt;}return value;}};// Protection encapsulates translation from style.protection model to/from xlsx |
|
|
var ProtectionXform=/*#__PURE__*/function(_BaseXform){_inherits(ProtectionXform,_BaseXform);var _super=_createSuper(ProtectionXform);function ProtectionXform(){_classCallCheck(this,ProtectionXform);return _super.apply(this,arguments);}_createClass(ProtectionXform,[{key:"render",value:function render(xmlStream,model){xmlStream.addRollback();xmlStream.openNode('protection');var isValid=false;function add(name,value){if(value!==undefined){xmlStream.addAttribute(name,value);isValid=true;}}add('locked',validation.boolean(model.locked,true)?undefined:'0');add('hidden',validation.boolean(model.hidden,false)?'1':undefined);xmlStream.closeNode();if(isValid){xmlStream.commit();}else{xmlStream.rollback();}}},{key:"parseOpen",value:function parseOpen(node){var model={locked:!(node.attributes.locked==='0'),hidden:node.attributes.hidden==='1'};// only want to record models that differ from defaults |
|
|
var isSignificant=!model.locked||model.hidden;this.model=isSignificant?model:null;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'protection';}}]);return ProtectionXform;}(BaseXform);module.exports=ProtectionXform;},{"../base-xform":29}],131:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var AlignmentXform=require('./alignment-xform');var ProtectionXform=require('./protection-xform');// <xf numFmtId="[numFmtId]" fontId="[fontId]" fillId="[fillId]" borderId="[xf.borderId]" xfId="[xfId]"> |
|
|
// Optional <alignment> |
|
|
// Optional <protection> |
|
|
// </xf> |
|
|
// Style assists translation from style model to/from xlsx |
|
|
var StyleXform=/*#__PURE__*/function(_BaseXform){_inherits(StyleXform,_BaseXform);var _super=_createSuper(StyleXform);function StyleXform(options){var _this;_classCallCheck(this,StyleXform);_this=_super.call(this);_this.xfId=!!(options&&options.xfId);_this.map={alignment:new AlignmentXform(),protection:new ProtectionXform()};return _this;}_createClass(StyleXform,[{key:"render",value:function render(xmlStream,model){xmlStream.openNode('xf',{numFmtId:model.numFmtId||0,fontId:model.fontId||0,fillId:model.fillId||0,borderId:model.borderId||0});if(this.xfId){xmlStream.addAttribute('xfId',model.xfId||0);}if(model.numFmtId){xmlStream.addAttribute('applyNumberFormat','1');}if(model.fontId){xmlStream.addAttribute('applyFont','1');}if(model.fillId){xmlStream.addAttribute('applyFill','1');}if(model.borderId){xmlStream.addAttribute('applyBorder','1');}if(model.alignment){xmlStream.addAttribute('applyAlignment','1');}if(model.protection){xmlStream.addAttribute('applyProtection','1');}/** |
|
|
* Rendering tags causes close of XML stream. |
|
|
* Therefore adding attributes must be done before rendering tags. |
|
|
*/if(model.alignment){this.map.alignment.render(xmlStream,model.alignment);}if(model.protection){this.map.protection.render(xmlStream,model.protection);}xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}// used during sax parsing of xml to build font object |
|
|
switch(node.name){case'xf':this.model={numFmtId:parseInt(node.attributes.numFmtId,10),fontId:parseInt(node.attributes.fontId,10),fillId:parseInt(node.attributes.fillId,10),borderId:parseInt(node.attributes.borderId,10)};if(this.xfId){this.model.xfId=parseInt(node.attributes.xfId,10);}return true;case'alignment':this.parser=this.map.alignment;this.parser.parseOpen(node);return true;case'protection':this.parser=this.map.protection;this.parser.parseOpen(node);return true;default:return false;}}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){if(this.map.protection===this.parser){this.model.protection=this.parser.model;}else{this.model.alignment=this.parser.model;}this.parser=undefined;}return true;}return name!=='xf';}},{key:"tag",get:function get(){return'xf';}}]);return StyleXform;}(BaseXform);module.exports=StyleXform;},{"../base-xform":29,"./alignment-xform":123,"./protection-xform":130}],132:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}/* eslint-disable max-classes-per-file */var Enums=require('../../../doc/enums');var XmlStream=require('../../../utils/xml-stream');var BaseXform=require('../base-xform');var StaticXform=require('../static-xform');var ListXform=require('../list-xform');var FontXform=require('./font-xform');var FillXform=require('./fill-xform');var BorderXform=require('./border-xform');var NumFmtXform=require('./numfmt-xform');var StyleXform=require('./style-xform');var DxfXform=require('./dxf-xform');// custom numfmt ids start here |
|
|
var NUMFMT_BASE=164;// ============================================================================= |
|
|
// StylesXform is used to generate and parse the styles.xml file |
|
|
// it manages the collections of fonts, number formats, alignments, etc |
|
|
var StylesXform=/*#__PURE__*/function(_BaseXform){_inherits(StylesXform,_BaseXform);var _super=_createSuper(StylesXform);function StylesXform(initialise){var _this;_classCallCheck(this,StylesXform);_this=_super.call(this);_this.map={numFmts:new ListXform({tag:'numFmts',count:true,childXform:new NumFmtXform()}),fonts:new ListXform({tag:'fonts',count:true,childXform:new FontXform(),$:{'x14ac:knownFonts':1}}),fills:new ListXform({tag:'fills',count:true,childXform:new FillXform()}),borders:new ListXform({tag:'borders',count:true,childXform:new BorderXform()}),cellStyleXfs:new ListXform({tag:'cellStyleXfs',count:true,childXform:new StyleXform()}),cellXfs:new ListXform({tag:'cellXfs',count:true,childXform:new StyleXform({xfId:true})}),dxfs:new ListXform({tag:'dxfs',always:true,count:true,childXform:new DxfXform()}),// for style manager |
|
|
numFmt:new NumFmtXform(),font:new FontXform(),fill:new FillXform(),border:new BorderXform(),style:new StyleXform({xfId:true}),cellStyles:StylesXform.STATIC_XFORMS.cellStyles,tableStyles:StylesXform.STATIC_XFORMS.tableStyles,extLst:StylesXform.STATIC_XFORMS.extLst};if(initialise){// StylesXform also acts as style manager and is used to build up styles-model during worksheet processing |
|
|
_this.init();}return _this;}_createClass(StylesXform,[{key:"initIndex",value:function initIndex(){this.index={style:{},numFmt:{},numFmtNextId:164,// start custom format ids here |
|
|
font:{},border:{},fill:{}};}},{key:"init",value:function init(){// Prepare for Style Manager role |
|
|
this.model={styles:[],numFmts:[],fonts:[],borders:[],fills:[],dxfs:[]};this.initIndex();// default (zero) border |
|
|
this._addBorder({});// add default (all zero) style |
|
|
this._addStyle({numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0});// add default fills |
|
|
this._addFill({type:'pattern',pattern:'none'});this._addFill({type:'pattern',pattern:'gray125'});this.weakMap=new WeakMap();}},{key:"render",value:function render(xmlStream,model){model=model||this.model;// |
|
|
// <fonts count="2" x14ac:knownFonts="1"> |
|
|
xmlStream.openXml(XmlStream.StdDocAttributes);xmlStream.openNode('styleSheet',StylesXform.STYLESHEET_ATTRIBUTES);if(this.index){// model has been built by style manager role (contains xml) |
|
|
if(model.numFmts&&model.numFmts.length){xmlStream.openNode('numFmts',{count:model.numFmts.length});model.numFmts.forEach(function(numFmtXml){xmlStream.writeXml(numFmtXml);});xmlStream.closeNode();}if(!model.fonts.length){// default (zero) font |
|
|
this._addFont({size:11,color:{theme:1},name:'Calibri',family:2,scheme:'minor'});}xmlStream.openNode('fonts',{count:model.fonts.length,'x14ac:knownFonts':1});model.fonts.forEach(function(fontXml){xmlStream.writeXml(fontXml);});xmlStream.closeNode();xmlStream.openNode('fills',{count:model.fills.length});model.fills.forEach(function(fillXml){xmlStream.writeXml(fillXml);});xmlStream.closeNode();xmlStream.openNode('borders',{count:model.borders.length});model.borders.forEach(function(borderXml){xmlStream.writeXml(borderXml);});xmlStream.closeNode();this.map.cellStyleXfs.render(xmlStream,[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}]);xmlStream.openNode('cellXfs',{count:model.styles.length});model.styles.forEach(function(styleXml){xmlStream.writeXml(styleXml);});xmlStream.closeNode();}else{// model is plain JSON and needs to be xformed |
|
|
this.map.numFmts.render(xmlStream,model.numFmts);this.map.fonts.render(xmlStream,model.fonts);this.map.fills.render(xmlStream,model.fills);this.map.borders.render(xmlStream,model.borders);this.map.cellStyleXfs.render(xmlStream,[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}]);this.map.cellXfs.render(xmlStream,model.styles);}StylesXform.STATIC_XFORMS.cellStyles.render(xmlStream);this.map.dxfs.render(xmlStream,model.dxfs);StylesXform.STATIC_XFORMS.tableStyles.render(xmlStream);StylesXform.STATIC_XFORMS.extLst.render(xmlStream);xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case'styleSheet':this.initIndex();return true;default:this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);}return true;}}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){var _this2=this;if(this.parser){if(!this.parser.parseClose(name)){this.parser=undefined;}return true;}switch(name){case'styleSheet':{this.model={};var add=function add(propName,xform){if(xform.model&&xform.model.length){_this2.model[propName]=xform.model;}};add('numFmts',this.map.numFmts);add('fonts',this.map.fonts);add('fills',this.map.fills);add('borders',this.map.borders);add('styles',this.map.cellXfs);add('dxfs',this.map.dxfs);// index numFmts |
|
|
this.index={model:[],numFmt:[]};if(this.model.numFmts){var numFmtIndex=this.index.numFmt;this.model.numFmts.forEach(function(numFmt){numFmtIndex[numFmt.id]=numFmt.formatCode;});}return false;}default:// not quite sure how we get here! |
|
|
return true;}}// add a cell's style model to the collection |
|
|
// each style property is processed and cross-referenced, etc. |
|
|
// the styleId is returned. Note: cellType is used when numFmt not defined |
|
|
},{key:"addStyleModel",value:function addStyleModel(model,cellType){if(!model){return 0;}// if we have no default font, add it here now |
|
|
if(!this.model.fonts.length){// default (zero) font |
|
|
this._addFont({size:11,color:{theme:1},name:'Calibri',family:2,scheme:'minor'});}// if we have seen this style object before, assume it has the same styleId |
|
|
if(this.weakMap&&this.weakMap.has(model)){return this.weakMap.get(model);}var style={};cellType=cellType||Enums.ValueType.Number;if(model.numFmt){style.numFmtId=this._addNumFmtStr(model.numFmt);}else{switch(cellType){case Enums.ValueType.Number:style.numFmtId=this._addNumFmtStr('General');break;case Enums.ValueType.Date:style.numFmtId=this._addNumFmtStr('mm-dd-yy');break;default:break;}}if(model.font){style.fontId=this._addFont(model.font);}if(model.border){style.borderId=this._addBorder(model.border);}if(model.fill){style.fillId=this._addFill(model.fill);}if(model.alignment){style.alignment=model.alignment;}if(model.protection){style.protection=model.protection;}var styleId=this._addStyle(style);if(this.weakMap){this.weakMap.set(model,styleId);}return styleId;}// given a styleId (i.e. s="n"), get the cell's style model |
|
|
// objects are shared where possible. |
|
|
},{key:"getStyleModel",value:function getStyleModel(id){// if the style doesn't exist return null |
|
|
var style=this.model.styles[id];if(!style)return null;// have we built this model before? |
|
|
var model=this.index.model[id];if(model)return model;// build a new model |
|
|
model=this.index.model[id]={};// ------------------------------------------------------- |
|
|
// number format |
|
|
if(style.numFmtId){var numFmt=this.index.numFmt[style.numFmtId]||NumFmtXform.getDefaultFmtCode(style.numFmtId);if(numFmt){model.numFmt=numFmt;}}function addStyle(name,group,styleId){if(styleId||styleId===0){var part=group[styleId];if(part){model[name]=part;}}}addStyle('font',this.model.fonts,style.fontId);addStyle('border',this.model.borders,style.borderId);addStyle('fill',this.model.fills,style.fillId);// ------------------------------------------------------- |
|
|
// alignment |
|
|
if(style.alignment){model.alignment=style.alignment;}// ------------------------------------------------------- |
|
|
// protection |
|
|
if(style.protection){model.protection=style.protection;}return model;}},{key:"addDxfStyle",value:function addDxfStyle(style){this.model.dxfs.push(style);return this.model.dxfs.length-1;}},{key:"getDxfStyle",value:function getDxfStyle(id){return this.model.dxfs[id];}// ========================================================================= |
|
|
// Private Interface |
|
|
},{key:"_addStyle",value:function _addStyle(style){var xml=this.map.style.toXml(style);var index=this.index.style[xml];if(index===undefined){index=this.index.style[xml]=this.model.styles.length;this.model.styles.push(xml);}return index;}// ========================================================================= |
|
|
// Number Formats |
|
|
},{key:"_addNumFmtStr",value:function _addNumFmtStr(formatCode){// check if default format |
|
|
var index=NumFmtXform.getDefaultFmtId(formatCode);if(index!==undefined)return index;// check if already in |
|
|
index=this.index.numFmt[formatCode];if(index!==undefined)return index;index=this.index.numFmt[formatCode]=NUMFMT_BASE+this.model.numFmts.length;var xml=this.map.numFmt.toXml({id:index,formatCode:formatCode});this.model.numFmts.push(xml);return index;}// ========================================================================= |
|
|
// Fonts |
|
|
},{key:"_addFont",value:function _addFont(font){var xml=this.map.font.toXml(font);var index=this.index.font[xml];if(index===undefined){index=this.index.font[xml]=this.model.fonts.length;this.model.fonts.push(xml);}return index;}// ========================================================================= |
|
|
// Borders |
|
|
},{key:"_addBorder",value:function _addBorder(border){var xml=this.map.border.toXml(border);var index=this.index.border[xml];if(index===undefined){index=this.index.border[xml]=this.model.borders.length;this.model.borders.push(xml);}return index;}// ========================================================================= |
|
|
// Fills |
|
|
},{key:"_addFill",value:function _addFill(fill){var xml=this.map.fill.toXml(fill);var index=this.index.fill[xml];if(index===undefined){index=this.index.fill[xml]=this.model.fills.length;this.model.fills.push(xml);}return index;}// ========================================================================= |
|
|
}]);return StylesXform;}(BaseXform);StylesXform.STYLESHEET_ATTRIBUTES={xmlns:'http://schemas.openxmlformats.org/spreadsheetml/2006/main','xmlns:mc':'http://schemas.openxmlformats.org/markup-compatibility/2006','mc:Ignorable':'x14ac x16r2','xmlns:x14ac':'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac','xmlns:x16r2':'http://schemas.microsoft.com/office/spreadsheetml/2015/02/main'};StylesXform.STATIC_XFORMS={cellStyles:new StaticXform({tag:'cellStyles',$:{count:1},c:[{tag:'cellStyle',$:{name:'Normal',xfId:0,builtinId:0}}]}),dxfs:new StaticXform({tag:'dxfs',$:{count:0}}),tableStyles:new StaticXform({tag:'tableStyles',$:{count:0,defaultTableStyle:'TableStyleMedium2',defaultPivotStyle:'PivotStyleLight16'}}),extLst:new StaticXform({tag:'extLst',c:[{tag:'ext',$:{uri:'{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}','xmlns:x14':'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main'},c:[{tag:'x14:slicerStyles',$:{defaultSlicerStyle:'SlicerStyleLight1'}}]},{tag:'ext',$:{uri:'{9260A510-F301-46a8-8635-F512D64BE5F5}','xmlns:x15':'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main'},c:[{tag:'x15:timelineStyles',$:{defaultTimelineStyle:'TimeSlicerStyleLight1'}}]}]})};// the stylemanager mock acts like StyleManager except that it always returns 0 or {} |
|
|
var StylesXformMock=/*#__PURE__*/function(_StylesXform){_inherits(StylesXformMock,_StylesXform);var _super2=_createSuper(StylesXformMock);function StylesXformMock(){var _this3;_classCallCheck(this,StylesXformMock);_this3=_super2.call(this);_this3.model={styles:[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}],numFmts:[],fonts:[{size:11,color:{theme:1},name:'Calibri',family:2,scheme:'minor'}],borders:[{}],fills:[{type:'pattern',pattern:'none'},{type:'pattern',pattern:'gray125'}]};return _this3;}// ========================================================================= |
|
|
// Style Manager Interface |
|
|
// override normal behaviour - consume and dispose |
|
|
_createClass(StylesXformMock,[{key:"parseStream",value:function parseStream(stream){stream.autodrain();return Promise.resolve();}// add a cell's style model to the collection |
|
|
// each style property is processed and cross-referenced, etc. |
|
|
// the styleId is returned. Note: cellType is used when numFmt not defined |
|
|
},{key:"addStyleModel",value:function addStyleModel(model,cellType){switch(cellType){case Enums.ValueType.Date:return this.dateStyleId;default:return 0;}}},{key:"getStyleModel",// given a styleId (i.e. s="n"), get the cell's style model |
|
|
// objects are shared where possible. |
|
|
value:function getStyleModel()/* id */{return{};}},{key:"dateStyleId",get:function get(){if(!this._dateStyleId){var dateStyle={numFmtId:NumFmtXform.getDefaultFmtId('mm-dd-yy')};this._dateStyleId=this.model.styles.length;this.model.styles.push(dateStyle);}return this._dateStyleId;}}]);return StylesXformMock;}(StylesXform);StylesXform.Mock=StylesXformMock;module.exports=StylesXform;},{"../../../doc/enums":7,"../../../utils/xml-stream":25,"../base-xform":29,"../list-xform":68,"../static-xform":117,"./border-xform":124,"./dxf-xform":126,"./fill-xform":127,"./font-xform":128,"./numfmt-xform":129,"./style-xform":131}],133:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var UnderlineXform=/*#__PURE__*/function(_BaseXform){_inherits(UnderlineXform,_BaseXform);var _super=_createSuper(UnderlineXform);function UnderlineXform(model){var _this;_classCallCheck(this,UnderlineXform);_this=_super.call(this);_this.model=model;return _this;}_createClass(UnderlineXform,[{key:"render",value:function render(xmlStream,model){model=model||this.model;if(model===true){xmlStream.leafNode('u');}else{var attr=UnderlineXform.Attributes[model];if(attr){xmlStream.leafNode('u',attr);}}}},{key:"parseOpen",value:function parseOpen(node){if(node.name==='u'){this.model=node.attributes.val||true;}}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'u';}}]);return UnderlineXform;}(BaseXform);UnderlineXform.Attributes={single:{},double:{val:'double'},singleAccounting:{val:'singleAccounting'},doubleAccounting:{val:'doubleAccounting'}};module.exports=UnderlineXform;},{"../base-xform":29}],134:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var FilterColumnXform=require('./filter-column-xform');var AutoFilterXform=/*#__PURE__*/function(_BaseXform){_inherits(AutoFilterXform,_BaseXform);var _super=_createSuper(AutoFilterXform);function AutoFilterXform(){var _this;_classCallCheck(this,AutoFilterXform);_this=_super.call(this);_this.map={filterColumn:new FilterColumnXform()};return _this;}_createClass(AutoFilterXform,[{key:"prepare",value:function prepare(model){var _this2=this;model.columns.forEach(function(column,index){_this2.map.filterColumn.prepare(column,{index:index});});}},{key:"render",value:function render(xmlStream,model){var _this3=this;xmlStream.openNode(this.tag,{ref:model.autoFilterRef});model.columns.forEach(function(column){_this3.map.filterColumn.render(xmlStream,column);});xmlStream.closeNode();return true;}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}switch(node.name){case this.tag:this.model={autoFilterRef:node.attributes.ref,columns:[]};return true;default:this.parser=this.map[node.name];if(this.parser){this.parseOpen(node);return true;}throw new Error("Unexpected xml node in parseOpen: ".concat(JSON.stringify(node)));}}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){if(this.parser){if(!this.parser.parseClose(name)){this.model.columns.push(this.parser.model);this.parser=undefined;}return true;}switch(name){case this.tag:return false;default:throw new Error("Unexpected xml node in parseClose: ".concat(name));}}},{key:"tag",get:function get(){return'autoFilter';}}]);return AutoFilterXform;}(BaseXform);module.exports=AutoFilterXform;},{"../base-xform":29,"./filter-column-xform":135}],135:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var FilterColumnXform=/*#__PURE__*/function(_BaseXform){_inherits(FilterColumnXform,_BaseXform);var _super=_createSuper(FilterColumnXform);function FilterColumnXform(){_classCallCheck(this,FilterColumnXform);return _super.apply(this,arguments);}_createClass(FilterColumnXform,[{key:"prepare",value:function prepare(model,options){model.colId=options.index.toString();}},{key:"render",value:function render(xmlStream,model){xmlStream.leafNode(this.tag,{colId:model.colId,hiddenButton:model.filterButton?'0':'1'});return true;}},{key:"parseOpen",value:function parseOpen(node){if(node.name===this.tag){var attributes=node.attributes;this.model={filterButton:attributes.hiddenButton==='0'};return true;}return false;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'filterColumn';}}]);return FilterColumnXform;}(BaseXform);module.exports=FilterColumnXform;},{"../base-xform":29}],136:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var TableColumnXform=/*#__PURE__*/function(_BaseXform){_inherits(TableColumnXform,_BaseXform);var _super=_createSuper(TableColumnXform);function TableColumnXform(){_classCallCheck(this,TableColumnXform);return _super.apply(this,arguments);}_createClass(TableColumnXform,[{key:"prepare",value:function prepare(model,options){model.id=options.index+1;}},{key:"render",value:function render(xmlStream,model){xmlStream.leafNode(this.tag,{id:model.id.toString(),name:model.name,totalsRowLabel:model.totalsRowLabel,totalsRowFunction:model.totalsRowFunction,dxfId:model.dxfId});return true;}},{key:"parseOpen",value:function parseOpen(node){if(node.name===this.tag){var attributes=node.attributes;this.model={name:attributes.name,totalsRowLabel:attributes.totalsRowLabel,totalsRowFunction:attributes.totalsRowFunction,dxfId:attributes.dxfId};return true;}return false;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'tableColumn';}}]);return TableColumnXform;}(BaseXform);module.exports=TableColumnXform;},{"../base-xform":29}],137:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var BaseXform=require('../base-xform');var TableStyleInfoXform=/*#__PURE__*/function(_BaseXform){_inherits(TableStyleInfoXform,_BaseXform);var _super=_createSuper(TableStyleInfoXform);function TableStyleInfoXform(){_classCallCheck(this,TableStyleInfoXform);return _super.apply(this,arguments);}_createClass(TableStyleInfoXform,[{key:"render",value:function render(xmlStream,model){xmlStream.leafNode(this.tag,{name:model.theme?model.theme:undefined,showFirstColumn:model.showFirstColumn?'1':'0',showLastColumn:model.showLastColumn?'1':'0',showRowStripes:model.showRowStripes?'1':'0',showColumnStripes:model.showColumnStripes?'1':'0'});return true;}},{key:"parseOpen",value:function parseOpen(node){if(node.name===this.tag){var attributes=node.attributes;this.model={theme:attributes.name?attributes.name:null,showFirstColumn:attributes.showFirstColumn==='1',showLastColumn:attributes.showLastColumn==='1',showRowStripes:attributes.showRowStripes==='1',showColumnStripes:attributes.showColumnStripes==='1'};return true;}return false;}},{key:"parseText",value:function parseText(){}},{key:"parseClose",value:function parseClose(){return false;}},{key:"tag",get:function get(){return'tableStyleInfo';}}]);return TableStyleInfoXform;}(BaseXform);module.exports=TableStyleInfoXform;},{"../base-xform":29}],138:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly)symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;});keys.push.apply(keys,symbols);}return keys;}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};if(i%2){ownKeys(Object(source),true).forEach(function(key){_defineProperty(target,key,source[key]);});}else if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source));}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key));});}}return target;}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){return function(){var Super=_getPrototypeOf(Derived),result;if(_isNativeReflectConstruct()){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var XmlStream=require('../../../utils/xml-stream');var BaseXform=require('../base-xform');var ListXform=require('../list-xform');var AutoFilterXform=require('./auto-filter-xform');var TableColumnXform=require('./table-column-xform');var TableStyleInfoXform=require('./table-style-info-xform');var TableXform=/*#__PURE__*/function(_BaseXform){_inherits(TableXform,_BaseXform);var _super=_createSuper(TableXform);function TableXform(){var _this;_classCallCheck(this,TableXform);_this=_super.call(this);_this.map={autoFilter:new AutoFilterXform(),tableColumns:new ListXform({tag:'tableColumns',count:true,empty:true,childXform:new TableColumnXform()}),tableStyleInfo:new TableStyleInfoXform()};return _this;}_createClass(TableXform,[{key:"prepare",value:function prepare(model,options){this.map.autoFilter.prepare(model);this.map.tableColumns.prepare(model.columns,options);}},{key:"render",value:function render(xmlStream,model){xmlStream.openXml(XmlStream.StdDocAttributes);xmlStream.openNode(this.tag,_objectSpread(_objectSpread({},TableXform.TABLE_ATTRIBUTES),{},{id:model.id,name:model.name,displayName:model.displayName||model.name,ref:model.tableRef,totalsRowCount:model.totalsRow?'1':undefined,totalsRowShown:model.totalsRow?undefined:'1',headerRowCount:model.headerRow?'1':'0'}));this.map.autoFilter.render(xmlStream,model);this.map.tableColumns.render(xmlStream,model.columns);this.map.tableStyleInfo.render(xmlStream,model.style);xmlStream.closeNode();}},{key:"parseOpen",value:function parseOpen(node){if(this.parser){this.parser.parseOpen(node);return true;}var name=node.name,attributes=node.attributes;switch(name){case this.tag:this.reset();this.model={name:attributes.name,displayName:attributes.displayName||attributes.name,tableRef:attributes.ref,totalsRow:attributes.totalsRowCount==='1',headerRow:attributes.headerRowCount==='1'};break;default:this.parser=this.map[node.name];if(this.parser){this.parser.parseOpen(node);}break;}return true;}},{key:"parseText",value:function parseText(text){if(this.parser){this.parser.parseText(text);}}},{key:"parseClose",value:function parseClose(name){var _this2=this;if(this.parser){if(!this.parser.parseClose(name)){this.parser=undefined;}return true;}switch(name){case this.tag:this.model.columns=this.map.tableColumns.model;if(this.map.autoFilter.model){this.model.autoFilterRef=this.map.autoFilter.model.autoFilterRef;this.map.autoFilter.model.columns.forEach(function(column,index){_this2.model.columns[index].filterButton=column.filterButton;});}this.model.style=this.map.tableStyleInfo.model;return false;default:// could be some unrecognised tags |
|
|
return true;}}},{key:"reconcile",value:function reconcile(model,options){// fetch the dfxs from styles |
|
|
model.columns.forEach(function(column){if(column.dxfId!==undefined){column.style=options.styles.getDxfStyle(column.dxfId);}});}},{key:"tag",get:function get(){return'table';}}]);return TableXform;}(BaseXform);TableXform.TABLE_ATTRIBUTES={xmlns:'http://schemas.openxmlformats.org/spreadsheetml/2006/main','xmlns:mc':'http://schemas.openxmlformats.org/markup-compatibility/2006','mc:Ignorable':'xr xr3','xmlns:xr':'http://schemas.microsoft.com/office/spreadsheetml/2014/revision','xmlns:xr3':'http://schemas.microsoft.com/office/spreadsheetml/2016/revision3'// 'xr:uid': '{00000000-000C-0000-FFFF-FFFF00000000}', |
|
|
};module.exports=TableXform;},{"../../../utils/xml-stream":25,"../base-xform":29,"../list-xform":68,"./auto-filter-xform":134,"./table-column-xform":136,"./table-style-info-xform":137}],139:[function(require,module,exports){(function(Buffer){"use strict";function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value;}catch(error){reject(error);return;}if(info.done){resolve(value);}else{Promise.resolve(value).then(_next,_throw);}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value);}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err);}_next(undefined);});};}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _asyncIterator(iterable){var method;if(typeof Symbol!=="undefined"){if(Symbol.asyncIterator){method=iterable[Symbol.asyncIterator];if(method!=null)return method.call(iterable);}if(Symbol.iterator){method=iterable[Symbol.iterator];if(method!=null)return method.call(iterable);}}throw new TypeError("Object is not async iterable");}var fs=require('fs');var JSZip=require('jszip');var _require=require('readable-stream'),PassThrough=_require.PassThrough;var ZipStream=require('../utils/zip-stream');var StreamBuf=require('../utils/stream-buf');var utils=require('../utils/utils');var XmlStream=require('../utils/xml-stream');var StylesXform=require('./xform/style/styles-xform');var CoreXform=require('./xform/core/core-xform');var SharedStringsXform=require('./xform/strings/shared-strings-xform');var RelationshipsXform=require('./xform/core/relationships-xform');var ContentTypesXform=require('./xform/core/content-types-xform');var AppXform=require('./xform/core/app-xform');var WorkbookXform=require('./xform/book/workbook-xform');var WorksheetXform=require('./xform/sheet/worksheet-xform');var DrawingXform=require('./xform/drawing/drawing-xform');var TableXform=require('./xform/table/table-xform');var CommentsXform=require('./xform/comment/comments-xform');var VmlNotesXform=require('./xform/comment/vml-notes-xform');var theme1Xml=require('./xml/theme1.js');function fsReadFileAsync(filename,options){return new Promise(function(resolve,reject){fs.readFile(filename,options,function(error,data){if(error){reject(error);}else{resolve(data);}});});}var XLSX=/*#__PURE__*/function(){function XLSX(workbook){_classCallCheck(this,XLSX);this.workbook=workbook;}// =============================================================================== |
|
|
// Workbook |
|
|
// ========================================================================= |
|
|
// Read |
|
|
_createClass(XLSX,[{key:"readFile",value:function(){var _readFile=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee(filename,options){var stream,workbook;return regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:_context.next=2;return utils.fs.exists(filename);case 2:if(_context.sent){_context.next=4;break;}throw new Error("File not found: ".concat(filename));case 4:stream=fs.createReadStream(filename);_context.prev=5;_context.next=8;return this.read(stream,options);case 8:workbook=_context.sent;stream.close();return _context.abrupt("return",workbook);case 13:_context.prev=13;_context.t0=_context["catch"](5);stream.close();throw _context.t0;case 17:case"end":return _context.stop();}}},_callee,this,[[5,13]]);}));function readFile(_x,_x2){return _readFile.apply(this,arguments);}return readFile;}()},{key:"parseRels",value:function parseRels(stream){var xform=new RelationshipsXform();return xform.parseStream(stream);}},{key:"parseWorkbook",value:function parseWorkbook(stream){var xform=new WorkbookXform();return xform.parseStream(stream);}},{key:"parseSharedStrings",value:function parseSharedStrings(stream){var xform=new SharedStringsXform();return xform.parseStream(stream);}},{key:"reconcile",value:function reconcile(model,options){var workbookXform=new WorkbookXform();var worksheetXform=new WorksheetXform(options);var drawingXform=new DrawingXform();var tableXform=new TableXform();workbookXform.reconcile(model);// reconcile drawings with their rels |
|
|
var drawingOptions={media:model.media,mediaIndex:model.mediaIndex};Object.keys(model.drawings).forEach(function(name){var drawing=model.drawings[name];var drawingRel=model.drawingRels[name];if(drawingRel){drawingOptions.rels=drawingRel.reduce(function(o,rel){o[rel.Id]=rel;return o;},{});(drawing.anchors||[]).forEach(function(anchor){var hyperlinks=anchor.picture&&anchor.picture.hyperlinks;if(hyperlinks&&drawingOptions.rels[hyperlinks.rId]){hyperlinks.hyperlink=drawingOptions.rels[hyperlinks.rId].Target;delete hyperlinks.rId;}});drawingXform.reconcile(drawing,drawingOptions);}});// reconcile tables with the default styles |
|
|
var tableOptions={styles:model.styles};Object.values(model.tables).forEach(function(table){tableXform.reconcile(table,tableOptions);});var sheetOptions={styles:model.styles,sharedStrings:model.sharedStrings,media:model.media,mediaIndex:model.mediaIndex,date1904:model.properties&&model.properties.date1904,drawings:model.drawings,comments:model.comments,tables:model.tables,vmlDrawings:model.vmlDrawings};model.worksheets.forEach(function(worksheet){worksheet.relationships=model.worksheetRels[worksheet.sheetNo];worksheetXform.reconcile(worksheet,sheetOptions);});// delete unnecessary parts |
|
|
delete model.worksheetHash;delete model.worksheetRels;delete model.globalRels;delete model.sharedStrings;delete model.workbookRels;delete model.sheetDefs;delete model.styles;delete model.mediaIndex;delete model.drawings;delete model.drawingRels;delete model.vmlDrawings;}},{key:"_processWorksheetEntry",value:function(){var _processWorksheetEntry2=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee2(stream,model,sheetNo,options,path){var xform,worksheet;return regeneratorRuntime.wrap(function _callee2$(_context2){while(1){switch(_context2.prev=_context2.next){case 0:xform=new WorksheetXform(options);_context2.next=3;return xform.parseStream(stream);case 3:worksheet=_context2.sent;worksheet.sheetNo=sheetNo;model.worksheetHash[path]=worksheet;model.worksheets.push(worksheet);case 7:case"end":return _context2.stop();}}},_callee2);}));function _processWorksheetEntry(_x3,_x4,_x5,_x6,_x7){return _processWorksheetEntry2.apply(this,arguments);}return _processWorksheetEntry;}()},{key:"_processCommentEntry",value:function(){var _processCommentEntry2=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee3(stream,model,name){var xform,comments;return regeneratorRuntime.wrap(function _callee3$(_context3){while(1){switch(_context3.prev=_context3.next){case 0:xform=new CommentsXform();_context3.next=3;return xform.parseStream(stream);case 3:comments=_context3.sent;model.comments["../".concat(name,".xml")]=comments;case 5:case"end":return _context3.stop();}}},_callee3);}));function _processCommentEntry(_x8,_x9,_x10){return _processCommentEntry2.apply(this,arguments);}return _processCommentEntry;}()},{key:"_processTableEntry",value:function(){var _processTableEntry2=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee4(stream,model,name){var xform,table;return regeneratorRuntime.wrap(function _callee4$(_context4){while(1){switch(_context4.prev=_context4.next){case 0:xform=new TableXform();_context4.next=3;return xform.parseStream(stream);case 3:table=_context4.sent;model.tables["../tables/".concat(name,".xml")]=table;case 5:case"end":return _context4.stop();}}},_callee4);}));function _processTableEntry(_x11,_x12,_x13){return _processTableEntry2.apply(this,arguments);}return _processTableEntry;}()},{key:"_processWorksheetRelsEntry",value:function(){var _processWorksheetRelsEntry2=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee5(stream,model,sheetNo){var xform,relationships;return regeneratorRuntime.wrap(function _callee5$(_context5){while(1){switch(_context5.prev=_context5.next){case 0:xform=new RelationshipsXform();_context5.next=3;return xform.parseStream(stream);case 3:relationships=_context5.sent;model.worksheetRels[sheetNo]=relationships;case 5:case"end":return _context5.stop();}}},_callee5);}));function _processWorksheetRelsEntry(_x14,_x15,_x16){return _processWorksheetRelsEntry2.apply(this,arguments);}return _processWorksheetRelsEntry;}()},{key:"_processMediaEntry",value:function(){var _processMediaEntry2=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee6(entry,model,filename){var lastDot,extension,name;return regeneratorRuntime.wrap(function _callee6$(_context6){while(1){switch(_context6.prev=_context6.next){case 0:lastDot=filename.lastIndexOf('.');// if we can't determine extension, ignore it |
|
|
if(!(lastDot>=1)){_context6.next=6;break;}extension=filename.substr(lastDot+1);name=filename.substr(0,lastDot);_context6.next=6;return new Promise(function(resolve,reject){var streamBuf=new StreamBuf();streamBuf.on('finish',function(){model.mediaIndex[filename]=model.media.length;model.mediaIndex[name]=model.media.length;var medium={type:'image',name:name,extension:extension,buffer:streamBuf.toBuffer()};model.media.push(medium);resolve();});entry.on('error',function(error){reject(error);});entry.pipe(streamBuf);});case 6:case"end":return _context6.stop();}}},_callee6);}));function _processMediaEntry(_x17,_x18,_x19){return _processMediaEntry2.apply(this,arguments);}return _processMediaEntry;}()},{key:"_processDrawingEntry",value:function(){var _processDrawingEntry2=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee7(entry,model,name){var xform,drawing;return regeneratorRuntime.wrap(function _callee7$(_context7){while(1){switch(_context7.prev=_context7.next){case 0:xform=new DrawingXform();_context7.next=3;return xform.parseStream(entry);case 3:drawing=_context7.sent;model.drawings[name]=drawing;case 5:case"end":return _context7.stop();}}},_callee7);}));function _processDrawingEntry(_x20,_x21,_x22){return _processDrawingEntry2.apply(this,arguments);}return _processDrawingEntry;}()},{key:"_processDrawingRelsEntry",value:function(){var _processDrawingRelsEntry2=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee8(entry,model,name){var xform,relationships;return regeneratorRuntime.wrap(function _callee8$(_context8){while(1){switch(_context8.prev=_context8.next){case 0:xform=new RelationshipsXform();_context8.next=3;return xform.parseStream(entry);case 3:relationships=_context8.sent;model.drawingRels[name]=relationships;case 5:case"end":return _context8.stop();}}},_callee8);}));function _processDrawingRelsEntry(_x23,_x24,_x25){return _processDrawingRelsEntry2.apply(this,arguments);}return _processDrawingRelsEntry;}()},{key:"_processVmlDrawingEntry",value:function(){var _processVmlDrawingEntry2=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee9(entry,model,name){var xform,vmlDrawing;return regeneratorRuntime.wrap(function _callee9$(_context9){while(1){switch(_context9.prev=_context9.next){case 0:xform=new VmlNotesXform();_context9.next=3;return xform.parseStream(entry);case 3:vmlDrawing=_context9.sent;model.vmlDrawings["../drawings/".concat(name,".vml")]=vmlDrawing;case 5:case"end":return _context9.stop();}}},_callee9);}));function _processVmlDrawingEntry(_x26,_x27,_x28){return _processVmlDrawingEntry2.apply(this,arguments);}return _processVmlDrawingEntry;}()},{key:"_processThemeEntry",value:function(){var _processThemeEntry2=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee10(entry,model,name){return regeneratorRuntime.wrap(function _callee10$(_context10){while(1){switch(_context10.prev=_context10.next){case 0:_context10.next=2;return new Promise(function(resolve,reject){// TODO: stream entry into buffer and store the xml in the model.themes[] |
|
|
var stream=new StreamBuf();entry.on('error',reject);stream.on('error',reject);stream.on('finish',function(){model.themes[name]=stream.read().toString();resolve();});entry.pipe(stream);});case 2:case"end":return _context10.stop();}}},_callee10);}));function _processThemeEntry(_x29,_x30,_x31){return _processThemeEntry2.apply(this,arguments);}return _processThemeEntry;}()/** |
|
|
* @deprecated since version 4.0. You should use `#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md |
|
|
*/},{key:"createInputStream",value:function createInputStream(){throw new Error('`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md');}},{key:"read",value:function(){var _read=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee11(stream,options){var chunks,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_iterator,_step,_value,chunk;return regeneratorRuntime.wrap(function _callee11$(_context11){while(1){switch(_context11.prev=_context11.next){case 0:// TODO: Remove once node v8 is deprecated |
|
|
// Detect and upgrade old streams |
|
|
if(!stream[Symbol.asyncIterator]&&stream.pipe){stream=stream.pipe(new PassThrough());}chunks=[];_iteratorNormalCompletion=true;_didIteratorError=false;_context11.prev=4;_iterator=_asyncIterator(stream);case 6:_context11.next=8;return _iterator.next();case 8:_step=_context11.sent;_iteratorNormalCompletion=_step.done;_context11.next=12;return _step.value;case 12:_value=_context11.sent;if(_iteratorNormalCompletion){_context11.next=19;break;}chunk=_value;chunks.push(chunk);case 16:_iteratorNormalCompletion=true;_context11.next=6;break;case 19:_context11.next=25;break;case 21:_context11.prev=21;_context11.t0=_context11["catch"](4);_didIteratorError=true;_iteratorError=_context11.t0;case 25:_context11.prev=25;_context11.prev=26;if(!(!_iteratorNormalCompletion&&_iterator.return!=null)){_context11.next=30;break;}_context11.next=30;return _iterator.return();case 30:_context11.prev=30;if(!_didIteratorError){_context11.next=33;break;}throw _iteratorError;case 33:return _context11.finish(30);case 34:return _context11.finish(25);case 35:return _context11.abrupt("return",this.load(Buffer.concat(chunks),options));case 36:case"end":return _context11.stop();}}},_callee11,this,[[4,21,25,35],[26,,30,34]]);}));function read(_x32,_x33){return _read.apply(this,arguments);}return read;}()},{key:"load",value:function(){var _load=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee12(data,options){var buffer,model,zip,_i,_Object$values,entry,entryName,stream,content,chunkSize,i,workbook,appXform,appProperties,coreXform,coreProperties,match;return regeneratorRuntime.wrap(function _callee12$(_context12){while(1){switch(_context12.prev=_context12.next){case 0:if(options&&options.base64){buffer=Buffer.from(data.toString(),'base64');}else{buffer=data;}model={worksheets:[],worksheetHash:{},worksheetRels:[],themes:{},media:[],mediaIndex:{},drawings:{},drawingRels:{},comments:{},tables:{},vmlDrawings:{}};_context12.next=4;return JSZip.loadAsync(buffer);case 4:zip=_context12.sent;_i=0,_Object$values=Object.values(zip.files);case 6:if(!(_i<_Object$values.length)){_context12.next=115;break;}entry=_Object$values[_i];if(entry.dir){_context12.next=112;break;}entryName=entry.name;if(entryName[0]==='/'){entryName=entryName.substr(1);}stream=new PassThrough();if(!entryName.match(/xl\/media\//)){_context12.next=20;break;}_context12.t0=stream;_context12.next=16;return entry.async('nodebuffer');case 16:_context12.t1=_context12.sent;_context12.t0.write.call(_context12.t0,_context12.t1);_context12.next=25;break;case 20:_context12.next=22;return entry.async('string');case 22:content=_context12.sent;chunkSize=16*1024;for(i=0;i<content.length;i+=chunkSize){stream.write(content.substring(i,i+chunkSize));}case 25:stream.end();_context12.t2=entryName;_context12.next=_context12.t2==='_rels/.rels'?29:_context12.t2==='xl/workbook.xml'?33:_context12.t2==='xl/_rels/workbook.xml.rels'?42:_context12.t2==='xl/sharedStrings.xml'?46:_context12.t2==='xl/styles.xml'?50:_context12.t2==='docProps/app.xml'?54:_context12.t2==='docProps/core.xml'?61:67;break;case 29:_context12.next=31;return this.parseRels(stream);case 31:model.globalRels=_context12.sent;return _context12.abrupt("break",112);case 33:_context12.next=35;return this.parseWorkbook(stream);case 35:workbook=_context12.sent;model.sheets=workbook.sheets;model.definedNames=workbook.definedNames;model.views=workbook.views;model.properties=workbook.properties;model.calcProperties=workbook.calcProperties;return _context12.abrupt("break",112);case 42:_context12.next=44;return this.parseRels(stream);case 44:model.workbookRels=_context12.sent;return _context12.abrupt("break",112);case 46:model.sharedStrings=new SharedStringsXform();_context12.next=49;return model.sharedStrings.parseStream(stream);case 49:return _context12.abrupt("break",112);case 50:model.styles=new StylesXform();_context12.next=53;return model.styles.parseStream(stream);case 53:return _context12.abrupt("break",112);case 54:appXform=new AppXform();_context12.next=57;return appXform.parseStream(stream);case 57:appProperties=_context12.sent;model.company=appProperties.company;model.manager=appProperties.manager;return _context12.abrupt("break",112);case 61:coreXform=new CoreXform();_context12.next=64;return coreXform.parseStream(stream);case 64:coreProperties=_context12.sent;Object.assign(model,coreProperties);return _context12.abrupt("break",112);case 67:match=entryName.match(/xl\/worksheets\/sheet(\d+)[.]xml/);if(!match){_context12.next=72;break;}_context12.next=71;return this._processWorksheetEntry(stream,model,match[1],options,entryName);case 71:return _context12.abrupt("break",112);case 72:match=entryName.match(/xl\/worksheets\/_rels\/sheet(\d+)[.]xml.rels/);if(!match){_context12.next=77;break;}_context12.next=76;return this._processWorksheetRelsEntry(stream,model,match[1]);case 76:return _context12.abrupt("break",112);case 77:match=entryName.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/);if(!match){_context12.next=82;break;}_context12.next=81;return this._processThemeEntry(stream,model,match[1]);case 81:return _context12.abrupt("break",112);case 82:match=entryName.match(/xl\/media\/([a-zA-Z0-9]+[.][a-zA-Z0-9]{3,4})$/);if(!match){_context12.next=87;break;}_context12.next=86;return this._processMediaEntry(stream,model,match[1]);case 86:return _context12.abrupt("break",112);case 87:match=entryName.match(/xl\/drawings\/([a-zA-Z0-9]+)[.]xml/);if(!match){_context12.next=92;break;}_context12.next=91;return this._processDrawingEntry(stream,model,match[1]);case 91:return _context12.abrupt("break",112);case 92:match=entryName.match(/xl\/(comments\d+)[.]xml/);if(!match){_context12.next=97;break;}_context12.next=96;return this._processCommentEntry(stream,model,match[1]);case 96:return _context12.abrupt("break",112);case 97:match=entryName.match(/xl\/tables\/(table\d+)[.]xml/);if(!match){_context12.next=102;break;}_context12.next=101;return this._processTableEntry(stream,model,match[1]);case 101:return _context12.abrupt("break",112);case 102:match=entryName.match(/xl\/drawings\/_rels\/([a-zA-Z0-9]+)[.]xml[.]rels/);if(!match){_context12.next=107;break;}_context12.next=106;return this._processDrawingRelsEntry(stream,model,match[1]);case 106:return _context12.abrupt("break",112);case 107:match=entryName.match(/xl\/drawings\/(vmlDrawing\d+)[.]vml/);if(!match){_context12.next=112;break;}_context12.next=111;return this._processVmlDrawingEntry(stream,model,match[1]);case 111:return _context12.abrupt("break",112);case 112:_i++;_context12.next=6;break;case 115:this.reconcile(model,options);// apply model |
|
|
this.workbook.model=model;return _context12.abrupt("return",this.workbook);case 118:case"end":return _context12.stop();}}},_callee12,this);}));function load(_x34,_x35){return _load.apply(this,arguments);}return load;}()// ========================================================================= |
|
|
// Write |
|
|
},{key:"addMedia",value:function(){var _addMedia=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee14(zip,model){return regeneratorRuntime.wrap(function _callee14$(_context14){while(1){switch(_context14.prev=_context14.next){case 0:_context14.next=2;return Promise.all(model.media.map(/*#__PURE__*/function(){var _ref=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee13(medium){var filename,data,dataimg64,content;return regeneratorRuntime.wrap(function _callee13$(_context13){while(1){switch(_context13.prev=_context13.next){case 0:if(!(medium.type==='image')){_context13.next=13;break;}filename="xl/media/".concat(medium.name,".").concat(medium.extension);if(!medium.filename){_context13.next=7;break;}_context13.next=5;return fsReadFileAsync(medium.filename);case 5:data=_context13.sent;return _context13.abrupt("return",zip.append(data,{name:filename}));case 7:if(!medium.buffer){_context13.next=9;break;}return _context13.abrupt("return",zip.append(medium.buffer,{name:filename}));case 9:if(!medium.base64){_context13.next=13;break;}dataimg64=medium.base64;content=dataimg64.substring(dataimg64.indexOf(',')+1);return _context13.abrupt("return",zip.append(content,{name:filename,base64:true}));case 13:throw new Error('Unsupported media');case 14:case"end":return _context13.stop();}}},_callee13);}));return function(_x38){return _ref.apply(this,arguments);};}()));case 2:case"end":return _context14.stop();}}},_callee14);}));function addMedia(_x36,_x37){return _addMedia.apply(this,arguments);}return addMedia;}()},{key:"addDrawings",value:function addDrawings(zip,model){var drawingXform=new DrawingXform();var relsXform=new RelationshipsXform();model.worksheets.forEach(function(worksheet){var drawing=worksheet.drawing;if(drawing){drawingXform.prepare(drawing,{});var xml=drawingXform.toXml(drawing);zip.append(xml,{name:"xl/drawings/".concat(drawing.name,".xml")});xml=relsXform.toXml(drawing.rels);zip.append(xml,{name:"xl/drawings/_rels/".concat(drawing.name,".xml.rels")});}});}},{key:"addTables",value:function addTables(zip,model){var tableXform=new TableXform();model.worksheets.forEach(function(worksheet){var tables=worksheet.tables;tables.forEach(function(table){tableXform.prepare(table,{});var tableXml=tableXform.toXml(table);zip.append(tableXml,{name:"xl/tables/".concat(table.target)});});});}},{key:"addContentTypes",value:function(){var _addContentTypes=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee15(zip,model){var xform,xml;return regeneratorRuntime.wrap(function _callee15$(_context15){while(1){switch(_context15.prev=_context15.next){case 0:xform=new ContentTypesXform();xml=xform.toXml(model);zip.append(xml,{name:'[Content_Types].xml'});case 3:case"end":return _context15.stop();}}},_callee15);}));function addContentTypes(_x39,_x40){return _addContentTypes.apply(this,arguments);}return addContentTypes;}()},{key:"addApp",value:function(){var _addApp=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee16(zip,model){var xform,xml;return regeneratorRuntime.wrap(function _callee16$(_context16){while(1){switch(_context16.prev=_context16.next){case 0:xform=new AppXform();xml=xform.toXml(model);zip.append(xml,{name:'docProps/app.xml'});case 3:case"end":return _context16.stop();}}},_callee16);}));function addApp(_x41,_x42){return _addApp.apply(this,arguments);}return addApp;}()},{key:"addCore",value:function(){var _addCore=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee17(zip,model){var coreXform;return regeneratorRuntime.wrap(function _callee17$(_context17){while(1){switch(_context17.prev=_context17.next){case 0:coreXform=new CoreXform();zip.append(coreXform.toXml(model),{name:'docProps/core.xml'});case 2:case"end":return _context17.stop();}}},_callee17);}));function addCore(_x43,_x44){return _addCore.apply(this,arguments);}return addCore;}()},{key:"addThemes",value:function(){var _addThemes=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee18(zip,model){var themes;return regeneratorRuntime.wrap(function _callee18$(_context18){while(1){switch(_context18.prev=_context18.next){case 0:themes=model.themes||{theme1:theme1Xml};Object.keys(themes).forEach(function(name){var xml=themes[name];var path="xl/theme/".concat(name,".xml");zip.append(xml,{name:path});});case 2:case"end":return _context18.stop();}}},_callee18);}));function addThemes(_x45,_x46){return _addThemes.apply(this,arguments);}return addThemes;}()},{key:"addOfficeRels",value:function(){var _addOfficeRels=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee19(zip){var xform,xml;return regeneratorRuntime.wrap(function _callee19$(_context19){while(1){switch(_context19.prev=_context19.next){case 0:xform=new RelationshipsXform();xml=xform.toXml([{Id:'rId1',Type:XLSX.RelType.OfficeDocument,Target:'xl/workbook.xml'},{Id:'rId2',Type:XLSX.RelType.CoreProperties,Target:'docProps/core.xml'},{Id:'rId3',Type:XLSX.RelType.ExtenderProperties,Target:'docProps/app.xml'}]);zip.append(xml,{name:'_rels/.rels'});case 3:case"end":return _context19.stop();}}},_callee19);}));function addOfficeRels(_x47){return _addOfficeRels.apply(this,arguments);}return addOfficeRels;}()},{key:"addWorkbookRels",value:function(){var _addWorkbookRels=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee20(zip,model){var count,relationships,xform,xml;return regeneratorRuntime.wrap(function _callee20$(_context20){while(1){switch(_context20.prev=_context20.next){case 0:count=1;relationships=[{Id:"rId".concat(count++),Type:XLSX.RelType.Styles,Target:'styles.xml'},{Id:"rId".concat(count++),Type:XLSX.RelType.Theme,Target:'theme/theme1.xml'}];if(model.sharedStrings.count){relationships.push({Id:"rId".concat(count++),Type:XLSX.RelType.SharedStrings,Target:'sharedStrings.xml'});}model.worksheets.forEach(function(worksheet){worksheet.rId="rId".concat(count++);relationships.push({Id:worksheet.rId,Type:XLSX.RelType.Worksheet,Target:"worksheets/sheet".concat(worksheet.id,".xml")});});xform=new RelationshipsXform();xml=xform.toXml(relationships);zip.append(xml,{name:'xl/_rels/workbook.xml.rels'});case 7:case"end":return _context20.stop();}}},_callee20);}));function addWorkbookRels(_x48,_x49){return _addWorkbookRels.apply(this,arguments);}return addWorkbookRels;}()},{key:"addSharedStrings",value:function(){var _addSharedStrings=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee21(zip,model){return regeneratorRuntime.wrap(function _callee21$(_context21){while(1){switch(_context21.prev=_context21.next){case 0:if(model.sharedStrings&&model.sharedStrings.count){zip.append(model.sharedStrings.xml,{name:'xl/sharedStrings.xml'});}case 1:case"end":return _context21.stop();}}},_callee21);}));function addSharedStrings(_x50,_x51){return _addSharedStrings.apply(this,arguments);}return addSharedStrings;}()},{key:"addStyles",value:function(){var _addStyles=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee22(zip,model){var xml;return regeneratorRuntime.wrap(function _callee22$(_context22){while(1){switch(_context22.prev=_context22.next){case 0:xml=model.styles.xml;if(xml){zip.append(xml,{name:'xl/styles.xml'});}case 2:case"end":return _context22.stop();}}},_callee22);}));function addStyles(_x52,_x53){return _addStyles.apply(this,arguments);}return addStyles;}()},{key:"addWorkbook",value:function(){var _addWorkbook=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee23(zip,model){var xform;return regeneratorRuntime.wrap(function _callee23$(_context23){while(1){switch(_context23.prev=_context23.next){case 0:xform=new WorkbookXform();zip.append(xform.toXml(model),{name:'xl/workbook.xml'});case 2:case"end":return _context23.stop();}}},_callee23);}));function addWorkbook(_x54,_x55){return _addWorkbook.apply(this,arguments);}return addWorkbook;}()},{key:"addWorksheets",value:function(){var _addWorksheets=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee24(zip,model){var worksheetXform,relationshipsXform,commentsXform,vmlNotesXform;return regeneratorRuntime.wrap(function _callee24$(_context24){while(1){switch(_context24.prev=_context24.next){case 0:// preparation phase |
|
|
worksheetXform=new WorksheetXform();relationshipsXform=new RelationshipsXform();commentsXform=new CommentsXform();vmlNotesXform=new VmlNotesXform();// write sheets |
|
|
model.worksheets.forEach(function(worksheet){var xmlStream=new XmlStream();worksheetXform.render(xmlStream,worksheet);zip.append(xmlStream.xml,{name:"xl/worksheets/sheet".concat(worksheet.id,".xml")});if(worksheet.rels&&worksheet.rels.length){xmlStream=new XmlStream();relationshipsXform.render(xmlStream,worksheet.rels);zip.append(xmlStream.xml,{name:"xl/worksheets/_rels/sheet".concat(worksheet.id,".xml.rels")});}if(worksheet.comments.length>0){xmlStream=new XmlStream();commentsXform.render(xmlStream,worksheet);zip.append(xmlStream.xml,{name:"xl/comments".concat(worksheet.id,".xml")});xmlStream=new XmlStream();vmlNotesXform.render(xmlStream,worksheet);zip.append(xmlStream.xml,{name:"xl/drawings/vmlDrawing".concat(worksheet.id,".vml")});}});case 5:case"end":return _context24.stop();}}},_callee24);}));function addWorksheets(_x56,_x57){return _addWorksheets.apply(this,arguments);}return addWorksheets;}()},{key:"_finalize",value:function _finalize(zip){var _this=this;return new Promise(function(resolve,reject){zip.on('finish',function(){resolve(_this);});zip.on('error',reject);zip.finalize();});}},{key:"prepareModel",value:function prepareModel(model,options){// ensure following properties have sane values |
|
|
model.creator=model.creator||'ExcelJS';model.lastModifiedBy=model.lastModifiedBy||'ExcelJS';model.created=model.created||new Date();model.modified=model.modified||new Date();model.useSharedStrings=options.useSharedStrings!==undefined?options.useSharedStrings:true;model.useStyles=options.useStyles!==undefined?options.useStyles:true;// Manage the shared strings |
|
|
model.sharedStrings=new SharedStringsXform();// add a style manager to handle cell formats, fonts, etc. |
|
|
model.styles=model.useStyles?new StylesXform(true):new StylesXform.Mock();// prepare all of the things before the render |
|
|
var workbookXform=new WorkbookXform();var worksheetXform=new WorksheetXform();workbookXform.prepare(model);var worksheetOptions={sharedStrings:model.sharedStrings,styles:model.styles,date1904:model.properties.date1904,drawingsCount:0,media:model.media};worksheetOptions.drawings=model.drawings=[];worksheetOptions.commentRefs=model.commentRefs=[];var tableCount=0;model.tables=[];model.worksheets.forEach(function(worksheet){// assign unique filenames to tables |
|
|
worksheet.tables.forEach(function(table){tableCount++;table.target="table".concat(tableCount,".xml");table.id=tableCount;model.tables.push(table);});worksheetXform.prepare(worksheet,worksheetOptions);});// TODO: workbook drawing list |
|
|
}},{key:"write",value:function(){var _write=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee25(stream,options){var model,zip;return regeneratorRuntime.wrap(function _callee25$(_context25){while(1){switch(_context25.prev=_context25.next){case 0:options=options||{};model=this.workbook.model;zip=new ZipStream.ZipWriter(options.zip);zip.pipe(stream);this.prepareModel(model,options);// render |
|
|
_context25.next=7;return this.addContentTypes(zip,model);case 7:_context25.next=9;return this.addOfficeRels(zip,model);case 9:_context25.next=11;return this.addWorkbookRels(zip,model);case 11:_context25.next=13;return this.addWorksheets(zip,model);case 13:_context25.next=15;return this.addSharedStrings(zip,model);case 15:_context25.next=17;return this.addDrawings(zip,model);case 17:_context25.next=19;return this.addTables(zip,model);case 19:_context25.next=21;return Promise.all([this.addThemes(zip,model),this.addStyles(zip,model)]);case 21:_context25.next=23;return this.addMedia(zip,model);case 23:_context25.next=25;return Promise.all([this.addApp(zip,model),this.addCore(zip,model)]);case 25:_context25.next=27;return this.addWorkbook(zip,model);case 27:return _context25.abrupt("return",this._finalize(zip));case 28:case"end":return _context25.stop();}}},_callee25,this);}));function write(_x58,_x59){return _write.apply(this,arguments);}return write;}()},{key:"writeFile",value:function writeFile(filename,options){var _this2=this;var stream=fs.createWriteStream(filename);return new Promise(function(resolve,reject){stream.on('finish',function(){resolve();});stream.on('error',function(error){reject(error);});_this2.write(stream,options).then(function(){stream.end();});});}},{key:"writeBuffer",value:function(){var _writeBuffer=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee26(options){var stream;return regeneratorRuntime.wrap(function _callee26$(_context26){while(1){switch(_context26.prev=_context26.next){case 0:stream=new StreamBuf();_context26.next=3;return this.write(stream,options);case 3:return _context26.abrupt("return",stream.read());case 4:case"end":return _context26.stop();}}},_callee26,this);}));function writeBuffer(_x60){return _writeBuffer.apply(this,arguments);}return writeBuffer;}()}]);return XLSX;}();XLSX.RelType=require('./rel-type');module.exports=XLSX;}).call(this,require("buffer").Buffer);},{"../utils/stream-buf":21,"../utils/utils":24,"../utils/xml-stream":25,"../utils/zip-stream":26,"./rel-type":28,"./xform/book/workbook-xform":35,"./xform/comment/comments-xform":37,"./xform/comment/vml-notes-xform":42,"./xform/core/app-xform":48,"./xform/core/content-types-xform":49,"./xform/core/core-xform":50,"./xform/core/relationships-xform":52,"./xform/drawing/drawing-xform":59,"./xform/sheet/worksheet-xform":112,"./xform/strings/shared-strings-xform":121,"./xform/style/styles-xform":132,"./xform/table/table-xform":138,"./xml/theme1.js":140,"buffer":214,"fs":213,"jszip":376,"readable-stream":467}],140:[function(require,module,exports){"use strict";/* eslint-disable */module.exports='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"> <a:themeElements> <a:clrScheme name="Office"> <a:dk1> <a:sysClr val="windowText" lastClr="000000"/> </a:dk1> <a:lt1> <a:sysClr val="window" lastClr="FFFFFF"/> </a:lt1> <a:dk2> <a:srgbClr val="1F497D"/> </a:dk2> <a:lt2> <a:srgbClr val="EEECE1"/> </a:lt2> <a:accent1> <a:srgbClr val="4F81BD"/> </a:accent1> <a:accent2> <a:srgbClr val="C0504D"/> </a:accent2> <a:accent3> <a:srgbClr val="9BBB59"/> </a:accent3> <a:accent4> <a:srgbClr val="8064A2"/> </a:accent4> <a:accent5> <a:srgbClr val="4BACC6"/> </a:accent5> <a:accent6> <a:srgbClr val="F79646"/> </a:accent6> <a:hlink> <a:srgbClr val="0000FF"/> </a:hlink> <a:folHlink> <a:srgbClr val="800080"/> </a:folHlink> </a:clrScheme> <a:fontScheme name="Office"> <a:majorFont> <a:latin typeface="Cambria"/> <a:ea typeface=""/> <a:cs typeface=""/> <a:font script="Jpan" typeface="MS Pゴシック"/> <a:font script="Hang" typeface="맑은 고딕"/> <a:font script="Hans" typeface="宋体"/> <a:font script="Hant" typeface="新細明體"/> <a:font script="Arab" typeface="Times New Roman"/> <a:font script="Hebr" typeface="Times New Roman"/> <a:font script="Thai" typeface="Tahoma"/> <a:font script="Ethi" typeface="Nyala"/> <a:font script="Beng" typeface="Vrinda"/> <a:font script="Gujr" typeface="Shruti"/> <a:font script="Khmr" typeface="MoolBoran"/> <a:font script="Knda" typeface="Tunga"/> <a:font script="Guru" typeface="Raavi"/> <a:font script="Cans" typeface="Euphemia"/> <a:font script="Cher" typeface="Plantagenet Cherokee"/> <a:font script="Yiii" typeface="Microsoft Yi Baiti"/> <a:font script="Tibt" typeface="Microsoft Himalaya"/> <a:font script="Thaa" typeface="MV Boli"/> <a:font script="Deva" typeface="Mangal"/> <a:font script="Telu" typeface="Gautami"/> <a:font script="Taml" typeface="Latha"/> <a:font script="Syrc" typeface="Estrangelo Edessa"/> <a:font script="Orya" typeface="Kalinga"/> <a:font script="Mlym" typeface="Kartika"/> <a:font script="Laoo" typeface="DokChampa"/> <a:font script="Sinh" typeface="Iskoola Pota"/> <a:font script="Mong" typeface="Mongolian Baiti"/> <a:font script="Viet" typeface="Times New Roman"/> <a:font script="Uigh" typeface="Microsoft Uighur"/> <a:font script="Geor" typeface="Sylfaen"/> </a:majorFont> <a:minorFont> <a:latin typeface="Calibri"/> <a:ea typeface=""/> <a:cs typeface=""/> <a:font script="Jpan" typeface="MS Pゴシック"/> <a:font script="Hang" typeface="맑은 고딕"/> <a:font script="Hans" typeface="宋体"/> <a:font script="Hant" typeface="新細明體"/> <a:font script="Arab" typeface="Arial"/> <a:font script="Hebr" typeface="Arial"/> <a:font script="Thai" typeface="Tahoma"/> <a:font script="Ethi" typeface="Nyala"/> <a:font script="Beng" typeface="Vrinda"/> <a:font script="Gujr" typeface="Shruti"/> <a:font script="Khmr" typeface="DaunPenh"/> <a:font script="Knda" typeface="Tunga"/> <a:font script="Guru" typeface="Raavi"/> <a:font script="Cans" typeface="Euphemia"/> <a:font script="Cher" typeface="Plantagenet Cherokee"/> <a:font script="Yiii" typeface="Microsoft Yi Baiti"/> <a:font script="Tibt" typeface="Microsoft Himalaya"/> <a:font script="Thaa" typeface="MV Boli"/> <a:font script="Deva" typeface="Mangal"/> <a:font script="Telu" typeface="Gautami"/> <a:font script="Taml" typeface="Latha"/> <a:font script="Syrc" typeface="Estrangelo Edessa"/> <a:font script="Orya" typeface="Kalinga"/> <a:font script="Mlym" typeface="Kartika"/> <a:font script="Laoo" typeface="DokChampa"/> <a:font script="Sinh" typeface="Iskoola Pota"/> <a:font script="Mong" typeface="Mongolian Baiti"/> <a:font script="Viet" typeface="Arial"/> <a:font script="Uigh" typeface="Microsoft Uighur"/> <a:font script="Geor" typeface="Sylfaen"/> </a:minorFont> </a:fontScheme> <a:fmtScheme name="Office"> <a:fillStyleLst> <a:solidFill> <a:schemeClr val="phClr"/> </a:solidFill> <a:gradFill rotWithShape="1"> <a:gsLst> <a:gs pos="0"> <a:schemeClr val="phClr"> <a:tint val="50000"/> <a:satMod val="300000"/> </a:schemeClr> </a:gs> <a:gs pos="35000"> <a:schemeClr val="phClr"> <a:tint val="37000"/> <a:satMod val="300000"/> </a:schemeClr> </a:gs> <a:gs pos="100000"> <a:schemeClr val="phClr"> <a:tint val="15000"/> <a:satMod val="350000"/> </a:schemeClr> </a:gs> </a:gsLst> <a:lin ang="16200000" scaled="1"/> </a:gradFill> <a:gradFill rotWithShape="1"> <a:gsLst> <a:gs pos="0"> <a:schemeClr val="phClr"> <a:tint val="100000"/> <a:shade val="100000"/> <a:satMod val="130000"/> </a:schemeClr> </a:gs> <a:gs pos="100000"> <a:schemeClr val="phClr"> <a:tint val="50000"/> <a:shade val="100000"/> <a:satMod val="350000"/> </a:schemeClr> </a:gs> </a:gsLst> <a:lin ang="16200000" scaled="0"/> </a:gradFill> </a:fillStyleLst> <a:lnStyleLst> <a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"> <a:solidFill> <a:schemeClr val="phClr"> <a:shade val="95000"/> <a:satMod val="105000"/> </a:schemeClr> </a:solidFill> <a:prstDash val="solid"/> </a:ln> <a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"> <a:solidFill> <a:schemeClr val="phClr"/> </a:solidFill> <a:prstDash val="solid"/> </a:ln> <a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"> <a:solidFill> <a:schemeClr val="phClr"/> </a:solidFill> <a:prstDash val="solid"/> </a:ln> </a:lnStyleLst> <a:effectStyleLst> <a:effectStyle> <a:effectLst> <a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"> <a:srgbClr val="000000"> <a:alpha val="38000"/> </a:srgbClr> </a:outerShdw> </a:effectLst> </a:effectStyle> <a:effectStyle> <a:effectLst> <a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"> <a:srgbClr val="000000"> <a:alpha val="35000"/> </a:srgbClr> </a:outerShdw> </a:effectLst> </a:effectStyle> <a:effectStyle> <a:effectLst> <a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"> <a:srgbClr val="000000"> <a:alpha val="35000"/> </a:srgbClr> </a:outerShdw> </a:effectLst> <a:scene3d> <a:camera prst="orthographicFront"> <a:rot lat="0" lon="0" rev="0"/> </a:camera> <a:lightRig rig="threePt" dir="t"> <a:rot lat="0" lon="0" rev="1200000"/> </a:lightRig> </a:scene3d> <a:sp3d> <a:bevelT w="63500" h="25400"/> </a:sp3d> </a:effectStyle> </a:effectStyleLst> <a:bgFillStyleLst> <a:solidFill> <a:schemeClr val="phClr"/> </a:solidFill> <a:gradFill rotWithShape="1"> <a:gsLst> <a:gs pos="0"> <a:schemeClr val="phClr"> <a:tint val="40000"/> <a:satMod val="350000"/> </a:schemeClr> </a:gs> <a:gs pos="40000"> <a:schemeClr val="phClr"> <a:tint val="45000"/> <a:shade val="99000"/> <a:satMod val="350000"/> </a:schemeClr> </a:gs> <a:gs pos="100000"> <a:schemeClr val="phClr"> <a:shade val="20000"/> <a:satMod val="255000"/> </a:schemeClr> </a:gs> </a:gsLst> <a:path path="circle"> <a:fillToRect l="50000" t="-80000" r="50000" b="180000"/> </a:path> </a:gradFill> <a:gradFill rotWithShape="1"> <a:gsLst> <a:gs pos="0"> <a:schemeClr val="phClr"> <a:tint val="80000"/> <a:satMod val="300000"/> </a:schemeClr> </a:gs> <a:gs pos="100000"> <a:schemeClr val="phClr"> <a:shade val="30000"/> <a:satMod val="200000"/> </a:schemeClr> </a:gs> </a:gsLst> <a:path path="circle"> <a:fillToRect l="50000" t="50000" r="50000" b="50000"/> </a:path> </a:gradFill> </a:bgFillStyleLst> </a:fmtScheme> </a:themeElements> <a:objectDefaults> <a:spDef> <a:spPr/> <a:bodyPr/> <a:lstStyle/> <a:style> <a:lnRef idx="1"> <a:schemeClr val="accent1"/> </a:lnRef> <a:fillRef idx="3"> <a:schemeClr val="accent1"/> </a:fillRef> <a:effectRef idx="2"> <a:schemeClr val="accent1"/> </a:effectRef> <a:fontRef idx="minor"> <a:schemeClr val="lt1"/> </a:fontRef> </a:style> </a:spDef> <a:lnDef> <a:spPr/> <a:bodyPr/> <a:lstStyle/> <a:style> <a:lnRef idx="2"> <a:schemeClr val="accent1"/> </a:lnRef> <a:fillRef idx="0"> <a:schemeClr val="accent1"/> </a:fillRef> <a:effectRef idx="1"> <a:schemeClr val="accent1"/> </a:effectRef> <a:fontRef idx="minor"> <a:schemeClr val="tx1"/> </a:fontRef> </a:style> </a:lnDef> </a:objectDefaults> <a:extraClrSchemeLst/> </a:theme>';},{}],141:[function(require,module,exports){(function(Buffer){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CsvFormatterStream=void 0;var stream_1=require("stream");var formatter_1=require("./formatter");var CsvFormatterStream=/*#__PURE__*/function(_stream_1$Transform){_inherits2(CsvFormatterStream,_stream_1$Transform);var _super5=_createSuper2(CsvFormatterStream);function CsvFormatterStream(formatterOptions){var _this10;_classCallCheck2(this,CsvFormatterStream);_this10=_super5.call(this,{writableObjectMode:formatterOptions.objectMode});_this10.hasWrittenBOM=false;_this10.formatterOptions=formatterOptions;_this10.rowFormatter=new formatter_1.RowFormatter(formatterOptions);// if writeBOM is false then set to true |
|
|
// if writeBOM is true then set to false by default so it is written out |
|
|
_this10.hasWrittenBOM=!formatterOptions.writeBOM;return _this10;}_createClass2(CsvFormatterStream,[{key:"transform",value:function transform(transformFunction){this.rowFormatter.rowTransform=transformFunction;return this;}},{key:"_transform",value:function _transform(row,encoding,cb){var _this11=this;var cbCalled=false;try{if(!this.hasWrittenBOM){this.push(this.formatterOptions.BOM);this.hasWrittenBOM=true;}this.rowFormatter.format(row,function(err,rows){if(err){cbCalled=true;return cb(err);}if(rows){rows.forEach(function(r){_this11.push(Buffer.from(r,'utf8'));});}cbCalled=true;return cb();});}catch(e){if(cbCalled){throw e;}cb(e);}}},{key:"_flush",value:function _flush(cb){var _this12=this;this.rowFormatter.finish(function(err,rows){if(err){return cb(err);}if(rows){rows.forEach(function(r){_this12.push(Buffer.from(r,'utf8'));});}return cb();});}}]);return CsvFormatterStream;}(stream_1.Transform);exports.CsvFormatterStream=CsvFormatterStream;}).call(this,require("buffer").Buffer);},{"./formatter":145,"buffer":214,"stream":481}],142:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.FormatterOptions=void 0;var FormatterOptions=function FormatterOptions(){var opts=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};_classCallCheck2(this,FormatterOptions);var _a;this.objectMode=true;this.delimiter=',';this.rowDelimiter='\n';this.quote='"';this.escape=this.quote;this.quoteColumns=false;this.quoteHeaders=this.quoteColumns;this.headers=null;this.includeEndRowDelimiter=false;this.writeBOM=false;this.BOM="\uFEFF";this.alwaysWriteHeaders=false;Object.assign(this,opts||{});if(typeof(opts===null||opts===void 0?void 0:opts.quoteHeaders)==='undefined'){this.quoteHeaders=this.quoteColumns;}if((opts===null||opts===void 0?void 0:opts.quote)===true){this.quote='"';}else if((opts===null||opts===void 0?void 0:opts.quote)===false){this.quote='';}if(typeof(opts===null||opts===void 0?void 0:opts.escape)!=='string'){this.escape=this.quote;}this.shouldWriteHeaders=!!this.headers&&((_a=opts.writeHeaders)!==null&&_a!==void 0?_a:true);this.headers=Array.isArray(this.headers)?this.headers:null;this.escapedQuote="".concat(this.escape).concat(this.quote);};exports.FormatterOptions=FormatterOptions;},{}],143:[function(require,module,exports){"use strict";var __importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{"default":mod};};Object.defineProperty(exports,"__esModule",{value:true});exports.FieldFormatter=void 0;var lodash_isboolean_1=__importDefault(require("lodash.isboolean"));var lodash_isnil_1=__importDefault(require("lodash.isnil"));var lodash_escaperegexp_1=__importDefault(require("lodash.escaperegexp"));var FieldFormatter=/*#__PURE__*/function(){function FieldFormatter(formatterOptions){_classCallCheck2(this,FieldFormatter);this._headers=null;this.formatterOptions=formatterOptions;if(formatterOptions.headers!==null){this.headers=formatterOptions.headers;}this.REPLACE_REGEXP=new RegExp(formatterOptions.quote,'g');var escapePattern="[".concat(formatterOptions.delimiter).concat(lodash_escaperegexp_1.default(formatterOptions.rowDelimiter),"|\r|\n']");this.ESCAPE_REGEXP=new RegExp(escapePattern);}_createClass2(FieldFormatter,[{key:"shouldQuote",value:function shouldQuote(fieldIndex,isHeader){var quoteConfig=isHeader?this.formatterOptions.quoteHeaders:this.formatterOptions.quoteColumns;if(lodash_isboolean_1.default(quoteConfig)){return quoteConfig;}if(Array.isArray(quoteConfig)){return quoteConfig[fieldIndex];}if(this._headers!==null){return quoteConfig[this._headers[fieldIndex]];}return false;}},{key:"format",value:function format(field,fieldIndex,isHeader){var preparedField="".concat(lodash_isnil_1.default(field)?'':field).replace(/\0/g,'');var formatterOptions=this.formatterOptions;if(formatterOptions.quote!==''){var shouldEscape=preparedField.indexOf(formatterOptions.quote)!==-1;if(shouldEscape){return this.quoteField(preparedField.replace(this.REPLACE_REGEXP,formatterOptions.escapedQuote));}}var hasEscapeCharacters=preparedField.search(this.ESCAPE_REGEXP)!==-1;if(hasEscapeCharacters||this.shouldQuote(fieldIndex,isHeader)){return this.quoteField(preparedField);}return preparedField;}},{key:"quoteField",value:function quoteField(field){var quote=this.formatterOptions.quote;return"".concat(quote).concat(field).concat(quote);}},{key:"headers",set:function set(headers){this._headers=headers;}}]);return FieldFormatter;}();exports.FieldFormatter=FieldFormatter;},{"lodash.escaperegexp":403,"lodash.isboolean":405,"lodash.isnil":408}],144:[function(require,module,exports){"use strict";var __importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{"default":mod};};Object.defineProperty(exports,"__esModule",{value:true});exports.RowFormatter=void 0;var lodash_isfunction_1=__importDefault(require("lodash.isfunction"));var lodash_isequal_1=__importDefault(require("lodash.isequal"));var FieldFormatter_1=require("./FieldFormatter");var types_1=require("../types");var RowFormatter=/*#__PURE__*/function(){function RowFormatter(formatterOptions){_classCallCheck2(this,RowFormatter);this.rowCount=0;this.formatterOptions=formatterOptions;this.fieldFormatter=new FieldFormatter_1.FieldFormatter(formatterOptions);this.headers=formatterOptions.headers;this.shouldWriteHeaders=formatterOptions.shouldWriteHeaders;this.hasWrittenHeaders=false;if(this.headers!==null){this.fieldFormatter.headers=this.headers;}if(formatterOptions.transform){this.rowTransform=formatterOptions.transform;}}_createClass2(RowFormatter,[{key:"format",value:function format(row,cb){var _this13=this;this.callTransformer(row,function(err,transformedRow){if(err){return cb(err);}if(!row){return cb(null);}var rows=[];if(transformedRow){var _this13$checkHeaders=_this13.checkHeaders(transformedRow),shouldFormatColumns=_this13$checkHeaders.shouldFormatColumns,headers=_this13$checkHeaders.headers;if(_this13.shouldWriteHeaders&&headers&&!_this13.hasWrittenHeaders){rows.push(_this13.formatColumns(headers,true));_this13.hasWrittenHeaders=true;}if(shouldFormatColumns){var columns=_this13.gatherColumns(transformedRow);rows.push(_this13.formatColumns(columns,false));}}return cb(null,rows);});}},{key:"finish",value:function finish(cb){var rows=[];// check if we should write headers and we didnt get any rows |
|
|
if(this.formatterOptions.alwaysWriteHeaders&&this.rowCount===0){if(!this.headers){return cb(new Error('`alwaysWriteHeaders` option is set to true but `headers` option not provided.'));}rows.push(this.formatColumns(this.headers,true));}if(this.formatterOptions.includeEndRowDelimiter){rows.push(this.formatterOptions.rowDelimiter);}return cb(null,rows);}// check if we need to write header return true if we should also write a row |
|
|
// could be false if headers is true and the header row(first item) is passed in |
|
|
},{key:"checkHeaders",value:function checkHeaders(row){if(this.headers){// either the headers were provided by the user or we have already gathered them. |
|
|
return{shouldFormatColumns:true,headers:this.headers};}var headers=RowFormatter.gatherHeaders(row);this.headers=headers;this.fieldFormatter.headers=headers;if(!this.shouldWriteHeaders){// if we are not supposed to write the headers then |
|
|
// always format the columns |
|
|
return{shouldFormatColumns:true,headers:null};}// if the row is equal to headers dont format |
|
|
return{shouldFormatColumns:!lodash_isequal_1.default(headers,row),headers:headers};}// todo change this method to unknown[] |
|
|
},{key:"gatherColumns",value:function gatherColumns(row){if(this.headers===null){throw new Error('Headers is currently null');}if(!Array.isArray(row)){return this.headers.map(function(header){return row[header];});}if(RowFormatter.isHashArray(row)){return this.headers.map(function(header,i){var col=row[i];if(col){return col[1];}return'';});}return this.headers.map(function(header,i){return row[i];});}},{key:"callTransformer",value:function callTransformer(row,cb){if(!this._rowTransform){return cb(null,row);}return this._rowTransform(row,cb);}},{key:"formatColumns",value:function formatColumns(columns,isHeadersRow){var _this14=this;var formattedCols=columns.map(function(field,i){return _this14.fieldFormatter.format(field,i,isHeadersRow);}).join(this.formatterOptions.delimiter);var rowCount=this.rowCount;this.rowCount+=1;if(rowCount){return[this.formatterOptions.rowDelimiter,formattedCols].join('');}return formattedCols;}},{key:"rowTransform",set:function set(transformFunction){if(!lodash_isfunction_1.default(transformFunction)){throw new TypeError('The transform should be a function');}this._rowTransform=RowFormatter.createTransform(transformFunction);}}],[{key:"isHashArray",value:function isHashArray(row){if(Array.isArray(row)){return Array.isArray(row[0])&&row[0].length===2;}return false;}// get headers from a row item |
|
|
},{key:"gatherHeaders",value:function gatherHeaders(row){if(RowFormatter.isHashArray(row)){// lets assume a multi-dimesional array with item 0 being the header |
|
|
return row.map(function(it){return it[0];});}if(Array.isArray(row)){return row;}return Object.keys(row);}},{key:"createTransform",value:function createTransform(transformFunction){if(types_1.isSyncTransform(transformFunction)){return function(row,cb){var transformedRow=null;try{transformedRow=transformFunction(row);}catch(e){return cb(e);}return cb(null,transformedRow);};}return function(row,cb){transformFunction(row,cb);};}}]);return RowFormatter;}();exports.RowFormatter=RowFormatter;},{"../types":147,"./FieldFormatter":143,"lodash.isequal":406,"lodash.isfunction":407}],145:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var RowFormatter_1=require("./RowFormatter");Object.defineProperty(exports,"RowFormatter",{enumerable:true,get:function get(){return RowFormatter_1.RowFormatter;}});var FieldFormatter_1=require("./FieldFormatter");Object.defineProperty(exports,"FieldFormatter",{enumerable:true,get:function get(){return FieldFormatter_1.FieldFormatter;}});},{"./FieldFormatter":143,"./RowFormatter":144}],146:[function(require,module,exports){(function(Buffer){"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(o,m,k,k2){if(k2===undefined)k2=k;Object.defineProperty(o,k2,{enumerable:true,get:function get(){return m[k];}});}:function(o,m,k,k2){if(k2===undefined)k2=k;o[k2]=m[k];});var __setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(o,v){Object.defineProperty(o,"default",{enumerable:true,value:v});}:function(o,v){o["default"]=v;});var __importStar=this&&this.__importStar||function(mod){if(mod&&mod.__esModule)return mod;var result={};if(mod!=null)for(var k in mod){if(Object.hasOwnProperty.call(mod,k))__createBinding(result,mod,k);}__setModuleDefault(result,mod);return result;};var __exportStar=this&&this.__exportStar||function(m,exports){for(var p in m){if(p!=="default"&&!exports.hasOwnProperty(p))__createBinding(exports,m,p);}};Object.defineProperty(exports,"__esModule",{value:true});exports.writeToPath=exports.writeToString=exports.writeToBuffer=exports.writeToStream=exports.write=exports.format=void 0;var util_1=require("util");var stream_1=require("stream");var fs=__importStar(require("fs"));var FormatterOptions_1=require("./FormatterOptions");var CsvFormatterStream_1=require("./CsvFormatterStream");__exportStar(require("./types"),exports);var CsvFormatterStream_2=require("./CsvFormatterStream");Object.defineProperty(exports,"CsvFormatterStream",{enumerable:true,get:function get(){return CsvFormatterStream_2.CsvFormatterStream;}});var FormatterOptions_2=require("./FormatterOptions");Object.defineProperty(exports,"FormatterOptions",{enumerable:true,get:function get(){return FormatterOptions_2.FormatterOptions;}});exports.format=function(options){return new CsvFormatterStream_1.CsvFormatterStream(new FormatterOptions_1.FormatterOptions(options));};exports.write=function(rows,options){var csvStream=exports.format(options);var promiseWrite=util_1.promisify(function(row,cb){csvStream.write(row,undefined,cb);});rows.reduce(function(prev,row){return prev.then(function(){return promiseWrite(row);});},Promise.resolve()).then(function(){return csvStream.end();}).catch(function(err){csvStream.emit('error',err);});return csvStream;};exports.writeToStream=function(ws,rows,options){return exports.write(rows,options).pipe(ws);};exports.writeToBuffer=function(rows){var opts=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var buffers=[];var ws=new stream_1.Writable({write:function write(data,enc,writeCb){buffers.push(data);writeCb();}});return new Promise(function(res,rej){ws.on('error',rej).on('finish',function(){return res(Buffer.concat(buffers));});exports.write(rows,opts).pipe(ws);});};exports.writeToString=function(rows,options){return exports.writeToBuffer(rows,options).then(function(buffer){return buffer.toString();});};exports.writeToPath=function(path,rows,options){var stream=fs.createWriteStream(path,{encoding:'utf8'});return exports.write(rows,options).pipe(stream);};}).call(this,require("buffer").Buffer);},{"./CsvFormatterStream":141,"./FormatterOptions":142,"./types":147,"buffer":214,"fs":213,"stream":481,"util":500}],147:[function(require,module,exports){"use strict";/* eslint-disable @typescript-eslint/no-explicit-any */Object.defineProperty(exports,"__esModule",{value:true});exports.isSyncTransform=void 0;exports.isSyncTransform=function(transform){return transform.length===1;};},{}],148:[function(require,module,exports){(function(setImmediate){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CsvParserStream=void 0;var string_decoder_1=require("string_decoder");var stream_1=require("stream");var transforms_1=require("./transforms");var parser_1=require("./parser");var CsvParserStream=/*#__PURE__*/function(_stream_1$Transform2){_inherits2(CsvParserStream,_stream_1$Transform2);var _super6=_createSuper2(CsvParserStream);function CsvParserStream(parserOptions){var _this15;_classCallCheck2(this,CsvParserStream);_this15=_super6.call(this,{objectMode:parserOptions.objectMode});_this15.lines='';_this15.rowCount=0;_this15.parsedRowCount=0;_this15.parsedLineCount=0;_this15.endEmitted=false;_this15.headersEmitted=false;_this15.parserOptions=parserOptions;_this15.parser=new parser_1.Parser(parserOptions);_this15.headerTransformer=new transforms_1.HeaderTransformer(parserOptions);_this15.decoder=new string_decoder_1.StringDecoder(parserOptions.encoding);_this15.rowTransformerValidator=new transforms_1.RowTransformerValidator();return _this15;}_createClass2(CsvParserStream,[{key:"transform",value:function transform(transformFunction){this.rowTransformerValidator.rowTransform=transformFunction;return this;}},{key:"validate",value:function validate(validateFunction){this.rowTransformerValidator.rowValidator=validateFunction;return this;}// eslint-disable-next-line @typescript-eslint/no-explicit-any |
|
|
},{key:"emit",value:function emit(event){var _get2;if(event==='end'){if(!this.endEmitted){this.endEmitted=true;_get(_getPrototypeOf2(CsvParserStream.prototype),"emit",this).call(this,'end',this.rowCount);}return false;}for(var _len6=arguments.length,rest=new Array(_len6>1?_len6-1:0),_key6=1;_key6<_len6;_key6++){rest[_key6-1]=arguments[_key6];}return(_get2=_get(_getPrototypeOf2(CsvParserStream.prototype),"emit",this)).call.apply(_get2,[this,event].concat(rest));}},{key:"_transform",value:function _transform(data,encoding,done){// if we have hit our maxRows parsing limit then skip parsing |
|
|
if(this.hasHitRowLimit){return done();}try{var lines=this.lines;var newLine=lines+this.decoder.write(data);var rows=this.parse(newLine,true);return this.processRows(rows,done);}catch(e){return this.destroy(e);}}},{key:"_flush",value:function _flush(done){// if we have hit our maxRows parsing limit then skip parsing |
|
|
if(this.hasHitRowLimit){return done();}try{var newLine=this.lines+this.decoder.end();var rows=this.parse(newLine,false);return this.processRows(rows,done);}catch(e){return done(e);}}},{key:"parse",value:function parse(data,hasMoreData){if(!data){return[];}var _this$parser$parse=this.parser.parse(data,hasMoreData),line=_this$parser$parse.line,rows=_this$parser$parse.rows;this.lines=line;return rows;}},{key:"processRows",value:function processRows(rows,cb){var _this16=this;var rowsLength=rows.length;var iterate=function iterate(i){var callNext=function callNext(err){if(err){return _this16.destroy(err);}if(i%100===0){// incase the transform are sync insert a next tick to prevent stack overflow |
|
|
setImmediate(function(){return iterate(i+1);});return undefined;}return iterate(i+1);};_this16.checkAndEmitHeaders();// if we have emitted all rows or we have hit the maxRows limit option |
|
|
// then end |
|
|
if(i>=rowsLength||_this16.hasHitRowLimit){return cb();}_this16.parsedLineCount+=1;if(_this16.shouldSkipLine){return callNext();}var row=rows[i];_this16.rowCount+=1;_this16.parsedRowCount+=1;var nextRowCount=_this16.rowCount;return _this16.transformRow(row,function(err,transformResult){if(err){_this16.rowCount-=1;return callNext(err);}if(!transformResult){return callNext(new Error('expected transform result'));}if(!transformResult.isValid){_this16.emit('data-invalid',transformResult.row,nextRowCount,transformResult.reason);}else if(transformResult.row){return _this16.pushRow(transformResult.row,callNext);}return callNext();});};iterate(0);}},{key:"transformRow",value:function transformRow(parsedRow,cb){var _this17=this;try{this.headerTransformer.transform(parsedRow,function(err,withHeaders){if(err){return cb(err);}if(!withHeaders){return cb(new Error('Expected result from header transform'));}if(!withHeaders.isValid){if(_this17.shouldEmitRows){return cb(null,{isValid:false,row:parsedRow});}// skipped because of skipRows option remove from total row count |
|
|
return _this17.skipRow(cb);}if(withHeaders.row){if(_this17.shouldEmitRows){return _this17.rowTransformerValidator.transformAndValidate(withHeaders.row,cb);}// skipped because of skipRows option remove from total row count |
|
|
return _this17.skipRow(cb);}// this is a header row dont include in the rowCount or parsedRowCount |
|
|
_this17.rowCount-=1;_this17.parsedRowCount-=1;return cb(null,{row:null,isValid:true});});}catch(e){cb(e);}}},{key:"checkAndEmitHeaders",value:function checkAndEmitHeaders(){if(!this.headersEmitted&&this.headerTransformer.headers){this.headersEmitted=true;this.emit('headers',this.headerTransformer.headers);}}},{key:"skipRow",value:function skipRow(cb){// skipped because of skipRows option remove from total row count |
|
|
this.rowCount-=1;return cb(null,{row:null,isValid:true});}},{key:"pushRow",value:function pushRow(row,cb){try{if(!this.parserOptions.objectMode){this.push(JSON.stringify(row));}else{this.push(row);}cb();}catch(e){cb(e);}}},{key:"hasHitRowLimit",get:function get(){return this.parserOptions.limitRows&&this.rowCount>=this.parserOptions.maxRows;}},{key:"shouldEmitRows",get:function get(){return this.parsedRowCount>this.parserOptions.skipRows;}},{key:"shouldSkipLine",get:function get(){return this.parsedLineCount<=this.parserOptions.skipLines;}}]);return CsvParserStream;}(stream_1.Transform);exports.CsvParserStream=CsvParserStream;}).call(this,require("timers").setImmediate);},{"./parser":160,"./transforms":163,"stream":481,"string_decoder":495,"timers":496}],149:[function(require,module,exports){"use strict";var __importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{"default":mod};};Object.defineProperty(exports,"__esModule",{value:true});exports.ParserOptions=void 0;var lodash_escaperegexp_1=__importDefault(require("lodash.escaperegexp"));var lodash_isnil_1=__importDefault(require("lodash.isnil"));var ParserOptions=function ParserOptions(opts){_classCallCheck2(this,ParserOptions);var _a;this.objectMode=true;this.delimiter=',';this.ignoreEmpty=false;this.quote='"';this.escape=null;this.escapeChar=this.quote;this.comment=null;this.supportsComments=false;this.ltrim=false;this.rtrim=false;this.trim=false;this.headers=null;this.renameHeaders=false;this.strictColumnHandling=false;this.discardUnmappedColumns=false;this.carriageReturn='\r';this.encoding='utf8';this.limitRows=false;this.maxRows=0;this.skipLines=0;this.skipRows=0;Object.assign(this,opts||{});if(this.delimiter.length>1){throw new Error('delimiter option must be one character long');}this.escapedDelimiter=lodash_escaperegexp_1.default(this.delimiter);this.escapeChar=(_a=this.escape)!==null&&_a!==void 0?_a:this.quote;this.supportsComments=!lodash_isnil_1.default(this.comment);this.NEXT_TOKEN_REGEXP=new RegExp("([^\\s]|\\r\\n|\\n|\\r|".concat(this.escapedDelimiter,")"));if(this.maxRows>0){this.limitRows=true;}};exports.ParserOptions=ParserOptions;},{"lodash.escaperegexp":403,"lodash.isnil":408}],150:[function(require,module,exports){"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(o,m,k,k2){if(k2===undefined)k2=k;Object.defineProperty(o,k2,{enumerable:true,get:function get(){return m[k];}});}:function(o,m,k,k2){if(k2===undefined)k2=k;o[k2]=m[k];});var __setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(o,v){Object.defineProperty(o,"default",{enumerable:true,value:v});}:function(o,v){o["default"]=v;});var __importStar=this&&this.__importStar||function(mod){if(mod&&mod.__esModule)return mod;var result={};if(mod!=null)for(var k in mod){if(Object.hasOwnProperty.call(mod,k))__createBinding(result,mod,k);}__setModuleDefault(result,mod);return result;};var __exportStar=this&&this.__exportStar||function(m,exports){for(var p in m){if(p!=="default"&&!exports.hasOwnProperty(p))__createBinding(exports,m,p);}};Object.defineProperty(exports,"__esModule",{value:true});exports.parseString=exports.parseFile=exports.parseStream=exports.parse=void 0;var fs=__importStar(require("fs"));var stream_1=require("stream");var ParserOptions_1=require("./ParserOptions");var CsvParserStream_1=require("./CsvParserStream");__exportStar(require("./types"),exports);var CsvParserStream_2=require("./CsvParserStream");Object.defineProperty(exports,"CsvParserStream",{enumerable:true,get:function get(){return CsvParserStream_2.CsvParserStream;}});var ParserOptions_2=require("./ParserOptions");Object.defineProperty(exports,"ParserOptions",{enumerable:true,get:function get(){return ParserOptions_2.ParserOptions;}});exports.parse=function(args){return new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(args));};exports.parseStream=function(stream,options){return stream.pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));};exports.parseFile=function(location){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};return fs.createReadStream(location).pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));};exports.parseString=function(string,options){var rs=new stream_1.Readable();rs.push(string);rs.push(null);return rs.pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));};},{"./CsvParserStream":148,"./ParserOptions":149,"./types":164,"fs":213,"stream":481}],151:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Parser=void 0;var Scanner_1=require("./Scanner");var RowParser_1=require("./RowParser");var Token_1=require("./Token");var EMPTY_ROW_REGEXP=/^\s*(?:''|"")?\s*(?:,\s*(?:''|"")?\s*)*$/;var Parser=/*#__PURE__*/function(){function Parser(parserOptions){_classCallCheck2(this,Parser);this.parserOptions=parserOptions;this.rowParser=new RowParser_1.RowParser(this.parserOptions);}_createClass2(Parser,[{key:"parse",value:function parse(line,hasMoreData){var scanner=new Scanner_1.Scanner({line:Parser.removeBOM(line),parserOptions:this.parserOptions,hasMoreData:hasMoreData});if(this.parserOptions.supportsComments){return this.parseWithComments(scanner);}return this.parseWithoutComments(scanner);}},{key:"parseWithoutComments",value:function parseWithoutComments(scanner){var rows=[];var shouldContinue=true;while(shouldContinue){shouldContinue=this.parseRow(scanner,rows);}return{line:scanner.line,rows:rows};}},{key:"parseWithComments",value:function parseWithComments(scanner){var parserOptions=this.parserOptions;var rows=[];for(var nextToken=scanner.nextCharacterToken;nextToken!==null;nextToken=scanner.nextCharacterToken){if(Token_1.Token.isTokenComment(nextToken,parserOptions)){var cursor=scanner.advancePastLine();if(cursor===null){return{line:scanner.lineFromCursor,rows:rows};}if(!scanner.hasMoreCharacters){return{line:scanner.lineFromCursor,rows:rows};}scanner.truncateToCursor();}else if(!this.parseRow(scanner,rows)){break;}}return{line:scanner.line,rows:rows};}},{key:"parseRow",value:function parseRow(scanner,rows){var nextToken=scanner.nextNonSpaceToken;if(!nextToken){return false;}var row=this.rowParser.parse(scanner);if(row===null){return false;}if(this.parserOptions.ignoreEmpty&&EMPTY_ROW_REGEXP.test(row.join(''))){return true;}rows.push(row);return true;}}],[{key:"removeBOM",value:function removeBOM(line){// Catches EFBBBF (UTF-8 BOM) because the buffer-to-string |
|
|
// conversion translates it to FEFF (UTF-16 BOM) |
|
|
if(line&&line.charCodeAt(0)===0xfeff){return line.slice(1);}return line;}}]);return Parser;}();exports.Parser=Parser;},{"./RowParser":152,"./Scanner":153,"./Token":154}],152:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.RowParser=void 0;var column_1=require("./column");var Token_1=require("./Token");var _Token_1$Token=Token_1.Token,isTokenRowDelimiter=_Token_1$Token.isTokenRowDelimiter,isTokenCarriageReturn=_Token_1$Token.isTokenCarriageReturn,isTokenDelimiter=_Token_1$Token.isTokenDelimiter;var RowParser=/*#__PURE__*/function(){function RowParser(parserOptions){_classCallCheck2(this,RowParser);this.parserOptions=parserOptions;this.columnParser=new column_1.ColumnParser(parserOptions);}_createClass2(RowParser,[{key:"parse",value:function parse(scanner){var parserOptions=this.parserOptions;var hasMoreData=scanner.hasMoreData;var currentScanner=scanner;var columns=[];var currentToken=this.getStartToken(currentScanner,columns);while(currentToken){if(isTokenRowDelimiter(currentToken)){currentScanner.advancePastToken(currentToken);// if ends with CR and there is more data, keep unparsed due to possible |
|
|
// coming LF in CRLF |
|
|
if(!currentScanner.hasMoreCharacters&&isTokenCarriageReturn(currentToken,parserOptions)&&hasMoreData){return null;}currentScanner.truncateToCursor();return columns;}if(!this.shouldSkipColumnParse(currentScanner,currentToken,columns)){var item=this.columnParser.parse(currentScanner);if(item===null){return null;}columns.push(item);}currentToken=currentScanner.nextNonSpaceToken;}if(!hasMoreData){currentScanner.truncateToCursor();return columns;}return null;}},{key:"getStartToken",value:function getStartToken(scanner,columns){var currentToken=scanner.nextNonSpaceToken;if(currentToken!==null&&isTokenDelimiter(currentToken,this.parserOptions)){columns.push('');return scanner.nextNonSpaceToken;}return currentToken;}},{key:"shouldSkipColumnParse",value:function shouldSkipColumnParse(scanner,currentToken,columns){var parserOptions=this.parserOptions;if(isTokenDelimiter(currentToken,parserOptions)){scanner.advancePastToken(currentToken);// if the delimiter is at the end of a line |
|
|
var nextToken=scanner.nextCharacterToken;if(!scanner.hasMoreCharacters||nextToken!==null&&isTokenRowDelimiter(nextToken)){columns.push('');return true;}if(nextToken!==null&&isTokenDelimiter(nextToken,parserOptions)){columns.push('');return true;}}return false;}}]);return RowParser;}();exports.RowParser=RowParser;},{"./Token":154,"./column":159}],153:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Scanner=void 0;var Token_1=require("./Token");var ROW_DELIMITER=/((?:\r\n)|\n|\r)/;var Scanner=/*#__PURE__*/function(){function Scanner(args){_classCallCheck2(this,Scanner);this.cursor=0;this.line=args.line;this.lineLength=this.line.length;this.parserOptions=args.parserOptions;this.hasMoreData=args.hasMoreData;this.cursor=args.cursor||0;}_createClass2(Scanner,[{key:"advancePastLine",value:function advancePastLine(){var match=ROW_DELIMITER.exec(this.lineFromCursor);if(!match){if(this.hasMoreData){return null;}this.cursor=this.lineLength;return this;}this.cursor+=(match.index||0)+match[0].length;return this;}},{key:"advanceTo",value:function advanceTo(cursor){this.cursor=cursor;return this;}},{key:"advanceToToken",value:function advanceToToken(token){this.cursor=token.startCursor;return this;}},{key:"advancePastToken",value:function advancePastToken(token){this.cursor=token.endCursor+1;return this;}},{key:"truncateToCursor",value:function truncateToCursor(){this.line=this.lineFromCursor;this.lineLength=this.line.length;this.cursor=0;return this;}},{key:"hasMoreCharacters",get:function get(){return this.lineLength>this.cursor;}},{key:"nextNonSpaceToken",get:function get(){var lineFromCursor=this.lineFromCursor;var regex=this.parserOptions.NEXT_TOKEN_REGEXP;if(lineFromCursor.search(regex)===-1){return null;}var match=regex.exec(lineFromCursor);if(match==null){return null;}var token=match[1];var startCursor=this.cursor+(match.index||0);return new Token_1.Token({token:token,startCursor:startCursor,endCursor:startCursor+token.length-1});}},{key:"nextCharacterToken",get:function get(){var cursor=this.cursor,lineLength=this.lineLength;if(lineLength<=cursor){return null;}return new Token_1.Token({token:this.line[cursor],startCursor:cursor,endCursor:cursor});}},{key:"lineFromCursor",get:function get(){return this.line.substr(this.cursor);}}]);return Scanner;}();exports.Scanner=Scanner;},{"./Token":154}],154:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Token=void 0;var Token=/*#__PURE__*/function(){function Token(tokenArgs){_classCallCheck2(this,Token);this.token=tokenArgs.token;this.startCursor=tokenArgs.startCursor;this.endCursor=tokenArgs.endCursor;}_createClass2(Token,null,[{key:"isTokenRowDelimiter",value:function isTokenRowDelimiter(token){var content=token.token;return content==='\r'||content==='\n'||content==='\r\n';}},{key:"isTokenCarriageReturn",value:function isTokenCarriageReturn(token,parserOptions){return token.token===parserOptions.carriageReturn;}},{key:"isTokenComment",value:function isTokenComment(token,parserOptions){return parserOptions.supportsComments&&!!token&&token.token===parserOptions.comment;}},{key:"isTokenEscapeCharacter",value:function isTokenEscapeCharacter(token,parserOptions){return token.token===parserOptions.escapeChar;}},{key:"isTokenQuote",value:function isTokenQuote(token,parserOptions){return token.token===parserOptions.quote;}},{key:"isTokenDelimiter",value:function isTokenDelimiter(token,parserOptions){return token.token===parserOptions.delimiter;}}]);return Token;}();exports.Token=Token;},{}],155:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ColumnFormatter=void 0;var ColumnFormatter=function ColumnFormatter(parserOptions){_classCallCheck2(this,ColumnFormatter);if(parserOptions.trim){this.format=function(col){return col.trim();};}else if(parserOptions.ltrim){this.format=function(col){return col.trimLeft();};}else if(parserOptions.rtrim){this.format=function(col){return col.trimRight();};}else{this.format=function(col){return col;};}};exports.ColumnFormatter=ColumnFormatter;},{}],156:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ColumnParser=void 0;var NonQuotedColumnParser_1=require("./NonQuotedColumnParser");var QuotedColumnParser_1=require("./QuotedColumnParser");var Token_1=require("../Token");var ColumnParser=/*#__PURE__*/function(){function ColumnParser(parserOptions){_classCallCheck2(this,ColumnParser);this.parserOptions=parserOptions;this.quotedColumnParser=new QuotedColumnParser_1.QuotedColumnParser(parserOptions);this.nonQuotedColumnParser=new NonQuotedColumnParser_1.NonQuotedColumnParser(parserOptions);}_createClass2(ColumnParser,[{key:"parse",value:function parse(scanner){var nextNonSpaceToken=scanner.nextNonSpaceToken;if(nextNonSpaceToken!==null&&Token_1.Token.isTokenQuote(nextNonSpaceToken,this.parserOptions)){scanner.advanceToToken(nextNonSpaceToken);return this.quotedColumnParser.parse(scanner);}return this.nonQuotedColumnParser.parse(scanner);}}]);return ColumnParser;}();exports.ColumnParser=ColumnParser;},{"../Token":154,"./NonQuotedColumnParser":157,"./QuotedColumnParser":158}],157:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NonQuotedColumnParser=void 0;var ColumnFormatter_1=require("./ColumnFormatter");var Token_1=require("../Token");var _Token_1$Token2=Token_1.Token,isTokenDelimiter=_Token_1$Token2.isTokenDelimiter,isTokenRowDelimiter=_Token_1$Token2.isTokenRowDelimiter;var NonQuotedColumnParser=/*#__PURE__*/function(){function NonQuotedColumnParser(parserOptions){_classCallCheck2(this,NonQuotedColumnParser);this.parserOptions=parserOptions;this.columnFormatter=new ColumnFormatter_1.ColumnFormatter(parserOptions);}_createClass2(NonQuotedColumnParser,[{key:"parse",value:function parse(scanner){if(!scanner.hasMoreCharacters){return null;}var parserOptions=this.parserOptions;var characters=[];var nextToken=scanner.nextCharacterToken;for(;nextToken;nextToken=scanner.nextCharacterToken){if(isTokenDelimiter(nextToken,parserOptions)||isTokenRowDelimiter(nextToken)){break;}characters.push(nextToken.token);scanner.advancePastToken(nextToken);}return this.columnFormatter.format(characters.join(''));}}]);return NonQuotedColumnParser;}();exports.NonQuotedColumnParser=NonQuotedColumnParser;},{"../Token":154,"./ColumnFormatter":155}],158:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.QuotedColumnParser=void 0;var ColumnFormatter_1=require("./ColumnFormatter");var Token_1=require("../Token");var _Token_1$Token3=Token_1.Token,isTokenDelimiter=_Token_1$Token3.isTokenDelimiter,isTokenRowDelimiter=_Token_1$Token3.isTokenRowDelimiter,isTokenEscapeCharacter=_Token_1$Token3.isTokenEscapeCharacter,isTokenQuote=_Token_1$Token3.isTokenQuote;var QuotedColumnParser=/*#__PURE__*/function(){function QuotedColumnParser(parserOptions){_classCallCheck2(this,QuotedColumnParser);this.parserOptions=parserOptions;this.columnFormatter=new ColumnFormatter_1.ColumnFormatter(parserOptions);}_createClass2(QuotedColumnParser,[{key:"parse",value:function parse(scanner){if(!scanner.hasMoreCharacters){return null;}var originalCursor=scanner.cursor;var _this$gatherDataBetwe=this.gatherDataBetweenQuotes(scanner),foundClosingQuote=_this$gatherDataBetwe.foundClosingQuote,col=_this$gatherDataBetwe.col;if(!foundClosingQuote){// reset the cursor to the original |
|
|
scanner.advanceTo(originalCursor);// if we didnt find a closing quote but we potentially have more data then skip the parsing |
|
|
// and return the original scanner. |
|
|
if(!scanner.hasMoreData){throw new Error("Parse Error: missing closing: '".concat(this.parserOptions.quote||'',"' in line: at '").concat(scanner.lineFromCursor.replace(/[\r\n]/g,"\\n'"),"'"));}return null;}this.checkForMalformedColumn(scanner);return col;}},{key:"gatherDataBetweenQuotes",value:function gatherDataBetweenQuotes(scanner){var parserOptions=this.parserOptions;var foundStartingQuote=false;var foundClosingQuote=false;var characters=[];var nextToken=scanner.nextCharacterToken;for(;!foundClosingQuote&&nextToken!==null;nextToken=scanner.nextCharacterToken){var isQuote=isTokenQuote(nextToken,parserOptions);// ignore first quote |
|
|
if(!foundStartingQuote&&isQuote){foundStartingQuote=true;}else if(foundStartingQuote){if(isTokenEscapeCharacter(nextToken,parserOptions)){// advance past the escape character so we can get the next one in line |
|
|
scanner.advancePastToken(nextToken);var tokenFollowingEscape=scanner.nextCharacterToken;// if the character following the escape is a quote character then just add |
|
|
// the quote and advance to that character |
|
|
if(tokenFollowingEscape!==null&&(isTokenQuote(tokenFollowingEscape,parserOptions)||isTokenEscapeCharacter(tokenFollowingEscape,parserOptions))){characters.push(tokenFollowingEscape.token);nextToken=tokenFollowingEscape;}else if(isQuote){// if the escape is also a quote then we found our closing quote and finish early |
|
|
foundClosingQuote=true;}else{// other wise add the escape token to the characters since it wast escaping anything |
|
|
characters.push(nextToken.token);}}else if(isQuote){// we found our closing quote! |
|
|
foundClosingQuote=true;}else{// add the token to the characters |
|
|
characters.push(nextToken.token);}}scanner.advancePastToken(nextToken);}return{col:this.columnFormatter.format(characters.join('')),foundClosingQuote:foundClosingQuote};}},{key:"checkForMalformedColumn",value:function checkForMalformedColumn(scanner){var parserOptions=this.parserOptions;var nextNonSpaceToken=scanner.nextNonSpaceToken;if(nextNonSpaceToken){var isNextTokenADelimiter=isTokenDelimiter(nextNonSpaceToken,parserOptions);var isNextTokenARowDelimiter=isTokenRowDelimiter(nextNonSpaceToken);if(!(isNextTokenADelimiter||isNextTokenARowDelimiter)){// if the final quote was NOT followed by a column (,) or row(\n) delimiter then its a bad column |
|
|
// tldr: only part of the column was quoted |
|
|
var linePreview=scanner.lineFromCursor.substr(0,10).replace(/[\r\n]/g,"\\n'");throw new Error("Parse Error: expected: '".concat(parserOptions.escapedDelimiter,"' OR new line got: '").concat(nextNonSpaceToken.token,"'. at '").concat(linePreview));}scanner.advanceToToken(nextNonSpaceToken);}else if(!scanner.hasMoreData){scanner.advancePastLine();}}}]);return QuotedColumnParser;}();exports.QuotedColumnParser=QuotedColumnParser;},{"../Token":154,"./ColumnFormatter":155}],159:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var ColumnParser_1=require("./ColumnParser");Object.defineProperty(exports,"ColumnParser",{enumerable:true,get:function get(){return ColumnParser_1.ColumnParser;}});var NonQuotedColumnParser_1=require("./NonQuotedColumnParser");Object.defineProperty(exports,"NonQuotedColumnParser",{enumerable:true,get:function get(){return NonQuotedColumnParser_1.NonQuotedColumnParser;}});var QuotedColumnParser_1=require("./QuotedColumnParser");Object.defineProperty(exports,"QuotedColumnParser",{enumerable:true,get:function get(){return QuotedColumnParser_1.QuotedColumnParser;}});var ColumnFormatter_1=require("./ColumnFormatter");Object.defineProperty(exports,"ColumnFormatter",{enumerable:true,get:function get(){return ColumnFormatter_1.ColumnFormatter;}});},{"./ColumnFormatter":155,"./ColumnParser":156,"./NonQuotedColumnParser":157,"./QuotedColumnParser":158}],160:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var Parser_1=require("./Parser");Object.defineProperty(exports,"Parser",{enumerable:true,get:function get(){return Parser_1.Parser;}});var RowParser_1=require("./RowParser");Object.defineProperty(exports,"RowParser",{enumerable:true,get:function get(){return RowParser_1.RowParser;}});var Scanner_1=require("./Scanner");Object.defineProperty(exports,"Scanner",{enumerable:true,get:function get(){return Scanner_1.Scanner;}});var Token_1=require("./Token");Object.defineProperty(exports,"Token",{enumerable:true,get:function get(){return Token_1.Token;}});var column_1=require("./column");Object.defineProperty(exports,"ColumnParser",{enumerable:true,get:function get(){return column_1.ColumnParser;}});Object.defineProperty(exports,"NonQuotedColumnParser",{enumerable:true,get:function get(){return column_1.NonQuotedColumnParser;}});Object.defineProperty(exports,"QuotedColumnParser",{enumerable:true,get:function get(){return column_1.QuotedColumnParser;}});},{"./Parser":151,"./RowParser":152,"./Scanner":153,"./Token":154,"./column":159}],161:[function(require,module,exports){"use strict";var __importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{"default":mod};};Object.defineProperty(exports,"__esModule",{value:true});exports.HeaderTransformer=void 0;var lodash_isundefined_1=__importDefault(require("lodash.isundefined"));var lodash_isfunction_1=__importDefault(require("lodash.isfunction"));var lodash_uniq_1=__importDefault(require("lodash.uniq"));var lodash_groupby_1=__importDefault(require("lodash.groupby"));var HeaderTransformer=/*#__PURE__*/function(){function HeaderTransformer(parserOptions){_classCallCheck2(this,HeaderTransformer);this.headers=null;this.receivedHeaders=false;this.shouldUseFirstRow=false;this.processedFirstRow=false;this.headersLength=0;this.parserOptions=parserOptions;if(parserOptions.headers===true){this.shouldUseFirstRow=true;}else if(Array.isArray(parserOptions.headers)){this.setHeaders(parserOptions.headers);}else if(lodash_isfunction_1.default(parserOptions.headers)){this.headersTransform=parserOptions.headers;}}_createClass2(HeaderTransformer,[{key:"transform",value:function transform(row,cb){if(!this.shouldMapRow(row)){return cb(null,{row:null,isValid:true});}return cb(null,this.processRow(row));}},{key:"shouldMapRow",value:function shouldMapRow(row){var parserOptions=this.parserOptions;if(!this.headersTransform&&parserOptions.renameHeaders&&!this.processedFirstRow){if(!this.receivedHeaders){throw new Error('Error renaming headers: new headers must be provided in an array');}this.processedFirstRow=true;return false;}if(!this.receivedHeaders&&Array.isArray(row)){if(this.headersTransform){this.setHeaders(this.headersTransform(row));}else if(this.shouldUseFirstRow){this.setHeaders(row);}else{// dont do anything with the headers if we didnt receive a transform or shouldnt use the first row. |
|
|
return true;}return false;}return true;}},{key:"processRow",value:function processRow(row){if(!this.headers){return{row:row,isValid:true};}var parserOptions=this.parserOptions;if(!parserOptions.discardUnmappedColumns&&row.length>this.headersLength){if(!parserOptions.strictColumnHandling){throw new Error("Unexpected Error: column header mismatch expected: ".concat(this.headersLength," columns got: ").concat(row.length));}return{row:row,isValid:false,reason:"Column header mismatch expected: ".concat(this.headersLength," columns got: ").concat(row.length)};}if(parserOptions.strictColumnHandling&&row.length<this.headersLength){return{row:row,isValid:false,reason:"Column header mismatch expected: ".concat(this.headersLength," columns got: ").concat(row.length)};}return{row:this.mapHeaders(row),isValid:true};}},{key:"mapHeaders",value:function mapHeaders(row){var rowMap={};var headers=this.headers,headersLength=this.headersLength;for(var i=0;i<headersLength;i+=1){var header=headers[i];if(!lodash_isundefined_1.default(header)){var val=row[i];// eslint-disable-next-line no-param-reassign |
|
|
if(lodash_isundefined_1.default(val)){rowMap[header]='';}else{rowMap[header]=val;}}}return rowMap;}},{key:"setHeaders",value:function setHeaders(headers){var _a;var filteredHeaders=headers.filter(function(h){return!!h;});if(lodash_uniq_1.default(filteredHeaders).length!==filteredHeaders.length){var grouped=lodash_groupby_1.default(filteredHeaders);var duplicates=Object.keys(grouped).filter(function(dup){return grouped[dup].length>1;});throw new Error("Duplicate headers found ".concat(JSON.stringify(duplicates)));}this.headers=headers;this.receivedHeaders=true;this.headersLength=((_a=this.headers)===null||_a===void 0?void 0:_a.length)||0;}}]);return HeaderTransformer;}();exports.HeaderTransformer=HeaderTransformer;},{"lodash.groupby":404,"lodash.isfunction":407,"lodash.isundefined":409,"lodash.uniq":410}],162:[function(require,module,exports){"use strict";var __importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{"default":mod};};Object.defineProperty(exports,"__esModule",{value:true});exports.RowTransformerValidator=void 0;var lodash_isfunction_1=__importDefault(require("lodash.isfunction"));var types_1=require("../types");var RowTransformerValidator=/*#__PURE__*/function(){function RowTransformerValidator(){_classCallCheck2(this,RowTransformerValidator);this._rowTransform=null;this._rowValidator=null;}_createClass2(RowTransformerValidator,[{key:"transformAndValidate",value:function transformAndValidate(row,cb){var _this18=this;return this.callTransformer(row,function(transformErr,transformedRow){if(transformErr){return cb(transformErr);}if(!transformedRow){return cb(null,{row:null,isValid:true});}return _this18.callValidator(transformedRow,function(validateErr,validationResult){if(validateErr){return cb(validateErr);}if(validationResult&&!validationResult.isValid){return cb(null,{row:transformedRow,isValid:false,reason:validationResult.reason});}return cb(null,{row:transformedRow,isValid:true});});});}},{key:"callTransformer",value:function callTransformer(row,cb){if(!this._rowTransform){return cb(null,row);}return this._rowTransform(row,cb);}},{key:"callValidator",value:function callValidator(row,cb){if(!this._rowValidator){return cb(null,{row:row,isValid:true});}return this._rowValidator(row,cb);}},{key:"rowTransform",set:function set(transformFunction){if(!lodash_isfunction_1.default(transformFunction)){throw new TypeError('The transform should be a function');}this._rowTransform=RowTransformerValidator.createTransform(transformFunction);}},{key:"rowValidator",set:function set(validateFunction){if(!lodash_isfunction_1.default(validateFunction)){throw new TypeError('The validate should be a function');}this._rowValidator=RowTransformerValidator.createValidator(validateFunction);}}],[{key:"createTransform",value:function createTransform(transformFunction){if(types_1.isSyncTransform(transformFunction)){return function(row,cb){var transformed=null;try{transformed=transformFunction(row);}catch(e){return cb(e);}return cb(null,transformed);};}return transformFunction;}},{key:"createValidator",value:function createValidator(validateFunction){if(types_1.isSyncValidate(validateFunction)){return function(row,cb){cb(null,{row:row,isValid:validateFunction(row)});};}return function(row,cb){validateFunction(row,function(err,isValid,reason){if(err){return cb(err);}if(isValid){return cb(null,{row:row,isValid:isValid,reason:reason});}return cb(null,{row:row,isValid:false,reason:reason});});};}}]);return RowTransformerValidator;}();exports.RowTransformerValidator=RowTransformerValidator;},{"../types":164,"lodash.isfunction":407}],163:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var RowTransformerValidator_1=require("./RowTransformerValidator");Object.defineProperty(exports,"RowTransformerValidator",{enumerable:true,get:function get(){return RowTransformerValidator_1.RowTransformerValidator;}});var HeaderTransformer_1=require("./HeaderTransformer");Object.defineProperty(exports,"HeaderTransformer",{enumerable:true,get:function get(){return HeaderTransformer_1.HeaderTransformer;}});},{"./HeaderTransformer":161,"./RowTransformerValidator":162}],164:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.isSyncValidate=exports.isSyncTransform=void 0;exports.isSyncTransform=function(transform){return transform.length===1;};exports.isSyncValidate=function(validate){return validate.length===1;};},{}],165:[function(require,module,exports){var asn1=exports;asn1.bignum=require('bn.js');asn1.define=require('./asn1/api').define;asn1.base=require('./asn1/base');asn1.constants=require('./asn1/constants');asn1.decoders=require('./asn1/decoders');asn1.encoders=require('./asn1/encoders');},{"./asn1/api":166,"./asn1/base":168,"./asn1/constants":172,"./asn1/decoders":174,"./asn1/encoders":177,"bn.js":179}],166:[function(require,module,exports){var asn1=require('../asn1');var inherits=require('inherits');var api=exports;api.define=function define(name,body){return new Entity(name,body);};function Entity(name,body){this.name=name;this.body=body;this.decoders={};this.encoders={};};Entity.prototype._createNamed=function createNamed(base){var named;try{named=require('vm').runInThisContext('(function '+this.name+'(entity) {\n'+' this._initNamed(entity);\n'+'})');}catch(e){named=function named(entity){this._initNamed(entity);};}inherits(named,base);named.prototype._initNamed=function initnamed(entity){base.call(this,entity);};return new named(this);};Entity.prototype._getDecoder=function _getDecoder(enc){enc=enc||'der';// Lazily create decoder |
|
|
if(!this.decoders.hasOwnProperty(enc))this.decoders[enc]=this._createNamed(asn1.decoders[enc]);return this.decoders[enc];};Entity.prototype.decode=function decode(data,enc,options){return this._getDecoder(enc).decode(data,options);};Entity.prototype._getEncoder=function _getEncoder(enc){enc=enc||'der';// Lazily create encoder |
|
|
if(!this.encoders.hasOwnProperty(enc))this.encoders[enc]=this._createNamed(asn1.encoders[enc]);return this.encoders[enc];};Entity.prototype.encode=function encode(data,enc,/* internal */reporter){return this._getEncoder(enc).encode(data,reporter);};},{"../asn1":165,"inherits":364,"vm":511}],167:[function(require,module,exports){var inherits=require('inherits');var Reporter=require('../base').Reporter;var Buffer=require('buffer').Buffer;function DecoderBuffer(base,options){Reporter.call(this,options);if(!Buffer.isBuffer(base)){this.error('Input not Buffer');return;}this.base=base;this.offset=0;this.length=base.length;}inherits(DecoderBuffer,Reporter);exports.DecoderBuffer=DecoderBuffer;DecoderBuffer.prototype.save=function save(){return{offset:this.offset,reporter:Reporter.prototype.save.call(this)};};DecoderBuffer.prototype.restore=function restore(save){// Return skipped data |
|
|
var res=new DecoderBuffer(this.base);res.offset=save.offset;res.length=this.offset;this.offset=save.offset;Reporter.prototype.restore.call(this,save.reporter);return res;};DecoderBuffer.prototype.isEmpty=function isEmpty(){return this.offset===this.length;};DecoderBuffer.prototype.readUInt8=function readUInt8(fail){if(this.offset+1<=this.length)return this.base.readUInt8(this.offset++,true);else return this.error(fail||'DecoderBuffer overrun');};DecoderBuffer.prototype.skip=function skip(bytes,fail){if(!(this.offset+bytes<=this.length))return this.error(fail||'DecoderBuffer overrun');var res=new DecoderBuffer(this.base);// Share reporter state |
|
|
res._reporterState=this._reporterState;res.offset=this.offset;res.length=this.offset+bytes;this.offset+=bytes;return res;};DecoderBuffer.prototype.raw=function raw(save){return this.base.slice(save?save.offset:this.offset,this.length);};function EncoderBuffer(value,reporter){if(Array.isArray(value)){this.length=0;this.value=value.map(function(item){if(!(item instanceof EncoderBuffer))item=new EncoderBuffer(item,reporter);this.length+=item.length;return item;},this);}else if(typeof value==='number'){if(!(0<=value&&value<=0xff))return reporter.error('non-byte EncoderBuffer value');this.value=value;this.length=1;}else if(typeof value==='string'){this.value=value;this.length=Buffer.byteLength(value);}else if(Buffer.isBuffer(value)){this.value=value;this.length=value.length;}else{return reporter.error('Unsupported type: '+_typeof2(value));}}exports.EncoderBuffer=EncoderBuffer;EncoderBuffer.prototype.join=function join(out,offset){if(!out)out=new Buffer(this.length);if(!offset)offset=0;if(this.length===0)return out;if(Array.isArray(this.value)){this.value.forEach(function(item){item.join(out,offset);offset+=item.length;});}else{if(typeof this.value==='number')out[offset]=this.value;else if(typeof this.value==='string')out.write(this.value,offset);else if(Buffer.isBuffer(this.value))this.value.copy(out,offset);offset+=this.length;}return out;};},{"../base":168,"buffer":214,"inherits":364}],168:[function(require,module,exports){var base=exports;base.Reporter=require('./reporter').Reporter;base.DecoderBuffer=require('./buffer').DecoderBuffer;base.EncoderBuffer=require('./buffer').EncoderBuffer;base.Node=require('./node');},{"./buffer":167,"./node":169,"./reporter":170}],169:[function(require,module,exports){var Reporter=require('../base').Reporter;var EncoderBuffer=require('../base').EncoderBuffer;var DecoderBuffer=require('../base').DecoderBuffer;var assert=require('minimalistic-assert');// Supported tags |
|
|
var tags=['seq','seqof','set','setof','objid','bool','gentime','utctime','null_','enum','int','objDesc','bitstr','bmpstr','charstr','genstr','graphstr','ia5str','iso646str','numstr','octstr','printstr','t61str','unistr','utf8str','videostr'];// Public methods list |
|
|
var methods=['key','obj','use','optional','explicit','implicit','def','choice','any','contains'].concat(tags);// Overrided methods list |
|
|
var overrided=['_peekTag','_decodeTag','_use','_decodeStr','_decodeObjid','_decodeTime','_decodeNull','_decodeInt','_decodeBool','_decodeList','_encodeComposite','_encodeStr','_encodeObjid','_encodeTime','_encodeNull','_encodeInt','_encodeBool'];function Node(enc,parent){var state={};this._baseState=state;state.enc=enc;state.parent=parent||null;state.children=null;// State |
|
|
state.tag=null;state.args=null;state.reverseArgs=null;state.choice=null;state.optional=false;state.any=false;state.obj=false;state.use=null;state.useDecoder=null;state.key=null;state['default']=null;state.explicit=null;state.implicit=null;state.contains=null;// Should create new instance on each method |
|
|
if(!state.parent){state.children=[];this._wrap();}}module.exports=Node;var stateProps=['enc','parent','children','tag','args','reverseArgs','choice','optional','any','obj','use','alteredUse','key','default','explicit','implicit','contains'];Node.prototype.clone=function clone(){var state=this._baseState;var cstate={};stateProps.forEach(function(prop){cstate[prop]=state[prop];});var res=new this.constructor(cstate.parent);res._baseState=cstate;return res;};Node.prototype._wrap=function wrap(){var state=this._baseState;methods.forEach(function(method){this[method]=function _wrappedMethod(){var clone=new this.constructor(this);state.children.push(clone);return clone[method].apply(clone,arguments);};},this);};Node.prototype._init=function init(body){var state=this._baseState;assert(state.parent===null);body.call(this);// Filter children |
|
|
state.children=state.children.filter(function(child){return child._baseState.parent===this;},this);assert.equal(state.children.length,1,'Root node can have only one child');};Node.prototype._useArgs=function useArgs(args){var state=this._baseState;// Filter children and args |
|
|
var children=args.filter(function(arg){return arg instanceof this.constructor;},this);args=args.filter(function(arg){return!(arg instanceof this.constructor);},this);if(children.length!==0){assert(state.children===null);state.children=children;// Replace parent to maintain backward link |
|
|
children.forEach(function(child){child._baseState.parent=this;},this);}if(args.length!==0){assert(state.args===null);state.args=args;state.reverseArgs=args.map(function(arg){if(_typeof2(arg)!=='object'||arg.constructor!==Object)return arg;var res={};Object.keys(arg).forEach(function(key){if(key==(key|0))key|=0;var value=arg[key];res[value]=key;});return res;});}};// |
|
|
// Overrided methods |
|
|
// |
|
|
overrided.forEach(function(method){Node.prototype[method]=function _overrided(){var state=this._baseState;throw new Error(method+' not implemented for encoding: '+state.enc);};});// |
|
|
// Public methods |
|
|
// |
|
|
tags.forEach(function(tag){Node.prototype[tag]=function _tagMethod(){var state=this._baseState;var args=Array.prototype.slice.call(arguments);assert(state.tag===null);state.tag=tag;this._useArgs(args);return this;};});Node.prototype.use=function use(item){assert(item);var state=this._baseState;assert(state.use===null);state.use=item;return this;};Node.prototype.optional=function optional(){var state=this._baseState;state.optional=true;return this;};Node.prototype.def=function def(val){var state=this._baseState;assert(state['default']===null);state['default']=val;state.optional=true;return this;};Node.prototype.explicit=function explicit(num){var state=this._baseState;assert(state.explicit===null&&state.implicit===null);state.explicit=num;return this;};Node.prototype.implicit=function implicit(num){var state=this._baseState;assert(state.explicit===null&&state.implicit===null);state.implicit=num;return this;};Node.prototype.obj=function obj(){var state=this._baseState;var args=Array.prototype.slice.call(arguments);state.obj=true;if(args.length!==0)this._useArgs(args);return this;};Node.prototype.key=function key(newKey){var state=this._baseState;assert(state.key===null);state.key=newKey;return this;};Node.prototype.any=function any(){var state=this._baseState;state.any=true;return this;};Node.prototype.choice=function choice(obj){var state=this._baseState;assert(state.choice===null);state.choice=obj;this._useArgs(Object.keys(obj).map(function(key){return obj[key];}));return this;};Node.prototype.contains=function contains(item){var state=this._baseState;assert(state.use===null);state.contains=item;return this;};// |
|
|
// Decoding |
|
|
// |
|
|
Node.prototype._decode=function decode(input,options){var state=this._baseState;// Decode root node |
|
|
if(state.parent===null)return input.wrapResult(state.children[0]._decode(input,options));var result=state['default'];var present=true;var prevKey=null;if(state.key!==null)prevKey=input.enterKey(state.key);// Check if tag is there |
|
|
if(state.optional){var tag=null;if(state.explicit!==null)tag=state.explicit;else if(state.implicit!==null)tag=state.implicit;else if(state.tag!==null)tag=state.tag;if(tag===null&&!state.any){// Trial and Error |
|
|
var save=input.save();try{if(state.choice===null)this._decodeGeneric(state.tag,input,options);else this._decodeChoice(input,options);present=true;}catch(e){present=false;}input.restore(save);}else{present=this._peekTag(input,tag,state.any);if(input.isError(present))return present;}}// Push object on stack |
|
|
var prevObj;if(state.obj&&present)prevObj=input.enterObject();if(present){// Unwrap explicit values |
|
|
if(state.explicit!==null){var explicit=this._decodeTag(input,state.explicit);if(input.isError(explicit))return explicit;input=explicit;}var start=input.offset;// Unwrap implicit and normal values |
|
|
if(state.use===null&&state.choice===null){if(state.any)var save=input.save();var body=this._decodeTag(input,state.implicit!==null?state.implicit:state.tag,state.any);if(input.isError(body))return body;if(state.any)result=input.raw(save);else input=body;}if(options&&options.track&&state.tag!==null)options.track(input.path(),start,input.length,'tagged');if(options&&options.track&&state.tag!==null)options.track(input.path(),input.offset,input.length,'content');// Select proper method for tag |
|
|
if(state.any)result=result;else if(state.choice===null)result=this._decodeGeneric(state.tag,input,options);else result=this._decodeChoice(input,options);if(input.isError(result))return result;// Decode children |
|
|
if(!state.any&&state.choice===null&&state.children!==null){state.children.forEach(function decodeChildren(child){// NOTE: We are ignoring errors here, to let parser continue with other |
|
|
// parts of encoded data |
|
|
child._decode(input,options);});}// Decode contained/encoded by schema, only in bit or octet strings |
|
|
if(state.contains&&(state.tag==='octstr'||state.tag==='bitstr')){var data=new DecoderBuffer(result);result=this._getUse(state.contains,input._reporterState.obj)._decode(data,options);}}// Pop object |
|
|
if(state.obj&&present)result=input.leaveObject(prevObj);// Set key |
|
|
if(state.key!==null&&(result!==null||present===true))input.leaveKey(prevKey,state.key,result);else if(prevKey!==null)input.exitKey(prevKey);return result;};Node.prototype._decodeGeneric=function decodeGeneric(tag,input,options){var state=this._baseState;if(tag==='seq'||tag==='set')return null;if(tag==='seqof'||tag==='setof')return this._decodeList(input,tag,state.args[0],options);else if(/str$/.test(tag))return this._decodeStr(input,tag,options);else if(tag==='objid'&&state.args)return this._decodeObjid(input,state.args[0],state.args[1],options);else if(tag==='objid')return this._decodeObjid(input,null,null,options);else if(tag==='gentime'||tag==='utctime')return this._decodeTime(input,tag,options);else if(tag==='null_')return this._decodeNull(input,options);else if(tag==='bool')return this._decodeBool(input,options);else if(tag==='objDesc')return this._decodeStr(input,tag,options);else if(tag==='int'||tag==='enum')return this._decodeInt(input,state.args&&state.args[0],options);if(state.use!==null){return this._getUse(state.use,input._reporterState.obj)._decode(input,options);}else{return input.error('unknown tag: '+tag);}};Node.prototype._getUse=function _getUse(entity,obj){var state=this._baseState;// Create altered use decoder if implicit is set |
|
|
state.useDecoder=this._use(entity,obj);assert(state.useDecoder._baseState.parent===null);state.useDecoder=state.useDecoder._baseState.children[0];if(state.implicit!==state.useDecoder._baseState.implicit){state.useDecoder=state.useDecoder.clone();state.useDecoder._baseState.implicit=state.implicit;}return state.useDecoder;};Node.prototype._decodeChoice=function decodeChoice(input,options){var state=this._baseState;var result=null;var match=false;Object.keys(state.choice).some(function(key){var save=input.save();var node=state.choice[key];try{var value=node._decode(input,options);if(input.isError(value))return false;result={type:key,value:value};match=true;}catch(e){input.restore(save);return false;}return true;},this);if(!match)return input.error('Choice not matched');return result;};// |
|
|
// Encoding |
|
|
// |
|
|
Node.prototype._createEncoderBuffer=function createEncoderBuffer(data){return new EncoderBuffer(data,this.reporter);};Node.prototype._encode=function encode(data,reporter,parent){var state=this._baseState;if(state['default']!==null&&state['default']===data)return;var result=this._encodeValue(data,reporter,parent);if(result===undefined)return;if(this._skipDefault(result,reporter,parent))return;return result;};Node.prototype._encodeValue=function encode(data,reporter,parent){var state=this._baseState;// Decode root node |
|
|
if(state.parent===null)return state.children[0]._encode(data,reporter||new Reporter());var result=null;// Set reporter to share it with a child class |
|
|
this.reporter=reporter;// Check if data is there |
|
|
if(state.optional&&data===undefined){if(state['default']!==null)data=state['default'];else return;}// Encode children first |
|
|
var content=null;var primitive=false;if(state.any){// Anything that was given is translated to buffer |
|
|
result=this._createEncoderBuffer(data);}else if(state.choice){result=this._encodeChoice(data,reporter);}else if(state.contains){content=this._getUse(state.contains,parent)._encode(data,reporter);primitive=true;}else if(state.children){content=state.children.map(function(child){if(child._baseState.tag==='null_')return child._encode(null,reporter,data);if(child._baseState.key===null)return reporter.error('Child should have a key');var prevKey=reporter.enterKey(child._baseState.key);if(_typeof2(data)!=='object')return reporter.error('Child expected, but input is not object');var res=child._encode(data[child._baseState.key],reporter,data);reporter.leaveKey(prevKey);return res;},this).filter(function(child){return child;});content=this._createEncoderBuffer(content);}else{if(state.tag==='seqof'||state.tag==='setof'){// TODO(indutny): this should be thrown on DSL level |
|
|
if(!(state.args&&state.args.length===1))return reporter.error('Too many args for : '+state.tag);if(!Array.isArray(data))return reporter.error('seqof/setof, but data is not Array');var child=this.clone();child._baseState.implicit=null;content=this._createEncoderBuffer(data.map(function(item){var state=this._baseState;return this._getUse(state.args[0],data)._encode(item,reporter);},child));}else if(state.use!==null){result=this._getUse(state.use,parent)._encode(data,reporter);}else{content=this._encodePrimitive(state.tag,data);primitive=true;}}// Encode data itself |
|
|
var result;if(!state.any&&state.choice===null){var tag=state.implicit!==null?state.implicit:state.tag;var cls=state.implicit===null?'universal':'context';if(tag===null){if(state.use===null)reporter.error('Tag could be omitted only for .use()');}else{if(state.use===null)result=this._encodeComposite(tag,primitive,cls,content);}}// Wrap in explicit |
|
|
if(state.explicit!==null)result=this._encodeComposite(state.explicit,false,'context',result);return result;};Node.prototype._encodeChoice=function encodeChoice(data,reporter){var state=this._baseState;var node=state.choice[data.type];if(!node){assert(false,data.type+' not found in '+JSON.stringify(Object.keys(state.choice)));}return node._encode(data.value,reporter);};Node.prototype._encodePrimitive=function encodePrimitive(tag,data){var state=this._baseState;if(/str$/.test(tag))return this._encodeStr(data,tag);else if(tag==='objid'&&state.args)return this._encodeObjid(data,state.reverseArgs[0],state.args[1]);else if(tag==='objid')return this._encodeObjid(data,null,null);else if(tag==='gentime'||tag==='utctime')return this._encodeTime(data,tag);else if(tag==='null_')return this._encodeNull();else if(tag==='int'||tag==='enum')return this._encodeInt(data,state.args&&state.reverseArgs[0]);else if(tag==='bool')return this._encodeBool(data);else if(tag==='objDesc')return this._encodeStr(data,tag);else throw new Error('Unsupported tag: '+tag);};Node.prototype._isNumstr=function isNumstr(str){return /^[0-9 ]*$/.test(str);};Node.prototype._isPrintstr=function isPrintstr(str){return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str);};},{"../base":168,"minimalistic-assert":414}],170:[function(require,module,exports){var inherits=require('inherits');function Reporter(options){this._reporterState={obj:null,path:[],options:options||{},errors:[]};}exports.Reporter=Reporter;Reporter.prototype.isError=function isError(obj){return obj instanceof ReporterError;};Reporter.prototype.save=function save(){var state=this._reporterState;return{obj:state.obj,pathLen:state.path.length};};Reporter.prototype.restore=function restore(data){var state=this._reporterState;state.obj=data.obj;state.path=state.path.slice(0,data.pathLen);};Reporter.prototype.enterKey=function enterKey(key){return this._reporterState.path.push(key);};Reporter.prototype.exitKey=function exitKey(index){var state=this._reporterState;state.path=state.path.slice(0,index-1);};Reporter.prototype.leaveKey=function leaveKey(index,key,value){var state=this._reporterState;this.exitKey(index);if(state.obj!==null)state.obj[key]=value;};Reporter.prototype.path=function path(){return this._reporterState.path.join('/');};Reporter.prototype.enterObject=function enterObject(){var state=this._reporterState;var prev=state.obj;state.obj={};return prev;};Reporter.prototype.leaveObject=function leaveObject(prev){var state=this._reporterState;var now=state.obj;state.obj=prev;return now;};Reporter.prototype.error=function error(msg){var err;var state=this._reporterState;var inherited=msg instanceof ReporterError;if(inherited){err=msg;}else{err=new ReporterError(state.path.map(function(elem){return'['+JSON.stringify(elem)+']';}).join(''),msg.message||msg,msg.stack);}if(!state.options.partial)throw err;if(!inherited)state.errors.push(err);return err;};Reporter.prototype.wrapResult=function wrapResult(result){var state=this._reporterState;if(!state.options.partial)return result;return{result:this.isError(result)?null:result,errors:state.errors};};function ReporterError(path,msg){this.path=path;this.rethrow(msg);};inherits(ReporterError,Error);ReporterError.prototype.rethrow=function rethrow(msg){this.message=msg+' at: '+(this.path||'(shallow)');if(Error.captureStackTrace)Error.captureStackTrace(this,ReporterError);if(!this.stack){try{// IE only adds stack when thrown |
|
|
throw new Error(this.message);}catch(e){this.stack=e.stack;}}return this;};},{"inherits":364}],171:[function(require,module,exports){var constants=require('../constants');exports.tagClass={0:'universal',1:'application',2:'context',3:'private'};exports.tagClassByName=constants._reverse(exports.tagClass);exports.tag={0x00:'end',0x01:'bool',0x02:'int',0x03:'bitstr',0x04:'octstr',0x05:'null_',0x06:'objid',0x07:'objDesc',0x08:'external',0x09:'real',0x0a:'enum',0x0b:'embed',0x0c:'utf8str',0x0d:'relativeOid',0x10:'seq',0x11:'set',0x12:'numstr',0x13:'printstr',0x14:'t61str',0x15:'videostr',0x16:'ia5str',0x17:'utctime',0x18:'gentime',0x19:'graphstr',0x1a:'iso646str',0x1b:'genstr',0x1c:'unistr',0x1d:'charstr',0x1e:'bmpstr'};exports.tagByName=constants._reverse(exports.tag);},{"../constants":172}],172:[function(require,module,exports){var constants=exports;// Helper |
|
|
constants._reverse=function reverse(map){var res={};Object.keys(map).forEach(function(key){// Convert key to integer if it is stringified |
|
|
if((key|0)==key)key=key|0;var value=map[key];res[value]=key;});return res;};constants.der=require('./der');},{"./der":171}],173:[function(require,module,exports){var inherits=require('inherits');var asn1=require('../../asn1');var base=asn1.base;var bignum=asn1.bignum;// Import DER constants |
|
|
var der=asn1.constants.der;function DERDecoder(entity){this.enc='der';this.name=entity.name;this.entity=entity;// Construct base tree |
|
|
this.tree=new DERNode();this.tree._init(entity.body);};module.exports=DERDecoder;DERDecoder.prototype.decode=function decode(data,options){if(!(data instanceof base.DecoderBuffer))data=new base.DecoderBuffer(data,options);return this.tree._decode(data,options);};// Tree methods |
|
|
function DERNode(parent){base.Node.call(this,'der',parent);}inherits(DERNode,base.Node);DERNode.prototype._peekTag=function peekTag(buffer,tag,any){if(buffer.isEmpty())return false;var state=buffer.save();var decodedTag=derDecodeTag(buffer,'Failed to peek tag: "'+tag+'"');if(buffer.isError(decodedTag))return decodedTag;buffer.restore(state);return decodedTag.tag===tag||decodedTag.tagStr===tag||decodedTag.tagStr+'of'===tag||any;};DERNode.prototype._decodeTag=function decodeTag(buffer,tag,any){var decodedTag=derDecodeTag(buffer,'Failed to decode tag of "'+tag+'"');if(buffer.isError(decodedTag))return decodedTag;var len=derDecodeLen(buffer,decodedTag.primitive,'Failed to get length of "'+tag+'"');// Failure |
|
|
if(buffer.isError(len))return len;if(!any&&decodedTag.tag!==tag&&decodedTag.tagStr!==tag&&decodedTag.tagStr+'of'!==tag){return buffer.error('Failed to match tag: "'+tag+'"');}if(decodedTag.primitive||len!==null)return buffer.skip(len,'Failed to match body of: "'+tag+'"');// Indefinite length... find END tag |
|
|
var state=buffer.save();var res=this._skipUntilEnd(buffer,'Failed to skip indefinite length body: "'+this.tag+'"');if(buffer.isError(res))return res;len=buffer.offset-state.offset;buffer.restore(state);return buffer.skip(len,'Failed to match body of: "'+tag+'"');};DERNode.prototype._skipUntilEnd=function skipUntilEnd(buffer,fail){while(true){var tag=derDecodeTag(buffer,fail);if(buffer.isError(tag))return tag;var len=derDecodeLen(buffer,tag.primitive,fail);if(buffer.isError(len))return len;var res;if(tag.primitive||len!==null)res=buffer.skip(len);else res=this._skipUntilEnd(buffer,fail);// Failure |
|
|
if(buffer.isError(res))return res;if(tag.tagStr==='end')break;}};DERNode.prototype._decodeList=function decodeList(buffer,tag,decoder,options){var result=[];while(!buffer.isEmpty()){var possibleEnd=this._peekTag(buffer,'end');if(buffer.isError(possibleEnd))return possibleEnd;var res=decoder.decode(buffer,'der',options);if(buffer.isError(res)&&possibleEnd)break;result.push(res);}return result;};DERNode.prototype._decodeStr=function decodeStr(buffer,tag){if(tag==='bitstr'){var unused=buffer.readUInt8();if(buffer.isError(unused))return unused;return{unused:unused,data:buffer.raw()};}else if(tag==='bmpstr'){var raw=buffer.raw();if(raw.length%2===1)return buffer.error('Decoding of string type: bmpstr length mismatch');var str='';for(var i=0;i<raw.length/2;i++){str+=String.fromCharCode(raw.readUInt16BE(i*2));}return str;}else if(tag==='numstr'){var numstr=buffer.raw().toString('ascii');if(!this._isNumstr(numstr)){return buffer.error('Decoding of string type: '+'numstr unsupported characters');}return numstr;}else if(tag==='octstr'){return buffer.raw();}else if(tag==='objDesc'){return buffer.raw();}else if(tag==='printstr'){var printstr=buffer.raw().toString('ascii');if(!this._isPrintstr(printstr)){return buffer.error('Decoding of string type: '+'printstr unsupported characters');}return printstr;}else if(/str$/.test(tag)){return buffer.raw().toString();}else{return buffer.error('Decoding of string type: '+tag+' unsupported');}};DERNode.prototype._decodeObjid=function decodeObjid(buffer,values,relative){var result;var identifiers=[];var ident=0;while(!buffer.isEmpty()){var subident=buffer.readUInt8();ident<<=7;ident|=subident&0x7f;if((subident&0x80)===0){identifiers.push(ident);ident=0;}}if(subident&0x80)identifiers.push(ident);var first=identifiers[0]/40|0;var second=identifiers[0]%40;if(relative)result=identifiers;else result=[first,second].concat(identifiers.slice(1));if(values){var tmp=values[result.join(' ')];if(tmp===undefined)tmp=values[result.join('.')];if(tmp!==undefined)result=tmp;}return result;};DERNode.prototype._decodeTime=function decodeTime(buffer,tag){var str=buffer.raw().toString();if(tag==='gentime'){var year=str.slice(0,4)|0;var mon=str.slice(4,6)|0;var day=str.slice(6,8)|0;var hour=str.slice(8,10)|0;var min=str.slice(10,12)|0;var sec=str.slice(12,14)|0;}else if(tag==='utctime'){var year=str.slice(0,2)|0;var mon=str.slice(2,4)|0;var day=str.slice(4,6)|0;var hour=str.slice(6,8)|0;var min=str.slice(8,10)|0;var sec=str.slice(10,12)|0;if(year<70)year=2000+year;else year=1900+year;}else{return buffer.error('Decoding '+tag+' time is not supported yet');}return Date.UTC(year,mon-1,day,hour,min,sec,0);};DERNode.prototype._decodeNull=function decodeNull(buffer){return null;};DERNode.prototype._decodeBool=function decodeBool(buffer){var res=buffer.readUInt8();if(buffer.isError(res))return res;else return res!==0;};DERNode.prototype._decodeInt=function decodeInt(buffer,values){// Bigint, return as it is (assume big endian) |
|
|
var raw=buffer.raw();var res=new bignum(raw);if(values)res=values[res.toString(10)]||res;return res;};DERNode.prototype._use=function use(entity,obj){if(typeof entity==='function')entity=entity(obj);return entity._getDecoder('der').tree;};// Utility methods |
|
|
function derDecodeTag(buf,fail){var tag=buf.readUInt8(fail);if(buf.isError(tag))return tag;var cls=der.tagClass[tag>>6];var primitive=(tag&0x20)===0;// Multi-octet tag - load |
|
|
if((tag&0x1f)===0x1f){var oct=tag;tag=0;while((oct&0x80)===0x80){oct=buf.readUInt8(fail);if(buf.isError(oct))return oct;tag<<=7;tag|=oct&0x7f;}}else{tag&=0x1f;}var tagStr=der.tag[tag];return{cls:cls,primitive:primitive,tag:tag,tagStr:tagStr};}function derDecodeLen(buf,primitive,fail){var len=buf.readUInt8(fail);if(buf.isError(len))return len;// Indefinite form |
|
|
if(!primitive&&len===0x80)return null;// Definite form |
|
|
if((len&0x80)===0){// Short form |
|
|
return len;}// Long form |
|
|
var num=len&0x7f;if(num>4)return buf.error('length octect is too long');len=0;for(var i=0;i<num;i++){len<<=8;var j=buf.readUInt8(fail);if(buf.isError(j))return j;len|=j;}return len;}},{"../../asn1":165,"inherits":364}],174:[function(require,module,exports){var decoders=exports;decoders.der=require('./der');decoders.pem=require('./pem');},{"./der":173,"./pem":175}],175:[function(require,module,exports){var inherits=require('inherits');var Buffer=require('buffer').Buffer;var DERDecoder=require('./der');function PEMDecoder(entity){DERDecoder.call(this,entity);this.enc='pem';};inherits(PEMDecoder,DERDecoder);module.exports=PEMDecoder;PEMDecoder.prototype.decode=function decode(data,options){var lines=data.toString().split(/[\r\n]+/g);var label=options.label.toUpperCase();var re=/^-----(BEGIN|END) ([^-]+)-----$/;var start=-1;var end=-1;for(var i=0;i<lines.length;i++){var match=lines[i].match(re);if(match===null)continue;if(match[2]!==label)continue;if(start===-1){if(match[1]!=='BEGIN')break;start=i;}else{if(match[1]!=='END')break;end=i;break;}}if(start===-1||end===-1)throw new Error('PEM section not found for: '+label);var base64=lines.slice(start+1,end).join('');// Remove excessive symbols |
|
|
base64.replace(/[^a-z0-9\+\/=]+/gi,'');var input=new Buffer(base64,'base64');return DERDecoder.prototype.decode.call(this,input,options);};},{"./der":173,"buffer":214,"inherits":364}],176:[function(require,module,exports){var inherits=require('inherits');var Buffer=require('buffer').Buffer;var asn1=require('../../asn1');var base=asn1.base;// Import DER constants |
|
|
var der=asn1.constants.der;function DEREncoder(entity){this.enc='der';this.name=entity.name;this.entity=entity;// Construct base tree |
|
|
this.tree=new DERNode();this.tree._init(entity.body);};module.exports=DEREncoder;DEREncoder.prototype.encode=function encode(data,reporter){return this.tree._encode(data,reporter).join();};// Tree methods |
|
|
function DERNode(parent){base.Node.call(this,'der',parent);}inherits(DERNode,base.Node);DERNode.prototype._encodeComposite=function encodeComposite(tag,primitive,cls,content){var encodedTag=encodeTag(tag,primitive,cls,this.reporter);// Short form |
|
|
if(content.length<0x80){var header=new Buffer(2);header[0]=encodedTag;header[1]=content.length;return this._createEncoderBuffer([header,content]);}// Long form |
|
|
// Count octets required to store length |
|
|
var lenOctets=1;for(var i=content.length;i>=0x100;i>>=8){lenOctets++;}var header=new Buffer(1+1+lenOctets);header[0]=encodedTag;header[1]=0x80|lenOctets;for(var i=1+lenOctets,j=content.length;j>0;i--,j>>=8){header[i]=j&0xff;}return this._createEncoderBuffer([header,content]);};DERNode.prototype._encodeStr=function encodeStr(str,tag){if(tag==='bitstr'){return this._createEncoderBuffer([str.unused|0,str.data]);}else if(tag==='bmpstr'){var buf=new Buffer(str.length*2);for(var i=0;i<str.length;i++){buf.writeUInt16BE(str.charCodeAt(i),i*2);}return this._createEncoderBuffer(buf);}else if(tag==='numstr'){if(!this._isNumstr(str)){return this.reporter.error('Encoding of string type: numstr supports '+'only digits and space');}return this._createEncoderBuffer(str);}else if(tag==='printstr'){if(!this._isPrintstr(str)){return this.reporter.error('Encoding of string type: printstr supports '+'only latin upper and lower case letters, '+'digits, space, apostrophe, left and rigth '+'parenthesis, plus sign, comma, hyphen, '+'dot, slash, colon, equal sign, '+'question mark');}return this._createEncoderBuffer(str);}else if(/str$/.test(tag)){return this._createEncoderBuffer(str);}else if(tag==='objDesc'){return this._createEncoderBuffer(str);}else{return this.reporter.error('Encoding of string type: '+tag+' unsupported');}};DERNode.prototype._encodeObjid=function encodeObjid(id,values,relative){if(typeof id==='string'){if(!values)return this.reporter.error('string objid given, but no values map found');if(!values.hasOwnProperty(id))return this.reporter.error('objid not found in values map');id=values[id].split(/[\s\.]+/g);for(var i=0;i<id.length;i++){id[i]|=0;}}else if(Array.isArray(id)){id=id.slice();for(var i=0;i<id.length;i++){id[i]|=0;}}if(!Array.isArray(id)){return this.reporter.error('objid() should be either array or string, '+'got: '+JSON.stringify(id));}if(!relative){if(id[1]>=40)return this.reporter.error('Second objid identifier OOB');id.splice(0,2,id[0]*40+id[1]);}// Count number of octets |
|
|
var size=0;for(var i=0;i<id.length;i++){var ident=id[i];for(size++;ident>=0x80;ident>>=7){size++;}}var objid=new Buffer(size);var offset=objid.length-1;for(var i=id.length-1;i>=0;i--){var ident=id[i];objid[offset--]=ident&0x7f;while((ident>>=7)>0){objid[offset--]=0x80|ident&0x7f;}}return this._createEncoderBuffer(objid);};function two(num){if(num<10)return'0'+num;else return num;}DERNode.prototype._encodeTime=function encodeTime(time,tag){var str;var date=new Date(time);if(tag==='gentime'){str=[two(date.getFullYear()),two(date.getUTCMonth()+1),two(date.getUTCDate()),two(date.getUTCHours()),two(date.getUTCMinutes()),two(date.getUTCSeconds()),'Z'].join('');}else if(tag==='utctime'){str=[two(date.getFullYear()%100),two(date.getUTCMonth()+1),two(date.getUTCDate()),two(date.getUTCHours()),two(date.getUTCMinutes()),two(date.getUTCSeconds()),'Z'].join('');}else{this.reporter.error('Encoding '+tag+' time is not supported yet');}return this._encodeStr(str,'octstr');};DERNode.prototype._encodeNull=function encodeNull(){return this._createEncoderBuffer('');};DERNode.prototype._encodeInt=function encodeInt(num,values){if(typeof num==='string'){if(!values)return this.reporter.error('String int or enum given, but no values map');if(!values.hasOwnProperty(num)){return this.reporter.error('Values map doesn\'t contain: '+JSON.stringify(num));}num=values[num];}// Bignum, assume big endian |
|
|
if(typeof num!=='number'&&!Buffer.isBuffer(num)){var numArray=num.toArray();if(!num.sign&&numArray[0]&0x80){numArray.unshift(0);}num=new Buffer(numArray);}if(Buffer.isBuffer(num)){var size=num.length;if(num.length===0)size++;var out=new Buffer(size);num.copy(out);if(num.length===0)out[0]=0;return this._createEncoderBuffer(out);}if(num<0x80)return this._createEncoderBuffer(num);if(num<0x100)return this._createEncoderBuffer([0,num]);var size=1;for(var i=num;i>=0x100;i>>=8){size++;}var out=new Array(size);for(var i=out.length-1;i>=0;i--){out[i]=num&0xff;num>>=8;}if(out[0]&0x80){out.unshift(0);}return this._createEncoderBuffer(new Buffer(out));};DERNode.prototype._encodeBool=function encodeBool(value){return this._createEncoderBuffer(value?0xff:0);};DERNode.prototype._use=function use(entity,obj){if(typeof entity==='function')entity=entity(obj);return entity._getEncoder('der').tree;};DERNode.prototype._skipDefault=function skipDefault(dataBuffer,reporter,parent){var state=this._baseState;var i;if(state['default']===null)return false;var data=dataBuffer.join();if(state.defaultBuffer===undefined)state.defaultBuffer=this._encodeValue(state['default'],reporter,parent).join();if(data.length!==state.defaultBuffer.length)return false;for(i=0;i<data.length;i++){if(data[i]!==state.defaultBuffer[i])return false;}return true;};// Utility methods |
|
|
function encodeTag(tag,primitive,cls,reporter){var res;if(tag==='seqof')tag='seq';else if(tag==='setof')tag='set';if(der.tagByName.hasOwnProperty(tag))res=der.tagByName[tag];else if(typeof tag==='number'&&(tag|0)===tag)res=tag;else return reporter.error('Unknown tag: '+tag);if(res>=0x1f)return reporter.error('Multi-octet tag encoding unsupported');if(!primitive)res|=0x20;res|=der.tagClassByName[cls||'universal']<<6;return res;}},{"../../asn1":165,"buffer":214,"inherits":364}],177:[function(require,module,exports){var encoders=exports;encoders.der=require('./der');encoders.pem=require('./pem');},{"./der":176,"./pem":178}],178:[function(require,module,exports){var inherits=require('inherits');var DEREncoder=require('./der');function PEMEncoder(entity){DEREncoder.call(this,entity);this.enc='pem';};inherits(PEMEncoder,DEREncoder);module.exports=PEMEncoder;PEMEncoder.prototype.encode=function encode(data,options){var buf=DEREncoder.prototype.encode.call(this,data);var p=buf.toString('base64');var out=['-----BEGIN '+options.label+'-----'];for(var i=0;i<p.length;i+=64){out.push(p.slice(i,i+64));}out.push('-----END '+options.label+'-----');return out.join('\n');};},{"./der":176,"inherits":364}],179:[function(require,module,exports){(function(module,exports){'use strict';// Utils |
|
|
function assert(val,msg){if(!val)throw new Error(msg||'Assertion failed');}// Could use `inherits` module, but don't want to move from single file |
|
|
// architecture yet. |
|
|
function inherits(ctor,superCtor){ctor.super_=superCtor;var TempCtor=function TempCtor(){};TempCtor.prototype=superCtor.prototype;ctor.prototype=new TempCtor();ctor.prototype.constructor=ctor;}// BN |
|
|
function BN(number,base,endian){if(BN.isBN(number)){return number;}this.negative=0;this.words=null;this.length=0;// Reduction context |
|
|
this.red=null;if(number!==null){if(base==='le'||base==='be'){endian=base;base=10;}this._init(number||0,base||10,endian||'be');}}if(_typeof2(module)==='object'){module.exports=BN;}else{exports.BN=BN;}BN.BN=BN;BN.wordSize=26;var Buffer;try{Buffer=require('buffer').Buffer;}catch(e){}BN.isBN=function isBN(num){if(num instanceof BN){return true;}return num!==null&&_typeof2(num)==='object'&&num.constructor.wordSize===BN.wordSize&&Array.isArray(num.words);};BN.max=function max(left,right){if(left.cmp(right)>0)return left;return right;};BN.min=function min(left,right){if(left.cmp(right)<0)return left;return right;};BN.prototype._init=function init(number,base,endian){if(typeof number==='number'){return this._initNumber(number,base,endian);}if(_typeof2(number)==='object'){return this._initArray(number,base,endian);}if(base==='hex'){base=16;}assert(base===(base|0)&&base>=2&&base<=36);number=number.toString().replace(/\s+/g,'');var start=0;if(number[0]==='-'){start++;}if(base===16){this._parseHex(number,start);}else{this._parseBase(number,base,start);}if(number[0]==='-'){this.negative=1;}this.strip();if(endian!=='le')return;this._initArray(this.toArray(),base,endian);};BN.prototype._initNumber=function _initNumber(number,base,endian){if(number<0){this.negative=1;number=-number;}if(number<0x4000000){this.words=[number&0x3ffffff];this.length=1;}else if(number<0x10000000000000){this.words=[number&0x3ffffff,number/0x4000000&0x3ffffff];this.length=2;}else{assert(number<0x20000000000000);// 2 ^ 53 (unsafe) |
|
|
this.words=[number&0x3ffffff,number/0x4000000&0x3ffffff,1];this.length=3;}if(endian!=='le')return;// Reverse the bytes |
|
|
this._initArray(this.toArray(),base,endian);};BN.prototype._initArray=function _initArray(number,base,endian){// Perhaps a Uint8Array |
|
|
assert(typeof number.length==='number');if(number.length<=0){this.words=[0];this.length=1;return this;}this.length=Math.ceil(number.length/3);this.words=new Array(this.length);for(var i=0;i<this.length;i++){this.words[i]=0;}var j,w;var off=0;if(endian==='be'){for(i=number.length-1,j=0;i>=0;i-=3){w=number[i]|number[i-1]<<8|number[i-2]<<16;this.words[j]|=w<<off&0x3ffffff;this.words[j+1]=w>>>26-off&0x3ffffff;off+=24;if(off>=26){off-=26;j++;}}}else if(endian==='le'){for(i=0,j=0;i<number.length;i+=3){w=number[i]|number[i+1]<<8|number[i+2]<<16;this.words[j]|=w<<off&0x3ffffff;this.words[j+1]=w>>>26-off&0x3ffffff;off+=24;if(off>=26){off-=26;j++;}}}return this.strip();};function parseHex(str,start,end){var r=0;var len=Math.min(str.length,end);for(var i=start;i<len;i++){var c=str.charCodeAt(i)-48;r<<=4;// 'a' - 'f' |
|
|
if(c>=49&&c<=54){r|=c-49+0xa;// 'A' - 'F' |
|
|
}else if(c>=17&&c<=22){r|=c-17+0xa;// '0' - '9' |
|
|
}else{r|=c&0xf;}}return r;}BN.prototype._parseHex=function _parseHex(number,start){// Create possibly bigger array to ensure that it fits the number |
|
|
this.length=Math.ceil((number.length-start)/6);this.words=new Array(this.length);for(var i=0;i<this.length;i++){this.words[i]=0;}var j,w;// Scan 24-bit chunks and add them to the number |
|
|
var off=0;for(i=number.length-6,j=0;i>=start;i-=6){w=parseHex(number,i,i+6);this.words[j]|=w<<off&0x3ffffff;// NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb |
|
|
this.words[j+1]|=w>>>26-off&0x3fffff;off+=24;if(off>=26){off-=26;j++;}}if(i+6!==start){w=parseHex(number,start,i+6);this.words[j]|=w<<off&0x3ffffff;this.words[j+1]|=w>>>26-off&0x3fffff;}this.strip();};function parseBase(str,start,end,mul){var r=0;var len=Math.min(str.length,end);for(var i=start;i<len;i++){var c=str.charCodeAt(i)-48;r*=mul;// 'a' |
|
|
if(c>=49){r+=c-49+0xa;// 'A' |
|
|
}else if(c>=17){r+=c-17+0xa;// '0' - '9' |
|
|
}else{r+=c;}}return r;}BN.prototype._parseBase=function _parseBase(number,base,start){// Initialize as zero |
|
|
this.words=[0];this.length=1;// Find length of limb in base |
|
|
for(var limbLen=0,limbPow=1;limbPow<=0x3ffffff;limbPow*=base){limbLen++;}limbLen--;limbPow=limbPow/base|0;var total=number.length-start;var mod=total%limbLen;var end=Math.min(total,total-mod)+start;var word=0;for(var i=start;i<end;i+=limbLen){word=parseBase(number,i,i+limbLen,base);this.imuln(limbPow);if(this.words[0]+word<0x4000000){this.words[0]+=word;}else{this._iaddn(word);}}if(mod!==0){var pow=1;word=parseBase(number,i,number.length,base);for(i=0;i<mod;i++){pow*=base;}this.imuln(pow);if(this.words[0]+word<0x4000000){this.words[0]+=word;}else{this._iaddn(word);}}};BN.prototype.copy=function copy(dest){dest.words=new Array(this.length);for(var i=0;i<this.length;i++){dest.words[i]=this.words[i];}dest.length=this.length;dest.negative=this.negative;dest.red=this.red;};BN.prototype.clone=function clone(){var r=new BN(null);this.copy(r);return r;};BN.prototype._expand=function _expand(size){while(this.length<size){this.words[this.length++]=0;}return this;};// Remove leading `0` from `this` |
|
|
BN.prototype.strip=function strip(){while(this.length>1&&this.words[this.length-1]===0){this.length--;}return this._normSign();};BN.prototype._normSign=function _normSign(){// -0 = 0 |
|
|
if(this.length===1&&this.words[0]===0){this.negative=0;}return this;};BN.prototype.inspect=function inspect(){return(this.red?'<BN-R: ':'<BN: ')+this.toString(16)+'>';};/* |
|
|
|
|
|
var zeros = []; |
|
|
var groupSizes = []; |
|
|
var groupBases = []; |
|
|
|
|
|
var s = ''; |
|
|
var i = -1; |
|
|
while (++i < BN.wordSize) { |
|
|
zeros[i] = s; |
|
|
s += '0'; |
|
|
} |
|
|
groupSizes[0] = 0; |
|
|
groupSizes[1] = 0; |
|
|
groupBases[0] = 0; |
|
|
groupBases[1] = 0; |
|
|
var base = 2 - 1; |
|
|
while (++base < 36 + 1) { |
|
|
var groupSize = 0; |
|
|
var groupBase = 1; |
|
|
while (groupBase < (1 << BN.wordSize) / base) { |
|
|
groupBase *= base; |
|
|
groupSize += 1; |
|
|
} |
|
|
groupSizes[base] = groupSize; |
|
|
groupBases[base] = groupBase; |
|
|
} |
|
|
|
|
|
*/var zeros=['','0','00','000','0000','00000','000000','0000000','00000000','000000000','0000000000','00000000000','000000000000','0000000000000','00000000000000','000000000000000','0000000000000000','00000000000000000','000000000000000000','0000000000000000000','00000000000000000000','000000000000000000000','0000000000000000000000','00000000000000000000000','000000000000000000000000','0000000000000000000000000'];var groupSizes=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5];var groupBases=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,10000000,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64000000,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,24300000,28629151,33554432,39135393,45435424,52521875,60466176];BN.prototype.toString=function toString(base,padding){base=base||10;padding=padding|0||1;var out;if(base===16||base==='hex'){out='';var off=0;var carry=0;for(var i=0;i<this.length;i++){var w=this.words[i];var word=((w<<off|carry)&0xffffff).toString(16);carry=w>>>24-off&0xffffff;if(carry!==0||i!==this.length-1){out=zeros[6-word.length]+word+out;}else{out=word+out;}off+=2;if(off>=26){off-=26;i--;}}if(carry!==0){out=carry.toString(16)+out;}while(out.length%padding!==0){out='0'+out;}if(this.negative!==0){out='-'+out;}return out;}if(base===(base|0)&&base>=2&&base<=36){// var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); |
|
|
var groupSize=groupSizes[base];// var groupBase = Math.pow(base, groupSize); |
|
|
var groupBase=groupBases[base];out='';var c=this.clone();c.negative=0;while(!c.isZero()){var r=c.modn(groupBase).toString(base);c=c.idivn(groupBase);if(!c.isZero()){out=zeros[groupSize-r.length]+r+out;}else{out=r+out;}}if(this.isZero()){out='0'+out;}while(out.length%padding!==0){out='0'+out;}if(this.negative!==0){out='-'+out;}return out;}assert(false,'Base should be between 2 and 36');};BN.prototype.toNumber=function toNumber(){var ret=this.words[0];if(this.length===2){ret+=this.words[1]*0x4000000;}else if(this.length===3&&this.words[2]===0x01){// NOTE: at this stage it is known that the top bit is set |
|
|
ret+=0x10000000000000+this.words[1]*0x4000000;}else if(this.length>2){assert(false,'Number can only safely store up to 53 bits');}return this.negative!==0?-ret:ret;};BN.prototype.toJSON=function toJSON(){return this.toString(16);};BN.prototype.toBuffer=function toBuffer(endian,length){assert(typeof Buffer!=='undefined');return this.toArrayLike(Buffer,endian,length);};BN.prototype.toArray=function toArray(endian,length){return this.toArrayLike(Array,endian,length);};BN.prototype.toArrayLike=function toArrayLike(ArrayType,endian,length){var byteLength=this.byteLength();var reqLength=length||Math.max(1,byteLength);assert(byteLength<=reqLength,'byte array longer than desired length');assert(reqLength>0,'Requested array length <= 0');this.strip();var littleEndian=endian==='le';var res=new ArrayType(reqLength);var b,i;var q=this.clone();if(!littleEndian){// Assume big-endian |
|
|
for(i=0;i<reqLength-byteLength;i++){res[i]=0;}for(i=0;!q.isZero();i++){b=q.andln(0xff);q.iushrn(8);res[reqLength-i-1]=b;}}else{for(i=0;!q.isZero();i++){b=q.andln(0xff);q.iushrn(8);res[i]=b;}for(;i<reqLength;i++){res[i]=0;}}return res;};if(Math.clz32){BN.prototype._countBits=function _countBits(w){return 32-Math.clz32(w);};}else{BN.prototype._countBits=function _countBits(w){var t=w;var r=0;if(t>=0x1000){r+=13;t>>>=13;}if(t>=0x40){r+=7;t>>>=7;}if(t>=0x8){r+=4;t>>>=4;}if(t>=0x02){r+=2;t>>>=2;}return r+t;};}BN.prototype._zeroBits=function _zeroBits(w){// Short-cut |
|
|
if(w===0)return 26;var t=w;var r=0;if((t&0x1fff)===0){r+=13;t>>>=13;}if((t&0x7f)===0){r+=7;t>>>=7;}if((t&0xf)===0){r+=4;t>>>=4;}if((t&0x3)===0){r+=2;t>>>=2;}if((t&0x1)===0){r++;}return r;};// Return number of used bits in a BN |
|
|
BN.prototype.bitLength=function bitLength(){var w=this.words[this.length-1];var hi=this._countBits(w);return(this.length-1)*26+hi;};function toBitArray(num){var w=new Array(num.bitLength());for(var bit=0;bit<w.length;bit++){var off=bit/26|0;var wbit=bit%26;w[bit]=(num.words[off]&1<<wbit)>>>wbit;}return w;}// Number of trailing zero bits |
|
|
BN.prototype.zeroBits=function zeroBits(){if(this.isZero())return 0;var r=0;for(var i=0;i<this.length;i++){var b=this._zeroBits(this.words[i]);r+=b;if(b!==26)break;}return r;};BN.prototype.byteLength=function byteLength(){return Math.ceil(this.bitLength()/8);};BN.prototype.toTwos=function toTwos(width){if(this.negative!==0){return this.abs().inotn(width).iaddn(1);}return this.clone();};BN.prototype.fromTwos=function fromTwos(width){if(this.testn(width-1)){return this.notn(width).iaddn(1).ineg();}return this.clone();};BN.prototype.isNeg=function isNeg(){return this.negative!==0;};// Return negative clone of `this` |
|
|
BN.prototype.neg=function neg(){return this.clone().ineg();};BN.prototype.ineg=function ineg(){if(!this.isZero()){this.negative^=1;}return this;};// Or `num` with `this` in-place |
|
|
BN.prototype.iuor=function iuor(num){while(this.length<num.length){this.words[this.length++]=0;}for(var i=0;i<num.length;i++){this.words[i]=this.words[i]|num.words[i];}return this.strip();};BN.prototype.ior=function ior(num){assert((this.negative|num.negative)===0);return this.iuor(num);};// Or `num` with `this` |
|
|
BN.prototype.or=function or(num){if(this.length>num.length)return this.clone().ior(num);return num.clone().ior(this);};BN.prototype.uor=function uor(num){if(this.length>num.length)return this.clone().iuor(num);return num.clone().iuor(this);};// And `num` with `this` in-place |
|
|
BN.prototype.iuand=function iuand(num){// b = min-length(num, this) |
|
|
var b;if(this.length>num.length){b=num;}else{b=this;}for(var i=0;i<b.length;i++){this.words[i]=this.words[i]&num.words[i];}this.length=b.length;return this.strip();};BN.prototype.iand=function iand(num){assert((this.negative|num.negative)===0);return this.iuand(num);};// And `num` with `this` |
|
|
BN.prototype.and=function and(num){if(this.length>num.length)return this.clone().iand(num);return num.clone().iand(this);};BN.prototype.uand=function uand(num){if(this.length>num.length)return this.clone().iuand(num);return num.clone().iuand(this);};// Xor `num` with `this` in-place |
|
|
BN.prototype.iuxor=function iuxor(num){// a.length > b.length |
|
|
var a;var b;if(this.length>num.length){a=this;b=num;}else{a=num;b=this;}for(var i=0;i<b.length;i++){this.words[i]=a.words[i]^b.words[i];}if(this!==a){for(;i<a.length;i++){this.words[i]=a.words[i];}}this.length=a.length;return this.strip();};BN.prototype.ixor=function ixor(num){assert((this.negative|num.negative)===0);return this.iuxor(num);};// Xor `num` with `this` |
|
|
BN.prototype.xor=function xor(num){if(this.length>num.length)return this.clone().ixor(num);return num.clone().ixor(this);};BN.prototype.uxor=function uxor(num){if(this.length>num.length)return this.clone().iuxor(num);return num.clone().iuxor(this);};// Not ``this`` with ``width`` bitwidth |
|
|
BN.prototype.inotn=function inotn(width){assert(typeof width==='number'&&width>=0);var bytesNeeded=Math.ceil(width/26)|0;var bitsLeft=width%26;// Extend the buffer with leading zeroes |
|
|
this._expand(bytesNeeded);if(bitsLeft>0){bytesNeeded--;}// Handle complete words |
|
|
for(var i=0;i<bytesNeeded;i++){this.words[i]=~this.words[i]&0x3ffffff;}// Handle the residue |
|
|
if(bitsLeft>0){this.words[i]=~this.words[i]&0x3ffffff>>26-bitsLeft;}// And remove leading zeroes |
|
|
return this.strip();};BN.prototype.notn=function notn(width){return this.clone().inotn(width);};// Set `bit` of `this` |
|
|
BN.prototype.setn=function setn(bit,val){assert(typeof bit==='number'&&bit>=0);var off=bit/26|0;var wbit=bit%26;this._expand(off+1);if(val){this.words[off]=this.words[off]|1<<wbit;}else{this.words[off]=this.words[off]&~(1<<wbit);}return this.strip();};// Add `num` to `this` in-place |
|
|
BN.prototype.iadd=function iadd(num){var r;// negative + positive |
|
|
if(this.negative!==0&&num.negative===0){this.negative=0;r=this.isub(num);this.negative^=1;return this._normSign();// positive + negative |
|
|
}else if(this.negative===0&&num.negative!==0){num.negative=0;r=this.isub(num);num.negative=1;return r._normSign();}// a.length > b.length |
|
|
var a,b;if(this.length>num.length){a=this;b=num;}else{a=num;b=this;}var carry=0;for(var i=0;i<b.length;i++){r=(a.words[i]|0)+(b.words[i]|0)+carry;this.words[i]=r&0x3ffffff;carry=r>>>26;}for(;carry!==0&&i<a.length;i++){r=(a.words[i]|0)+carry;this.words[i]=r&0x3ffffff;carry=r>>>26;}this.length=a.length;if(carry!==0){this.words[this.length]=carry;this.length++;// Copy the rest of the words |
|
|
}else if(a!==this){for(;i<a.length;i++){this.words[i]=a.words[i];}}return this;};// Add `num` to `this` |
|
|
BN.prototype.add=function add(num){var res;if(num.negative!==0&&this.negative===0){num.negative=0;res=this.sub(num);num.negative^=1;return res;}else if(num.negative===0&&this.negative!==0){this.negative=0;res=num.sub(this);this.negative=1;return res;}if(this.length>num.length)return this.clone().iadd(num);return num.clone().iadd(this);};// Subtract `num` from `this` in-place |
|
|
BN.prototype.isub=function isub(num){// this - (-num) = this + num |
|
|
if(num.negative!==0){num.negative=0;var r=this.iadd(num);num.negative=1;return r._normSign();// -this - num = -(this + num) |
|
|
}else if(this.negative!==0){this.negative=0;this.iadd(num);this.negative=1;return this._normSign();}// At this point both numbers are positive |
|
|
var cmp=this.cmp(num);// Optimization - zeroify |
|
|
if(cmp===0){this.negative=0;this.length=1;this.words[0]=0;return this;}// a > b |
|
|
var a,b;if(cmp>0){a=this;b=num;}else{a=num;b=this;}var carry=0;for(var i=0;i<b.length;i++){r=(a.words[i]|0)-(b.words[i]|0)+carry;carry=r>>26;this.words[i]=r&0x3ffffff;}for(;carry!==0&&i<a.length;i++){r=(a.words[i]|0)+carry;carry=r>>26;this.words[i]=r&0x3ffffff;}// Copy rest of the words |
|
|
if(carry===0&&i<a.length&&a!==this){for(;i<a.length;i++){this.words[i]=a.words[i];}}this.length=Math.max(this.length,i);if(a!==this){this.negative=1;}return this.strip();};// Subtract `num` from `this` |
|
|
BN.prototype.sub=function sub(num){return this.clone().isub(num);};function smallMulTo(self,num,out){out.negative=num.negative^self.negative;var len=self.length+num.length|0;out.length=len;len=len-1|0;// Peel one iteration (compiler can't do it, because of code complexity) |
|
|
var a=self.words[0]|0;var b=num.words[0]|0;var r=a*b;var lo=r&0x3ffffff;var carry=r/0x4000000|0;out.words[0]=lo;for(var k=1;k<len;k++){// Sum all words with the same `i + j = k` and accumulate `ncarry`, |
|
|
// note that ncarry could be >= 0x3ffffff |
|
|
var ncarry=carry>>>26;var rword=carry&0x3ffffff;var maxJ=Math.min(k,num.length-1);for(var j=Math.max(0,k-self.length+1);j<=maxJ;j++){var i=k-j|0;a=self.words[i]|0;b=num.words[j]|0;r=a*b+rword;ncarry+=r/0x4000000|0;rword=r&0x3ffffff;}out.words[k]=rword|0;carry=ncarry|0;}if(carry!==0){out.words[k]=carry|0;}else{out.length--;}return out.strip();}// TODO(indutny): it may be reasonable to omit it for users who don't need |
|
|
// to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit |
|
|
// multiplication (like elliptic secp256k1). |
|
|
var comb10MulTo=function comb10MulTo(self,num,out){var a=self.words;var b=num.words;var o=out.words;var c=0;var lo;var mid;var hi;var a0=a[0]|0;var al0=a0&0x1fff;var ah0=a0>>>13;var a1=a[1]|0;var al1=a1&0x1fff;var ah1=a1>>>13;var a2=a[2]|0;var al2=a2&0x1fff;var ah2=a2>>>13;var a3=a[3]|0;var al3=a3&0x1fff;var ah3=a3>>>13;var a4=a[4]|0;var al4=a4&0x1fff;var ah4=a4>>>13;var a5=a[5]|0;var al5=a5&0x1fff;var ah5=a5>>>13;var a6=a[6]|0;var al6=a6&0x1fff;var ah6=a6>>>13;var a7=a[7]|0;var al7=a7&0x1fff;var ah7=a7>>>13;var a8=a[8]|0;var al8=a8&0x1fff;var ah8=a8>>>13;var a9=a[9]|0;var al9=a9&0x1fff;var ah9=a9>>>13;var b0=b[0]|0;var bl0=b0&0x1fff;var bh0=b0>>>13;var b1=b[1]|0;var bl1=b1&0x1fff;var bh1=b1>>>13;var b2=b[2]|0;var bl2=b2&0x1fff;var bh2=b2>>>13;var b3=b[3]|0;var bl3=b3&0x1fff;var bh3=b3>>>13;var b4=b[4]|0;var bl4=b4&0x1fff;var bh4=b4>>>13;var b5=b[5]|0;var bl5=b5&0x1fff;var bh5=b5>>>13;var b6=b[6]|0;var bl6=b6&0x1fff;var bh6=b6>>>13;var b7=b[7]|0;var bl7=b7&0x1fff;var bh7=b7>>>13;var b8=b[8]|0;var bl8=b8&0x1fff;var bh8=b8>>>13;var b9=b[9]|0;var bl9=b9&0x1fff;var bh9=b9>>>13;out.negative=self.negative^num.negative;out.length=19;/* k = 0 */lo=Math.imul(al0,bl0);mid=Math.imul(al0,bh0);mid=mid+Math.imul(ah0,bl0)|0;hi=Math.imul(ah0,bh0);var w0=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w0>>>26)|0;w0&=0x3ffffff;/* k = 1 */lo=Math.imul(al1,bl0);mid=Math.imul(al1,bh0);mid=mid+Math.imul(ah1,bl0)|0;hi=Math.imul(ah1,bh0);lo=lo+Math.imul(al0,bl1)|0;mid=mid+Math.imul(al0,bh1)|0;mid=mid+Math.imul(ah0,bl1)|0;hi=hi+Math.imul(ah0,bh1)|0;var w1=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w1>>>26)|0;w1&=0x3ffffff;/* k = 2 */lo=Math.imul(al2,bl0);mid=Math.imul(al2,bh0);mid=mid+Math.imul(ah2,bl0)|0;hi=Math.imul(ah2,bh0);lo=lo+Math.imul(al1,bl1)|0;mid=mid+Math.imul(al1,bh1)|0;mid=mid+Math.imul(ah1,bl1)|0;hi=hi+Math.imul(ah1,bh1)|0;lo=lo+Math.imul(al0,bl2)|0;mid=mid+Math.imul(al0,bh2)|0;mid=mid+Math.imul(ah0,bl2)|0;hi=hi+Math.imul(ah0,bh2)|0;var w2=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w2>>>26)|0;w2&=0x3ffffff;/* k = 3 */lo=Math.imul(al3,bl0);mid=Math.imul(al3,bh0);mid=mid+Math.imul(ah3,bl0)|0;hi=Math.imul(ah3,bh0);lo=lo+Math.imul(al2,bl1)|0;mid=mid+Math.imul(al2,bh1)|0;mid=mid+Math.imul(ah2,bl1)|0;hi=hi+Math.imul(ah2,bh1)|0;lo=lo+Math.imul(al1,bl2)|0;mid=mid+Math.imul(al1,bh2)|0;mid=mid+Math.imul(ah1,bl2)|0;hi=hi+Math.imul(ah1,bh2)|0;lo=lo+Math.imul(al0,bl3)|0;mid=mid+Math.imul(al0,bh3)|0;mid=mid+Math.imul(ah0,bl3)|0;hi=hi+Math.imul(ah0,bh3)|0;var w3=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w3>>>26)|0;w3&=0x3ffffff;/* k = 4 */lo=Math.imul(al4,bl0);mid=Math.imul(al4,bh0);mid=mid+Math.imul(ah4,bl0)|0;hi=Math.imul(ah4,bh0);lo=lo+Math.imul(al3,bl1)|0;mid=mid+Math.imul(al3,bh1)|0;mid=mid+Math.imul(ah3,bl1)|0;hi=hi+Math.imul(ah3,bh1)|0;lo=lo+Math.imul(al2,bl2)|0;mid=mid+Math.imul(al2,bh2)|0;mid=mid+Math.imul(ah2,bl2)|0;hi=hi+Math.imul(ah2,bh2)|0;lo=lo+Math.imul(al1,bl3)|0;mid=mid+Math.imul(al1,bh3)|0;mid=mid+Math.imul(ah1,bl3)|0;hi=hi+Math.imul(ah1,bh3)|0;lo=lo+Math.imul(al0,bl4)|0;mid=mid+Math.imul(al0,bh4)|0;mid=mid+Math.imul(ah0,bl4)|0;hi=hi+Math.imul(ah0,bh4)|0;var w4=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w4>>>26)|0;w4&=0x3ffffff;/* k = 5 */lo=Math.imul(al5,bl0);mid=Math.imul(al5,bh0);mid=mid+Math.imul(ah5,bl0)|0;hi=Math.imul(ah5,bh0);lo=lo+Math.imul(al4,bl1)|0;mid=mid+Math.imul(al4,bh1)|0;mid=mid+Math.imul(ah4,bl1)|0;hi=hi+Math.imul(ah4,bh1)|0;lo=lo+Math.imul(al3,bl2)|0;mid=mid+Math.imul(al3,bh2)|0;mid=mid+Math.imul(ah3,bl2)|0;hi=hi+Math.imul(ah3,bh2)|0;lo=lo+Math.imul(al2,bl3)|0;mid=mid+Math.imul(al2,bh3)|0;mid=mid+Math.imul(ah2,bl3)|0;hi=hi+Math.imul(ah2,bh3)|0;lo=lo+Math.imul(al1,bl4)|0;mid=mid+Math.imul(al1,bh4)|0;mid=mid+Math.imul(ah1,bl4)|0;hi=hi+Math.imul(ah1,bh4)|0;lo=lo+Math.imul(al0,bl5)|0;mid=mid+Math.imul(al0,bh5)|0;mid=mid+Math.imul(ah0,bl5)|0;hi=hi+Math.imul(ah0,bh5)|0;var w5=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w5>>>26)|0;w5&=0x3ffffff;/* k = 6 */lo=Math.imul(al6,bl0);mid=Math.imul(al6,bh0);mid=mid+Math.imul(ah6,bl0)|0;hi=Math.imul(ah6,bh0);lo=lo+Math.imul(al5,bl1)|0;mid=mid+Math.imul(al5,bh1)|0;mid=mid+Math.imul(ah5,bl1)|0;hi=hi+Math.imul(ah5,bh1)|0;lo=lo+Math.imul(al4,bl2)|0;mid=mid+Math.imul(al4,bh2)|0;mid=mid+Math.imul(ah4,bl2)|0;hi=hi+Math.imul(ah4,bh2)|0;lo=lo+Math.imul(al3,bl3)|0;mid=mid+Math.imul(al3,bh3)|0;mid=mid+Math.imul(ah3,bl3)|0;hi=hi+Math.imul(ah3,bh3)|0;lo=lo+Math.imul(al2,bl4)|0;mid=mid+Math.imul(al2,bh4)|0;mid=mid+Math.imul(ah2,bl4)|0;hi=hi+Math.imul(ah2,bh4)|0;lo=lo+Math.imul(al1,bl5)|0;mid=mid+Math.imul(al1,bh5)|0;mid=mid+Math.imul(ah1,bl5)|0;hi=hi+Math.imul(ah1,bh5)|0;lo=lo+Math.imul(al0,bl6)|0;mid=mid+Math.imul(al0,bh6)|0;mid=mid+Math.imul(ah0,bl6)|0;hi=hi+Math.imul(ah0,bh6)|0;var w6=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w6>>>26)|0;w6&=0x3ffffff;/* k = 7 */lo=Math.imul(al7,bl0);mid=Math.imul(al7,bh0);mid=mid+Math.imul(ah7,bl0)|0;hi=Math.imul(ah7,bh0);lo=lo+Math.imul(al6,bl1)|0;mid=mid+Math.imul(al6,bh1)|0;mid=mid+Math.imul(ah6,bl1)|0;hi=hi+Math.imul(ah6,bh1)|0;lo=lo+Math.imul(al5,bl2)|0;mid=mid+Math.imul(al5,bh2)|0;mid=mid+Math.imul(ah5,bl2)|0;hi=hi+Math.imul(ah5,bh2)|0;lo=lo+Math.imul(al4,bl3)|0;mid=mid+Math.imul(al4,bh3)|0;mid=mid+Math.imul(ah4,bl3)|0;hi=hi+Math.imul(ah4,bh3)|0;lo=lo+Math.imul(al3,bl4)|0;mid=mid+Math.imul(al3,bh4)|0;mid=mid+Math.imul(ah3,bl4)|0;hi=hi+Math.imul(ah3,bh4)|0;lo=lo+Math.imul(al2,bl5)|0;mid=mid+Math.imul(al2,bh5)|0;mid=mid+Math.imul(ah2,bl5)|0;hi=hi+Math.imul(ah2,bh5)|0;lo=lo+Math.imul(al1,bl6)|0;mid=mid+Math.imul(al1,bh6)|0;mid=mid+Math.imul(ah1,bl6)|0;hi=hi+Math.imul(ah1,bh6)|0;lo=lo+Math.imul(al0,bl7)|0;mid=mid+Math.imul(al0,bh7)|0;mid=mid+Math.imul(ah0,bl7)|0;hi=hi+Math.imul(ah0,bh7)|0;var w7=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w7>>>26)|0;w7&=0x3ffffff;/* k = 8 */lo=Math.imul(al8,bl0);mid=Math.imul(al8,bh0);mid=mid+Math.imul(ah8,bl0)|0;hi=Math.imul(ah8,bh0);lo=lo+Math.imul(al7,bl1)|0;mid=mid+Math.imul(al7,bh1)|0;mid=mid+Math.imul(ah7,bl1)|0;hi=hi+Math.imul(ah7,bh1)|0;lo=lo+Math.imul(al6,bl2)|0;mid=mid+Math.imul(al6,bh2)|0;mid=mid+Math.imul(ah6,bl2)|0;hi=hi+Math.imul(ah6,bh2)|0;lo=lo+Math.imul(al5,bl3)|0;mid=mid+Math.imul(al5,bh3)|0;mid=mid+Math.imul(ah5,bl3)|0;hi=hi+Math.imul(ah5,bh3)|0;lo=lo+Math.imul(al4,bl4)|0;mid=mid+Math.imul(al4,bh4)|0;mid=mid+Math.imul(ah4,bl4)|0;hi=hi+Math.imul(ah4,bh4)|0;lo=lo+Math.imul(al3,bl5)|0;mid=mid+Math.imul(al3,bh5)|0;mid=mid+Math.imul(ah3,bl5)|0;hi=hi+Math.imul(ah3,bh5)|0;lo=lo+Math.imul(al2,bl6)|0;mid=mid+Math.imul(al2,bh6)|0;mid=mid+Math.imul(ah2,bl6)|0;hi=hi+Math.imul(ah2,bh6)|0;lo=lo+Math.imul(al1,bl7)|0;mid=mid+Math.imul(al1,bh7)|0;mid=mid+Math.imul(ah1,bl7)|0;hi=hi+Math.imul(ah1,bh7)|0;lo=lo+Math.imul(al0,bl8)|0;mid=mid+Math.imul(al0,bh8)|0;mid=mid+Math.imul(ah0,bl8)|0;hi=hi+Math.imul(ah0,bh8)|0;var w8=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w8>>>26)|0;w8&=0x3ffffff;/* k = 9 */lo=Math.imul(al9,bl0);mid=Math.imul(al9,bh0);mid=mid+Math.imul(ah9,bl0)|0;hi=Math.imul(ah9,bh0);lo=lo+Math.imul(al8,bl1)|0;mid=mid+Math.imul(al8,bh1)|0;mid=mid+Math.imul(ah8,bl1)|0;hi=hi+Math.imul(ah8,bh1)|0;lo=lo+Math.imul(al7,bl2)|0;mid=mid+Math.imul(al7,bh2)|0;mid=mid+Math.imul(ah7,bl2)|0;hi=hi+Math.imul(ah7,bh2)|0;lo=lo+Math.imul(al6,bl3)|0;mid=mid+Math.imul(al6,bh3)|0;mid=mid+Math.imul(ah6,bl3)|0;hi=hi+Math.imul(ah6,bh3)|0;lo=lo+Math.imul(al5,bl4)|0;mid=mid+Math.imul(al5,bh4)|0;mid=mid+Math.imul(ah5,bl4)|0;hi=hi+Math.imul(ah5,bh4)|0;lo=lo+Math.imul(al4,bl5)|0;mid=mid+Math.imul(al4,bh5)|0;mid=mid+Math.imul(ah4,bl5)|0;hi=hi+Math.imul(ah4,bh5)|0;lo=lo+Math.imul(al3,bl6)|0;mid=mid+Math.imul(al3,bh6)|0;mid=mid+Math.imul(ah3,bl6)|0;hi=hi+Math.imul(ah3,bh6)|0;lo=lo+Math.imul(al2,bl7)|0;mid=mid+Math.imul(al2,bh7)|0;mid=mid+Math.imul(ah2,bl7)|0;hi=hi+Math.imul(ah2,bh7)|0;lo=lo+Math.imul(al1,bl8)|0;mid=mid+Math.imul(al1,bh8)|0;mid=mid+Math.imul(ah1,bl8)|0;hi=hi+Math.imul(ah1,bh8)|0;lo=lo+Math.imul(al0,bl9)|0;mid=mid+Math.imul(al0,bh9)|0;mid=mid+Math.imul(ah0,bl9)|0;hi=hi+Math.imul(ah0,bh9)|0;var w9=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w9>>>26)|0;w9&=0x3ffffff;/* k = 10 */lo=Math.imul(al9,bl1);mid=Math.imul(al9,bh1);mid=mid+Math.imul(ah9,bl1)|0;hi=Math.imul(ah9,bh1);lo=lo+Math.imul(al8,bl2)|0;mid=mid+Math.imul(al8,bh2)|0;mid=mid+Math.imul(ah8,bl2)|0;hi=hi+Math.imul(ah8,bh2)|0;lo=lo+Math.imul(al7,bl3)|0;mid=mid+Math.imul(al7,bh3)|0;mid=mid+Math.imul(ah7,bl3)|0;hi=hi+Math.imul(ah7,bh3)|0;lo=lo+Math.imul(al6,bl4)|0;mid=mid+Math.imul(al6,bh4)|0;mid=mid+Math.imul(ah6,bl4)|0;hi=hi+Math.imul(ah6,bh4)|0;lo=lo+Math.imul(al5,bl5)|0;mid=mid+Math.imul(al5,bh5)|0;mid=mid+Math.imul(ah5,bl5)|0;hi=hi+Math.imul(ah5,bh5)|0;lo=lo+Math.imul(al4,bl6)|0;mid=mid+Math.imul(al4,bh6)|0;mid=mid+Math.imul(ah4,bl6)|0;hi=hi+Math.imul(ah4,bh6)|0;lo=lo+Math.imul(al3,bl7)|0;mid=mid+Math.imul(al3,bh7)|0;mid=mid+Math.imul(ah3,bl7)|0;hi=hi+Math.imul(ah3,bh7)|0;lo=lo+Math.imul(al2,bl8)|0;mid=mid+Math.imul(al2,bh8)|0;mid=mid+Math.imul(ah2,bl8)|0;hi=hi+Math.imul(ah2,bh8)|0;lo=lo+Math.imul(al1,bl9)|0;mid=mid+Math.imul(al1,bh9)|0;mid=mid+Math.imul(ah1,bl9)|0;hi=hi+Math.imul(ah1,bh9)|0;var w10=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w10>>>26)|0;w10&=0x3ffffff;/* k = 11 */lo=Math.imul(al9,bl2);mid=Math.imul(al9,bh2);mid=mid+Math.imul(ah9,bl2)|0;hi=Math.imul(ah9,bh2);lo=lo+Math.imul(al8,bl3)|0;mid=mid+Math.imul(al8,bh3)|0;mid=mid+Math.imul(ah8,bl3)|0;hi=hi+Math.imul(ah8,bh3)|0;lo=lo+Math.imul(al7,bl4)|0;mid=mid+Math.imul(al7,bh4)|0;mid=mid+Math.imul(ah7,bl4)|0;hi=hi+Math.imul(ah7,bh4)|0;lo=lo+Math.imul(al6,bl5)|0;mid=mid+Math.imul(al6,bh5)|0;mid=mid+Math.imul(ah6,bl5)|0;hi=hi+Math.imul(ah6,bh5)|0;lo=lo+Math.imul(al5,bl6)|0;mid=mid+Math.imul(al5,bh6)|0;mid=mid+Math.imul(ah5,bl6)|0;hi=hi+Math.imul(ah5,bh6)|0;lo=lo+Math.imul(al4,bl7)|0;mid=mid+Math.imul(al4,bh7)|0;mid=mid+Math.imul(ah4,bl7)|0;hi=hi+Math.imul(ah4,bh7)|0;lo=lo+Math.imul(al3,bl8)|0;mid=mid+Math.imul(al3,bh8)|0;mid=mid+Math.imul(ah3,bl8)|0;hi=hi+Math.imul(ah3,bh8)|0;lo=lo+Math.imul(al2,bl9)|0;mid=mid+Math.imul(al2,bh9)|0;mid=mid+Math.imul(ah2,bl9)|0;hi=hi+Math.imul(ah2,bh9)|0;var w11=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w11>>>26)|0;w11&=0x3ffffff;/* k = 12 */lo=Math.imul(al9,bl3);mid=Math.imul(al9,bh3);mid=mid+Math.imul(ah9,bl3)|0;hi=Math.imul(ah9,bh3);lo=lo+Math.imul(al8,bl4)|0;mid=mid+Math.imul(al8,bh4)|0;mid=mid+Math.imul(ah8,bl4)|0;hi=hi+Math.imul(ah8,bh4)|0;lo=lo+Math.imul(al7,bl5)|0;mid=mid+Math.imul(al7,bh5)|0;mid=mid+Math.imul(ah7,bl5)|0;hi=hi+Math.imul(ah7,bh5)|0;lo=lo+Math.imul(al6,bl6)|0;mid=mid+Math.imul(al6,bh6)|0;mid=mid+Math.imul(ah6,bl6)|0;hi=hi+Math.imul(ah6,bh6)|0;lo=lo+Math.imul(al5,bl7)|0;mid=mid+Math.imul(al5,bh7)|0;mid=mid+Math.imul(ah5,bl7)|0;hi=hi+Math.imul(ah5,bh7)|0;lo=lo+Math.imul(al4,bl8)|0;mid=mid+Math.imul(al4,bh8)|0;mid=mid+Math.imul(ah4,bl8)|0;hi=hi+Math.imul(ah4,bh8)|0;lo=lo+Math.imul(al3,bl9)|0;mid=mid+Math.imul(al3,bh9)|0;mid=mid+Math.imul(ah3,bl9)|0;hi=hi+Math.imul(ah3,bh9)|0;var w12=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w12>>>26)|0;w12&=0x3ffffff;/* k = 13 */lo=Math.imul(al9,bl4);mid=Math.imul(al9,bh4);mid=mid+Math.imul(ah9,bl4)|0;hi=Math.imul(ah9,bh4);lo=lo+Math.imul(al8,bl5)|0;mid=mid+Math.imul(al8,bh5)|0;mid=mid+Math.imul(ah8,bl5)|0;hi=hi+Math.imul(ah8,bh5)|0;lo=lo+Math.imul(al7,bl6)|0;mid=mid+Math.imul(al7,bh6)|0;mid=mid+Math.imul(ah7,bl6)|0;hi=hi+Math.imul(ah7,bh6)|0;lo=lo+Math.imul(al6,bl7)|0;mid=mid+Math.imul(al6,bh7)|0;mid=mid+Math.imul(ah6,bl7)|0;hi=hi+Math.imul(ah6,bh7)|0;lo=lo+Math.imul(al5,bl8)|0;mid=mid+Math.imul(al5,bh8)|0;mid=mid+Math.imul(ah5,bl8)|0;hi=hi+Math.imul(ah5,bh8)|0;lo=lo+Math.imul(al4,bl9)|0;mid=mid+Math.imul(al4,bh9)|0;mid=mid+Math.imul(ah4,bl9)|0;hi=hi+Math.imul(ah4,bh9)|0;var w13=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w13>>>26)|0;w13&=0x3ffffff;/* k = 14 */lo=Math.imul(al9,bl5);mid=Math.imul(al9,bh5);mid=mid+Math.imul(ah9,bl5)|0;hi=Math.imul(ah9,bh5);lo=lo+Math.imul(al8,bl6)|0;mid=mid+Math.imul(al8,bh6)|0;mid=mid+Math.imul(ah8,bl6)|0;hi=hi+Math.imul(ah8,bh6)|0;lo=lo+Math.imul(al7,bl7)|0;mid=mid+Math.imul(al7,bh7)|0;mid=mid+Math.imul(ah7,bl7)|0;hi=hi+Math.imul(ah7,bh7)|0;lo=lo+Math.imul(al6,bl8)|0;mid=mid+Math.imul(al6,bh8)|0;mid=mid+Math.imul(ah6,bl8)|0;hi=hi+Math.imul(ah6,bh8)|0;lo=lo+Math.imul(al5,bl9)|0;mid=mid+Math.imul(al5,bh9)|0;mid=mid+Math.imul(ah5,bl9)|0;hi=hi+Math.imul(ah5,bh9)|0;var w14=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w14>>>26)|0;w14&=0x3ffffff;/* k = 15 */lo=Math.imul(al9,bl6);mid=Math.imul(al9,bh6);mid=mid+Math.imul(ah9,bl6)|0;hi=Math.imul(ah9,bh6);lo=lo+Math.imul(al8,bl7)|0;mid=mid+Math.imul(al8,bh7)|0;mid=mid+Math.imul(ah8,bl7)|0;hi=hi+Math.imul(ah8,bh7)|0;lo=lo+Math.imul(al7,bl8)|0;mid=mid+Math.imul(al7,bh8)|0;mid=mid+Math.imul(ah7,bl8)|0;hi=hi+Math.imul(ah7,bh8)|0;lo=lo+Math.imul(al6,bl9)|0;mid=mid+Math.imul(al6,bh9)|0;mid=mid+Math.imul(ah6,bl9)|0;hi=hi+Math.imul(ah6,bh9)|0;var w15=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w15>>>26)|0;w15&=0x3ffffff;/* k = 16 */lo=Math.imul(al9,bl7);mid=Math.imul(al9,bh7);mid=mid+Math.imul(ah9,bl7)|0;hi=Math.imul(ah9,bh7);lo=lo+Math.imul(al8,bl8)|0;mid=mid+Math.imul(al8,bh8)|0;mid=mid+Math.imul(ah8,bl8)|0;hi=hi+Math.imul(ah8,bh8)|0;lo=lo+Math.imul(al7,bl9)|0;mid=mid+Math.imul(al7,bh9)|0;mid=mid+Math.imul(ah7,bl9)|0;hi=hi+Math.imul(ah7,bh9)|0;var w16=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w16>>>26)|0;w16&=0x3ffffff;/* k = 17 */lo=Math.imul(al9,bl8);mid=Math.imul(al9,bh8);mid=mid+Math.imul(ah9,bl8)|0;hi=Math.imul(ah9,bh8);lo=lo+Math.imul(al8,bl9)|0;mid=mid+Math.imul(al8,bh9)|0;mid=mid+Math.imul(ah8,bl9)|0;hi=hi+Math.imul(ah8,bh9)|0;var w17=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w17>>>26)|0;w17&=0x3ffffff;/* k = 18 */lo=Math.imul(al9,bl9);mid=Math.imul(al9,bh9);mid=mid+Math.imul(ah9,bl9)|0;hi=Math.imul(ah9,bh9);var w18=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w18>>>26)|0;w18&=0x3ffffff;o[0]=w0;o[1]=w1;o[2]=w2;o[3]=w3;o[4]=w4;o[5]=w5;o[6]=w6;o[7]=w7;o[8]=w8;o[9]=w9;o[10]=w10;o[11]=w11;o[12]=w12;o[13]=w13;o[14]=w14;o[15]=w15;o[16]=w16;o[17]=w17;o[18]=w18;if(c!==0){o[19]=c;out.length++;}return out;};// Polyfill comb |
|
|
if(!Math.imul){comb10MulTo=smallMulTo;}function bigMulTo(self,num,out){out.negative=num.negative^self.negative;out.length=self.length+num.length;var carry=0;var hncarry=0;for(var k=0;k<out.length-1;k++){// Sum all words with the same `i + j = k` and accumulate `ncarry`, |
|
|
// note that ncarry could be >= 0x3ffffff |
|
|
var ncarry=hncarry;hncarry=0;var rword=carry&0x3ffffff;var maxJ=Math.min(k,num.length-1);for(var j=Math.max(0,k-self.length+1);j<=maxJ;j++){var i=k-j;var a=self.words[i]|0;var b=num.words[j]|0;var r=a*b;var lo=r&0x3ffffff;ncarry=ncarry+(r/0x4000000|0)|0;lo=lo+rword|0;rword=lo&0x3ffffff;ncarry=ncarry+(lo>>>26)|0;hncarry+=ncarry>>>26;ncarry&=0x3ffffff;}out.words[k]=rword;carry=ncarry;ncarry=hncarry;}if(carry!==0){out.words[k]=carry;}else{out.length--;}return out.strip();}function jumboMulTo(self,num,out){var fftm=new FFTM();return fftm.mulp(self,num,out);}BN.prototype.mulTo=function mulTo(num,out){var res;var len=this.length+num.length;if(this.length===10&&num.length===10){res=comb10MulTo(this,num,out);}else if(len<63){res=smallMulTo(this,num,out);}else if(len<1024){res=bigMulTo(this,num,out);}else{res=jumboMulTo(this,num,out);}return res;};// Cooley-Tukey algorithm for FFT |
|
|
// slightly revisited to rely on looping instead of recursion |
|
|
function FFTM(x,y){this.x=x;this.y=y;}FFTM.prototype.makeRBT=function makeRBT(N){var t=new Array(N);var l=BN.prototype._countBits(N)-1;for(var i=0;i<N;i++){t[i]=this.revBin(i,l,N);}return t;};// Returns binary-reversed representation of `x` |
|
|
FFTM.prototype.revBin=function revBin(x,l,N){if(x===0||x===N-1)return x;var rb=0;for(var i=0;i<l;i++){rb|=(x&1)<<l-i-1;x>>=1;}return rb;};// Performs "tweedling" phase, therefore 'emulating' |
|
|
// behaviour of the recursive algorithm |
|
|
FFTM.prototype.permute=function permute(rbt,rws,iws,rtws,itws,N){for(var i=0;i<N;i++){rtws[i]=rws[rbt[i]];itws[i]=iws[rbt[i]];}};FFTM.prototype.transform=function transform(rws,iws,rtws,itws,N,rbt){this.permute(rbt,rws,iws,rtws,itws,N);for(var s=1;s<N;s<<=1){var l=s<<1;var rtwdf=Math.cos(2*Math.PI/l);var itwdf=Math.sin(2*Math.PI/l);for(var p=0;p<N;p+=l){var rtwdf_=rtwdf;var itwdf_=itwdf;for(var j=0;j<s;j++){var re=rtws[p+j];var ie=itws[p+j];var ro=rtws[p+j+s];var io=itws[p+j+s];var rx=rtwdf_*ro-itwdf_*io;io=rtwdf_*io+itwdf_*ro;ro=rx;rtws[p+j]=re+ro;itws[p+j]=ie+io;rtws[p+j+s]=re-ro;itws[p+j+s]=ie-io;/* jshint maxdepth : false */if(j!==l){rx=rtwdf*rtwdf_-itwdf*itwdf_;itwdf_=rtwdf*itwdf_+itwdf*rtwdf_;rtwdf_=rx;}}}}};FFTM.prototype.guessLen13b=function guessLen13b(n,m){var N=Math.max(m,n)|1;var odd=N&1;var i=0;for(N=N/2|0;N;N=N>>>1){i++;}return 1<<i+1+odd;};FFTM.prototype.conjugate=function conjugate(rws,iws,N){if(N<=1)return;for(var i=0;i<N/2;i++){var t=rws[i];rws[i]=rws[N-i-1];rws[N-i-1]=t;t=iws[i];iws[i]=-iws[N-i-1];iws[N-i-1]=-t;}};FFTM.prototype.normalize13b=function normalize13b(ws,N){var carry=0;for(var i=0;i<N/2;i++){var w=Math.round(ws[2*i+1]/N)*0x2000+Math.round(ws[2*i]/N)+carry;ws[i]=w&0x3ffffff;if(w<0x4000000){carry=0;}else{carry=w/0x4000000|0;}}return ws;};FFTM.prototype.convert13b=function convert13b(ws,len,rws,N){var carry=0;for(var i=0;i<len;i++){carry=carry+(ws[i]|0);rws[2*i]=carry&0x1fff;carry=carry>>>13;rws[2*i+1]=carry&0x1fff;carry=carry>>>13;}// Pad with zeroes |
|
|
for(i=2*len;i<N;++i){rws[i]=0;}assert(carry===0);assert((carry&~0x1fff)===0);};FFTM.prototype.stub=function stub(N){var ph=new Array(N);for(var i=0;i<N;i++){ph[i]=0;}return ph;};FFTM.prototype.mulp=function mulp(x,y,out){var N=2*this.guessLen13b(x.length,y.length);var rbt=this.makeRBT(N);var _=this.stub(N);var rws=new Array(N);var rwst=new Array(N);var iwst=new Array(N);var nrws=new Array(N);var nrwst=new Array(N);var niwst=new Array(N);var rmws=out.words;rmws.length=N;this.convert13b(x.words,x.length,rws,N);this.convert13b(y.words,y.length,nrws,N);this.transform(rws,_,rwst,iwst,N,rbt);this.transform(nrws,_,nrwst,niwst,N,rbt);for(var i=0;i<N;i++){var rx=rwst[i]*nrwst[i]-iwst[i]*niwst[i];iwst[i]=rwst[i]*niwst[i]+iwst[i]*nrwst[i];rwst[i]=rx;}this.conjugate(rwst,iwst,N);this.transform(rwst,iwst,rmws,_,N,rbt);this.conjugate(rmws,_,N);this.normalize13b(rmws,N);out.negative=x.negative^y.negative;out.length=x.length+y.length;return out.strip();};// Multiply `this` by `num` |
|
|
BN.prototype.mul=function mul(num){var out=new BN(null);out.words=new Array(this.length+num.length);return this.mulTo(num,out);};// Multiply employing FFT |
|
|
BN.prototype.mulf=function mulf(num){var out=new BN(null);out.words=new Array(this.length+num.length);return jumboMulTo(this,num,out);};// In-place Multiplication |
|
|
BN.prototype.imul=function imul(num){return this.clone().mulTo(num,this);};BN.prototype.imuln=function imuln(num){assert(typeof num==='number');assert(num<0x4000000);// Carry |
|
|
var carry=0;for(var i=0;i<this.length;i++){var w=(this.words[i]|0)*num;var lo=(w&0x3ffffff)+(carry&0x3ffffff);carry>>=26;carry+=w/0x4000000|0;// NOTE: lo is 27bit maximum |
|
|
carry+=lo>>>26;this.words[i]=lo&0x3ffffff;}if(carry!==0){this.words[i]=carry;this.length++;}return this;};BN.prototype.muln=function muln(num){return this.clone().imuln(num);};// `this` * `this` |
|
|
BN.prototype.sqr=function sqr(){return this.mul(this);};// `this` * `this` in-place |
|
|
BN.prototype.isqr=function isqr(){return this.imul(this.clone());};// Math.pow(`this`, `num`) |
|
|
BN.prototype.pow=function pow(num){var w=toBitArray(num);if(w.length===0)return new BN(1);// Skip leading zeroes |
|
|
var res=this;for(var i=0;i<w.length;i++,res=res.sqr()){if(w[i]!==0)break;}if(++i<w.length){for(var q=res.sqr();i<w.length;i++,q=q.sqr()){if(w[i]===0)continue;res=res.mul(q);}}return res;};// Shift-left in-place |
|
|
BN.prototype.iushln=function iushln(bits){assert(typeof bits==='number'&&bits>=0);var r=bits%26;var s=(bits-r)/26;var carryMask=0x3ffffff>>>26-r<<26-r;var i;if(r!==0){var carry=0;for(i=0;i<this.length;i++){var newCarry=this.words[i]&carryMask;var c=(this.words[i]|0)-newCarry<<r;this.words[i]=c|carry;carry=newCarry>>>26-r;}if(carry){this.words[i]=carry;this.length++;}}if(s!==0){for(i=this.length-1;i>=0;i--){this.words[i+s]=this.words[i];}for(i=0;i<s;i++){this.words[i]=0;}this.length+=s;}return this.strip();};BN.prototype.ishln=function ishln(bits){// TODO(indutny): implement me |
|
|
assert(this.negative===0);return this.iushln(bits);};// Shift-right in-place |
|
|
// NOTE: `hint` is a lowest bit before trailing zeroes |
|
|
// NOTE: if `extended` is present - it will be filled with destroyed bits |
|
|
BN.prototype.iushrn=function iushrn(bits,hint,extended){assert(typeof bits==='number'&&bits>=0);var h;if(hint){h=(hint-hint%26)/26;}else{h=0;}var r=bits%26;var s=Math.min((bits-r)/26,this.length);var mask=0x3ffffff^0x3ffffff>>>r<<r;var maskedWords=extended;h-=s;h=Math.max(0,h);// Extended mode, copy masked part |
|
|
if(maskedWords){for(var i=0;i<s;i++){maskedWords.words[i]=this.words[i];}maskedWords.length=s;}if(s===0){// No-op, we should not move anything at all |
|
|
}else if(this.length>s){this.length-=s;for(i=0;i<this.length;i++){this.words[i]=this.words[i+s];}}else{this.words[0]=0;this.length=1;}var carry=0;for(i=this.length-1;i>=0&&(carry!==0||i>=h);i--){var word=this.words[i]|0;this.words[i]=carry<<26-r|word>>>r;carry=word&mask;}// Push carried bits as a mask |
|
|
if(maskedWords&&carry!==0){maskedWords.words[maskedWords.length++]=carry;}if(this.length===0){this.words[0]=0;this.length=1;}return this.strip();};BN.prototype.ishrn=function ishrn(bits,hint,extended){// TODO(indutny): implement me |
|
|
assert(this.negative===0);return this.iushrn(bits,hint,extended);};// Shift-left |
|
|
BN.prototype.shln=function shln(bits){return this.clone().ishln(bits);};BN.prototype.ushln=function ushln(bits){return this.clone().iushln(bits);};// Shift-right |
|
|
BN.prototype.shrn=function shrn(bits){return this.clone().ishrn(bits);};BN.prototype.ushrn=function ushrn(bits){return this.clone().iushrn(bits);};// Test if n bit is set |
|
|
BN.prototype.testn=function testn(bit){assert(typeof bit==='number'&&bit>=0);var r=bit%26;var s=(bit-r)/26;var q=1<<r;// Fast case: bit is much higher than all existing words |
|
|
if(this.length<=s)return false;// Check bit and return |
|
|
var w=this.words[s];return!!(w&q);};// Return only lowers bits of number (in-place) |
|
|
BN.prototype.imaskn=function imaskn(bits){assert(typeof bits==='number'&&bits>=0);var r=bits%26;var s=(bits-r)/26;assert(this.negative===0,'imaskn works only with positive numbers');if(this.length<=s){return this;}if(r!==0){s++;}this.length=Math.min(s,this.length);if(r!==0){var mask=0x3ffffff^0x3ffffff>>>r<<r;this.words[this.length-1]&=mask;}return this.strip();};// Return only lowers bits of number |
|
|
BN.prototype.maskn=function maskn(bits){return this.clone().imaskn(bits);};// Add plain number `num` to `this` |
|
|
BN.prototype.iaddn=function iaddn(num){assert(typeof num==='number');assert(num<0x4000000);if(num<0)return this.isubn(-num);// Possible sign change |
|
|
if(this.negative!==0){if(this.length===1&&(this.words[0]|0)<num){this.words[0]=num-(this.words[0]|0);this.negative=0;return this;}this.negative=0;this.isubn(num);this.negative=1;return this;}// Add without checks |
|
|
return this._iaddn(num);};BN.prototype._iaddn=function _iaddn(num){this.words[0]+=num;// Carry |
|
|
for(var i=0;i<this.length&&this.words[i]>=0x4000000;i++){this.words[i]-=0x4000000;if(i===this.length-1){this.words[i+1]=1;}else{this.words[i+1]++;}}this.length=Math.max(this.length,i+1);return this;};// Subtract plain number `num` from `this` |
|
|
BN.prototype.isubn=function isubn(num){assert(typeof num==='number');assert(num<0x4000000);if(num<0)return this.iaddn(-num);if(this.negative!==0){this.negative=0;this.iaddn(num);this.negative=1;return this;}this.words[0]-=num;if(this.length===1&&this.words[0]<0){this.words[0]=-this.words[0];this.negative=1;}else{// Carry |
|
|
for(var i=0;i<this.length&&this.words[i]<0;i++){this.words[i]+=0x4000000;this.words[i+1]-=1;}}return this.strip();};BN.prototype.addn=function addn(num){return this.clone().iaddn(num);};BN.prototype.subn=function subn(num){return this.clone().isubn(num);};BN.prototype.iabs=function iabs(){this.negative=0;return this;};BN.prototype.abs=function abs(){return this.clone().iabs();};BN.prototype._ishlnsubmul=function _ishlnsubmul(num,mul,shift){var len=num.length+shift;var i;this._expand(len);var w;var carry=0;for(i=0;i<num.length;i++){w=(this.words[i+shift]|0)+carry;var right=(num.words[i]|0)*mul;w-=right&0x3ffffff;carry=(w>>26)-(right/0x4000000|0);this.words[i+shift]=w&0x3ffffff;}for(;i<this.length-shift;i++){w=(this.words[i+shift]|0)+carry;carry=w>>26;this.words[i+shift]=w&0x3ffffff;}if(carry===0)return this.strip();// Subtraction overflow |
|
|
assert(carry===-1);carry=0;for(i=0;i<this.length;i++){w=-(this.words[i]|0)+carry;carry=w>>26;this.words[i]=w&0x3ffffff;}this.negative=1;return this.strip();};BN.prototype._wordDiv=function _wordDiv(num,mode){var shift=this.length-num.length;var a=this.clone();var b=num;// Normalize |
|
|
var bhi=b.words[b.length-1]|0;var bhiBits=this._countBits(bhi);shift=26-bhiBits;if(shift!==0){b=b.ushln(shift);a.iushln(shift);bhi=b.words[b.length-1]|0;}// Initialize quotient |
|
|
var m=a.length-b.length;var q;if(mode!=='mod'){q=new BN(null);q.length=m+1;q.words=new Array(q.length);for(var i=0;i<q.length;i++){q.words[i]=0;}}var diff=a.clone()._ishlnsubmul(b,1,m);if(diff.negative===0){a=diff;if(q){q.words[m]=1;}}for(var j=m-1;j>=0;j--){var qj=(a.words[b.length+j]|0)*0x4000000+(a.words[b.length+j-1]|0);// NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max |
|
|
// (0x7ffffff) |
|
|
qj=Math.min(qj/bhi|0,0x3ffffff);a._ishlnsubmul(b,qj,j);while(a.negative!==0){qj--;a.negative=0;a._ishlnsubmul(b,1,j);if(!a.isZero()){a.negative^=1;}}if(q){q.words[j]=qj;}}if(q){q.strip();}a.strip();// Denormalize |
|
|
if(mode!=='div'&&shift!==0){a.iushrn(shift);}return{div:q||null,mod:a};};// NOTE: 1) `mode` can be set to `mod` to request mod only, |
|
|
// to `div` to request div only, or be absent to |
|
|
// request both div & mod |
|
|
// 2) `positive` is true if unsigned mod is requested |
|
|
BN.prototype.divmod=function divmod(num,mode,positive){assert(!num.isZero());if(this.isZero()){return{div:new BN(0),mod:new BN(0)};}var div,mod,res;if(this.negative!==0&&num.negative===0){res=this.neg().divmod(num,mode);if(mode!=='mod'){div=res.div.neg();}if(mode!=='div'){mod=res.mod.neg();if(positive&&mod.negative!==0){mod.iadd(num);}}return{div:div,mod:mod};}if(this.negative===0&&num.negative!==0){res=this.divmod(num.neg(),mode);if(mode!=='mod'){div=res.div.neg();}return{div:div,mod:res.mod};}if((this.negative&num.negative)!==0){res=this.neg().divmod(num.neg(),mode);if(mode!=='div'){mod=res.mod.neg();if(positive&&mod.negative!==0){mod.isub(num);}}return{div:res.div,mod:mod};}// Both numbers are positive at this point |
|
|
// Strip both numbers to approximate shift value |
|
|
if(num.length>this.length||this.cmp(num)<0){return{div:new BN(0),mod:this};}// Very short reduction |
|
|
if(num.length===1){if(mode==='div'){return{div:this.divn(num.words[0]),mod:null};}if(mode==='mod'){return{div:null,mod:new BN(this.modn(num.words[0]))};}return{div:this.divn(num.words[0]),mod:new BN(this.modn(num.words[0]))};}return this._wordDiv(num,mode);};// Find `this` / `num` |
|
|
BN.prototype.div=function div(num){return this.divmod(num,'div',false).div;};// Find `this` % `num` |
|
|
BN.prototype.mod=function mod(num){return this.divmod(num,'mod',false).mod;};BN.prototype.umod=function umod(num){return this.divmod(num,'mod',true).mod;};// Find Round(`this` / `num`) |
|
|
BN.prototype.divRound=function divRound(num){var dm=this.divmod(num);// Fast case - exact division |
|
|
if(dm.mod.isZero())return dm.div;var mod=dm.div.negative!==0?dm.mod.isub(num):dm.mod;var half=num.ushrn(1);var r2=num.andln(1);var cmp=mod.cmp(half);// Round down |
|
|
if(cmp<0||r2===1&&cmp===0)return dm.div;// Round up |
|
|
return dm.div.negative!==0?dm.div.isubn(1):dm.div.iaddn(1);};BN.prototype.modn=function modn(num){assert(num<=0x3ffffff);var p=(1<<26)%num;var acc=0;for(var i=this.length-1;i>=0;i--){acc=(p*acc+(this.words[i]|0))%num;}return acc;};// In-place division by number |
|
|
BN.prototype.idivn=function idivn(num){assert(num<=0x3ffffff);var carry=0;for(var i=this.length-1;i>=0;i--){var w=(this.words[i]|0)+carry*0x4000000;this.words[i]=w/num|0;carry=w%num;}return this.strip();};BN.prototype.divn=function divn(num){return this.clone().idivn(num);};BN.prototype.egcd=function egcd(p){assert(p.negative===0);assert(!p.isZero());var x=this;var y=p.clone();if(x.negative!==0){x=x.umod(p);}else{x=x.clone();}// A * x + B * y = x |
|
|
var A=new BN(1);var B=new BN(0);// C * x + D * y = y |
|
|
var C=new BN(0);var D=new BN(1);var g=0;while(x.isEven()&&y.isEven()){x.iushrn(1);y.iushrn(1);++g;}var yp=y.clone();var xp=x.clone();while(!x.isZero()){for(var i=0,im=1;(x.words[0]&im)===0&&i<26;++i,im<<=1){;}if(i>0){x.iushrn(i);while(i-->0){if(A.isOdd()||B.isOdd()){A.iadd(yp);B.isub(xp);}A.iushrn(1);B.iushrn(1);}}for(var j=0,jm=1;(y.words[0]&jm)===0&&j<26;++j,jm<<=1){;}if(j>0){y.iushrn(j);while(j-->0){if(C.isOdd()||D.isOdd()){C.iadd(yp);D.isub(xp);}C.iushrn(1);D.iushrn(1);}}if(x.cmp(y)>=0){x.isub(y);A.isub(C);B.isub(D);}else{y.isub(x);C.isub(A);D.isub(B);}}return{a:C,b:D,gcd:y.iushln(g)};};// This is reduced incarnation of the binary EEA |
|
|
// above, designated to invert members of the |
|
|
// _prime_ fields F(p) at a maximal speed |
|
|
BN.prototype._invmp=function _invmp(p){assert(p.negative===0);assert(!p.isZero());var a=this;var b=p.clone();if(a.negative!==0){a=a.umod(p);}else{a=a.clone();}var x1=new BN(1);var x2=new BN(0);var delta=b.clone();while(a.cmpn(1)>0&&b.cmpn(1)>0){for(var i=0,im=1;(a.words[0]&im)===0&&i<26;++i,im<<=1){;}if(i>0){a.iushrn(i);while(i-->0){if(x1.isOdd()){x1.iadd(delta);}x1.iushrn(1);}}for(var j=0,jm=1;(b.words[0]&jm)===0&&j<26;++j,jm<<=1){;}if(j>0){b.iushrn(j);while(j-->0){if(x2.isOdd()){x2.iadd(delta);}x2.iushrn(1);}}if(a.cmp(b)>=0){a.isub(b);x1.isub(x2);}else{b.isub(a);x2.isub(x1);}}var res;if(a.cmpn(1)===0){res=x1;}else{res=x2;}if(res.cmpn(0)<0){res.iadd(p);}return res;};BN.prototype.gcd=function gcd(num){if(this.isZero())return num.abs();if(num.isZero())return this.abs();var a=this.clone();var b=num.clone();a.negative=0;b.negative=0;// Remove common factor of two |
|
|
for(var shift=0;a.isEven()&&b.isEven();shift++){a.iushrn(1);b.iushrn(1);}do{while(a.isEven()){a.iushrn(1);}while(b.isEven()){b.iushrn(1);}var r=a.cmp(b);if(r<0){// Swap `a` and `b` to make `a` always bigger than `b` |
|
|
var t=a;a=b;b=t;}else if(r===0||b.cmpn(1)===0){break;}a.isub(b);}while(true);return b.iushln(shift);};// Invert number in the field F(num) |
|
|
BN.prototype.invm=function invm(num){return this.egcd(num).a.umod(num);};BN.prototype.isEven=function isEven(){return(this.words[0]&1)===0;};BN.prototype.isOdd=function isOdd(){return(this.words[0]&1)===1;};// And first word and num |
|
|
BN.prototype.andln=function andln(num){return this.words[0]#};// Increment at the bit position in-line |
|
|
BN.prototype.bincn=function bincn(bit){assert(typeof bit==='number');var r=bit%26;var s=(bit-r)/26;var q=1<<r;// Fast case: bit is much higher than all existing words |
|
|
if(this.length<=s){this._expand(s+1);this.words[s]|=q;return this;}// Add bit and propagate, if needed |
|
|
var carry=q;for(var i=s;carry!==0&&i<this.length;i++){var w=this.words[i]|0;w+=carry;carry=w>>>26;w&=0x3ffffff;this.words[i]=w;}if(carry!==0){this.words[i]=carry;this.length++;}return this;};BN.prototype.isZero=function isZero(){return this.length===1&&this.words[0]===0;};BN.prototype.cmpn=function cmpn(num){var negative=num<0;if(this.negative!==0&&!negative)return-1;if(this.negative===0&&negative)return 1;this.strip();var res;if(this.length>1){res=1;}else{if(negative){num=-num;}assert(num<=0x3ffffff,'Number is too big');var w=this.words[0]|0;res=w===num?0:w<num?-1:1;}if(this.negative!==0)return-res|0;return res;};// Compare two numbers and return: |
|
|
// 1 - if `this` > `num` |
|
|
// 0 - if `this` == `num` |
|
|
// -1 - if `this` < `num` |
|
|
BN.prototype.cmp=function cmp(num){if(this.negative!==0&&num.negative===0)return-1;if(this.negative===0&&num.negative!==0)return 1;var res=this.ucmp(num);if(this.negative!==0)return-res|0;return res;};// Unsigned comparison |
|
|
BN.prototype.ucmp=function ucmp(num){// At this point both numbers have the same sign |
|
|
if(this.length>num.length)return 1;if(this.length<num.length)return-1;var res=0;for(var i=this.length-1;i>=0;i--){var a=this.words[i]|0;var b=num.words[i]|0;if(a===b)continue;if(a<b){res=-1;}else if(a>b){res=1;}break;}return res;};BN.prototype.gtn=function gtn(num){return this.cmpn(num)===1;};BN.prototype.gt=function gt(num){return this.cmp(num)===1;};BN.prototype.gten=function gten(num){return this.cmpn(num)>=0;};BN.prototype.gte=function gte(num){return this.cmp(num)>=0;};BN.prototype.ltn=function ltn(num){return this.cmpn(num)===-1;};BN.prototype.lt=function lt(num){return this.cmp(num)===-1;};BN.prototype.lten=function lten(num){return this.cmpn(num)<=0;};BN.prototype.lte=function lte(num){return this.cmp(num)<=0;};BN.prototype.eqn=function eqn(num){return this.cmpn(num)===0;};BN.prototype.eq=function eq(num){return this.cmp(num)===0;};// |
|
|
// A reduce context, could be using montgomery or something better, depending |
|
|
// on the `m` itself. |
|
|
// |
|
|
BN.red=function red(num){return new Red(num);};BN.prototype.toRed=function toRed(ctx){assert(!this.red,'Already a number in reduction context');assert(this.negative===0,'red works only with positives');return ctx.convertTo(this)._forceRed(ctx);};BN.prototype.fromRed=function fromRed(){assert(this.red,'fromRed works only with numbers in reduction context');return this.red.convertFrom(this);};BN.prototype._forceRed=function _forceRed(ctx){this.red=ctx;return this;};BN.prototype.forceRed=function forceRed(ctx){assert(!this.red,'Already a number in reduction context');return this._forceRed(ctx);};BN.prototype.redAdd=function redAdd(num){assert(this.red,'redAdd works only with red numbers');return this.red.add(this,num);};BN.prototype.redIAdd=function redIAdd(num){assert(this.red,'redIAdd works only with red numbers');return this.red.iadd(this,num);};BN.prototype.redSub=function redSub(num){assert(this.red,'redSub works only with red numbers');return this.red.sub(this,num);};BN.prototype.redISub=function redISub(num){assert(this.red,'redISub works only with red numbers');return this.red.isub(this,num);};BN.prototype.redShl=function redShl(num){assert(this.red,'redShl works only with red numbers');return this.red.shl(this,num);};BN.prototype.redMul=function redMul(num){assert(this.red,'redMul works only with red numbers');this.red._verify2(this,num);return this.red.mul(this,num);};BN.prototype.redIMul=function redIMul(num){assert(this.red,'redMul works only with red numbers');this.red._verify2(this,num);return this.red.imul(this,num);};BN.prototype.redSqr=function redSqr(){assert(this.red,'redSqr works only with red numbers');this.red._verify1(this);return this.red.sqr(this);};BN.prototype.redISqr=function redISqr(){assert(this.red,'redISqr works only with red numbers');this.red._verify1(this);return this.red.isqr(this);};// Square root over p |
|
|
BN.prototype.redSqrt=function redSqrt(){assert(this.red,'redSqrt works only with red numbers');this.red._verify1(this);return this.red.sqrt(this);};BN.prototype.redInvm=function redInvm(){assert(this.red,'redInvm works only with red numbers');this.red._verify1(this);return this.red.invm(this);};// Return negative clone of `this` % `red modulo` |
|
|
BN.prototype.redNeg=function redNeg(){assert(this.red,'redNeg works only with red numbers');this.red._verify1(this);return this.red.neg(this);};BN.prototype.redPow=function redPow(num){assert(this.red&&!num.red,'redPow(normalNum)');this.red._verify1(this);return this.red.pow(this,num);};// Prime numbers with efficient reduction |
|
|
var primes={k256:null,p224:null,p192:null,p25519:null};// Pseudo-Mersenne prime |
|
|
function MPrime(name,p){// P = 2 ^ N - K |
|
|
this.name=name;this.p=new BN(p,16);this.n=this.p.bitLength();this.k=new BN(1).iushln(this.n).isub(this.p);this.tmp=this._tmp();}MPrime.prototype._tmp=function _tmp(){var tmp=new BN(null);tmp.words=new Array(Math.ceil(this.n/13));return tmp;};MPrime.prototype.ireduce=function ireduce(num){// Assumes that `num` is less than `P^2` |
|
|
// num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) |
|
|
var r=num;var rlen;do{this.split(r,this.tmp);r=this.imulK(r);r=r.iadd(this.tmp);rlen=r.bitLength();}while(rlen>this.n);var cmp=rlen<this.n?-1:r.ucmp(this.p);if(cmp===0){r.words[0]=0;r.length=1;}else if(cmp>0){r.isub(this.p);}else{if(r.strip!==undefined){// r is BN v4 instance |
|
|
r.strip();}else{// r is BN v5 instance |
|
|
r._strip();}}return r;};MPrime.prototype.split=function split(input,out){input.iushrn(this.n,0,out);};MPrime.prototype.imulK=function imulK(num){return num.imul(this.k);};function K256(){MPrime.call(this,'k256','ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');}inherits(K256,MPrime);K256.prototype.split=function split(input,output){// 256 = 9 * 26 + 22 |
|
|
var mask=0x3fffff;var outLen=Math.min(input.length,9);for(var i=0;i<outLen;i++){output.words[i]=input.words[i];}output.length=outLen;if(input.length<=9){input.words[0]=0;input.length=1;return;}// Shift by 9 limbs |
|
|
var prev=input.words[9];output.words[output.length++]=prev&mask;for(i=10;i<input.length;i++){var next=input.words[i]|0;input.words[i-10]=(next&mask)<<4|prev>>>22;prev=next;}prev>>>=22;input.words[i-10]=prev;if(prev===0&&input.length>10){input.length-=10;}else{input.length-=9;}};K256.prototype.imulK=function imulK(num){// K = 0x1000003d1 = [ 0x40, 0x3d1 ] |
|
|
num.words[num.length]=0;num.words[num.length+1]=0;num.length+=2;// bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 |
|
|
var lo=0;for(var i=0;i<num.length;i++){var w=num.words[i]|0;lo+=w*0x3d1;num.words[i]=lo&0x3ffffff;lo=w*0x40+(lo/0x4000000|0);}// Fast length reduction |
|
|
if(num.words[num.length-1]===0){num.length--;if(num.words[num.length-1]===0){num.length--;}}return num;};function P224(){MPrime.call(this,'p224','ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');}inherits(P224,MPrime);function P192(){MPrime.call(this,'p192','ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');}inherits(P192,MPrime);function P25519(){// 2 ^ 255 - 19 |
|
|
MPrime.call(this,'25519','7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');}inherits(P25519,MPrime);P25519.prototype.imulK=function imulK(num){// K = 0x13 |
|
|
var carry=0;for(var i=0;i<num.length;i++){var hi=(num.words[i]|0)*0x13+carry;var lo=hi&0x3ffffff;hi>>>=26;num.words[i]=lo;carry=hi;}if(carry!==0){num.words[num.length++]=carry;}return num;};// Exported mostly for testing purposes, use plain name instead |
|
|
BN._prime=function prime(name){// Cached version of prime |
|
|
if(primes[name])return primes[name];var prime;if(name==='k256'){prime=new K256();}else if(name==='p224'){prime=new P224();}else if(name==='p192'){prime=new P192();}else if(name==='p25519'){prime=new P25519();}else{throw new Error('Unknown prime '+name);}primes[name]=prime;return prime;};// |
|
|
// Base reduction engine |
|
|
// |
|
|
function Red(m){if(typeof m==='string'){var prime=BN._prime(m);this.m=prime.p;this.prime=prime;}else{assert(m.gtn(1),'modulus must be greater than 1');this.m=m;this.prime=null;}}Red.prototype._verify1=function _verify1(a){assert(a.negative===0,'red works only with positives');assert(a.red,'red works only with red numbers');};Red.prototype._verify2=function _verify2(a,b){assert((a.negative|b.negative)===0,'red works only with positives');assert(a.red&&a.red===b.red,'red works only with red numbers');};Red.prototype.imod=function imod(a){if(this.prime)return this.prime.ireduce(a)._forceRed(this);return a.umod(this.m)._forceRed(this);};Red.prototype.neg=function neg(a){if(a.isZero()){return a.clone();}return this.m.sub(a)._forceRed(this);};Red.prototype.add=function add(a,b){this._verify2(a,b);var res=a.add(b);if(res.cmp(this.m)>=0){res.isub(this.m);}return res._forceRed(this);};Red.prototype.iadd=function iadd(a,b){this._verify2(a,b);var res=a.iadd(b);if(res.cmp(this.m)>=0){res.isub(this.m);}return res;};Red.prototype.sub=function sub(a,b){this._verify2(a,b);var res=a.sub(b);if(res.cmpn(0)<0){res.iadd(this.m);}return res._forceRed(this);};Red.prototype.isub=function isub(a,b){this._verify2(a,b);var res=a.isub(b);if(res.cmpn(0)<0){res.iadd(this.m);}return res;};Red.prototype.shl=function shl(a,num){this._verify1(a);return this.imod(a.ushln(num));};Red.prototype.imul=function imul(a,b){this._verify2(a,b);return this.imod(a.imul(b));};Red.prototype.mul=function mul(a,b){this._verify2(a,b);return this.imod(a.mul(b));};Red.prototype.isqr=function isqr(a){return this.imul(a,a.clone());};Red.prototype.sqr=function sqr(a){return this.mul(a,a);};Red.prototype.sqrt=function sqrt(a){if(a.isZero())return a.clone();var mod3=this.m.andln(3);assert(mod3%2===1);// Fast case |
|
|
if(mod3===3){var pow=this.m.add(new BN(1)).iushrn(2);return this.pow(a,pow);}// Tonelli-Shanks algorithm (Totally unoptimized and slow) |
|
|
// |
|
|
// Find Q and S, that Q * 2 ^ S = (P - 1) |
|
|
var q=this.m.subn(1);var s=0;while(!q.isZero()&&q.andln(1)===0){s++;q.iushrn(1);}assert(!q.isZero());var one=new BN(1).toRed(this);var nOne=one.redNeg();// Find quadratic non-residue |
|
|
// NOTE: Max is such because of generalized Riemann hypothesis. |
|
|
var lpow=this.m.subn(1).iushrn(1);var z=this.m.bitLength();z=new BN(2*z*z).toRed(this);while(this.pow(z,lpow).cmp(nOne)!==0){z.redIAdd(nOne);}var c=this.pow(z,q);var r=this.pow(a,q.addn(1).iushrn(1));var t=this.pow(a,q);var m=s;while(t.cmp(one)!==0){var tmp=t;for(var i=0;tmp.cmp(one)!==0;i++){tmp=tmp.redSqr();}assert(i<m);var b=this.pow(c,new BN(1).iushln(m-i-1));r=r.redMul(b);c=b.redSqr();t=t.redMul(c);m=i;}return r;};Red.prototype.invm=function invm(a){var inv=a._invmp(this.m);if(inv.negative!==0){inv.negative=0;return this.imod(inv).redNeg();}else{return this.imod(inv);}};Red.prototype.pow=function pow(a,num){if(num.isZero())return new BN(1).toRed(this);if(num.cmpn(1)===0)return a.clone();var windowSize=4;var wnd=new Array(1<<windowSize);wnd[0]=new BN(1).toRed(this);wnd[1]=a;for(var i=2;i<wnd.length;i++){wnd[i]=this.mul(wnd[i-1],a);}var res=wnd[0];var current=0;var currentLen=0;var start=num.bitLength()%26;if(start===0){start=26;}for(i=num.length-1;i>=0;i--){var word=num.words[i];for(var j=start-1;j>=0;j--){var bit=word>>j&1;if(res!==wnd[0]){res=this.sqr(res);}if(bit===0&¤t===0){currentLen=0;continue;}current<<=1;current|=bit;currentLen++;if(currentLen!==windowSize&&(i!==0||j!==0))continue;res=this.mul(res,wnd[current]);currentLen=0;current=0;}start=26;}return res;};Red.prototype.convertTo=function convertTo(num){var r=num.umod(this.m);return r===num?r.clone():r;};Red.prototype.convertFrom=function convertFrom(num){var res=num.clone();res.red=null;return res;};// |
|
|
// Montgomery method engine |
|
|
// |
|
|
BN.mont=function mont(num){return new Mont(num);};function Mont(m){Red.call(this,m);this.shift=this.m.bitLength();if(this.shift%26!==0){this.shift+=26-this.shift%26;}this.r=new BN(1).iushln(this.shift);this.r2=this.imod(this.r.sqr());this.rinv=this.r._invmp(this.m);this.minv=this.rinv.mul(this.r).isubn(1).div(this.m);this.minv=this.minv.umod(this.r);this.minv=this.r.sub(this.minv);}inherits(Mont,Red);Mont.prototype.convertTo=function convertTo(num){return this.imod(num.ushln(this.shift));};Mont.prototype.convertFrom=function convertFrom(num){var r=this.imod(num.mul(this.rinv));r.red=null;return r;};Mont.prototype.imul=function imul(a,b){if(a.isZero()||b.isZero()){a.words[0]=0;a.length=1;return a;}var t=a.imul(b);var c=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);var u=t.isub(c).iushrn(this.shift);var res=u;if(u.cmp(this.m)>=0){res=u.isub(this.m);}else if(u.cmpn(0)<0){res=u.iadd(this.m);}return res._forceRed(this);};Mont.prototype.mul=function mul(a,b){if(a.isZero()||b.isZero())return new BN(0)._forceRed(this);var t=a.mul(b);var c=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);var u=t.isub(c).iushrn(this.shift);var res=u;if(u.cmp(this.m)>=0){res=u.isub(this.m);}else if(u.cmpn(0)<0){res=u.iadd(this.m);}return res._forceRed(this);};Mont.prototype.invm=function invm(a){// (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R |
|
|
var res=this.imod(a._invmp(this.m).mul(this.r2));return res._forceRed(this);};})(typeof module==='undefined'||module,this);},{"buffer":183}],180:[function(require,module,exports){'use strict';exports.byteLength=byteLength;exports.toByteArray=toByteArray;exports.fromByteArray=fromByteArray;var lookup=[];var revLookup=[];var Arr=typeof Uint8Array!=='undefined'?Uint8Array:Array;var code='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';for(var i=0,len=code.length;i<len;++i){lookup[i]=code[i];revLookup[code.charCodeAt(i)]=i;}// Support decoding URL-safe base64 strings, as Node.js does. |
|
|
// See: https://en.wikipedia.org/wiki/Base64#URL_applications |
|
|
revLookup['-'.charCodeAt(0)]=62;revLookup['_'.charCodeAt(0)]=63;function getLens(b64){var len=b64.length;if(len%4>0){throw new Error('Invalid string. Length must be a multiple of 4');}// Trim off extra bytes after placeholder bytes are found |
|
|
// See: https://github.com/beatgammit/base64-js/issues/42 |
|
|
var validLen=b64.indexOf('=');if(validLen===-1)validLen=len;var placeHoldersLen=validLen===len?0:4-validLen%4;return[validLen,placeHoldersLen];}// base64 is 4/3 + up to two characters of the original data |
|
|
function byteLength(b64){var lens=getLens(b64);var validLen=lens[0];var placeHoldersLen=lens[1];return(validLen+placeHoldersLen)*3/4-placeHoldersLen;}function _byteLength(b64,validLen,placeHoldersLen){return(validLen+placeHoldersLen)*3/4-placeHoldersLen;}function toByteArray(b64){var tmp;var lens=getLens(b64);var validLen=lens[0];var placeHoldersLen=lens[1];var arr=new Arr(_byteLength(b64,validLen,placeHoldersLen));var curByte=0;// if there are placeholders, only get up to the last complete 4 chars |
|
|
var len=placeHoldersLen>0?validLen-4:validLen;var i;for(i=0;i<len;i+=4){tmp=revLookup[b64.charCodeAt(i)]<<18|revLookup[b64.charCodeAt(i+1)]<<12|revLookup[b64.charCodeAt(i+2)]<<6|revLookup[b64.charCodeAt(i+3)];arr[curByte++]=tmp>>16&0xFF;arr[curByte++]=tmp>>8&0xFF;arr[curByte++]=tmp&0xFF;}if(placeHoldersLen===2){tmp=revLookup[b64.charCodeAt(i)]<<2|revLookup[b64.charCodeAt(i+1)]>>4;arr[curByte++]=tmp&0xFF;}if(placeHoldersLen===1){tmp=revLookup[b64.charCodeAt(i)]<<10|revLookup[b64.charCodeAt(i+1)]<<4|revLookup[b64.charCodeAt(i+2)]>>2;arr[curByte++]=tmp>>8&0xFF;arr[curByte++]=tmp&0xFF;}return arr;}function tripletToBase64(num){return lookup[num>>18&0x3F]+lookup[num>>12&0x3F]+lookup[num>>6&0x3F]+lookup[num&0x3F];}function encodeChunk(uint8,start,end){var tmp;var output=[];for(var i=start;i<end;i+=3){tmp=(uint8[i]<<16&0xFF0000)+(uint8[i+1]<<8&0xFF00)+(uint8[i+2]&0xFF);output.push(tripletToBase64(tmp));}return output.join('');}function fromByteArray(uint8){var tmp;var len=uint8.length;var extraBytes=len%3;// if we have 1 byte left, pad 2 bytes |
|
|
var parts=[];var maxChunkLength=16383;// must be multiple of 3 |
|
|
// go through the array every three bytes, we'll deal with trailing stuff later |
|
|
for(var i=0,len2=len-extraBytes;i<len2;i+=maxChunkLength){parts.push(encodeChunk(uint8,i,i+maxChunkLength>len2?len2:i+maxChunkLength));}// pad the end with zeros, but make sure to not forget the extra bytes |
|
|
if(extraBytes===1){tmp=uint8[len-1];parts.push(lookup[tmp>>2]+lookup[tmp<<4&0x3F]+'==');}else if(extraBytes===2){tmp=(uint8[len-2]<<8)+uint8[len-1];parts.push(lookup[tmp>>10]+lookup[tmp>>4&0x3F]+lookup[tmp<<2&0x3F]+'=');}return parts.join('');}},{}],181:[function(require,module,exports){(function(module,exports){'use strict';// Utils |
|
|
function assert(val,msg){if(!val)throw new Error(msg||'Assertion failed');}// Could use `inherits` module, but don't want to move from single file |
|
|
// architecture yet. |
|
|
function inherits(ctor,superCtor){ctor.super_=superCtor;var TempCtor=function TempCtor(){};TempCtor.prototype=superCtor.prototype;ctor.prototype=new TempCtor();ctor.prototype.constructor=ctor;}// BN |
|
|
function BN(number,base,endian){if(BN.isBN(number)){return number;}this.negative=0;this.words=null;this.length=0;// Reduction context |
|
|
this.red=null;if(number!==null){if(base==='le'||base==='be'){endian=base;base=10;}this._init(number||0,base||10,endian||'be');}}if(_typeof2(module)==='object'){module.exports=BN;}else{exports.BN=BN;}BN.BN=BN;BN.wordSize=26;var Buffer;try{Buffer=require('buffer').Buffer;}catch(e){}BN.isBN=function isBN(num){if(num instanceof BN){return true;}return num!==null&&_typeof2(num)==='object'&&num.constructor.wordSize===BN.wordSize&&Array.isArray(num.words);};BN.max=function max(left,right){if(left.cmp(right)>0)return left;return right;};BN.min=function min(left,right){if(left.cmp(right)<0)return left;return right;};BN.prototype._init=function init(number,base,endian){if(typeof number==='number'){return this._initNumber(number,base,endian);}if(_typeof2(number)==='object'){return this._initArray(number,base,endian);}if(base==='hex'){base=16;}assert(base===(base|0)&&base>=2&&base<=36);number=number.toString().replace(/\s+/g,'');var start=0;if(number[0]==='-'){start++;}if(base===16){this._parseHex(number,start);}else{this._parseBase(number,base,start);}if(number[0]==='-'){this.negative=1;}this._strip();if(endian!=='le')return;this._initArray(this.toArray(),base,endian);};BN.prototype._initNumber=function _initNumber(number,base,endian){if(number<0){this.negative=1;number=-number;}if(number<0x4000000){this.words=[number&0x3ffffff];this.length=1;}else if(number<0x10000000000000){this.words=[number&0x3ffffff,number/0x4000000&0x3ffffff];this.length=2;}else{assert(number<0x20000000000000);// 2 ^ 53 (unsafe) |
|
|
this.words=[number&0x3ffffff,number/0x4000000&0x3ffffff,1];this.length=3;}if(endian!=='le')return;// Reverse the bytes |
|
|
this._initArray(this.toArray(),base,endian);};BN.prototype._initArray=function _initArray(number,base,endian){// Perhaps a Uint8Array |
|
|
assert(typeof number.length==='number');if(number.length<=0){this.words=[0];this.length=1;return this;}this.length=Math.ceil(number.length/3);this.words=new Array(this.length);for(var i=0;i<this.length;i++){this.words[i]=0;}var j,w;var off=0;if(endian==='be'){for(i=number.length-1,j=0;i>=0;i-=3){w=number[i]|number[i-1]<<8|number[i-2]<<16;this.words[j]|=w<<off&0x3ffffff;this.words[j+1]=w>>>26-off&0x3ffffff;off+=24;if(off>=26){off-=26;j++;}}}else if(endian==='le'){for(i=0,j=0;i<number.length;i+=3){w=number[i]|number[i+1]<<8|number[i+2]<<16;this.words[j]|=w<<off&0x3ffffff;this.words[j+1]=w>>>26-off&0x3ffffff;off+=24;if(off>=26){off-=26;j++;}}}return this._strip();};function parseHex(str,start,end){var r=0;var len=Math.min(str.length,end);var z=0;for(var i=start;i<len;i++){var c=str.charCodeAt(i)-48;r<<=4;var b;// 'a' - 'f' |
|
|
if(c>=49&&c<=54){b=c-49+0xa;// 'A' - 'F' |
|
|
}else if(c>=17&&c<=22){b=c-17+0xa;// '0' - '9' |
|
|
}else{b=c;}r|=b;z|=b;}assert(!(z&0xf0),'Invalid character in '+str);return r;}BN.prototype._parseHex=function _parseHex(number,start){// Create possibly bigger array to ensure that it fits the number |
|
|
this.length=Math.ceil((number.length-start)/6);this.words=new Array(this.length);for(var i=0;i<this.length;i++){this.words[i]=0;}var j,w;// Scan 24-bit chunks and add them to the number |
|
|
var off=0;for(i=number.length-6,j=0;i>=start;i-=6){w=parseHex(number,i,i+6);this.words[j]|=w<<off&0x3ffffff;// NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb |
|
|
this.words[j+1]|=w>>>26-off&0x3fffff;off+=24;if(off>=26){off-=26;j++;}}if(i+6!==start){w=parseHex(number,start,i+6);this.words[j]|=w<<off&0x3ffffff;this.words[j+1]|=w>>>26-off&0x3fffff;}this._strip();};function parseBase(str,start,end,mul){var r=0;var b=0;var len=Math.min(str.length,end);for(var i=start;i<len;i++){var c=str.charCodeAt(i)-48;r*=mul;// 'a' |
|
|
if(c>=49){b=c-49+0xa;// 'A' |
|
|
}else if(c>=17){b=c-17+0xa;// '0' - '9' |
|
|
}else{b=c;}assert(c>=0&&b<mul,'Invalid character');r+=b;}return r;}BN.prototype._parseBase=function _parseBase(number,base,start){// Initialize as zero |
|
|
this.words=[0];this.length=1;// Find length of limb in base |
|
|
for(var limbLen=0,limbPow=1;limbPow<=0x3ffffff;limbPow*=base){limbLen++;}limbLen--;limbPow=limbPow/base|0;var total=number.length-start;var mod=total%limbLen;var end=Math.min(total,total-mod)+start;var word=0;for(var i=start;i<end;i+=limbLen){word=parseBase(number,i,i+limbLen,base);this.imuln(limbPow);if(this.words[0]+word<0x4000000){this.words[0]+=word;}else{this._iaddn(word);}}if(mod!==0){var pow=1;word=parseBase(number,i,number.length,base);for(i=0;i<mod;i++){pow*=base;}this.imuln(pow);if(this.words[0]+word<0x4000000){this.words[0]+=word;}else{this._iaddn(word);}}};BN.prototype.copy=function copy(dest){dest.words=new Array(this.length);for(var i=0;i<this.length;i++){dest.words[i]=this.words[i];}dest.length=this.length;dest.negative=this.negative;dest.red=this.red;};function move(dest,src){dest.words=src.words;dest.length=src.length;dest.negative=src.negative;dest.red=src.red;}BN.prototype._move=function _move(dest){move(dest,this);};BN.prototype.clone=function clone(){var r=new BN(null);this.copy(r);return r;};BN.prototype._expand=function _expand(size){while(this.length<size){this.words[this.length++]=0;}return this;};// Remove leading `0` from `this` |
|
|
BN.prototype._strip=function strip(){while(this.length>1&&this.words[this.length-1]===0){this.length--;}return this._normSign();};BN.prototype._normSign=function _normSign(){// -0 = 0 |
|
|
if(this.length===1&&this.words[0]===0){this.negative=0;}return this;};// Check Symbol.for because not everywhere where Symbol defined |
|
|
// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility |
|
|
if(typeof Symbol!=='undefined'&&typeof Symbol.for==='function'){BN.prototype[Symbol.for('nodejs.util.inspect.custom')]=inspect;}else{BN.prototype.inspect=inspect;}function inspect(){return(this.red?'<BN-R: ':'<BN: ')+this.toString(16)+'>';}/* |
|
|
|
|
|
var zeros = []; |
|
|
var groupSizes = []; |
|
|
var groupBases = []; |
|
|
|
|
|
var s = ''; |
|
|
var i = -1; |
|
|
while (++i < BN.wordSize) { |
|
|
zeros[i] = s; |
|
|
s += '0'; |
|
|
} |
|
|
groupSizes[0] = 0; |
|
|
groupSizes[1] = 0; |
|
|
groupBases[0] = 0; |
|
|
groupBases[1] = 0; |
|
|
var base = 2 - 1; |
|
|
while (++base < 36 + 1) { |
|
|
var groupSize = 0; |
|
|
var groupBase = 1; |
|
|
while (groupBase < (1 << BN.wordSize) / base) { |
|
|
groupBase *= base; |
|
|
groupSize += 1; |
|
|
} |
|
|
groupSizes[base] = groupSize; |
|
|
groupBases[base] = groupBase; |
|
|
} |
|
|
|
|
|
*/var zeros=['','0','00','000','0000','00000','000000','0000000','00000000','000000000','0000000000','00000000000','000000000000','0000000000000','00000000000000','000000000000000','0000000000000000','00000000000000000','000000000000000000','0000000000000000000','00000000000000000000','000000000000000000000','0000000000000000000000','00000000000000000000000','000000000000000000000000','0000000000000000000000000'];var groupSizes=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5];var groupBases=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,10000000,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64000000,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,24300000,28629151,33554432,39135393,45435424,52521875,60466176];BN.prototype.toString=function toString(base,padding){base=base||10;padding=padding|0||1;var out;if(base===16||base==='hex'){out='';var off=0;var carry=0;for(var i=0;i<this.length;i++){var w=this.words[i];var word=((w<<off|carry)&0xffffff).toString(16);carry=w>>>24-off&0xffffff;if(carry!==0||i!==this.length-1){out=zeros[6-word.length]+word+out;}else{out=word+out;}off+=2;if(off>=26){off-=26;i--;}}if(carry!==0){out=carry.toString(16)+out;}while(out.length%padding!==0){out='0'+out;}if(this.negative!==0){out='-'+out;}return out;}if(base===(base|0)&&base>=2&&base<=36){// var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); |
|
|
var groupSize=groupSizes[base];// var groupBase = Math.pow(base, groupSize); |
|
|
var groupBase=groupBases[base];out='';var c=this.clone();c.negative=0;while(!c.isZero()){var r=c.modrn(groupBase).toString(base);c=c.idivn(groupBase);if(!c.isZero()){out=zeros[groupSize-r.length]+r+out;}else{out=r+out;}}if(this.isZero()){out='0'+out;}while(out.length%padding!==0){out='0'+out;}if(this.negative!==0){out='-'+out;}return out;}assert(false,'Base should be between 2 and 36');};BN.prototype.toNumber=function toNumber(){var ret=this.words[0];if(this.length===2){ret+=this.words[1]*0x4000000;}else if(this.length===3&&this.words[2]===0x01){// NOTE: at this stage it is known that the top bit is set |
|
|
ret+=0x10000000000000+this.words[1]*0x4000000;}else if(this.length>2){assert(false,'Number can only safely store up to 53 bits');}return this.negative!==0?-ret:ret;};BN.prototype.toJSON=function toJSON(){return this.toString(16,2);};if(Buffer){BN.prototype.toBuffer=function toBuffer(endian,length){return this.toArrayLike(Buffer,endian,length);};}BN.prototype.toArray=function toArray(endian,length){return this.toArrayLike(Array,endian,length);};var allocate=function allocate(ArrayType,size){if(ArrayType.allocUnsafe){return ArrayType.allocUnsafe(size);}return new ArrayType(size);};BN.prototype.toArrayLike=function toArrayLike(ArrayType,endian,length){this._strip();var byteLength=this.byteLength();var reqLength=length||Math.max(1,byteLength);assert(byteLength<=reqLength,'byte array longer than desired length');assert(reqLength>0,'Requested array length <= 0');var res=allocate(ArrayType,reqLength);var postfix=endian==='le'?'LE':'BE';this['_toArrayLike'+postfix](res,byteLength);return res;};BN.prototype._toArrayLikeLE=function _toArrayLikeLE(res,byteLength){var position=0;var carry=0;for(var i=0,shift=0;i<this.length;i++){var word=this.words[i]<<shift|carry;res[position++]=word&0xff;if(position<res.length){res[position++]=word>>8&0xff;}if(position<res.length){res[position++]=word>>16&0xff;}if(shift===6){if(position<res.length){res[position++]=word>>24&0xff;}carry=0;shift=0;}else{carry=word>>>24;shift+=2;}}if(position<res.length){res[position++]=carry;while(position<res.length){res[position++]=0;}}};BN.prototype._toArrayLikeBE=function _toArrayLikeBE(res,byteLength){var position=res.length-1;var carry=0;for(var i=0,shift=0;i<this.length;i++){var word=this.words[i]<<shift|carry;res[position--]=word&0xff;if(position>=0){res[position--]=word>>8&0xff;}if(position>=0){res[position--]=word>>16&0xff;}if(shift===6){if(position>=0){res[position--]=word>>24&0xff;}carry=0;shift=0;}else{carry=word>>>24;shift+=2;}}if(position>=0){res[position--]=carry;while(position>=0){res[position--]=0;}}};if(Math.clz32){BN.prototype._countBits=function _countBits(w){return 32-Math.clz32(w);};}else{BN.prototype._countBits=function _countBits(w){var t=w;var r=0;if(t>=0x1000){r+=13;t>>>=13;}if(t>=0x40){r+=7;t>>>=7;}if(t>=0x8){r+=4;t>>>=4;}if(t>=0x02){r+=2;t>>>=2;}return r+t;};}BN.prototype._zeroBits=function _zeroBits(w){// Short-cut |
|
|
if(w===0)return 26;var t=w;var r=0;if((t&0x1fff)===0){r+=13;t>>>=13;}if((t&0x7f)===0){r+=7;t>>>=7;}if((t&0xf)===0){r+=4;t>>>=4;}if((t&0x3)===0){r+=2;t>>>=2;}if((t&0x1)===0){r++;}return r;};// Return number of used bits in a BN |
|
|
BN.prototype.bitLength=function bitLength(){var w=this.words[this.length-1];var hi=this._countBits(w);return(this.length-1)*26+hi;};function toBitArray(num){var w=new Array(num.bitLength());for(var bit=0;bit<w.length;bit++){var off=bit/26|0;var wbit=bit%26;w[bit]=num.words[off]>>>wbit&0x01;}return w;}// Number of trailing zero bits |
|
|
BN.prototype.zeroBits=function zeroBits(){if(this.isZero())return 0;var r=0;for(var i=0;i<this.length;i++){var b=this._zeroBits(this.words[i]);r+=b;if(b!==26)break;}return r;};BN.prototype.byteLength=function byteLength(){return Math.ceil(this.bitLength()/8);};BN.prototype.toTwos=function toTwos(width){if(this.negative!==0){return this.abs().inotn(width).iaddn(1);}return this.clone();};BN.prototype.fromTwos=function fromTwos(width){if(this.testn(width-1)){return this.notn(width).iaddn(1).ineg();}return this.clone();};BN.prototype.isNeg=function isNeg(){return this.negative!==0;};// Return negative clone of `this` |
|
|
BN.prototype.neg=function neg(){return this.clone().ineg();};BN.prototype.ineg=function ineg(){if(!this.isZero()){this.negative^=1;}return this;};// Or `num` with `this` in-place |
|
|
BN.prototype.iuor=function iuor(num){while(this.length<num.length){this.words[this.length++]=0;}for(var i=0;i<num.length;i++){this.words[i]=this.words[i]|num.words[i];}return this._strip();};BN.prototype.ior=function ior(num){assert((this.negative|num.negative)===0);return this.iuor(num);};// Or `num` with `this` |
|
|
BN.prototype.or=function or(num){if(this.length>num.length)return this.clone().ior(num);return num.clone().ior(this);};BN.prototype.uor=function uor(num){if(this.length>num.length)return this.clone().iuor(num);return num.clone().iuor(this);};// And `num` with `this` in-place |
|
|
BN.prototype.iuand=function iuand(num){// b = min-length(num, this) |
|
|
var b;if(this.length>num.length){b=num;}else{b=this;}for(var i=0;i<b.length;i++){this.words[i]=this.words[i]&num.words[i];}this.length=b.length;return this._strip();};BN.prototype.iand=function iand(num){assert((this.negative|num.negative)===0);return this.iuand(num);};// And `num` with `this` |
|
|
BN.prototype.and=function and(num){if(this.length>num.length)return this.clone().iand(num);return num.clone().iand(this);};BN.prototype.uand=function uand(num){if(this.length>num.length)return this.clone().iuand(num);return num.clone().iuand(this);};// Xor `num` with `this` in-place |
|
|
BN.prototype.iuxor=function iuxor(num){// a.length > b.length |
|
|
var a;var b;if(this.length>num.length){a=this;b=num;}else{a=num;b=this;}for(var i=0;i<b.length;i++){this.words[i]=a.words[i]^b.words[i];}if(this!==a){for(;i<a.length;i++){this.words[i]=a.words[i];}}this.length=a.length;return this._strip();};BN.prototype.ixor=function ixor(num){assert((this.negative|num.negative)===0);return this.iuxor(num);};// Xor `num` with `this` |
|
|
BN.prototype.xor=function xor(num){if(this.length>num.length)return this.clone().ixor(num);return num.clone().ixor(this);};BN.prototype.uxor=function uxor(num){if(this.length>num.length)return this.clone().iuxor(num);return num.clone().iuxor(this);};// Not ``this`` with ``width`` bitwidth |
|
|
BN.prototype.inotn=function inotn(width){assert(typeof width==='number'&&width>=0);var bytesNeeded=Math.ceil(width/26)|0;var bitsLeft=width%26;// Extend the buffer with leading zeroes |
|
|
this._expand(bytesNeeded);if(bitsLeft>0){bytesNeeded--;}// Handle complete words |
|
|
for(var i=0;i<bytesNeeded;i++){this.words[i]=~this.words[i]&0x3ffffff;}// Handle the residue |
|
|
if(bitsLeft>0){this.words[i]=~this.words[i]&0x3ffffff>>26-bitsLeft;}// And remove leading zeroes |
|
|
return this._strip();};BN.prototype.notn=function notn(width){return this.clone().inotn(width);};// Set `bit` of `this` |
|
|
BN.prototype.setn=function setn(bit,val){assert(typeof bit==='number'&&bit>=0);var off=bit/26|0;var wbit=bit%26;this._expand(off+1);if(val){this.words[off]=this.words[off]|1<<wbit;}else{this.words[off]=this.words[off]&~(1<<wbit);}return this._strip();};// Add `num` to `this` in-place |
|
|
BN.prototype.iadd=function iadd(num){var r;// negative + positive |
|
|
if(this.negative!==0&&num.negative===0){this.negative=0;r=this.isub(num);this.negative^=1;return this._normSign();// positive + negative |
|
|
}else if(this.negative===0&&num.negative!==0){num.negative=0;r=this.isub(num);num.negative=1;return r._normSign();}// a.length > b.length |
|
|
var a,b;if(this.length>num.length){a=this;b=num;}else{a=num;b=this;}var carry=0;for(var i=0;i<b.length;i++){r=(a.words[i]|0)+(b.words[i]|0)+carry;this.words[i]=r&0x3ffffff;carry=r>>>26;}for(;carry!==0&&i<a.length;i++){r=(a.words[i]|0)+carry;this.words[i]=r&0x3ffffff;carry=r>>>26;}this.length=a.length;if(carry!==0){this.words[this.length]=carry;this.length++;// Copy the rest of the words |
|
|
}else if(a!==this){for(;i<a.length;i++){this.words[i]=a.words[i];}}return this;};// Add `num` to `this` |
|
|
BN.prototype.add=function add(num){var res;if(num.negative!==0&&this.negative===0){num.negative=0;res=this.sub(num);num.negative^=1;return res;}else if(num.negative===0&&this.negative!==0){this.negative=0;res=num.sub(this);this.negative=1;return res;}if(this.length>num.length)return this.clone().iadd(num);return num.clone().iadd(this);};// Subtract `num` from `this` in-place |
|
|
BN.prototype.isub=function isub(num){// this - (-num) = this + num |
|
|
if(num.negative!==0){num.negative=0;var r=this.iadd(num);num.negative=1;return r._normSign();// -this - num = -(this + num) |
|
|
}else if(this.negative!==0){this.negative=0;this.iadd(num);this.negative=1;return this._normSign();}// At this point both numbers are positive |
|
|
var cmp=this.cmp(num);// Optimization - zeroify |
|
|
if(cmp===0){this.negative=0;this.length=1;this.words[0]=0;return this;}// a > b |
|
|
var a,b;if(cmp>0){a=this;b=num;}else{a=num;b=this;}var carry=0;for(var i=0;i<b.length;i++){r=(a.words[i]|0)-(b.words[i]|0)+carry;carry=r>>26;this.words[i]=r&0x3ffffff;}for(;carry!==0&&i<a.length;i++){r=(a.words[i]|0)+carry;carry=r>>26;this.words[i]=r&0x3ffffff;}// Copy rest of the words |
|
|
if(carry===0&&i<a.length&&a!==this){for(;i<a.length;i++){this.words[i]=a.words[i];}}this.length=Math.max(this.length,i);if(a!==this){this.negative=1;}return this._strip();};// Subtract `num` from `this` |
|
|
BN.prototype.sub=function sub(num){return this.clone().isub(num);};function smallMulTo(self,num,out){out.negative=num.negative^self.negative;var len=self.length+num.length|0;out.length=len;len=len-1|0;// Peel one iteration (compiler can't do it, because of code complexity) |
|
|
var a=self.words[0]|0;var b=num.words[0]|0;var r=a*b;var lo=r&0x3ffffff;var carry=r/0x4000000|0;out.words[0]=lo;for(var k=1;k<len;k++){// Sum all words with the same `i + j = k` and accumulate `ncarry`, |
|
|
// note that ncarry could be >= 0x3ffffff |
|
|
var ncarry=carry>>>26;var rword=carry&0x3ffffff;var maxJ=Math.min(k,num.length-1);for(var j=Math.max(0,k-self.length+1);j<=maxJ;j++){var i=k-j|0;a=self.words[i]|0;b=num.words[j]|0;r=a*b+rword;ncarry+=r/0x4000000|0;rword=r&0x3ffffff;}out.words[k]=rword|0;carry=ncarry|0;}if(carry!==0){out.words[k]=carry|0;}else{out.length--;}return out._strip();}// TODO(indutny): it may be reasonable to omit it for users who don't need |
|
|
// to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit |
|
|
// multiplication (like elliptic secp256k1). |
|
|
var comb10MulTo=function comb10MulTo(self,num,out){var a=self.words;var b=num.words;var o=out.words;var c=0;var lo;var mid;var hi;var a0=a[0]|0;var al0=a0&0x1fff;var ah0=a0>>>13;var a1=a[1]|0;var al1=a1&0x1fff;var ah1=a1>>>13;var a2=a[2]|0;var al2=a2&0x1fff;var ah2=a2>>>13;var a3=a[3]|0;var al3=a3&0x1fff;var ah3=a3>>>13;var a4=a[4]|0;var al4=a4&0x1fff;var ah4=a4>>>13;var a5=a[5]|0;var al5=a5&0x1fff;var ah5=a5>>>13;var a6=a[6]|0;var al6=a6&0x1fff;var ah6=a6>>>13;var a7=a[7]|0;var al7=a7&0x1fff;var ah7=a7>>>13;var a8=a[8]|0;var al8=a8&0x1fff;var ah8=a8>>>13;var a9=a[9]|0;var al9=a9&0x1fff;var ah9=a9>>>13;var b0=b[0]|0;var bl0=b0&0x1fff;var bh0=b0>>>13;var b1=b[1]|0;var bl1=b1&0x1fff;var bh1=b1>>>13;var b2=b[2]|0;var bl2=b2&0x1fff;var bh2=b2>>>13;var b3=b[3]|0;var bl3=b3&0x1fff;var bh3=b3>>>13;var b4=b[4]|0;var bl4=b4&0x1fff;var bh4=b4>>>13;var b5=b[5]|0;var bl5=b5&0x1fff;var bh5=b5>>>13;var b6=b[6]|0;var bl6=b6&0x1fff;var bh6=b6>>>13;var b7=b[7]|0;var bl7=b7&0x1fff;var bh7=b7>>>13;var b8=b[8]|0;var bl8=b8&0x1fff;var bh8=b8>>>13;var b9=b[9]|0;var bl9=b9&0x1fff;var bh9=b9>>>13;out.negative=self.negative^num.negative;out.length=19;/* k = 0 */lo=Math.imul(al0,bl0);mid=Math.imul(al0,bh0);mid=mid+Math.imul(ah0,bl0)|0;hi=Math.imul(ah0,bh0);var w0=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w0>>>26)|0;w0&=0x3ffffff;/* k = 1 */lo=Math.imul(al1,bl0);mid=Math.imul(al1,bh0);mid=mid+Math.imul(ah1,bl0)|0;hi=Math.imul(ah1,bh0);lo=lo+Math.imul(al0,bl1)|0;mid=mid+Math.imul(al0,bh1)|0;mid=mid+Math.imul(ah0,bl1)|0;hi=hi+Math.imul(ah0,bh1)|0;var w1=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w1>>>26)|0;w1&=0x3ffffff;/* k = 2 */lo=Math.imul(al2,bl0);mid=Math.imul(al2,bh0);mid=mid+Math.imul(ah2,bl0)|0;hi=Math.imul(ah2,bh0);lo=lo+Math.imul(al1,bl1)|0;mid=mid+Math.imul(al1,bh1)|0;mid=mid+Math.imul(ah1,bl1)|0;hi=hi+Math.imul(ah1,bh1)|0;lo=lo+Math.imul(al0,bl2)|0;mid=mid+Math.imul(al0,bh2)|0;mid=mid+Math.imul(ah0,bl2)|0;hi=hi+Math.imul(ah0,bh2)|0;var w2=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w2>>>26)|0;w2&=0x3ffffff;/* k = 3 */lo=Math.imul(al3,bl0);mid=Math.imul(al3,bh0);mid=mid+Math.imul(ah3,bl0)|0;hi=Math.imul(ah3,bh0);lo=lo+Math.imul(al2,bl1)|0;mid=mid+Math.imul(al2,bh1)|0;mid=mid+Math.imul(ah2,bl1)|0;hi=hi+Math.imul(ah2,bh1)|0;lo=lo+Math.imul(al1,bl2)|0;mid=mid+Math.imul(al1,bh2)|0;mid=mid+Math.imul(ah1,bl2)|0;hi=hi+Math.imul(ah1,bh2)|0;lo=lo+Math.imul(al0,bl3)|0;mid=mid+Math.imul(al0,bh3)|0;mid=mid+Math.imul(ah0,bl3)|0;hi=hi+Math.imul(ah0,bh3)|0;var w3=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w3>>>26)|0;w3&=0x3ffffff;/* k = 4 */lo=Math.imul(al4,bl0);mid=Math.imul(al4,bh0);mid=mid+Math.imul(ah4,bl0)|0;hi=Math.imul(ah4,bh0);lo=lo+Math.imul(al3,bl1)|0;mid=mid+Math.imul(al3,bh1)|0;mid=mid+Math.imul(ah3,bl1)|0;hi=hi+Math.imul(ah3,bh1)|0;lo=lo+Math.imul(al2,bl2)|0;mid=mid+Math.imul(al2,bh2)|0;mid=mid+Math.imul(ah2,bl2)|0;hi=hi+Math.imul(ah2,bh2)|0;lo=lo+Math.imul(al1,bl3)|0;mid=mid+Math.imul(al1,bh3)|0;mid=mid+Math.imul(ah1,bl3)|0;hi=hi+Math.imul(ah1,bh3)|0;lo=lo+Math.imul(al0,bl4)|0;mid=mid+Math.imul(al0,bh4)|0;mid=mid+Math.imul(ah0,bl4)|0;hi=hi+Math.imul(ah0,bh4)|0;var w4=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w4>>>26)|0;w4&=0x3ffffff;/* k = 5 */lo=Math.imul(al5,bl0);mid=Math.imul(al5,bh0);mid=mid+Math.imul(ah5,bl0)|0;hi=Math.imul(ah5,bh0);lo=lo+Math.imul(al4,bl1)|0;mid=mid+Math.imul(al4,bh1)|0;mid=mid+Math.imul(ah4,bl1)|0;hi=hi+Math.imul(ah4,bh1)|0;lo=lo+Math.imul(al3,bl2)|0;mid=mid+Math.imul(al3,bh2)|0;mid=mid+Math.imul(ah3,bl2)|0;hi=hi+Math.imul(ah3,bh2)|0;lo=lo+Math.imul(al2,bl3)|0;mid=mid+Math.imul(al2,bh3)|0;mid=mid+Math.imul(ah2,bl3)|0;hi=hi+Math.imul(ah2,bh3)|0;lo=lo+Math.imul(al1,bl4)|0;mid=mid+Math.imul(al1,bh4)|0;mid=mid+Math.imul(ah1,bl4)|0;hi=hi+Math.imul(ah1,bh4)|0;lo=lo+Math.imul(al0,bl5)|0;mid=mid+Math.imul(al0,bh5)|0;mid=mid+Math.imul(ah0,bl5)|0;hi=hi+Math.imul(ah0,bh5)|0;var w5=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w5>>>26)|0;w5&=0x3ffffff;/* k = 6 */lo=Math.imul(al6,bl0);mid=Math.imul(al6,bh0);mid=mid+Math.imul(ah6,bl0)|0;hi=Math.imul(ah6,bh0);lo=lo+Math.imul(al5,bl1)|0;mid=mid+Math.imul(al5,bh1)|0;mid=mid+Math.imul(ah5,bl1)|0;hi=hi+Math.imul(ah5,bh1)|0;lo=lo+Math.imul(al4,bl2)|0;mid=mid+Math.imul(al4,bh2)|0;mid=mid+Math.imul(ah4,bl2)|0;hi=hi+Math.imul(ah4,bh2)|0;lo=lo+Math.imul(al3,bl3)|0;mid=mid+Math.imul(al3,bh3)|0;mid=mid+Math.imul(ah3,bl3)|0;hi=hi+Math.imul(ah3,bh3)|0;lo=lo+Math.imul(al2,bl4)|0;mid=mid+Math.imul(al2,bh4)|0;mid=mid+Math.imul(ah2,bl4)|0;hi=hi+Math.imul(ah2,bh4)|0;lo=lo+Math.imul(al1,bl5)|0;mid=mid+Math.imul(al1,bh5)|0;mid=mid+Math.imul(ah1,bl5)|0;hi=hi+Math.imul(ah1,bh5)|0;lo=lo+Math.imul(al0,bl6)|0;mid=mid+Math.imul(al0,bh6)|0;mid=mid+Math.imul(ah0,bl6)|0;hi=hi+Math.imul(ah0,bh6)|0;var w6=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w6>>>26)|0;w6&=0x3ffffff;/* k = 7 */lo=Math.imul(al7,bl0);mid=Math.imul(al7,bh0);mid=mid+Math.imul(ah7,bl0)|0;hi=Math.imul(ah7,bh0);lo=lo+Math.imul(al6,bl1)|0;mid=mid+Math.imul(al6,bh1)|0;mid=mid+Math.imul(ah6,bl1)|0;hi=hi+Math.imul(ah6,bh1)|0;lo=lo+Math.imul(al5,bl2)|0;mid=mid+Math.imul(al5,bh2)|0;mid=mid+Math.imul(ah5,bl2)|0;hi=hi+Math.imul(ah5,bh2)|0;lo=lo+Math.imul(al4,bl3)|0;mid=mid+Math.imul(al4,bh3)|0;mid=mid+Math.imul(ah4,bl3)|0;hi=hi+Math.imul(ah4,bh3)|0;lo=lo+Math.imul(al3,bl4)|0;mid=mid+Math.imul(al3,bh4)|0;mid=mid+Math.imul(ah3,bl4)|0;hi=hi+Math.imul(ah3,bh4)|0;lo=lo+Math.imul(al2,bl5)|0;mid=mid+Math.imul(al2,bh5)|0;mid=mid+Math.imul(ah2,bl5)|0;hi=hi+Math.imul(ah2,bh5)|0;lo=lo+Math.imul(al1,bl6)|0;mid=mid+Math.imul(al1,bh6)|0;mid=mid+Math.imul(ah1,bl6)|0;hi=hi+Math.imul(ah1,bh6)|0;lo=lo+Math.imul(al0,bl7)|0;mid=mid+Math.imul(al0,bh7)|0;mid=mid+Math.imul(ah0,bl7)|0;hi=hi+Math.imul(ah0,bh7)|0;var w7=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w7>>>26)|0;w7&=0x3ffffff;/* k = 8 */lo=Math.imul(al8,bl0);mid=Math.imul(al8,bh0);mid=mid+Math.imul(ah8,bl0)|0;hi=Math.imul(ah8,bh0);lo=lo+Math.imul(al7,bl1)|0;mid=mid+Math.imul(al7,bh1)|0;mid=mid+Math.imul(ah7,bl1)|0;hi=hi+Math.imul(ah7,bh1)|0;lo=lo+Math.imul(al6,bl2)|0;mid=mid+Math.imul(al6,bh2)|0;mid=mid+Math.imul(ah6,bl2)|0;hi=hi+Math.imul(ah6,bh2)|0;lo=lo+Math.imul(al5,bl3)|0;mid=mid+Math.imul(al5,bh3)|0;mid=mid+Math.imul(ah5,bl3)|0;hi=hi+Math.imul(ah5,bh3)|0;lo=lo+Math.imul(al4,bl4)|0;mid=mid+Math.imul(al4,bh4)|0;mid=mid+Math.imul(ah4,bl4)|0;hi=hi+Math.imul(ah4,bh4)|0;lo=lo+Math.imul(al3,bl5)|0;mid=mid+Math.imul(al3,bh5)|0;mid=mid+Math.imul(ah3,bl5)|0;hi=hi+Math.imul(ah3,bh5)|0;lo=lo+Math.imul(al2,bl6)|0;mid=mid+Math.imul(al2,bh6)|0;mid=mid+Math.imul(ah2,bl6)|0;hi=hi+Math.imul(ah2,bh6)|0;lo=lo+Math.imul(al1,bl7)|0;mid=mid+Math.imul(al1,bh7)|0;mid=mid+Math.imul(ah1,bl7)|0;hi=hi+Math.imul(ah1,bh7)|0;lo=lo+Math.imul(al0,bl8)|0;mid=mid+Math.imul(al0,bh8)|0;mid=mid+Math.imul(ah0,bl8)|0;hi=hi+Math.imul(ah0,bh8)|0;var w8=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w8>>>26)|0;w8&=0x3ffffff;/* k = 9 */lo=Math.imul(al9,bl0);mid=Math.imul(al9,bh0);mid=mid+Math.imul(ah9,bl0)|0;hi=Math.imul(ah9,bh0);lo=lo+Math.imul(al8,bl1)|0;mid=mid+Math.imul(al8,bh1)|0;mid=mid+Math.imul(ah8,bl1)|0;hi=hi+Math.imul(ah8,bh1)|0;lo=lo+Math.imul(al7,bl2)|0;mid=mid+Math.imul(al7,bh2)|0;mid=mid+Math.imul(ah7,bl2)|0;hi=hi+Math.imul(ah7,bh2)|0;lo=lo+Math.imul(al6,bl3)|0;mid=mid+Math.imul(al6,bh3)|0;mid=mid+Math.imul(ah6,bl3)|0;hi=hi+Math.imul(ah6,bh3)|0;lo=lo+Math.imul(al5,bl4)|0;mid=mid+Math.imul(al5,bh4)|0;mid=mid+Math.imul(ah5,bl4)|0;hi=hi+Math.imul(ah5,bh4)|0;lo=lo+Math.imul(al4,bl5)|0;mid=mid+Math.imul(al4,bh5)|0;mid=mid+Math.imul(ah4,bl5)|0;hi=hi+Math.imul(ah4,bh5)|0;lo=lo+Math.imul(al3,bl6)|0;mid=mid+Math.imul(al3,bh6)|0;mid=mid+Math.imul(ah3,bl6)|0;hi=hi+Math.imul(ah3,bh6)|0;lo=lo+Math.imul(al2,bl7)|0;mid=mid+Math.imul(al2,bh7)|0;mid=mid+Math.imul(ah2,bl7)|0;hi=hi+Math.imul(ah2,bh7)|0;lo=lo+Math.imul(al1,bl8)|0;mid=mid+Math.imul(al1,bh8)|0;mid=mid+Math.imul(ah1,bl8)|0;hi=hi+Math.imul(ah1,bh8)|0;lo=lo+Math.imul(al0,bl9)|0;mid=mid+Math.imul(al0,bh9)|0;mid=mid+Math.imul(ah0,bl9)|0;hi=hi+Math.imul(ah0,bh9)|0;var w9=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w9>>>26)|0;w9&=0x3ffffff;/* k = 10 */lo=Math.imul(al9,bl1);mid=Math.imul(al9,bh1);mid=mid+Math.imul(ah9,bl1)|0;hi=Math.imul(ah9,bh1);lo=lo+Math.imul(al8,bl2)|0;mid=mid+Math.imul(al8,bh2)|0;mid=mid+Math.imul(ah8,bl2)|0;hi=hi+Math.imul(ah8,bh2)|0;lo=lo+Math.imul(al7,bl3)|0;mid=mid+Math.imul(al7,bh3)|0;mid=mid+Math.imul(ah7,bl3)|0;hi=hi+Math.imul(ah7,bh3)|0;lo=lo+Math.imul(al6,bl4)|0;mid=mid+Math.imul(al6,bh4)|0;mid=mid+Math.imul(ah6,bl4)|0;hi=hi+Math.imul(ah6,bh4)|0;lo=lo+Math.imul(al5,bl5)|0;mid=mid+Math.imul(al5,bh5)|0;mid=mid+Math.imul(ah5,bl5)|0;hi=hi+Math.imul(ah5,bh5)|0;lo=lo+Math.imul(al4,bl6)|0;mid=mid+Math.imul(al4,bh6)|0;mid=mid+Math.imul(ah4,bl6)|0;hi=hi+Math.imul(ah4,bh6)|0;lo=lo+Math.imul(al3,bl7)|0;mid=mid+Math.imul(al3,bh7)|0;mid=mid+Math.imul(ah3,bl7)|0;hi=hi+Math.imul(ah3,bh7)|0;lo=lo+Math.imul(al2,bl8)|0;mid=mid+Math.imul(al2,bh8)|0;mid=mid+Math.imul(ah2,bl8)|0;hi=hi+Math.imul(ah2,bh8)|0;lo=lo+Math.imul(al1,bl9)|0;mid=mid+Math.imul(al1,bh9)|0;mid=mid+Math.imul(ah1,bl9)|0;hi=hi+Math.imul(ah1,bh9)|0;var w10=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w10>>>26)|0;w10&=0x3ffffff;/* k = 11 */lo=Math.imul(al9,bl2);mid=Math.imul(al9,bh2);mid=mid+Math.imul(ah9,bl2)|0;hi=Math.imul(ah9,bh2);lo=lo+Math.imul(al8,bl3)|0;mid=mid+Math.imul(al8,bh3)|0;mid=mid+Math.imul(ah8,bl3)|0;hi=hi+Math.imul(ah8,bh3)|0;lo=lo+Math.imul(al7,bl4)|0;mid=mid+Math.imul(al7,bh4)|0;mid=mid+Math.imul(ah7,bl4)|0;hi=hi+Math.imul(ah7,bh4)|0;lo=lo+Math.imul(al6,bl5)|0;mid=mid+Math.imul(al6,bh5)|0;mid=mid+Math.imul(ah6,bl5)|0;hi=hi+Math.imul(ah6,bh5)|0;lo=lo+Math.imul(al5,bl6)|0;mid=mid+Math.imul(al5,bh6)|0;mid=mid+Math.imul(ah5,bl6)|0;hi=hi+Math.imul(ah5,bh6)|0;lo=lo+Math.imul(al4,bl7)|0;mid=mid+Math.imul(al4,bh7)|0;mid=mid+Math.imul(ah4,bl7)|0;hi=hi+Math.imul(ah4,bh7)|0;lo=lo+Math.imul(al3,bl8)|0;mid=mid+Math.imul(al3,bh8)|0;mid=mid+Math.imul(ah3,bl8)|0;hi=hi+Math.imul(ah3,bh8)|0;lo=lo+Math.imul(al2,bl9)|0;mid=mid+Math.imul(al2,bh9)|0;mid=mid+Math.imul(ah2,bl9)|0;hi=hi+Math.imul(ah2,bh9)|0;var w11=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w11>>>26)|0;w11&=0x3ffffff;/* k = 12 */lo=Math.imul(al9,bl3);mid=Math.imul(al9,bh3);mid=mid+Math.imul(ah9,bl3)|0;hi=Math.imul(ah9,bh3);lo=lo+Math.imul(al8,bl4)|0;mid=mid+Math.imul(al8,bh4)|0;mid=mid+Math.imul(ah8,bl4)|0;hi=hi+Math.imul(ah8,bh4)|0;lo=lo+Math.imul(al7,bl5)|0;mid=mid+Math.imul(al7,bh5)|0;mid=mid+Math.imul(ah7,bl5)|0;hi=hi+Math.imul(ah7,bh5)|0;lo=lo+Math.imul(al6,bl6)|0;mid=mid+Math.imul(al6,bh6)|0;mid=mid+Math.imul(ah6,bl6)|0;hi=hi+Math.imul(ah6,bh6)|0;lo=lo+Math.imul(al5,bl7)|0;mid=mid+Math.imul(al5,bh7)|0;mid=mid+Math.imul(ah5,bl7)|0;hi=hi+Math.imul(ah5,bh7)|0;lo=lo+Math.imul(al4,bl8)|0;mid=mid+Math.imul(al4,bh8)|0;mid=mid+Math.imul(ah4,bl8)|0;hi=hi+Math.imul(ah4,bh8)|0;lo=lo+Math.imul(al3,bl9)|0;mid=mid+Math.imul(al3,bh9)|0;mid=mid+Math.imul(ah3,bl9)|0;hi=hi+Math.imul(ah3,bh9)|0;var w12=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w12>>>26)|0;w12&=0x3ffffff;/* k = 13 */lo=Math.imul(al9,bl4);mid=Math.imul(al9,bh4);mid=mid+Math.imul(ah9,bl4)|0;hi=Math.imul(ah9,bh4);lo=lo+Math.imul(al8,bl5)|0;mid=mid+Math.imul(al8,bh5)|0;mid=mid+Math.imul(ah8,bl5)|0;hi=hi+Math.imul(ah8,bh5)|0;lo=lo+Math.imul(al7,bl6)|0;mid=mid+Math.imul(al7,bh6)|0;mid=mid+Math.imul(ah7,bl6)|0;hi=hi+Math.imul(ah7,bh6)|0;lo=lo+Math.imul(al6,bl7)|0;mid=mid+Math.imul(al6,bh7)|0;mid=mid+Math.imul(ah6,bl7)|0;hi=hi+Math.imul(ah6,bh7)|0;lo=lo+Math.imul(al5,bl8)|0;mid=mid+Math.imul(al5,bh8)|0;mid=mid+Math.imul(ah5,bl8)|0;hi=hi+Math.imul(ah5,bh8)|0;lo=lo+Math.imul(al4,bl9)|0;mid=mid+Math.imul(al4,bh9)|0;mid=mid+Math.imul(ah4,bl9)|0;hi=hi+Math.imul(ah4,bh9)|0;var w13=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w13>>>26)|0;w13&=0x3ffffff;/* k = 14 */lo=Math.imul(al9,bl5);mid=Math.imul(al9,bh5);mid=mid+Math.imul(ah9,bl5)|0;hi=Math.imul(ah9,bh5);lo=lo+Math.imul(al8,bl6)|0;mid=mid+Math.imul(al8,bh6)|0;mid=mid+Math.imul(ah8,bl6)|0;hi=hi+Math.imul(ah8,bh6)|0;lo=lo+Math.imul(al7,bl7)|0;mid=mid+Math.imul(al7,bh7)|0;mid=mid+Math.imul(ah7,bl7)|0;hi=hi+Math.imul(ah7,bh7)|0;lo=lo+Math.imul(al6,bl8)|0;mid=mid+Math.imul(al6,bh8)|0;mid=mid+Math.imul(ah6,bl8)|0;hi=hi+Math.imul(ah6,bh8)|0;lo=lo+Math.imul(al5,bl9)|0;mid=mid+Math.imul(al5,bh9)|0;mid=mid+Math.imul(ah5,bl9)|0;hi=hi+Math.imul(ah5,bh9)|0;var w14=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w14>>>26)|0;w14&=0x3ffffff;/* k = 15 */lo=Math.imul(al9,bl6);mid=Math.imul(al9,bh6);mid=mid+Math.imul(ah9,bl6)|0;hi=Math.imul(ah9,bh6);lo=lo+Math.imul(al8,bl7)|0;mid=mid+Math.imul(al8,bh7)|0;mid=mid+Math.imul(ah8,bl7)|0;hi=hi+Math.imul(ah8,bh7)|0;lo=lo+Math.imul(al7,bl8)|0;mid=mid+Math.imul(al7,bh8)|0;mid=mid+Math.imul(ah7,bl8)|0;hi=hi+Math.imul(ah7,bh8)|0;lo=lo+Math.imul(al6,bl9)|0;mid=mid+Math.imul(al6,bh9)|0;mid=mid+Math.imul(ah6,bl9)|0;hi=hi+Math.imul(ah6,bh9)|0;var w15=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w15>>>26)|0;w15&=0x3ffffff;/* k = 16 */lo=Math.imul(al9,bl7);mid=Math.imul(al9,bh7);mid=mid+Math.imul(ah9,bl7)|0;hi=Math.imul(ah9,bh7);lo=lo+Math.imul(al8,bl8)|0;mid=mid+Math.imul(al8,bh8)|0;mid=mid+Math.imul(ah8,bl8)|0;hi=hi+Math.imul(ah8,bh8)|0;lo=lo+Math.imul(al7,bl9)|0;mid=mid+Math.imul(al7,bh9)|0;mid=mid+Math.imul(ah7,bl9)|0;hi=hi+Math.imul(ah7,bh9)|0;var w16=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w16>>>26)|0;w16&=0x3ffffff;/* k = 17 */lo=Math.imul(al9,bl8);mid=Math.imul(al9,bh8);mid=mid+Math.imul(ah9,bl8)|0;hi=Math.imul(ah9,bh8);lo=lo+Math.imul(al8,bl9)|0;mid=mid+Math.imul(al8,bh9)|0;mid=mid+Math.imul(ah8,bl9)|0;hi=hi+Math.imul(ah8,bh9)|0;var w17=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w17>>>26)|0;w17&=0x3ffffff;/* k = 18 */lo=Math.imul(al9,bl9);mid=Math.imul(al9,bh9);mid=mid+Math.imul(ah9,bl9)|0;hi=Math.imul(ah9,bh9);var w18=(c+lo|0)+((mid&0x1fff)<<13)|0;c=(hi+(mid>>>13)|0)+(w18>>>26)|0;w18&=0x3ffffff;o[0]=w0;o[1]=w1;o[2]=w2;o[3]=w3;o[4]=w4;o[5]=w5;o[6]=w6;o[7]=w7;o[8]=w8;o[9]=w9;o[10]=w10;o[11]=w11;o[12]=w12;o[13]=w13;o[14]=w14;o[15]=w15;o[16]=w16;o[17]=w17;o[18]=w18;if(c!==0){o[19]=c;out.length++;}return out;};// Polyfill comb |
|
|
if(!Math.imul){comb10MulTo=smallMulTo;}function bigMulTo(self,num,out){out.negative=num.negative^self.negative;out.length=self.length+num.length;var carry=0;var hncarry=0;for(var k=0;k<out.length-1;k++){// Sum all words with the same `i + j = k` and accumulate `ncarry`, |
|
|
// note that ncarry could be >= 0x3ffffff |
|
|
var ncarry=hncarry;hncarry=0;var rword=carry&0x3ffffff;var maxJ=Math.min(k,num.length-1);for(var j=Math.max(0,k-self.length+1);j<=maxJ;j++){var i=k-j;var a=self.words[i]|0;var b=num.words[j]|0;var r=a*b;var lo=r&0x3ffffff;ncarry=ncarry+(r/0x4000000|0)|0;lo=lo+rword|0;rword=lo&0x3ffffff;ncarry=ncarry+(lo>>>26)|0;hncarry+=ncarry>>>26;ncarry&=0x3ffffff;}out.words[k]=rword;carry=ncarry;ncarry=hncarry;}if(carry!==0){out.words[k]=carry;}else{out.length--;}return out._strip();}function jumboMulTo(self,num,out){// Temporary disable, see https://github.com/indutny/bn.js/issues/211 |
|
|
// var fftm = new FFTM(); |
|
|
// return fftm.mulp(self, num, out); |
|
|
return bigMulTo(self,num,out);}BN.prototype.mulTo=function mulTo(num,out){var res;var len=this.length+num.length;if(this.length===10&&num.length===10){res=comb10MulTo(this,num,out);}else if(len<63){res=smallMulTo(this,num,out);}else if(len<1024){res=bigMulTo(this,num,out);}else{res=jumboMulTo(this,num,out);}return res;};// Cooley-Tukey algorithm for FFT |
|
|
// slightly revisited to rely on looping instead of recursion |
|
|
function FFTM(x,y){this.x=x;this.y=y;}FFTM.prototype.makeRBT=function makeRBT(N){var t=new Array(N);var l=BN.prototype._countBits(N)-1;for(var i=0;i<N;i++){t[i]=this.revBin(i,l,N);}return t;};// Returns binary-reversed representation of `x` |
|
|
FFTM.prototype.revBin=function revBin(x,l,N){if(x===0||x===N-1)return x;var rb=0;for(var i=0;i<l;i++){rb|=(x&1)<<l-i-1;x>>=1;}return rb;};// Performs "tweedling" phase, therefore 'emulating' |
|
|
// behaviour of the recursive algorithm |
|
|
FFTM.prototype.permute=function permute(rbt,rws,iws,rtws,itws,N){for(var i=0;i<N;i++){rtws[i]=rws[rbt[i]];itws[i]=iws[rbt[i]];}};FFTM.prototype.transform=function transform(rws,iws,rtws,itws,N,rbt){this.permute(rbt,rws,iws,rtws,itws,N);for(var s=1;s<N;s<<=1){var l=s<<1;var rtwdf=Math.cos(2*Math.PI/l);var itwdf=Math.sin(2*Math.PI/l);for(var p=0;p<N;p+=l){var rtwdf_=rtwdf;var itwdf_=itwdf;for(var j=0;j<s;j++){var re=rtws[p+j];var ie=itws[p+j];var ro=rtws[p+j+s];var io=itws[p+j+s];var rx=rtwdf_*ro-itwdf_*io;io=rtwdf_*io+itwdf_*ro;ro=rx;rtws[p+j]=re+ro;itws[p+j]=ie+io;rtws[p+j+s]=re-ro;itws[p+j+s]=ie-io;/* jshint maxdepth : false */if(j!==l){rx=rtwdf*rtwdf_-itwdf*itwdf_;itwdf_=rtwdf*itwdf_+itwdf*rtwdf_;rtwdf_=rx;}}}}};FFTM.prototype.guessLen13b=function guessLen13b(n,m){var N=Math.max(m,n)|1;var odd=N&1;var i=0;for(N=N/2|0;N;N=N>>>1){i++;}return 1<<i+1+odd;};FFTM.prototype.conjugate=function conjugate(rws,iws,N){if(N<=1)return;for(var i=0;i<N/2;i++){var t=rws[i];rws[i]=rws[N-i-1];rws[N-i-1]=t;t=iws[i];iws[i]=-iws[N-i-1];iws[N-i-1]=-t;}};FFTM.prototype.normalize13b=function normalize13b(ws,N){var carry=0;for(var i=0;i<N/2;i++){var w=Math.round(ws[2*i+1]/N)*0x2000+Math.round(ws[2*i]/N)+carry;ws[i]=w&0x3ffffff;if(w<0x4000000){carry=0;}else{carry=w/0x4000000|0;}}return ws;};FFTM.prototype.convert13b=function convert13b(ws,len,rws,N){var carry=0;for(var i=0;i<len;i++){carry=carry+(ws[i]|0);rws[2*i]=carry&0x1fff;carry=carry>>>13;rws[2*i+1]=carry&0x1fff;carry=carry>>>13;}// Pad with zeroes |
|
|
for(i=2*len;i<N;++i){rws[i]=0;}assert(carry===0);assert((carry&~0x1fff)===0);};FFTM.prototype.stub=function stub(N){var ph=new Array(N);for(var i=0;i<N;i++){ph[i]=0;}return ph;};FFTM.prototype.mulp=function mulp(x,y,out){var N=2*this.guessLen13b(x.length,y.length);var rbt=this.makeRBT(N);var _=this.stub(N);var rws=new Array(N);var rwst=new Array(N);var iwst=new Array(N);var nrws=new Array(N);var nrwst=new Array(N);var niwst=new Array(N);var rmws=out.words;rmws.length=N;this.convert13b(x.words,x.length,rws,N);this.convert13b(y.words,y.length,nrws,N);this.transform(rws,_,rwst,iwst,N,rbt);this.transform(nrws,_,nrwst,niwst,N,rbt);for(var i=0;i<N;i++){var rx=rwst[i]*nrwst[i]-iwst[i]*niwst[i];iwst[i]=rwst[i]*niwst[i]+iwst[i]*nrwst[i];rwst[i]=rx;}this.conjugate(rwst,iwst,N);this.transform(rwst,iwst,rmws,_,N,rbt);this.conjugate(rmws,_,N);this.normalize13b(rmws,N);out.negative=x.negative^y.negative;out.length=x.length+y.length;return out._strip();};// Multiply `this` by `num` |
|
|
BN.prototype.mul=function mul(num){var out=new BN(null);out.words=new Array(this.length+num.length);return this.mulTo(num,out);};// Multiply employing FFT |
|
|
BN.prototype.mulf=function mulf(num){var out=new BN(null);out.words=new Array(this.length+num.length);return jumboMulTo(this,num,out);};// In-place Multiplication |
|
|
BN.prototype.imul=function imul(num){return this.clone().mulTo(num,this);};BN.prototype.imuln=function imuln(num){var isNegNum=num<0;if(isNegNum)num=-num;assert(typeof num==='number');assert(num<0x4000000);// Carry |
|
|
var carry=0;for(var i=0;i<this.length;i++){var w=(this.words[i]|0)*num;var lo=(w&0x3ffffff)+(carry&0x3ffffff);carry>>=26;carry+=w/0x4000000|0;// NOTE: lo is 27bit maximum |
|
|
carry+=lo>>>26;this.words[i]=lo&0x3ffffff;}if(carry!==0){this.words[i]=carry;this.length++;}return isNegNum?this.ineg():this;};BN.prototype.muln=function muln(num){return this.clone().imuln(num);};// `this` * `this` |
|
|
BN.prototype.sqr=function sqr(){return this.mul(this);};// `this` * `this` in-place |
|
|
BN.prototype.isqr=function isqr(){return this.imul(this.clone());};// Math.pow(`this`, `num`) |
|
|
BN.prototype.pow=function pow(num){var w=toBitArray(num);if(w.length===0)return new BN(1);// Skip leading zeroes |
|
|
var res=this;for(var i=0;i<w.length;i++,res=res.sqr()){if(w[i]!==0)break;}if(++i<w.length){for(var q=res.sqr();i<w.length;i++,q=q.sqr()){if(w[i]===0)continue;res=res.mul(q);}}return res;};// Shift-left in-place |
|
|
BN.prototype.iushln=function iushln(bits){assert(typeof bits==='number'&&bits>=0);var r=bits%26;var s=(bits-r)/26;var carryMask=0x3ffffff>>>26-r<<26-r;var i;if(r!==0){var carry=0;for(i=0;i<this.length;i++){var newCarry=this.words[i]&carryMask;var c=(this.words[i]|0)-newCarry<<r;this.words[i]=c|carry;carry=newCarry>>>26-r;}if(carry){this.words[i]=carry;this.length++;}}if(s!==0){for(i=this.length-1;i>=0;i--){this.words[i+s]=this.words[i];}for(i=0;i<s;i++){this.words[i]=0;}this.length+=s;}return this._strip();};BN.prototype.ishln=function ishln(bits){// TODO(indutny): implement me |
|
|
assert(this.negative===0);return this.iushln(bits);};// Shift-right in-place |
|
|
// NOTE: `hint` is a lowest bit before trailing zeroes |
|
|
// NOTE: if `extended` is present - it will be filled with destroyed bits |
|
|
BN.prototype.iushrn=function iushrn(bits,hint,extended){assert(typeof bits==='number'&&bits>=0);var h;if(hint){h=(hint-hint%26)/26;}else{h=0;}var r=bits%26;var s=Math.min((bits-r)/26,this.length);var mask=0x3ffffff^0x3ffffff>>>r<<r;var maskedWords=extended;h-=s;h=Math.max(0,h);// Extended mode, copy masked part |
|
|
if(maskedWords){for(var i=0;i<s;i++){maskedWords.words[i]=this.words[i];}maskedWords.length=s;}if(s===0){// No-op, we should not move anything at all |
|
|
}else if(this.length>s){this.length-=s;for(i=0;i<this.length;i++){this.words[i]=this.words[i+s];}}else{this.words[0]=0;this.length=1;}var carry=0;for(i=this.length-1;i>=0&&(carry!==0||i>=h);i--){var word=this.words[i]|0;this.words[i]=carry<<26-r|word>>>r;carry=word&mask;}// Push carried bits as a mask |
|
|
if(maskedWords&&carry!==0){maskedWords.words[maskedWords.length++]=carry;}if(this.length===0){this.words[0]=0;this.length=1;}return this._strip();};BN.prototype.ishrn=function ishrn(bits,hint,extended){// TODO(indutny): implement me |
|
|
assert(this.negative===0);return this.iushrn(bits,hint,extended);};// Shift-left |
|
|
BN.prototype.shln=function shln(bits){return this.clone().ishln(bits);};BN.prototype.ushln=function ushln(bits){return this.clone().iushln(bits);};// Shift-right |
|
|
BN.prototype.shrn=function shrn(bits){return this.clone().ishrn(bits);};BN.prototype.ushrn=function ushrn(bits){return this.clone().iushrn(bits);};// Test if n bit is set |
|
|
BN.prototype.testn=function testn(bit){assert(typeof bit==='number'&&bit>=0);var r=bit%26;var s=(bit-r)/26;var q=1<<r;// Fast case: bit is much higher than all existing words |
|
|
if(this.length<=s)return false;// Check bit and return |
|
|
var w=this.words[s];return!!(w&q);};// Return only lowers bits of number (in-place) |
|
|
BN.prototype.imaskn=function imaskn(bits){assert(typeof bits==='number'&&bits>=0);var r=bits%26;var s=(bits-r)/26;assert(this.negative===0,'imaskn works only with positive numbers');if(this.length<=s){return this;}if(r!==0){s++;}this.length=Math.min(s,this.length);if(r!==0){var mask=0x3ffffff^0x3ffffff>>>r<<r;this.words[this.length-1]&=mask;}return this._strip();};// Return only lowers bits of number |
|
|
BN.prototype.maskn=function maskn(bits){return this.clone().imaskn(bits);};// Add plain number `num` to `this` |
|
|
BN.prototype.iaddn=function iaddn(num){assert(typeof num==='number');assert(num<0x4000000);if(num<0)return this.isubn(-num);// Possible sign change |
|
|
if(this.negative!==0){if(this.length===1&&(this.words[0]|0)<=num){this.words[0]=num-(this.words[0]|0);this.negative=0;return this;}this.negative=0;this.isubn(num);this.negative=1;return this;}// Add without checks |
|
|
return this._iaddn(num);};BN.prototype._iaddn=function _iaddn(num){this.words[0]+=num;// Carry |
|
|
for(var i=0;i<this.length&&this.words[i]>=0x4000000;i++){this.words[i]-=0x4000000;if(i===this.length-1){this.words[i+1]=1;}else{this.words[i+1]++;}}this.length=Math.max(this.length,i+1);return this;};// Subtract plain number `num` from `this` |
|
|
BN.prototype.isubn=function isubn(num){assert(typeof num==='number');assert(num<0x4000000);if(num<0)return this.iaddn(-num);if(this.negative!==0){this.negative=0;this.iaddn(num);this.negative=1;return this;}this.words[0]-=num;if(this.length===1&&this.words[0]<0){this.words[0]=-this.words[0];this.negative=1;}else{// Carry |
|
|
for(var i=0;i<this.length&&this.words[i]<0;i++){this.words[i]+=0x4000000;this.words[i+1]-=1;}}return this._strip();};BN.prototype.addn=function addn(num){return this.clone().iaddn(num);};BN.prototype.subn=function subn(num){return this.clone().isubn(num);};BN.prototype.iabs=function iabs(){this.negative=0;return this;};BN.prototype.abs=function abs(){return this.clone().iabs();};BN.prototype._ishlnsubmul=function _ishlnsubmul(num,mul,shift){var len=num.length+shift;var i;this._expand(len);var w;var carry=0;for(i=0;i<num.length;i++){w=(this.words[i+shift]|0)+carry;var right=(num.words[i]|0)*mul;w-=right&0x3ffffff;carry=(w>>26)-(right/0x4000000|0);this.words[i+shift]=w&0x3ffffff;}for(;i<this.length-shift;i++){w=(this.words[i+shift]|0)+carry;carry=w>>26;this.words[i+shift]=w&0x3ffffff;}if(carry===0)return this._strip();// Subtraction overflow |
|
|
assert(carry===-1);carry=0;for(i=0;i<this.length;i++){w=-(this.words[i]|0)+carry;carry=w>>26;this.words[i]=w&0x3ffffff;}this.negative=1;return this._strip();};BN.prototype._wordDiv=function _wordDiv(num,mode){var shift=this.length-num.length;var a=this.clone();var b=num;// Normalize |
|
|
var bhi=b.words[b.length-1]|0;var bhiBits=this._countBits(bhi);shift=26-bhiBits;if(shift!==0){b=b.ushln(shift);a.iushln(shift);bhi=b.words[b.length-1]|0;}// Initialize quotient |
|
|
var m=a.length-b.length;var q;if(mode!=='mod'){q=new BN(null);q.length=m+1;q.words=new Array(q.length);for(var i=0;i<q.length;i++){q.words[i]=0;}}var diff=a.clone()._ishlnsubmul(b,1,m);if(diff.negative===0){a=diff;if(q){q.words[m]=1;}}for(var j=m-1;j>=0;j--){var qj=(a.words[b.length+j]|0)*0x4000000+(a.words[b.length+j-1]|0);// NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max |
|
|
// (0x7ffffff) |
|
|
qj=Math.min(qj/bhi|0,0x3ffffff);a._ishlnsubmul(b,qj,j);while(a.negative!==0){qj--;a.negative=0;a._ishlnsubmul(b,1,j);if(!a.isZero()){a.negative^=1;}}if(q){q.words[j]=qj;}}if(q){q._strip();}a._strip();// Denormalize |
|
|
if(mode!=='div'&&shift!==0){a.iushrn(shift);}return{div:q||null,mod:a};};// NOTE: 1) `mode` can be set to `mod` to request mod only, |
|
|
// to `div` to request div only, or be absent to |
|
|
// request both div & mod |
|
|
// 2) `positive` is true if unsigned mod is requested |
|
|
BN.prototype.divmod=function divmod(num,mode,positive){assert(!num.isZero());if(this.isZero()){return{div:new BN(0),mod:new BN(0)};}var div,mod,res;if(this.negative!==0&&num.negative===0){res=this.neg().divmod(num,mode);if(mode!=='mod'){div=res.div.neg();}if(mode!=='div'){mod=res.mod.neg();if(positive&&mod.negative!==0){mod.iadd(num);}}return{div:div,mod:mod};}if(this.negative===0&&num.negative!==0){res=this.divmod(num.neg(),mode);if(mode!=='mod'){div=res.div.neg();}return{div:div,mod:res.mod};}if((this.negative&num.negative)!==0){res=this.neg().divmod(num.neg(),mode);if(mode!=='div'){mod=res.mod.neg();if(positive&&mod.negative!==0){mod.isub(num);}}return{div:res.div,mod:mod};}// Both numbers are positive at this point |
|
|
// Strip both numbers to approximate shift value |
|
|
if(num.length>this.length||this.cmp(num)<0){return{div:new BN(0),mod:this};}// Very short reduction |
|
|
if(num.length===1){if(mode==='div'){return{div:this.divn(num.words[0]),mod:null};}if(mode==='mod'){return{div:null,mod:new BN(this.modrn(num.words[0]))};}return{div:this.divn(num.words[0]),mod:new BN(this.modrn(num.words[0]))};}return this._wordDiv(num,mode);};// Find `this` / `num` |
|
|
BN.prototype.div=function div(num){return this.divmod(num,'div',false).div;};// Find `this` % `num` |
|
|
BN.prototype.mod=function mod(num){return this.divmod(num,'mod',false).mod;};BN.prototype.umod=function umod(num){return this.divmod(num,'mod',true).mod;};// Find Round(`this` / `num`) |
|
|
BN.prototype.divRound=function divRound(num){var dm=this.divmod(num);// Fast case - exact division |
|
|
if(dm.mod.isZero())return dm.div;var mod=dm.div.negative!==0?dm.mod.isub(num):dm.mod;var half=num.ushrn(1);var r2=num.andln(1);var cmp=mod.cmp(half);// Round down |
|
|
if(cmp<0||r2===1&&cmp===0)return dm.div;// Round up |
|
|
return dm.div.negative!==0?dm.div.isubn(1):dm.div.iaddn(1);};BN.prototype.modrn=function modrn(num){var isNegNum=num<0;if(isNegNum)num=-num;assert(num<=0x3ffffff);var p=(1<<26)%num;var acc=0;for(var i=this.length-1;i>=0;i--){acc=(p*acc+(this.words[i]|0))%num;}return isNegNum?-acc:acc;};// WARNING: DEPRECATED |
|
|
BN.prototype.modn=function modn(num){return this.modrn(num);};// In-place division by number |
|
|
BN.prototype.idivn=function idivn(num){var isNegNum=num<0;if(isNegNum)num=-num;assert(num<=0x3ffffff);var carry=0;for(var i=this.length-1;i>=0;i--){var w=(this.words[i]|0)+carry*0x4000000;this.words[i]=w/num|0;carry=w%num;}this._strip();return isNegNum?this.ineg():this;};BN.prototype.divn=function divn(num){return this.clone().idivn(num);};BN.prototype.egcd=function egcd(p){assert(p.negative===0);assert(!p.isZero());var x=this;var y=p.clone();if(x.negative!==0){x=x.umod(p);}else{x=x.clone();}// A * x + B * y = x |
|
|
var A=new BN(1);var B=new BN(0);// C * x + D * y = y |
|
|
var C=new BN(0);var D=new BN(1);var g=0;while(x.isEven()&&y.isEven()){x.iushrn(1);y.iushrn(1);++g;}var yp=y.clone();var xp=x.clone();while(!x.isZero()){for(var i=0,im=1;(x.words[0]&im)===0&&i<26;++i,im<<=1){;}if(i>0){x.iushrn(i);while(i-->0){if(A.isOdd()||B.isOdd()){A.iadd(yp);B.isub(xp);}A.iushrn(1);B.iushrn(1);}}for(var j=0,jm=1;(y.words[0]&jm)===0&&j<26;++j,jm<<=1){;}if(j>0){y.iushrn(j);while(j-->0){if(C.isOdd()||D.isOdd()){C.iadd(yp);D.isub(xp);}C.iushrn(1);D.iushrn(1);}}if(x.cmp(y)>=0){x.isub(y);A.isub(C);B.isub(D);}else{y.isub(x);C.isub(A);D.isub(B);}}return{a:C,b:D,gcd:y.iushln(g)};};// This is reduced incarnation of the binary EEA |
|
|
// above, designated to invert members of the |
|
|
// _prime_ fields F(p) at a maximal speed |
|
|
BN.prototype._invmp=function _invmp(p){assert(p.negative===0);assert(!p.isZero());var a=this;var b=p.clone();if(a.negative!==0){a=a.umod(p);}else{a=a.clone();}var x1=new BN(1);var x2=new BN(0);var delta=b.clone();while(a.cmpn(1)>0&&b.cmpn(1)>0){for(var i=0,im=1;(a.words[0]&im)===0&&i<26;++i,im<<=1){;}if(i>0){a.iushrn(i);while(i-->0){if(x1.isOdd()){x1.iadd(delta);}x1.iushrn(1);}}for(var j=0,jm=1;(b.words[0]&jm)===0&&j<26;++j,jm<<=1){;}if(j>0){b.iushrn(j);while(j-->0){if(x2.isOdd()){x2.iadd(delta);}x2.iushrn(1);}}if(a.cmp(b)>=0){a.isub(b);x1.isub(x2);}else{b.isub(a);x2.isub(x1);}}var res;if(a.cmpn(1)===0){res=x1;}else{res=x2;}if(res.cmpn(0)<0){res.iadd(p);}return res;};BN.prototype.gcd=function gcd(num){if(this.isZero())return num.abs();if(num.isZero())return this.abs();var a=this.clone();var b=num.clone();a.negative=0;b.negative=0;// Remove common factor of two |
|
|
for(var shift=0;a.isEven()&&b.isEven();shift++){a.iushrn(1);b.iushrn(1);}do{while(a.isEven()){a.iushrn(1);}while(b.isEven()){b.iushrn(1);}var r=a.cmp(b);if(r<0){// Swap `a` and `b` to make `a` always bigger than `b` |
|
|
var t=a;a=b;b=t;}else if(r===0||b.cmpn(1)===0){break;}a.isub(b);}while(true);return b.iushln(shift);};// Invert number in the field F(num) |
|
|
BN.prototype.invm=function invm(num){return this.egcd(num).a.umod(num);};BN.prototype.isEven=function isEven(){return(this.words[0]&1)===0;};BN.prototype.isOdd=function isOdd(){return(this.words[0]&1)===1;};// And first word and num |
|
|
BN.prototype.andln=function andln(num){return this.words[0]#};// Increment at the bit position in-line |
|
|
BN.prototype.bincn=function bincn(bit){assert(typeof bit==='number');var r=bit%26;var s=(bit-r)/26;var q=1<<r;// Fast case: bit is much higher than all existing words |
|
|
if(this.length<=s){this._expand(s+1);this.words[s]|=q;return this;}// Add bit and propagate, if needed |
|
|
var carry=q;for(var i=s;carry!==0&&i<this.length;i++){var w=this.words[i]|0;w+=carry;carry=w>>>26;w&=0x3ffffff;this.words[i]=w;}if(carry!==0){this.words[i]=carry;this.length++;}return this;};BN.prototype.isZero=function isZero(){return this.length===1&&this.words[0]===0;};BN.prototype.cmpn=function cmpn(num){var negative=num<0;if(this.negative!==0&&!negative)return-1;if(this.negative===0&&negative)return 1;this._strip();var res;if(this.length>1){res=1;}else{if(negative){num=-num;}assert(num<=0x3ffffff,'Number is too big');var w=this.words[0]|0;res=w===num?0:w<num?-1:1;}if(this.negative!==0)return-res|0;return res;};// Compare two numbers and return: |
|
|
// 1 - if `this` > `num` |
|
|
// 0 - if `this` == `num` |
|
|
// -1 - if `this` < `num` |
|
|
BN.prototype.cmp=function cmp(num){if(this.negative!==0&&num.negative===0)return-1;if(this.negative===0&&num.negative!==0)return 1;var res=this.ucmp(num);if(this.negative!==0)return-res|0;return res;};// Unsigned comparison |
|
|
BN.prototype.ucmp=function ucmp(num){// At this point both numbers have the same sign |
|
|
if(this.length>num.length)return 1;if(this.length<num.length)return-1;var res=0;for(var i=this.length-1;i>=0;i--){var a=this.words[i]|0;var b=num.words[i]|0;if(a===b)continue;if(a<b){res=-1;}else if(a>b){res=1;}break;}return res;};BN.prototype.gtn=function gtn(num){return this.cmpn(num)===1;};BN.prototype.gt=function gt(num){return this.cmp(num)===1;};BN.prototype.gten=function gten(num){return this.cmpn(num)>=0;};BN.prototype.gte=function gte(num){return this.cmp(num)>=0;};BN.prototype.ltn=function ltn(num){return this.cmpn(num)===-1;};BN.prototype.lt=function lt(num){return this.cmp(num)===-1;};BN.prototype.lten=function lten(num){return this.cmpn(num)<=0;};BN.prototype.lte=function lte(num){return this.cmp(num)<=0;};BN.prototype.eqn=function eqn(num){return this.cmpn(num)===0;};BN.prototype.eq=function eq(num){return this.cmp(num)===0;};// |
|
|
// A reduce context, could be using montgomery or something better, depending |
|
|
// on the `m` itself. |
|
|
// |
|
|
BN.red=function red(num){return new Red(num);};BN.prototype.toRed=function toRed(ctx){assert(!this.red,'Already a number in reduction context');assert(this.negative===0,'red works only with positives');return ctx.convertTo(this)._forceRed(ctx);};BN.prototype.fromRed=function fromRed(){assert(this.red,'fromRed works only with numbers in reduction context');return this.red.convertFrom(this);};BN.prototype._forceRed=function _forceRed(ctx){this.red=ctx;return this;};BN.prototype.forceRed=function forceRed(ctx){assert(!this.red,'Already a number in reduction context');return this._forceRed(ctx);};BN.prototype.redAdd=function redAdd(num){assert(this.red,'redAdd works only with red numbers');return this.red.add(this,num);};BN.prototype.redIAdd=function redIAdd(num){assert(this.red,'redIAdd works only with red numbers');return this.red.iadd(this,num);};BN.prototype.redSub=function redSub(num){assert(this.red,'redSub works only with red numbers');return this.red.sub(this,num);};BN.prototype.redISub=function redISub(num){assert(this.red,'redISub works only with red numbers');return this.red.isub(this,num);};BN.prototype.redShl=function redShl(num){assert(this.red,'redShl works only with red numbers');return this.red.shl(this,num);};BN.prototype.redMul=function redMul(num){assert(this.red,'redMul works only with red numbers');this.red._verify2(this,num);return this.red.mul(this,num);};BN.prototype.redIMul=function redIMul(num){assert(this.red,'redMul works only with red numbers');this.red._verify2(this,num);return this.red.imul(this,num);};BN.prototype.redSqr=function redSqr(){assert(this.red,'redSqr works only with red numbers');this.red._verify1(this);return this.red.sqr(this);};BN.prototype.redISqr=function redISqr(){assert(this.red,'redISqr works only with red numbers');this.red._verify1(this);return this.red.isqr(this);};// Square root over p |
|
|
BN.prototype.redSqrt=function redSqrt(){assert(this.red,'redSqrt works only with red numbers');this.red._verify1(this);return this.red.sqrt(this);};BN.prototype.redInvm=function redInvm(){assert(this.red,'redInvm works only with red numbers');this.red._verify1(this);return this.red.invm(this);};// Return negative clone of `this` % `red modulo` |
|
|
BN.prototype.redNeg=function redNeg(){assert(this.red,'redNeg works only with red numbers');this.red._verify1(this);return this.red.neg(this);};BN.prototype.redPow=function redPow(num){assert(this.red&&!num.red,'redPow(normalNum)');this.red._verify1(this);return this.red.pow(this,num);};// Prime numbers with efficient reduction |
|
|
var primes={k256:null,p224:null,p192:null,p25519:null};// Pseudo-Mersenne prime |
|
|
function MPrime(name,p){// P = 2 ^ N - K |
|
|
this.name=name;this.p=new BN(p,16);this.n=this.p.bitLength();this.k=new BN(1).iushln(this.n).isub(this.p);this.tmp=this._tmp();}MPrime.prototype._tmp=function _tmp(){var tmp=new BN(null);tmp.words=new Array(Math.ceil(this.n/13));return tmp;};MPrime.prototype.ireduce=function ireduce(num){// Assumes that `num` is less than `P^2` |
|
|
// num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) |
|
|
var r=num;var rlen;do{this.split(r,this.tmp);r=this.imulK(r);r=r.iadd(this.tmp);rlen=r.bitLength();}while(rlen>this.n);var cmp=rlen<this.n?-1:r.ucmp(this.p);if(cmp===0){r.words[0]=0;r.length=1;}else if(cmp>0){r.isub(this.p);}else{if(r.strip!==undefined){// r is a BN v4 instance |
|
|
r.strip();}else{// r is a BN v5 instance |
|
|
r._strip();}}return r;};MPrime.prototype.split=function split(input,out){input.iushrn(this.n,0,out);};MPrime.prototype.imulK=function imulK(num){return num.imul(this.k);};function K256(){MPrime.call(this,'k256','ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');}inherits(K256,MPrime);K256.prototype.split=function split(input,output){// 256 = 9 * 26 + 22 |
|
|
var mask=0x3fffff;var outLen=Math.min(input.length,9);for(var i=0;i<outLen;i++){output.words[i]=input.words[i];}output.length=outLen;if(input.length<=9){input.words[0]=0;input.length=1;return;}// Shift by 9 limbs |
|
|
var prev=input.words[9];output.words[output.length++]=prev&mask;for(i=10;i<input.length;i++){var next=input.words[i]|0;input.words[i-10]=(next&mask)<<4|prev>>>22;prev=next;}prev>>>=22;input.words[i-10]=prev;if(prev===0&&input.length>10){input.length-=10;}else{input.length-=9;}};K256.prototype.imulK=function imulK(num){// K = 0x1000003d1 = [ 0x40, 0x3d1 ] |
|
|
num.words[num.length]=0;num.words[num.length+1]=0;num.length+=2;// bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 |
|
|
var lo=0;for(var i=0;i<num.length;i++){var w=num.words[i]|0;lo+=w*0x3d1;num.words[i]=lo&0x3ffffff;lo=w*0x40+(lo/0x4000000|0);}// Fast length reduction |
|
|
if(num.words[num.length-1]===0){num.length--;if(num.words[num.length-1]===0){num.length--;}}return num;};function P224(){MPrime.call(this,'p224','ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');}inherits(P224,MPrime);function P192(){MPrime.call(this,'p192','ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');}inherits(P192,MPrime);function P25519(){// 2 ^ 255 - 19 |
|
|
MPrime.call(this,'25519','7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');}inherits(P25519,MPrime);P25519.prototype.imulK=function imulK(num){// K = 0x13 |
|
|
var carry=0;for(var i=0;i<num.length;i++){var hi=(num.words[i]|0)*0x13+carry;var lo=hi&0x3ffffff;hi>>>=26;num.words[i]=lo;carry=hi;}if(carry!==0){num.words[num.length++]=carry;}return num;};// Exported mostly for testing purposes, use plain name instead |
|
|
BN._prime=function prime(name){// Cached version of prime |
|
|
if(primes[name])return primes[name];var prime;if(name==='k256'){prime=new K256();}else if(name==='p224'){prime=new P224();}else if(name==='p192'){prime=new P192();}else if(name==='p25519'){prime=new P25519();}else{throw new Error('Unknown prime '+name);}primes[name]=prime;return prime;};// |
|
|
// Base reduction engine |
|
|
// |
|
|
function Red(m){if(typeof m==='string'){var prime=BN._prime(m);this.m=prime.p;this.prime=prime;}else{assert(m.gtn(1),'modulus must be greater than 1');this.m=m;this.prime=null;}}Red.prototype._verify1=function _verify1(a){assert(a.negative===0,'red works only with positives');assert(a.red,'red works only with red numbers');};Red.prototype._verify2=function _verify2(a,b){assert((a.negative|b.negative)===0,'red works only with positives');assert(a.red&&a.red===b.red,'red works only with red numbers');};Red.prototype.imod=function imod(a){if(this.prime)return this.prime.ireduce(a)._forceRed(this);move(a,a.umod(this.m)._forceRed(this));return a;};Red.prototype.neg=function neg(a){if(a.isZero()){return a.clone();}return this.m.sub(a)._forceRed(this);};Red.prototype.add=function add(a,b){this._verify2(a,b);var res=a.add(b);if(res.cmp(this.m)>=0){res.isub(this.m);}return res._forceRed(this);};Red.prototype.iadd=function iadd(a,b){this._verify2(a,b);var res=a.iadd(b);if(res.cmp(this.m)>=0){res.isub(this.m);}return res;};Red.prototype.sub=function sub(a,b){this._verify2(a,b);var res=a.sub(b);if(res.cmpn(0)<0){res.iadd(this.m);}return res._forceRed(this);};Red.prototype.isub=function isub(a,b){this._verify2(a,b);var res=a.isub(b);if(res.cmpn(0)<0){res.iadd(this.m);}return res;};Red.prototype.shl=function shl(a,num){this._verify1(a);return this.imod(a.ushln(num));};Red.prototype.imul=function imul(a,b){this._verify2(a,b);return this.imod(a.imul(b));};Red.prototype.mul=function mul(a,b){this._verify2(a,b);return this.imod(a.mul(b));};Red.prototype.isqr=function isqr(a){return this.imul(a,a.clone());};Red.prototype.sqr=function sqr(a){return this.mul(a,a);};Red.prototype.sqrt=function sqrt(a){if(a.isZero())return a.clone();var mod3=this.m.andln(3);assert(mod3%2===1);// Fast case |
|
|
if(mod3===3){var pow=this.m.add(new BN(1)).iushrn(2);return this.pow(a,pow);}// Tonelli-Shanks algorithm (Totally unoptimized and slow) |
|
|
// |
|
|
// Find Q and S, that Q * 2 ^ S = (P - 1) |
|
|
var q=this.m.subn(1);var s=0;while(!q.isZero()&&q.andln(1)===0){s++;q.iushrn(1);}assert(!q.isZero());var one=new BN(1).toRed(this);var nOne=one.redNeg();// Find quadratic non-residue |
|
|
// NOTE: Max is such because of generalized Riemann hypothesis. |
|
|
var lpow=this.m.subn(1).iushrn(1);var z=this.m.bitLength();z=new BN(2*z*z).toRed(this);while(this.pow(z,lpow).cmp(nOne)!==0){z.redIAdd(nOne);}var c=this.pow(z,q);var r=this.pow(a,q.addn(1).iushrn(1));var t=this.pow(a,q);var m=s;while(t.cmp(one)!==0){var tmp=t;for(var i=0;tmp.cmp(one)!==0;i++){tmp=tmp.redSqr();}assert(i<m);var b=this.pow(c,new BN(1).iushln(m-i-1));r=r.redMul(b);c=b.redSqr();t=t.redMul(c);m=i;}return r;};Red.prototype.invm=function invm(a){var inv=a._invmp(this.m);if(inv.negative!==0){inv.negative=0;return this.imod(inv).redNeg();}else{return this.imod(inv);}};Red.prototype.pow=function pow(a,num){if(num.isZero())return new BN(1).toRed(this);if(num.cmpn(1)===0)return a.clone();var windowSize=4;var wnd=new Array(1<<windowSize);wnd[0]=new BN(1).toRed(this);wnd[1]=a;for(var i=2;i<wnd.length;i++){wnd[i]=this.mul(wnd[i-1],a);}var res=wnd[0];var current=0;var currentLen=0;var start=num.bitLength()%26;if(start===0){start=26;}for(i=num.length-1;i>=0;i--){var word=num.words[i];for(var j=start-1;j>=0;j--){var bit=word>>j&1;if(res!==wnd[0]){res=this.sqr(res);}if(bit===0&¤t===0){currentLen=0;continue;}current<<=1;current|=bit;currentLen++;if(currentLen!==windowSize&&(i!==0||j!==0))continue;res=this.mul(res,wnd[current]);currentLen=0;current=0;}start=26;}return res;};Red.prototype.convertTo=function convertTo(num){var r=num.umod(this.m);return r===num?r.clone():r;};Red.prototype.convertFrom=function convertFrom(num){var res=num.clone();res.red=null;return res;};// |
|
|
// Montgomery method engine |
|
|
// |
|
|
BN.mont=function mont(num){return new Mont(num);};function Mont(m){Red.call(this,m);this.shift=this.m.bitLength();if(this.shift%26!==0){this.shift+=26-this.shift%26;}this.r=new BN(1).iushln(this.shift);this.r2=this.imod(this.r.sqr());this.rinv=this.r._invmp(this.m);this.minv=this.rinv.mul(this.r).isubn(1).div(this.m);this.minv=this.minv.umod(this.r);this.minv=this.r.sub(this.minv);}inherits(Mont,Red);Mont.prototype.convertTo=function convertTo(num){return this.imod(num.ushln(this.shift));};Mont.prototype.convertFrom=function convertFrom(num){var r=this.imod(num.mul(this.rinv));r.red=null;return r;};Mont.prototype.imul=function imul(a,b){if(a.isZero()||b.isZero()){a.words[0]=0;a.length=1;return a;}var t=a.imul(b);var c=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);var u=t.isub(c).iushrn(this.shift);var res=u;if(u.cmp(this.m)>=0){res=u.isub(this.m);}else if(u.cmpn(0)<0){res=u.iadd(this.m);}return res._forceRed(this);};Mont.prototype.mul=function mul(a,b){if(a.isZero()||b.isZero())return new BN(0)._forceRed(this);var t=a.mul(b);var c=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);var u=t.isub(c).iushrn(this.shift);var res=u;if(u.cmp(this.m)>=0){res=u.isub(this.m);}else if(u.cmpn(0)<0){res=u.iadd(this.m);}return res._forceRed(this);};Mont.prototype.invm=function invm(a){// (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R |
|
|
var res=this.imod(a._invmp(this.m).mul(this.r2));return res._forceRed(this);};})(typeof module==='undefined'||module,this);},{"buffer":183}],182:[function(require,module,exports){var r;module.exports=function rand(len){if(!r)r=new Rand(null);return r.generate(len);};function Rand(rand){this.rand=rand;}module.exports.Rand=Rand;Rand.prototype.generate=function generate(len){return this._rand(len);};// Emulate crypto API using randy |
|
|
Rand.prototype._rand=function _rand(n){if(this.rand.getBytes)return this.rand.getBytes(n);var res=new Uint8Array(n);for(var i=0;i<res.length;i++){res[i]=this.rand.getByte();}return res;};if((typeof self==="undefined"?"undefined":_typeof2(self))==='object'){if(self.crypto&&self.crypto.getRandomValues){// Modern browsers |
|
|
Rand.prototype._rand=function _rand(n){var arr=new Uint8Array(n);self.crypto.getRandomValues(arr);return arr;};}else if(self.msCrypto&&self.msCrypto.getRandomValues){// IE |
|
|
Rand.prototype._rand=function _rand(n){var arr=new Uint8Array(n);self.msCrypto.getRandomValues(arr);return arr;};// Safari's WebWorkers do not have `crypto` |
|
|
}else if((typeof window==="undefined"?"undefined":_typeof2(window))==='object'){// Old junk |
|
|
Rand.prototype._rand=function(){throw new Error('Not implemented yet');};}}else{// Node.js or Web worker with no crypto support |
|
|
try{var crypto=require('crypto');if(typeof crypto.randomBytes!=='function')throw new Error('Not supported');Rand.prototype._rand=function _rand(n){return crypto.randomBytes(n);};}catch(e){}}},{"crypto":183}],183:[function(require,module,exports){},{}],184:[function(require,module,exports){// based on the aes implimentation in triple sec |
|
|
// https://github.com/keybase/triplesec |
|
|
// which is in turn based on the one from crypto-js |
|
|
// https://code.google.com/p/crypto-js/ |
|
|
var Buffer=require('safe-buffer').Buffer;function asUInt32Array(buf){if(!Buffer.isBuffer(buf))buf=Buffer.from(buf);var len=buf.length/4|0;var out=new Array(len);for(var i=0;i<len;i++){out[i]=buf.readUInt32BE(i*4);}return out;}function scrubVec(v){for(var i=0;i<v.length;v++){v[i]=0;}}function cryptBlock(M,keySchedule,SUB_MIX,SBOX,nRounds){var SUB_MIX0=SUB_MIX[0];var SUB_MIX1=SUB_MIX[1];var SUB_MIX2=SUB_MIX[2];var SUB_MIX3=SUB_MIX[3];var s0=M[0]^keySchedule[0];var s1=M[1]^keySchedule[1];var s2=M[2]^keySchedule[2];var s3=M[3]^keySchedule[3];var t0,t1,t2,t3;var ksRow=4;for(var round=1;round<nRounds;round++){t0=SUB_MIX0[s0>>>24]^SUB_MIX1[s1>>>16&0xff]^SUB_MIX2[s2>>>8&0xff]^SUB_MIX3[s3&0xff]^keySchedule[ksRow++];t1=SUB_MIX0[s1>>>24]^SUB_MIX1[s2>>>16&0xff]^SUB_MIX2[s3>>>8&0xff]^SUB_MIX3[s0&0xff]^keySchedule[ksRow++];t2=SUB_MIX0[s2>>>24]^SUB_MIX1[s3>>>16&0xff]^SUB_MIX2[s0>>>8&0xff]^SUB_MIX3[s1&0xff]^keySchedule[ksRow++];t3=SUB_MIX0[s3>>>24]^SUB_MIX1[s0>>>16&0xff]^SUB_MIX2[s1>>>8&0xff]^SUB_MIX3[s2&0xff]^keySchedule[ksRow++];s0=t0;s1=t1;s2=t2;s3=t3;}t0=(SBOX[s0>>>24]<<24|SBOX[s1>>>16&0xff]<<16|SBOX[s2>>>8&0xff]<<8|SBOX[s3&0xff])^keySchedule[ksRow++];t1=(SBOX[s1>>>24]<<24|SBOX[s2>>>16&0xff]<<16|SBOX[s3>>>8&0xff]<<8|SBOX[s0&0xff])^keySchedule[ksRow++];t2=(SBOX[s2>>>24]<<24|SBOX[s3>>>16&0xff]<<16|SBOX[s0>>>8&0xff]<<8|SBOX[s1&0xff])^keySchedule[ksRow++];t3=(SBOX[s3>>>24]<<24|SBOX[s0>>>16&0xff]<<16|SBOX[s1>>>8&0xff]<<8|SBOX[s2&0xff])^keySchedule[ksRow++];t0=t0>>>0;t1=t1>>>0;t2=t2>>>0;t3=t3>>>0;return[t0,t1,t2,t3];}// AES constants |
|
|
var RCON=[0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x1b,0x36];var G=function(){// Compute double table |
|
|
var d=new Array(256);for(var j=0;j<256;j++){if(j<128){d[j]=j<<1;}else{d[j]=j<<1^0x11b;}}var SBOX=[];var INV_SBOX=[];var SUB_MIX=[[],[],[],[]];var INV_SUB_MIX=[[],[],[],[]];// Walk GF(2^8) |
|
|
var x=0;var xi=0;for(var i=0;i<256;++i){// Compute sbox |
|
|
var sx=xi^xi<<1^xi<<2^xi<<3^xi<<4;sx=sx>>>8^sx&0xff^0x63;SBOX[x]=sx;INV_SBOX[sx]=x;// Compute multiplication |
|
|
var x2=d[x];var x4=d[x2];var x8=d[x4];// Compute sub bytes, mix columns tables |
|
|
var t=d[sx]*0x101^sx*0x1010100;SUB_MIX[0][x]=t<<24|t>>>8;SUB_MIX[1][x]=t<<16|t>>>16;SUB_MIX[2][x]=t<<8|t>>>24;SUB_MIX[3][x]=t;// Compute inv sub bytes, inv mix columns tables |
|
|
t=x8*0x1010101^x4*0x10001^x2*0x101^x*0x1010100;INV_SUB_MIX[0][sx]=t<<24|t>>>8;INV_SUB_MIX[1][sx]=t<<16|t>>>16;INV_SUB_MIX[2][sx]=t<<8|t>>>24;INV_SUB_MIX[3][sx]=t;if(x===0){x=xi=1;}else{x=x2^d[d[d[x8^x2]]];xi^=d[d[xi]];}}return{SBOX:SBOX,INV_SBOX:INV_SBOX,SUB_MIX:SUB_MIX,INV_SUB_MIX:INV_SUB_MIX};}();function AES(key){this._key=asUInt32Array(key);this._reset();}AES.blockSize=4*4;AES.keySize=256/8;AES.prototype.blockSize=AES.blockSize;AES.prototype.keySize=AES.keySize;AES.prototype._reset=function(){var keyWords=this._key;var keySize=keyWords.length;var nRounds=keySize+6;var ksRows=(nRounds+1)*4;var keySchedule=[];for(var k=0;k<keySize;k++){keySchedule[k]=keyWords[k];}for(k=keySize;k<ksRows;k++){var t=keySchedule[k-1];if(k%keySize===0){t=t<<8|t>>>24;t=G.SBOX[t>>>24]<<24|G.SBOX[t>>>16&0xff]<<16|G.SBOX[t>>>8&0xff]<<8|G.SBOX[t&0xff];t^=RCON[k/keySize|0]<<24;}else if(keySize>6&&k%keySize===4){t=G.SBOX[t>>>24]<<24|G.SBOX[t>>>16&0xff]<<16|G.SBOX[t>>>8&0xff]<<8|G.SBOX[t&0xff];}keySchedule[k]=keySchedule[k-keySize]^t;}var invKeySchedule=[];for(var ik=0;ik<ksRows;ik++){var ksR=ksRows-ik;var tt=keySchedule[ksR-(ik%4?0:4)];if(ik<4||ksR<=4){invKeySchedule[ik]=tt;}else{invKeySchedule[ik]=G.INV_SUB_MIX[0][G.SBOX[tt>>>24]]^G.INV_SUB_MIX[1][G.SBOX[tt>>>16&0xff]]^G.INV_SUB_MIX[2][G.SBOX[tt>>>8&0xff]]^G.INV_SUB_MIX[3][G.SBOX[tt&0xff]];}}this._nRounds=nRounds;this._keySchedule=keySchedule;this._invKeySchedule=invKeySchedule;};AES.prototype.encryptBlockRaw=function(M){M=asUInt32Array(M);return cryptBlock(M,this._keySchedule,G.SUB_MIX,G.SBOX,this._nRounds);};AES.prototype.encryptBlock=function(M){var out=this.encryptBlockRaw(M);var buf=Buffer.allocUnsafe(16);buf.writeUInt32BE(out[0],0);buf.writeUInt32BE(out[1],4);buf.writeUInt32BE(out[2],8);buf.writeUInt32BE(out[3],12);return buf;};AES.prototype.decryptBlock=function(M){M=asUInt32Array(M);// swap |
|
|
var m1=M[1];M[1]=M[3];M[3]=m1;var out=cryptBlock(M,this._invKeySchedule,G.INV_SUB_MIX,G.INV_SBOX,this._nRounds);var buf=Buffer.allocUnsafe(16);buf.writeUInt32BE(out[0],0);buf.writeUInt32BE(out[3],4);buf.writeUInt32BE(out[2],8);buf.writeUInt32BE(out[1],12);return buf;};AES.prototype.scrub=function(){scrubVec(this._keySchedule);scrubVec(this._invKeySchedule);scrubVec(this._key);};module.exports.AES=AES;},{"safe-buffer":470}],185:[function(require,module,exports){var aes=require('./aes');var Buffer=require('safe-buffer').Buffer;var Transform=require('cipher-base');var inherits=require('inherits');var GHASH=require('./ghash');var xor=require('buffer-xor');var incr32=require('./incr32');function xorTest(a,b){var out=0;if(a.length!==b.length)out++;var len=Math.min(a.length,b.length);for(var i=0;i<len;++i){out+=a[i]^b[i];}return out;}function calcIv(self,iv,ck){if(iv.length===12){self._finID=Buffer.concat([iv,Buffer.from([0,0,0,1])]);return Buffer.concat([iv,Buffer.from([0,0,0,2])]);}var ghash=new GHASH(ck);var len=iv.length;var toPad=len%16;ghash.update(iv);if(toPad){toPad=16-toPad;ghash.update(Buffer.alloc(toPad,0));}ghash.update(Buffer.alloc(8,0));var ivBits=len*8;var tail=Buffer.alloc(8);tail.writeUIntBE(ivBits,0,8);ghash.update(tail);self._finID=ghash.state;var out=Buffer.from(self._finID);incr32(out);return out;}function StreamCipher(mode,key,iv,decrypt){Transform.call(this);var h=Buffer.alloc(4,0);this._cipher=new aes.AES(key);var ck=this._cipher.encryptBlock(h);this._ghash=new GHASH(ck);iv=calcIv(this,iv,ck);this._prev=Buffer.from(iv);this._cache=Buffer.allocUnsafe(0);this._secCache=Buffer.allocUnsafe(0);this._decrypt=decrypt;this._alen=0;this._len=0;this._mode=mode;this._authTag=null;this._called=false;}inherits(StreamCipher,Transform);StreamCipher.prototype._update=function(chunk){if(!this._called&&this._alen){var rump=16-this._alen%16;if(rump<16){rump=Buffer.alloc(rump,0);this._ghash.update(rump);}}this._called=true;var out=this._mode.encrypt(this,chunk);if(this._decrypt){this._ghash.update(chunk);}else{this._ghash.update(out);}this._len+=chunk.length;return out;};StreamCipher.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error('Unsupported state or unable to authenticate data');var tag=xor(this._ghash.final(this._alen*8,this._len*8),this._cipher.encryptBlock(this._finID));if(this._decrypt&&xorTest(tag,this._authTag))throw new Error('Unsupported state or unable to authenticate data');this._authTag=tag;this._cipher.scrub();};StreamCipher.prototype.getAuthTag=function getAuthTag(){if(this._decrypt||!Buffer.isBuffer(this._authTag))throw new Error('Attempting to get auth tag in unsupported state');return this._authTag;};StreamCipher.prototype.setAuthTag=function setAuthTag(tag){if(!this._decrypt)throw new Error('Attempting to set auth tag in unsupported state');this._authTag=tag;};StreamCipher.prototype.setAAD=function setAAD(buf){if(this._called)throw new Error('Attempting to set AAD in unsupported state');this._ghash.update(buf);this._alen+=buf.length;};module.exports=StreamCipher;},{"./aes":184,"./ghash":189,"./incr32":190,"buffer-xor":215,"cipher-base":216,"inherits":364,"safe-buffer":470}],186:[function(require,module,exports){var ciphers=require('./encrypter');var deciphers=require('./decrypter');var modes=require('./modes/list.json');function getCiphers(){return Object.keys(modes);}exports.createCipher=exports.Cipher=ciphers.createCipher;exports.createCipheriv=exports.Cipheriv=ciphers.createCipheriv;exports.createDecipher=exports.Decipher=deciphers.createDecipher;exports.createDecipheriv=exports.Decipheriv=deciphers.createDecipheriv;exports.listCiphers=exports.getCiphers=getCiphers;},{"./decrypter":187,"./encrypter":188,"./modes/list.json":198}],187:[function(require,module,exports){var AuthCipher=require('./authCipher');var Buffer=require('safe-buffer').Buffer;var MODES=require('./modes');var StreamCipher=require('./streamCipher');var Transform=require('cipher-base');var aes=require('./aes');var ebtk=require('evp_bytestokey');var inherits=require('inherits');function Decipher(mode,key,iv){Transform.call(this);this._cache=new Splitter();this._last=void 0;this._cipher=new aes.AES(key);this._prev=Buffer.from(iv);this._mode=mode;this._autopadding=true;}inherits(Decipher,Transform);Decipher.prototype._update=function(data){this._cache.add(data);var chunk;var thing;var out=[];while(chunk=this._cache.get(this._autopadding)){thing=this._mode.decrypt(this,chunk);out.push(thing);}return Buffer.concat(out);};Decipher.prototype._final=function(){var chunk=this._cache.flush();if(this._autopadding){return unpad(this._mode.decrypt(this,chunk));}else if(chunk){throw new Error('data not multiple of block length');}};Decipher.prototype.setAutoPadding=function(setTo){this._autopadding=!!setTo;return this;};function Splitter(){this.cache=Buffer.allocUnsafe(0);}Splitter.prototype.add=function(data){this.cache=Buffer.concat([this.cache,data]);};Splitter.prototype.get=function(autoPadding){var out;if(autoPadding){if(this.cache.length>16){out=this.cache.slice(0,16);this.cache=this.cache.slice(16);return out;}}else{if(this.cache.length>=16){out=this.cache.slice(0,16);this.cache=this.cache.slice(16);return out;}}return null;};Splitter.prototype.flush=function(){if(this.cache.length)return this.cache;};function unpad(last){var padded=last[15];if(padded<1||padded>16){throw new Error('unable to decrypt data');}var i=-1;while(++i<padded){if(last[i+(16-padded)]!==padded){throw new Error('unable to decrypt data');}}if(padded===16)return;return last.slice(0,16-padded);}function createDecipheriv(suite,password,iv){var config=MODES[suite.toLowerCase()];if(!config)throw new TypeError('invalid suite type');if(typeof iv==='string')iv=Buffer.from(iv);if(config.mode!=='GCM'&&iv.length!==config.iv)throw new TypeError('invalid iv length '+iv.length);if(typeof password==='string')password=Buffer.from(password);if(password.length!==config.key/8)throw new TypeError('invalid key length '+password.length);if(config.type==='stream'){return new StreamCipher(config.module,password,iv,true);}else if(config.type==='auth'){return new AuthCipher(config.module,password,iv,true);}return new Decipher(config.module,password,iv);}function createDecipher(suite,password){var config=MODES[suite.toLowerCase()];if(!config)throw new TypeError('invalid suite type');var keys=ebtk(password,false,config.key,config.iv);return createDecipheriv(suite,keys.key,keys.iv);}exports.createDecipher=createDecipher;exports.createDecipheriv=createDecipheriv;},{"./aes":184,"./authCipher":185,"./modes":197,"./streamCipher":200,"cipher-base":216,"evp_bytestokey":345,"inherits":364,"safe-buffer":470}],188:[function(require,module,exports){var MODES=require('./modes');var AuthCipher=require('./authCipher');var Buffer=require('safe-buffer').Buffer;var StreamCipher=require('./streamCipher');var Transform=require('cipher-base');var aes=require('./aes');var ebtk=require('evp_bytestokey');var inherits=require('inherits');function Cipher(mode,key,iv){Transform.call(this);this._cache=new Splitter();this._cipher=new aes.AES(key);this._prev=Buffer.from(iv);this._mode=mode;this._autopadding=true;}inherits(Cipher,Transform);Cipher.prototype._update=function(data){this._cache.add(data);var chunk;var thing;var out=[];while(chunk=this._cache.get()){thing=this._mode.encrypt(this,chunk);out.push(thing);}return Buffer.concat(out);};var PADDING=Buffer.alloc(16,0x10);Cipher.prototype._final=function(){var chunk=this._cache.flush();if(this._autopadding){chunk=this._mode.encrypt(this,chunk);this._cipher.scrub();return chunk;}if(!chunk.equals(PADDING)){this._cipher.scrub();throw new Error('data not multiple of block length');}};Cipher.prototype.setAutoPadding=function(setTo){this._autopadding=!!setTo;return this;};function Splitter(){this.cache=Buffer.allocUnsafe(0);}Splitter.prototype.add=function(data){this.cache=Buffer.concat([this.cache,data]);};Splitter.prototype.get=function(){if(this.cache.length>15){var out=this.cache.slice(0,16);this.cache=this.cache.slice(16);return out;}return null;};Splitter.prototype.flush=function(){var len=16-this.cache.length;var padBuff=Buffer.allocUnsafe(len);var i=-1;while(++i<len){padBuff.writeUInt8(len,i);}return Buffer.concat([this.cache,padBuff]);};function createCipheriv(suite,password,iv){var config=MODES[suite.toLowerCase()];if(!config)throw new TypeError('invalid suite type');if(typeof password==='string')password=Buffer.from(password);if(password.length!==config.key/8)throw new TypeError('invalid key length '+password.length);if(typeof iv==='string')iv=Buffer.from(iv);if(config.mode!=='GCM'&&iv.length!==config.iv)throw new TypeError('invalid iv length '+iv.length);if(config.type==='stream'){return new StreamCipher(config.module,password,iv);}else if(config.type==='auth'){return new AuthCipher(config.module,password,iv);}return new Cipher(config.module,password,iv);}function createCipher(suite,password){var config=MODES[suite.toLowerCase()];if(!config)throw new TypeError('invalid suite type');var keys=ebtk(password,false,config.key,config.iv);return createCipheriv(suite,keys.key,keys.iv);}exports.createCipheriv=createCipheriv;exports.createCipher=createCipher;},{"./aes":184,"./authCipher":185,"./modes":197,"./streamCipher":200,"cipher-base":216,"evp_bytestokey":345,"inherits":364,"safe-buffer":470}],189:[function(require,module,exports){var Buffer=require('safe-buffer').Buffer;var ZEROES=Buffer.alloc(16,0);function toArray(buf){return[buf.readUInt32BE(0),buf.readUInt32BE(4),buf.readUInt32BE(8),buf.readUInt32BE(12)];}function fromArray(out){var buf=Buffer.allocUnsafe(16);buf.writeUInt32BE(out[0]>>>0,0);buf.writeUInt32BE(out[1]>>>0,4);buf.writeUInt32BE(out[2]>>>0,8);buf.writeUInt32BE(out[3]>>>0,12);return buf;}function GHASH(key){this.h=key;this.state=Buffer.alloc(16,0);this.cache=Buffer.allocUnsafe(0);}// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html |
|
|
// by Juho Vähä-Herttua |
|
|
GHASH.prototype.ghash=function(block){var i=-1;while(++i<block.length){this.state[i]^=block[i];}this._multiply();};GHASH.prototype._multiply=function(){var Vi=toArray(this.h);var Zi=[0,0,0,0];var j,xi,lsbVi;var i=-1;while(++i<128){xi=(this.state[~~(i/8)]&1<<7-i%8)!==0;if(xi){// Z_i+1 = Z_i ^ V_i |
|
|
Zi[0]^=Vi[0];Zi[1]^=Vi[1];Zi[2]^=Vi[2];Zi[3]^=Vi[3];}// Store the value of LSB(V_i) |
|
|
lsbVi=(Vi[3]&1)!==0;// V_i+1 = V_i >> 1 |
|
|
for(j=3;j>0;j--){Vi[j]=Vi[j]>>>1|(Vi[j-1]&1)<<31;}Vi[0]=Vi[0]>>>1;// If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R |
|
|
if(lsbVi){Vi[0]=Vi[0]^0xe1<<24;}}this.state=fromArray(Zi);};GHASH.prototype.update=function(buf){this.cache=Buffer.concat([this.cache,buf]);var chunk;while(this.cache.length>=16){chunk=this.cache.slice(0,16);this.cache=this.cache.slice(16);this.ghash(chunk);}};GHASH.prototype.final=function(abl,bl){if(this.cache.length){this.ghash(Buffer.concat([this.cache,ZEROES],16));}this.ghash(fromArray([0,abl,0,bl]));return this.state;};module.exports=GHASH;},{"safe-buffer":470}],190:[function(require,module,exports){function incr32(iv){var len=iv.length;var item;while(len--){item=iv.readUInt8(len);if(item===255){iv.writeUInt8(0,len);}else{item++;iv.writeUInt8(item,len);break;}}}module.exports=incr32;},{}],191:[function(require,module,exports){var xor=require('buffer-xor');exports.encrypt=function(self,block){var data=xor(block,self._prev);self._prev=self._cipher.encryptBlock(data);return self._prev;};exports.decrypt=function(self,block){var pad=self._prev;self._prev=block;var out=self._cipher.decryptBlock(block);return xor(out,pad);};},{"buffer-xor":215}],192:[function(require,module,exports){var Buffer=require('safe-buffer').Buffer;var xor=require('buffer-xor');function encryptStart(self,data,decrypt){var len=data.length;var out=xor(data,self._cache);self._cache=self._cache.slice(len);self._prev=Buffer.concat([self._prev,decrypt?data:out]);return out;}exports.encrypt=function(self,data,decrypt){var out=Buffer.allocUnsafe(0);var len;while(data.length){if(self._cache.length===0){self._cache=self._cipher.encryptBlock(self._prev);self._prev=Buffer.allocUnsafe(0);}if(self._cache.length<=data.length){len=self._cache.length;out=Buffer.concat([out,encryptStart(self,data.slice(0,len),decrypt)]);data=data.slice(len);}else{out=Buffer.concat([out,encryptStart(self,data,decrypt)]);break;}}return out;};},{"buffer-xor":215,"safe-buffer":470}],193:[function(require,module,exports){var Buffer=require('safe-buffer').Buffer;function encryptByte(self,byteParam,decrypt){var pad;var i=-1;var len=8;var out=0;var bit,value;while(++i<len){pad=self._cipher.encryptBlock(self._prev);bit=byteParam&1<<7-i?0x80:0;value=pad[0]^bit;out+=(value&0x80)>>i%8;self._prev=shiftIn(self._prev,decrypt?bit:value);}return out;}function shiftIn(buffer,value){var len=buffer.length;var i=-1;var out=Buffer.allocUnsafe(buffer.length);buffer=Buffer.concat([buffer,Buffer.from([value])]);while(++i<len){out[i]=buffer[i]<<1|buffer[i+1]>>7;}return out;}exports.encrypt=function(self,chunk,decrypt){var len=chunk.length;var out=Buffer.allocUnsafe(len);var i=-1;while(++i<len){out[i]=encryptByte(self,chunk[i],decrypt);}return out;};},{"safe-buffer":470}],194:[function(require,module,exports){var Buffer=require('safe-buffer').Buffer;function encryptByte(self,byteParam,decrypt){var pad=self._cipher.encryptBlock(self._prev);var out=pad[0]^byteParam;self._prev=Buffer.concat([self._prev.slice(1),Buffer.from([decrypt?byteParam:out])]);return out;}exports.encrypt=function(self,chunk,decrypt){var len=chunk.length;var out=Buffer.allocUnsafe(len);var i=-1;while(++i<len){out[i]=encryptByte(self,chunk[i],decrypt);}return out;};},{"safe-buffer":470}],195:[function(require,module,exports){var xor=require('buffer-xor');var Buffer=require('safe-buffer').Buffer;var incr32=require('../incr32');function getBlock(self){var out=self._cipher.encryptBlockRaw(self._prev);incr32(self._prev);return out;}var blockSize=16;exports.encrypt=function(self,chunk){var chunkNum=Math.ceil(chunk.length/blockSize);var start=self._cache.length;self._cache=Buffer.concat([self._cache,Buffer.allocUnsafe(chunkNum*blockSize)]);for(var i=0;i<chunkNum;i++){var out=getBlock(self);var offset=start+i*blockSize;self._cache.writeUInt32BE(out[0],offset+0);self._cache.writeUInt32BE(out[1],offset+4);self._cache.writeUInt32BE(out[2],offset+8);self._cache.writeUInt32BE(out[3],offset+12);}var pad=self._cache.slice(0,chunk.length);self._cache=self._cache.slice(chunk.length);return xor(chunk,pad);};},{"../incr32":190,"buffer-xor":215,"safe-buffer":470}],196:[function(require,module,exports){exports.encrypt=function(self,block){return self._cipher.encryptBlock(block);};exports.decrypt=function(self,block){return self._cipher.decryptBlock(block);};},{}],197:[function(require,module,exports){var modeModules={ECB:require('./ecb'),CBC:require('./cbc'),CFB:require('./cfb'),CFB8:require('./cfb8'),CFB1:require('./cfb1'),OFB:require('./ofb'),CTR:require('./ctr'),GCM:require('./ctr')};var modes=require('./list.json');for(var key in modes){modes[key].module=modeModules[modes[key].mode];}module.exports=modes;},{"./cbc":191,"./cfb":192,"./cfb1":193,"./cfb8":194,"./ctr":195,"./ecb":196,"./list.json":198,"./ofb":199}],198:[function(require,module,exports){module.exports={"aes-128-ecb":{"cipher":"AES","key":128,"iv":0,"mode":"ECB","type":"block"},"aes-192-ecb":{"cipher":"AES","key":192,"iv":0,"mode":"ECB","type":"block"},"aes-256-ecb":{"cipher":"AES","key":256,"iv":0,"mode":"ECB","type":"block"},"aes-128-cbc":{"cipher":"AES","key":128,"iv":16,"mode":"CBC","type":"block"},"aes-192-cbc":{"cipher":"AES","key":192,"iv":16,"mode":"CBC","type":"block"},"aes-256-cbc":{"cipher":"AES","key":256,"iv":16,"mode":"CBC","type":"block"},"aes128":{"cipher":"AES","key":128,"iv":16,"mode":"CBC","type":"block"},"aes192":{"cipher":"AES","key":192,"iv":16,"mode":"CBC","type":"block"},"aes256":{"cipher":"AES","key":256,"iv":16,"mode":"CBC","type":"block"},"aes-128-cfb":{"cipher":"AES","key":128,"iv":16,"mode":"CFB","type":"stream"},"aes-192-cfb":{"cipher":"AES","key":192,"iv":16,"mode":"CFB","type":"stream"},"aes-256-cfb":{"cipher":"AES","key":256,"iv":16,"mode":"CFB","type":"stream"},"aes-128-cfb8":{"cipher":"AES","key":128,"iv":16,"mode":"CFB8","type":"stream"},"aes-192-cfb8":{"cipher":"AES","key":192,"iv":16,"mode":"CFB8","type":"stream"},"aes-256-cfb8":{"cipher":"AES","key":256,"iv":16,"mode":"CFB8","type":"stream"},"aes-128-cfb1":{"cipher":"AES","key":128,"iv":16,"mode":"CFB1","type":"stream"},"aes-192-cfb1":{"cipher":"AES","key":192,"iv":16,"mode":"CFB1","type":"stream"},"aes-256-cfb1":{"cipher":"AES","key":256,"iv":16,"mode":"CFB1","type":"stream"},"aes-128-ofb":{"cipher":"AES","key":128,"iv":16,"mode":"OFB","type":"stream"},"aes-192-ofb":{"cipher":"AES","key":192,"iv":16,"mode":"OFB","type":"stream"},"aes-256-ofb":{"cipher":"AES","key":256,"iv":16,"mode":"OFB","type":"stream"},"aes-128-ctr":{"cipher":"AES","key":128,"iv":16,"mode":"CTR","type":"stream"},"aes-192-ctr":{"cipher":"AES","key":192,"iv":16,"mode":"CTR","type":"stream"},"aes-256-ctr":{"cipher":"AES","key":256,"iv":16,"mode":"CTR","type":"stream"},"aes-128-gcm":{"cipher":"AES","key":128,"iv":12,"mode":"GCM","type":"auth"},"aes-192-gcm":{"cipher":"AES","key":192,"iv":12,"mode":"GCM","type":"auth"},"aes-256-gcm":{"cipher":"AES","key":256,"iv":12,"mode":"GCM","type":"auth"}};},{}],199:[function(require,module,exports){(function(Buffer){var xor=require('buffer-xor');function getBlock(self){self._prev=self._cipher.encryptBlock(self._prev);return self._prev;}exports.encrypt=function(self,chunk){while(self._cache.length<chunk.length){self._cache=Buffer.concat([self._cache,getBlock(self)]);}var pad=self._cache.slice(0,chunk.length);self._cache=self._cache.slice(chunk.length);return xor(chunk,pad);};}).call(this,require("buffer").Buffer);},{"buffer":214,"buffer-xor":215}],200:[function(require,module,exports){var aes=require('./aes');var Buffer=require('safe-buffer').Buffer;var Transform=require('cipher-base');var inherits=require('inherits');function StreamCipher(mode,key,iv,decrypt){Transform.call(this);this._cipher=new aes.AES(key);this._prev=Buffer.from(iv);this._cache=Buffer.allocUnsafe(0);this._secCache=Buffer.allocUnsafe(0);this._decrypt=decrypt;this._mode=mode;}inherits(StreamCipher,Transform);StreamCipher.prototype._update=function(chunk){return this._mode.encrypt(this,chunk,this._decrypt);};StreamCipher.prototype._final=function(){this._cipher.scrub();};module.exports=StreamCipher;},{"./aes":184,"cipher-base":216,"inherits":364,"safe-buffer":470}],201:[function(require,module,exports){var DES=require('browserify-des');var aes=require('browserify-aes/browser');var aesModes=require('browserify-aes/modes');var desModes=require('browserify-des/modes');var ebtk=require('evp_bytestokey');function createCipher(suite,password){suite=suite.toLowerCase();var keyLen,ivLen;if(aesModes[suite]){keyLen=aesModes[suite].key;ivLen=aesModes[suite].iv;}else if(desModes[suite]){keyLen=desModes[suite].key*8;ivLen=desModes[suite].iv;}else{throw new TypeError('invalid suite type');}var keys=ebtk(password,false,keyLen,ivLen);return createCipheriv(suite,keys.key,keys.iv);}function createDecipher(suite,password){suite=suite.toLowerCase();var keyLen,ivLen;if(aesModes[suite]){keyLen=aesModes[suite].key;ivLen=aesModes[suite].iv;}else if(desModes[suite]){keyLen=desModes[suite].key*8;ivLen=desModes[suite].iv;}else{throw new TypeError('invalid suite type');}var keys=ebtk(password,false,keyLen,ivLen);return createDecipheriv(suite,keys.key,keys.iv);}function createCipheriv(suite,key,iv){suite=suite.toLowerCase();if(aesModes[suite])return aes.createCipheriv(suite,key,iv);if(desModes[suite])return new DES({key:key,iv:iv,mode:suite});throw new TypeError('invalid suite type');}function createDecipheriv(suite,key,iv){suite=suite.toLowerCase();if(aesModes[suite])return aes.createDecipheriv(suite,key,iv);if(desModes[suite])return new DES({key:key,iv:iv,mode:suite,decrypt:true});throw new TypeError('invalid suite type');}function getCiphers(){return Object.keys(desModes).concat(aes.getCiphers());}exports.createCipher=exports.Cipher=createCipher;exports.createCipheriv=exports.Cipheriv=createCipheriv;exports.createDecipher=exports.Decipher=createDecipher;exports.createDecipheriv=exports.Decipheriv=createDecipheriv;exports.listCiphers=exports.getCiphers=getCiphers;},{"browserify-aes/browser":186,"browserify-aes/modes":197,"browserify-des":202,"browserify-des/modes":203,"evp_bytestokey":345}],202:[function(require,module,exports){var CipherBase=require('cipher-base');var des=require('des.js');var inherits=require('inherits');var Buffer=require('safe-buffer').Buffer;var modes={'des-ede3-cbc':des.CBC.instantiate(des.EDE),'des-ede3':des.EDE,'des-ede-cbc':des.CBC.instantiate(des.EDE),'des-ede':des.EDE,'des-cbc':des.CBC.instantiate(des.DES),'des-ecb':des.DES};modes.des=modes['des-cbc'];modes.des3=modes['des-ede3-cbc'];module.exports=DES;inherits(DES,CipherBase);function DES(opts){CipherBase.call(this);var modeName=opts.mode.toLowerCase();var mode=modes[modeName];var type;if(opts.decrypt){type='decrypt';}else{type='encrypt';}var key=opts.key;if(!Buffer.isBuffer(key)){key=Buffer.from(key);}if(modeName==='des-ede'||modeName==='des-ede-cbc'){key=Buffer.concat([key,key.slice(0,8)]);}var iv=opts.iv;if(!Buffer.isBuffer(iv)){iv=Buffer.from(iv);}this._des=mode.create({key:key,iv:iv,type:type});}DES.prototype._update=function(data){return Buffer.from(this._des.update(data));};DES.prototype._final=function(){return Buffer.from(this._des.final());};},{"cipher-base":216,"des.js":316,"inherits":364,"safe-buffer":470}],203:[function(require,module,exports){exports['des-ecb']={key:8,iv:0};exports['des-cbc']=exports.des={key:8,iv:8};exports['des-ede3-cbc']=exports.des3={key:24,iv:8};exports['des-ede3']={key:24,iv:0};exports['des-ede-cbc']={key:16,iv:8};exports['des-ede']={key:16,iv:0};},{}],204:[function(require,module,exports){(function(Buffer){var bn=require('bn.js');var randomBytes=require('randombytes');module.exports=crt;function blind(priv){var r=getr(priv);var blinder=r.toRed(bn.mont(priv.modulus)).redPow(new bn(priv.publicExponent)).fromRed();return{blinder:blinder,unblinder:r.invm(priv.modulus)};}function crt(msg,priv){var blinds=blind(priv);var len=priv.modulus.byteLength();var mod=bn.mont(priv.modulus);var blinded=new bn(msg).mul(blinds.blinder).umod(priv.modulus);var c1=blinded.toRed(bn.mont(priv.prime1));var c2=blinded.toRed(bn.mont(priv.prime2));var qinv=priv.coefficient;var p=priv.prime1;var q=priv.prime2;var m1=c1.redPow(priv.exponent1);var m2=c2.redPow(priv.exponent2);m1=m1.fromRed();m2=m2.fromRed();var h=m1.isub(m2).imul(qinv).umod(p);h.imul(q);m2.iadd(h);return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false,len));}crt.getr=getr;function getr(priv){var len=priv.modulus.byteLength();var r=new bn(randomBytes(len));while(r.cmp(priv.modulus)>=0||!r.umod(priv.prime1)||!r.umod(priv.prime2)){r=new bn(randomBytes(len));}return r;}}).call(this,require("buffer").Buffer);},{"bn.js":205,"buffer":214,"randombytes":451}],205:[function(require,module,exports){arguments[4][179][0].apply(exports,arguments);},{"buffer":183,"dup":179}],206:[function(require,module,exports){module.exports=require('./browser/algorithms.json');},{"./browser/algorithms.json":207}],207:[function(require,module,exports){module.exports={"sha224WithRSAEncryption":{"sign":"rsa","hash":"sha224","id":"302d300d06096086480165030402040500041c"},"RSA-SHA224":{"sign":"ecdsa/rsa","hash":"sha224","id":"302d300d06096086480165030402040500041c"},"sha256WithRSAEncryption":{"sign":"rsa","hash":"sha256","id":"3031300d060960864801650304020105000420"},"RSA-SHA256":{"sign":"ecdsa/rsa","hash":"sha256","id":"3031300d060960864801650304020105000420"},"sha384WithRSAEncryption":{"sign":"rsa","hash":"sha384","id":"3041300d060960864801650304020205000430"},"RSA-SHA384":{"sign":"ecdsa/rsa","hash":"sha384","id":"3041300d060960864801650304020205000430"},"sha512WithRSAEncryption":{"sign":"rsa","hash":"sha512","id":"3051300d060960864801650304020305000440"},"RSA-SHA512":{"sign":"ecdsa/rsa","hash":"sha512","id":"3051300d060960864801650304020305000440"},"RSA-SHA1":{"sign":"rsa","hash":"sha1","id":"3021300906052b0e03021a05000414"},"ecdsa-with-SHA1":{"sign":"ecdsa","hash":"sha1","id":""},"sha256":{"sign":"ecdsa","hash":"sha256","id":""},"sha224":{"sign":"ecdsa","hash":"sha224","id":""},"sha384":{"sign":"ecdsa","hash":"sha384","id":""},"sha512":{"sign":"ecdsa","hash":"sha512","id":""},"DSA-SHA":{"sign":"dsa","hash":"sha1","id":""},"DSA-SHA1":{"sign":"dsa","hash":"sha1","id":""},"DSA":{"sign":"dsa","hash":"sha1","id":""},"DSA-WITH-SHA224":{"sign":"dsa","hash":"sha224","id":""},"DSA-SHA224":{"sign":"dsa","hash":"sha224","id":""},"DSA-WITH-SHA256":{"sign":"dsa","hash":"sha256","id":""},"DSA-SHA256":{"sign":"dsa","hash":"sha256","id":""},"DSA-WITH-SHA384":{"sign":"dsa","hash":"sha384","id":""},"DSA-SHA384":{"sign":"dsa","hash":"sha384","id":""},"DSA-WITH-SHA512":{"sign":"dsa","hash":"sha512","id":""},"DSA-SHA512":{"sign":"dsa","hash":"sha512","id":""},"DSA-RIPEMD160":{"sign":"dsa","hash":"rmd160","id":""},"ripemd160WithRSA":{"sign":"rsa","hash":"rmd160","id":"3021300906052b2403020105000414"},"RSA-RIPEMD160":{"sign":"rsa","hash":"rmd160","id":"3021300906052b2403020105000414"},"md5WithRSAEncryption":{"sign":"rsa","hash":"md5","id":"3020300c06082a864886f70d020505000410"},"RSA-MD5":{"sign":"rsa","hash":"md5","id":"3020300c06082a864886f70d020505000410"}};},{}],208:[function(require,module,exports){module.exports={"1.3.132.0.10":"secp256k1","1.3.132.0.33":"p224","1.2.840.10045.3.1.1":"p192","1.2.840.10045.3.1.7":"p256","1.3.132.0.34":"p384","1.3.132.0.35":"p521"};},{}],209:[function(require,module,exports){var Buffer=require('safe-buffer').Buffer;var createHash=require('create-hash');var stream=require('readable-stream');var inherits=require('inherits');var sign=require('./sign');var verify=require('./verify');var algorithms=require('./algorithms.json');Object.keys(algorithms).forEach(function(key){algorithms[key].id=Buffer.from(algorithms[key].id,'hex');algorithms[key.toLowerCase()]=algorithms[key];});function Sign(algorithm){stream.Writable.call(this);var data=algorithms[algorithm];if(!data)throw new Error('Unknown message digest');this._hashType=data.hash;this._hash=createHash(data.hash);this._tag=data.id;this._signType=data.sign;}inherits(Sign,stream.Writable);Sign.prototype._write=function _write(data,_,done){this._hash.update(data);done();};Sign.prototype.update=function update(data,enc){if(typeof data==='string')data=Buffer.from(data,enc);this._hash.update(data);return this;};Sign.prototype.sign=function signMethod(key,enc){this.end();var hash=this._hash.digest();var sig=sign(hash,key,this._hashType,this._signType,this._tag);return enc?sig.toString(enc):sig;};function Verify(algorithm){stream.Writable.call(this);var data=algorithms[algorithm];if(!data)throw new Error('Unknown message digest');this._hash=createHash(data.hash);this._tag=data.id;this._signType=data.sign;}inherits(Verify,stream.Writable);Verify.prototype._write=function _write(data,_,done){this._hash.update(data);done();};Verify.prototype.update=function update(data,enc){if(typeof data==='string')data=Buffer.from(data,enc);this._hash.update(data);return this;};Verify.prototype.verify=function verifyMethod(key,sig,enc){if(typeof sig==='string')sig=Buffer.from(sig,enc);this.end();var hash=this._hash.digest();return verify(sig,hash,key,this._signType,this._tag);};function createSign(algorithm){return new Sign(algorithm);}function createVerify(algorithm){return new Verify(algorithm);}module.exports={Sign:createSign,Verify:createVerify,createSign:createSign,createVerify:createVerify};},{"./algorithms.json":207,"./sign":210,"./verify":211,"create-hash":308,"inherits":364,"readable-stream":467,"safe-buffer":212}],210:[function(require,module,exports){// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js |
|
|
var Buffer=require('safe-buffer').Buffer;var createHmac=require('create-hmac');var crt=require('browserify-rsa');var EC=require('elliptic').ec;var BN=require('bn.js');var parseKeys=require('parse-asn1');var curves=require('./curves.json');function sign(hash,key,hashType,signType,tag){var priv=parseKeys(key);if(priv.curve){// rsa keys can be interpreted as ecdsa ones in openssl |
|
|
if(signType!=='ecdsa'&&signType!=='ecdsa/rsa')throw new Error('wrong private key type');return ecSign(hash,priv);}else if(priv.type==='dsa'){if(signType!=='dsa')throw new Error('wrong private key type');return dsaSign(hash,priv,hashType);}else{if(signType!=='rsa'&&signType!=='ecdsa/rsa')throw new Error('wrong private key type');}hash=Buffer.concat([tag,hash]);var len=priv.modulus.byteLength();var pad=[0,1];while(hash.length+pad.length+1<len){pad.push(0xff);}pad.push(0x00);var i=-1;while(++i<hash.length){pad.push(hash[i]);}var out=crt(pad,priv);return out;}function ecSign(hash,priv){var curveId=curves[priv.curve.join('.')];if(!curveId)throw new Error('unknown curve '+priv.curve.join('.'));var curve=new EC(curveId);var key=curve.keyFromPrivate(priv.privateKey);var out=key.sign(hash);return Buffer.from(out.toDER());}function dsaSign(hash,priv,algo){var x=priv.params.priv_key;var p=priv.params.p;var q=priv.params.q;var g=priv.params.g;var r=new BN(0);var k;var H=bits2int(hash,q).mod(q);var s=false;var kv=getKey(x,q,hash,algo);while(s===false){k=makeKey(q,kv,algo);r=makeR(g,k,p,q);s=k.invm(q).imul(H.add(x.mul(r))).mod(q);if(s.cmpn(0)===0){s=false;r=new BN(0);}}return toDER(r,s);}function toDER(r,s){r=r.toArray();s=s.toArray();// Pad values |
|
|
if(r[0]&0x80)r=[0].concat(r);if(s[0]&0x80)s=[0].concat(s);var total=r.length+s.length+4;var res=[0x30,total,0x02,r.length];res=res.concat(r,[0x02,s.length],s);return Buffer.from(res);}function getKey(x,q,hash,algo){x=Buffer.from(x.toArray());if(x.length<q.byteLength()){var zeros=Buffer.alloc(q.byteLength()-x.length);x=Buffer.concat([zeros,x]);}var hlen=hash.length;var hbits=bits2octets(hash,q);var v=Buffer.alloc(hlen);v.fill(1);var k=Buffer.alloc(hlen);k=createHmac(algo,k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest();v=createHmac(algo,k).update(v).digest();k=createHmac(algo,k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest();v=createHmac(algo,k).update(v).digest();return{k:k,v:v};}function bits2int(obits,q){var bits=new BN(obits);var shift=(obits.length<<3)-q.bitLength();if(shift>0)bits.ishrn(shift);return bits;}function bits2octets(bits,q){bits=bits2int(bits,q);bits=bits.mod(q);var out=Buffer.from(bits.toArray());if(out.length<q.byteLength()){var zeros=Buffer.alloc(q.byteLength()-out.length);out=Buffer.concat([zeros,out]);}return out;}function makeKey(q,kv,algo){var t;var k;do{t=Buffer.alloc(0);while(t.length*8<q.bitLength()){kv.v=createHmac(algo,kv.k).update(kv.v).digest();t=Buffer.concat([t,kv.v]);}k=bits2int(t,q);kv.k=createHmac(algo,kv.k).update(kv.v).update(Buffer.from([0])).digest();kv.v=createHmac(algo,kv.k).update(kv.v).digest();}while(k.cmp(q)!==-1);return k;}function makeR(g,k,p,q){return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q);}module.exports=sign;module.exports.getKey=getKey;module.exports.makeKey=makeKey;},{"./curves.json":208,"bn.js":181,"browserify-rsa":204,"create-hmac":310,"elliptic":327,"parse-asn1":436,"safe-buffer":212}],211:[function(require,module,exports){// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js |
|
|
var Buffer=require('safe-buffer').Buffer;var BN=require('bn.js');var EC=require('elliptic').ec;var parseKeys=require('parse-asn1');var curves=require('./curves.json');function verify(sig,hash,key,signType,tag){var pub=parseKeys(key);if(pub.type==='ec'){// rsa keys can be interpreted as ecdsa ones in openssl |
|
|
if(signType!=='ecdsa'&&signType!=='ecdsa/rsa')throw new Error('wrong public key type');return ecVerify(sig,hash,pub);}else if(pub.type==='dsa'){if(signType!=='dsa')throw new Error('wrong public key type');return dsaVerify(sig,hash,pub);}else{if(signType!=='rsa'&&signType!=='ecdsa/rsa')throw new Error('wrong public key type');}hash=Buffer.concat([tag,hash]);var len=pub.modulus.byteLength();var pad=[1];var padNum=0;while(hash.length+pad.length+2<len){pad.push(0xff);padNum++;}pad.push(0x00);var i=-1;while(++i<hash.length){pad.push(hash[i]);}pad=Buffer.from(pad);var red=BN.mont(pub.modulus);sig=new BN(sig).toRed(red);sig=sig.redPow(new BN(pub.publicExponent));sig=Buffer.from(sig.fromRed().toArray());var out=padNum<8?1:0;len=Math.min(sig.length,pad.length);if(sig.length!==pad.length)out=1;i=-1;while(++i<len){out|=sig[i]^pad[i];}return out===0;}function ecVerify(sig,hash,pub){var curveId=curves[pub.data.algorithm.curve.join('.')];if(!curveId)throw new Error('unknown curve '+pub.data.algorithm.curve.join('.'));var curve=new EC(curveId);var pubkey=pub.data.subjectPrivateKey.data;return curve.verify(hash,sig,pubkey);}function dsaVerify(sig,hash,pub){var p=pub.data.p;var q=pub.data.q;var g=pub.data.g;var y=pub.data.pub_key;var unpacked=parseKeys.signature.decode(sig,'der');var s=unpacked.s;var r=unpacked.r;checkValue(s,q);checkValue(r,q);var montp=BN.mont(p);var w=s.invm(q);var v=g.toRed(montp).redPow(new BN(hash).mul(w).mod(q)).fromRed().mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed()).mod(p).mod(q);return v.cmp(r)===0;}function checkValue(b,q){if(b.cmpn(0)<=0)throw new Error('invalid sig');if(b.cmp(q)>=q)throw new Error('invalid sig');}module.exports=verify;},{"./curves.json":208,"bn.js":181,"elliptic":327,"parse-asn1":436,"safe-buffer":212}],212:[function(require,module,exports){/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */ /* eslint-disable node/no-deprecated-api */var buffer=require('buffer');var Buffer=buffer.Buffer;// alternative to using Object.keys for old browsers |
|
|
function copyProps(src,dst){for(var key in src){dst[key]=src[key];}}if(Buffer.from&&Buffer.alloc&&Buffer.allocUnsafe&&Buffer.allocUnsafeSlow){module.exports=buffer;}else{// Copy properties from require('buffer') |
|
|
copyProps(buffer,exports);exports.Buffer=SafeBuffer;}function SafeBuffer(arg,encodingOrOffset,length){return Buffer(arg,encodingOrOffset,length);}SafeBuffer.prototype=Object.create(Buffer.prototype);// Copy static methods from Buffer |
|
|
copyProps(Buffer,SafeBuffer);SafeBuffer.from=function(arg,encodingOrOffset,length){if(typeof arg==='number'){throw new TypeError('Argument must not be a number');}return Buffer(arg,encodingOrOffset,length);};SafeBuffer.alloc=function(size,fill,encoding){if(typeof size!=='number'){throw new TypeError('Argument must be a number');}var buf=Buffer(size);if(fill!==undefined){if(typeof encoding==='string'){buf.fill(fill,encoding);}else{buf.fill(fill);}}else{buf.fill(0);}return buf;};SafeBuffer.allocUnsafe=function(size){if(typeof size!=='number'){throw new TypeError('Argument must be a number');}return Buffer(size);};SafeBuffer.allocUnsafeSlow=function(size){if(typeof size!=='number'){throw new TypeError('Argument must be a number');}return buffer.SlowBuffer(size);};},{"buffer":214}],213:[function(require,module,exports){arguments[4][183][0].apply(exports,arguments);},{"dup":183}],214:[function(require,module,exports){(function(Buffer){/*! |
|
|
* The buffer module from node.js, for the browser. |
|
|
* |
|
|
* @author Feross Aboukhadijeh <https://feross.org> |
|
|
* @license MIT |
|
|
*/ /* eslint-disable no-proto */'use strict';var base64=require('base64-js');var ieee754=require('ieee754');exports.Buffer=Buffer;exports.SlowBuffer=SlowBuffer;exports.INSPECT_MAX_BYTES=50;var K_MAX_LENGTH=0x7fffffff;exports.kMaxLength=K_MAX_LENGTH;/** |
|
|
* If `Buffer.TYPED_ARRAY_SUPPORT`: |
|
|
* === true Use Uint8Array implementation (fastest) |
|
|
* === false Print warning and recommend using `buffer` v4.x which has an Object |
|
|
* implementation (most compatible, even IE6) |
|
|
* |
|
|
* Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, |
|
|
* Opera 11.6+, iOS 4.2+. |
|
|
* |
|
|
* We report that the browser does not support typed arrays if the are not subclassable |
|
|
* using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` |
|
|
* (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support |
|
|
* for __proto__ and has a buggy typed array implementation. |
|
|
*/Buffer.TYPED_ARRAY_SUPPORT=typedArraySupport();if(!Buffer.TYPED_ARRAY_SUPPORT&&typeof console!=='undefined'&&typeof console.error==='function'){console.error('This browser lacks typed array (Uint8Array) support which is required by '+'`buffer` v5.x. Use `buffer` v4.x if you require old browser support.');}function typedArraySupport(){// Can typed array instances can be augmented? |
|
|
try{var arr=new Uint8Array(1);arr.__proto__={__proto__:Uint8Array.prototype,foo:function foo(){return 42;}};return arr.foo()===42;}catch(e){return false;}}Object.defineProperty(Buffer.prototype,'parent',{enumerable:true,get:function get(){if(!Buffer.isBuffer(this))return undefined;return this.buffer;}});Object.defineProperty(Buffer.prototype,'offset',{enumerable:true,get:function get(){if(!Buffer.isBuffer(this))return undefined;return this.byteOffset;}});function createBuffer(length){if(length>K_MAX_LENGTH){throw new RangeError('The value "'+length+'" is invalid for option "size"');}// Return an augmented `Uint8Array` instance |
|
|
var buf=new Uint8Array(length);buf.__proto__=Buffer.prototype;return buf;}/** |
|
|
* The Buffer constructor returns instances of `Uint8Array` that have their |
|
|
* prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of |
|
|
* `Uint8Array`, so the returned instances will have all the node `Buffer` methods |
|
|
* and the `Uint8Array` methods. Square bracket notation works as expected -- it |
|
|
* returns a single octet. |
|
|
* |
|
|
* The `Uint8Array` prototype remains unmodified. |
|
|
*/function Buffer(arg,encodingOrOffset,length){// Common case. |
|
|
if(typeof arg==='number'){if(typeof encodingOrOffset==='string'){throw new TypeError('The "string" argument must be of type string. Received type number');}return allocUnsafe(arg);}return from(arg,encodingOrOffset,length);}// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 |
|
|
if(typeof Symbol!=='undefined'&&Symbol.species!=null&&Buffer[Symbol.species]===Buffer){Object.defineProperty(Buffer,Symbol.species,{value:null,configurable:true,enumerable:false,writable:false});}Buffer.poolSize=8192;// not used by this implementation |
|
|
function from(value,encodingOrOffset,length){if(typeof value==='string'){return fromString(value,encodingOrOffset);}if(ArrayBuffer.isView(value)){return fromArrayLike(value);}if(value==null){throw TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, '+'or Array-like Object. Received type '+_typeof2(value));}if(isInstance(value,ArrayBuffer)||value&&isInstance(value.buffer,ArrayBuffer)){return fromArrayBuffer(value,encodingOrOffset,length);}if(typeof value==='number'){throw new TypeError('The "value" argument must not be of type number. Received type number');}var valueOf=value.valueOf&&value.valueOf();if(valueOf!=null&&valueOf!==value){return Buffer.from(valueOf,encodingOrOffset,length);}var b=fromObject(value);if(b)return b;if(typeof Symbol!=='undefined'&&Symbol.toPrimitive!=null&&typeof value[Symbol.toPrimitive]==='function'){return Buffer.from(value[Symbol.toPrimitive]('string'),encodingOrOffset,length);}throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, '+'or Array-like Object. Received type '+_typeof2(value));}/** |
|
|
* Functionally equivalent to Buffer(arg, encoding) but throws a TypeError |
|
|
* if value is a number. |
|
|
* Buffer.from(str[, encoding]) |
|
|
* Buffer.from(array) |
|
|
* Buffer.from(buffer) |
|
|
* Buffer.from(arrayBuffer[, byteOffset[, length]]) |
|
|
**/Buffer.from=function(value,encodingOrOffset,length){return from(value,encodingOrOffset,length);};// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: |
|
|
// https://github.com/feross/buffer/pull/148 |
|
|
Buffer.prototype.__proto__=Uint8Array.prototype;Buffer.__proto__=Uint8Array;function assertSize(size){if(typeof size!=='number'){throw new TypeError('"size" argument must be of type number');}else if(size<0){throw new RangeError('The value "'+size+'" is invalid for option "size"');}}function alloc(size,fill,encoding){assertSize(size);if(size<=0){return createBuffer(size);}if(fill!==undefined){// Only pay attention to encoding if it's a string. This |
|
|
// prevents accidentally sending in a number that would |
|
|
// be interpretted as a start offset. |
|
|
return typeof encoding==='string'?createBuffer(size).fill(fill,encoding):createBuffer(size).fill(fill);}return createBuffer(size);}/** |
|
|
* Creates a new filled Buffer instance. |
|
|
* alloc(size[, fill[, encoding]]) |
|
|
**/Buffer.alloc=function(size,fill,encoding){return alloc(size,fill,encoding);};function allocUnsafe(size){assertSize(size);return createBuffer(size<0?0:checked(size)|0);}/** |
|
|
* Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. |
|
|
* */Buffer.allocUnsafe=function(size){return allocUnsafe(size);};/** |
|
|
* Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. |
|
|
*/Buffer.allocUnsafeSlow=function(size){return allocUnsafe(size);};function fromString(string,encoding){if(typeof encoding!=='string'||encoding===''){encoding='utf8';}if(!Buffer.isEncoding(encoding)){throw new TypeError('Unknown encoding: '+encoding);}var length=byteLength(string,encoding)|0;var buf=createBuffer(length);var actual=buf.write(string,encoding);if(actual!==length){// Writing a hex string, for example, that contains invalid characters will |
|
|
// cause everything after the first invalid character to be ignored. (e.g. |
|
|
// 'abxxcd' will be treated as 'ab') |
|
|
buf=buf.slice(0,actual);}return buf;}function fromArrayLike(array){var length=array.length<0?0:checked(array.length)|0;var buf=createBuffer(length);for(var i=0;i<length;i+=1){buf[i]=array[i]&255;}return buf;}function fromArrayBuffer(array,byteOffset,length){if(byteOffset<0||array.byteLength<byteOffset){throw new RangeError('"offset" is outside of buffer bounds');}if(array.byteLength<byteOffset+(length||0)){throw new RangeError('"length" is outside of buffer bounds');}var buf;if(byteOffset===undefined&&length===undefined){buf=new Uint8Array(array);}else if(length===undefined){buf=new Uint8Array(array,byteOffset);}else{buf=new Uint8Array(array,byteOffset,length);}// Return an augmented `Uint8Array` instance |
|
|
buf.__proto__=Buffer.prototype;return buf;}function fromObject(obj){if(Buffer.isBuffer(obj)){var len=checked(obj.length)|0;var buf=createBuffer(len);if(buf.length===0){return buf;}obj.copy(buf,0,0,len);return buf;}if(obj.length!==undefined){if(typeof obj.length!=='number'||numberIsNaN(obj.length)){return createBuffer(0);}return fromArrayLike(obj);}if(obj.type==='Buffer'&&Array.isArray(obj.data)){return fromArrayLike(obj.data);}}function checked(length){// Note: cannot use `length < K_MAX_LENGTH` here because that fails when |
|
|
// length is NaN (which is otherwise coerced to zero.) |
|
|
if(length>=K_MAX_LENGTH){throw new RangeError('Attempt to allocate Buffer larger than maximum '+'size: 0x'+K_MAX_LENGTH.toString(16)+' bytes');}return length|0;}function SlowBuffer(length){if(+length!=length){// eslint-disable-line eqeqeq |
|
|
length=0;}return Buffer.alloc(+length);}Buffer.isBuffer=function isBuffer(b){return b!=null&&b._isBuffer===true&&b!==Buffer.prototype;// so Buffer.isBuffer(Buffer.prototype) will be false |
|
|
};Buffer.compare=function compare(a,b){if(isInstance(a,Uint8Array))a=Buffer.from(a,a.offset,a.byteLength);if(isInstance(b,Uint8Array))b=Buffer.from(b,b.offset,b.byteLength);if(!Buffer.isBuffer(a)||!Buffer.isBuffer(b)){throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');}if(a===b)return 0;var x=a.length;var y=b.length;for(var i=0,len=Math.min(x,y);i<len;++i){if(a[i]!==b[i]){x=a[i];y=b[i];break;}}if(x<y)return-1;if(y<x)return 1;return 0;};Buffer.isEncoding=function isEncoding(encoding){switch(String(encoding).toLowerCase()){case'hex':case'utf8':case'utf-8':case'ascii':case'latin1':case'binary':case'base64':case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return true;default:return false;}};Buffer.concat=function concat(list,length){if(!Array.isArray(list)){throw new TypeError('"list" argument must be an Array of Buffers');}if(list.length===0){return Buffer.alloc(0);}var i;if(length===undefined){length=0;for(i=0;i<list.length;++i){length+=list[i].length;}}var buffer=Buffer.allocUnsafe(length);var pos=0;for(i=0;i<list.length;++i){var buf=list[i];if(isInstance(buf,Uint8Array)){buf=Buffer.from(buf);}if(!Buffer.isBuffer(buf)){throw new TypeError('"list" argument must be an Array of Buffers');}buf.copy(buffer,pos);pos+=buf.length;}return buffer;};function byteLength(string,encoding){if(Buffer.isBuffer(string)){return string.length;}if(ArrayBuffer.isView(string)||isInstance(string,ArrayBuffer)){return string.byteLength;}if(typeof string!=='string'){throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. '+'Received type '+_typeof2(string));}var len=string.length;var mustMatch=arguments.length>2&&arguments[2]===true;if(!mustMatch&&len===0)return 0;// Use a for loop to avoid recursion |
|
|
var loweredCase=false;for(;;){switch(encoding){case'ascii':case'latin1':case'binary':return len;case'utf8':case'utf-8':return utf8ToBytes(string).length;case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return len*2;case'hex':return len>>>1;case'base64':return base64ToBytes(string).length;default:if(loweredCase){return mustMatch?-1:utf8ToBytes(string).length;// assume utf8 |
|
|
}encoding=(''+encoding).toLowerCase();loweredCase=true;}}}Buffer.byteLength=byteLength;function slowToString(encoding,start,end){var loweredCase=false;// No need to verify that "this.length <= MAX_UINT32" since it's a read-only |
|
|
// property of a typed array. |
|
|
// This behaves neither like String nor Uint8Array in that we set start/end |
|
|
// to their upper/lower bounds if the value passed is out of range. |
|
|
// undefined is handled specially as per ECMA-262 6th Edition, |
|
|
// Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. |
|
|
if(start===undefined||start<0){start=0;}// Return early if start > this.length. Done here to prevent potential uint32 |
|
|
// coercion fail below. |
|
|
if(start>this.length){return'';}if(end===undefined||end>this.length){end=this.length;}if(end<=0){return'';}// Force coersion to uint32. This will also coerce falsey/NaN values to 0. |
|
|
end>>>=0;start>>>=0;if(end<=start){return'';}if(!encoding)encoding='utf8';while(true){switch(encoding){case'hex':return hexSlice(this,start,end);case'utf8':case'utf-8':return utf8Slice(this,start,end);case'ascii':return asciiSlice(this,start,end);case'latin1':case'binary':return latin1Slice(this,start,end);case'base64':return base64Slice(this,start,end);case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return utf16leSlice(this,start,end);default:if(loweredCase)throw new TypeError('Unknown encoding: '+encoding);encoding=(encoding+'').toLowerCase();loweredCase=true;}}}// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) |
|
|
// to detect a Buffer instance. It's not possible to use `instanceof Buffer` |
|
|
// reliably in a browserify context because there could be multiple different |
|
|
// copies of the 'buffer' package in use. This method works even for Buffer |
|
|
// instances that were created from another copy of the `buffer` package. |
|
|
// See: https://github.com/feross/buffer/issues/154 |
|
|
Buffer.prototype._isBuffer=true;function swap(b,n,m){var i=b[n];b[n]=b[m];b[m]=i;}Buffer.prototype.swap16=function swap16(){var len=this.length;if(len%2!==0){throw new RangeError('Buffer size must be a multiple of 16-bits');}for(var i=0;i<len;i+=2){swap(this,i,i+1);}return this;};Buffer.prototype.swap32=function swap32(){var len=this.length;if(len%4!==0){throw new RangeError('Buffer size must be a multiple of 32-bits');}for(var i=0;i<len;i+=4){swap(this,i,i+3);swap(this,i+1,i+2);}return this;};Buffer.prototype.swap64=function swap64(){var len=this.length;if(len%8!==0){throw new RangeError('Buffer size must be a multiple of 64-bits');}for(var i=0;i<len;i+=8){swap(this,i,i+7);swap(this,i+1,i+6);swap(this,i+2,i+5);swap(this,i+3,i+4);}return this;};Buffer.prototype.toString=function toString(){var length=this.length;if(length===0)return'';if(arguments.length===0)return utf8Slice(this,0,length);return slowToString.apply(this,arguments);};Buffer.prototype.toLocaleString=Buffer.prototype.toString;Buffer.prototype.equals=function equals(b){if(!Buffer.isBuffer(b))throw new TypeError('Argument must be a Buffer');if(this===b)return true;return Buffer.compare(this,b)===0;};Buffer.prototype.inspect=function inspect(){var str='';var max=exports.INSPECT_MAX_BYTES;str=this.toString('hex',0,max).replace(/(.{2})/g,'$1 ').trim();if(this.length>max)str+=' ... ';return'<Buffer '+str+'>';};Buffer.prototype.compare=function compare(target,start,end,thisStart,thisEnd){if(isInstance(target,Uint8Array)){target=Buffer.from(target,target.offset,target.byteLength);}if(!Buffer.isBuffer(target)){throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. '+'Received type '+_typeof2(target));}if(start===undefined){start=0;}if(end===undefined){end=target?target.length:0;}if(thisStart===undefined){thisStart=0;}if(thisEnd===undefined){thisEnd=this.length;}if(start<0||end>target.length||thisStart<0||thisEnd>this.length){throw new RangeError('out of range index');}if(thisStart>=thisEnd&&start>=end){return 0;}if(thisStart>=thisEnd){return-1;}if(start>=end){return 1;}start>>>=0;end>>>=0;thisStart>>>=0;thisEnd>>>=0;if(this===target)return 0;var x=thisEnd-thisStart;var y=end-start;var len=Math.min(x,y);var thisCopy=this.slice(thisStart,thisEnd);var targetCopy=target.slice(start,end);for(var i=0;i<len;++i){if(thisCopy[i]!==targetCopy[i]){x=thisCopy[i];y=targetCopy[i];break;}}if(x<y)return-1;if(y<x)return 1;return 0;};// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, |
|
|
// OR the last index of `val` in `buffer` at offset <= `byteOffset`. |
|
|
// |
|
|
// Arguments: |
|
|
// - buffer - a Buffer to search |
|
|
// - val - a string, Buffer, or number |
|
|
// - byteOffset - an index into `buffer`; will be clamped to an int32 |
|
|
// - encoding - an optional encoding, relevant is val is a string |
|
|
// - dir - true for indexOf, false for lastIndexOf |
|
|
function bidirectionalIndexOf(buffer,val,byteOffset,encoding,dir){// Empty buffer means no match |
|
|
if(buffer.length===0)return-1;// Normalize byteOffset |
|
|
if(typeof byteOffset==='string'){encoding=byteOffset;byteOffset=0;}else if(byteOffset>0x7fffffff){byteOffset=0x7fffffff;}else if(byteOffset<-0x80000000){byteOffset=-0x80000000;}byteOffset=+byteOffset;// Coerce to Number. |
|
|
if(numberIsNaN(byteOffset)){// byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer |
|
|
byteOffset=dir?0:buffer.length-1;}// Normalize byteOffset: negative offsets start from the end of the buffer |
|
|
if(byteOffset<0)byteOffset=buffer.length+byteOffset;if(byteOffset>=buffer.length){if(dir)return-1;else byteOffset=buffer.length-1;}else if(byteOffset<0){if(dir)byteOffset=0;else return-1;}// Normalize val |
|
|
if(typeof val==='string'){val=Buffer.from(val,encoding);}// Finally, search either indexOf (if dir is true) or lastIndexOf |
|
|
if(Buffer.isBuffer(val)){// Special case: looking for empty string/buffer always fails |
|
|
if(val.length===0){return-1;}return arrayIndexOf(buffer,val,byteOffset,encoding,dir);}else if(typeof val==='number'){val=val&0xFF;// Search for a byte value [0-255] |
|
|
if(typeof Uint8Array.prototype.indexOf==='function'){if(dir){return Uint8Array.prototype.indexOf.call(buffer,val,byteOffset);}else{return Uint8Array.prototype.lastIndexOf.call(buffer,val,byteOffset);}}return arrayIndexOf(buffer,[val],byteOffset,encoding,dir);}throw new TypeError('val must be string, number or Buffer');}function arrayIndexOf(arr,val,byteOffset,encoding,dir){var indexSize=1;var arrLength=arr.length;var valLength=val.length;if(encoding!==undefined){encoding=String(encoding).toLowerCase();if(encoding==='ucs2'||encoding==='ucs-2'||encoding==='utf16le'||encoding==='utf-16le'){if(arr.length<2||val.length<2){return-1;}indexSize=2;arrLength/=2;valLength/=2;byteOffset/=2;}}function read(buf,i){if(indexSize===1){return buf[i];}else{return buf.readUInt16BE(i*indexSize);}}var i;if(dir){var foundIndex=-1;for(i=byteOffset;i<arrLength;i++){if(read(arr,i)===read(val,foundIndex===-1?0:i-foundIndex)){if(foundIndex===-1)foundIndex=i;if(i-foundIndex+1===valLength)return foundIndex*indexSize;}else{if(foundIndex!==-1)i-=i-foundIndex;foundIndex=-1;}}}else{if(byteOffset+valLength>arrLength)byteOffset=arrLength-valLength;for(i=byteOffset;i>=0;i--){var found=true;for(var j=0;j<valLength;j++){if(read(arr,i+j)!==read(val,j)){found=false;break;}}if(found)return i;}}return-1;}Buffer.prototype.includes=function includes(val,byteOffset,encoding){return this.indexOf(val,byteOffset,encoding)!==-1;};Buffer.prototype.indexOf=function indexOf(val,byteOffset,encoding){return bidirectionalIndexOf(this,val,byteOffset,encoding,true);};Buffer.prototype.lastIndexOf=function lastIndexOf(val,byteOffset,encoding){return bidirectionalIndexOf(this,val,byteOffset,encoding,false);};function hexWrite(buf,string,offset,length){offset=Number(offset)||0;var remaining=buf.length-offset;if(!length){length=remaining;}else{length=Number(length);if(length>remaining){length=remaining;}}var strLen=string.length;if(length>strLen/2){length=strLen/2;}for(var i=0;i<length;++i){var parsed=parseInt(string.substr(i*2,2),16);if(numberIsNaN(parsed))return i;buf[offset+i]=parsed;}return i;}function utf8Write(buf,string,offset,length){return blitBuffer(utf8ToBytes(string,buf.length-offset),buf,offset,length);}function asciiWrite(buf,string,offset,length){return blitBuffer(asciiToBytes(string),buf,offset,length);}function latin1Write(buf,string,offset,length){return asciiWrite(buf,string,offset,length);}function base64Write(buf,string,offset,length){return blitBuffer(base64ToBytes(string),buf,offset,length);}function ucs2Write(buf,string,offset,length){return blitBuffer(utf16leToBytes(string,buf.length-offset),buf,offset,length);}Buffer.prototype.write=function write(string,offset,length,encoding){// Buffer#write(string) |
|
|
if(offset===undefined){encoding='utf8';length=this.length;offset=0;// Buffer#write(string, encoding) |
|
|
}else if(length===undefined&&typeof offset==='string'){encoding=offset;length=this.length;offset=0;// Buffer#write(string, offset[, length][, encoding]) |
|
|
}else if(isFinite(offset)){offset=offset>>>0;if(isFinite(length)){length=length>>>0;if(encoding===undefined)encoding='utf8';}else{encoding=length;length=undefined;}}else{throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported');}var remaining=this.length-offset;if(length===undefined||length>remaining)length=remaining;if(string.length>0&&(length<0||offset<0)||offset>this.length){throw new RangeError('Attempt to write outside buffer bounds');}if(!encoding)encoding='utf8';var loweredCase=false;for(;;){switch(encoding){case'hex':return hexWrite(this,string,offset,length);case'utf8':case'utf-8':return utf8Write(this,string,offset,length);case'ascii':return asciiWrite(this,string,offset,length);case'latin1':case'binary':return latin1Write(this,string,offset,length);case'base64':// Warning: maxLength not taken into account in base64Write |
|
|
return base64Write(this,string,offset,length);case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return ucs2Write(this,string,offset,length);default:if(loweredCase)throw new TypeError('Unknown encoding: '+encoding);encoding=(''+encoding).toLowerCase();loweredCase=true;}}};Buffer.prototype.toJSON=function toJSON(){return{type:'Buffer',data:Array.prototype.slice.call(this._arr||this,0)};};function base64Slice(buf,start,end){if(start===0&&end===buf.length){return base64.fromByteArray(buf);}else{return base64.fromByteArray(buf.slice(start,end));}}function utf8Slice(buf,start,end){end=Math.min(buf.length,end);var res=[];var i=start;while(i<end){var firstByte=buf[i];var codePoint=null;var bytesPerSequence=firstByte>0xEF?4:firstByte>0xDF?3:firstByte>0xBF?2:1;if(i+bytesPerSequence<=end){var secondByte,thirdByte,fourthByte,tempCodePoint;switch(bytesPerSequence){case 1:if(firstByte<0x80){codePoint=firstByte;}break;case 2:secondByte=buf[i+1];if((secondByte&0xC0)===0x80){tempCodePoint=(firstByte&0x1F)<<0x6|secondByte&0x3F;if(tempCodePoint>0x7F){codePoint=tempCodePoint;}}break;case 3:secondByte=buf[i+1];thirdByte=buf[i+2];if((secondByte&0xC0)===0x80&&(thirdByte&0xC0)===0x80){tempCodePoint=(firstByte&0xF)<<0xC|(secondByte&0x3F)<<0x6|thirdByte&0x3F;if(tempCodePoint>0x7FF&&(tempCodePoint<0xD800||tempCodePoint>0xDFFF)){codePoint=tempCodePoint;}}break;case 4:secondByte=buf[i+1];thirdByte=buf[i+2];fourthByte=buf[i+3];if((secondByte&0xC0)===0x80&&(thirdByte&0xC0)===0x80&&(fourthByte&0xC0)===0x80){tempCodePoint=(firstByte&0xF)<<0x12|(secondByte&0x3F)<<0xC|(thirdByte&0x3F)<<0x6|fourthByte&0x3F;if(tempCodePoint>0xFFFF&&tempCodePoint<0x110000){codePoint=tempCodePoint;}}}}if(codePoint===null){// we did not generate a valid codePoint so insert a |
|
|
// replacement char (U+FFFD) and advance only 1 byte |
|
|
codePoint=0xFFFD;bytesPerSequence=1;}else if(codePoint>0xFFFF){// encode to utf16 (surrogate pair dance) |
|
|
codePoint-=0x10000;res.push(codePoint>>>10&0x3FF|0xD800);codePoint=0xDC00|codePoint&0x3FF;}res.push(codePoint);i+=bytesPerSequence;}return decodeCodePointsArray(res);}// Based on http://stackoverflow.com/a/22747272/680742, the browser with |
|
|
// the lowest limit is Chrome, with 0x10000 args. |
|
|
// We go 1 magnitude less, for safety |
|
|
var MAX_ARGUMENTS_LENGTH=0x1000;function decodeCodePointsArray(codePoints){var len=codePoints.length;if(len<=MAX_ARGUMENTS_LENGTH){return String.fromCharCode.apply(String,codePoints);// avoid extra slice() |
|
|
}// Decode in chunks to avoid "call stack size exceeded". |
|
|
var res='';var i=0;while(i<len){res+=String.fromCharCode.apply(String,codePoints.slice(i,i+=MAX_ARGUMENTS_LENGTH));}return res;}function asciiSlice(buf,start,end){var ret='';end=Math.min(buf.length,end);for(var i=start;i<end;++i){ret+=String.fromCharCode(buf[i]&0x7F);}return ret;}function latin1Slice(buf,start,end){var ret='';end=Math.min(buf.length,end);for(var i=start;i<end;++i){ret+=String.fromCharCode(buf[i]);}return ret;}function hexSlice(buf,start,end){var len=buf.length;if(!start||start<0)start=0;if(!end||end<0||end>len)end=len;var out='';for(var i=start;i<end;++i){out+=toHex(buf[i]);}return out;}function utf16leSlice(buf,start,end){var bytes=buf.slice(start,end);var res='';for(var i=0;i<bytes.length;i+=2){res+=String.fromCharCode(bytes[i]+bytes[i+1]*256);}return res;}Buffer.prototype.slice=function slice(start,end){var len=this.length;start=~~start;end=end===undefined?len:~~end;if(start<0){start+=len;if(start<0)start=0;}else if(start>len){start=len;}if(end<0){end+=len;if(end<0)end=0;}else if(end>len){end=len;}if(end<start)end=start;var newBuf=this.subarray(start,end);// Return an augmented `Uint8Array` instance |
|
|
newBuf.__proto__=Buffer.prototype;return newBuf;};/* |
|
|
* Need to make sure that buffer isn't trying to write out of bounds. |
|
|
*/function checkOffset(offset,ext,length){if(offset%1!==0||offset<0)throw new RangeError('offset is not uint');if(offset+ext>length)throw new RangeError('Trying to access beyond buffer length');}Buffer.prototype.readUIntLE=function readUIntLE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i<byteLength&&(mul*=0x100)){val+=this[offset+i]*mul;}return val;};Buffer.prototype.readUIntBE=function readUIntBE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert){checkOffset(offset,byteLength,this.length);}var val=this[offset+--byteLength];var mul=1;while(byteLength>0&&(mul*=0x100)){val+=this[offset+--byteLength]*mul;}return val;};Buffer.prototype.readUInt8=function readUInt8(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,1,this.length);return this[offset];};Buffer.prototype.readUInt16LE=function readUInt16LE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,2,this.length);return this[offset]|this[offset+1]<<8;};Buffer.prototype.readUInt16BE=function readUInt16BE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,2,this.length);return this[offset]<<8|this[offset+1];};Buffer.prototype.readUInt32LE=function readUInt32LE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return(this[offset]|this[offset+1]<<8|this[offset+2]<<16)+this[offset+3]*0x1000000;};Buffer.prototype.readUInt32BE=function readUInt32BE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return this[offset]*0x1000000+(this[offset+1]<<16|this[offset+2]<<8|this[offset+3]);};Buffer.prototype.readIntLE=function readIntLE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i<byteLength&&(mul*=0x100)){val+=this[offset+i]*mul;}mul*=0x80;if(val>=mul)val-=Math.pow(2,8*byteLength);return val;};Buffer.prototype.readIntBE=function readIntBE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert)checkOffset(offset,byteLength,this.length);var i=byteLength;var mul=1;var val=this[offset+--i];while(i>0&&(mul*=0x100)){val+=this[offset+--i]*mul;}mul*=0x80;if(val>=mul)val-=Math.pow(2,8*byteLength);return val;};Buffer.prototype.readInt8=function readInt8(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,1,this.length);if(!(this[offset]&0x80))return this[offset];return(0xff-this[offset]+1)*-1;};Buffer.prototype.readInt16LE=function readInt16LE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset]|this[offset+1]<<8;return val&0x8000?val|0xFFFF0000:val;};Buffer.prototype.readInt16BE=function readInt16BE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset+1]|this[offset]<<8;return val&0x8000?val|0xFFFF0000:val;};Buffer.prototype.readInt32LE=function readInt32LE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return this[offset]|this[offset+1]<<8|this[offset+2]<<16|this[offset+3]<<24;};Buffer.prototype.readInt32BE=function readInt32BE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return this[offset]<<24|this[offset+1]<<16|this[offset+2]<<8|this[offset+3];};Buffer.prototype.readFloatLE=function readFloatLE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,true,23,4);};Buffer.prototype.readFloatBE=function readFloatBE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,false,23,4);};Buffer.prototype.readDoubleLE=function readDoubleLE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,true,52,8);};Buffer.prototype.readDoubleBE=function readDoubleBE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,false,52,8);};function checkInt(buf,value,offset,ext,max,min){if(!Buffer.isBuffer(buf))throw new TypeError('"buffer" argument must be a Buffer instance');if(value>max||value<min)throw new RangeError('"value" argument is out of bounds');if(offset+ext>buf.length)throw new RangeError('Index out of range');}Buffer.prototype.writeUIntLE=function writeUIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert){var maxBytes=Math.pow(2,8*byteLength)-1;checkInt(this,value,offset,byteLength,maxBytes,0);}var mul=1;var i=0;this[offset]=value&0xFF;while(++i<byteLength&&(mul*=0x100)){this[offset+i]=value/mul&0xFF;}return offset+byteLength;};Buffer.prototype.writeUIntBE=function writeUIntBE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert){var maxBytes=Math.pow(2,8*byteLength)-1;checkInt(this,value,offset,byteLength,maxBytes,0);}var i=byteLength-1;var mul=1;this[offset+i]=value&0xFF;while(--i>=0&&(mul*=0x100)){this[offset+i]=value/mul&0xFF;}return offset+byteLength;};Buffer.prototype.writeUInt8=function writeUInt8(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,1,0xff,0);this[offset]=value&0xff;return offset+1;};Buffer.prototype.writeUInt16LE=function writeUInt16LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,0xffff,0);this[offset]=value&0xff;this[offset+1]=value>>>8;return offset+2;};Buffer.prototype.writeUInt16BE=function writeUInt16BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,0xffff,0);this[offset]=value>>>8;this[offset+1]=value&0xff;return offset+2;};Buffer.prototype.writeUInt32LE=function writeUInt32LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,0xffffffff,0);this[offset+3]=value>>>24;this[offset+2]=value>>>16;this[offset+1]=value>>>8;this[offset]=value&0xff;return offset+4;};Buffer.prototype.writeUInt32BE=function writeUInt32BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,0xffffffff,0);this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value&0xff;return offset+4;};Buffer.prototype.writeIntLE=function writeIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;if(!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit);}var i=0;var mul=1;var sub=0;this[offset]=value&0xFF;while(++i<byteLength&&(mul*=0x100)){if(value<0&&sub===0&&this[offset+i-1]!==0){sub=1;}this[offset+i]=(value/mul>>0)-sub&0xFF;}return offset+byteLength;};Buffer.prototype.writeIntBE=function writeIntBE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;if(!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit);}var i=byteLength-1;var mul=1;var sub=0;this[offset+i]=value&0xFF;while(--i>=0&&(mul*=0x100)){if(value<0&&sub===0&&this[offset+i+1]!==0){sub=1;}this[offset+i]=(value/mul>>0)-sub&0xFF;}return offset+byteLength;};Buffer.prototype.writeInt8=function writeInt8(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,1,0x7f,-0x80);if(value<0)value=0xff+value+1;this[offset]=value&0xff;return offset+1;};Buffer.prototype.writeInt16LE=function writeInt16LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,0x7fff,-0x8000);this[offset]=value&0xff;this[offset+1]=value>>>8;return offset+2;};Buffer.prototype.writeInt16BE=function writeInt16BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,0x7fff,-0x8000);this[offset]=value>>>8;this[offset+1]=value&0xff;return offset+2;};Buffer.prototype.writeInt32LE=function writeInt32LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,0x7fffffff,-0x80000000);this[offset]=value&0xff;this[offset+1]=value>>>8;this[offset+2]=value>>>16;this[offset+3]=value>>>24;return offset+4;};Buffer.prototype.writeInt32BE=function writeInt32BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,0x7fffffff,-0x80000000);if(value<0)value=0xffffffff+value+1;this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value&0xff;return offset+4;};function checkIEEE754(buf,value,offset,ext,max,min){if(offset+ext>buf.length)throw new RangeError('Index out of range');if(offset<0)throw new RangeError('Index out of range');}function writeFloat(buf,value,offset,littleEndian,noAssert){value=+value;offset=offset>>>0;if(!noAssert){checkIEEE754(buf,value,offset,4,3.4028234663852886e+38,-3.4028234663852886e+38);}ieee754.write(buf,value,offset,littleEndian,23,4);return offset+4;}Buffer.prototype.writeFloatLE=function writeFloatLE(value,offset,noAssert){return writeFloat(this,value,offset,true,noAssert);};Buffer.prototype.writeFloatBE=function writeFloatBE(value,offset,noAssert){return writeFloat(this,value,offset,false,noAssert);};function writeDouble(buf,value,offset,littleEndian,noAssert){value=+value;offset=offset>>>0;if(!noAssert){checkIEEE754(buf,value,offset,8,1.7976931348623157E+308,-1.7976931348623157E+308);}ieee754.write(buf,value,offset,littleEndian,52,8);return offset+8;}Buffer.prototype.writeDoubleLE=function writeDoubleLE(value,offset,noAssert){return writeDouble(this,value,offset,true,noAssert);};Buffer.prototype.writeDoubleBE=function writeDoubleBE(value,offset,noAssert){return writeDouble(this,value,offset,false,noAssert);};// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) |
|
|
Buffer.prototype.copy=function copy(target,targetStart,start,end){if(!Buffer.isBuffer(target))throw new TypeError('argument should be a Buffer');if(!start)start=0;if(!end&&end!==0)end=this.length;if(targetStart>=target.length)targetStart=target.length;if(!targetStart)targetStart=0;if(end>0&&end<start)end=start;// Copy 0 bytes; we're done |
|
|
if(end===start)return 0;if(target.length===0||this.length===0)return 0;// Fatal error conditions |
|
|
if(targetStart<0){throw new RangeError('targetStart out of bounds');}if(start<0||start>=this.length)throw new RangeError('Index out of range');if(end<0)throw new RangeError('sourceEnd out of bounds');// Are we oob? |
|
|
if(end>this.length)end=this.length;if(target.length-targetStart<end-start){end=target.length-targetStart+start;}var len=end-start;if(this===target&&typeof Uint8Array.prototype.copyWithin==='function'){// Use built-in when available, missing from IE11 |
|
|
this.copyWithin(targetStart,start,end);}else if(this===target&&start<targetStart&&targetStart<end){// descending copy from end |
|
|
for(var i=len-1;i>=0;--i){target[i+targetStart]=this[i+start];}}else{Uint8Array.prototype.set.call(target,this.subarray(start,end),targetStart);}return len;};// Usage: |
|
|
// buffer.fill(number[, offset[, end]]) |
|
|
// buffer.fill(buffer[, offset[, end]]) |
|
|
// buffer.fill(string[, offset[, end]][, encoding]) |
|
|
Buffer.prototype.fill=function fill(val,start,end,encoding){// Handle string cases: |
|
|
if(typeof val==='string'){if(typeof start==='string'){encoding=start;start=0;end=this.length;}else if(typeof end==='string'){encoding=end;end=this.length;}if(encoding!==undefined&&typeof encoding!=='string'){throw new TypeError('encoding must be a string');}if(typeof encoding==='string'&&!Buffer.isEncoding(encoding)){throw new TypeError('Unknown encoding: '+encoding);}if(val.length===1){var code=val.charCodeAt(0);if(encoding==='utf8'&&code<128||encoding==='latin1'){// Fast path: If `val` fits into a single byte, use that numeric value. |
|
|
val=code;}}}else if(typeof val==='number'){val=val&255;}// Invalid ranges are not set to a default, so can range check early. |
|
|
if(start<0||this.length<start||this.length<end){throw new RangeError('Out of range index');}if(end<=start){return this;}start=start>>>0;end=end===undefined?this.length:end>>>0;if(!val)val=0;var i;if(typeof val==='number'){for(i=start;i<end;++i){this[i]=val;}}else{var bytes=Buffer.isBuffer(val)?val:Buffer.from(val,encoding);var len=bytes.length;if(len===0){throw new TypeError('The value "'+val+'" is invalid for argument "value"');}for(i=0;i<end-start;++i){this[i+start]=bytes[i%len];}}return this;};// HELPER FUNCTIONS |
|
|
// ================ |
|
|
var INVALID_BASE64_RE=/[^+/0-9A-Za-z-_]/g;function base64clean(str){// Node takes equal signs as end of the Base64 encoding |
|
|
str=str.split('=')[0];// Node strips out invalid characters like \n and \t from the string, base64-js does not |
|
|
str=str.trim().replace(INVALID_BASE64_RE,'');// Node converts strings with length < 2 to '' |
|
|
if(str.length<2)return'';// Node allows for non-padded base64 strings (missing trailing ===), base64-js does not |
|
|
while(str.length%4!==0){str=str+'=';}return str;}function toHex(n){if(n<16)return'0'+n.toString(16);return n.toString(16);}function utf8ToBytes(string,units){units=units||Infinity;var codePoint;var length=string.length;var leadSurrogate=null;var bytes=[];for(var i=0;i<length;++i){codePoint=string.charCodeAt(i);// is surrogate component |
|
|
if(codePoint>0xD7FF&&codePoint<0xE000){// last char was a lead |
|
|
if(!leadSurrogate){// no lead yet |
|
|
if(codePoint>0xDBFF){// unexpected trail |
|
|
if((units-=3)>-1)bytes.push(0xEF,0xBF,0xBD);continue;}else if(i+1===length){// unpaired lead |
|
|
if((units-=3)>-1)bytes.push(0xEF,0xBF,0xBD);continue;}// valid lead |
|
|
leadSurrogate=codePoint;continue;}// 2 leads in a row |
|
|
if(codePoint<0xDC00){if((units-=3)>-1)bytes.push(0xEF,0xBF,0xBD);leadSurrogate=codePoint;continue;}// valid surrogate pair |
|
|
codePoint=(leadSurrogate-0xD800<<10|codePoint-0xDC00)+0x10000;}else if(leadSurrogate){// valid bmp char, but last char was a lead |
|
|
if((units-=3)>-1)bytes.push(0xEF,0xBF,0xBD);}leadSurrogate=null;// encode utf8 |
|
|
if(codePoint<0x80){if((units-=1)<0)break;bytes.push(codePoint);}else if(codePoint<0x800){if((units-=2)<0)break;bytes.push(codePoint>>0x6|0xC0,codePoint&0x3F|0x80);}else if(codePoint<0x10000){if((units-=3)<0)break;bytes.push(codePoint>>0xC|0xE0,codePoint>>0x6&0x3F|0x80,codePoint&0x3F|0x80);}else if(codePoint<0x110000){if((units-=4)<0)break;bytes.push(codePoint>>0x12|0xF0,codePoint>>0xC&0x3F|0x80,codePoint>>0x6&0x3F|0x80,codePoint&0x3F|0x80);}else{throw new Error('Invalid code point');}}return bytes;}function asciiToBytes(str){var byteArray=[];for(var i=0;i<str.length;++i){// Node's code seems to be doing this and not & 0x7F.. |
|
|
byteArray.push(str.charCodeAt(i)&0xFF);}return byteArray;}function utf16leToBytes(str,units){var c,hi,lo;var byteArray=[];for(var i=0;i<str.length;++i){if((units-=2)<0)break;c=str.charCodeAt(i);hi=c>>8;lo=c%256;byteArray.push(lo);byteArray.push(hi);}return byteArray;}function base64ToBytes(str){return base64.toByteArray(base64clean(str));}function blitBuffer(src,dst,offset,length){for(var i=0;i<length;++i){if(i+offset>=dst.length||i>=src.length)break;dst[i+offset]=src[i];}return i;}// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass |
|
|
// the `instanceof` check but they should be treated as of that type. |
|
|
// See: https://github.com/feross/buffer/issues/166 |
|
|
function isInstance(obj,type){return obj instanceof type||obj!=null&&obj.constructor!=null&&obj.constructor.name!=null&&obj.constructor.name===type.name;}function numberIsNaN(obj){// For IE11 support |
|
|
return obj!==obj;// eslint-disable-line no-self-compare |
|
|
}}).call(this,require("buffer").Buffer);},{"base64-js":180,"buffer":214,"ieee754":362}],215:[function(require,module,exports){(function(Buffer){module.exports=function xor(a,b){var length=Math.min(a.length,b.length);var buffer=new Buffer(length);for(var i=0;i<length;++i){buffer[i]=a[i]^b[i];}return buffer;};}).call(this,require("buffer").Buffer);},{"buffer":214}],216:[function(require,module,exports){var Buffer=require('safe-buffer').Buffer;var Transform=require('stream').Transform;var StringDecoder=require('string_decoder').StringDecoder;var inherits=require('inherits');function CipherBase(hashMode){Transform.call(this);this.hashMode=typeof hashMode==='string';if(this.hashMode){this[hashMode]=this._finalOrDigest;}else{this.final=this._finalOrDigest;}if(this._final){this.__final=this._final;this._final=null;}this._decoder=null;this._encoding=null;}inherits(CipherBase,Transform);CipherBase.prototype.update=function(data,inputEnc,outputEnc){if(typeof data==='string'){data=Buffer.from(data,inputEnc);}var outData=this._update(data);if(this.hashMode)return this;if(outputEnc){outData=this._toString(outData,outputEnc);}return outData;};CipherBase.prototype.setAutoPadding=function(){};CipherBase.prototype.getAuthTag=function(){throw new Error('trying to get auth tag in unsupported state');};CipherBase.prototype.setAuthTag=function(){throw new Error('trying to set auth tag in unsupported state');};CipherBase.prototype.setAAD=function(){throw new Error('trying to set aad in unsupported state');};CipherBase.prototype._transform=function(data,_,next){var err;try{if(this.hashMode){this._update(data);}else{this.push(this._update(data));}}catch(e){err=e;}finally{next(err);}};CipherBase.prototype._flush=function(done){var err;try{this.push(this.__final());}catch(e){err=e;}done(err);};CipherBase.prototype._finalOrDigest=function(outputEnc){var outData=this.__final()||Buffer.alloc(0);if(outputEnc){outData=this._toString(outData,outputEnc,true);}return outData;};CipherBase.prototype._toString=function(value,enc,fin){if(!this._decoder){this._decoder=new StringDecoder(enc);this._encoding=enc;}if(this._encoding!==enc)throw new Error('can\'t switch encodings');var out=this._decoder.write(value);if(fin){out+=this._decoder.end();}return out;};module.exports=CipherBase;},{"inherits":364,"safe-buffer":470,"stream":481,"string_decoder":495}],217:[function(require,module,exports){module.exports=function(it){if(typeof it!='function'){throw TypeError(String(it)+' is not a function');}return it;};},{}],218:[function(require,module,exports){module.exports=function(it,Constructor,name){if(!(it instanceof Constructor)){throw TypeError('Incorrect '+(name?name+' ':'')+'invocation');}return it;};},{}],219:[function(require,module,exports){var isObject=require('../internals/is-object');module.exports=function(it){if(!isObject(it)){throw TypeError(String(it)+' is not an object');}return it;};},{"../internals/is-object":254}],220:[function(require,module,exports){var toIndexedObject=require('../internals/to-indexed-object');var toLength=require('../internals/to-length');var toAbsoluteIndex=require('../internals/to-absolute-index');// `Array.prototype.{ indexOf, includes }` methods implementation |
|
|
var createMethod=function createMethod(IS_INCLUDES){return function($this,el,fromIndex){var O=toIndexedObject($this);var length=toLength(O.length);var index=toAbsoluteIndex(fromIndex,length);var value;// Array#includes uses SameValueZero equality algorithm |
|
|
// eslint-disable-next-line no-self-compare |
|
|
if(IS_INCLUDES&&el!=el)while(length>index){value=O[index++];// eslint-disable-next-line no-self-compare |
|
|
if(value!=value)return true;// Array#indexOf ignores holes, Array#includes - not |
|
|
}else for(;length>index;index++){if((IS_INCLUDES||index in O)&&O[index]===el)return IS_INCLUDES||index||0;}return!IS_INCLUDES&&-1;};};module.exports={// `Array.prototype.includes` method |
|
|
// https://tc39.github.io/ecma262/#sec-array.prototype.includes |
|
|
includes:createMethod(true),// `Array.prototype.indexOf` method |
|
|
// https://tc39.github.io/ecma262/#sec-array.prototype.indexof |
|
|
indexOf:createMethod(false)};},{"../internals/to-absolute-index":289,"../internals/to-indexed-object":290,"../internals/to-length":292}],221:[function(require,module,exports){var bind=require('../internals/function-bind-context');var IndexedObject=require('../internals/indexed-object');var toObject=require('../internals/to-object');var toLength=require('../internals/to-length');var arraySpeciesCreate=require('../internals/array-species-create');var push=[].push;// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation |
|
|
var createMethod=function createMethod(TYPE){var IS_MAP=TYPE==1;var IS_FILTER=TYPE==2;var IS_SOME=TYPE==3;var IS_EVERY=TYPE==4;var IS_FIND_INDEX=TYPE==6;var NO_HOLES=TYPE==5||IS_FIND_INDEX;return function($this,callbackfn,that,specificCreate){var O=toObject($this);var self=IndexedObject(O);var boundFunction=bind(callbackfn,that,3);var length=toLength(self.length);var index=0;var create=specificCreate||arraySpeciesCreate;var target=IS_MAP?create($this,length):IS_FILTER?create($this,0):undefined;var value,result;for(;length>index;index++){if(NO_HOLES||index in self){value=self[index];result=boundFunction(value,index,O);if(TYPE){if(IS_MAP)target[index]=result;// map |
|
|
else if(result)switch(TYPE){case 3:return true;// some |
|
|
case 5:return value;// find |
|
|
case 6:return index;// findIndex |
|
|
case 2:push.call(target,value);// filter |
|
|
}else if(IS_EVERY)return false;// every |
|
|
}}}return IS_FIND_INDEX?-1:IS_SOME||IS_EVERY?IS_EVERY:target;};};module.exports={// `Array.prototype.forEach` method |
|
|
// https://tc39.github.io/ecma262/#sec-array.prototype.foreach |
|
|
forEach:createMethod(0),// `Array.prototype.map` method |
|
|
// https://tc39.github.io/ecma262/#sec-array.prototype.map |
|
|
map:createMethod(1),// `Array.prototype.filter` method |
|
|
// https://tc39.github.io/ecma262/#sec-array.prototype.filter |
|
|
filter:createMethod(2),// `Array.prototype.some` method |
|
|
// https://tc39.github.io/ecma262/#sec-array.prototype.some |
|
|
some:createMethod(3),// `Array.prototype.every` method |
|
|
// https://tc39.github.io/ecma262/#sec-array.prototype.every |
|
|
every:createMethod(4),// `Array.prototype.find` method |
|
|
// https://tc39.github.io/ecma262/#sec-array.prototype.find |
|
|
find:createMethod(5),// `Array.prototype.findIndex` method |
|
|
// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex |
|
|
findIndex:createMethod(6)};},{"../internals/array-species-create":222,"../internals/function-bind-context":239,"../internals/indexed-object":248,"../internals/to-length":292,"../internals/to-object":293}],222:[function(require,module,exports){var isObject=require('../internals/is-object');var isArray=require('../internals/is-array');var wellKnownSymbol=require('../internals/well-known-symbol');var SPECIES=wellKnownSymbol('species');// `ArraySpeciesCreate` abstract operation |
|
|
// https://tc39.github.io/ecma262/#sec-arrayspeciescreate |
|
|
module.exports=function(originalArray,length){var C;if(isArray(originalArray)){C=originalArray.constructor;// cross-realm fallback |
|
|
if(typeof C=='function'&&(C===Array||isArray(C.prototype)))C=undefined;else if(isObject(C)){C=C[SPECIES];if(C===null)C=undefined;}}return new(C===undefined?Array:C)(length===0?0:length);};},{"../internals/is-array":252,"../internals/is-object":254,"../internals/well-known-symbol":299}],223:[function(require,module,exports){var anObject=require('../internals/an-object');// call something on iterator step with safe closing on error |
|
|
module.exports=function(iterator,fn,value,ENTRIES){try{return ENTRIES?fn(anObject(value)[0],value[1]):fn(value);// 7.4.6 IteratorClose(iterator, completion) |
|
|
}catch(error){var returnMethod=iterator['return'];if(returnMethod!==undefined)anObject(returnMethod.call(iterator));throw error;}};},{"../internals/an-object":219}],224:[function(require,module,exports){var wellKnownSymbol=require('../internals/well-known-symbol');var ITERATOR=wellKnownSymbol('iterator');var SAFE_CLOSING=false;try{var called=0;var iteratorWithReturn={next:function next(){return{done:!!called++};},'return':function _return(){SAFE_CLOSING=true;}};iteratorWithReturn[ITERATOR]=function(){return this;};// eslint-disable-next-line no-throw-literal |
|
|
Array.from(iteratorWithReturn,function(){throw 2;});}catch(error){/* empty */}module.exports=function(exec,SKIP_CLOSING){if(!SKIP_CLOSING&&!SAFE_CLOSING)return false;var ITERATION_SUPPORT=false;try{var object={};object[ITERATOR]=function(){return{next:function next(){return{done:ITERATION_SUPPORT=true};}};};exec(object);}catch(error){/* empty */}return ITERATION_SUPPORT;};},{"../internals/well-known-symbol":299}],225:[function(require,module,exports){var toString={}.toString;module.exports=function(it){return toString.call(it).slice(8,-1);};},{}],226:[function(require,module,exports){var TO_STRING_TAG_SUPPORT=require('../internals/to-string-tag-support');var classofRaw=require('../internals/classof-raw');var wellKnownSymbol=require('../internals/well-known-symbol');var TO_STRING_TAG=wellKnownSymbol('toStringTag');// ES3 wrong here |
|
|
var CORRECT_ARGUMENTS=classofRaw(function(){return arguments;}())=='Arguments';// fallback for IE11 Script Access Denied error |
|
|
var tryGet=function tryGet(it,key){try{return it[key];}catch(error){/* empty */}};// getting tag from ES6+ `Object.prototype.toString` |
|
|
module.exports=TO_STRING_TAG_SUPPORT?classofRaw:function(it){var O,tag,result;return it===undefined?'Undefined':it===null?'Null'// @@toStringTag case |
|
|
:typeof(tag=tryGet(O=Object(it),TO_STRING_TAG))=='string'?tag// builtinTag case |
|
|
:CORRECT_ARGUMENTS?classofRaw(O)// ES3 arguments fallback |
|
|
:(result=classofRaw(O))=='Object'&&typeof O.callee=='function'?'Arguments':result;};},{"../internals/classof-raw":225,"../internals/to-string-tag-support":295,"../internals/well-known-symbol":299}],227:[function(require,module,exports){var has=require('../internals/has');var ownKeys=require('../internals/own-keys');var getOwnPropertyDescriptorModule=require('../internals/object-get-own-property-descriptor');var definePropertyModule=require('../internals/object-define-property');module.exports=function(target,source){var keys=ownKeys(source);var defineProperty=definePropertyModule.f;var getOwnPropertyDescriptor=getOwnPropertyDescriptorModule.f;for(var i=0;i<keys.length;i++){var key=keys[i];if(!has(target,key))defineProperty(target,key,getOwnPropertyDescriptor(source,key));}};},{"../internals/has":243,"../internals/object-define-property":266,"../internals/object-get-own-property-descriptor":267,"../internals/own-keys":274}],228:[function(require,module,exports){var DESCRIPTORS=require('../internals/descriptors');var definePropertyModule=require('../internals/object-define-property');var createPropertyDescriptor=require('../internals/create-property-descriptor');module.exports=DESCRIPTORS?function(object,key,value){return definePropertyModule.f(object,key,createPropertyDescriptor(1,value));}:function(object,key,value){object[key]=value;return object;};},{"../internals/create-property-descriptor":229,"../internals/descriptors":231,"../internals/object-define-property":266}],229:[function(require,module,exports){module.exports=function(bitmap,value){return{enumerable:!(bitmap&1),configurable:!(bitmap&2),writable:!(bitmap&4),value:value};};},{}],230:[function(require,module,exports){var path=require('../internals/path');var has=require('../internals/has');var wrappedWellKnownSymbolModule=require('../internals/well-known-symbol-wrapped');var defineProperty=require('../internals/object-define-property').f;module.exports=function(NAME){var _Symbol=path.Symbol||(path.Symbol={});if(!has(_Symbol,NAME))defineProperty(_Symbol,NAME,{value:wrappedWellKnownSymbolModule.f(NAME)});};},{"../internals/has":243,"../internals/object-define-property":266,"../internals/path":275,"../internals/well-known-symbol-wrapped":298}],231:[function(require,module,exports){var fails=require('../internals/fails');// Thank's IE8 for his funny defineProperty |
|
|
module.exports=!fails(function(){return Object.defineProperty({},1,{get:function get(){return 7;}})[1]!=7;});},{"../internals/fails":238}],232:[function(require,module,exports){var global=require('../internals/global');var isObject=require('../internals/is-object');var document=global.document;// typeof document.createElement is 'object' in old IE |
|
|
var EXISTS=isObject(document)&&isObject(document.createElement);module.exports=function(it){return EXISTS?document.createElement(it):{};};},{"../internals/global":242,"../internals/is-object":254}],233:[function(require,module,exports){var userAgent=require('../internals/engine-user-agent');module.exports=/(iphone|ipod|ipad).*applewebkit/i.test(userAgent);},{"../internals/engine-user-agent":234}],234:[function(require,module,exports){var getBuiltIn=require('../internals/get-built-in');module.exports=getBuiltIn('navigator','userAgent')||'';},{"../internals/get-built-in":240}],235:[function(require,module,exports){var global=require('../internals/global');var userAgent=require('../internals/engine-user-agent');var process=global.process;var versions=process&&process.versions;var v8=versions&&versions.v8;var match,version;if(v8){match=v8.split('.');version=match[0]+match[1];}else if(userAgent){match=userAgent.match(/Edge\/(\d+)/);if(!match||match[1]>=74){match=userAgent.match(/Chrome\/(\d+)/);if(match)version=match[1];}}module.exports=version&&+version;},{"../internals/engine-user-agent":234,"../internals/global":242}],236:[function(require,module,exports){// IE8- don't enum bug keys |
|
|
module.exports=['constructor','hasOwnProperty','isPrototypeOf','propertyIsEnumerable','toLocaleString','toString','valueOf'];},{}],237:[function(require,module,exports){var global=require('../internals/global');var getOwnPropertyDescriptor=require('../internals/object-get-own-property-descriptor').f;var createNonEnumerableProperty=require('../internals/create-non-enumerable-property');var redefine=require('../internals/redefine');var setGlobal=require('../internals/set-global');var copyConstructorProperties=require('../internals/copy-constructor-properties');var isForced=require('../internals/is-forced');/* |
|
|
options.target - name of the target object |
|
|
options.global - target is the global object |
|
|
options.stat - export as static methods of target |
|
|
options.proto - export as prototype methods of target |
|
|
options.real - real prototype method for the `pure` version |
|
|
options.forced - export even if the native feature is available |
|
|
options.bind - bind methods to the target, required for the `pure` version |
|
|
options.wrap - wrap constructors to preventing global pollution, required for the `pure` version |
|
|
options.unsafe - use the simple assignment of property instead of delete + defineProperty |
|
|
options.sham - add a flag to not completely full polyfills |
|
|
options.enumerable - export as enumerable property |
|
|
options.noTargetGet - prevent calling a getter on target |
|
|
*/module.exports=function(options,source){var TARGET=options.target;var GLOBAL=options.global;var STATIC=options.stat;var FORCED,target,key,targetProperty,sourceProperty,descriptor;if(GLOBAL){target=global;}else if(STATIC){target=global[TARGET]||setGlobal(TARGET,{});}else{target=(global[TARGET]||{}).prototype;}if(target)for(key in source){sourceProperty=source[key];if(options.noTargetGet){descriptor=getOwnPropertyDescriptor(target,key);targetProperty=descriptor&&descriptor.value;}else targetProperty=target[key];FORCED=isForced(GLOBAL?key:TARGET+(STATIC?'.':'#')+key,options.forced);// contained in target |
|
|
if(!FORCED&&targetProperty!==undefined){if(_typeof2(sourceProperty)===_typeof2(targetProperty))continue;copyConstructorProperties(sourceProperty,targetProperty);}// add a flag to not completely full polyfills |
|
|
if(options.sham||targetProperty&&targetProperty.sham){createNonEnumerableProperty(sourceProperty,'sham',true);}// extend global |
|
|
redefine(target,key,sourceProperty,options);}};},{"../internals/copy-constructor-properties":227,"../internals/create-non-enumerable-property":228,"../internals/global":242,"../internals/is-forced":253,"../internals/object-get-own-property-descriptor":267,"../internals/redefine":279,"../internals/set-global":281}],238:[function(require,module,exports){module.exports=function(exec){try{return!!exec();}catch(error){return true;}};},{}],239:[function(require,module,exports){var aFunction=require('../internals/a-function');// optional / simple context binding |
|
|
module.exports=function(fn,that,length){aFunction(fn);if(that===undefined)return fn;switch(length){case 0:return function(){return fn.call(that);};case 1:return function(a){return fn.call(that,a);};case 2:return function(a,b){return fn.call(that,a,b);};case 3:return function(a,b,c){return fn.call(that,a,b,c);};}return function()/* ...args */{return fn.apply(that,arguments);};};},{"../internals/a-function":217}],240:[function(require,module,exports){var path=require('../internals/path');var global=require('../internals/global');var aFunction=function aFunction(variable){return typeof variable=='function'?variable:undefined;};module.exports=function(namespace,method){return arguments.length<2?aFunction(path[namespace])||aFunction(global[namespace]):path[namespace]&&path[namespace][method]||global[namespace]&&global[namespace][method];};},{"../internals/global":242,"../internals/path":275}],241:[function(require,module,exports){var classof=require('../internals/classof');var Iterators=require('../internals/iterators');var wellKnownSymbol=require('../internals/well-known-symbol');var ITERATOR=wellKnownSymbol('iterator');module.exports=function(it){if(it!=undefined)return it[ITERATOR]||it['@@iterator']||Iterators[classof(it)];};},{"../internals/classof":226,"../internals/iterators":257,"../internals/well-known-symbol":299}],242:[function(require,module,exports){(function(global){var check=function check(it){return it&&it.Math==Math&⁢};// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 |
|
|
module.exports=// eslint-disable-next-line no-undef |
|
|
check((typeof globalThis==="undefined"?"undefined":_typeof2(globalThis))=='object'&&globalThis)||check((typeof window==="undefined"?"undefined":_typeof2(window))=='object'&&window)||check((typeof self==="undefined"?"undefined":_typeof2(self))=='object'&&self)||check(_typeof2(global)=='object'&&global)||// eslint-disable-next-line no-new-func |
|
|
Function('return this')();}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{}],243:[function(require,module,exports){var hasOwnProperty={}.hasOwnProperty;module.exports=function(it,key){return hasOwnProperty.call(it,key);};},{}],244:[function(require,module,exports){module.exports={};},{}],245:[function(require,module,exports){var global=require('../internals/global');module.exports=function(a,b){var console=global.console;if(console&&console.error){arguments.length===1?console.error(a):console.error(a,b);}};},{"../internals/global":242}],246:[function(require,module,exports){var getBuiltIn=require('../internals/get-built-in');module.exports=getBuiltIn('document','documentElement');},{"../internals/get-built-in":240}],247:[function(require,module,exports){var DESCRIPTORS=require('../internals/descriptors');var fails=require('../internals/fails');var createElement=require('../internals/document-create-element');// Thank's IE8 for his funny defineProperty |
|
|
module.exports=!DESCRIPTORS&&!fails(function(){return Object.defineProperty(createElement('div'),'a',{get:function get(){return 7;}}).a!=7;});},{"../internals/descriptors":231,"../internals/document-create-element":232,"../internals/fails":238}],248:[function(require,module,exports){var fails=require('../internals/fails');var classof=require('../internals/classof-raw');var split=''.split;// fallback for non-array-like ES3 and non-enumerable old V8 strings |
|
|
module.exports=fails(function(){// throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 |
|
|
// eslint-disable-next-line no-prototype-builtins |
|
|
return!Object('z').propertyIsEnumerable(0);})?function(it){return classof(it)=='String'?split.call(it,''):Object(it);}:Object;},{"../internals/classof-raw":225,"../internals/fails":238}],249:[function(require,module,exports){var store=require('../internals/shared-store');var functionToString=Function.toString;// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper |
|
|
if(typeof store.inspectSource!='function'){store.inspectSource=function(it){return functionToString.call(it);};}module.exports=store.inspectSource;},{"../internals/shared-store":285}],250:[function(require,module,exports){var NATIVE_WEAK_MAP=require('../internals/native-weak-map');var global=require('../internals/global');var isObject=require('../internals/is-object');var createNonEnumerableProperty=require('../internals/create-non-enumerable-property');var objectHas=require('../internals/has');var sharedKey=require('../internals/shared-key');var hiddenKeys=require('../internals/hidden-keys');var WeakMap=global.WeakMap;var set,get,has;var enforce=function enforce(it){return has(it)?get(it):set(it,{});};var getterFor=function getterFor(TYPE){return function(it){var state;if(!isObject(it)||(state=get(it)).type!==TYPE){throw TypeError('Incompatible receiver, '+TYPE+' required');}return state;};};if(NATIVE_WEAK_MAP){var store=new WeakMap();var wmget=store.get;var wmhas=store.has;var wmset=store.set;set=function set(it,metadata){wmset.call(store,it,metadata);return metadata;};get=function get(it){return wmget.call(store,it)||{};};has=function has(it){return wmhas.call(store,it);};}else{var STATE=sharedKey('state');hiddenKeys[STATE]=true;set=function set(it,metadata){createNonEnumerableProperty(it,STATE,metadata);return metadata;};get=function get(it){return objectHas(it,STATE)?it[STATE]:{};};has=function has(it){return objectHas(it,STATE);};}module.exports={set:set,get:get,has:has,enforce:enforce,getterFor:getterFor};},{"../internals/create-non-enumerable-property":228,"../internals/global":242,"../internals/has":243,"../internals/hidden-keys":244,"../internals/is-object":254,"../internals/native-weak-map":261,"../internals/shared-key":284}],251:[function(require,module,exports){var wellKnownSymbol=require('../internals/well-known-symbol');var Iterators=require('../internals/iterators');var ITERATOR=wellKnownSymbol('iterator');var ArrayPrototype=Array.prototype;// check on default Array iterator |
|
|
module.exports=function(it){return it!==undefined&&(Iterators.Array===it||ArrayPrototype[ITERATOR]===it);};},{"../internals/iterators":257,"../internals/well-known-symbol":299}],252:[function(require,module,exports){var classof=require('../internals/classof-raw');// `IsArray` abstract operation |
|
|
// https://tc39.github.io/ecma262/#sec-isarray |
|
|
module.exports=Array.isArray||function isArray(arg){return classof(arg)=='Array';};},{"../internals/classof-raw":225}],253:[function(require,module,exports){var fails=require('../internals/fails');var replacement=/#|\.prototype\./;var isForced=function isForced(feature,detection){var value=data[normalize(feature)];return value==POLYFILL?true:value==NATIVE?false:typeof detection=='function'?fails(detection):!!detection;};var normalize=isForced.normalize=function(string){return String(string).replace(replacement,'.').toLowerCase();};var data=isForced.data={};var NATIVE=isForced.NATIVE='N';var POLYFILL=isForced.POLYFILL='P';module.exports=isForced;},{"../internals/fails":238}],254:[function(require,module,exports){module.exports=function(it){return _typeof2(it)==='object'?it!==null:typeof it==='function';};},{}],255:[function(require,module,exports){module.exports=false;},{}],256:[function(require,module,exports){var anObject=require('../internals/an-object');var isArrayIteratorMethod=require('../internals/is-array-iterator-method');var toLength=require('../internals/to-length');var bind=require('../internals/function-bind-context');var getIteratorMethod=require('../internals/get-iterator-method');var callWithSafeIterationClosing=require('../internals/call-with-safe-iteration-closing');var Result=function Result(stopped,result){this.stopped=stopped;this.result=result;};var iterate=module.exports=function(iterable,fn,that,AS_ENTRIES,IS_ITERATOR){var boundFunction=bind(fn,that,AS_ENTRIES?2:1);var iterator,iterFn,index,length,result,next,step;if(IS_ITERATOR){iterator=iterable;}else{iterFn=getIteratorMethod(iterable);if(typeof iterFn!='function')throw TypeError('Target is not iterable');// optimisation for array iterators |
|
|
if(isArrayIteratorMethod(iterFn)){for(index=0,length=toLength(iterable.length);length>index;index++){result=AS_ENTRIES?boundFunction(anObject(step=iterable[index])[0],step[1]):boundFunction(iterable[index]);if(result&&result instanceof Result)return result;}return new Result(false);}iterator=iterFn.call(iterable);}next=iterator.next;while(!(step=next.call(iterator)).done){result=callWithSafeIterationClosing(iterator,boundFunction,step.value,AS_ENTRIES);if(_typeof2(result)=='object'&&result&&result instanceof Result)return result;}return new Result(false);};iterate.stop=function(result){return new Result(true,result);};},{"../internals/an-object":219,"../internals/call-with-safe-iteration-closing":223,"../internals/function-bind-context":239,"../internals/get-iterator-method":241,"../internals/is-array-iterator-method":251,"../internals/to-length":292}],257:[function(require,module,exports){arguments[4][244][0].apply(exports,arguments);},{"dup":244}],258:[function(require,module,exports){var global=require('../internals/global');var getOwnPropertyDescriptor=require('../internals/object-get-own-property-descriptor').f;var classof=require('../internals/classof-raw');var macrotask=require('../internals/task').set;var IS_IOS=require('../internals/engine-is-ios');var MutationObserver=global.MutationObserver||global.WebKitMutationObserver;var process=global.process;var Promise=global.Promise;var IS_NODE=classof(process)=='process';// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` |
|
|
var queueMicrotaskDescriptor=getOwnPropertyDescriptor(global,'queueMicrotask');var queueMicrotask=queueMicrotaskDescriptor&&queueMicrotaskDescriptor.value;var flush,head,last,notify,toggle,node,promise,then;// modern engines have queueMicrotask method |
|
|
if(!queueMicrotask){flush=function flush(){var parent,fn;if(IS_NODE&&(parent=process.domain))parent.exit();while(head){fn=head.fn;head=head.next;try{fn();}catch(error){if(head)notify();else last=undefined;throw error;}}last=undefined;if(parent)parent.enter();};// Node.js |
|
|
if(IS_NODE){notify=function notify(){process.nextTick(flush);};// browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 |
|
|
}else if(MutationObserver&&!IS_IOS){toggle=true;node=document.createTextNode('');new MutationObserver(flush).observe(node,{characterData:true});notify=function notify(){node.data=toggle=!toggle;};// environments with maybe non-completely correct, but existent Promise |
|
|
}else if(Promise&&Promise.resolve){// Promise.resolve without an argument throws an error in LG WebOS 2 |
|
|
promise=Promise.resolve(undefined);then=promise.then;notify=function notify(){then.call(promise,flush);};// for other environments - macrotask based on: |
|
|
// - setImmediate |
|
|
// - MessageChannel |
|
|
// - window.postMessag |
|
|
// - onreadystatechange |
|
|
// - setTimeout |
|
|
}else{notify=function notify(){// strange IE + webpack dev server bug - use .call(global) |
|
|
macrotask.call(global,flush);};}}module.exports=queueMicrotask||function(fn){var task={fn:fn,next:undefined};if(last)last.next=task;if(!head){head=task;notify();}last=task;};},{"../internals/classof-raw":225,"../internals/engine-is-ios":233,"../internals/global":242,"../internals/object-get-own-property-descriptor":267,"../internals/task":288}],259:[function(require,module,exports){var global=require('../internals/global');module.exports=global.Promise;},{"../internals/global":242}],260:[function(require,module,exports){var fails=require('../internals/fails');module.exports=!!Object.getOwnPropertySymbols&&!fails(function(){// Chrome 38 Symbol has incorrect toString conversion |
|
|
// eslint-disable-next-line no-undef |
|
|
return!String(Symbol());});},{"../internals/fails":238}],261:[function(require,module,exports){var global=require('../internals/global');var inspectSource=require('../internals/inspect-source');var WeakMap=global.WeakMap;module.exports=typeof WeakMap==='function'&&/native code/.test(inspectSource(WeakMap));},{"../internals/global":242,"../internals/inspect-source":249}],262:[function(require,module,exports){'use strict';var aFunction=require('../internals/a-function');var PromiseCapability=function PromiseCapability(C){var resolve,reject;this.promise=new C(function($$resolve,$$reject){if(resolve!==undefined||reject!==undefined)throw TypeError('Bad Promise constructor');resolve=$$resolve;reject=$$reject;});this.resolve=aFunction(resolve);this.reject=aFunction(reject);};// 25.4.1.5 NewPromiseCapability(C) |
|
|
module.exports.f=function(C){return new PromiseCapability(C);};},{"../internals/a-function":217}],263:[function(require,module,exports){'use strict';var DESCRIPTORS=require('../internals/descriptors');var fails=require('../internals/fails');var objectKeys=require('../internals/object-keys');var getOwnPropertySymbolsModule=require('../internals/object-get-own-property-symbols');var propertyIsEnumerableModule=require('../internals/object-property-is-enumerable');var toObject=require('../internals/to-object');var IndexedObject=require('../internals/indexed-object');var nativeAssign=Object.assign;var defineProperty=Object.defineProperty;// `Object.assign` method |
|
|
// https://tc39.github.io/ecma262/#sec-object.assign |
|
|
module.exports=!nativeAssign||fails(function(){// should have correct order of operations (Edge bug) |
|
|
if(DESCRIPTORS&&nativeAssign({b:1},nativeAssign(defineProperty({},'a',{enumerable:true,get:function get(){defineProperty(this,'b',{value:3,enumerable:false});}}),{b:2})).b!==1)return true;// should work with symbols and should have deterministic property order (V8 bug) |
|
|
var A={};var B={};// eslint-disable-next-line no-undef |
|
|
var symbol=Symbol();var alphabet='abcdefghijklmnopqrst';A[symbol]=7;alphabet.split('').forEach(function(chr){B[chr]=chr;});return nativeAssign({},A)[symbol]!=7||objectKeys(nativeAssign({},B)).join('')!=alphabet;})?function assign(target,source){// eslint-disable-line no-unused-vars |
|
|
var T=toObject(target);var argumentsLength=arguments.length;var index=1;var getOwnPropertySymbols=getOwnPropertySymbolsModule.f;var propertyIsEnumerable=propertyIsEnumerableModule.f;while(argumentsLength>index){var S=IndexedObject(arguments[index++]);var keys=getOwnPropertySymbols?objectKeys(S).concat(getOwnPropertySymbols(S)):objectKeys(S);var length=keys.length;var j=0;var key;while(length>j){key=keys[j++];if(!DESCRIPTORS||propertyIsEnumerable.call(S,key))T[key]=S[key];}}return T;}:nativeAssign;},{"../internals/descriptors":231,"../internals/fails":238,"../internals/indexed-object":248,"../internals/object-get-own-property-symbols":270,"../internals/object-keys":272,"../internals/object-property-is-enumerable":273,"../internals/to-object":293}],264:[function(require,module,exports){var anObject=require('../internals/an-object');var defineProperties=require('../internals/object-define-properties');var enumBugKeys=require('../internals/enum-bug-keys');var hiddenKeys=require('../internals/hidden-keys');var html=require('../internals/html');var documentCreateElement=require('../internals/document-create-element');var sharedKey=require('../internals/shared-key');var GT='>';var LT='<';var PROTOTYPE='prototype';var SCRIPT='script';var IE_PROTO=sharedKey('IE_PROTO');var EmptyConstructor=function EmptyConstructor(){/* empty */};var scriptTag=function scriptTag(content){return LT+SCRIPT+GT+content+LT+'/'+SCRIPT+GT;};// Create object with fake `null` prototype: use ActiveX Object with cleared prototype |
|
|
var NullProtoObjectViaActiveX=function NullProtoObjectViaActiveX(activeXDocument){activeXDocument.write(scriptTag(''));activeXDocument.close();var temp=activeXDocument.parentWindow.Object;activeXDocument=null;// avoid memory leak |
|
|
return temp;};// Create object with fake `null` prototype: use iframe Object with cleared prototype |
|
|
var NullProtoObjectViaIFrame=function NullProtoObjectViaIFrame(){// Thrash, waste and sodomy: IE GC bug |
|
|
var iframe=documentCreateElement('iframe');var JS='java'+SCRIPT+':';var iframeDocument;iframe.style.display='none';html.appendChild(iframe);// https://github.com/zloirock/core-js/issues/475 |
|
|
iframe.src=String(JS);iframeDocument=iframe.contentWindow.document;iframeDocument.open();iframeDocument.write(scriptTag('document.F=Object'));iframeDocument.close();return iframeDocument.F;};// Check for document.domain and active x support |
|
|
// No need to use active x approach when document.domain is not set |
|
|
// see https://github.com/es-shims/es5-shim/issues/150 |
|
|
// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 |
|
|
// avoid IE GC bug |
|
|
var activeXDocument;var _NullProtoObject=function NullProtoObject(){try{/* global ActiveXObject */activeXDocument=document.domain&&new ActiveXObject('htmlfile');}catch(error){/* ignore */}_NullProtoObject=activeXDocument?NullProtoObjectViaActiveX(activeXDocument):NullProtoObjectViaIFrame();var length=enumBugKeys.length;while(length--){delete _NullProtoObject[PROTOTYPE][enumBugKeys[length]];}return _NullProtoObject();};hiddenKeys[IE_PROTO]=true;// `Object.create` method |
|
|
// https://tc39.github.io/ecma262/#sec-object.create |
|
|
module.exports=Object.create||function create(O,Properties){var result;if(O!==null){EmptyConstructor[PROTOTYPE]=anObject(O);result=new EmptyConstructor();EmptyConstructor[PROTOTYPE]=null;// add "__proto__" for Object.getPrototypeOf polyfill |
|
|
result[IE_PROTO]=O;}else result=_NullProtoObject();return Properties===undefined?result:defineProperties(result,Properties);};},{"../internals/an-object":219,"../internals/document-create-element":232,"../internals/enum-bug-keys":236,"../internals/hidden-keys":244,"../internals/html":246,"../internals/object-define-properties":265,"../internals/shared-key":284}],265:[function(require,module,exports){var DESCRIPTORS=require('../internals/descriptors');var definePropertyModule=require('../internals/object-define-property');var anObject=require('../internals/an-object');var objectKeys=require('../internals/object-keys');// `Object.defineProperties` method |
|
|
// https://tc39.github.io/ecma262/#sec-object.defineproperties |
|
|
module.exports=DESCRIPTORS?Object.defineProperties:function defineProperties(O,Properties){anObject(O);var keys=objectKeys(Properties);var length=keys.length;var index=0;var key;while(length>index){definePropertyModule.f(O,key=keys[index++],Properties[key]);}return O;};},{"../internals/an-object":219,"../internals/descriptors":231,"../internals/object-define-property":266,"../internals/object-keys":272}],266:[function(require,module,exports){var DESCRIPTORS=require('../internals/descriptors');var IE8_DOM_DEFINE=require('../internals/ie8-dom-define');var anObject=require('../internals/an-object');var toPrimitive=require('../internals/to-primitive');var nativeDefineProperty=Object.defineProperty;// `Object.defineProperty` method |
|
|
// https://tc39.github.io/ecma262/#sec-object.defineproperty |
|
|
exports.f=DESCRIPTORS?nativeDefineProperty:function defineProperty(O,P,Attributes){anObject(O);P=toPrimitive(P,true);anObject(Attributes);if(IE8_DOM_DEFINE)try{return nativeDefineProperty(O,P,Attributes);}catch(error){/* empty */}if('get'in Attributes||'set'in Attributes)throw TypeError('Accessors not supported');if('value'in Attributes)O[P]=Attributes.value;return O;};},{"../internals/an-object":219,"../internals/descriptors":231,"../internals/ie8-dom-define":247,"../internals/to-primitive":294}],267:[function(require,module,exports){var DESCRIPTORS=require('../internals/descriptors');var propertyIsEnumerableModule=require('../internals/object-property-is-enumerable');var createPropertyDescriptor=require('../internals/create-property-descriptor');var toIndexedObject=require('../internals/to-indexed-object');var toPrimitive=require('../internals/to-primitive');var has=require('../internals/has');var IE8_DOM_DEFINE=require('../internals/ie8-dom-define');var nativeGetOwnPropertyDescriptor=Object.getOwnPropertyDescriptor;// `Object.getOwnPropertyDescriptor` method |
|
|
// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor |
|
|
exports.f=DESCRIPTORS?nativeGetOwnPropertyDescriptor:function getOwnPropertyDescriptor(O,P){O=toIndexedObject(O);P=toPrimitive(P,true);if(IE8_DOM_DEFINE)try{return nativeGetOwnPropertyDescriptor(O,P);}catch(error){/* empty */}if(has(O,P))return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O,P),O[P]);};},{"../internals/create-property-descriptor":229,"../internals/descriptors":231,"../internals/has":243,"../internals/ie8-dom-define":247,"../internals/object-property-is-enumerable":273,"../internals/to-indexed-object":290,"../internals/to-primitive":294}],268:[function(require,module,exports){var toIndexedObject=require('../internals/to-indexed-object');var nativeGetOwnPropertyNames=require('../internals/object-get-own-property-names').f;var toString={}.toString;var windowNames=(typeof window==="undefined"?"undefined":_typeof2(window))=='object'&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];var getWindowNames=function getWindowNames(it){try{return nativeGetOwnPropertyNames(it);}catch(error){return windowNames.slice();}};// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window |
|
|
module.exports.f=function getOwnPropertyNames(it){return windowNames&&toString.call(it)=='[object Window]'?getWindowNames(it):nativeGetOwnPropertyNames(toIndexedObject(it));};},{"../internals/object-get-own-property-names":269,"../internals/to-indexed-object":290}],269:[function(require,module,exports){var internalObjectKeys=require('../internals/object-keys-internal');var enumBugKeys=require('../internals/enum-bug-keys');var hiddenKeys=enumBugKeys.concat('length','prototype');// `Object.getOwnPropertyNames` method |
|
|
// https://tc39.github.io/ecma262/#sec-object.getownpropertynames |
|
|
exports.f=Object.getOwnPropertyNames||function getOwnPropertyNames(O){return internalObjectKeys(O,hiddenKeys);};},{"../internals/enum-bug-keys":236,"../internals/object-keys-internal":271}],270:[function(require,module,exports){exports.f=Object.getOwnPropertySymbols;},{}],271:[function(require,module,exports){var has=require('../internals/has');var toIndexedObject=require('../internals/to-indexed-object');var indexOf=require('../internals/array-includes').indexOf;var hiddenKeys=require('../internals/hidden-keys');module.exports=function(object,names){var O=toIndexedObject(object);var i=0;var result=[];var key;for(key in O){!has(hiddenKeys,key)&&has(O,key)&&result.push(key);}// Don't enum bug & hidden keys |
|
|
while(names.length>i){if(has(O,key=names[i++])){~indexOf(result,key)||result.push(key);}}return result;};},{"../internals/array-includes":220,"../internals/has":243,"../internals/hidden-keys":244,"../internals/to-indexed-object":290}],272:[function(require,module,exports){var internalObjectKeys=require('../internals/object-keys-internal');var enumBugKeys=require('../internals/enum-bug-keys');// `Object.keys` method |
|
|
// https://tc39.github.io/ecma262/#sec-object.keys |
|
|
module.exports=Object.keys||function keys(O){return internalObjectKeys(O,enumBugKeys);};},{"../internals/enum-bug-keys":236,"../internals/object-keys-internal":271}],273:[function(require,module,exports){'use strict';var nativePropertyIsEnumerable={}.propertyIsEnumerable;var getOwnPropertyDescriptor=Object.getOwnPropertyDescriptor;// Nashorn ~ JDK8 bug |
|
|
var NASHORN_BUG=getOwnPropertyDescriptor&&!nativePropertyIsEnumerable.call({1:2},1);// `Object.prototype.propertyIsEnumerable` method implementation |
|
|
// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable |
|
|
exports.f=NASHORN_BUG?function propertyIsEnumerable(V){var descriptor=getOwnPropertyDescriptor(this,V);return!!descriptor&&descriptor.enumerable;}:nativePropertyIsEnumerable;},{}],274:[function(require,module,exports){var getBuiltIn=require('../internals/get-built-in');var getOwnPropertyNamesModule=require('../internals/object-get-own-property-names');var getOwnPropertySymbolsModule=require('../internals/object-get-own-property-symbols');var anObject=require('../internals/an-object');// all object keys, includes non-enumerable and symbols |
|
|
module.exports=getBuiltIn('Reflect','ownKeys')||function ownKeys(it){var keys=getOwnPropertyNamesModule.f(anObject(it));var getOwnPropertySymbols=getOwnPropertySymbolsModule.f;return getOwnPropertySymbols?keys.concat(getOwnPropertySymbols(it)):keys;};},{"../internals/an-object":219,"../internals/get-built-in":240,"../internals/object-get-own-property-names":269,"../internals/object-get-own-property-symbols":270}],275:[function(require,module,exports){var global=require('../internals/global');module.exports=global;},{"../internals/global":242}],276:[function(require,module,exports){module.exports=function(exec){try{return{error:false,value:exec()};}catch(error){return{error:true,value:error};}};},{}],277:[function(require,module,exports){var anObject=require('../internals/an-object');var isObject=require('../internals/is-object');var newPromiseCapability=require('../internals/new-promise-capability');module.exports=function(C,x){anObject(C);if(isObject(x)&&x.constructor===C)return x;var promiseCapability=newPromiseCapability.f(C);var resolve=promiseCapability.resolve;resolve(x);return promiseCapability.promise;};},{"../internals/an-object":219,"../internals/is-object":254,"../internals/new-promise-capability":262}],278:[function(require,module,exports){var redefine=require('../internals/redefine');module.exports=function(target,src,options){for(var key in src){redefine(target,key,src[key],options);}return target;};},{"../internals/redefine":279}],279:[function(require,module,exports){var global=require('../internals/global');var createNonEnumerableProperty=require('../internals/create-non-enumerable-property');var has=require('../internals/has');var setGlobal=require('../internals/set-global');var inspectSource=require('../internals/inspect-source');var InternalStateModule=require('../internals/internal-state');var getInternalState=InternalStateModule.get;var enforceInternalState=InternalStateModule.enforce;var TEMPLATE=String(String).split('String');(module.exports=function(O,key,value,options){var unsafe=options?!!options.unsafe:false;var simple=options?!!options.enumerable:false;var noTargetGet=options?!!options.noTargetGet:false;if(typeof value=='function'){if(typeof key=='string'&&!has(value,'name'))createNonEnumerableProperty(value,'name',key);enforceInternalState(value).source=TEMPLATE.join(typeof key=='string'?key:'');}if(O===global){if(simple)O[key]=value;else setGlobal(key,value);return;}else if(!unsafe){delete O[key];}else if(!noTargetGet&&O[key]){simple=true;}if(simple)O[key]=value;else createNonEnumerableProperty(O,key,value);// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative |
|
|
})(Function.prototype,'toString',function toString(){return typeof this=='function'&&getInternalState(this).source||inspectSource(this);});},{"../internals/create-non-enumerable-property":228,"../internals/global":242,"../internals/has":243,"../internals/inspect-source":249,"../internals/internal-state":250,"../internals/set-global":281}],280:[function(require,module,exports){// `RequireObjectCoercible` abstract operation |
|
|
// https://tc39.github.io/ecma262/#sec-requireobjectcoercible |
|
|
module.exports=function(it){if(it==undefined)throw TypeError("Can't call method on "+it);return it;};},{}],281:[function(require,module,exports){var global=require('../internals/global');var createNonEnumerableProperty=require('../internals/create-non-enumerable-property');module.exports=function(key,value){try{createNonEnumerableProperty(global,key,value);}catch(error){global[key]=value;}return value;};},{"../internals/create-non-enumerable-property":228,"../internals/global":242}],282:[function(require,module,exports){'use strict';var getBuiltIn=require('../internals/get-built-in');var definePropertyModule=require('../internals/object-define-property');var wellKnownSymbol=require('../internals/well-known-symbol');var DESCRIPTORS=require('../internals/descriptors');var SPECIES=wellKnownSymbol('species');module.exports=function(CONSTRUCTOR_NAME){var Constructor=getBuiltIn(CONSTRUCTOR_NAME);var defineProperty=definePropertyModule.f;if(DESCRIPTORS&&Constructor&&!Constructor[SPECIES]){defineProperty(Constructor,SPECIES,{configurable:true,get:function get(){return this;}});}};},{"../internals/descriptors":231,"../internals/get-built-in":240,"../internals/object-define-property":266,"../internals/well-known-symbol":299}],283:[function(require,module,exports){var defineProperty=require('../internals/object-define-property').f;var has=require('../internals/has');var wellKnownSymbol=require('../internals/well-known-symbol');var TO_STRING_TAG=wellKnownSymbol('toStringTag');module.exports=function(it,TAG,STATIC){if(it&&!has(it=STATIC?it:it.prototype,TO_STRING_TAG)){defineProperty(it,TO_STRING_TAG,{configurable:true,value:TAG});}};},{"../internals/has":243,"../internals/object-define-property":266,"../internals/well-known-symbol":299}],284:[function(require,module,exports){var shared=require('../internals/shared');var uid=require('../internals/uid');var keys=shared('keys');module.exports=function(key){return keys[key]||(keys[key]=uid(key));};},{"../internals/shared":286,"../internals/uid":296}],285:[function(require,module,exports){var global=require('../internals/global');var setGlobal=require('../internals/set-global');var SHARED='__core-js_shared__';var store=global[SHARED]||setGlobal(SHARED,{});module.exports=store;},{"../internals/global":242,"../internals/set-global":281}],286:[function(require,module,exports){var IS_PURE=require('../internals/is-pure');var store=require('../internals/shared-store');(module.exports=function(key,value){return store[key]||(store[key]=value!==undefined?value:{});})('versions',[]).push({version:'3.6.5',mode:IS_PURE?'pure':'global',copyright:'© 2020 Denis Pushkarev (zloirock.ru)'});},{"../internals/is-pure":255,"../internals/shared-store":285}],287:[function(require,module,exports){var anObject=require('../internals/an-object');var aFunction=require('../internals/a-function');var wellKnownSymbol=require('../internals/well-known-symbol');var SPECIES=wellKnownSymbol('species');// `SpeciesConstructor` abstract operation |
|
|
// https://tc39.github.io/ecma262/#sec-speciesconstructor |
|
|
module.exports=function(O,defaultConstructor){var C=anObject(O).constructor;var S;return C===undefined||(S=anObject(C)[SPECIES])==undefined?defaultConstructor:aFunction(S);};},{"../internals/a-function":217,"../internals/an-object":219,"../internals/well-known-symbol":299}],288:[function(require,module,exports){var global=require('../internals/global');var fails=require('../internals/fails');var classof=require('../internals/classof-raw');var bind=require('../internals/function-bind-context');var html=require('../internals/html');var createElement=require('../internals/document-create-element');var IS_IOS=require('../internals/engine-is-ios');var location=global.location;var set=global.setImmediate;var clear=global.clearImmediate;var process=global.process;var MessageChannel=global.MessageChannel;var Dispatch=global.Dispatch;var counter=0;var queue={};var ONREADYSTATECHANGE='onreadystatechange';var defer,channel,port;var run=function run(id){// eslint-disable-next-line no-prototype-builtins |
|
|
if(queue.hasOwnProperty(id)){var fn=queue[id];delete queue[id];fn();}};var runner=function runner(id){return function(){run(id);};};var listener=function listener(event){run(event.data);};var post=function post(id){// old engines have not location.origin |
|
|
global.postMessage(id+'',location.protocol+'//'+location.host);};// Node.js 0.9+ & IE10+ has setImmediate, otherwise: |
|
|
if(!set||!clear){set=function setImmediate(fn){var args=[];var i=1;while(arguments.length>i){args.push(arguments[i++]);}queue[++counter]=function(){// eslint-disable-next-line no-new-func |
|
|
(typeof fn=='function'?fn:Function(fn)).apply(undefined,args);};defer(counter);return counter;};clear=function clearImmediate(id){delete queue[id];};// Node.js 0.8- |
|
|
if(classof(process)=='process'){defer=function defer(id){process.nextTick(runner(id));};// Sphere (JS game engine) Dispatch API |
|
|
}else if(Dispatch&&Dispatch.now){defer=function defer(id){Dispatch.now(runner(id));};// Browsers with MessageChannel, includes WebWorkers |
|
|
// except iOS - https://github.com/zloirock/core-js/issues/624 |
|
|
}else if(MessageChannel&&!IS_IOS){channel=new MessageChannel();port=channel.port2;channel.port1.onmessage=listener;defer=bind(port.postMessage,port,1);// Browsers with postMessage, skip WebWorkers |
|
|
// IE8 has postMessage, but it's sync & typeof its postMessage is 'object' |
|
|
}else if(global.addEventListener&&typeof postMessage=='function'&&!global.importScripts&&!fails(post)&&location.protocol!=='file:'){defer=post;global.addEventListener('message',listener,false);// IE8- |
|
|
}else if(ONREADYSTATECHANGE in createElement('script')){defer=function defer(id){html.appendChild(createElement('script'))[ONREADYSTATECHANGE]=function(){html.removeChild(this);run(id);};};// Rest old browsers |
|
|
}else{defer=function defer(id){setTimeout(runner(id),0);};}}module.exports={set:set,clear:clear};},{"../internals/classof-raw":225,"../internals/document-create-element":232,"../internals/engine-is-ios":233,"../internals/fails":238,"../internals/function-bind-context":239,"../internals/global":242,"../internals/html":246}],289:[function(require,module,exports){var toInteger=require('../internals/to-integer');var max=Math.max;var min=Math.min;// Helper for a popular repeating case of the spec: |
|
|
// Let integer be ? ToInteger(index). |
|
|
// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). |
|
|
module.exports=function(index,length){var integer=toInteger(index);return integer<0?max(integer+length,0):min(integer,length);};},{"../internals/to-integer":291}],290:[function(require,module,exports){// toObject with fallback for non-array-like ES3 strings |
|
|
var IndexedObject=require('../internals/indexed-object');var requireObjectCoercible=require('../internals/require-object-coercible');module.exports=function(it){return IndexedObject(requireObjectCoercible(it));};},{"../internals/indexed-object":248,"../internals/require-object-coercible":280}],291:[function(require,module,exports){var ceil=Math.ceil;var floor=Math.floor;// `ToInteger` abstract operation |
|
|
// https://tc39.github.io/ecma262/#sec-tointeger |
|
|
module.exports=function(argument){return isNaN(argument=+argument)?0:(argument>0?floor:ceil)(argument);};},{}],292:[function(require,module,exports){var toInteger=require('../internals/to-integer');var min=Math.min;// `ToLength` abstract operation |
|
|
// https://tc39.github.io/ecma262/#sec-tolength |
|
|
module.exports=function(argument){return argument>0?min(toInteger(argument),0x1FFFFFFFFFFFFF):0;// 2 ** 53 - 1 == 9007199254740991 |
|
|
};},{"../internals/to-integer":291}],293:[function(require,module,exports){var requireObjectCoercible=require('../internals/require-object-coercible');// `ToObject` abstract operation |
|
|
// https://tc39.github.io/ecma262/#sec-toobject |
|
|
module.exports=function(argument){return Object(requireObjectCoercible(argument));};},{"../internals/require-object-coercible":280}],294:[function(require,module,exports){var isObject=require('../internals/is-object');// `ToPrimitive` abstract operation |
|
|
// https://tc39.github.io/ecma262/#sec-toprimitive |
|
|
// instead of the ES6 spec version, we didn't implement @@toPrimitive case |
|
|
// and the second argument - flag - preferred type is a string |
|
|
module.exports=function(input,PREFERRED_STRING){if(!isObject(input))return input;var fn,val;if(PREFERRED_STRING&&typeof(fn=input.toString)=='function'&&!isObject(val=fn.call(input)))return val;if(typeof(fn=input.valueOf)=='function'&&!isObject(val=fn.call(input)))return val;if(!PREFERRED_STRING&&typeof(fn=input.toString)=='function'&&!isObject(val=fn.call(input)))return val;throw TypeError("Can't convert object to primitive value");};},{"../internals/is-object":254}],295:[function(require,module,exports){var wellKnownSymbol=require('../internals/well-known-symbol');var TO_STRING_TAG=wellKnownSymbol('toStringTag');var test={};test[TO_STRING_TAG]='z';module.exports=String(test)==='[object z]';},{"../internals/well-known-symbol":299}],296:[function(require,module,exports){var id=0;var postfix=Math.random();module.exports=function(key){return'Symbol('+String(key===undefined?'':key)+')_'+(++id+postfix).toString(36);};},{}],297:[function(require,module,exports){var NATIVE_SYMBOL=require('../internals/native-symbol');module.exports=NATIVE_SYMBOL// eslint-disable-next-line no-undef |
|
|
&&!Symbol.sham// eslint-disable-next-line no-undef |
|
|
&&_typeof2(Symbol.iterator)=='symbol';},{"../internals/native-symbol":260}],298:[function(require,module,exports){var wellKnownSymbol=require('../internals/well-known-symbol');exports.f=wellKnownSymbol;},{"../internals/well-known-symbol":299}],299:[function(require,module,exports){var global=require('../internals/global');var shared=require('../internals/shared');var has=require('../internals/has');var uid=require('../internals/uid');var NATIVE_SYMBOL=require('../internals/native-symbol');var USE_SYMBOL_AS_UID=require('../internals/use-symbol-as-uid');var WellKnownSymbolsStore=shared('wks');var _Symbol2=global.Symbol;var createWellKnownSymbol=USE_SYMBOL_AS_UID?_Symbol2:_Symbol2&&_Symbol2.withoutSetter||uid;module.exports=function(name){if(!has(WellKnownSymbolsStore,name)){if(NATIVE_SYMBOL&&has(_Symbol2,name))WellKnownSymbolsStore[name]=_Symbol2[name];else WellKnownSymbolsStore[name]=createWellKnownSymbol('Symbol.'+name);}return WellKnownSymbolsStore[name];};},{"../internals/global":242,"../internals/has":243,"../internals/native-symbol":260,"../internals/shared":286,"../internals/uid":296,"../internals/use-symbol-as-uid":297}],300:[function(require,module,exports){var $=require('../internals/export');var assign=require('../internals/object-assign');// `Object.assign` method |
|
|
// https://tc39.github.io/ecma262/#sec-object.assign |
|
|
$({target:'Object',stat:true,forced:Object.assign!==assign},{assign:assign});},{"../internals/export":237,"../internals/object-assign":263}],301:[function(require,module,exports){var $=require('../internals/export');var toObject=require('../internals/to-object');var nativeKeys=require('../internals/object-keys');var fails=require('../internals/fails');var FAILS_ON_PRIMITIVES=fails(function(){nativeKeys(1);});// `Object.keys` method |
|
|
// https://tc39.github.io/ecma262/#sec-object.keys |
|
|
$({target:'Object',stat:true,forced:FAILS_ON_PRIMITIVES},{keys:function keys(it){return nativeKeys(toObject(it));}});},{"../internals/export":237,"../internals/fails":238,"../internals/object-keys":272,"../internals/to-object":293}],302:[function(require,module,exports){'use strict';var $=require('../internals/export');var IS_PURE=require('../internals/is-pure');var global=require('../internals/global');var getBuiltIn=require('../internals/get-built-in');var NativePromise=require('../internals/native-promise-constructor');var redefine=require('../internals/redefine');var redefineAll=require('../internals/redefine-all');var setToStringTag=require('../internals/set-to-string-tag');var setSpecies=require('../internals/set-species');var isObject=require('../internals/is-object');var aFunction=require('../internals/a-function');var anInstance=require('../internals/an-instance');var classof=require('../internals/classof-raw');var inspectSource=require('../internals/inspect-source');var iterate=require('../internals/iterate');var checkCorrectnessOfIteration=require('../internals/check-correctness-of-iteration');var speciesConstructor=require('../internals/species-constructor');var task=require('../internals/task').set;var microtask=require('../internals/microtask');var promiseResolve=require('../internals/promise-resolve');var hostReportErrors=require('../internals/host-report-errors');var newPromiseCapabilityModule=require('../internals/new-promise-capability');var perform=require('../internals/perform');var InternalStateModule=require('../internals/internal-state');var isForced=require('../internals/is-forced');var wellKnownSymbol=require('../internals/well-known-symbol');var V8_VERSION=require('../internals/engine-v8-version');var SPECIES=wellKnownSymbol('species');var PROMISE='Promise';var getInternalState=InternalStateModule.get;var setInternalState=InternalStateModule.set;var getInternalPromiseState=InternalStateModule.getterFor(PROMISE);var PromiseConstructor=NativePromise;var TypeError=global.TypeError;var document=global.document;var process=global.process;var $fetch=getBuiltIn('fetch');var newPromiseCapability=newPromiseCapabilityModule.f;var newGenericPromiseCapability=newPromiseCapability;var IS_NODE=classof(process)=='process';var DISPATCH_EVENT=!!(document&&document.createEvent&&global.dispatchEvent);var UNHANDLED_REJECTION='unhandledrejection';var REJECTION_HANDLED='rejectionhandled';var PENDING=0;var FULFILLED=1;var REJECTED=2;var HANDLED=1;var UNHANDLED=2;var Internal,OwnPromiseCapability,PromiseWrapper,nativeThen;var FORCED=isForced(PROMISE,function(){var GLOBAL_CORE_JS_PROMISE=inspectSource(PromiseConstructor)!==String(PromiseConstructor);if(!GLOBAL_CORE_JS_PROMISE){// V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables |
|
|
// https://bugs.chromium.org/p/chromium/issues/detail?id=830565 |
|
|
// We can't detect it synchronously, so just check versions |
|
|
if(V8_VERSION===66)return true;// Unhandled rejections tracking support, NodeJS Promise without it fails @@species test |
|
|
if(!IS_NODE&&typeof PromiseRejectionEvent!='function')return true;}// We need Promise#finally in the pure version for preventing prototype pollution |
|
|
if(IS_PURE&&!PromiseConstructor.prototype['finally'])return true;// We can't use @@species feature detection in V8 since it causes |
|
|
// deoptimization and performance degradation |
|
|
// https://github.com/zloirock/core-js/issues/679 |
|
|
if(V8_VERSION>=51&&/native code/.test(PromiseConstructor))return false;// Detect correctness of subclassing with @@species support |
|
|
var promise=PromiseConstructor.resolve(1);var FakePromise=function FakePromise(exec){exec(function(){/* empty */},function(){/* empty */});};var constructor=promise.constructor={};constructor[SPECIES]=FakePromise;return!(promise.then(function(){/* empty */})instanceof FakePromise);});var INCORRECT_ITERATION=FORCED||!checkCorrectnessOfIteration(function(iterable){PromiseConstructor.all(iterable)['catch'](function(){/* empty */});});// helpers |
|
|
var isThenable=function isThenable(it){var then;return isObject(it)&&typeof(then=it.then)=='function'?then:false;};var notify=function notify(promise,state,isReject){if(state.notified)return;state.notified=true;var chain=state.reactions;microtask(function(){var value=state.value;var ok=state.state==FULFILLED;var index=0;// variable length - can't use forEach |
|
|
while(chain.length>index){var reaction=chain[index++];var handler=ok?reaction.ok:reaction.fail;var resolve=reaction.resolve;var reject=reaction.reject;var domain=reaction.domain;var result,then,exited;try{if(handler){if(!ok){if(state.rejection===UNHANDLED)onHandleUnhandled(promise,state);state.rejection=HANDLED;}if(handler===true)result=value;else{if(domain)domain.enter();result=handler(value);// can throw |
|
|
if(domain){domain.exit();exited=true;}}if(result===reaction.promise){reject(TypeError('Promise-chain cycle'));}else if(then=isThenable(result)){then.call(result,resolve,reject);}else resolve(result);}else reject(value);}catch(error){if(domain&&!exited)domain.exit();reject(error);}}state.reactions=[];state.notified=false;if(isReject&&!state.rejection)onUnhandled(promise,state);});};var dispatchEvent=function dispatchEvent(name,promise,reason){var event,handler;if(DISPATCH_EVENT){event=document.createEvent('Event');event.promise=promise;event.reason=reason;event.initEvent(name,false,true);global.dispatchEvent(event);}else event={promise:promise,reason:reason};if(handler=global['on'+name])handler(event);else if(name===UNHANDLED_REJECTION)hostReportErrors('Unhandled promise rejection',reason);};var onUnhandled=function onUnhandled(promise,state){task.call(global,function(){var value=state.value;var IS_UNHANDLED=isUnhandled(state);var result;if(IS_UNHANDLED){result=perform(function(){if(IS_NODE){process.emit('unhandledRejection',value,promise);}else dispatchEvent(UNHANDLED_REJECTION,promise,value);});// Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should |
|
|
state.rejection=IS_NODE||isUnhandled(state)?UNHANDLED:HANDLED;if(result.error)throw result.value;}});};var isUnhandled=function isUnhandled(state){return state.rejection!==HANDLED&&!state.parent;};var onHandleUnhandled=function onHandleUnhandled(promise,state){task.call(global,function(){if(IS_NODE){process.emit('rejectionHandled',promise);}else dispatchEvent(REJECTION_HANDLED,promise,state.value);});};var bind=function bind(fn,promise,state,unwrap){return function(value){fn(promise,state,value,unwrap);};};var internalReject=function internalReject(promise,state,value,unwrap){if(state.done)return;state.done=true;if(unwrap)state=unwrap;state.value=value;state.state=REJECTED;notify(promise,state,true);};var internalResolve=function internalResolve(promise,state,value,unwrap){if(state.done)return;state.done=true;if(unwrap)state=unwrap;try{if(promise===value)throw TypeError("Promise can't be resolved itself");var then=isThenable(value);if(then){microtask(function(){var wrapper={done:false};try{then.call(value,bind(internalResolve,promise,wrapper,state),bind(internalReject,promise,wrapper,state));}catch(error){internalReject(promise,wrapper,error,state);}});}else{state.value=value;state.state=FULFILLED;notify(promise,state,false);}}catch(error){internalReject(promise,{done:false},error,state);}};// constructor polyfill |
|
|
if(FORCED){// 25.4.3.1 Promise(executor) |
|
|
PromiseConstructor=function Promise(executor){anInstance(this,PromiseConstructor,PROMISE);aFunction(executor);Internal.call(this);var state=getInternalState(this);try{executor(bind(internalResolve,this,state),bind(internalReject,this,state));}catch(error){internalReject(this,state,error);}};// eslint-disable-next-line no-unused-vars |
|
|
Internal=function Promise(executor){setInternalState(this,{type:PROMISE,done:false,notified:false,parent:false,reactions:[],rejection:false,state:PENDING,value:undefined});};Internal.prototype=redefineAll(PromiseConstructor.prototype,{// `Promise.prototype.then` method |
|
|
// https://tc39.github.io/ecma262/#sec-promise.prototype.then |
|
|
then:function then(onFulfilled,onRejected){var state=getInternalPromiseState(this);var reaction=newPromiseCapability(speciesConstructor(this,PromiseConstructor));reaction.ok=typeof onFulfilled=='function'?onFulfilled:true;reaction.fail=typeof onRejected=='function'&&onRejected;reaction.domain=IS_NODE?process.domain:undefined;state.parent=true;state.reactions.push(reaction);if(state.state!=PENDING)notify(this,state,false);return reaction.promise;},// `Promise.prototype.catch` method |
|
|
// https://tc39.github.io/ecma262/#sec-promise.prototype.catch |
|
|
'catch':function _catch(onRejected){return this.then(undefined,onRejected);}});OwnPromiseCapability=function OwnPromiseCapability(){var promise=new Internal();var state=getInternalState(promise);this.promise=promise;this.resolve=bind(internalResolve,promise,state);this.reject=bind(internalReject,promise,state);};newPromiseCapabilityModule.f=newPromiseCapability=function newPromiseCapability(C){return C===PromiseConstructor||C===PromiseWrapper?new OwnPromiseCapability(C):newGenericPromiseCapability(C);};if(!IS_PURE&&typeof NativePromise=='function'){nativeThen=NativePromise.prototype.then;// wrap native Promise#then for native async functions |
|
|
redefine(NativePromise.prototype,'then',function then(onFulfilled,onRejected){var that=this;return new PromiseConstructor(function(resolve,reject){nativeThen.call(that,resolve,reject);}).then(onFulfilled,onRejected);// https://github.com/zloirock/core-js/issues/640 |
|
|
},{unsafe:true});// wrap fetch result |
|
|
if(typeof $fetch=='function')$({global:true,enumerable:true,forced:true},{// eslint-disable-next-line no-unused-vars |
|
|
fetch:function fetch(input/* , init */){return promiseResolve(PromiseConstructor,$fetch.apply(global,arguments));}});}}$({global:true,wrap:true,forced:FORCED},{Promise:PromiseConstructor});setToStringTag(PromiseConstructor,PROMISE,false,true);setSpecies(PROMISE);PromiseWrapper=getBuiltIn(PROMISE);// statics |
|
|
$({target:PROMISE,stat:true,forced:FORCED},{// `Promise.reject` method |
|
|
// https://tc39.github.io/ecma262/#sec-promise.reject |
|
|
reject:function reject(r){var capability=newPromiseCapability(this);capability.reject.call(undefined,r);return capability.promise;}});$({target:PROMISE,stat:true,forced:IS_PURE||FORCED},{// `Promise.resolve` method |
|
|
// https://tc39.github.io/ecma262/#sec-promise.resolve |
|
|
resolve:function resolve(x){return promiseResolve(IS_PURE&&this===PromiseWrapper?PromiseConstructor:this,x);}});$({target:PROMISE,stat:true,forced:INCORRECT_ITERATION},{// `Promise.all` method |
|
|
// https://tc39.github.io/ecma262/#sec-promise.all |
|
|
all:function all(iterable){var C=this;var capability=newPromiseCapability(C);var resolve=capability.resolve;var reject=capability.reject;var result=perform(function(){var $promiseResolve=aFunction(C.resolve);var values=[];var counter=0;var remaining=1;iterate(iterable,function(promise){var index=counter++;var alreadyCalled=false;values.push(undefined);remaining++;$promiseResolve.call(C,promise).then(function(value){if(alreadyCalled)return;alreadyCalled=true;values[index]=value;--remaining||resolve(values);},reject);});--remaining||resolve(values);});if(result.error)reject(result.value);return capability.promise;},// `Promise.race` method |
|
|
// https://tc39.github.io/ecma262/#sec-promise.race |
|
|
race:function race(iterable){var C=this;var capability=newPromiseCapability(C);var reject=capability.reject;var result=perform(function(){var $promiseResolve=aFunction(C.resolve);iterate(iterable,function(promise){$promiseResolve.call(C,promise).then(capability.resolve,reject);});});if(result.error)reject(result.value);return capability.promise;}});},{"../internals/a-function":217,"../internals/an-instance":218,"../internals/check-correctness-of-iteration":224,"../internals/classof-raw":225,"../internals/engine-v8-version":235,"../internals/export":237,"../internals/get-built-in":240,"../internals/global":242,"../internals/host-report-errors":245,"../internals/inspect-source":249,"../internals/internal-state":250,"../internals/is-forced":253,"../internals/is-object":254,"../internals/is-pure":255,"../internals/iterate":256,"../internals/microtask":258,"../internals/native-promise-constructor":259,"../internals/new-promise-capability":262,"../internals/perform":276,"../internals/promise-resolve":277,"../internals/redefine":279,"../internals/redefine-all":278,"../internals/set-species":282,"../internals/set-to-string-tag":283,"../internals/species-constructor":287,"../internals/task":288,"../internals/well-known-symbol":299}],303:[function(require,module,exports){var defineWellKnownSymbol=require('../internals/define-well-known-symbol');// `Symbol.asyncIterator` well-known symbol |
|
|
// https://tc39.github.io/ecma262/#sec-symbol.asynciterator |
|
|
defineWellKnownSymbol('asyncIterator');},{"../internals/define-well-known-symbol":230}],304:[function(require,module,exports){'use strict';var $=require('../internals/export');var global=require('../internals/global');var getBuiltIn=require('../internals/get-built-in');var IS_PURE=require('../internals/is-pure');var DESCRIPTORS=require('../internals/descriptors');var NATIVE_SYMBOL=require('../internals/native-symbol');var USE_SYMBOL_AS_UID=require('../internals/use-symbol-as-uid');var fails=require('../internals/fails');var has=require('../internals/has');var isArray=require('../internals/is-array');var isObject=require('../internals/is-object');var anObject=require('../internals/an-object');var toObject=require('../internals/to-object');var toIndexedObject=require('../internals/to-indexed-object');var toPrimitive=require('../internals/to-primitive');var createPropertyDescriptor=require('../internals/create-property-descriptor');var nativeObjectCreate=require('../internals/object-create');var objectKeys=require('../internals/object-keys');var getOwnPropertyNamesModule=require('../internals/object-get-own-property-names');var getOwnPropertyNamesExternal=require('../internals/object-get-own-property-names-external');var getOwnPropertySymbolsModule=require('../internals/object-get-own-property-symbols');var getOwnPropertyDescriptorModule=require('../internals/object-get-own-property-descriptor');var definePropertyModule=require('../internals/object-define-property');var propertyIsEnumerableModule=require('../internals/object-property-is-enumerable');var createNonEnumerableProperty=require('../internals/create-non-enumerable-property');var redefine=require('../internals/redefine');var shared=require('../internals/shared');var sharedKey=require('../internals/shared-key');var hiddenKeys=require('../internals/hidden-keys');var uid=require('../internals/uid');var wellKnownSymbol=require('../internals/well-known-symbol');var wrappedWellKnownSymbolModule=require('../internals/well-known-symbol-wrapped');var defineWellKnownSymbol=require('../internals/define-well-known-symbol');var setToStringTag=require('../internals/set-to-string-tag');var InternalStateModule=require('../internals/internal-state');var $forEach=require('../internals/array-iteration').forEach;var HIDDEN=sharedKey('hidden');var SYMBOL='Symbol';var PROTOTYPE='prototype';var TO_PRIMITIVE=wellKnownSymbol('toPrimitive');var setInternalState=InternalStateModule.set;var getInternalState=InternalStateModule.getterFor(SYMBOL);var ObjectPrototype=Object[PROTOTYPE];var $Symbol=global.Symbol;var $stringify=getBuiltIn('JSON','stringify');var nativeGetOwnPropertyDescriptor=getOwnPropertyDescriptorModule.f;var nativeDefineProperty=definePropertyModule.f;var nativeGetOwnPropertyNames=getOwnPropertyNamesExternal.f;var nativePropertyIsEnumerable=propertyIsEnumerableModule.f;var AllSymbols=shared('symbols');var ObjectPrototypeSymbols=shared('op-symbols');var StringToSymbolRegistry=shared('string-to-symbol-registry');var SymbolToStringRegistry=shared('symbol-to-string-registry');var WellKnownSymbolsStore=shared('wks');var QObject=global.QObject;// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 |
|
|
var USE_SETTER=!QObject||!QObject[PROTOTYPE]||!QObject[PROTOTYPE].findChild;// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 |
|
|
var setSymbolDescriptor=DESCRIPTORS&&fails(function(){return nativeObjectCreate(nativeDefineProperty({},'a',{get:function get(){return nativeDefineProperty(this,'a',{value:7}).a;}})).a!=7;})?function(O,P,Attributes){var ObjectPrototypeDescriptor=nativeGetOwnPropertyDescriptor(ObjectPrototype,P);if(ObjectPrototypeDescriptor)delete ObjectPrototype[P];nativeDefineProperty(O,P,Attributes);if(ObjectPrototypeDescriptor&&O!==ObjectPrototype){nativeDefineProperty(ObjectPrototype,P,ObjectPrototypeDescriptor);}}:nativeDefineProperty;var wrap=function wrap(tag,description){var symbol=AllSymbols[tag]=nativeObjectCreate($Symbol[PROTOTYPE]);setInternalState(symbol,{type:SYMBOL,tag:tag,description:description});if(!DESCRIPTORS)symbol.description=description;return symbol;};var isSymbol=USE_SYMBOL_AS_UID?function(it){return _typeof2(it)=='symbol';}:function(it){return Object(it)instanceof $Symbol;};var $defineProperty=function defineProperty(O,P,Attributes){if(O===ObjectPrototype)$defineProperty(ObjectPrototypeSymbols,P,Attributes);anObject(O);var key=toPrimitive(P,true);anObject(Attributes);if(has(AllSymbols,key)){if(!Attributes.enumerable){if(!has(O,HIDDEN))nativeDefineProperty(O,HIDDEN,createPropertyDescriptor(1,{}));O[HIDDEN][key]=true;}else{if(has(O,HIDDEN)&&O[HIDDEN][key])O[HIDDEN][key]=false;Attributes=nativeObjectCreate(Attributes,{enumerable:createPropertyDescriptor(0,false)});}return setSymbolDescriptor(O,key,Attributes);}return nativeDefineProperty(O,key,Attributes);};var $defineProperties=function defineProperties(O,Properties){anObject(O);var properties=toIndexedObject(Properties);var keys=objectKeys(properties).concat($getOwnPropertySymbols(properties));$forEach(keys,function(key){if(!DESCRIPTORS||$propertyIsEnumerable.call(properties,key))$defineProperty(O,key,properties[key]);});return O;};var $create=function create(O,Properties){return Properties===undefined?nativeObjectCreate(O):$defineProperties(nativeObjectCreate(O),Properties);};var $propertyIsEnumerable=function propertyIsEnumerable(V){var P=toPrimitive(V,true);var enumerable=nativePropertyIsEnumerable.call(this,P);if(this===ObjectPrototype&&has(AllSymbols,P)&&!has(ObjectPrototypeSymbols,P))return false;return enumerable||!has(this,P)||!has(AllSymbols,P)||has(this,HIDDEN)&&this[HIDDEN][P]?enumerable:true;};var $getOwnPropertyDescriptor=function getOwnPropertyDescriptor(O,P){var it=toIndexedObject(O);var key=toPrimitive(P,true);if(it===ObjectPrototype&&has(AllSymbols,key)&&!has(ObjectPrototypeSymbols,key))return;var descriptor=nativeGetOwnPropertyDescriptor(it,key);if(descriptor&&has(AllSymbols,key)&&!(has(it,HIDDEN)&&it[HIDDEN][key])){descriptor.enumerable=true;}return descriptor;};var $getOwnPropertyNames=function getOwnPropertyNames(O){var names=nativeGetOwnPropertyNames(toIndexedObject(O));var result=[];$forEach(names,function(key){if(!has(AllSymbols,key)&&!has(hiddenKeys,key))result.push(key);});return result;};var $getOwnPropertySymbols=function getOwnPropertySymbols(O){var IS_OBJECT_PROTOTYPE=O===ObjectPrototype;var names=nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE?ObjectPrototypeSymbols:toIndexedObject(O));var result=[];$forEach(names,function(key){if(has(AllSymbols,key)&&(!IS_OBJECT_PROTOTYPE||has(ObjectPrototype,key))){result.push(AllSymbols[key]);}});return result;};// `Symbol` constructor |
|
|
// https://tc39.github.io/ecma262/#sec-symbol-constructor |
|
|
if(!NATIVE_SYMBOL){$Symbol=function _Symbol3(){if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor');var description=!arguments.length||arguments[0]===undefined?undefined:String(arguments[0]);var tag=uid(description);var setter=function setter(value){if(this===ObjectPrototype)setter.call(ObjectPrototypeSymbols,value);if(has(this,HIDDEN)&&has(this[HIDDEN],tag))this[HIDDEN][tag]=false;setSymbolDescriptor(this,tag,createPropertyDescriptor(1,value));};if(DESCRIPTORS&&USE_SETTER)setSymbolDescriptor(ObjectPrototype,tag,{configurable:true,set:setter});return wrap(tag,description);};redefine($Symbol[PROTOTYPE],'toString',function toString(){return getInternalState(this).tag;});redefine($Symbol,'withoutSetter',function(description){return wrap(uid(description),description);});propertyIsEnumerableModule.f=$propertyIsEnumerable;definePropertyModule.f=$defineProperty;getOwnPropertyDescriptorModule.f=$getOwnPropertyDescriptor;getOwnPropertyNamesModule.f=getOwnPropertyNamesExternal.f=$getOwnPropertyNames;getOwnPropertySymbolsModule.f=$getOwnPropertySymbols;wrappedWellKnownSymbolModule.f=function(name){return wrap(wellKnownSymbol(name),name);};if(DESCRIPTORS){// https://github.com/tc39/proposal-Symbol-description |
|
|
nativeDefineProperty($Symbol[PROTOTYPE],'description',{configurable:true,get:function description(){return getInternalState(this).description;}});if(!IS_PURE){redefine(ObjectPrototype,'propertyIsEnumerable',$propertyIsEnumerable,{unsafe:true});}}}$({global:true,wrap:true,forced:!NATIVE_SYMBOL,sham:!NATIVE_SYMBOL},{Symbol:$Symbol});$forEach(objectKeys(WellKnownSymbolsStore),function(name){defineWellKnownSymbol(name);});$({target:SYMBOL,stat:true,forced:!NATIVE_SYMBOL},{// `Symbol.for` method |
|
|
// https://tc39.github.io/ecma262/#sec-symbol.for |
|
|
'for':function _for(key){var string=String(key);if(has(StringToSymbolRegistry,string))return StringToSymbolRegistry[string];var symbol=$Symbol(string);StringToSymbolRegistry[string]=symbol;SymbolToStringRegistry[symbol]=string;return symbol;},// `Symbol.keyFor` method |
|
|
// https://tc39.github.io/ecma262/#sec-symbol.keyfor |
|
|
keyFor:function keyFor(sym){if(!isSymbol(sym))throw TypeError(sym+' is not a symbol');if(has(SymbolToStringRegistry,sym))return SymbolToStringRegistry[sym];},useSetter:function useSetter(){USE_SETTER=true;},useSimple:function useSimple(){USE_SETTER=false;}});$({target:'Object',stat:true,forced:!NATIVE_SYMBOL,sham:!DESCRIPTORS},{// `Object.create` method |
|
|
// https://tc39.github.io/ecma262/#sec-object.create |
|
|
create:$create,// `Object.defineProperty` method |
|
|
// https://tc39.github.io/ecma262/#sec-object.defineproperty |
|
|
defineProperty:$defineProperty,// `Object.defineProperties` method |
|
|
// https://tc39.github.io/ecma262/#sec-object.defineproperties |
|
|
defineProperties:$defineProperties,// `Object.getOwnPropertyDescriptor` method |
|
|
// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors |
|
|
getOwnPropertyDescriptor:$getOwnPropertyDescriptor});$({target:'Object',stat:true,forced:!NATIVE_SYMBOL},{// `Object.getOwnPropertyNames` method |
|
|
// https://tc39.github.io/ecma262/#sec-object.getownpropertynames |
|
|
getOwnPropertyNames:$getOwnPropertyNames,// `Object.getOwnPropertySymbols` method |
|
|
// https://tc39.github.io/ecma262/#sec-object.getownpropertysymbols |
|
|
getOwnPropertySymbols:$getOwnPropertySymbols});// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives |
|
|
// https://bugs.chromium.org/p/v8/issues/detail?id=3443 |
|
|
$({target:'Object',stat:true,forced:fails(function(){getOwnPropertySymbolsModule.f(1);})},{getOwnPropertySymbols:function getOwnPropertySymbols(it){return getOwnPropertySymbolsModule.f(toObject(it));}});// `JSON.stringify` method behavior with symbols |
|
|
// https://tc39.github.io/ecma262/#sec-json.stringify |
|
|
if($stringify){var FORCED_JSON_STRINGIFY=!NATIVE_SYMBOL||fails(function(){var symbol=$Symbol();// MS Edge converts symbol values to JSON as {} |
|
|
return $stringify([symbol])!='[null]'// WebKit converts symbol values to JSON as null |
|
|
||$stringify({a:symbol})!='{}'// V8 throws on boxed symbols |
|
|
||$stringify(Object(symbol))!='{}';});$({target:'JSON',stat:true,forced:FORCED_JSON_STRINGIFY},{// eslint-disable-next-line no-unused-vars |
|
|
stringify:function stringify(it,replacer,space){var args=[it];var index=1;var $replacer;while(arguments.length>index){args.push(arguments[index++]);}$replacer=replacer;if(!isObject(replacer)&&it===undefined||isSymbol(it))return;// IE8 returns string on undefined |
|
|
if(!isArray(replacer))replacer=function replacer(key,value){if(typeof $replacer=='function')value=$replacer.call(this,key,value);if(!isSymbol(value))return value;};args[1]=replacer;return $stringify.apply(null,args);}});}// `Symbol.prototype[@@toPrimitive]` method |
|
|
// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive |
|
|
if(!$Symbol[PROTOTYPE][TO_PRIMITIVE]){createNonEnumerableProperty($Symbol[PROTOTYPE],TO_PRIMITIVE,$Symbol[PROTOTYPE].valueOf);}// `Symbol.prototype[@@toStringTag]` property |
|
|
// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag |
|
|
setToStringTag($Symbol,SYMBOL);hiddenKeys[HIDDEN]=true;},{"../internals/an-object":219,"../internals/array-iteration":221,"../internals/create-non-enumerable-property":228,"../internals/create-property-descriptor":229,"../internals/define-well-known-symbol":230,"../internals/descriptors":231,"../internals/export":237,"../internals/fails":238,"../internals/get-built-in":240,"../internals/global":242,"../internals/has":243,"../internals/hidden-keys":244,"../internals/internal-state":250,"../internals/is-array":252,"../internals/is-object":254,"../internals/is-pure":255,"../internals/native-symbol":260,"../internals/object-create":264,"../internals/object-define-property":266,"../internals/object-get-own-property-descriptor":267,"../internals/object-get-own-property-names":269,"../internals/object-get-own-property-names-external":268,"../internals/object-get-own-property-symbols":270,"../internals/object-keys":272,"../internals/object-property-is-enumerable":273,"../internals/redefine":279,"../internals/set-to-string-tag":283,"../internals/shared":286,"../internals/shared-key":284,"../internals/to-indexed-object":290,"../internals/to-object":293,"../internals/to-primitive":294,"../internals/uid":296,"../internals/use-symbol-as-uid":297,"../internals/well-known-symbol":299,"../internals/well-known-symbol-wrapped":298}],305:[function(require,module,exports){(function(Buffer){// Copyright Joyent, Inc. and other Node contributors. |
|
|
// |
|
|
// Permission is hereby granted, free of charge, to any person obtaining a |
|
|
// copy of this software and associated documentation files (the |
|
|
// "Software"), to deal in the Software without restriction, including |
|
|
// without limitation the rights to use, copy, modify, merge, publish, |
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit |
|
|
// persons to whom the Software is furnished to do so, subject to the |
|
|
// following conditions: |
|
|
// |
|
|
// The above copyright notice and this permission notice shall be included |
|
|
// in all copies or substantial portions of the Software. |
|
|
// |
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
|
// NOTE: These type checking functions intentionally don't use `instanceof` |
|
|
// because it is fragile and can be easily faked with `Object.create()`. |
|
|
function isArray(arg){if(Array.isArray){return Array.isArray(arg);}return objectToString(arg)==='[object Array]';}exports.isArray=isArray;function isBoolean(arg){return typeof arg==='boolean';}exports.isBoolean=isBoolean;function isNull(arg){return arg===null;}exports.isNull=isNull;function isNullOrUndefined(arg){return arg==null;}exports.isNullOrUndefined=isNullOrUndefined;function isNumber(arg){return typeof arg==='number';}exports.isNumber=isNumber;function isString(arg){return typeof arg==='string';}exports.isString=isString;function isSymbol(arg){return _typeof2(arg)==='symbol';}exports.isSymbol=isSymbol;function isUndefined(arg){return arg===void 0;}exports.isUndefined=isUndefined;function isRegExp(re){return objectToString(re)==='[object RegExp]';}exports.isRegExp=isRegExp;function isObject(arg){return _typeof2(arg)==='object'&&arg!==null;}exports.isObject=isObject;function isDate(d){return objectToString(d)==='[object Date]';}exports.isDate=isDate;function isError(e){return objectToString(e)==='[object Error]'||e instanceof Error;}exports.isError=isError;function isFunction(arg){return typeof arg==='function';}exports.isFunction=isFunction;function isPrimitive(arg){return arg===null||typeof arg==='boolean'||typeof arg==='number'||typeof arg==='string'||_typeof2(arg)==='symbol'||// ES6 symbol |
|
|
typeof arg==='undefined';}exports.isPrimitive=isPrimitive;exports.isBuffer=Buffer.isBuffer;function objectToString(o){return Object.prototype.toString.call(o);}}).call(this,{"isBuffer":require("../../is-buffer/index.js")});},{"../../is-buffer/index.js":365}],306:[function(require,module,exports){(function(Buffer){var elliptic=require('elliptic');var BN=require('bn.js');module.exports=function createECDH(curve){return new ECDH(curve);};var aliases={secp256k1:{name:'secp256k1',byteLength:32},secp224r1:{name:'p224',byteLength:28},prime256v1:{name:'p256',byteLength:32},prime192v1:{name:'p192',byteLength:24},ed25519:{name:'ed25519',byteLength:32},secp384r1:{name:'p384',byteLength:48},secp521r1:{name:'p521',byteLength:66}};aliases.p224=aliases.secp224r1;aliases.p256=aliases.secp256r1=aliases.prime256v1;aliases.p192=aliases.secp192r1=aliases.prime192v1;aliases.p384=aliases.secp384r1;aliases.p521=aliases.secp521r1;function ECDH(curve){this.curveType=aliases[curve];if(!this.curveType){this.curveType={name:curve};}this.curve=new elliptic.ec(this.curveType.name);// eslint-disable-line new-cap |
|
|
this.keys=void 0;}ECDH.prototype.generateKeys=function(enc,format){this.keys=this.curve.genKeyPair();return this.getPublicKey(enc,format);};ECDH.prototype.computeSecret=function(other,inenc,enc){inenc=inenc||'utf8';if(!Buffer.isBuffer(other)){other=new Buffer(other,inenc);}var otherPub=this.curve.keyFromPublic(other).getPublic();var out=otherPub.mul(this.keys.getPrivate()).getX();return formatReturnValue(out,enc,this.curveType.byteLength);};ECDH.prototype.getPublicKey=function(enc,format){var key=this.keys.getPublic(format==='compressed',true);if(format==='hybrid'){if(key[key.length-1]%2){key[0]=7;}else{key[0]=6;}}return formatReturnValue(key,enc);};ECDH.prototype.getPrivateKey=function(enc){return formatReturnValue(this.keys.getPrivate(),enc);};ECDH.prototype.setPublicKey=function(pub,enc){enc=enc||'utf8';if(!Buffer.isBuffer(pub)){pub=new Buffer(pub,enc);}this.keys._importPublic(pub);return this;};ECDH.prototype.setPrivateKey=function(priv,enc){enc=enc||'utf8';if(!Buffer.isBuffer(priv)){priv=new Buffer(priv,enc);}var _priv=new BN(priv);_priv=_priv.toString(16);this.keys=this.curve.genKeyPair();this.keys._importPrivate(_priv);return this;};function formatReturnValue(bn,enc,len){if(!Array.isArray(bn)){bn=bn.toArray();}var buf=new Buffer(bn);if(len&&buf.length<len){var zeros=new Buffer(len-buf.length);zeros.fill(0);buf=Buffer.concat([zeros,buf]);}if(!enc){return buf;}else{return buf.toString(enc);}}}).call(this,require("buffer").Buffer);},{"bn.js":307,"buffer":214,"elliptic":327}],307:[function(require,module,exports){arguments[4][179][0].apply(exports,arguments);},{"buffer":183,"dup":179}],308:[function(require,module,exports){'use strict';var inherits=require('inherits');var MD5=require('md5.js');var RIPEMD160=require('ripemd160');var sha=require('sha.js');var Base=require('cipher-base');function Hash(hash){Base.call(this,'digest');this._hash=hash;}inherits(Hash,Base);Hash.prototype._update=function(data){this._hash.update(data);};Hash.prototype._final=function(){return this._hash.digest();};module.exports=function createHash(alg){alg=alg.toLowerCase();if(alg==='md5')return new MD5();if(alg==='rmd160'||alg==='ripemd160')return new RIPEMD160();return new Hash(sha(alg));};},{"cipher-base":216,"inherits":364,"md5.js":411,"ripemd160":469,"sha.js":474}],309:[function(require,module,exports){var MD5=require('md5.js');module.exports=function(buffer){return new MD5().update(buffer).digest();};},{"md5.js":411}],310:[function(require,module,exports){'use strict';var inherits=require('inherits');var Legacy=require('./legacy');var Base=require('cipher-base');var Buffer=require('safe-buffer').Buffer;var md5=require('create-hash/md5');var RIPEMD160=require('ripemd160');var sha=require('sha.js');var ZEROS=Buffer.alloc(128);function Hmac(alg,key){Base.call(this,'digest');if(typeof key==='string'){key=Buffer.from(key);}var blocksize=alg==='sha512'||alg==='sha384'?128:64;this._alg=alg;this._key=key;if(key.length>blocksize){var hash=alg==='rmd160'?new RIPEMD160():sha(alg);key=hash.update(key).digest();}else if(key.length<blocksize){key=Buffer.concat([key,ZEROS],blocksize);}var ipad=this._ipad=Buffer.allocUnsafe(blocksize);var opad=this._opad=Buffer.allocUnsafe(blocksize);for(var i=0;i<blocksize;i++){ipad[i]=key[i]^0x36;opad[i]=key[i]^0x5C;}this._hash=alg==='rmd160'?new RIPEMD160():sha(alg);this._hash.update(ipad);}inherits(Hmac,Base);Hmac.prototype._update=function(data){this._hash.update(data);};Hmac.prototype._final=function(){var h=this._hash.digest();var hash=this._alg==='rmd160'?new RIPEMD160():sha(this._alg);return hash.update(this._opad).update(h).digest();};module.exports=function createHmac(alg,key){alg=alg.toLowerCase();if(alg==='rmd160'||alg==='ripemd160'){return new Hmac('rmd160',key);}if(alg==='md5'){return new Legacy(md5,key);}return new Hmac(alg,key);};},{"./legacy":311,"cipher-base":216,"create-hash/md5":309,"inherits":364,"ripemd160":469,"safe-buffer":470,"sha.js":474}],311:[function(require,module,exports){'use strict';var inherits=require('inherits');var Buffer=require('safe-buffer').Buffer;var Base=require('cipher-base');var ZEROS=Buffer.alloc(128);var blocksize=64;function Hmac(alg,key){Base.call(this,'digest');if(typeof key==='string'){key=Buffer.from(key);}this._alg=alg;this._key=key;if(key.length>blocksize){key=alg(key);}else if(key.length<blocksize){key=Buffer.concat([key,ZEROS],blocksize);}var ipad=this._ipad=Buffer.allocUnsafe(blocksize);var opad=this._opad=Buffer.allocUnsafe(blocksize);for(var i=0;i<blocksize;i++){ipad[i]=key[i]^0x36;opad[i]=key[i]^0x5C;}this._hash=[ipad];}inherits(Hmac,Base);Hmac.prototype._update=function(data){this._hash.push(data);};Hmac.prototype._final=function(){var h=this._alg(Buffer.concat(this._hash));return this._alg(Buffer.concat([this._opad,h]));};module.exports=Hmac;},{"cipher-base":216,"inherits":364,"safe-buffer":470}],312:[function(require,module,exports){'use strict';exports.randomBytes=exports.rng=exports.pseudoRandomBytes=exports.prng=require('randombytes');exports.createHash=exports.Hash=require('create-hash');exports.createHmac=exports.Hmac=require('create-hmac');var algos=require('browserify-sign/algos');var algoKeys=Object.keys(algos);var hashes=['sha1','sha224','sha256','sha384','sha512','md5','rmd160'].concat(algoKeys);exports.getHashes=function(){return hashes;};var p=require('pbkdf2');exports.pbkdf2=p.pbkdf2;exports.pbkdf2Sync=p.pbkdf2Sync;var aes=require('browserify-cipher');exports.Cipher=aes.Cipher;exports.createCipher=aes.createCipher;exports.Cipheriv=aes.Cipheriv;exports.createCipheriv=aes.createCipheriv;exports.Decipher=aes.Decipher;exports.createDecipher=aes.createDecipher;exports.Decipheriv=aes.Decipheriv;exports.createDecipheriv=aes.createDecipheriv;exports.getCiphers=aes.getCiphers;exports.listCiphers=aes.listCiphers;var dh=require('diffie-hellman');exports.DiffieHellmanGroup=dh.DiffieHellmanGroup;exports.createDiffieHellmanGroup=dh.createDiffieHellmanGroup;exports.getDiffieHellman=dh.getDiffieHellman;exports.createDiffieHellman=dh.createDiffieHellman;exports.DiffieHellman=dh.DiffieHellman;var sign=require('browserify-sign');exports.createSign=sign.createSign;exports.Sign=sign.Sign;exports.createVerify=sign.createVerify;exports.Verify=sign.Verify;exports.createECDH=require('create-ecdh');var publicEncrypt=require('public-encrypt');exports.publicEncrypt=publicEncrypt.publicEncrypt;exports.privateEncrypt=publicEncrypt.privateEncrypt;exports.publicDecrypt=publicEncrypt.publicDecrypt;exports.privateDecrypt=publicEncrypt.privateDecrypt;// the least I can do is make error messages for the rest of the node.js/crypto api. |
|
|
// ;[ |
|
|
// 'createCredentials' |
|
|
// ].forEach(function (name) { |
|
|
// exports[name] = function () { |
|
|
// throw new Error([ |
|
|
// 'sorry, ' + name + ' is not implemented yet', |
|
|
// 'we accept pull requests', |
|
|
// 'https://github.com/crypto-browserify/crypto-browserify' |
|
|
// ].join('\n')) |
|
|
// } |
|
|
// }) |
|
|
var rf=require('randomfill');exports.randomFill=rf.randomFill;exports.randomFillSync=rf.randomFillSync;exports.createCredentials=function(){throw new Error(['sorry, createCredentials is not implemented yet','we accept pull requests','https://github.com/crypto-browserify/crypto-browserify'].join('\n'));};exports.constants={'DH_CHECK_P_NOT_SAFE_PRIME':2,'DH_CHECK_P_NOT_PRIME':1,'DH_UNABLE_TO_CHECK_GENERATOR':4,'DH_NOT_SUITABLE_GENERATOR':8,'NPN_ENABLED':1,'ALPN_ENABLED':1,'RSA_PKCS1_PADDING':1,'RSA_SSLV23_PADDING':2,'RSA_NO_PADDING':3,'RSA_PKCS1_OAEP_PADDING':4,'RSA_X931_PADDING':5,'RSA_PKCS1_PSS_PADDING':6,'POINT_CONVERSION_COMPRESSED':2,'POINT_CONVERSION_UNCOMPRESSED':4,'POINT_CONVERSION_HYBRID':6};},{"browserify-cipher":201,"browserify-sign":209,"browserify-sign/algos":206,"create-ecdh":306,"create-hash":308,"create-hmac":310,"diffie-hellman":322,"pbkdf2":437,"public-encrypt":444,"randombytes":451,"randomfill":452}],313:[function(require,module,exports){!function(t,e){"object"==_typeof2(exports)&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.dayjs=e();}(this,function(){"use strict";var t="millisecond",e="second",n="minute",r="hour",i="day",s="week",u="month",o="quarter",a="year",h=/^(\d{4})-?(\d{1,2})-?(\d{0,2})[^0-9]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?.?(\d{1,3})?$/,f=/\[([^\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,c=function c(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t;},d={s:c,z:function z(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+c(r,2,"0")+":"+c(i,2,"0");},m:function m(t,e){var n=12*(e.year()-t.year())+(e.month()-t.month()),r=t.clone().add(n,u),i=e-r<0,s=t.clone().add(n+(i?-1:1),u);return Number(-(n+(e-r)/(i?r-s:s-r))||0);},a:function a(t){return t<0?Math.ceil(t)||0:Math.floor(t);},p:function p(h){return{M:u,y:a,w:s,d:i,D:"date",h:r,m:n,s:e,ms:t,Q:o}[h]||String(h||"").toLowerCase().replace(/s$/,"");},u:function u(t){return void 0===t;}},$={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},l="en",m={};m[l]=$;var y=function y(t){return t instanceof v;},M=function M(t,e,n){var r;if(!t)return l;if("string"==typeof t)m[t]&&(r=t),e&&(m[t]=e,r=t);else{var i=t.name;m[i]=t,r=i;}return!n&&r&&(l=r),r||!n&&l;},g=function g(t,e){if(y(t))return t.clone();var n="object"==_typeof2(e)?e:{};return n.date=t,n.args=arguments,new v(n);},D=d;D.l=M,D.i=y,D.w=function(t,e){return g(t,{locale:e.$L,utc:e.$u,$offset:e.$offset});};var v=function(){function c(t){this.$L=this.$L||M(t.locale,null,!0),this.parse(t);}var d=c.prototype;return d.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(D.u(e))return new Date();if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(h);if(r)return n?new Date(Date.UTC(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)):new Date(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0);}return new Date(e);}(t),this.init();},d.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds();},d.$utils=function(){return D;},d.isValid=function(){return!("Invalid Date"===this.$d.toString());},d.isSame=function(t,e){var n=g(t);return this.startOf(e)<=n&&n<=this.endOf(e);},d.isAfter=function(t,e){return g(t)<this.startOf(e);},d.isBefore=function(t,e){return this.endOf(e)<g(t);},d.$g=function(t,e,n){return D.u(t)?this[e]:this.set(n,t);},d.year=function(t){return this.$g(t,"$y",a);},d.month=function(t){return this.$g(t,"$M",u);},d.day=function(t){return this.$g(t,"$W",i);},d.date=function(t){return this.$g(t,"$D","date");},d.hour=function(t){return this.$g(t,"$H",r);},d.minute=function(t){return this.$g(t,"$m",n);},d.second=function(t){return this.$g(t,"$s",e);},d.millisecond=function(e){return this.$g(e,"$ms",t);},d.unix=function(){return Math.floor(this.valueOf()/1e3);},d.valueOf=function(){return this.$d.getTime();},d.startOf=function(t,o){var h=this,f=!!D.u(o)||o,c=D.p(t),d=function d(t,e){var n=D.w(h.$u?Date.UTC(h.$y,e,t):new Date(h.$y,e,t),h);return f?n:n.endOf(i);},$=function $(t,e){return D.w(h.toDate()[t].apply(h.toDate("s"),(f?[0,0,0,0]:[23,59,59,999]).slice(e)),h);},l=this.$W,m=this.$M,y=this.$D,M="set"+(this.$u?"UTC":"");switch(c){case a:return f?d(1,0):d(31,11);case u:return f?d(1,m):d(0,m+1);case s:var g=this.$locale().weekStart||0,v=(l<g?l+7:l)-g;return d(f?y-v:y+(6-v),m);case i:case"date":return $(M+"Hours",0);case r:return $(M+"Minutes",1);case n:return $(M+"Seconds",2);case e:return $(M+"Milliseconds",3);default:return this.clone();}},d.endOf=function(t){return this.startOf(t,!1);},d.$set=function(s,o){var h,f=D.p(s),c="set"+(this.$u?"UTC":""),d=(h={},h[i]=c+"Date",h.date=c+"Date",h[u]=c+"Month",h[a]=c+"FullYear",h[r]=c+"Hours",h[n]=c+"Minutes",h[e]=c+"Seconds",h[t]=c+"Milliseconds",h)[f],$=f===i?this.$D+(o-this.$W):o;if(f===u||f===a){var l=this.clone().set("date",1);l.$d[d]($),l.init(),this.$d=l.set("date",Math.min(this.$D,l.daysInMonth())).toDate();}else d&&this.$d[d]($);return this.init(),this;},d.set=function(t,e){return this.clone().$set(t,e);},d.get=function(t){return this[D.p(t)]();},d.add=function(t,o){var h,f=this;t=Number(t);var c=D.p(o),d=function d(e){var n=g(f);return D.w(n.date(n.date()+Math.round(e*t)),f);};if(c===u)return this.set(u,this.$M+t);if(c===a)return this.set(a,this.$y+t);if(c===i)return d(1);if(c===s)return d(7);var $=(h={},h[n]=6e4,h[r]=36e5,h[e]=1e3,h)[c]||1,l=this.$d.getTime()+t*$;return D.w(l,this);},d.subtract=function(t,e){return this.add(-1*t,e);},d.format=function(t){var e=this;if(!this.isValid())return"Invalid Date";var n=t||"YYYY-MM-DDTHH:mm:ssZ",r=D.z(this),i=this.$locale(),s=this.$H,u=this.$m,o=this.$M,a=i.weekdays,h=i.months,c=function c(t,r,i,s){return t&&(t[r]||t(e,n))||i[r].substr(0,s);},d=function d(t){return D.s(s%12||12,t,"0");},$=i.meridiem||function(t,e,n){var r=t<12?"AM":"PM";return n?r.toLowerCase():r;},l={YY:String(this.$y).slice(-2),YYYY:this.$y,M:o+1,MM:D.s(o+1,2,"0"),MMM:c(i.monthsShort,o,h,3),MMMM:c(h,o),D:this.$D,DD:D.s(this.$D,2,"0"),d:String(this.$W),dd:c(i.weekdaysMin,this.$W,a,2),ddd:c(i.weekdaysShort,this.$W,a,3),dddd:a[this.$W],H:String(s),HH:D.s(s,2,"0"),h:d(1),hh:d(2),a:$(s,u,!0),A:$(s,u,!1),m:String(u),mm:D.s(u,2,"0"),s:String(this.$s),ss:D.s(this.$s,2,"0"),SSS:D.s(this.$ms,3,"0"),Z:r};return n.replace(f,function(t,e){return e||l[t]||r.replace(":","");});},d.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15);},d.diff=function(t,h,f){var c,d=D.p(h),$=g(t),l=6e4*($.utcOffset()-this.utcOffset()),m=this-$,y=D.m(this,$);return y=(c={},c[a]=y/12,c[u]=y,c[o]=y/3,c[s]=(m-l)/6048e5,c[i]=(m-l)/864e5,c[r]=m/36e5,c[n]=m/6e4,c[e]=m/1e3,c)[d]||m,f?y:D.a(y);},d.daysInMonth=function(){return this.endOf(u).$D;},d.$locale=function(){return m[this.$L];},d.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=M(t,e,!0);return r&&(n.$L=r),n;},d.clone=function(){return D.w(this.$d,this);},d.toDate=function(){return new Date(this.valueOf());},d.toJSON=function(){return this.isValid()?this.toISOString():null;},d.toISOString=function(){return this.$d.toISOString();},d.toString=function(){return this.$d.toUTCString();},c;}();return g.prototype=v.prototype,g.extend=function(t,e){return t(e,v,g),g;},g.locale=M,g.isDayjs=y,g.unix=function(t){return g(1e3*t);},g.en=m[l],g.Ls=m,g;});},{}],314:[function(require,module,exports){!function(t,e){"object"==_typeof2(exports)&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.dayjs_plugin_customParseFormat=e();}(this,function(){"use strict";var t,e=/(\[[^[]*\])|([-:/.()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\d\d/,r=/\d\d?/,o=/\d*[^\s\d-:/()]+/;var i=function i(t){return function(e){this[t]=+e;};},s=[/[+-]\d\d:?\d\d/,function(t){var e,n;(this.zone||(this.zone={})).offset=(e=t.match(/([+-]|\d\d)/g),0===(n=60*e[1]+ +e[2])?0:"+"===e[0]?-n:n);}],a=function a(e){var n=t[e];return n&&(n.indexOf?n:n.s.concat(n.f));},h={A:[/[AP]M/,function(t){this.afternoon="PM"===t;}],a:[/[ap]m/,function(t){this.afternoon="pm"===t;}],S:[/\d/,function(t){this.milliseconds=100*+t;}],SS:[n,function(t){this.milliseconds=10*+t;}],SSS:[/\d{3}/,function(t){this.milliseconds=+t;}],s:[r,i("seconds")],ss:[r,i("seconds")],m:[r,i("minutes")],mm:[r,i("minutes")],H:[r,i("hours")],h:[r,i("hours")],HH:[r,i("hours")],hh:[r,i("hours")],D:[r,i("day")],DD:[n,i("day")],Do:[o,function(e){var n=t.ordinal,r=e.match(/\d+/);if(this.day=r[0],n)for(var o=1;o<=31;o+=1){n(o).replace(/\[|\]/g,"")===e&&(this.day=o);}}],M:[r,i("month")],MM:[n,i("month")],MMM:[o,function(t){var e=a("months"),n=(a("monthsShort")||e.map(function(t){return t.substr(0,3);})).indexOf(t)+1;if(n<1)throw new Error();this.month=n%12||n;}],MMMM:[o,function(t){var e=a("months").indexOf(t)+1;if(e<1)throw new Error();this.month=e%12||e;}],Y:[/[+-]?\d+/,i("year")],YY:[n,function(t){t=+t,this.year=t+(t>68?1900:2e3);}],YYYY:[/\d{4}/,i("year")],Z:s,ZZ:s};var f=function f(t,n,r){try{var o=function(t){for(var n=t.match(e),r=n.length,o=0;o<r;o+=1){var i=n[o],s=h[i],a=s&&s[0],f=s&&s[1];n[o]=f?{regex:a,parser:f}:i.replace(/^\[|\]$/g,"");}return function(t){for(var e={},o=0,i=0;o<r;o+=1){var s=n[o];if("string"==typeof s)i+=s.length;else{var a=s.regex,h=s.parser,f=t.substr(i),u=a.exec(f)[0];h.call(e,u),t=t.replace(u,"");}}return function(t){var e=t.afternoon;if(void 0!==e){var n=t.hours;e?n<12&&(t.hours+=12):12===n&&(t.hours=0),delete t.afternoon;}}(e),e;};}(n)(t),i=o.year,s=o.month,a=o.day,f=o.hours,u=o.minutes,d=o.seconds,c=o.milliseconds,l=o.zone,m=new Date(),v=a||(i||s?1:m.getDate()),p=i||m.getFullYear(),y=0;i&&!s||(y=s>0?s-1:m.getMonth());var D=f||0,M=u||0,g=d||0,Y=c||0;return l?new Date(Date.UTC(p,y,v,D,M,g,Y+60*l.offset*1e3)):r?new Date(Date.UTC(p,y,v,D,M,g,Y)):new Date(p,y,v,D,M,g,Y);}catch(t){return new Date("");}};return function(e,n,r){var o=n.prototype,i=o.parse;o.parse=function(e){var n=e.date,o=e.utc,s=e.args;this.$u=o;var a=s[1];if("string"==typeof a){var h=!0===s[2],u=!0===s[3],d=h||u,c=s[2];u&&(c=s[2]),h||(t=c?r.Ls[c]:this.$locale()),this.$d=f(n,a,o),this.init(),c&&!0!==c&&(this.$L=this.locale(c).$L),d&&n!==this.format(a)&&(this.$d=new Date(""));}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var v=r.apply(this,s);if(v.isValid()){this.$d=v.$d,this.$L=v.$L,this.init();break;}m===l&&(this.$d=new Date(""));}else i.call(this,e);};};});},{}],315:[function(require,module,exports){!function(t,i){"object"==_typeof2(exports)&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):t.dayjs_plugin_utc=i();}(this,function(){"use strict";return function(t,i,e){var s=new Date().getTimezoneOffset(),n=i.prototype;e.utc=function(t){return new i({date:t,utc:!0,args:arguments});},n.utc=function(){return e(this.toDate(),{locale:this.$L,utc:!0});},n.local=function(){return e(this.toDate(),{locale:this.$L,utc:!1});};var u=n.parse;n.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),u.call(this,t);};var o=n.init;n.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds();}else o.call(this);};var f=n.utcOffset;n.utcOffset=function(t){var i=this.$utils().u;if(i(t))return this.$u?0:i(this.$offset)?f.call(this):this.$offset;var e,n=Math.abs(t)<=16?60*t:t;return 0!==t?(e=this.local().add(n+s,"minute")).$offset=n:e=this.utc(),e;};var r=n.format;n.format=function(t){var i=t||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return r.call(this,i);},n.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+s;return this.$d.valueOf()-6e4*t;},n.isUTC=function(){return!!this.$u;},n.toISOString=function(){return this.toDate().toISOString();},n.toString=function(){return this.toDate().toUTCString();};var a=n.toDate;n.toDate=function(t){return"s"===t&&this.$offset?e(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():a.call(this);};};});},{}],316:[function(require,module,exports){'use strict';exports.utils=require('./des/utils');exports.Cipher=require('./des/cipher');exports.DES=require('./des/des');exports.CBC=require('./des/cbc');exports.EDE=require('./des/ede');},{"./des/cbc":317,"./des/cipher":318,"./des/des":319,"./des/ede":320,"./des/utils":321}],317:[function(require,module,exports){'use strict';var assert=require('minimalistic-assert');var inherits=require('inherits');var proto={};function CBCState(iv){assert.equal(iv.length,8,'Invalid IV length');this.iv=new Array(8);for(var i=0;i<this.iv.length;i++){this.iv[i]=iv[i];}}function instantiate(Base){function CBC(options){Base.call(this,options);this._cbcInit();}inherits(CBC,Base);var keys=Object.keys(proto);for(var i=0;i<keys.length;i++){var key=keys[i];CBC.prototype[key]=proto[key];}CBC.create=function create(options){return new CBC(options);};return CBC;}exports.instantiate=instantiate;proto._cbcInit=function _cbcInit(){var state=new CBCState(this.options.iv);this._cbcState=state;};proto._update=function _update(inp,inOff,out,outOff){var state=this._cbcState;var superProto=this.constructor.super_.prototype;var iv=state.iv;if(this.type==='encrypt'){for(var i=0;i<this.blockSize;i++){iv[i]^=inp[inOff+i];}superProto._update.call(this,iv,0,out,outOff);for(var i=0;i<this.blockSize;i++){iv[i]=out[outOff+i];}}else{superProto._update.call(this,inp,inOff,out,outOff);for(var i=0;i<this.blockSize;i++){out[outOff+i]^=iv[i];}for(var i=0;i<this.blockSize;i++){iv[i]=inp[inOff+i];}}};},{"inherits":364,"minimalistic-assert":414}],318:[function(require,module,exports){'use strict';var assert=require('minimalistic-assert');function Cipher(options){this.options=options;this.type=this.options.type;this.blockSize=8;this._init();this.buffer=new Array(this.blockSize);this.bufferOff=0;}module.exports=Cipher;Cipher.prototype._init=function _init(){// Might be overrided |
|
|
};Cipher.prototype.update=function update(data){if(data.length===0)return[];if(this.type==='decrypt')return this._updateDecrypt(data);else return this._updateEncrypt(data);};Cipher.prototype._buffer=function _buffer(data,off){// Append data to buffer |
|
|
var min=Math.min(this.buffer.length-this.bufferOff,data.length-off);for(var i=0;i<min;i++){this.buffer[this.bufferOff+i]=data[off+i];}this.bufferOff+=min;// Shift next |
|
|
return min;};Cipher.prototype._flushBuffer=function _flushBuffer(out,off){this._update(this.buffer,0,out,off);this.bufferOff=0;return this.blockSize;};Cipher.prototype._updateEncrypt=function _updateEncrypt(data){var inputOff=0;var outputOff=0;var count=(this.bufferOff+data.length)/this.blockSize|0;var out=new Array(count*this.blockSize);if(this.bufferOff!==0){inputOff+=this._buffer(data,inputOff);if(this.bufferOff===this.buffer.length)outputOff+=this._flushBuffer(out,outputOff);}// Write blocks |
|
|
var max=data.length-(data.length-inputOff)%this.blockSize;for(;inputOff<max;inputOff+=this.blockSize){this._update(data,inputOff,out,outputOff);outputOff+=this.blockSize;}// Queue rest |
|
|
for(;inputOff<data.length;inputOff++,this.bufferOff++){this.buffer[this.bufferOff]=data[inputOff];}return out;};Cipher.prototype._updateDecrypt=function _updateDecrypt(data){var inputOff=0;var outputOff=0;var count=Math.ceil((this.bufferOff+data.length)/this.blockSize)-1;var out=new Array(count*this.blockSize);// TODO(indutny): optimize it, this is far from optimal |
|
|
for(;count>0;count--){inputOff+=this._buffer(data,inputOff);outputOff+=this._flushBuffer(out,outputOff);}// Buffer rest of the input |
|
|
inputOff+=this._buffer(data,inputOff);return out;};Cipher.prototype.final=function final(buffer){var first;if(buffer)first=this.update(buffer);var last;if(this.type==='encrypt')last=this._finalEncrypt();else last=this._finalDecrypt();if(first)return first.concat(last);else return last;};Cipher.prototype._pad=function _pad(buffer,off){if(off===0)return false;while(off<buffer.length){buffer[off++]=0;}return true;};Cipher.prototype._finalEncrypt=function _finalEncrypt(){if(!this._pad(this.buffer,this.bufferOff))return[];var out=new Array(this.blockSize);this._update(this.buffer,0,out,0);return out;};Cipher.prototype._unpad=function _unpad(buffer){return buffer;};Cipher.prototype._finalDecrypt=function _finalDecrypt(){assert.equal(this.bufferOff,this.blockSize,'Not enough data to decrypt');var out=new Array(this.blockSize);this._flushBuffer(out,0);return this._unpad(out);};},{"minimalistic-assert":414}],319:[function(require,module,exports){'use strict';var assert=require('minimalistic-assert');var inherits=require('inherits');var utils=require('./utils');var Cipher=require('./cipher');function DESState(){this.tmp=new Array(2);this.keys=null;}function DES(options){Cipher.call(this,options);var state=new DESState();this._desState=state;this.deriveKeys(state,options.key);}inherits(DES,Cipher);module.exports=DES;DES.create=function create(options){return new DES(options);};var shiftTable=[1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1];DES.prototype.deriveKeys=function deriveKeys(state,key){state.keys=new Array(16*2);assert.equal(key.length,this.blockSize,'Invalid key length');var kL=utils.readUInt32BE(key,0);var kR=utils.readUInt32BE(key,4);utils.pc1(kL,kR,state.tmp,0);kL=state.tmp[0];kR=state.tmp[1];for(var i=0;i<state.keys.length;i+=2){var shift=shiftTable[i>>>1];kL=utils.r28shl(kL,shift);kR=utils.r28shl(kR,shift);utils.pc2(kL,kR,state.keys,i);}};DES.prototype._update=function _update(inp,inOff,out,outOff){var state=this._desState;var l=utils.readUInt32BE(inp,inOff);var r=utils.readUInt32BE(inp,inOff+4);// Initial Permutation |
|
|
utils.ip(l,r,state.tmp,0);l=state.tmp[0];r=state.tmp[1];if(this.type==='encrypt')this._encrypt(state,l,r,state.tmp,0);else this._decrypt(state,l,r,state.tmp,0);l=state.tmp[0];r=state.tmp[1];utils.writeUInt32BE(out,l,outOff);utils.writeUInt32BE(out,r,outOff+4);};DES.prototype._pad=function _pad(buffer,off){var value=buffer.length-off;for(var i=off;i<buffer.length;i++){buffer[i]=value;}return true;};DES.prototype._unpad=function _unpad(buffer){var pad=buffer[buffer.length-1];for(var i=buffer.length-pad;i<buffer.length;i++){assert.equal(buffer[i],pad);}return buffer.slice(0,buffer.length-pad);};DES.prototype._encrypt=function _encrypt(state,lStart,rStart,out,off){var l=lStart;var r=rStart;// Apply f() x16 times |
|
|
for(var i=0;i<state.keys.length;i+=2){var keyL=state.keys[i];var keyR=state.keys[i+1];// f(r, k) |
|
|
utils.expand(r,state.tmp,0);keyL^=state.tmp[0];keyR^=state.tmp[1];var s=utils.substitute(keyL,keyR);var f=utils.permute(s);var t=r;r=(l^f)>>>0;l=t;}// Reverse Initial Permutation |
|
|
utils.rip(r,l,out,off);};DES.prototype._decrypt=function _decrypt(state,lStart,rStart,out,off){var l=rStart;var r=lStart;// Apply f() x16 times |
|
|
for(var i=state.keys.length-2;i>=0;i-=2){var keyL=state.keys[i];var keyR=state.keys[i+1];// f(r, k) |
|
|
utils.expand(l,state.tmp,0);keyL^=state.tmp[0];keyR^=state.tmp[1];var s=utils.substitute(keyL,keyR);var f=utils.permute(s);var t=l;l=(r^f)>>>0;r=t;}// Reverse Initial Permutation |
|
|
utils.rip(l,r,out,off);};},{"./cipher":318,"./utils":321,"inherits":364,"minimalistic-assert":414}],320:[function(require,module,exports){'use strict';var assert=require('minimalistic-assert');var inherits=require('inherits');var Cipher=require('./cipher');var DES=require('./des');function EDEState(type,key){assert.equal(key.length,24,'Invalid key length');var k1=key.slice(0,8);var k2=key.slice(8,16);var k3=key.slice(16,24);if(type==='encrypt'){this.ciphers=[DES.create({type:'encrypt',key:k1}),DES.create({type:'decrypt',key:k2}),DES.create({type:'encrypt',key:k3})];}else{this.ciphers=[DES.create({type:'decrypt',key:k3}),DES.create({type:'encrypt',key:k2}),DES.create({type:'decrypt',key:k1})];}}function EDE(options){Cipher.call(this,options);var state=new EDEState(this.type,this.options.key);this._edeState=state;}inherits(EDE,Cipher);module.exports=EDE;EDE.create=function create(options){return new EDE(options);};EDE.prototype._update=function _update(inp,inOff,out,outOff){var state=this._edeState;state.ciphers[0]._update(inp,inOff,out,outOff);state.ciphers[1]._update(out,outOff,out,outOff);state.ciphers[2]._update(out,outOff,out,outOff);};EDE.prototype._pad=DES.prototype._pad;EDE.prototype._unpad=DES.prototype._unpad;},{"./cipher":318,"./des":319,"inherits":364,"minimalistic-assert":414}],321:[function(require,module,exports){'use strict';exports.readUInt32BE=function readUInt32BE(bytes,off){var res=bytes[0+off]<<24|bytes[1+off]<<16|bytes[2+off]<<8|bytes[3+off];return res>>>0;};exports.writeUInt32BE=function writeUInt32BE(bytes,value,off){bytes[0+off]=value>>>24;bytes[1+off]=value>>>16&0xff;bytes[2+off]=value>>>8&0xff;bytes[3+off]=value&0xff;};exports.ip=function ip(inL,inR,out,off){var outL=0;var outR=0;for(var i=6;i>=0;i-=2){for(var j=0;j<=24;j+=8){outL<<=1;outL|=inR>>>j+i&1;}for(var j=0;j<=24;j+=8){outL<<=1;outL|=inL>>>j+i&1;}}for(var i=6;i>=0;i-=2){for(var j=1;j<=25;j+=8){outR<<=1;outR|=inR>>>j+i&1;}for(var j=1;j<=25;j+=8){outR<<=1;outR|=inL>>>j+i&1;}}out[off+0]=outL>>>0;out[off+1]=outR>>>0;};exports.rip=function rip(inL,inR,out,off){var outL=0;var outR=0;for(var i=0;i<4;i++){for(var j=24;j>=0;j-=8){outL<<=1;outL|=inR>>>j+i&1;outL<<=1;outL|=inL>>>j+i&1;}}for(var i=4;i<8;i++){for(var j=24;j>=0;j-=8){outR<<=1;outR|=inR>>>j+i&1;outR<<=1;outR|=inL>>>j+i&1;}}out[off+0]=outL>>>0;out[off+1]=outR>>>0;};exports.pc1=function pc1(inL,inR,out,off){var outL=0;var outR=0;// 7, 15, 23, 31, 39, 47, 55, 63 |
|
|
// 6, 14, 22, 30, 39, 47, 55, 63 |
|
|
// 5, 13, 21, 29, 39, 47, 55, 63 |
|
|
// 4, 12, 20, 28 |
|
|
for(var i=7;i>=5;i--){for(var j=0;j<=24;j+=8){outL<<=1;outL|=inR>>j+i&1;}for(var j=0;j<=24;j+=8){outL<<=1;outL|=inL>>j+i&1;}}for(var j=0;j<=24;j+=8){outL<<=1;outL|=inR>>j+i&1;}// 1, 9, 17, 25, 33, 41, 49, 57 |
|
|
// 2, 10, 18, 26, 34, 42, 50, 58 |
|
|
// 3, 11, 19, 27, 35, 43, 51, 59 |
|
|
// 36, 44, 52, 60 |
|
|
for(var i=1;i<=3;i++){for(var j=0;j<=24;j+=8){outR<<=1;outR|=inR>>j+i&1;}for(var j=0;j<=24;j+=8){outR<<=1;outR|=inL>>j+i&1;}}for(var j=0;j<=24;j+=8){outR<<=1;outR|=inL>>j+i&1;}out[off+0]=outL>>>0;out[off+1]=outR>>>0;};exports.r28shl=function r28shl(num,shift){return num<<shift&0xfffffff|num>>>28-shift;};var pc2table=[// inL => outL |
|
|
14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,// inR => outR |
|
|
15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];exports.pc2=function pc2(inL,inR,out,off){var outL=0;var outR=0;var len=pc2table.length>>>1;for(var i=0;i<len;i++){outL<<=1;outL|=inL>>>pc2table[i]&0x1;}for(var i=len;i<pc2table.length;i++){outR<<=1;outR|=inR>>>pc2table[i]&0x1;}out[off+0]=outL>>>0;out[off+1]=outR>>>0;};exports.expand=function expand(r,out,off){var outL=0;var outR=0;outL=(r&1)<<5|r>>>27;for(var i=23;i>=15;i-=4){outL<<=6;outL|=r>>>i&0x3f;}for(var i=11;i>=3;i-=4){outR|=r>>>i&0x3f;outR<<=6;}outR|=(r&0x1f)<<1|r>>>31;out[off+0]=outL>>>0;out[off+1]=outR>>>0;};var sTable=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];exports.substitute=function substitute(inL,inR){var out=0;for(var i=0;i<4;i++){var b=inL>>>18-i*6&0x3f;var sb=sTable[i*0x40+b];out<<=4;out|=sb;}for(var i=0;i<4;i++){var b=inR>>>18-i*6&0x3f;var sb=sTable[4*0x40+i*0x40+b];out<<=4;out|=sb;}return out>>>0;};var permuteTable=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];exports.permute=function permute(num){var out=0;for(var i=0;i<permuteTable.length;i++){out<<=1;out|=num>>>permuteTable[i]&0x1;}return out>>>0;};exports.padSplit=function padSplit(num,size,group){var str=num.toString(2);while(str.length<size){str='0'+str;}var out=[];for(var i=0;i<size;i+=group){out.push(str.slice(i,i+group));}return out.join(' ');};},{}],322:[function(require,module,exports){(function(Buffer){var generatePrime=require('./lib/generatePrime');var primes=require('./lib/primes.json');var DH=require('./lib/dh');function getDiffieHellman(mod){var prime=new Buffer(primes[mod].prime,'hex');var gen=new Buffer(primes[mod].gen,'hex');return new DH(prime,gen);}var ENCODINGS={'binary':true,'hex':true,'base64':true};function createDiffieHellman(prime,enc,generator,genc){if(Buffer.isBuffer(enc)||ENCODINGS[enc]===undefined){return createDiffieHellman(prime,'binary',enc,generator);}enc=enc||'binary';genc=genc||'binary';generator=generator||new Buffer([2]);if(!Buffer.isBuffer(generator)){generator=new Buffer(generator,genc);}if(typeof prime==='number'){return new DH(generatePrime(prime,generator),generator,true);}if(!Buffer.isBuffer(prime)){prime=new Buffer(prime,enc);}return new DH(prime,generator,true);}exports.DiffieHellmanGroup=exports.createDiffieHellmanGroup=exports.getDiffieHellman=getDiffieHellman;exports.createDiffieHellman=exports.DiffieHellman=createDiffieHellman;}).call(this,require("buffer").Buffer);},{"./lib/dh":323,"./lib/generatePrime":324,"./lib/primes.json":325,"buffer":214}],323:[function(require,module,exports){(function(Buffer){var BN=require('bn.js');var MillerRabin=require('miller-rabin');var millerRabin=new MillerRabin();var TWENTYFOUR=new BN(24);var ELEVEN=new BN(11);var TEN=new BN(10);var THREE=new BN(3);var SEVEN=new BN(7);var primes=require('./generatePrime');var randomBytes=require('randombytes');module.exports=DH;function setPublicKey(pub,enc){enc=enc||'utf8';if(!Buffer.isBuffer(pub)){pub=new Buffer(pub,enc);}this._pub=new BN(pub);return this;}function setPrivateKey(priv,enc){enc=enc||'utf8';if(!Buffer.isBuffer(priv)){priv=new Buffer(priv,enc);}this._priv=new BN(priv);return this;}var primeCache={};function checkPrime(prime,generator){var gen=generator.toString('hex');var hex=[gen,prime.toString(16)].join('_');if(hex in primeCache){return primeCache[hex];}var error=0;if(prime.isEven()||!primes.simpleSieve||!primes.fermatTest(prime)||!millerRabin.test(prime)){//not a prime so +1 |
|
|
error+=1;if(gen==='02'||gen==='05'){// we'd be able to check the generator |
|
|
// it would fail so +8 |
|
|
error+=8;}else{//we wouldn't be able to test the generator |
|
|
// so +4 |
|
|
error+=4;}primeCache[hex]=error;return error;}if(!millerRabin.test(prime.shrn(1))){//not a safe prime |
|
|
error+=2;}var rem;switch(gen){case'02':if(prime.mod(TWENTYFOUR).cmp(ELEVEN)){// unsuidable generator |
|
|
error+=8;}break;case'05':rem=prime.mod(TEN);if(rem.cmp(THREE)&&rem.cmp(SEVEN)){// prime mod 10 needs to equal 3 or 7 |
|
|
error+=8;}break;default:error+=4;}primeCache[hex]=error;return error;}function DH(prime,generator,malleable){this.setGenerator(generator);this.__prime=new BN(prime);this._prime=BN.mont(this.__prime);this._primeLen=prime.length;this._pub=undefined;this._priv=undefined;this._primeCode=undefined;if(malleable){this.setPublicKey=setPublicKey;this.setPrivateKey=setPrivateKey;}else{this._primeCode=8;}}Object.defineProperty(DH.prototype,'verifyError',{enumerable:true,get:function get(){if(typeof this._primeCode!=='number'){this._primeCode=checkPrime(this.__prime,this.__gen);}return this._primeCode;}});DH.prototype.generateKeys=function(){if(!this._priv){this._priv=new BN(randomBytes(this._primeLen));}this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed();return this.getPublicKey();};DH.prototype.computeSecret=function(other){other=new BN(other);other=other.toRed(this._prime);var secret=other.redPow(this._priv).fromRed();var out=new Buffer(secret.toArray());var prime=this.getPrime();if(out.length<prime.length){var front=new Buffer(prime.length-out.length);front.fill(0);out=Buffer.concat([front,out]);}return out;};DH.prototype.getPublicKey=function getPublicKey(enc){return formatReturnValue(this._pub,enc);};DH.prototype.getPrivateKey=function getPrivateKey(enc){return formatReturnValue(this._priv,enc);};DH.prototype.getPrime=function(enc){return formatReturnValue(this.__prime,enc);};DH.prototype.getGenerator=function(enc){return formatReturnValue(this._gen,enc);};DH.prototype.setGenerator=function(gen,enc){enc=enc||'utf8';if(!Buffer.isBuffer(gen)){gen=new Buffer(gen,enc);}this.__gen=gen;this._gen=new BN(gen);return this;};function formatReturnValue(bn,enc){var buf=new Buffer(bn.toArray());if(!enc){return buf;}else{return buf.toString(enc);}}}).call(this,require("buffer").Buffer);},{"./generatePrime":324,"bn.js":326,"buffer":214,"miller-rabin":412,"randombytes":451}],324:[function(require,module,exports){var randomBytes=require('randombytes');module.exports=findPrime;findPrime.simpleSieve=simpleSieve;findPrime.fermatTest=fermatTest;var BN=require('bn.js');var TWENTYFOUR=new BN(24);var MillerRabin=require('miller-rabin');var millerRabin=new MillerRabin();var ONE=new BN(1);var TWO=new BN(2);var FIVE=new BN(5);var SIXTEEN=new BN(16);var EIGHT=new BN(8);var TEN=new BN(10);var THREE=new BN(3);var SEVEN=new BN(7);var ELEVEN=new BN(11);var FOUR=new BN(4);var TWELVE=new BN(12);var primes=null;function _getPrimes(){if(primes!==null)return primes;var limit=0x100000;var res=[];res[0]=2;for(var i=1,k=3;k<limit;k+=2){var sqrt=Math.ceil(Math.sqrt(k));for(var j=0;j<i&&res[j]<=sqrt;j++){if(k%res[j]===0)break;}if(i!==j&&res[j]<=sqrt)continue;res[i++]=k;}primes=res;return res;}function simpleSieve(p){var primes=_getPrimes();for(var i=0;i<primes.length;i++){if(p.modn(primes[i])===0){if(p.cmpn(primes[i])===0){return true;}else{return false;}}}return true;}function fermatTest(p){var red=BN.mont(p);return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1)===0;}function findPrime(bits,gen){if(bits<16){// this is what openssl does |
|
|
if(gen===2||gen===5){return new BN([0x8c,0x7b]);}else{return new BN([0x8c,0x27]);}}gen=new BN(gen);var num,n2;while(true){num=new BN(randomBytes(Math.ceil(bits/8)));while(num.bitLength()>bits){num.ishrn(1);}if(num.isEven()){num.iadd(ONE);}if(!num.testn(1)){num.iadd(TWO);}if(!gen.cmp(TWO)){while(num.mod(TWENTYFOUR).cmp(ELEVEN)){num.iadd(FOUR);}}else if(!gen.cmp(FIVE)){while(num.mod(TEN).cmp(THREE)){num.iadd(FOUR);}}n2=num.shrn(1);if(simpleSieve(n2)&&simpleSieve(num)&&fermatTest(n2)&&fermatTest(num)&&millerRabin.test(n2)&&millerRabin.test(num)){return num;}}}},{"bn.js":326,"miller-rabin":412,"randombytes":451}],325:[function(require,module,exports){module.exports={"modp1":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},"modp2":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},"modp5":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},"modp14":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},"modp15":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},"modp16":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},"modp17":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},"modp18":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}};},{}],326:[function(require,module,exports){arguments[4][179][0].apply(exports,arguments);},{"buffer":183,"dup":179}],327:[function(require,module,exports){'use strict';var elliptic=exports;elliptic.version=require('../package.json').version;elliptic.utils=require('./elliptic/utils');elliptic.rand=require('brorand');elliptic.curve=require('./elliptic/curve');elliptic.curves=require('./elliptic/curves');// Protocols |
|
|
elliptic.ec=require('./elliptic/ec');elliptic.eddsa=require('./elliptic/eddsa');},{"../package.json":343,"./elliptic/curve":330,"./elliptic/curves":333,"./elliptic/ec":334,"./elliptic/eddsa":337,"./elliptic/utils":341,"brorand":182}],328:[function(require,module,exports){'use strict';var BN=require('bn.js');var utils=require('../utils');var getNAF=utils.getNAF;var getJSF=utils.getJSF;var assert=utils.assert;function BaseCurve(type,conf){this.type=type;this.p=new BN(conf.p,16);// Use Montgomery, when there is no fast reduction for the prime |
|
|
this.red=conf.prime?BN.red(conf.prime):BN.mont(this.p);// Useful for many curves |
|
|
this.zero=new BN(0).toRed(this.red);this.one=new BN(1).toRed(this.red);this.two=new BN(2).toRed(this.red);// Curve configuration, optional |
|
|
this.n=conf.n&&new BN(conf.n,16);this.g=conf.g&&this.pointFromJSON(conf.g,conf.gRed);// Temporary arrays |
|
|
this._wnafT1=new Array(4);this._wnafT2=new Array(4);this._wnafT3=new Array(4);this._wnafT4=new Array(4);this._bitLength=this.n?this.n.bitLength():0;// Generalized Greg Maxwell's trick |
|
|
var adjustCount=this.n&&this.p.div(this.n);if(!adjustCount||adjustCount.cmpn(100)>0){this.redN=null;}else{this._maxwellTrick=true;this.redN=this.n.toRed(this.red);}}module.exports=BaseCurve;BaseCurve.prototype.point=function point(){throw new Error('Not implemented');};BaseCurve.prototype.validate=function validate(){throw new Error('Not implemented');};BaseCurve.prototype._fixedNafMul=function _fixedNafMul(p,k){assert(p.precomputed);var doubles=p._getDoubles();var naf=getNAF(k,1,this._bitLength);var I=(1<<doubles.step+1)-(doubles.step%2===0?2:1);I/=3;// Translate into more windowed form |
|
|
var repr=[];for(var j=0;j<naf.length;j+=doubles.step){var nafW=0;for(var k=j+doubles.step-1;k>=j;k--){nafW=(nafW<<1)+naf[k];}repr.push(nafW);}var a=this.jpoint(null,null,null);var b=this.jpoint(null,null,null);for(var i=I;i>0;i--){for(var j=0;j<repr.length;j++){var nafW=repr[j];if(nafW===i)b=b.mixedAdd(doubles.points[j]);else if(nafW===-i)b=b.mixedAdd(doubles.points[j].neg());}a=a.add(b);}return a.toP();};BaseCurve.prototype._wnafMul=function _wnafMul(p,k){var w=4;// Precompute window |
|
|
var nafPoints=p._getNAFPoints(w);w=nafPoints.wnd;var wnd=nafPoints.points;// Get NAF form |
|
|
var naf=getNAF(k,w,this._bitLength);// Add `this`*(N+1) for every w-NAF index |
|
|
var acc=this.jpoint(null,null,null);for(var i=naf.length-1;i>=0;i--){// Count zeroes |
|
|
for(var k=0;i>=0&&naf[i]===0;i--){k++;}if(i>=0)k++;acc=acc.dblp(k);if(i<0)break;var z=naf[i];assert(z!==0);if(p.type==='affine'){// J +- P |
|
|
if(z>0)acc=acc.mixedAdd(wnd[z-1>>1]);else acc=acc.mixedAdd(wnd[-z-1>>1].neg());}else{// J +- J |
|
|
if(z>0)acc=acc.add(wnd[z-1>>1]);else acc=acc.add(wnd[-z-1>>1].neg());}}return p.type==='affine'?acc.toP():acc;};BaseCurve.prototype._wnafMulAdd=function _wnafMulAdd(defW,points,coeffs,len,jacobianResult){var wndWidth=this._wnafT1;var wnd=this._wnafT2;var naf=this._wnafT3;// Fill all arrays |
|
|
var max=0;for(var i=0;i<len;i++){var p=points[i];var nafPoints=p._getNAFPoints(defW);wndWidth[i]=nafPoints.wnd;wnd[i]=nafPoints.points;}// Comb small window NAFs |
|
|
for(var i=len-1;i>=1;i-=2){var a=i-1;var b=i;if(wndWidth[a]!==1||wndWidth[b]!==1){naf[a]=getNAF(coeffs[a],wndWidth[a],this._bitLength);naf[b]=getNAF(coeffs[b],wndWidth[b],this._bitLength);max=Math.max(naf[a].length,max);max=Math.max(naf[b].length,max);continue;}var comb=[points[a],/* 1 */null,/* 3 */null,/* 5 */points[b]/* 7 */];// Try to avoid Projective points, if possible |
|
|
if(points[a].y.cmp(points[b].y)===0){comb[1]=points[a].add(points[b]);comb[2]=points[a].toJ().mixedAdd(points[b].neg());}else if(points[a].y.cmp(points[b].y.redNeg())===0){comb[1]=points[a].toJ().mixedAdd(points[b]);comb[2]=points[a].add(points[b].neg());}else{comb[1]=points[a].toJ().mixedAdd(points[b]);comb[2]=points[a].toJ().mixedAdd(points[b].neg());}var index=[-3,/* -1 -1 */-1,/* -1 0 */-5,/* -1 1 */-7,/* 0 -1 */0,/* 0 0 */7,/* 0 1 */5,/* 1 -1 */1,/* 1 0 */3/* 1 1 */];var jsf=getJSF(coeffs[a],coeffs[b]);max=Math.max(jsf[0].length,max);naf[a]=new Array(max);naf[b]=new Array(max);for(var j=0;j<max;j++){var ja=jsf[0][j]|0;var jb=jsf[1][j]|0;naf[a][j]=index[(ja+1)*3+(jb+1)];naf[b][j]=0;wnd[a]=comb;}}var acc=this.jpoint(null,null,null);var tmp=this._wnafT4;for(var i=max;i>=0;i--){var k=0;while(i>=0){var zero=true;for(var j=0;j<len;j++){tmp[j]=naf[j][i]|0;if(tmp[j]!==0)zero=false;}if(!zero)break;k++;i--;}if(i>=0)k++;acc=acc.dblp(k);if(i<0)break;for(var j=0;j<len;j++){var z=tmp[j];var p;if(z===0)continue;else if(z>0)p=wnd[j][z-1>>1];else if(z<0)p=wnd[j][-z-1>>1].neg();if(p.type==='affine')acc=acc.mixedAdd(p);else acc=acc.add(p);}}// Zeroify references |
|
|
for(var i=0;i<len;i++){wnd[i]=null;}if(jacobianResult)return acc;else return acc.toP();};function BasePoint(curve,type){this.curve=curve;this.type=type;this.precomputed=null;}BaseCurve.BasePoint=BasePoint;BasePoint.prototype.eq=function eq()/*other*/{throw new Error('Not implemented');};BasePoint.prototype.validate=function validate(){return this.curve.validate(this);};BaseCurve.prototype.decodePoint=function decodePoint(bytes,enc){bytes=utils.toArray(bytes,enc);var len=this.p.byteLength();// uncompressed, hybrid-odd, hybrid-even |
|
|
if((bytes[0]===0x04||bytes[0]===0x06||bytes[0]===0x07)&&bytes.length-1===2*len){if(bytes[0]===0x06)assert(bytes[bytes.length-1]%2===0);else if(bytes[0]===0x07)assert(bytes[bytes.length-1]%2===1);var res=this.point(bytes.slice(1,1+len),bytes.slice(1+len,1+2*len));return res;}else if((bytes[0]===0x02||bytes[0]===0x03)&&bytes.length-1===len){return this.pointFromX(bytes.slice(1,1+len),bytes[0]===0x03);}throw new Error('Unknown point format');};BasePoint.prototype.encodeCompressed=function encodeCompressed(enc){return this.encode(enc,true);};BasePoint.prototype._encode=function _encode(compact){var len=this.curve.p.byteLength();var x=this.getX().toArray('be',len);if(compact)return[this.getY().isEven()?0x02:0x03].concat(x);return[0x04].concat(x,this.getY().toArray('be',len));};BasePoint.prototype.encode=function encode(enc,compact){return utils.encode(this._encode(compact),enc);};BasePoint.prototype.precompute=function precompute(power){if(this.precomputed)return this;var precomputed={doubles:null,naf:null,beta:null};precomputed.naf=this._getNAFPoints(8);precomputed.doubles=this._getDoubles(4,power);precomputed.beta=this._getBeta();this.precomputed=precomputed;return this;};BasePoint.prototype._hasDoubles=function _hasDoubles(k){if(!this.precomputed)return false;var doubles=this.precomputed.doubles;if(!doubles)return false;return doubles.points.length>=Math.ceil((k.bitLength()+1)/doubles.step);};BasePoint.prototype._getDoubles=function _getDoubles(step,power){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;var doubles=[this];var acc=this;for(var i=0;i<power;i+=step){for(var j=0;j<step;j++){acc=acc.dbl();}doubles.push(acc);}return{step:step,points:doubles};};BasePoint.prototype._getNAFPoints=function _getNAFPoints(wnd){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;var res=[this];var max=(1<<wnd)-1;var dbl=max===1?null:this.dbl();for(var i=1;i<max;i++){res[i]=res[i-1].add(dbl);}return{wnd:wnd,points:res};};BasePoint.prototype._getBeta=function _getBeta(){return null;};BasePoint.prototype.dblp=function dblp(k){var r=this;for(var i=0;i<k;i++){r=r.dbl();}return r;};},{"../utils":341,"bn.js":342}],329:[function(require,module,exports){'use strict';var utils=require('../utils');var BN=require('bn.js');var inherits=require('inherits');var Base=require('./base');var assert=utils.assert;function EdwardsCurve(conf){// NOTE: Important as we are creating point in Base.call() |
|
|
this.twisted=(conf.a|0)!==1;this.mOneA=this.twisted&&(conf.a|0)===-1;this.extended=this.mOneA;Base.call(this,'edwards',conf);this.a=new BN(conf.a,16).umod(this.red.m);this.a=this.a.toRed(this.red);this.c=new BN(conf.c,16).toRed(this.red);this.c2=this.c.redSqr();this.d=new BN(conf.d,16).toRed(this.red);this.dd=this.d.redAdd(this.d);assert(!this.twisted||this.c.fromRed().cmpn(1)===0);this.oneC=(conf.c|0)===1;}inherits(EdwardsCurve,Base);module.exports=EdwardsCurve;EdwardsCurve.prototype._mulA=function _mulA(num){if(this.mOneA)return num.redNeg();else return this.a.redMul(num);};EdwardsCurve.prototype._mulC=function _mulC(num){if(this.oneC)return num;else return this.c.redMul(num);};// Just for compatibility with Short curve |
|
|
EdwardsCurve.prototype.jpoint=function jpoint(x,y,z,t){return this.point(x,y,z,t);};EdwardsCurve.prototype.pointFromX=function pointFromX(x,odd){x=new BN(x,16);if(!x.red)x=x.toRed(this.red);var x2=x.redSqr();var rhs=this.c2.redSub(this.a.redMul(x2));var lhs=this.one.redSub(this.c2.redMul(this.d).redMul(x2));var y2=rhs.redMul(lhs.redInvm());var y=y2.redSqrt();if(y.redSqr().redSub(y2).cmp(this.zero)!==0)throw new Error('invalid point');var isOdd=y.fromRed().isOdd();if(odd&&!isOdd||!odd&&isOdd)y=y.redNeg();return this.point(x,y);};EdwardsCurve.prototype.pointFromY=function pointFromY(y,odd){y=new BN(y,16);if(!y.red)y=y.toRed(this.red);// x^2 = (y^2 - c^2) / (c^2 d y^2 - a) |
|
|
var y2=y.redSqr();var lhs=y2.redSub(this.c2);var rhs=y2.redMul(this.d).redMul(this.c2).redSub(this.a);var x2=lhs.redMul(rhs.redInvm());if(x2.cmp(this.zero)===0){if(odd)throw new Error('invalid point');else return this.point(this.zero,y);}var x=x2.redSqrt();if(x.redSqr().redSub(x2).cmp(this.zero)!==0)throw new Error('invalid point');if(x.fromRed().isOdd()!==odd)x=x.redNeg();return this.point(x,y);};EdwardsCurve.prototype.validate=function validate(point){if(point.isInfinity())return true;// Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) |
|
|
point.normalize();var x2=point.x.redSqr();var y2=point.y.redSqr();var lhs=x2.redMul(this.a).redAdd(y2);var rhs=this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));return lhs.cmp(rhs)===0;};function Point(curve,x,y,z,t){Base.BasePoint.call(this,curve,'projective');if(x===null&&y===null&&z===null){this.x=this.curve.zero;this.y=this.curve.one;this.z=this.curve.one;this.t=this.curve.zero;this.zOne=true;}else{this.x=new BN(x,16);this.y=new BN(y,16);this.z=z?new BN(z,16):this.curve.one;this.t=t&&new BN(t,16);if(!this.x.red)this.x=this.x.toRed(this.curve.red);if(!this.y.red)this.y=this.y.toRed(this.curve.red);if(!this.z.red)this.z=this.z.toRed(this.curve.red);if(this.t&&!this.t.red)this.t=this.t.toRed(this.curve.red);this.zOne=this.z===this.curve.one;// Use extended coordinates |
|
|
if(this.curve.extended&&!this.t){this.t=this.x.redMul(this.y);if(!this.zOne)this.t=this.t.redMul(this.z.redInvm());}}}inherits(Point,Base.BasePoint);EdwardsCurve.prototype.pointFromJSON=function pointFromJSON(obj){return Point.fromJSON(this,obj);};EdwardsCurve.prototype.point=function point(x,y,z,t){return new Point(this,x,y,z,t);};Point.fromJSON=function fromJSON(curve,obj){return new Point(curve,obj[0],obj[1],obj[2]);};Point.prototype.inspect=function inspect(){if(this.isInfinity())return'<EC Point Infinity>';return'<EC Point x: '+this.x.fromRed().toString(16,2)+' y: '+this.y.fromRed().toString(16,2)+' z: '+this.z.fromRed().toString(16,2)+'>';};Point.prototype.isInfinity=function isInfinity(){// XXX This code assumes that zero is always zero in red |
|
|
return this.x.cmpn(0)===0&&(this.y.cmp(this.z)===0||this.zOne&&this.y.cmp(this.curve.c)===0);};Point.prototype._extDbl=function _extDbl(){// hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html |
|
|
// #doubling-dbl-2008-hwcd |
|
|
// 4M + 4S |
|
|
// A = X1^2 |
|
|
var a=this.x.redSqr();// B = Y1^2 |
|
|
var b=this.y.redSqr();// C = 2 * Z1^2 |
|
|
var c=this.z.redSqr();c=c.redIAdd(c);// D = a * A |
|
|
var d=this.curve._mulA(a);// E = (X1 + Y1)^2 - A - B |
|
|
var e=this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);// G = D + B |
|
|
var g=d.redAdd(b);// F = G - C |
|
|
var f=g.redSub(c);// H = D - B |
|
|
var h=d.redSub(b);// X3 = E * F |
|
|
var nx=e.redMul(f);// Y3 = G * H |
|
|
var ny=g.redMul(h);// T3 = E * H |
|
|
var nt=e.redMul(h);// Z3 = F * G |
|
|
var nz=f.redMul(g);return this.curve.point(nx,ny,nz,nt);};Point.prototype._projDbl=function _projDbl(){// hyperelliptic.org/EFD/g1p/auto-twisted-projective.html |
|
|
// #doubling-dbl-2008-bbjlp |
|
|
// #doubling-dbl-2007-bl |
|
|
// and others |
|
|
// Generally 3M + 4S or 2M + 4S |
|
|
// B = (X1 + Y1)^2 |
|
|
var b=this.x.redAdd(this.y).redSqr();// C = X1^2 |
|
|
var c=this.x.redSqr();// D = Y1^2 |
|
|
var d=this.y.redSqr();var nx;var ny;var nz;if(this.curve.twisted){// E = a * C |
|
|
var e=this.curve._mulA(c);// F = E + D |
|
|
var f=e.redAdd(d);if(this.zOne){// X3 = (B - C - D) * (F - 2) |
|
|
nx=b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));// Y3 = F * (E - D) |
|
|
ny=f.redMul(e.redSub(d));// Z3 = F^2 - 2 * F |
|
|
nz=f.redSqr().redSub(f).redSub(f);}else{// H = Z1^2 |
|
|
var h=this.z.redSqr();// J = F - 2 * H |
|
|
var j=f.redSub(h).redISub(h);// X3 = (B-C-D)*J |
|
|
nx=b.redSub(c).redISub(d).redMul(j);// Y3 = F * (E - D) |
|
|
ny=f.redMul(e.redSub(d));// Z3 = F * J |
|
|
nz=f.redMul(j);}}else{// E = C + D |
|
|
var e=c.redAdd(d);// H = (c * Z1)^2 |
|
|
var h=this.curve._mulC(this.z).redSqr();// J = E - 2 * H |
|
|
var j=e.redSub(h).redSub(h);// X3 = c * (B - E) * J |
|
|
nx=this.curve._mulC(b.redISub(e)).redMul(j);// Y3 = c * E * (C - D) |
|
|
ny=this.curve._mulC(e).redMul(c.redISub(d));// Z3 = E * J |
|
|
nz=e.redMul(j);}return this.curve.point(nx,ny,nz);};Point.prototype.dbl=function dbl(){if(this.isInfinity())return this;// Double in extended coordinates |
|
|
if(this.curve.extended)return this._extDbl();else return this._projDbl();};Point.prototype._extAdd=function _extAdd(p){// hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html |
|
|
// #addition-add-2008-hwcd-3 |
|
|
// 8M |
|
|
// A = (Y1 - X1) * (Y2 - X2) |
|
|
var a=this.y.redSub(this.x).redMul(p.y.redSub(p.x));// B = (Y1 + X1) * (Y2 + X2) |
|
|
var b=this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));// C = T1 * k * T2 |
|
|
var c=this.t.redMul(this.curve.dd).redMul(p.t);// D = Z1 * 2 * Z2 |
|
|
var d=this.z.redMul(p.z.redAdd(p.z));// E = B - A |
|
|
var e=b.redSub(a);// F = D - C |
|
|
var f=d.redSub(c);// G = D + C |
|
|
var g=d.redAdd(c);// H = B + A |
|
|
var h=b.redAdd(a);// X3 = E * F |
|
|
var nx=e.redMul(f);// Y3 = G * H |
|
|
var ny=g.redMul(h);// T3 = E * H |
|
|
var nt=e.redMul(h);// Z3 = F * G |
|
|
var nz=f.redMul(g);return this.curve.point(nx,ny,nz,nt);};Point.prototype._projAdd=function _projAdd(p){// hyperelliptic.org/EFD/g1p/auto-twisted-projective.html |
|
|
// #addition-add-2008-bbjlp |
|
|
// #addition-add-2007-bl |
|
|
// 10M + 1S |
|
|
// A = Z1 * Z2 |
|
|
var a=this.z.redMul(p.z);// B = A^2 |
|
|
var b=a.redSqr();// C = X1 * X2 |
|
|
var c=this.x.redMul(p.x);// D = Y1 * Y2 |
|
|
var d=this.y.redMul(p.y);// E = d * C * D |
|
|
var e=this.curve.d.redMul(c).redMul(d);// F = B - E |
|
|
var f=b.redSub(e);// G = B + E |
|
|
var g=b.redAdd(e);// X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D) |
|
|
var tmp=this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);var nx=a.redMul(f).redMul(tmp);var ny;var nz;if(this.curve.twisted){// Y3 = A * G * (D - a * C) |
|
|
ny=a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));// Z3 = F * G |
|
|
nz=f.redMul(g);}else{// Y3 = A * G * (D - C) |
|
|
ny=a.redMul(g).redMul(d.redSub(c));// Z3 = c * F * G |
|
|
nz=this.curve._mulC(f).redMul(g);}return this.curve.point(nx,ny,nz);};Point.prototype.add=function add(p){if(this.isInfinity())return p;if(p.isInfinity())return this;if(this.curve.extended)return this._extAdd(p);else return this._projAdd(p);};Point.prototype.mul=function mul(k){if(this._hasDoubles(k))return this.curve._fixedNafMul(this,k);else return this.curve._wnafMul(this,k);};Point.prototype.mulAdd=function mulAdd(k1,p,k2){return this.curve._wnafMulAdd(1,[this,p],[k1,k2],2,false);};Point.prototype.jmulAdd=function jmulAdd(k1,p,k2){return this.curve._wnafMulAdd(1,[this,p],[k1,k2],2,true);};Point.prototype.normalize=function normalize(){if(this.zOne)return this;// Normalize coordinates |
|
|
var zi=this.z.redInvm();this.x=this.x.redMul(zi);this.y=this.y.redMul(zi);if(this.t)this.t=this.t.redMul(zi);this.z=this.curve.one;this.zOne=true;return this;};Point.prototype.neg=function neg(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg());};Point.prototype.getX=function getX(){this.normalize();return this.x.fromRed();};Point.prototype.getY=function getY(){this.normalize();return this.y.fromRed();};Point.prototype.eq=function eq(other){return this===other||this.getX().cmp(other.getX())===0&&this.getY().cmp(other.getY())===0;};Point.prototype.eqXToP=function eqXToP(x){var rx=x.toRed(this.curve.red).redMul(this.z);if(this.x.cmp(rx)===0)return true;var xc=x.clone();var t=this.curve.redN.redMul(this.z);for(;;){xc.iadd(this.curve.n);if(xc.cmp(this.curve.p)>=0)return false;rx.redIAdd(t);if(this.x.cmp(rx)===0)return true;}};// Compatibility with BaseCurve |
|
|
Point.prototype.toP=Point.prototype.normalize;Point.prototype.mixedAdd=Point.prototype.add;},{"../utils":341,"./base":328,"bn.js":342,"inherits":364}],330:[function(require,module,exports){'use strict';var curve=exports;curve.base=require('./base');curve.short=require('./short');curve.mont=require('./mont');curve.edwards=require('./edwards');},{"./base":328,"./edwards":329,"./mont":331,"./short":332}],331:[function(require,module,exports){'use strict';var BN=require('bn.js');var inherits=require('inherits');var Base=require('./base');var utils=require('../utils');function MontCurve(conf){Base.call(this,'mont',conf);this.a=new BN(conf.a,16).toRed(this.red);this.b=new BN(conf.b,16).toRed(this.red);this.i4=new BN(4).toRed(this.red).redInvm();this.two=new BN(2).toRed(this.red);this.a24=this.i4.redMul(this.a.redAdd(this.two));}inherits(MontCurve,Base);module.exports=MontCurve;MontCurve.prototype.validate=function validate(point){var x=point.normalize().x;var x2=x.redSqr();var rhs=x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);var y=rhs.redSqrt();return y.redSqr().cmp(rhs)===0;};function Point(curve,x,z){Base.BasePoint.call(this,curve,'projective');if(x===null&&z===null){this.x=this.curve.one;this.z=this.curve.zero;}else{this.x=new BN(x,16);this.z=new BN(z,16);if(!this.x.red)this.x=this.x.toRed(this.curve.red);if(!this.z.red)this.z=this.z.toRed(this.curve.red);}}inherits(Point,Base.BasePoint);MontCurve.prototype.decodePoint=function decodePoint(bytes,enc){return this.point(utils.toArray(bytes,enc),1);};MontCurve.prototype.point=function point(x,z){return new Point(this,x,z);};MontCurve.prototype.pointFromJSON=function pointFromJSON(obj){return Point.fromJSON(this,obj);};Point.prototype.precompute=function precompute(){// No-op |
|
|
};Point.prototype._encode=function _encode(){return this.getX().toArray('be',this.curve.p.byteLength());};Point.fromJSON=function fromJSON(curve,obj){return new Point(curve,obj[0],obj[1]||curve.one);};Point.prototype.inspect=function inspect(){if(this.isInfinity())return'<EC Point Infinity>';return'<EC Point x: '+this.x.fromRed().toString(16,2)+' z: '+this.z.fromRed().toString(16,2)+'>';};Point.prototype.isInfinity=function isInfinity(){// XXX This code assumes that zero is always zero in red |
|
|
return this.z.cmpn(0)===0;};Point.prototype.dbl=function dbl(){// http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3 |
|
|
// 2M + 2S + 4A |
|
|
// A = X1 + Z1 |
|
|
var a=this.x.redAdd(this.z);// AA = A^2 |
|
|
var aa=a.redSqr();// B = X1 - Z1 |
|
|
var b=this.x.redSub(this.z);// BB = B^2 |
|
|
var bb=b.redSqr();// C = AA - BB |
|
|
var c=aa.redSub(bb);// X3 = AA * BB |
|
|
var nx=aa.redMul(bb);// Z3 = C * (BB + A24 * C) |
|
|
var nz=c.redMul(bb.redAdd(this.curve.a24.redMul(c)));return this.curve.point(nx,nz);};Point.prototype.add=function add(){throw new Error('Not supported on Montgomery curve');};Point.prototype.diffAdd=function diffAdd(p,diff){// http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3 |
|
|
// 4M + 2S + 6A |
|
|
// A = X2 + Z2 |
|
|
var a=this.x.redAdd(this.z);// B = X2 - Z2 |
|
|
var b=this.x.redSub(this.z);// C = X3 + Z3 |
|
|
var c=p.x.redAdd(p.z);// D = X3 - Z3 |
|
|
var d=p.x.redSub(p.z);// DA = D * A |
|
|
var da=d.redMul(a);// CB = C * B |
|
|
var cb=c.redMul(b);// X5 = Z1 * (DA + CB)^2 |
|
|
var nx=diff.z.redMul(da.redAdd(cb).redSqr());// Z5 = X1 * (DA - CB)^2 |
|
|
var nz=diff.x.redMul(da.redISub(cb).redSqr());return this.curve.point(nx,nz);};Point.prototype.mul=function mul(k){var t=k.clone();var a=this;// (N / 2) * Q + Q |
|
|
var b=this.curve.point(null,null);// (N / 2) * Q |
|
|
var c=this;// Q |
|
|
for(var bits=[];t.cmpn(0)!==0;t.iushrn(1)){bits.push(t.andln(1));}for(var i=bits.length-1;i>=0;i--){if(bits[i]===0){// N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q |
|
|
a=a.diffAdd(b,c);// N * Q = 2 * ((N / 2) * Q + Q)) |
|
|
b=b.dbl();}else{// N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q) |
|
|
b=a.diffAdd(b,c);// N * Q + Q = 2 * ((N / 2) * Q + Q) |
|
|
a=a.dbl();}}return b;};Point.prototype.mulAdd=function mulAdd(){throw new Error('Not supported on Montgomery curve');};Point.prototype.jumlAdd=function jumlAdd(){throw new Error('Not supported on Montgomery curve');};Point.prototype.eq=function eq(other){return this.getX().cmp(other.getX())===0;};Point.prototype.normalize=function normalize(){this.x=this.x.redMul(this.z.redInvm());this.z=this.curve.one;return this;};Point.prototype.getX=function getX(){// Normalize coordinates |
|
|
this.normalize();return this.x.fromRed();};},{"../utils":341,"./base":328,"bn.js":342,"inherits":364}],332:[function(require,module,exports){'use strict';var utils=require('../utils');var BN=require('bn.js');var inherits=require('inherits');var Base=require('./base');var assert=utils.assert;function ShortCurve(conf){Base.call(this,'short',conf);this.a=new BN(conf.a,16).toRed(this.red);this.b=new BN(conf.b,16).toRed(this.red);this.tinv=this.two.redInvm();this.zeroA=this.a.fromRed().cmpn(0)===0;this.threeA=this.a.fromRed().sub(this.p).cmpn(-3)===0;// If the curve is endomorphic, precalculate beta and lambda |
|
|
this.endo=this._getEndomorphism(conf);this._endoWnafT1=new Array(4);this._endoWnafT2=new Array(4);}inherits(ShortCurve,Base);module.exports=ShortCurve;ShortCurve.prototype._getEndomorphism=function _getEndomorphism(conf){// No efficient endomorphism |
|
|
if(!this.zeroA||!this.g||!this.n||this.p.modn(3)!==1)return;// Compute beta and lambda, that lambda * P = (beta * Px; Py) |
|
|
var beta;var lambda;if(conf.beta){beta=new BN(conf.beta,16).toRed(this.red);}else{var betas=this._getEndoRoots(this.p);// Choose the smallest beta |
|
|
beta=betas[0].cmp(betas[1])<0?betas[0]:betas[1];beta=beta.toRed(this.red);}if(conf.lambda){lambda=new BN(conf.lambda,16);}else{// Choose the lambda that is matching selected beta |
|
|
var lambdas=this._getEndoRoots(this.n);if(this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta))===0){lambda=lambdas[0];}else{lambda=lambdas[1];assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta))===0);}}// Get basis vectors, used for balanced length-two representation |
|
|
var basis;if(conf.basis){basis=conf.basis.map(function(vec){return{a:new BN(vec.a,16),b:new BN(vec.b,16)};});}else{basis=this._getEndoBasis(lambda);}return{beta:beta,lambda:lambda,basis:basis};};ShortCurve.prototype._getEndoRoots=function _getEndoRoots(num){// Find roots of for x^2 + x + 1 in F |
|
|
// Root = (-1 +- Sqrt(-3)) / 2 |
|
|
// |
|
|
var red=num===this.p?this.red:BN.mont(num);var tinv=new BN(2).toRed(red).redInvm();var ntinv=tinv.redNeg();var s=new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);var l1=ntinv.redAdd(s).fromRed();var l2=ntinv.redSub(s).fromRed();return[l1,l2];};ShortCurve.prototype._getEndoBasis=function _getEndoBasis(lambda){// aprxSqrt >= sqrt(this.n) |
|
|
var aprxSqrt=this.n.ushrn(Math.floor(this.n.bitLength()/2));// 3.74 |
|
|
// Run EGCD, until r(L + 1) < aprxSqrt |
|
|
var u=lambda;var v=this.n.clone();var x1=new BN(1);var y1=new BN(0);var x2=new BN(0);var y2=new BN(1);// NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) |
|
|
var a0;var b0;// First vector |
|
|
var a1;var b1;// Second vector |
|
|
var a2;var b2;var prevR;var i=0;var r;var x;while(u.cmpn(0)!==0){var q=v.div(u);r=v.sub(q.mul(u));x=x2.sub(q.mul(x1));var y=y2.sub(q.mul(y1));if(!a1&&r.cmp(aprxSqrt)<0){a0=prevR.neg();b0=x1;a1=r.neg();b1=x;}else if(a1&&++i===2){break;}prevR=r;v=u;u=r;x2=x1;x1=x;y2=y1;y1=y;}a2=r.neg();b2=x;var len1=a1.sqr().add(b1.sqr());var len2=a2.sqr().add(b2.sqr());if(len2.cmp(len1)>=0){a2=a0;b2=b0;}// Normalize signs |
|
|
if(a1.negative){a1=a1.neg();b1=b1.neg();}if(a2.negative){a2=a2.neg();b2=b2.neg();}return[{a:a1,b:b1},{a:a2,b:b2}];};ShortCurve.prototype._endoSplit=function _endoSplit(k){var basis=this.endo.basis;var v1=basis[0];var v2=basis[1];var c1=v2.b.mul(k).divRound(this.n);var c2=v1.b.neg().mul(k).divRound(this.n);var p1=c1.mul(v1.a);var p2=c2.mul(v2.a);var q1=c1.mul(v1.b);var q2=c2.mul(v2.b);// Calculate answer |
|
|
var k1=k.sub(p1).sub(p2);var k2=q1.add(q2).neg();return{k1:k1,k2:k2};};ShortCurve.prototype.pointFromX=function pointFromX(x,odd){x=new BN(x,16);if(!x.red)x=x.toRed(this.red);var y2=x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);var y=y2.redSqrt();if(y.redSqr().redSub(y2).cmp(this.zero)!==0)throw new Error('invalid point');// XXX Is there any way to tell if the number is odd without converting it |
|
|
// to non-red form? |
|
|
var isOdd=y.fromRed().isOdd();if(odd&&!isOdd||!odd&&isOdd)y=y.redNeg();return this.point(x,y);};ShortCurve.prototype.validate=function validate(point){if(point.inf)return true;var x=point.x;var y=point.y;var ax=this.a.redMul(x);var rhs=x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);return y.redSqr().redISub(rhs).cmpn(0)===0;};ShortCurve.prototype._endoWnafMulAdd=function _endoWnafMulAdd(points,coeffs,jacobianResult){var npoints=this._endoWnafT1;var ncoeffs=this._endoWnafT2;for(var i=0;i<points.length;i++){var split=this._endoSplit(coeffs[i]);var p=points[i];var beta=p._getBeta();if(split.k1.negative){split.k1.ineg();p=p.neg(true);}if(split.k2.negative){split.k2.ineg();beta=beta.neg(true);}npoints[i*2]=p;npoints[i*2+1]=beta;ncoeffs[i*2]=split.k1;ncoeffs[i*2+1]=split.k2;}var res=this._wnafMulAdd(1,npoints,ncoeffs,i*2,jacobianResult);// Clean-up references to points and coefficients |
|
|
for(var j=0;j<i*2;j++){npoints[j]=null;ncoeffs[j]=null;}return res;};function Point(curve,x,y,isRed){Base.BasePoint.call(this,curve,'affine');if(x===null&&y===null){this.x=null;this.y=null;this.inf=true;}else{this.x=new BN(x,16);this.y=new BN(y,16);// Force redgomery representation when loading from JSON |
|
|
if(isRed){this.x.forceRed(this.curve.red);this.y.forceRed(this.curve.red);}if(!this.x.red)this.x=this.x.toRed(this.curve.red);if(!this.y.red)this.y=this.y.toRed(this.curve.red);this.inf=false;}}inherits(Point,Base.BasePoint);ShortCurve.prototype.point=function point(x,y,isRed){return new Point(this,x,y,isRed);};ShortCurve.prototype.pointFromJSON=function pointFromJSON(obj,red){return Point.fromJSON(this,obj,red);};Point.prototype._getBeta=function _getBeta(){if(!this.curve.endo)return;var pre=this.precomputed;if(pre&&pre.beta)return pre.beta;var beta=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(pre){var curve=this.curve;var endoMul=function endoMul(p){return curve.point(p.x.redMul(curve.endo.beta),p.y);};pre.beta=beta;beta.precomputed={beta:null,naf:pre.naf&&{wnd:pre.naf.wnd,points:pre.naf.points.map(endoMul)},doubles:pre.doubles&&{step:pre.doubles.step,points:pre.doubles.points.map(endoMul)}};}return beta;};Point.prototype.toJSON=function toJSON(){if(!this.precomputed)return[this.x,this.y];return[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}];};Point.fromJSON=function fromJSON(curve,obj,red){if(typeof obj==='string')obj=JSON.parse(obj);var res=curve.point(obj[0],obj[1],red);if(!obj[2])return res;function obj2point(obj){return curve.point(obj[0],obj[1],red);}var pre=obj[2];res.precomputed={beta:null,doubles:pre.doubles&&{step:pre.doubles.step,points:[res].concat(pre.doubles.points.map(obj2point))},naf:pre.naf&&{wnd:pre.naf.wnd,points:[res].concat(pre.naf.points.map(obj2point))}};return res;};Point.prototype.inspect=function inspect(){if(this.isInfinity())return'<EC Point Infinity>';return'<EC Point x: '+this.x.fromRed().toString(16,2)+' y: '+this.y.fromRed().toString(16,2)+'>';};Point.prototype.isInfinity=function isInfinity(){return this.inf;};Point.prototype.add=function add(p){// O + P = P |
|
|
if(this.inf)return p;// P + O = P |
|
|
if(p.inf)return this;// P + P = 2P |
|
|
if(this.eq(p))return this.dbl();// P + (-P) = O |
|
|
if(this.neg().eq(p))return this.curve.point(null,null);// P + Q = O |
|
|
if(this.x.cmp(p.x)===0)return this.curve.point(null,null);var c=this.y.redSub(p.y);if(c.cmpn(0)!==0)c=c.redMul(this.x.redSub(p.x).redInvm());var nx=c.redSqr().redISub(this.x).redISub(p.x);var ny=c.redMul(this.x.redSub(nx)).redISub(this.y);return this.curve.point(nx,ny);};Point.prototype.dbl=function dbl(){if(this.inf)return this;// 2P = O |
|
|
var ys1=this.y.redAdd(this.y);if(ys1.cmpn(0)===0)return this.curve.point(null,null);var a=this.curve.a;var x2=this.x.redSqr();var dyinv=ys1.redInvm();var c=x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);var nx=c.redSqr().redISub(this.x.redAdd(this.x));var ny=c.redMul(this.x.redSub(nx)).redISub(this.y);return this.curve.point(nx,ny);};Point.prototype.getX=function getX(){return this.x.fromRed();};Point.prototype.getY=function getY(){return this.y.fromRed();};Point.prototype.mul=function mul(k){k=new BN(k,16);if(this.isInfinity())return this;else if(this._hasDoubles(k))return this.curve._fixedNafMul(this,k);else if(this.curve.endo)return this.curve._endoWnafMulAdd([this],[k]);else return this.curve._wnafMul(this,k);};Point.prototype.mulAdd=function mulAdd(k1,p2,k2){var points=[this,p2];var coeffs=[k1,k2];if(this.curve.endo)return this.curve._endoWnafMulAdd(points,coeffs);else return this.curve._wnafMulAdd(1,points,coeffs,2);};Point.prototype.jmulAdd=function jmulAdd(k1,p2,k2){var points=[this,p2];var coeffs=[k1,k2];if(this.curve.endo)return this.curve._endoWnafMulAdd(points,coeffs,true);else return this.curve._wnafMulAdd(1,points,coeffs,2,true);};Point.prototype.eq=function eq(p){return this===p||this.inf===p.inf&&(this.inf||this.x.cmp(p.x)===0&&this.y.cmp(p.y)===0);};Point.prototype.neg=function neg(_precompute){if(this.inf)return this;var res=this.curve.point(this.x,this.y.redNeg());if(_precompute&&this.precomputed){var pre=this.precomputed;var negate=function negate(p){return p.neg();};res.precomputed={naf:pre.naf&&{wnd:pre.naf.wnd,points:pre.naf.points.map(negate)},doubles:pre.doubles&&{step:pre.doubles.step,points:pre.doubles.points.map(negate)}};}return res;};Point.prototype.toJ=function toJ(){if(this.inf)return this.curve.jpoint(null,null,null);var res=this.curve.jpoint(this.x,this.y,this.curve.one);return res;};function JPoint(curve,x,y,z){Base.BasePoint.call(this,curve,'jacobian');if(x===null&&y===null&&z===null){this.x=this.curve.one;this.y=this.curve.one;this.z=new BN(0);}else{this.x=new BN(x,16);this.y=new BN(y,16);this.z=new BN(z,16);}if(!this.x.red)this.x=this.x.toRed(this.curve.red);if(!this.y.red)this.y=this.y.toRed(this.curve.red);if(!this.z.red)this.z=this.z.toRed(this.curve.red);this.zOne=this.z===this.curve.one;}inherits(JPoint,Base.BasePoint);ShortCurve.prototype.jpoint=function jpoint(x,y,z){return new JPoint(this,x,y,z);};JPoint.prototype.toP=function toP(){if(this.isInfinity())return this.curve.point(null,null);var zinv=this.z.redInvm();var zinv2=zinv.redSqr();var ax=this.x.redMul(zinv2);var ay=this.y.redMul(zinv2).redMul(zinv);return this.curve.point(ax,ay);};JPoint.prototype.neg=function neg(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z);};JPoint.prototype.add=function add(p){// O + P = P |
|
|
if(this.isInfinity())return p;// P + O = P |
|
|
if(p.isInfinity())return this;// 12M + 4S + 7A |
|
|
var pz2=p.z.redSqr();var z2=this.z.redSqr();var u1=this.x.redMul(pz2);var u2=p.x.redMul(z2);var s1=this.y.redMul(pz2.redMul(p.z));var s2=p.y.redMul(z2.redMul(this.z));var h=u1.redSub(u2);var r=s1.redSub(s2);if(h.cmpn(0)===0){if(r.cmpn(0)!==0)return this.curve.jpoint(null,null,null);else return this.dbl();}var h2=h.redSqr();var h3=h2.redMul(h);var v=u1.redMul(h2);var nx=r.redSqr().redIAdd(h3).redISub(v).redISub(v);var ny=r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));var nz=this.z.redMul(p.z).redMul(h);return this.curve.jpoint(nx,ny,nz);};JPoint.prototype.mixedAdd=function mixedAdd(p){// O + P = P |
|
|
if(this.isInfinity())return p.toJ();// P + O = P |
|
|
if(p.isInfinity())return this;// 8M + 3S + 7A |
|
|
var z2=this.z.redSqr();var u1=this.x;var u2=p.x.redMul(z2);var s1=this.y;var s2=p.y.redMul(z2).redMul(this.z);var h=u1.redSub(u2);var r=s1.redSub(s2);if(h.cmpn(0)===0){if(r.cmpn(0)!==0)return this.curve.jpoint(null,null,null);else return this.dbl();}var h2=h.redSqr();var h3=h2.redMul(h);var v=u1.redMul(h2);var nx=r.redSqr().redIAdd(h3).redISub(v).redISub(v);var ny=r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));var nz=this.z.redMul(h);return this.curve.jpoint(nx,ny,nz);};JPoint.prototype.dblp=function dblp(pow){if(pow===0)return this;if(this.isInfinity())return this;if(!pow)return this.dbl();if(this.curve.zeroA||this.curve.threeA){var r=this;for(var i=0;i<pow;i++){r=r.dbl();}return r;}// 1M + 2S + 1A + N * (4S + 5M + 8A) |
|
|
// N = 1 => 6M + 6S + 9A |
|
|
var a=this.curve.a;var tinv=this.curve.tinv;var jx=this.x;var jy=this.y;var jz=this.z;var jz4=jz.redSqr().redSqr();// Reuse results |
|
|
var jyd=jy.redAdd(jy);for(var i=0;i<pow;i++){var jx2=jx.redSqr();var jyd2=jyd.redSqr();var jyd4=jyd2.redSqr();var c=jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));var t1=jx.redMul(jyd2);var nx=c.redSqr().redISub(t1.redAdd(t1));var t2=t1.redISub(nx);var dny=c.redMul(t2);dny=dny.redIAdd(dny).redISub(jyd4);var nz=jyd.redMul(jz);if(i+1<pow)jz4=jz4.redMul(jyd4);jx=nx;jz=nz;jyd=dny;}return this.curve.jpoint(jx,jyd.redMul(tinv),jz);};JPoint.prototype.dbl=function dbl(){if(this.isInfinity())return this;if(this.curve.zeroA)return this._zeroDbl();else if(this.curve.threeA)return this._threeDbl();else return this._dbl();};JPoint.prototype._zeroDbl=function _zeroDbl(){var nx;var ny;var nz;// Z = 1 |
|
|
if(this.zOne){// hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html |
|
|
// #doubling-mdbl-2007-bl |
|
|
// 1M + 5S + 14A |
|
|
// XX = X1^2 |
|
|
var xx=this.x.redSqr();// YY = Y1^2 |
|
|
var yy=this.y.redSqr();// YYYY = YY^2 |
|
|
var yyyy=yy.redSqr();// S = 2 * ((X1 + YY)^2 - XX - YYYY) |
|
|
var s=this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);s=s.redIAdd(s);// M = 3 * XX + a; a = 0 |
|
|
var m=xx.redAdd(xx).redIAdd(xx);// T = M ^ 2 - 2*S |
|
|
var t=m.redSqr().redISub(s).redISub(s);// 8 * YYYY |
|
|
var yyyy8=yyyy.redIAdd(yyyy);yyyy8=yyyy8.redIAdd(yyyy8);yyyy8=yyyy8.redIAdd(yyyy8);// X3 = T |
|
|
nx=t;// Y3 = M * (S - T) - 8 * YYYY |
|
|
ny=m.redMul(s.redISub(t)).redISub(yyyy8);// Z3 = 2*Y1 |
|
|
nz=this.y.redAdd(this.y);}else{// hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html |
|
|
// #doubling-dbl-2009-l |
|
|
// 2M + 5S + 13A |
|
|
// A = X1^2 |
|
|
var a=this.x.redSqr();// B = Y1^2 |
|
|
var b=this.y.redSqr();// C = B^2 |
|
|
var c=b.redSqr();// D = 2 * ((X1 + B)^2 - A - C) |
|
|
var d=this.x.redAdd(b).redSqr().redISub(a).redISub(c);d=d.redIAdd(d);// E = 3 * A |
|
|
var e=a.redAdd(a).redIAdd(a);// F = E^2 |
|
|
var f=e.redSqr();// 8 * C |
|
|
var c8=c.redIAdd(c);c8=c8.redIAdd(c8);c8=c8.redIAdd(c8);// X3 = F - 2 * D |
|
|
nx=f.redISub(d).redISub(d);// Y3 = E * (D - X3) - 8 * C |
|
|
ny=e.redMul(d.redISub(nx)).redISub(c8);// Z3 = 2 * Y1 * Z1 |
|
|
nz=this.y.redMul(this.z);nz=nz.redIAdd(nz);}return this.curve.jpoint(nx,ny,nz);};JPoint.prototype._threeDbl=function _threeDbl(){var nx;var ny;var nz;// Z = 1 |
|
|
if(this.zOne){// hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html |
|
|
// #doubling-mdbl-2007-bl |
|
|
// 1M + 5S + 15A |
|
|
// XX = X1^2 |
|
|
var xx=this.x.redSqr();// YY = Y1^2 |
|
|
var yy=this.y.redSqr();// YYYY = YY^2 |
|
|
var yyyy=yy.redSqr();// S = 2 * ((X1 + YY)^2 - XX - YYYY) |
|
|
var s=this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);s=s.redIAdd(s);// M = 3 * XX + a |
|
|
var m=xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);// T = M^2 - 2 * S |
|
|
var t=m.redSqr().redISub(s).redISub(s);// X3 = T |
|
|
nx=t;// Y3 = M * (S - T) - 8 * YYYY |
|
|
var yyyy8=yyyy.redIAdd(yyyy);yyyy8=yyyy8.redIAdd(yyyy8);yyyy8=yyyy8.redIAdd(yyyy8);ny=m.redMul(s.redISub(t)).redISub(yyyy8);// Z3 = 2 * Y1 |
|
|
nz=this.y.redAdd(this.y);}else{// hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b |
|
|
// 3M + 5S |
|
|
// delta = Z1^2 |
|
|
var delta=this.z.redSqr();// gamma = Y1^2 |
|
|
var gamma=this.y.redSqr();// beta = X1 * gamma |
|
|
var beta=this.x.redMul(gamma);// alpha = 3 * (X1 - delta) * (X1 + delta) |
|
|
var alpha=this.x.redSub(delta).redMul(this.x.redAdd(delta));alpha=alpha.redAdd(alpha).redIAdd(alpha);// X3 = alpha^2 - 8 * beta |
|
|
var beta4=beta.redIAdd(beta);beta4=beta4.redIAdd(beta4);var beta8=beta4.redAdd(beta4);nx=alpha.redSqr().redISub(beta8);// Z3 = (Y1 + Z1)^2 - gamma - delta |
|
|
nz=this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);// Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 |
|
|
var ggamma8=gamma.redSqr();ggamma8=ggamma8.redIAdd(ggamma8);ggamma8=ggamma8.redIAdd(ggamma8);ggamma8=ggamma8.redIAdd(ggamma8);ny=alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);}return this.curve.jpoint(nx,ny,nz);};JPoint.prototype._dbl=function _dbl(){var a=this.curve.a;// 4M + 6S + 10A |
|
|
var jx=this.x;var jy=this.y;var jz=this.z;var jz4=jz.redSqr().redSqr();var jx2=jx.redSqr();var jy2=jy.redSqr();var c=jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));var jxd4=jx.redAdd(jx);jxd4=jxd4.redIAdd(jxd4);var t1=jxd4.redMul(jy2);var nx=c.redSqr().redISub(t1.redAdd(t1));var t2=t1.redISub(nx);var jyd8=jy2.redSqr();jyd8=jyd8.redIAdd(jyd8);jyd8=jyd8.redIAdd(jyd8);jyd8=jyd8.redIAdd(jyd8);var ny=c.redMul(t2).redISub(jyd8);var nz=jy.redAdd(jy).redMul(jz);return this.curve.jpoint(nx,ny,nz);};JPoint.prototype.trpl=function trpl(){if(!this.curve.zeroA)return this.dbl().add(this);// hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl |
|
|
// 5M + 10S + ... |
|
|
// XX = X1^2 |
|
|
var xx=this.x.redSqr();// YY = Y1^2 |
|
|
var yy=this.y.redSqr();// ZZ = Z1^2 |
|
|
var zz=this.z.redSqr();// YYYY = YY^2 |
|
|
var yyyy=yy.redSqr();// M = 3 * XX + a * ZZ2; a = 0 |
|
|
var m=xx.redAdd(xx).redIAdd(xx);// MM = M^2 |
|
|
var mm=m.redSqr();// E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM |
|
|
var e=this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);e=e.redIAdd(e);e=e.redAdd(e).redIAdd(e);e=e.redISub(mm);// EE = E^2 |
|
|
var ee=e.redSqr();// T = 16*YYYY |
|
|
var t=yyyy.redIAdd(yyyy);t=t.redIAdd(t);t=t.redIAdd(t);t=t.redIAdd(t);// U = (M + E)^2 - MM - EE - T |
|
|
var u=m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);// X3 = 4 * (X1 * EE - 4 * YY * U) |
|
|
var yyu4=yy.redMul(u);yyu4=yyu4.redIAdd(yyu4);yyu4=yyu4.redIAdd(yyu4);var nx=this.x.redMul(ee).redISub(yyu4);nx=nx.redIAdd(nx);nx=nx.redIAdd(nx);// Y3 = 8 * Y1 * (U * (T - U) - E * EE) |
|
|
var ny=this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));ny=ny.redIAdd(ny);ny=ny.redIAdd(ny);ny=ny.redIAdd(ny);// Z3 = (Z1 + E)^2 - ZZ - EE |
|
|
var nz=this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);return this.curve.jpoint(nx,ny,nz);};JPoint.prototype.mul=function mul(k,kbase){k=new BN(k,kbase);return this.curve._wnafMul(this,k);};JPoint.prototype.eq=function eq(p){if(p.type==='affine')return this.eq(p.toJ());if(this===p)return true;// x1 * z2^2 == x2 * z1^2 |
|
|
var z2=this.z.redSqr();var pz2=p.z.redSqr();if(this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0)!==0)return false;// y1 * z2^3 == y2 * z1^3 |
|
|
var z3=z2.redMul(this.z);var pz3=pz2.redMul(p.z);return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0)===0;};JPoint.prototype.eqXToP=function eqXToP(x){var zs=this.z.redSqr();var rx=x.toRed(this.curve.red).redMul(zs);if(this.x.cmp(rx)===0)return true;var xc=x.clone();var t=this.curve.redN.redMul(zs);for(;;){xc.iadd(this.curve.n);if(xc.cmp(this.curve.p)>=0)return false;rx.redIAdd(t);if(this.x.cmp(rx)===0)return true;}};JPoint.prototype.inspect=function inspect(){if(this.isInfinity())return'<EC JPoint Infinity>';return'<EC JPoint x: '+this.x.toString(16,2)+' y: '+this.y.toString(16,2)+' z: '+this.z.toString(16,2)+'>';};JPoint.prototype.isInfinity=function isInfinity(){// XXX This code assumes that zero is always zero in red |
|
|
return this.z.cmpn(0)===0;};},{"../utils":341,"./base":328,"bn.js":342,"inherits":364}],333:[function(require,module,exports){'use strict';var curves=exports;var hash=require('hash.js');var curve=require('./curve');var utils=require('./utils');var assert=utils.assert;function PresetCurve(options){if(options.type==='short')this.curve=new curve.short(options);else if(options.type==='edwards')this.curve=new curve.edwards(options);else this.curve=new curve.mont(options);this.g=this.curve.g;this.n=this.curve.n;this.hash=options.hash;assert(this.g.validate(),'Invalid curve');assert(this.g.mul(this.n).isInfinity(),'Invalid curve, G*N != O');}curves.PresetCurve=PresetCurve;function defineCurve(name,options){Object.defineProperty(curves,name,{configurable:true,enumerable:true,get:function get(){var curve=new PresetCurve(options);Object.defineProperty(curves,name,{configurable:true,enumerable:true,value:curve});return curve;}});}defineCurve('p192',{type:'short',prime:'p192',p:'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',a:'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',b:'64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',n:'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',hash:hash.sha256,gRed:false,g:['188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012','07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811']});defineCurve('p224',{type:'short',prime:'p224',p:'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',a:'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',b:'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',n:'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',hash:hash.sha256,gRed:false,g:['b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21','bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34']});defineCurve('p256',{type:'short',prime:null,p:'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',a:'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',b:'5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',n:'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',hash:hash.sha256,gRed:false,g:['6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296','4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5']});defineCurve('p384',{type:'short',prime:null,p:'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff '+'fffffffe ffffffff 00000000 00000000 ffffffff',a:'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff '+'fffffffe ffffffff 00000000 00000000 fffffffc',b:'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f '+'5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',n:'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 '+'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',hash:hash.sha384,gRed:false,g:['aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 '+'5502f25d bf55296c 3a545e38 72760ab7','3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 '+'0a60b1ce 1d7e819d 7a431d7c 90ea0e5f']});defineCurve('p521',{type:'short',prime:null,p:'000001ff ffffffff ffffffff ffffffff ffffffff ffffffff '+'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff '+'ffffffff ffffffff ffffffff ffffffff ffffffff',a:'000001ff ffffffff ffffffff ffffffff ffffffff ffffffff '+'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff '+'ffffffff ffffffff ffffffff ffffffff fffffffc',b:'00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b '+'99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd '+'3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',n:'000001ff ffffffff ffffffff ffffffff ffffffff ffffffff '+'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 '+'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',hash:hash.sha512,gRed:false,g:['000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 '+'053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 '+'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66','00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 '+'579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 '+'3fad0761 353c7086 a272c240 88be9476 9fd16650']});defineCurve('curve25519',{type:'mont',prime:'p25519',p:'7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',a:'76d06',b:'1',n:'1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',hash:hash.sha256,gRed:false,g:['9']});defineCurve('ed25519',{type:'edwards',prime:'p25519',p:'7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',a:'-1',c:'1',// -121665 * (121666^(-1)) (mod P) |
|
|
d:'52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',n:'1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',hash:hash.sha256,gRed:false,g:['216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',// 4/5 |
|
|
'6666666666666666666666666666666666666666666666666666666666666658']});var pre;try{pre=require('./precomputed/secp256k1');}catch(e){pre=undefined;}defineCurve('secp256k1',{type:'short',prime:'k256',p:'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',a:'0',b:'7',n:'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',h:'1',hash:hash.sha256,// Precomputed endomorphism |
|
|
beta:'7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',lambda:'5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',basis:[{a:'3086d221a7d46bcde86c90e49284eb15',b:'-e4437ed6010e88286f547fa90abfe4c3'},{a:'114ca50f7a8e2f3f657c1108d9d44cfd8',b:'3086d221a7d46bcde86c90e49284eb15'}],gRed:false,g:['79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798','483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',pre]});},{"./curve":330,"./precomputed/secp256k1":340,"./utils":341,"hash.js":349}],334:[function(require,module,exports){'use strict';var BN=require('bn.js');var HmacDRBG=require('hmac-drbg');var utils=require('../utils');var curves=require('../curves');var rand=require('brorand');var assert=utils.assert;var KeyPair=require('./key');var Signature=require('./signature');function EC(options){if(!(this instanceof EC))return new EC(options);// Shortcut `elliptic.ec(curve-name)` |
|
|
if(typeof options==='string'){assert(curves.hasOwnProperty(options),'Unknown curve '+options);options=curves[options];}// Shortcut for `elliptic.ec(elliptic.curves.curveName)` |
|
|
if(options instanceof curves.PresetCurve)options={curve:options};this.curve=options.curve.curve;this.n=this.curve.n;this.nh=this.n.ushrn(1);this.g=this.curve.g;// Point on curve |
|
|
this.g=options.curve.g;this.g.precompute(options.curve.n.bitLength()+1);// Hash for function for DRBG |
|
|
this.hash=options.hash||options.curve.hash;}module.exports=EC;EC.prototype.keyPair=function keyPair(options){return new KeyPair(this,options);};EC.prototype.keyFromPrivate=function keyFromPrivate(priv,enc){return KeyPair.fromPrivate(this,priv,enc);};EC.prototype.keyFromPublic=function keyFromPublic(pub,enc){return KeyPair.fromPublic(this,pub,enc);};EC.prototype.genKeyPair=function genKeyPair(options){if(!options)options={};// Instantiate Hmac_DRBG |
|
|
var drbg=new HmacDRBG({hash:this.hash,pers:options.pers,persEnc:options.persEnc||'utf8',entropy:options.entropy||rand(this.hash.hmacStrength),entropyEnc:options.entropy&&options.entropyEnc||'utf8',nonce:this.n.toArray()});var bytes=this.n.byteLength();var ns2=this.n.sub(new BN(2));do{var priv=new BN(drbg.generate(bytes));if(priv.cmp(ns2)>0)continue;priv.iaddn(1);return this.keyFromPrivate(priv);}while(true);};EC.prototype._truncateToN=function truncateToN(msg,truncOnly){var delta=msg.byteLength()*8-this.n.bitLength();if(delta>0)msg=msg.ushrn(delta);if(!truncOnly&&msg.cmp(this.n)>=0)return msg.sub(this.n);else return msg;};EC.prototype.sign=function sign(msg,key,enc,options){if(_typeof2(enc)==='object'){options=enc;enc=null;}if(!options)options={};key=this.keyFromPrivate(key,enc);msg=this._truncateToN(new BN(msg,16));// Zero-extend key to provide enough entropy |
|
|
var bytes=this.n.byteLength();var bkey=key.getPrivate().toArray('be',bytes);// Zero-extend nonce to have the same byte size as N |
|
|
var nonce=msg.toArray('be',bytes);// Instantiate Hmac_DRBG |
|
|
var drbg=new HmacDRBG({hash:this.hash,entropy:bkey,nonce:nonce,pers:options.pers,persEnc:options.persEnc||'utf8'});// Number of bytes to generate |
|
|
var ns1=this.n.sub(new BN(1));for(var iter=0;true;iter++){var k=options.k?options.k(iter):new BN(drbg.generate(this.n.byteLength()));k=this._truncateToN(k,true);if(k.cmpn(1)<=0||k.cmp(ns1)>=0)continue;var kp=this.g.mul(k);if(kp.isInfinity())continue;var kpX=kp.getX();var r=kpX.umod(this.n);if(r.cmpn(0)===0)continue;var s=k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));s=s.umod(this.n);if(s.cmpn(0)===0)continue;var recoveryParam=(kp.getY().isOdd()?1:0)|(kpX.cmp(r)!==0?2:0);// Use complement of `s`, if it is > `n / 2` |
|
|
if(options.canonical&&s.cmp(this.nh)>0){s=this.n.sub(s);recoveryParam^=1;}return new Signature({r:r,s:s,recoveryParam:recoveryParam});}};EC.prototype.verify=function verify(msg,signature,key,enc){msg=this._truncateToN(new BN(msg,16));key=this.keyFromPublic(key,enc);signature=new Signature(signature,'hex');// Perform primitive values validation |
|
|
var r=signature.r;var s=signature.s;if(r.cmpn(1)<0||r.cmp(this.n)>=0)return false;if(s.cmpn(1)<0||s.cmp(this.n)>=0)return false;// Validate signature |
|
|
var sinv=s.invm(this.n);var u1=sinv.mul(msg).umod(this.n);var u2=sinv.mul(r).umod(this.n);if(!this.curve._maxwellTrick){var p=this.g.mulAdd(u1,key.getPublic(),u2);if(p.isInfinity())return false;return p.getX().umod(this.n).cmp(r)===0;}// NOTE: Greg Maxwell's trick, inspired by: |
|
|
// https://git.io/vad3K |
|
|
var p=this.g.jmulAdd(u1,key.getPublic(),u2);if(p.isInfinity())return false;// Compare `p.x` of Jacobian point with `r`, |
|
|
// this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the |
|
|
// inverse of `p.z^2` |
|
|
return p.eqXToP(r);};EC.prototype.recoverPubKey=function(msg,signature,j,enc){assert((3&j)===j,'The recovery param is more than two bits');signature=new Signature(signature,enc);var n=this.n;var e=new BN(msg);var r=signature.r;var s=signature.s;// A set LSB signifies that the y-coordinate is odd |
|
|
var isYOdd=j&1;var isSecondKey=j>>1;if(r.cmp(this.curve.p.umod(this.curve.n))>=0&&isSecondKey)throw new Error('Unable to find sencond key candinate');// 1.1. Let x = r + jn. |
|
|
if(isSecondKey)r=this.curve.pointFromX(r.add(this.curve.n),isYOdd);else r=this.curve.pointFromX(r,isYOdd);var rInv=signature.r.invm(n);var s1=n.sub(e).mul(rInv).umod(n);var s2=s.mul(rInv).umod(n);// 1.6.1 Compute Q = r^-1 (sR - eG) |
|
|
// Q = r^-1 (sR + -eG) |
|
|
return this.g.mulAdd(s1,r,s2);};EC.prototype.getKeyRecoveryParam=function(e,signature,Q,enc){signature=new Signature(signature,enc);if(signature.recoveryParam!==null)return signature.recoveryParam;for(var i=0;i<4;i++){var Qprime;try{Qprime=this.recoverPubKey(e,signature,i);}catch(e){continue;}if(Qprime.eq(Q))return i;}throw new Error('Unable to find valid recovery factor');};},{"../curves":333,"../utils":341,"./key":335,"./signature":336,"bn.js":342,"brorand":182,"hmac-drbg":361}],335:[function(require,module,exports){'use strict';var BN=require('bn.js');var utils=require('../utils');var assert=utils.assert;function KeyPair(ec,options){this.ec=ec;this.priv=null;this.pub=null;// KeyPair(ec, { priv: ..., pub: ... }) |
|
|
if(options.priv)this._importPrivate(options.priv,options.privEnc);if(options.pub)this._importPublic(options.pub,options.pubEnc);}module.exports=KeyPair;KeyPair.fromPublic=function fromPublic(ec,pub,enc){if(pub instanceof KeyPair)return pub;return new KeyPair(ec,{pub:pub,pubEnc:enc});};KeyPair.fromPrivate=function fromPrivate(ec,priv,enc){if(priv instanceof KeyPair)return priv;return new KeyPair(ec,{priv:priv,privEnc:enc});};KeyPair.prototype.validate=function validate(){var pub=this.getPublic();if(pub.isInfinity())return{result:false,reason:'Invalid public key'};if(!pub.validate())return{result:false,reason:'Public key is not a point'};if(!pub.mul(this.ec.curve.n).isInfinity())return{result:false,reason:'Public key * N != O'};return{result:true,reason:null};};KeyPair.prototype.getPublic=function getPublic(compact,enc){// compact is optional argument |
|
|
if(typeof compact==='string'){enc=compact;compact=null;}if(!this.pub)this.pub=this.ec.g.mul(this.priv);if(!enc)return this.pub;return this.pub.encode(enc,compact);};KeyPair.prototype.getPrivate=function getPrivate(enc){if(enc==='hex')return this.priv.toString(16,2);else return this.priv;};KeyPair.prototype._importPrivate=function _importPrivate(key,enc){this.priv=new BN(key,enc||16);// Ensure that the priv won't be bigger than n, otherwise we may fail |
|
|
// in fixed multiplication method |
|
|
this.priv=this.priv.umod(this.ec.curve.n);};KeyPair.prototype._importPublic=function _importPublic(key,enc){if(key.x||key.y){// Montgomery points only have an `x` coordinate. |
|
|
// Weierstrass/Edwards points on the other hand have both `x` and |
|
|
// `y` coordinates. |
|
|
if(this.ec.curve.type==='mont'){assert(key.x,'Need x coordinate');}else if(this.ec.curve.type==='short'||this.ec.curve.type==='edwards'){assert(key.x&&key.y,'Need both x and y coordinate');}this.pub=this.ec.curve.point(key.x,key.y);return;}this.pub=this.ec.curve.decodePoint(key,enc);};// ECDH |
|
|
KeyPair.prototype.derive=function derive(pub){return pub.mul(this.priv).getX();};// ECDSA |
|
|
KeyPair.prototype.sign=function sign(msg,enc,options){return this.ec.sign(msg,this,enc,options);};KeyPair.prototype.verify=function verify(msg,signature){return this.ec.verify(msg,signature,this);};KeyPair.prototype.inspect=function inspect(){return'<Key priv: '+(this.priv&&this.priv.toString(16,2))+' pub: '+(this.pub&&this.pub.inspect())+' >';};},{"../utils":341,"bn.js":342}],336:[function(require,module,exports){'use strict';var BN=require('bn.js');var utils=require('../utils');var assert=utils.assert;function Signature(options,enc){if(options instanceof Signature)return options;if(this._importDER(options,enc))return;assert(options.r&&options.s,'Signature without r or s');this.r=new BN(options.r,16);this.s=new BN(options.s,16);if(options.recoveryParam===undefined)this.recoveryParam=null;else this.recoveryParam=options.recoveryParam;}module.exports=Signature;function Position(){this.place=0;}function getLength(buf,p){var initial=buf[p.place++];if(!(initial&0x80)){return initial;}var octetLen=initial&0xf;var val=0;for(var i=0,off=p.place;i<octetLen;i++,off++){val<<=8;val|=buf[off];}p.place=off;return val;}function rmPadding(buf){var i=0;var len=buf.length-1;while(!buf[i]&&!(buf[i+1]&0x80)&&i<len){i++;}if(i===0){return buf;}return buf.slice(i);}Signature.prototype._importDER=function _importDER(data,enc){data=utils.toArray(data,enc);var p=new Position();if(data[p.place++]!==0x30){return false;}var len=getLength(data,p);if(len+p.place!==data.length){return false;}if(data[p.place++]!==0x02){return false;}var rlen=getLength(data,p);var r=data.slice(p.place,rlen+p.place);p.place+=rlen;if(data[p.place++]!==0x02){return false;}var slen=getLength(data,p);if(data.length!==slen+p.place){return false;}var s=data.slice(p.place,slen+p.place);if(r[0]===0&&r[1]&0x80){r=r.slice(1);}if(s[0]===0&&s[1]&0x80){s=s.slice(1);}this.r=new BN(r);this.s=new BN(s);this.recoveryParam=null;return true;};function constructLength(arr,len){if(len<0x80){arr.push(len);return;}var octets=1+(Math.log(len)/Math.LN2>>>3);arr.push(octets|0x80);while(--octets){arr.push(len>>>(octets<<3)&0xff);}arr.push(len);}Signature.prototype.toDER=function toDER(enc){var r=this.r.toArray();var s=this.s.toArray();// Pad values |
|
|
if(r[0]&0x80)r=[0].concat(r);// Pad values |
|
|
if(s[0]&0x80)s=[0].concat(s);r=rmPadding(r);s=rmPadding(s);while(!s[0]&&!(s[1]&0x80)){s=s.slice(1);}var arr=[0x02];constructLength(arr,r.length);arr=arr.concat(r);arr.push(0x02);constructLength(arr,s.length);var backHalf=arr.concat(s);var res=[0x30];constructLength(res,backHalf.length);res=res.concat(backHalf);return utils.encode(res,enc);};},{"../utils":341,"bn.js":342}],337:[function(require,module,exports){'use strict';var hash=require('hash.js');var curves=require('../curves');var utils=require('../utils');var assert=utils.assert;var parseBytes=utils.parseBytes;var KeyPair=require('./key');var Signature=require('./signature');function EDDSA(curve){assert(curve==='ed25519','only tested with ed25519 so far');if(!(this instanceof EDDSA))return new EDDSA(curve);var curve=curves[curve].curve;this.curve=curve;this.g=curve.g;this.g.precompute(curve.n.bitLength()+1);this.pointClass=curve.point().constructor;this.encodingLength=Math.ceil(curve.n.bitLength()/8);this.hash=hash.sha512;}module.exports=EDDSA;/** |
|
|
* @param {Array|String} message - message bytes |
|
|
* @param {Array|String|KeyPair} secret - secret bytes or a keypair |
|
|
* @returns {Signature} - signature |
|
|
*/EDDSA.prototype.sign=function sign(message,secret){message=parseBytes(message);var key=this.keyFromSecret(secret);var r=this.hashInt(key.messagePrefix(),message);var R=this.g.mul(r);var Rencoded=this.encodePoint(R);var s_=this.hashInt(Rencoded,key.pubBytes(),message).mul(key.priv());var S=r.add(s_).umod(this.curve.n);return this.makeSignature({R:R,S:S,Rencoded:Rencoded});};/** |
|
|
* @param {Array} message - message bytes |
|
|
* @param {Array|String|Signature} sig - sig bytes |
|
|
* @param {Array|String|Point|KeyPair} pub - public key |
|
|
* @returns {Boolean} - true if public key matches sig of message |
|
|
*/EDDSA.prototype.verify=function verify(message,sig,pub){message=parseBytes(message);sig=this.makeSignature(sig);var key=this.keyFromPublic(pub);var h=this.hashInt(sig.Rencoded(),key.pubBytes(),message);var SG=this.g.mul(sig.S());var RplusAh=sig.R().add(key.pub().mul(h));return RplusAh.eq(SG);};EDDSA.prototype.hashInt=function hashInt(){var hash=this.hash();for(var i=0;i<arguments.length;i++){hash.update(arguments[i]);}return utils.intFromLE(hash.digest()).umod(this.curve.n);};EDDSA.prototype.keyFromPublic=function keyFromPublic(pub){return KeyPair.fromPublic(this,pub);};EDDSA.prototype.keyFromSecret=function keyFromSecret(secret){return KeyPair.fromSecret(this,secret);};EDDSA.prototype.makeSignature=function makeSignature(sig){if(sig instanceof Signature)return sig;return new Signature(this,sig);};/** |
|
|
* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2 |
|
|
* |
|
|
* EDDSA defines methods for encoding and decoding points and integers. These are |
|
|
* helper convenience methods, that pass along to utility functions implied |
|
|
* parameters. |
|
|
* |
|
|
*/EDDSA.prototype.encodePoint=function encodePoint(point){var enc=point.getY().toArray('le',this.encodingLength);enc[this.encodingLength-1]|=point.getX().isOdd()?0x80:0;return enc;};EDDSA.prototype.decodePoint=function decodePoint(bytes){bytes=utils.parseBytes(bytes);var lastIx=bytes.length-1;var normed=bytes.slice(0,lastIx).concat(bytes[lastIx]&~0x80);var xIsOdd=(bytes[lastIx]&0x80)!==0;var y=utils.intFromLE(normed);return this.curve.pointFromY(y,xIsOdd);};EDDSA.prototype.encodeInt=function encodeInt(num){return num.toArray('le',this.encodingLength);};EDDSA.prototype.decodeInt=function decodeInt(bytes){return utils.intFromLE(bytes);};EDDSA.prototype.isPoint=function isPoint(val){return val instanceof this.pointClass;};},{"../curves":333,"../utils":341,"./key":338,"./signature":339,"hash.js":349}],338:[function(require,module,exports){'use strict';var utils=require('../utils');var assert=utils.assert;var parseBytes=utils.parseBytes;var cachedProperty=utils.cachedProperty;/** |
|
|
* @param {EDDSA} eddsa - instance |
|
|
* @param {Object} params - public/private key parameters |
|
|
* |
|
|
* @param {Array<Byte>} [params.secret] - secret seed bytes |
|
|
* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms) |
|
|
* @param {Array<Byte>} [params.pub] - public key point encoded as bytes |
|
|
* |
|
|
*/function KeyPair(eddsa,params){this.eddsa=eddsa;this._secret=parseBytes(params.secret);if(eddsa.isPoint(params.pub))this._pub=params.pub;else this._pubBytes=parseBytes(params.pub);}KeyPair.fromPublic=function fromPublic(eddsa,pub){if(pub instanceof KeyPair)return pub;return new KeyPair(eddsa,{pub:pub});};KeyPair.fromSecret=function fromSecret(eddsa,secret){if(secret instanceof KeyPair)return secret;return new KeyPair(eddsa,{secret:secret});};KeyPair.prototype.secret=function secret(){return this._secret;};cachedProperty(KeyPair,'pubBytes',function pubBytes(){return this.eddsa.encodePoint(this.pub());});cachedProperty(KeyPair,'pub',function pub(){if(this._pubBytes)return this.eddsa.decodePoint(this._pubBytes);return this.eddsa.g.mul(this.priv());});cachedProperty(KeyPair,'privBytes',function privBytes(){var eddsa=this.eddsa;var hash=this.hash();var lastIx=eddsa.encodingLength-1;var a=hash.slice(0,eddsa.encodingLength);a[0]&=248;a[lastIx]&=127;a[lastIx]|=64;return a;});cachedProperty(KeyPair,'priv',function priv(){return this.eddsa.decodeInt(this.privBytes());});cachedProperty(KeyPair,'hash',function hash(){return this.eddsa.hash().update(this.secret()).digest();});cachedProperty(KeyPair,'messagePrefix',function messagePrefix(){return this.hash().slice(this.eddsa.encodingLength);});KeyPair.prototype.sign=function sign(message){assert(this._secret,'KeyPair can only verify');return this.eddsa.sign(message,this);};KeyPair.prototype.verify=function verify(message,sig){return this.eddsa.verify(message,sig,this);};KeyPair.prototype.getSecret=function getSecret(enc){assert(this._secret,'KeyPair is public only');return utils.encode(this.secret(),enc);};KeyPair.prototype.getPublic=function getPublic(enc){return utils.encode(this.pubBytes(),enc);};module.exports=KeyPair;},{"../utils":341}],339:[function(require,module,exports){'use strict';var BN=require('bn.js');var utils=require('../utils');var assert=utils.assert;var cachedProperty=utils.cachedProperty;var parseBytes=utils.parseBytes;/** |
|
|
* @param {EDDSA} eddsa - eddsa instance |
|
|
* @param {Array<Bytes>|Object} sig - |
|
|
* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes |
|
|
* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes |
|
|
* @param {Array<Bytes>} [sig.Rencoded] - R point encoded |
|
|
* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded |
|
|
*/function Signature(eddsa,sig){this.eddsa=eddsa;if(_typeof2(sig)!=='object')sig=parseBytes(sig);if(Array.isArray(sig)){sig={R:sig.slice(0,eddsa.encodingLength),S:sig.slice(eddsa.encodingLength)};}assert(sig.R&&sig.S,'Signature without R or S');if(eddsa.isPoint(sig.R))this._R=sig.R;if(sig.S instanceof BN)this._S=sig.S;this._Rencoded=Array.isArray(sig.R)?sig.R:sig.Rencoded;this._Sencoded=Array.isArray(sig.S)?sig.S:sig.Sencoded;}cachedProperty(Signature,'S',function S(){return this.eddsa.decodeInt(this.Sencoded());});cachedProperty(Signature,'R',function R(){return this.eddsa.decodePoint(this.Rencoded());});cachedProperty(Signature,'Rencoded',function Rencoded(){return this.eddsa.encodePoint(this.R());});cachedProperty(Signature,'Sencoded',function Sencoded(){return this.eddsa.encodeInt(this.S());});Signature.prototype.toBytes=function toBytes(){return this.Rencoded().concat(this.Sencoded());};Signature.prototype.toHex=function toHex(){return utils.encode(this.toBytes(),'hex').toUpperCase();};module.exports=Signature;},{"../utils":341,"bn.js":342}],340:[function(require,module,exports){module.exports={doubles:{step:4,points:[['e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a','f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'],['8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508','11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'],['175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739','d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'],['363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640','4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'],['8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c','4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'],['723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda','96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'],['eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa','5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'],['100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0','cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'],['e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d','9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'],['feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d','e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'],['da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1','9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'],['53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0','5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'],['8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047','10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'],['385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862','283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'],['6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7','7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'],['3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd','56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'],['85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83','7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'],['948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a','53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'],['6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8','bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'],['e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d','4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'],['e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725','7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'],['213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754','4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'],['4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c','17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'],['fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6','6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'],['76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39','c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'],['c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891','893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'],['d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b','febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'],['b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03','2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'],['e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d','eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'],['a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070','7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'],['90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4','e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'],['8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da','662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'],['e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11','1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'],['8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e','efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'],['e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41','2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'],['b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef','67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'],['d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8','db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'],['324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d','648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'],['4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96','35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'],['9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd','ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'],['6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5','9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'],['a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266','40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'],['7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71','34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'],['928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac','c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'],['85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751','1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'],['ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e','493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'],['827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241','c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'],['eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3','be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'],['e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f','4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'],['1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19','aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'],['146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be','b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'],['fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9','6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'],['da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2','8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'],['a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13','7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'],['174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c','ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'],['959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba','2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'],['d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151','e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'],['64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073','d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'],['8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458','38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'],['13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b','69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'],['bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366','d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'],['8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa','40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'],['8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0','620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'],['dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787','7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'],['f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e','ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82']]},naf:{wnd:7,points:[['f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9','388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'],['2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4','d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'],['5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc','6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'],['acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe','cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'],['774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb','d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'],['f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8','ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'],['d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e','581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'],['defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34','4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'],['2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c','85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'],['352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5','321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'],['2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f','2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'],['9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714','73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'],['daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729','a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'],['c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db','2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'],['6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4','e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'],['1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5','b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'],['605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479','2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'],['62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d','80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'],['80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f','1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'],['7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb','d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'],['d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9','eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'],['49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963','758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'],['77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74','958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'],['f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530','e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'],['463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b','5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'],['f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247','cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'],['caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1','cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'],['2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120','4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'],['7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435','91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'],['754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18','673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'],['e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8','59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'],['186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb','3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'],['df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f','55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'],['5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143','efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'],['290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba','e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'],['af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45','f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'],['766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a','744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'],['59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e','c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'],['f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8','e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'],['7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c','30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'],['948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519','e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'],['7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab','100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'],['3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca','ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'],['d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf','8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'],['1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610','68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'],['733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4','f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'],['15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c','d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'],['a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940','edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'],['e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980','a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'],['311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3','66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'],['34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf','9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'],['f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63','4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'],['d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448','fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'],['32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf','5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'],['7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5','8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'],['ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6','8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'],['16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5','5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'],['eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99','f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'],['78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51','f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'],['494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5','42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'],['a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5','204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'],['c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997','4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'],['841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881','73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'],['5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5','39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'],['36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66','d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'],['336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726','ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'],['8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede','6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'],['1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94','60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'],['85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31','3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'],['29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51','b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'],['a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252','ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'],['4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5','cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'],['d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b','6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'],['ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4','322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'],['af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f','6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'],['e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889','2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'],['591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246','b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'],['11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984','998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'],['3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a','b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'],['cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030','bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'],['c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197','6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'],['c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593','c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'],['a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef','21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'],['347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38','60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'],['da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a','49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'],['c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111','5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'],['4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502','7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'],['3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea','be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'],['cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26','8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'],['b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986','39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'],['d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e','62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'],['48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4','25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'],['dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda','ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'],['6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859','cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'],['e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f','f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'],['eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c','6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'],['13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942','fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'],['ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a','1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'],['b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80','5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'],['ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d','438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'],['8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1','cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'],['52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63','c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'],['e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352','6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'],['7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193','ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'],['5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00','9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'],['32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58','ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'],['e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7','d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'],['8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8','c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'],['4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e','67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'],['3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d','cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'],['674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b','299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'],['d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f','f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'],['30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6','462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'],['be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297','62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'],['93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a','7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'],['b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c','ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'],['d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52','4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'],['d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb','bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'],['463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065','bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'],['7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917','603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'],['74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9','cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'],['30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3','553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'],['9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57','712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'],['176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66','ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'],['75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8','9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'],['809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721','9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'],['1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180','4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9']]}};},{}],341:[function(require,module,exports){'use strict';var utils=exports;var BN=require('bn.js');var minAssert=require('minimalistic-assert');var minUtils=require('minimalistic-crypto-utils');utils.assert=minAssert;utils.toArray=minUtils.toArray;utils.zero2=minUtils.zero2;utils.toHex=minUtils.toHex;utils.encode=minUtils.encode;// Represent num in a w-NAF form |
|
|
function getNAF(num,w,bits){var naf=new Array(Math.max(num.bitLength(),bits)+1);naf.fill(0);var ws=1<<w+1;var k=num.clone();for(var i=0;i<naf.length;i++){var z;var mod=k.andln(ws-1);if(k.isOdd()){if(mod>(ws>>1)-1)z=(ws>>1)-mod;else z=mod;k.isubn(z);}else{z=0;}naf[i]=z;k.iushrn(1);}return naf;}utils.getNAF=getNAF;// Represent k1, k2 in a Joint Sparse Form |
|
|
function getJSF(k1,k2){var jsf=[[],[]];k1=k1.clone();k2=k2.clone();var d1=0;var d2=0;while(k1.cmpn(-d1)>0||k2.cmpn(-d2)>0){// First phase |
|
|
var m14=k1.andln(3)+d1&3;var m24=k2.andln(3)+d2&3;if(m14===3)m14=-1;if(m24===3)m24=-1;var u1;if((m14&1)===0){u1=0;}else{var m8=k1.andln(7)+d1&7;if((m8===3||m8===5)&&m24===2)u1=-m14;else u1=m14;}jsf[0].push(u1);var u2;if((m24&1)===0){u2=0;}else{var m8=k2.andln(7)+d2&7;if((m8===3||m8===5)&&m14===2)u2=-m24;else u2=m24;}jsf[1].push(u2);// Second phase |
|
|
if(2*d1===u1+1)d1=1-d1;if(2*d2===u2+1)d2=1-d2;k1.iushrn(1);k2.iushrn(1);}return jsf;}utils.getJSF=getJSF;function cachedProperty(obj,name,computer){var key='_'+name;obj.prototype[name]=function cachedProperty(){return this[key]!==undefined?this[key]:this[key]=computer.call(this);};}utils.cachedProperty=cachedProperty;function parseBytes(bytes){return typeof bytes==='string'?utils.toArray(bytes,'hex'):bytes;}utils.parseBytes=parseBytes;function intFromLE(bytes){return new BN(bytes,'hex','le');}utils.intFromLE=intFromLE;},{"bn.js":342,"minimalistic-assert":414,"minimalistic-crypto-utils":415}],342:[function(require,module,exports){arguments[4][179][0].apply(exports,arguments);},{"buffer":183,"dup":179}],343:[function(require,module,exports){module.exports={"_from":"elliptic@^6.5.2","_id":"elliptic@6.5.2","_inBundle":false,"_integrity":"sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==","_location":"/elliptic","_phantomChildren":{},"_requested":{"type":"range","registry":true,"raw":"elliptic@^6.5.2","name":"elliptic","escapedName":"elliptic","rawSpec":"^6.5.2","saveSpec":null,"fetchSpec":"^6.5.2"},"_requiredBy":["/browserify-sign","/create-ecdh"],"_resolved":"https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz","_shasum":"05c5678d7173c049d8ca433552224a495d0e3762","_spec":"elliptic@^6.5.2","_where":"/mnt/d/dev/git/exceljs/node_modules/browserify-sign","author":{"name":"Fedor Indutny","email":"fedor@indutny.com"},"bugs":{"url":"https://github.com/indutny/elliptic/issues"},"bundleDependencies":false,"dependencies":{"bn.js":"^4.4.0","brorand":"^1.0.1","hash.js":"^1.0.0","hmac-drbg":"^1.0.0","inherits":"^2.0.1","minimalistic-assert":"^1.0.0","minimalistic-crypto-utils":"^1.0.0"},"deprecated":false,"description":"EC cryptography","devDependencies":{"brfs":"^1.4.3","coveralls":"^3.0.8","grunt":"^1.0.4","grunt-browserify":"^5.0.0","grunt-cli":"^1.2.0","grunt-contrib-connect":"^1.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^1.0.1","grunt-mocha-istanbul":"^3.0.1","grunt-saucelabs":"^9.0.1","istanbul":"^0.4.2","jscs":"^3.0.7","jshint":"^2.10.3","mocha":"^6.2.2"},"files":["lib"],"homepage":"https://github.com/indutny/elliptic","keywords":["EC","Elliptic","curve","Cryptography"],"license":"MIT","main":"lib/elliptic.js","name":"elliptic","repository":{"type":"git","url":"git+ssh://git@github.com/indutny/elliptic.git"},"scripts":{"jscs":"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js","jshint":"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js","lint":"npm run jscs && npm run jshint","test":"npm run lint && npm run unit","unit":"istanbul test _mocha --reporter=spec test/index.js","version":"grunt dist && git add dist/"},"version":"6.5.2"};},{}],344:[function(require,module,exports){// Copyright Joyent, Inc. and other Node contributors. |
|
|
// |
|
|
// Permission is hereby granted, free of charge, to any person obtaining a |
|
|
// copy of this software and associated documentation files (the |
|
|
// "Software"), to deal in the Software without restriction, including |
|
|
// without limitation the rights to use, copy, modify, merge, publish, |
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit |
|
|
// persons to whom the Software is furnished to do so, subject to the |
|
|
// following conditions: |
|
|
// |
|
|
// The above copyright notice and this permission notice shall be included |
|
|
// in all copies or substantial portions of the Software. |
|
|
// |
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
|
var objectCreate=Object.create||objectCreatePolyfill;var objectKeys=Object.keys||objectKeysPolyfill;var bind=Function.prototype.bind||functionBindPolyfill;function EventEmitter(){if(!this._events||!Object.prototype.hasOwnProperty.call(this,'_events')){this._events=objectCreate(null);this._eventsCount=0;}this._maxListeners=this._maxListeners||undefined;}module.exports=EventEmitter;// Backwards-compat with node 0.10.x |
|
|
EventEmitter.EventEmitter=EventEmitter;EventEmitter.prototype._events=undefined;EventEmitter.prototype._maxListeners=undefined;// By default EventEmitters will print a warning if more than 10 listeners are |
|
|
// added to it. This is a useful default which helps finding memory leaks. |
|
|
var defaultMaxListeners=10;var hasDefineProperty;try{var o={};if(Object.defineProperty)Object.defineProperty(o,'x',{value:0});hasDefineProperty=o.x===0;}catch(err){hasDefineProperty=false;}if(hasDefineProperty){Object.defineProperty(EventEmitter,'defaultMaxListeners',{enumerable:true,get:function get(){return defaultMaxListeners;},set:function set(arg){// check whether the input is a positive number (whose value is zero or |
|
|
// greater and not a NaN). |
|
|
if(typeof arg!=='number'||arg<0||arg!==arg)throw new TypeError('"defaultMaxListeners" must be a positive number');defaultMaxListeners=arg;}});}else{EventEmitter.defaultMaxListeners=defaultMaxListeners;}// Obviously not all Emitters should be limited to 10. This function allows |
|
|
// that to be increased. Set to zero for unlimited. |
|
|
EventEmitter.prototype.setMaxListeners=function setMaxListeners(n){if(typeof n!=='number'||n<0||isNaN(n))throw new TypeError('"n" argument must be a positive number');this._maxListeners=n;return this;};function $getMaxListeners(that){if(that._maxListeners===undefined)return EventEmitter.defaultMaxListeners;return that._maxListeners;}EventEmitter.prototype.getMaxListeners=function getMaxListeners(){return $getMaxListeners(this);};// These standalone emit* functions are used to optimize calling of event |
|
|
// handlers for fast cases because emit() itself often has a variable number of |
|
|
// arguments and can be deoptimized because of that. These functions always have |
|
|
// the same number of arguments and thus do not get deoptimized, so the code |
|
|
// inside them can execute faster. |
|
|
function emitNone(handler,isFn,self){if(isFn)handler.call(self);else{var len=handler.length;var listeners=arrayClone(handler,len);for(var i=0;i<len;++i){listeners[i].call(self);}}}function emitOne(handler,isFn,self,arg1){if(isFn)handler.call(self,arg1);else{var len=handler.length;var listeners=arrayClone(handler,len);for(var i=0;i<len;++i){listeners[i].call(self,arg1);}}}function emitTwo(handler,isFn,self,arg1,arg2){if(isFn)handler.call(self,arg1,arg2);else{var len=handler.length;var listeners=arrayClone(handler,len);for(var i=0;i<len;++i){listeners[i].call(self,arg1,arg2);}}}function emitThree(handler,isFn,self,arg1,arg2,arg3){if(isFn)handler.call(self,arg1,arg2,arg3);else{var len=handler.length;var listeners=arrayClone(handler,len);for(var i=0;i<len;++i){listeners[i].call(self,arg1,arg2,arg3);}}}function emitMany(handler,isFn,self,args){if(isFn)handler.apply(self,args);else{var len=handler.length;var listeners=arrayClone(handler,len);for(var i=0;i<len;++i){listeners[i].apply(self,args);}}}EventEmitter.prototype.emit=function emit(type){var er,handler,len,args,i,events;var doError=type==='error';events=this._events;if(events)doError=doError&&events.error==null;else if(!doError)return false;// If there is no 'error' event listener then throw. |
|
|
if(doError){if(arguments.length>1)er=arguments[1];if(er instanceof Error){throw er;// Unhandled 'error' event |
|
|
}else{// At least give some kind of context to the user |
|
|
var err=new Error('Unhandled "error" event. ('+er+')');err.context=er;throw err;}return false;}handler=events[type];if(!handler)return false;var isFn=typeof handler==='function';len=arguments.length;switch(len){// fast cases |
|
|
case 1:emitNone(handler,isFn,this);break;case 2:emitOne(handler,isFn,this,arguments[1]);break;case 3:emitTwo(handler,isFn,this,arguments[1],arguments[2]);break;case 4:emitThree(handler,isFn,this,arguments[1],arguments[2],arguments[3]);break;// slower |
|
|
default:args=new Array(len-1);for(i=1;i<len;i++){args[i-1]=arguments[i];}emitMany(handler,isFn,this,args);}return true;};function _addListener(target,type,listener,prepend){var m;var events;var existing;if(typeof listener!=='function')throw new TypeError('"listener" argument must be a function');events=target._events;if(!events){events=target._events=objectCreate(null);target._eventsCount=0;}else{// To avoid recursion in the case that type === "newListener"! Before |
|
|
// adding it to the listeners, first emit "newListener". |
|
|
if(events.newListener){target.emit('newListener',type,listener.listener?listener.listener:listener);// Re-assign `events` because a newListener handler could have caused the |
|
|
// this._events to be assigned to a new object |
|
|
events=target._events;}existing=events[type];}if(!existing){// Optimize the case of one listener. Don't need the extra array object. |
|
|
existing=events[type]=listener;++target._eventsCount;}else{if(typeof existing==='function'){// Adding the second element, need to change to array. |
|
|
existing=events[type]=prepend?[listener,existing]:[existing,listener];}else{// If we've already got an array, just append. |
|
|
if(prepend){existing.unshift(listener);}else{existing.push(listener);}}// Check for listener leak |
|
|
if(!existing.warned){m=$getMaxListeners(target);if(m&&m>0&&existing.length>m){existing.warned=true;var w=new Error('Possible EventEmitter memory leak detected. '+existing.length+' "'+String(type)+'" listeners '+'added. Use emitter.setMaxListeners() to '+'increase limit.');w.name='MaxListenersExceededWarning';w.emitter=target;w.type=type;w.count=existing.length;if((typeof console==="undefined"?"undefined":_typeof2(console))==='object'&&console.warn){console.warn('%s: %s',w.name,w.message);}}}}return target;}EventEmitter.prototype.addListener=function addListener(type,listener){return _addListener(this,type,listener,false);};EventEmitter.prototype.on=EventEmitter.prototype.addListener;EventEmitter.prototype.prependListener=function prependListener(type,listener){return _addListener(this,type,listener,true);};function onceWrapper(){if(!this.fired){this.target.removeListener(this.type,this.wrapFn);this.fired=true;switch(arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:var args=new Array(arguments.length);for(var i=0;i<args.length;++i){args[i]=arguments[i];}this.listener.apply(this.target,args);}}}function _onceWrap(target,type,listener){var state={fired:false,wrapFn:undefined,target:target,type:type,listener:listener};var wrapped=bind.call(onceWrapper,state);wrapped.listener=listener;state.wrapFn=wrapped;return wrapped;}EventEmitter.prototype.once=function once(type,listener){if(typeof listener!=='function')throw new TypeError('"listener" argument must be a function');this.on(type,_onceWrap(this,type,listener));return this;};EventEmitter.prototype.prependOnceListener=function prependOnceListener(type,listener){if(typeof listener!=='function')throw new TypeError('"listener" argument must be a function');this.prependListener(type,_onceWrap(this,type,listener));return this;};// Emits a 'removeListener' event if and only if the listener was removed. |
|
|
EventEmitter.prototype.removeListener=function removeListener(type,listener){var list,events,position,i,originalListener;if(typeof listener!=='function')throw new TypeError('"listener" argument must be a function');events=this._events;if(!events)return this;list=events[type];if(!list)return this;if(list===listener||list.listener===listener){if(--this._eventsCount===0)this._events=objectCreate(null);else{delete events[type];if(events.removeListener)this.emit('removeListener',type,list.listener||listener);}}else if(typeof list!=='function'){position=-1;for(i=list.length-1;i>=0;i--){if(list[i]===listener||list[i].listener===listener){originalListener=list[i].listener;position=i;break;}}if(position<0)return this;if(position===0)list.shift();else spliceOne(list,position);if(list.length===1)events[type]=list[0];if(events.removeListener)this.emit('removeListener',type,originalListener||listener);}return this;};EventEmitter.prototype.removeAllListeners=function removeAllListeners(type){var listeners,events,i;events=this._events;if(!events)return this;// not listening for removeListener, no need to emit |
|
|
if(!events.removeListener){if(arguments.length===0){this._events=objectCreate(null);this._eventsCount=0;}else if(events[type]){if(--this._eventsCount===0)this._events=objectCreate(null);else delete events[type];}return this;}// emit removeListener for all listeners on all events |
|
|
if(arguments.length===0){var keys=objectKeys(events);var key;for(i=0;i<keys.length;++i){key=keys[i];if(key==='removeListener')continue;this.removeAllListeners(key);}this.removeAllListeners('removeListener');this._events=objectCreate(null);this._eventsCount=0;return this;}listeners=events[type];if(typeof listeners==='function'){this.removeListener(type,listeners);}else if(listeners){// LIFO order |
|
|
for(i=listeners.length-1;i>=0;i--){this.removeListener(type,listeners[i]);}}return this;};function _listeners(target,type,unwrap){var events=target._events;if(!events)return[];var evlistener=events[type];if(!evlistener)return[];if(typeof evlistener==='function')return unwrap?[evlistener.listener||evlistener]:[evlistener];return unwrap?unwrapListeners(evlistener):arrayClone(evlistener,evlistener.length);}EventEmitter.prototype.listeners=function listeners(type){return _listeners(this,type,true);};EventEmitter.prototype.rawListeners=function rawListeners(type){return _listeners(this,type,false);};EventEmitter.listenerCount=function(emitter,type){if(typeof emitter.listenerCount==='function'){return emitter.listenerCount(type);}else{return listenerCount.call(emitter,type);}};EventEmitter.prototype.listenerCount=listenerCount;function listenerCount(type){var events=this._events;if(events){var evlistener=events[type];if(typeof evlistener==='function'){return 1;}else if(evlistener){return evlistener.length;}}return 0;}EventEmitter.prototype.eventNames=function eventNames(){return this._eventsCount>0?Reflect.ownKeys(this._events):[];};// About 1.5x faster than the two-arg version of Array#splice(). |
|
|
function spliceOne(list,index){for(var i=index,k=i+1,n=list.length;k<n;i+=1,k+=1){list[i]=list[k];}list.pop();}function arrayClone(arr,n){var copy=new Array(n);for(var i=0;i<n;++i){copy[i]=arr[i];}return copy;}function unwrapListeners(arr){var ret=new Array(arr.length);for(var i=0;i<ret.length;++i){ret[i]=arr[i].listener||arr[i];}return ret;}function objectCreatePolyfill(proto){var F=function F(){};F.prototype=proto;return new F();}function objectKeysPolyfill(obj){var keys=[];for(var k in obj){if(Object.prototype.hasOwnProperty.call(obj,k)){keys.push(k);}}return k;}function functionBindPolyfill(context){var fn=this;return function(){return fn.apply(context,arguments);};}},{}],345:[function(require,module,exports){var Buffer=require('safe-buffer').Buffer;var MD5=require('md5.js');/* eslint-disable camelcase */function EVP_BytesToKey(password,salt,keyBits,ivLen){if(!Buffer.isBuffer(password))password=Buffer.from(password,'binary');if(salt){if(!Buffer.isBuffer(salt))salt=Buffer.from(salt,'binary');if(salt.length!==8)throw new RangeError('salt should be Buffer with 8 byte length');}var keyLen=keyBits/8;var key=Buffer.alloc(keyLen);var iv=Buffer.alloc(ivLen||0);var tmp=Buffer.alloc(0);while(keyLen>0||ivLen>0){var hash=new MD5();hash.update(tmp);hash.update(password);if(salt)hash.update(salt);tmp=hash.digest();var used=0;if(keyLen>0){var keyStart=key.length-keyLen;used=Math.min(keyLen,tmp.length);tmp.copy(key,keyStart,0,used);keyLen-=used;}if(used<tmp.length&&ivLen>0){var ivStart=iv.length-ivLen;var length=Math.min(ivLen,tmp.length-used);tmp.copy(iv,ivStart,used,used+length);ivLen-=length;}}tmp.fill(0);return{key:key,iv:iv};}module.exports=EVP_BytesToKey;},{"md5.js":411,"safe-buffer":470}],346:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var format_1=require("@fast-csv/format");Object.defineProperty(exports,"format",{enumerable:true,get:function get(){return format_1.format;}});Object.defineProperty(exports,"write",{enumerable:true,get:function get(){return format_1.write;}});Object.defineProperty(exports,"writeToStream",{enumerable:true,get:function get(){return format_1.writeToStream;}});Object.defineProperty(exports,"writeToBuffer",{enumerable:true,get:function get(){return format_1.writeToBuffer;}});Object.defineProperty(exports,"writeToString",{enumerable:true,get:function get(){return format_1.writeToString;}});Object.defineProperty(exports,"writeToPath",{enumerable:true,get:function get(){return format_1.writeToPath;}});Object.defineProperty(exports,"CsvFormatterStream",{enumerable:true,get:function get(){return format_1.CsvFormatterStream;}});Object.defineProperty(exports,"FormatterOptions",{enumerable:true,get:function get(){return format_1.FormatterOptions;}});var parse_1=require("@fast-csv/parse");Object.defineProperty(exports,"parse",{enumerable:true,get:function get(){return parse_1.parse;}});Object.defineProperty(exports,"parseString",{enumerable:true,get:function get(){return parse_1.parseString;}});Object.defineProperty(exports,"parseStream",{enumerable:true,get:function get(){return parse_1.parseStream;}});Object.defineProperty(exports,"parseFile",{enumerable:true,get:function get(){return parse_1.parseFile;}});Object.defineProperty(exports,"ParserOptions",{enumerable:true,get:function get(){return parse_1.ParserOptions;}});Object.defineProperty(exports,"CsvParserStream",{enumerable:true,get:function get(){return parse_1.CsvParserStream;}});},{"@fast-csv/format":146,"@fast-csv/parse":150}],347:[function(require,module,exports){'use strict';var Buffer=require('safe-buffer').Buffer;var Transform=require('readable-stream').Transform;var inherits=require('inherits');function throwIfNotStringOrBuffer(val,prefix){if(!Buffer.isBuffer(val)&&typeof val!=='string'){throw new TypeError(prefix+' must be a string or a buffer');}}function HashBase(blockSize){Transform.call(this);this._block=Buffer.allocUnsafe(blockSize);this._blockSize=blockSize;this._blockOffset=0;this._length=[0,0,0,0];this._finalized=false;}inherits(HashBase,Transform);HashBase.prototype._transform=function(chunk,encoding,callback){var error=null;try{this.update(chunk,encoding);}catch(err){error=err;}callback(error);};HashBase.prototype._flush=function(callback){var error=null;try{this.push(this.digest());}catch(err){error=err;}callback(error);};HashBase.prototype.update=function(data,encoding){throwIfNotStringOrBuffer(data,'Data');if(this._finalized)throw new Error('Digest already called');if(!Buffer.isBuffer(data))data=Buffer.from(data,encoding);// consume data |
|
|
var block=this._block;var offset=0;while(this._blockOffset+data.length-offset>=this._blockSize){for(var i=this._blockOffset;i<this._blockSize;){block[i++]=data[offset++];}this._update();this._blockOffset=0;}while(offset<data.length){block[this._blockOffset++]=data[offset++];}// update length |
|
|
for(var j=0,carry=data.length*8;carry>0;++j){this._length[j]+=carry;carry=this._length[j]/0x0100000000|0;if(carry>0)this._length[j]-=0x0100000000*carry;}return this;};HashBase.prototype._update=function(){throw new Error('_update is not implemented');};HashBase.prototype.digest=function(encoding){if(this._finalized)throw new Error('Digest already called');this._finalized=true;var digest=this._digest();if(encoding!==undefined)digest=digest.toString(encoding);// reset state |
|
|
this._block.fill(0);this._blockOffset=0;for(var i=0;i<4;++i){this._length[i]=0;}return digest;};HashBase.prototype._digest=function(){throw new Error('_digest is not implemented');};module.exports=HashBase;},{"inherits":364,"readable-stream":467,"safe-buffer":348}],348:[function(require,module,exports){arguments[4][212][0].apply(exports,arguments);},{"buffer":214,"dup":212}],349:[function(require,module,exports){var hash=exports;hash.utils=require('./hash/utils');hash.common=require('./hash/common');hash.sha=require('./hash/sha');hash.ripemd=require('./hash/ripemd');hash.hmac=require('./hash/hmac');// Proxy hash functions to the main object |
|
|
hash.sha1=hash.sha.sha1;hash.sha256=hash.sha.sha256;hash.sha224=hash.sha.sha224;hash.sha384=hash.sha.sha384;hash.sha512=hash.sha.sha512;hash.ripemd160=hash.ripemd.ripemd160;},{"./hash/common":350,"./hash/hmac":351,"./hash/ripemd":352,"./hash/sha":353,"./hash/utils":360}],350:[function(require,module,exports){'use strict';var utils=require('./utils');var assert=require('minimalistic-assert');function BlockHash(){this.pending=null;this.pendingTotal=0;this.blockSize=this.constructor.blockSize;this.outSize=this.constructor.outSize;this.hmacStrength=this.constructor.hmacStrength;this.padLength=this.constructor.padLength/8;this.endian='big';this._delta8=this.blockSize/8;this._delta32=this.blockSize/32;}exports.BlockHash=BlockHash;BlockHash.prototype.update=function update(msg,enc){// Convert message to array, pad it, and join into 32bit blocks |
|
|
msg=utils.toArray(msg,enc);if(!this.pending)this.pending=msg;else this.pending=this.pending.concat(msg);this.pendingTotal+=msg.length;// Enough data, try updating |
|
|
if(this.pending.length>=this._delta8){msg=this.pending;// Process pending data in blocks |
|
|
var r=msg.length%this._delta8;this.pending=msg.slice(msg.length-r,msg.length);if(this.pending.length===0)this.pending=null;msg=utils.join32(msg,0,msg.length-r,this.endian);for(var i=0;i<msg.length;i+=this._delta32){this._update(msg,i,i+this._delta32);}}return this;};BlockHash.prototype.digest=function digest(enc){this.update(this._pad());assert(this.pending===null);return this._digest(enc);};BlockHash.prototype._pad=function pad(){var len=this.pendingTotal;var bytes=this._delta8;var k=bytes-(len+this.padLength)%bytes;var res=new Array(k+this.padLength);res[0]=0x80;for(var i=1;i<k;i++){res[i]=0;}// Append length |
|
|
len<<=3;if(this.endian==='big'){for(var t=8;t<this.padLength;t++){res[i++]=0;}res[i++]=0;res[i++]=0;res[i++]=0;res[i++]=0;res[i++]=len>>>24&0xff;res[i++]=len>>>16&0xff;res[i++]=len>>>8&0xff;res[i++]=len&0xff;}else{res[i++]=len&0xff;res[i++]=len>>>8&0xff;res[i++]=len>>>16&0xff;res[i++]=len>>>24&0xff;res[i++]=0;res[i++]=0;res[i++]=0;res[i++]=0;for(t=8;t<this.padLength;t++){res[i++]=0;}}return res;};},{"./utils":360,"minimalistic-assert":414}],351:[function(require,module,exports){'use strict';var utils=require('./utils');var assert=require('minimalistic-assert');function Hmac(hash,key,enc){if(!(this instanceof Hmac))return new Hmac(hash,key,enc);this.Hash=hash;this.blockSize=hash.blockSize/8;this.outSize=hash.outSize/8;this.inner=null;this.outer=null;this._init(utils.toArray(key,enc));}module.exports=Hmac;Hmac.prototype._init=function init(key){// Shorten key, if needed |
|
|
if(key.length>this.blockSize)key=new this.Hash().update(key).digest();assert(key.length<=this.blockSize);// Add padding to key |
|
|
for(var i=key.length;i<this.blockSize;i++){key.push(0);}for(i=0;i<key.length;i++){key[i]^=0x36;}this.inner=new this.Hash().update(key);// 0x36 ^ 0x5c = 0x6a |
|
|
for(i=0;i<key.length;i++){key[i]^=0x6a;}this.outer=new this.Hash().update(key);};Hmac.prototype.update=function update(msg,enc){this.inner.update(msg,enc);return this;};Hmac.prototype.digest=function digest(enc){this.outer.update(this.inner.digest());return this.outer.digest(enc);};},{"./utils":360,"minimalistic-assert":414}],352:[function(require,module,exports){'use strict';var utils=require('./utils');var common=require('./common');var rotl32=utils.rotl32;var sum32=utils.sum32;var sum32_3=utils.sum32_3;var sum32_4=utils.sum32_4;var BlockHash=common.BlockHash;function RIPEMD160(){if(!(this instanceof RIPEMD160))return new RIPEMD160();BlockHash.call(this);this.h=[0x67452301,0xefcdab89,0x98badcfe,0x10325476,0xc3d2e1f0];this.endian='little';}utils.inherits(RIPEMD160,BlockHash);exports.ripemd160=RIPEMD160;RIPEMD160.blockSize=512;RIPEMD160.outSize=160;RIPEMD160.hmacStrength=192;RIPEMD160.padLength=64;RIPEMD160.prototype._update=function update(msg,start){var A=this.h[0];var B=this.h[1];var C=this.h[2];var D=this.h[3];var E=this.h[4];var Ah=A;var Bh=B;var Ch=C;var Dh=D;var Eh=E;for(var j=0;j<80;j++){var T=sum32(rotl32(sum32_4(A,f(j,B,C,D),msg[r[j]+start],K(j)),s[j]),E);A=E;E=D;D=rotl32(C,10);C=B;B=T;T=sum32(rotl32(sum32_4(Ah,f(79-j,Bh,Ch,Dh),msg[rh[j]+start],Kh(j)),sh[j]),Eh);Ah=Eh;Eh=Dh;Dh=rotl32(Ch,10);Ch=Bh;Bh=T;}T=sum32_3(this.h[1],C,Dh);this.h[1]=sum32_3(this.h[2],D,Eh);this.h[2]=sum32_3(this.h[3],E,Ah);this.h[3]=sum32_3(this.h[4],A,Bh);this.h[4]=sum32_3(this.h[0],B,Ch);this.h[0]=T;};RIPEMD160.prototype._digest=function digest(enc){if(enc==='hex')return utils.toHex32(this.h,'little');else return utils.split32(this.h,'little');};function f(j,x,y,z){if(j<=15)return x^y^z;else if(j<=31)return x&y|~x&z;else if(j<=47)return(x|~y)^z;else if(j<=63)return x&z|y&~z;else return x^(y|~z);}function K(j){if(j<=15)return 0x00000000;else if(j<=31)return 0x5a827999;else if(j<=47)return 0x6ed9eba1;else if(j<=63)return 0x8f1bbcdc;else return 0xa953fd4e;}function Kh(j){if(j<=15)return 0x50a28be6;else if(j<=31)return 0x5c4dd124;else if(j<=47)return 0x6d703ef3;else if(j<=63)return 0x7a6d76e9;else return 0x00000000;}var r=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13];var rh=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11];var s=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6];var sh=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11];},{"./common":350,"./utils":360}],353:[function(require,module,exports){'use strict';exports.sha1=require('./sha/1');exports.sha224=require('./sha/224');exports.sha256=require('./sha/256');exports.sha384=require('./sha/384');exports.sha512=require('./sha/512');},{"./sha/1":354,"./sha/224":355,"./sha/256":356,"./sha/384":357,"./sha/512":358}],354:[function(require,module,exports){'use strict';var utils=require('../utils');var common=require('../common');var shaCommon=require('./common');var rotl32=utils.rotl32;var sum32=utils.sum32;var sum32_5=utils.sum32_5;var ft_1=shaCommon.ft_1;var BlockHash=common.BlockHash;var sha1_K=[0x5A827999,0x6ED9EBA1,0x8F1BBCDC,0xCA62C1D6];function SHA1(){if(!(this instanceof SHA1))return new SHA1();BlockHash.call(this);this.h=[0x67452301,0xefcdab89,0x98badcfe,0x10325476,0xc3d2e1f0];this.W=new Array(80);}utils.inherits(SHA1,BlockHash);module.exports=SHA1;SHA1.blockSize=512;SHA1.outSize=160;SHA1.hmacStrength=80;SHA1.padLength=64;SHA1.prototype._update=function _update(msg,start){var W=this.W;for(var i=0;i<16;i++){W[i]=msg[start+i];}for(;i<W.length;i++){W[i]=rotl32(W[i-3]^W[i-8]^W[i-14]^W[i-16],1);}var a=this.h[0];var b=this.h[1];var c=this.h[2];var d=this.h[3];var e=this.h[4];for(i=0;i<W.length;i++){var s=~~(i/20);var t=sum32_5(rotl32(a,5),ft_1(s,b,c,d),e,W[i],sha1_K[s]);e=d;d=c;c=rotl32(b,30);b=a;a=t;}this.h[0]=sum32(this.h[0],a);this.h[1]=sum32(this.h[1],b);this.h[2]=sum32(this.h[2],c);this.h[3]=sum32(this.h[3],d);this.h[4]=sum32(this.h[4],e);};SHA1.prototype._digest=function digest(enc){if(enc==='hex')return utils.toHex32(this.h,'big');else return utils.split32(this.h,'big');};},{"../common":350,"../utils":360,"./common":359}],355:[function(require,module,exports){'use strict';var utils=require('../utils');var SHA256=require('./256');function SHA224(){if(!(this instanceof SHA224))return new SHA224();SHA256.call(this);this.h=[0xc1059ed8,0x367cd507,0x3070dd17,0xf70e5939,0xffc00b31,0x68581511,0x64f98fa7,0xbefa4fa4];}utils.inherits(SHA224,SHA256);module.exports=SHA224;SHA224.blockSize=512;SHA224.outSize=224;SHA224.hmacStrength=192;SHA224.padLength=64;SHA224.prototype._digest=function digest(enc){// Just truncate output |
|
|
if(enc==='hex')return utils.toHex32(this.h.slice(0,7),'big');else return utils.split32(this.h.slice(0,7),'big');};},{"../utils":360,"./256":356}],356:[function(require,module,exports){'use strict';var utils=require('../utils');var common=require('../common');var shaCommon=require('./common');var assert=require('minimalistic-assert');var sum32=utils.sum32;var sum32_4=utils.sum32_4;var sum32_5=utils.sum32_5;var ch32=shaCommon.ch32;var maj32=shaCommon.maj32;var s0_256=shaCommon.s0_256;var s1_256=shaCommon.s1_256;var g0_256=shaCommon.g0_256;var g1_256=shaCommon.g1_256;var BlockHash=common.BlockHash;var sha256_K=[0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5,0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174,0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967,0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85,0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070,0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2];function SHA256(){if(!(this instanceof SHA256))return new SHA256();BlockHash.call(this);this.h=[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19];this.k=sha256_K;this.W=new Array(64);}utils.inherits(SHA256,BlockHash);module.exports=SHA256;SHA256.blockSize=512;SHA256.outSize=256;SHA256.hmacStrength=192;SHA256.padLength=64;SHA256.prototype._update=function _update(msg,start){var W=this.W;for(var i=0;i<16;i++){W[i]=msg[start+i];}for(;i<W.length;i++){W[i]=sum32_4(g1_256(W[i-2]),W[i-7],g0_256(W[i-15]),W[i-16]);}var a=this.h[0];var b=this.h[1];var c=this.h[2];var d=this.h[3];var e=this.h[4];var f=this.h[5];var g=this.h[6];var h=this.h[7];assert(this.k.length===W.length);for(i=0;i<W.length;i++){var T1=sum32_5(h,s1_256(e),ch32(e,f,g),this.k[i],W[i]);var T2=sum32(s0_256(a),maj32(a,b,c));h=g;g=f;f=e;e=sum32(d,T1);d=c;c=b;b=a;a=sum32(T1,T2);}this.h[0]=sum32(this.h[0],a);this.h[1]=sum32(this.h[1],b);this.h[2]=sum32(this.h[2],c);this.h[3]=sum32(this.h[3],d);this.h[4]=sum32(this.h[4],e);this.h[5]=sum32(this.h[5],f);this.h[6]=sum32(this.h[6],g);this.h[7]=sum32(this.h[7],h);};SHA256.prototype._digest=function digest(enc){if(enc==='hex')return utils.toHex32(this.h,'big');else return utils.split32(this.h,'big');};},{"../common":350,"../utils":360,"./common":359,"minimalistic-assert":414}],357:[function(require,module,exports){'use strict';var utils=require('../utils');var SHA512=require('./512');function SHA384(){if(!(this instanceof SHA384))return new SHA384();SHA512.call(this);this.h=[0xcbbb9d5d,0xc1059ed8,0x629a292a,0x367cd507,0x9159015a,0x3070dd17,0x152fecd8,0xf70e5939,0x67332667,0xffc00b31,0x8eb44a87,0x68581511,0xdb0c2e0d,0x64f98fa7,0x47b5481d,0xbefa4fa4];}utils.inherits(SHA384,SHA512);module.exports=SHA384;SHA384.blockSize=1024;SHA384.outSize=384;SHA384.hmacStrength=192;SHA384.padLength=128;SHA384.prototype._digest=function digest(enc){if(enc==='hex')return utils.toHex32(this.h.slice(0,12),'big');else return utils.split32(this.h.slice(0,12),'big');};},{"../utils":360,"./512":358}],358:[function(require,module,exports){'use strict';var utils=require('../utils');var common=require('../common');var assert=require('minimalistic-assert');var rotr64_hi=utils.rotr64_hi;var rotr64_lo=utils.rotr64_lo;var shr64_hi=utils.shr64_hi;var shr64_lo=utils.shr64_lo;var sum64=utils.sum64;var sum64_hi=utils.sum64_hi;var sum64_lo=utils.sum64_lo;var sum64_4_hi=utils.sum64_4_hi;var sum64_4_lo=utils.sum64_4_lo;var sum64_5_hi=utils.sum64_5_hi;var sum64_5_lo=utils.sum64_5_lo;var BlockHash=common.BlockHash;var sha512_K=[0x428a2f98,0xd728ae22,0x71374491,0x23ef65cd,0xb5c0fbcf,0xec4d3b2f,0xe9b5dba5,0x8189dbbc,0x3956c25b,0xf348b538,0x59f111f1,0xb605d019,0x923f82a4,0xaf194f9b,0xab1c5ed5,0xda6d8118,0xd807aa98,0xa3030242,0x12835b01,0x45706fbe,0x243185be,0x4ee4b28c,0x550c7dc3,0xd5ffb4e2,0x72be5d74,0xf27b896f,0x80deb1fe,0x3b1696b1,0x9bdc06a7,0x25c71235,0xc19bf174,0xcf692694,0xe49b69c1,0x9ef14ad2,0xefbe4786,0x384f25e3,0x0fc19dc6,0x8b8cd5b5,0x240ca1cc,0x77ac9c65,0x2de92c6f,0x592b0275,0x4a7484aa,0x6ea6e483,0x5cb0a9dc,0xbd41fbd4,0x76f988da,0x831153b5,0x983e5152,0xee66dfab,0xa831c66d,0x2db43210,0xb00327c8,0x98fb213f,0xbf597fc7,0xbeef0ee4,0xc6e00bf3,0x3da88fc2,0xd5a79147,0x930aa725,0x06ca6351,0xe003826f,0x14292967,0x0a0e6e70,0x27b70a85,0x46d22ffc,0x2e1b2138,0x5c26c926,0x4d2c6dfc,0x5ac42aed,0x53380d13,0x9d95b3df,0x650a7354,0x8baf63de,0x766a0abb,0x3c77b2a8,0x81c2c92e,0x47edaee6,0x92722c85,0x1482353b,0xa2bfe8a1,0x4cf10364,0xa81a664b,0xbc423001,0xc24b8b70,0xd0f89791,0xc76c51a3,0x0654be30,0xd192e819,0xd6ef5218,0xd6990624,0x5565a910,0xf40e3585,0x5771202a,0x106aa070,0x32bbd1b8,0x19a4c116,0xb8d2d0c8,0x1e376c08,0x5141ab53,0x2748774c,0xdf8eeb99,0x34b0bcb5,0xe19b48a8,0x391c0cb3,0xc5c95a63,0x4ed8aa4a,0xe3418acb,0x5b9cca4f,0x7763e373,0x682e6ff3,0xd6b2b8a3,0x748f82ee,0x5defb2fc,0x78a5636f,0x43172f60,0x84c87814,0xa1f0ab72,0x8cc70208,0x1a6439ec,0x90befffa,0x23631e28,0xa4506ceb,0xde82bde9,0xbef9a3f7,0xb2c67915,0xc67178f2,0xe372532b,0xca273ece,0xea26619c,0xd186b8c7,0x21c0c207,0xeada7dd6,0xcde0eb1e,0xf57d4f7f,0xee6ed178,0x06f067aa,0x72176fba,0x0a637dc5,0xa2c898a6,0x113f9804,0xbef90dae,0x1b710b35,0x131c471b,0x28db77f5,0x23047d84,0x32caab7b,0x40c72493,0x3c9ebe0a,0x15c9bebc,0x431d67c4,0x9c100d4c,0x4cc5d4be,0xcb3e42b6,0x597f299c,0xfc657e2a,0x5fcb6fab,0x3ad6faec,0x6c44198c,0x4a475817];function SHA512(){if(!(this instanceof SHA512))return new SHA512();BlockHash.call(this);this.h=[0x6a09e667,0xf3bcc908,0xbb67ae85,0x84caa73b,0x3c6ef372,0xfe94f82b,0xa54ff53a,0x5f1d36f1,0x510e527f,0xade682d1,0x9b05688c,0x2b3e6c1f,0x1f83d9ab,0xfb41bd6b,0x5be0cd19,0x137e2179];this.k=sha512_K;this.W=new Array(160);}utils.inherits(SHA512,BlockHash);module.exports=SHA512;SHA512.blockSize=1024;SHA512.outSize=512;SHA512.hmacStrength=192;SHA512.padLength=128;SHA512.prototype._prepareBlock=function _prepareBlock(msg,start){var W=this.W;// 32 x 32bit words |
|
|
for(var i=0;i<32;i++){W[i]=msg[start+i];}for(;i<W.length;i+=2){var c0_hi=g1_512_hi(W[i-4],W[i-3]);// i - 2 |
|
|
var c0_lo=g1_512_lo(W[i-4],W[i-3]);var c1_hi=W[i-14];// i - 7 |
|
|
var c1_lo=W[i-13];var c2_hi=g0_512_hi(W[i-30],W[i-29]);// i - 15 |
|
|
var c2_lo=g0_512_lo(W[i-30],W[i-29]);var c3_hi=W[i-32];// i - 16 |
|
|
var c3_lo=W[i-31];W[i]=sum64_4_hi(c0_hi,c0_lo,c1_hi,c1_lo,c2_hi,c2_lo,c3_hi,c3_lo);W[i+1]=sum64_4_lo(c0_hi,c0_lo,c1_hi,c1_lo,c2_hi,c2_lo,c3_hi,c3_lo);}};SHA512.prototype._update=function _update(msg,start){this._prepareBlock(msg,start);var W=this.W;var ah=this.h[0];var al=this.h[1];var bh=this.h[2];var bl=this.h[3];var ch=this.h[4];var cl=this.h[5];var dh=this.h[6];var dl=this.h[7];var eh=this.h[8];var el=this.h[9];var fh=this.h[10];var fl=this.h[11];var gh=this.h[12];var gl=this.h[13];var hh=this.h[14];var hl=this.h[15];assert(this.k.length===W.length);for(var i=0;i<W.length;i+=2){var c0_hi=hh;var c0_lo=hl;var c1_hi=s1_512_hi(eh,el);var c1_lo=s1_512_lo(eh,el);var c2_hi=ch64_hi(eh,el,fh,fl,gh,gl);var c2_lo=ch64_lo(eh,el,fh,fl,gh,gl);var c3_hi=this.k[i];var c3_lo=this.k[i+1];var c4_hi=W[i];var c4_lo=W[i+1];var T1_hi=sum64_5_hi(c0_hi,c0_lo,c1_hi,c1_lo,c2_hi,c2_lo,c3_hi,c3_lo,c4_hi,c4_lo);var T1_lo=sum64_5_lo(c0_hi,c0_lo,c1_hi,c1_lo,c2_hi,c2_lo,c3_hi,c3_lo,c4_hi,c4_lo);c0_hi=s0_512_hi(ah,al);c0_lo=s0_512_lo(ah,al);c1_hi=maj64_hi(ah,al,bh,bl,ch,cl);c1_lo=maj64_lo(ah,al,bh,bl,ch,cl);var T2_hi=sum64_hi(c0_hi,c0_lo,c1_hi,c1_lo);var T2_lo=sum64_lo(c0_hi,c0_lo,c1_hi,c1_lo);hh=gh;hl=gl;gh=fh;gl=fl;fh=eh;fl=el;eh=sum64_hi(dh,dl,T1_hi,T1_lo);el=sum64_lo(dl,dl,T1_hi,T1_lo);dh=ch;dl=cl;ch=bh;cl=bl;bh=ah;bl=al;ah=sum64_hi(T1_hi,T1_lo,T2_hi,T2_lo);al=sum64_lo(T1_hi,T1_lo,T2_hi,T2_lo);}sum64(this.h,0,ah,al);sum64(this.h,2,bh,bl);sum64(this.h,4,ch,cl);sum64(this.h,6,dh,dl);sum64(this.h,8,eh,el);sum64(this.h,10,fh,fl);sum64(this.h,12,gh,gl);sum64(this.h,14,hh,hl);};SHA512.prototype._digest=function digest(enc){if(enc==='hex')return utils.toHex32(this.h,'big');else return utils.split32(this.h,'big');};function ch64_hi(xh,xl,yh,yl,zh){var r=xh&yh^~xh&zh;if(r<0)r+=0x100000000;return r;}function ch64_lo(xh,xl,yh,yl,zh,zl){var r=xl&yl^~xl&zl;if(r<0)r+=0x100000000;return r;}function maj64_hi(xh,xl,yh,yl,zh){var r=xh&yh^xh&zh^yh&zh;if(r<0)r+=0x100000000;return r;}function maj64_lo(xh,xl,yh,yl,zh,zl){var r=xl&yl^xl&zl^yl&zl;if(r<0)r+=0x100000000;return r;}function s0_512_hi(xh,xl){var c0_hi=rotr64_hi(xh,xl,28);var c1_hi=rotr64_hi(xl,xh,2);// 34 |
|
|
var c2_hi=rotr64_hi(xl,xh,7);// 39 |
|
|
var r=c0_hi^c1_hi^c2_hi;if(r<0)r+=0x100000000;return r;}function s0_512_lo(xh,xl){var c0_lo=rotr64_lo(xh,xl,28);var c1_lo=rotr64_lo(xl,xh,2);// 34 |
|
|
var c2_lo=rotr64_lo(xl,xh,7);// 39 |
|
|
var r=c0_lo^c1_lo^c2_lo;if(r<0)r+=0x100000000;return r;}function s1_512_hi(xh,xl){var c0_hi=rotr64_hi(xh,xl,14);var c1_hi=rotr64_hi(xh,xl,18);var c2_hi=rotr64_hi(xl,xh,9);// 41 |
|
|
var r=c0_hi^c1_hi^c2_hi;if(r<0)r+=0x100000000;return r;}function s1_512_lo(xh,xl){var c0_lo=rotr64_lo(xh,xl,14);var c1_lo=rotr64_lo(xh,xl,18);var c2_lo=rotr64_lo(xl,xh,9);// 41 |
|
|
var r=c0_lo^c1_lo^c2_lo;if(r<0)r+=0x100000000;return r;}function g0_512_hi(xh,xl){var c0_hi=rotr64_hi(xh,xl,1);var c1_hi=rotr64_hi(xh,xl,8);var c2_hi=shr64_hi(xh,xl,7);var r=c0_hi^c1_hi^c2_hi;if(r<0)r+=0x100000000;return r;}function g0_512_lo(xh,xl){var c0_lo=rotr64_lo(xh,xl,1);var c1_lo=rotr64_lo(xh,xl,8);var c2_lo=shr64_lo(xh,xl,7);var r=c0_lo^c1_lo^c2_lo;if(r<0)r+=0x100000000;return r;}function g1_512_hi(xh,xl){var c0_hi=rotr64_hi(xh,xl,19);var c1_hi=rotr64_hi(xl,xh,29);// 61 |
|
|
var c2_hi=shr64_hi(xh,xl,6);var r=c0_hi^c1_hi^c2_hi;if(r<0)r+=0x100000000;return r;}function g1_512_lo(xh,xl){var c0_lo=rotr64_lo(xh,xl,19);var c1_lo=rotr64_lo(xl,xh,29);// 61 |
|
|
var c2_lo=shr64_lo(xh,xl,6);var r=c0_lo^c1_lo^c2_lo;if(r<0)r+=0x100000000;return r;}},{"../common":350,"../utils":360,"minimalistic-assert":414}],359:[function(require,module,exports){'use strict';var utils=require('../utils');var rotr32=utils.rotr32;function ft_1(s,x,y,z){if(s===0)return ch32(x,y,z);if(s===1||s===3)return p32(x,y,z);if(s===2)return maj32(x,y,z);}exports.ft_1=ft_1;function ch32(x,y,z){return x&y^~x&z;}exports.ch32=ch32;function maj32(x,y,z){return x&y^x&z^y&z;}exports.maj32=maj32;function p32(x,y,z){return x^y^z;}exports.p32=p32;function s0_256(x){return rotr32(x,2)^rotr32(x,13)^rotr32(x,22);}exports.s0_256=s0_256;function s1_256(x){return rotr32(x,6)^rotr32(x,11)^rotr32(x,25);}exports.s1_256=s1_256;function g0_256(x){return rotr32(x,7)^rotr32(x,18)^x>>>3;}exports.g0_256=g0_256;function g1_256(x){return rotr32(x,17)^rotr32(x,19)^x>>>10;}exports.g1_256=g1_256;},{"../utils":360}],360:[function(require,module,exports){'use strict';var assert=require('minimalistic-assert');var inherits=require('inherits');exports.inherits=inherits;function isSurrogatePair(msg,i){if((msg.charCodeAt(i)&0xFC00)!==0xD800){return false;}if(i<0||i+1>=msg.length){return false;}return(msg.charCodeAt(i+1)&0xFC00)===0xDC00;}function toArray(msg,enc){if(Array.isArray(msg))return msg.slice();if(!msg)return[];var res=[];if(typeof msg==='string'){if(!enc){// Inspired by stringToUtf8ByteArray() in closure-library by Google |
|
|
// https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143 |
|
|
// Apache License 2.0 |
|
|
// https://github.com/google/closure-library/blob/master/LICENSE |
|
|
var p=0;for(var i=0;i<msg.length;i++){var c=msg.charCodeAt(i);if(c<128){res[p++]=c;}else if(c<2048){res[p++]=c>>6|192;res[p++]=c&63|128;}else if(isSurrogatePair(msg,i)){c=0x10000+((c&0x03FF)<<10)+(msg.charCodeAt(++i)&0x03FF);res[p++]=c>>18|240;res[p++]=c>>12&63|128;res[p++]=c>>6&63|128;res[p++]=c&63|128;}else{res[p++]=c>>12|224;res[p++]=c>>6&63|128;res[p++]=c&63|128;}}}else if(enc==='hex'){msg=msg.replace(/[^a-z0-9]+/ig,'');if(msg.length%2!==0)msg='0'+msg;for(i=0;i<msg.length;i+=2){res.push(parseInt(msg[i]+msg[i+1],16));}}}else{for(i=0;i<msg.length;i++){res[i]=msg[i]|0;}}return res;}exports.toArray=toArray;function toHex(msg){var res='';for(var i=0;i<msg.length;i++){res+=zero2(msg[i].toString(16));}return res;}exports.toHex=toHex;function htonl(w){var res=w>>>24|w>>>8&0xff00|w<<8&0xff0000|(w&0xff)<<24;return res>>>0;}exports.htonl=htonl;function toHex32(msg,endian){var res='';for(var i=0;i<msg.length;i++){var w=msg[i];if(endian==='little')w=htonl(w);res+=zero8(w.toString(16));}return res;}exports.toHex32=toHex32;function zero2(word){if(word.length===1)return'0'+word;else return word;}exports.zero2=zero2;function zero8(word){if(word.length===7)return'0'+word;else if(word.length===6)return'00'+word;else if(word.length===5)return'000'+word;else if(word.length===4)return'0000'+word;else if(word.length===3)return'00000'+word;else if(word.length===2)return'000000'+word;else if(word.length===1)return'0000000'+word;else return word;}exports.zero8=zero8;function join32(msg,start,end,endian){var len=end-start;assert(len%4===0);var res=new Array(len/4);for(var i=0,k=start;i<res.length;i++,k+=4){var w;if(endian==='big')w=msg[k]<<24|msg[k+1]<<16|msg[k+2]<<8|msg[k+3];else w=msg[k+3]<<24|msg[k+2]<<16|msg[k+1]<<8|msg[k];res[i]=w>>>0;}return res;}exports.join32=join32;function split32(msg,endian){var res=new Array(msg.length*4);for(var i=0,k=0;i<msg.length;i++,k+=4){var m=msg[i];if(endian==='big'){res[k]=m>>>24;res[k+1]=m>>>16&0xff;res[k+2]=m>>>8&0xff;res[k+3]=m&0xff;}else{res[k+3]=m>>>24;res[k+2]=m>>>16&0xff;res[k+1]=m>>>8&0xff;res[k]=m&0xff;}}return res;}exports.split32=split32;function rotr32(w,b){return w>>>b|w<<32-b;}exports.rotr32=rotr32;function rotl32(w,b){return w<<b|w>>>32-b;}exports.rotl32=rotl32;function sum32(a,b){return a+b>>>0;}exports.sum32=sum32;function sum32_3(a,b,c){return a+b+c>>>0;}exports.sum32_3=sum32_3;function sum32_4(a,b,c,d){return a+b+c+d>>>0;}exports.sum32_4=sum32_4;function sum32_5(a,b,c,d,e){return a+b+c+d+e>>>0;}exports.sum32_5=sum32_5;function sum64(buf,pos,ah,al){var bh=buf[pos];var bl=buf[pos+1];var lo=al+bl>>>0;var hi=(lo<al?1:0)+ah+bh;buf[pos]=hi>>>0;buf[pos+1]=lo;}exports.sum64=sum64;function sum64_hi(ah,al,bh,bl){var lo=al+bl>>>0;var hi=(lo<al?1:0)+ah+bh;return hi>>>0;}exports.sum64_hi=sum64_hi;function sum64_lo(ah,al,bh,bl){var lo=al+bl;return lo>>>0;}exports.sum64_lo=sum64_lo;function sum64_4_hi(ah,al,bh,bl,ch,cl,dh,dl){var carry=0;var lo=al;lo=lo+bl>>>0;carry+=lo<al?1:0;lo=lo+cl>>>0;carry+=lo<cl?1:0;lo=lo+dl>>>0;carry+=lo<dl?1:0;var hi=ah+bh+ch+dh+carry;return hi>>>0;}exports.sum64_4_hi=sum64_4_hi;function sum64_4_lo(ah,al,bh,bl,ch,cl,dh,dl){var lo=al+bl+cl+dl;return lo>>>0;}exports.sum64_4_lo=sum64_4_lo;function sum64_5_hi(ah,al,bh,bl,ch,cl,dh,dl,eh,el){var carry=0;var lo=al;lo=lo+bl>>>0;carry+=lo<al?1:0;lo=lo+cl>>>0;carry+=lo<cl?1:0;lo=lo+dl>>>0;carry+=lo<dl?1:0;lo=lo+el>>>0;carry+=lo<el?1:0;var hi=ah+bh+ch+dh+eh+carry;return hi>>>0;}exports.sum64_5_hi=sum64_5_hi;function sum64_5_lo(ah,al,bh,bl,ch,cl,dh,dl,eh,el){var lo=al+bl+cl+dl+el;return lo>>>0;}exports.sum64_5_lo=sum64_5_lo;function rotr64_hi(ah,al,num){var r=al<<32-num|ah>>>num;return r>>>0;}exports.rotr64_hi=rotr64_hi;function rotr64_lo(ah,al,num){var r=ah<<32-num|al>>>num;return r>>>0;}exports.rotr64_lo=rotr64_lo;function shr64_hi(ah,al,num){return ah>>>num;}exports.shr64_hi=shr64_hi;function shr64_lo(ah,al,num){var r=ah<<32-num|al>>>num;return r>>>0;}exports.shr64_lo=shr64_lo;},{"inherits":364,"minimalistic-assert":414}],361:[function(require,module,exports){'use strict';var hash=require('hash.js');var utils=require('minimalistic-crypto-utils');var assert=require('minimalistic-assert');function HmacDRBG(options){if(!(this instanceof HmacDRBG))return new HmacDRBG(options);this.hash=options.hash;this.predResist=!!options.predResist;this.outLen=this.hash.outSize;this.minEntropy=options.minEntropy||this.hash.hmacStrength;this._reseed=null;this.reseedInterval=null;this.K=null;this.V=null;var entropy=utils.toArray(options.entropy,options.entropyEnc||'hex');var nonce=utils.toArray(options.nonce,options.nonceEnc||'hex');var pers=utils.toArray(options.pers,options.persEnc||'hex');assert(entropy.length>=this.minEntropy/8,'Not enough entropy. Minimum is: '+this.minEntropy+' bits');this._init(entropy,nonce,pers);}module.exports=HmacDRBG;HmacDRBG.prototype._init=function init(entropy,nonce,pers){var seed=entropy.concat(nonce).concat(pers);this.K=new Array(this.outLen/8);this.V=new Array(this.outLen/8);for(var i=0;i<this.V.length;i++){this.K[i]=0x00;this.V[i]=0x01;}this._update(seed);this._reseed=1;this.reseedInterval=0x1000000000000;// 2^48 |
|
|
};HmacDRBG.prototype._hmac=function hmac(){return new hash.hmac(this.hash,this.K);};HmacDRBG.prototype._update=function update(seed){var kmac=this._hmac().update(this.V).update([0x00]);if(seed)kmac=kmac.update(seed);this.K=kmac.digest();this.V=this._hmac().update(this.V).digest();if(!seed)return;this.K=this._hmac().update(this.V).update([0x01]).update(seed).digest();this.V=this._hmac().update(this.V).digest();};HmacDRBG.prototype.reseed=function reseed(entropy,entropyEnc,add,addEnc){// Optional entropy enc |
|
|
if(typeof entropyEnc!=='string'){addEnc=add;add=entropyEnc;entropyEnc=null;}entropy=utils.toArray(entropy,entropyEnc);add=utils.toArray(add,addEnc);assert(entropy.length>=this.minEntropy/8,'Not enough entropy. Minimum is: '+this.minEntropy+' bits');this._update(entropy.concat(add||[]));this._reseed=1;};HmacDRBG.prototype.generate=function generate(len,enc,add,addEnc){if(this._reseed>this.reseedInterval)throw new Error('Reseed is required');// Optional encoding |
|
|
if(typeof enc!=='string'){addEnc=add;add=enc;enc=null;}// Optional additional data |
|
|
if(add){add=utils.toArray(add,addEnc||'hex');this._update(add);}var temp=[];while(temp.length<len){this.V=this._hmac().update(this.V).digest();temp=temp.concat(this.V);}var res=temp.slice(0,len);this._update(add);this._reseed++;return utils.encode(res,enc);};},{"hash.js":349,"minimalistic-assert":414,"minimalistic-crypto-utils":415}],362:[function(require,module,exports){exports.read=function(buffer,offset,isLE,mLen,nBytes){var e,m;var eLen=nBytes*8-mLen-1;var eMax=(1<<eLen)-1;var eBias=eMax>>1;var nBits=-7;var i=isLE?nBytes-1:0;var d=isLE?-1:1;var s=buffer[offset+i];i+=d;e=s&(1<<-nBits)-1;s>>=-nBits;nBits+=eLen;for(;nBits>0;e=e*256+buffer[offset+i],i+=d,nBits-=8){}m=e&(1<<-nBits)-1;e>>=-nBits;nBits+=mLen;for(;nBits>0;m=m*256+buffer[offset+i],i+=d,nBits-=8){}if(e===0){e=1-eBias;}else if(e===eMax){return m?NaN:(s?-1:1)*Infinity;}else{m=m+Math.pow(2,mLen);e=e-eBias;}return(s?-1:1)*m*Math.pow(2,e-mLen);};exports.write=function(buffer,value,offset,isLE,mLen,nBytes){var e,m,c;var eLen=nBytes*8-mLen-1;var eMax=(1<<eLen)-1;var eBias=eMax>>1;var rt=mLen===23?Math.pow(2,-24)-Math.pow(2,-77):0;var i=isLE?0:nBytes-1;var d=isLE?1:-1;var s=value<0||value===0&&1/value<0?1:0;value=Math.abs(value);if(isNaN(value)||value===Infinity){m=isNaN(value)?1:0;e=eMax;}else{e=Math.floor(Math.log(value)/Math.LN2);if(value*(c=Math.pow(2,-e))<1){e--;c*=2;}if(e+eBias>=1){value+=rt/c;}else{value+=rt*Math.pow(2,1-eBias);}if(value*c>=2){e++;c/=2;}if(e+eBias>=eMax){m=0;e=eMax;}else if(e+eBias>=1){m=(value*c-1)*Math.pow(2,mLen);e=e+eBias;}else{m=value*Math.pow(2,eBias-1)*Math.pow(2,mLen);e=0;}}for(;mLen>=8;buffer[offset+i]=m&0xff,i+=d,m/=256,mLen-=8){}e=e<<mLen|m;eLen+=mLen;for(;eLen>0;buffer[offset+i]=e&0xff,i+=d,e/=256,eLen-=8){}buffer[offset+i-d]|=s*128;};},{}],363:[function(require,module,exports){(function(global){'use strict';var Mutation=global.MutationObserver||global.WebKitMutationObserver;var scheduleDrain;{if(Mutation){var called=0;var observer=new Mutation(nextTick);var element=global.document.createTextNode('');observer.observe(element,{characterData:true});scheduleDrain=function scheduleDrain(){element.data=called=++called%2;};}else if(!global.setImmediate&&typeof global.MessageChannel!=='undefined'){var channel=new global.MessageChannel();channel.port1.onmessage=nextTick;scheduleDrain=function scheduleDrain(){channel.port2.postMessage(0);};}else if('document'in global&&'onreadystatechange'in global.document.createElement('script')){scheduleDrain=function scheduleDrain(){// Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted |
|
|
// into the document. Do so, thus queuing up the task. Remember to clean up once it's been called. |
|
|
var scriptEl=global.document.createElement('script');scriptEl.onreadystatechange=function(){nextTick();scriptEl.onreadystatechange=null;scriptEl.parentNode.removeChild(scriptEl);scriptEl=null;};global.document.documentElement.appendChild(scriptEl);};}else{scheduleDrain=function scheduleDrain(){setTimeout(nextTick,0);};}}var draining;var queue=[];//named nextTick for less confusing stack traces |
|
|
function nextTick(){draining=true;var i,oldQueue;var len=queue.length;while(len){oldQueue=queue;queue=[];i=-1;while(++i<len){oldQueue[i]();}len=queue.length;}draining=false;}module.exports=immediate;function immediate(task){if(queue.push(task)===1&&!draining){scheduleDrain();}}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{}],364:[function(require,module,exports){if(typeof Object.create==='function'){// implementation from standard node.js 'util' module |
|
|
module.exports=function inherits(ctor,superCtor){if(superCtor){ctor.super_=superCtor;ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:false,writable:true,configurable:true}});}};}else{// old school shim for old browsers |
|
|
module.exports=function inherits(ctor,superCtor){if(superCtor){ctor.super_=superCtor;var TempCtor=function TempCtor(){};TempCtor.prototype=superCtor.prototype;ctor.prototype=new TempCtor();ctor.prototype.constructor=ctor;}};}},{}],365:[function(require,module,exports){/*! |
|
|
* Determine if an object is a Buffer |
|
|
* |
|
|
* @author Feross Aboukhadijeh <https://feross.org> |
|
|
* @license MIT |
|
|
*/ // The _isBuffer check is for Safari 5-7 support, because it's missing |
|
|
// Object.prototype.constructor. Remove this eventually |
|
|
module.exports=function(obj){return obj!=null&&(isBuffer(obj)||isSlowBuffer(obj)||!!obj._isBuffer);};function isBuffer(obj){return!!obj.constructor&&typeof obj.constructor.isBuffer==='function'&&obj.constructor.isBuffer(obj);}// For Node v0.10 support. Remove this eventually. |
|
|
function isSlowBuffer(obj){return typeof obj.readFloatLE==='function'&&typeof obj.slice==='function'&&isBuffer(obj.slice(0,0));}},{}],366:[function(require,module,exports){var toString={}.toString;module.exports=Array.isArray||function(arr){return toString.call(arr)=='[object Array]';};},{}],367:[function(require,module,exports){'use strict';var utils=require('./utils');var support=require('./support');// private property |
|
|
var _keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";// public method for encoding |
|
|
exports.encode=function(input){var output=[];var chr1,chr2,chr3,enc1,enc2,enc3,enc4;var i=0,len=input.length,remainingBytes=len;var isArray=utils.getTypeOf(input)!=="string";while(i<input.length){remainingBytes=len-i;if(!isArray){chr1=input.charCodeAt(i++);chr2=i<len?input.charCodeAt(i++):0;chr3=i<len?input.charCodeAt(i++):0;}else{chr1=input[i++];chr2=i<len?input[i++]:0;chr3=i<len?input[i++]:0;}enc1=chr1>>2;enc2=(chr1&3)<<4|chr2>>4;enc3=remainingBytes>1?(chr2&15)<<2|chr3>>6:64;enc4=remainingBytes>2?chr3&63:64;output.push(_keyStr.charAt(enc1)+_keyStr.charAt(enc2)+_keyStr.charAt(enc3)+_keyStr.charAt(enc4));}return output.join("");};// public method for decoding |
|
|
exports.decode=function(input){var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0,resultIndex=0;var dataUrlPrefix="data:";if(input.substr(0,dataUrlPrefix.length)===dataUrlPrefix){// This is a common error: people give a data url |
|
|
// (data:image/png;base64,iVBOR...) with a {base64: true} and |
|
|
// wonders why things don't work. |
|
|
// We can detect that the string input looks like a data url but we |
|
|
// *can't* be sure it is one: removing everything up to the comma would |
|
|
// be too dangerous. |
|
|
throw new Error("Invalid base64 input, it looks like a data url.");}input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");var totalLength=input.length*3/4;if(input.charAt(input.length-1)===_keyStr.charAt(64)){totalLength--;}if(input.charAt(input.length-2)===_keyStr.charAt(64)){totalLength--;}if(totalLength%1!==0){// totalLength is not an integer, the length does not match a valid |
|
|
// base64 content. That can happen if: |
|
|
// - the input is not a base64 content |
|
|
// - the input is *almost* a base64 content, with a extra chars at the |
|
|
// beginning or at the end |
|
|
// - the input uses a base64 variant (base64url for example) |
|
|
throw new Error("Invalid base64 input, bad content length.");}var output;if(support.uint8array){output=new Uint8Array(totalLength|0);}else{output=new Array(totalLength|0);}while(i<input.length){enc1=_keyStr.indexOf(input.charAt(i++));enc2=_keyStr.indexOf(input.charAt(i++));enc3=_keyStr.indexOf(input.charAt(i++));enc4=_keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output[resultIndex++]=chr1;if(enc3!==64){output[resultIndex++]=chr2;}if(enc4!==64){output[resultIndex++]=chr3;}}return output;};},{"./support":396,"./utils":398}],368:[function(require,module,exports){'use strict';var external=require("./external");var DataWorker=require('./stream/DataWorker');var DataLengthProbe=require('./stream/DataLengthProbe');var Crc32Probe=require('./stream/Crc32Probe');var DataLengthProbe=require('./stream/DataLengthProbe');/** |
|
|
* Represent a compressed object, with everything needed to decompress it. |
|
|
* @constructor |
|
|
* @param {number} compressedSize the size of the data compressed. |
|
|
* @param {number} uncompressedSize the size of the data after decompression. |
|
|
* @param {number} crc32 the crc32 of the decompressed file. |
|
|
* @param {object} compression the type of compression, see lib/compressions.js. |
|
|
* @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data. |
|
|
*/function CompressedObject(compressedSize,uncompressedSize,crc32,compression,data){this.compressedSize=compressedSize;this.uncompressedSize=uncompressedSize;this.crc32=crc32;this.compression=compression;this.compressedContent=data;}CompressedObject.prototype={/** |
|
|
* Create a worker to get the uncompressed content. |
|
|
* @return {GenericWorker} the worker. |
|
|
*/getContentWorker:function getContentWorker(){var worker=new DataWorker(external.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new DataLengthProbe("data_length"));var that=this;worker.on("end",function(){if(this.streamInfo['data_length']!==that.uncompressedSize){throw new Error("Bug : uncompressed data size mismatch");}});return worker;},/** |
|
|
* Create a worker to get the compressed content. |
|
|
* @return {GenericWorker} the worker. |
|
|
*/getCompressedWorker:function getCompressedWorker(){return new DataWorker(external.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression);}};/** |
|
|
* Chain the given worker with other workers to compress the content with the |
|
|
* given compression. |
|
|
* @param {GenericWorker} uncompressedWorker the worker to pipe. |
|
|
* @param {Object} compression the compression object. |
|
|
* @param {Object} compressionOptions the options to use when compressing. |
|
|
* @return {GenericWorker} the new worker compressing the content. |
|
|
*/CompressedObject.createWorkerFrom=function(uncompressedWorker,compression,compressionOptions){return uncompressedWorker.pipe(new Crc32Probe()).pipe(new DataLengthProbe("uncompressedSize")).pipe(compression.compressWorker(compressionOptions)).pipe(new DataLengthProbe("compressedSize")).withStreamInfo("compression",compression);};module.exports=CompressedObject;},{"./external":372,"./stream/Crc32Probe":391,"./stream/DataLengthProbe":392,"./stream/DataWorker":393}],369:[function(require,module,exports){'use strict';var GenericWorker=require("./stream/GenericWorker");exports.STORE={magic:"\x00\x00",compressWorker:function compressWorker(compressionOptions){return new GenericWorker("STORE compression");},uncompressWorker:function uncompressWorker(){return new GenericWorker("STORE decompression");}};exports.DEFLATE=require('./flate');},{"./flate":373,"./stream/GenericWorker":394}],370:[function(require,module,exports){'use strict';var utils=require('./utils');/** |
|
|
* The following functions come from pako, from pako/lib/zlib/crc32.js |
|
|
* released under the MIT license, see pako https://github.com/nodeca/pako/ |
|
|
*/ // Use ordinary array, since untyped makes no boost here |
|
|
function makeTable(){var c,table=[];for(var n=0;n<256;n++){c=n;for(var k=0;k<8;k++){c=c&1?0xEDB88320^c>>>1:c>>>1;}table[n]=c;}return table;}// Create table on load. Just 255 signed longs. Not a problem. |
|
|
var crcTable=makeTable();function crc32(crc,buf,len,pos){var t=crcTable,end=pos+len;crc=crc^-1;for(var i=pos;i<end;i++){crc=crc>>>8^t[(crc^buf[i])&0xFF];}return crc^-1;// >>> 0; |
|
|
}// That's all for the pako functions. |
|
|
/** |
|
|
* Compute the crc32 of a string. |
|
|
* This is almost the same as the function crc32, but for strings. Using the |
|
|
* same function for the two use cases leads to horrible performances. |
|
|
* @param {Number} crc the starting value of the crc. |
|
|
* @param {String} str the string to use. |
|
|
* @param {Number} len the length of the string. |
|
|
* @param {Number} pos the starting position for the crc32 computation. |
|
|
* @return {Number} the computed crc32. |
|
|
*/function crc32str(crc,str,len,pos){var t=crcTable,end=pos+len;crc=crc^-1;for(var i=pos;i<end;i++){crc=crc>>>8^t[(crc^str.charCodeAt(i))&0xFF];}return crc^-1;// >>> 0; |
|
|
}module.exports=function crc32wrapper(input,crc){if(typeof input==="undefined"||!input.length){return 0;}var isArray=utils.getTypeOf(input)!=="string";if(isArray){return crc32(crc|0,input,input.length,0);}else{return crc32str(crc|0,input,input.length,0);}};},{"./utils":398}],371:[function(require,module,exports){'use strict';exports.base64=false;exports.binary=false;exports.dir=false;exports.createFolders=true;exports.date=null;exports.compression=null;exports.compressionOptions=null;exports.comment=null;exports.unixPermissions=null;exports.dosPermissions=null;},{}],372:[function(require,module,exports){/* global Promise */'use strict';// load the global object first: |
|
|
// - it should be better integrated in the system (unhandledRejection in node) |
|
|
// - the environment may have a custom Promise implementation (see zone.js) |
|
|
var ES6Promise=null;if(typeof Promise!=="undefined"){ES6Promise=Promise;}else{ES6Promise=require("lie");}/** |
|
|
* Let the user use/change some implementations. |
|
|
*/module.exports={Promise:ES6Promise};},{"lie":402}],373:[function(require,module,exports){'use strict';var USE_TYPEDARRAY=typeof Uint8Array!=='undefined'&&typeof Uint16Array!=='undefined'&&typeof Uint32Array!=='undefined';var pako=require("pako");var utils=require("./utils");var GenericWorker=require("./stream/GenericWorker");var ARRAY_TYPE=USE_TYPEDARRAY?"uint8array":"array";exports.magic="\x08\x00";/** |
|
|
* Create a worker that uses pako to inflate/deflate. |
|
|
* @constructor |
|
|
* @param {String} action the name of the pako function to call : either "Deflate" or "Inflate". |
|
|
* @param {Object} options the options to use when (de)compressing. |
|
|
*/function FlateWorker(action,options){GenericWorker.call(this,"FlateWorker/"+action);this._pako=null;this._pakoAction=action;this._pakoOptions=options;// the `meta` object from the last chunk received |
|
|
// this allow this worker to pass around metadata |
|
|
this.meta={};}utils.inherits(FlateWorker,GenericWorker);/** |
|
|
* @see GenericWorker.processChunk |
|
|
*/FlateWorker.prototype.processChunk=function(chunk){this.meta=chunk.meta;if(this._pako===null){this._createPako();}this._pako.push(utils.transformTo(ARRAY_TYPE,chunk.data),false);};/** |
|
|
* @see GenericWorker.flush |
|
|
*/FlateWorker.prototype.flush=function(){GenericWorker.prototype.flush.call(this);if(this._pako===null){this._createPako();}this._pako.push([],true);};/** |
|
|
* @see GenericWorker.cleanUp |
|
|
*/FlateWorker.prototype.cleanUp=function(){GenericWorker.prototype.cleanUp.call(this);this._pako=null;};/** |
|
|
* Create the _pako object. |
|
|
* TODO: lazy-loading this object isn't the best solution but it's the |
|
|
* quickest. The best solution is to lazy-load the worker list. See also the |
|
|
* issue #446. |
|
|
*/FlateWorker.prototype._createPako=function(){this._pako=new pako[this._pakoAction]({raw:true,level:this._pakoOptions.level||-1// default compression |
|
|
});var self=this;this._pako.onData=function(data){self.push({data:data,meta:self.meta});};};exports.compressWorker=function(compressionOptions){return new FlateWorker("Deflate",compressionOptions);};exports.uncompressWorker=function(){return new FlateWorker("Inflate",{});};},{"./stream/GenericWorker":394,"./utils":398,"pako":416}],374:[function(require,module,exports){'use strict';var utils=require('../utils');var GenericWorker=require('../stream/GenericWorker');var utf8=require('../utf8');var crc32=require('../crc32');var signature=require('../signature');/** |
|
|
* Transform an integer into a string in hexadecimal. |
|
|
* @private |
|
|
* @param {number} dec the number to convert. |
|
|
* @param {number} bytes the number of bytes to generate. |
|
|
* @returns {string} the result. |
|
|
*/var decToHex=function decToHex(dec,bytes){var hex="",i;for(i=0;i<bytes;i++){hex+=String.fromCharCode(dec&0xff);dec=dec>>>8;}return hex;};/** |
|
|
* Generate the UNIX part of the external file attributes. |
|
|
* @param {Object} unixPermissions the unix permissions or null. |
|
|
* @param {Boolean} isDir true if the entry is a directory, false otherwise. |
|
|
* @return {Number} a 32 bit integer. |
|
|
* |
|
|
* adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute : |
|
|
* |
|
|
* TTTTsstrwxrwxrwx0000000000ADVSHR |
|
|
* ^^^^____________________________ file type, see zipinfo.c (UNX_*) |
|
|
* ^^^_________________________ setuid, setgid, sticky |
|
|
* ^^^^^^^^^________________ permissions |
|
|
* ^^^^^^^^^^______ not used ? |
|
|
* ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only |
|
|
*/var generateUnixExternalFileAttr=function generateUnixExternalFileAttr(unixPermissions,isDir){var result=unixPermissions;if(!unixPermissions){// I can't use octal values in strict mode, hence the hexa. |
|
|
// 040775 => 0x41fd |
|
|
// 0100664 => 0x81b4 |
|
|
result=isDir?0x41fd:0x81b4;}return(result&0xFFFF)<<16;};/** |
|
|
* Generate the DOS part of the external file attributes. |
|
|
* @param {Object} dosPermissions the dos permissions or null. |
|
|
* @param {Boolean} isDir true if the entry is a directory, false otherwise. |
|
|
* @return {Number} a 32 bit integer. |
|
|
* |
|
|
* Bit 0 Read-Only |
|
|
* Bit 1 Hidden |
|
|
* Bit 2 System |
|
|
* Bit 3 Volume Label |
|
|
* Bit 4 Directory |
|
|
* Bit 5 Archive |
|
|
*/var generateDosExternalFileAttr=function generateDosExternalFileAttr(dosPermissions,isDir){// the dir flag is already set for compatibility |
|
|
return(dosPermissions||0)&0x3F;};/** |
|
|
* Generate the various parts used in the construction of the final zip file. |
|
|
* @param {Object} streamInfo the hash with information about the compressed file. |
|
|
* @param {Boolean} streamedContent is the content streamed ? |
|
|
* @param {Boolean} streamingEnded is the stream finished ? |
|
|
* @param {number} offset the current offset from the start of the zip file. |
|
|
* @param {String} platform let's pretend we are this platform (change platform dependents fields) |
|
|
* @param {Function} encodeFileName the function to encode the file name / comment. |
|
|
* @return {Object} the zip parts. |
|
|
*/var generateZipParts=function generateZipParts(streamInfo,streamedContent,streamingEnded,offset,platform,encodeFileName){var file=streamInfo['file'],compression=streamInfo['compression'],useCustomEncoding=encodeFileName!==utf8.utf8encode,encodedFileName=utils.transformTo("string",encodeFileName(file.name)),utfEncodedFileName=utils.transformTo("string",utf8.utf8encode(file.name)),comment=file.comment,encodedComment=utils.transformTo("string",encodeFileName(comment)),utfEncodedComment=utils.transformTo("string",utf8.utf8encode(comment)),useUTF8ForFileName=utfEncodedFileName.length!==file.name.length,useUTF8ForComment=utfEncodedComment.length!==comment.length,dosTime,dosDate,extraFields="",unicodePathExtraField="",unicodeCommentExtraField="",dir=file.dir,date=file.date;var dataInfo={crc32:0,compressedSize:0,uncompressedSize:0};// if the content is streamed, the sizes/crc32 are only available AFTER |
|
|
// the end of the stream. |
|
|
if(!streamedContent||streamingEnded){dataInfo.crc32=streamInfo['crc32'];dataInfo.compressedSize=streamInfo['compressedSize'];dataInfo.uncompressedSize=streamInfo['uncompressedSize'];}var bitflag=0;if(streamedContent){// Bit 3: the sizes/crc32 are set to zero in the local header. |
|
|
// The correct values are put in the data descriptor immediately |
|
|
// following the compressed data. |
|
|
bitflag|=0x0008;}if(!useCustomEncoding&&(useUTF8ForFileName||useUTF8ForComment)){// Bit 11: Language encoding flag (EFS). |
|
|
bitflag|=0x0800;}var extFileAttr=0;var versionMadeBy=0;if(dir){// dos or unix, we set the dos dir flag |
|
|
extFileAttr|=0x00010;}if(platform==="UNIX"){versionMadeBy=0x031E;// UNIX, version 3.0 |
|
|
extFileAttr|=generateUnixExternalFileAttr(file.unixPermissions,dir);}else{// DOS or other, fallback to DOS |
|
|
versionMadeBy=0x0014;// DOS, version 2.0 |
|
|
extFileAttr|=generateDosExternalFileAttr(file.dosPermissions,dir);}// date |
|
|
// @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html |
|
|
// @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html |
|
|
// @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html |
|
|
dosTime=date.getUTCHours();dosTime=dosTime<<6;dosTime=dosTime|date.getUTCMinutes();dosTime=dosTime<<5;dosTime=dosTime|date.getUTCSeconds()/2;dosDate=date.getUTCFullYear()-1980;dosDate=dosDate<<4;dosDate=dosDate|date.getUTCMonth()+1;dosDate=dosDate<<5;dosDate=dosDate|date.getUTCDate();if(useUTF8ForFileName){// set the unicode path extra field. unzip needs at least one extra |
|
|
// field to correctly handle unicode path, so using the path is as good |
|
|
// as any other information. This could improve the situation with |
|
|
// other archive managers too. |
|
|
// This field is usually used without the utf8 flag, with a non |
|
|
// unicode path in the header (winrar, winzip). This helps (a bit) |
|
|
// with the messy Windows' default compressed folders feature but |
|
|
// breaks on p7zip which doesn't seek the unicode path extra field. |
|
|
// So for now, UTF-8 everywhere ! |
|
|
unicodePathExtraField=// Version |
|
|
decToHex(1,1)+// NameCRC32 |
|
|
decToHex(crc32(encodedFileName),4)+// UnicodeName |
|
|
utfEncodedFileName;extraFields+=// Info-ZIP Unicode Path Extra Field |
|
|
"\x75\x70"+// size |
|
|
decToHex(unicodePathExtraField.length,2)+// content |
|
|
unicodePathExtraField;}if(useUTF8ForComment){unicodeCommentExtraField=// Version |
|
|
decToHex(1,1)+// CommentCRC32 |
|
|
decToHex(crc32(encodedComment),4)+// UnicodeName |
|
|
utfEncodedComment;extraFields+=// Info-ZIP Unicode Path Extra Field |
|
|
"\x75\x63"+// size |
|
|
decToHex(unicodeCommentExtraField.length,2)+// content |
|
|
unicodeCommentExtraField;}var header="";// version needed to extract |
|
|
header+="\x0A\x00";// general purpose bit flag |
|
|
header+=decToHex(bitflag,2);// compression method |
|
|
header+=compression.magic;// last mod file time |
|
|
header+=decToHex(dosTime,2);// last mod file date |
|
|
header+=decToHex(dosDate,2);// crc-32 |
|
|
header+=decToHex(dataInfo.crc32,4);// compressed size |
|
|
header+=decToHex(dataInfo.compressedSize,4);// uncompressed size |
|
|
header+=decToHex(dataInfo.uncompressedSize,4);// file name length |
|
|
header+=decToHex(encodedFileName.length,2);// extra field length |
|
|
header+=decToHex(extraFields.length,2);var fileRecord=signature.LOCAL_FILE_HEADER+header+encodedFileName+extraFields;var dirRecord=signature.CENTRAL_FILE_HEADER+// version made by (00: DOS) |
|
|
decToHex(versionMadeBy,2)+// file header (common to file and central directory) |
|
|
header+// file comment length |
|
|
decToHex(encodedComment.length,2)+// disk number start |
|
|
"\x00\x00"+// internal file attributes TODO |
|
|
"\x00\x00"+// external file attributes |
|
|
decToHex(extFileAttr,4)+// relative offset of local header |
|
|
decToHex(offset,4)+// file name |
|
|
encodedFileName+// extra field |
|
|
extraFields+// file comment |
|
|
encodedComment;return{fileRecord:fileRecord,dirRecord:dirRecord};};/** |
|
|
* Generate the EOCD record. |
|
|
* @param {Number} entriesCount the number of entries in the zip file. |
|
|
* @param {Number} centralDirLength the length (in bytes) of the central dir. |
|
|
* @param {Number} localDirLength the length (in bytes) of the local dir. |
|
|
* @param {String} comment the zip file comment as a binary string. |
|
|
* @param {Function} encodeFileName the function to encode the comment. |
|
|
* @return {String} the EOCD record. |
|
|
*/var generateCentralDirectoryEnd=function generateCentralDirectoryEnd(entriesCount,centralDirLength,localDirLength,comment,encodeFileName){var dirEnd="";var encodedComment=utils.transformTo("string",encodeFileName(comment));// end of central dir signature |
|
|
dirEnd=signature.CENTRAL_DIRECTORY_END+// number of this disk |
|
|
"\x00\x00"+// number of the disk with the start of the central directory |
|
|
"\x00\x00"+// total number of entries in the central directory on this disk |
|
|
decToHex(entriesCount,2)+// total number of entries in the central directory |
|
|
decToHex(entriesCount,2)+// size of the central directory 4 bytes |
|
|
decToHex(centralDirLength,4)+// offset of start of central directory with respect to the starting disk number |
|
|
decToHex(localDirLength,4)+// .ZIP file comment length |
|
|
decToHex(encodedComment.length,2)+// .ZIP file comment |
|
|
encodedComment;return dirEnd;};/** |
|
|
* Generate data descriptors for a file entry. |
|
|
* @param {Object} streamInfo the hash generated by a worker, containing information |
|
|
* on the file entry. |
|
|
* @return {String} the data descriptors. |
|
|
*/var generateDataDescriptors=function generateDataDescriptors(streamInfo){var descriptor="";descriptor=signature.DATA_DESCRIPTOR+// crc-32 4 bytes |
|
|
decToHex(streamInfo['crc32'],4)+// compressed size 4 bytes |
|
|
decToHex(streamInfo['compressedSize'],4)+// uncompressed size 4 bytes |
|
|
decToHex(streamInfo['uncompressedSize'],4);return descriptor;};/** |
|
|
* A worker to concatenate other workers to create a zip file. |
|
|
* @param {Boolean} streamFiles `true` to stream the content of the files, |
|
|
* `false` to accumulate it. |
|
|
* @param {String} comment the comment to use. |
|
|
* @param {String} platform the platform to use, "UNIX" or "DOS". |
|
|
* @param {Function} encodeFileName the function to encode file names and comments. |
|
|
*/function ZipFileWorker(streamFiles,comment,platform,encodeFileName){GenericWorker.call(this,"ZipFileWorker");// The number of bytes written so far. This doesn't count accumulated chunks. |
|
|
this.bytesWritten=0;// The comment of the zip file |
|
|
this.zipComment=comment;// The platform "generating" the zip file. |
|
|
this.zipPlatform=platform;// the function to encode file names and comments. |
|
|
this.encodeFileName=encodeFileName;// Should we stream the content of the files ? |
|
|
this.streamFiles=streamFiles;// If `streamFiles` is false, we will need to accumulate the content of the |
|
|
// files to calculate sizes / crc32 (and write them *before* the content). |
|
|
// This boolean indicates if we are accumulating chunks (it will change a lot |
|
|
// during the lifetime of this worker). |
|
|
this.accumulate=false;// The buffer receiving chunks when accumulating content. |
|
|
this.contentBuffer=[];// The list of generated directory records. |
|
|
this.dirRecords=[];// The offset (in bytes) from the beginning of the zip file for the current source. |
|
|
this.currentSourceOffset=0;// The total number of entries in this zip file. |
|
|
this.entriesCount=0;// the name of the file currently being added, null when handling the end of the zip file. |
|
|
// Used for the emitted metadata. |
|
|
this.currentFile=null;this._sources=[];}utils.inherits(ZipFileWorker,GenericWorker);/** |
|
|
* @see GenericWorker.push |
|
|
*/ZipFileWorker.prototype.push=function(chunk){var currentFilePercent=chunk.meta.percent||0;var entriesCount=this.entriesCount;var remainingFiles=this._sources.length;if(this.accumulate){this.contentBuffer.push(chunk);}else{this.bytesWritten+=chunk.data.length;GenericWorker.prototype.push.call(this,{data:chunk.data,meta:{currentFile:this.currentFile,percent:entriesCount?(currentFilePercent+100*(entriesCount-remainingFiles-1))/entriesCount:100}});}};/** |
|
|
* The worker started a new source (an other worker). |
|
|
* @param {Object} streamInfo the streamInfo object from the new source. |
|
|
*/ZipFileWorker.prototype.openedSource=function(streamInfo){this.currentSourceOffset=this.bytesWritten;this.currentFile=streamInfo['file'].name;var streamedContent=this.streamFiles&&!streamInfo['file'].dir;// don't stream folders (because they don't have any content) |
|
|
if(streamedContent){var record=generateZipParts(streamInfo,streamedContent,false,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:record.fileRecord,meta:{percent:0}});}else{// we need to wait for the whole file before pushing anything |
|
|
this.accumulate=true;}};/** |
|
|
* The worker finished a source (an other worker). |
|
|
* @param {Object} streamInfo the streamInfo object from the finished source. |
|
|
*/ZipFileWorker.prototype.closedSource=function(streamInfo){this.accumulate=false;var streamedContent=this.streamFiles&&!streamInfo['file'].dir;var record=generateZipParts(streamInfo,streamedContent,true,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.dirRecords.push(record.dirRecord);if(streamedContent){// after the streamed file, we put data descriptors |
|
|
this.push({data:generateDataDescriptors(streamInfo),meta:{percent:100}});}else{// the content wasn't streamed, we need to push everything now |
|
|
// first the file record, then the content |
|
|
this.push({data:record.fileRecord,meta:{percent:0}});while(this.contentBuffer.length){this.push(this.contentBuffer.shift());}}this.currentFile=null;};/** |
|
|
* @see GenericWorker.flush |
|
|
*/ZipFileWorker.prototype.flush=function(){var localDirLength=this.bytesWritten;for(var i=0;i<this.dirRecords.length;i++){this.push({data:this.dirRecords[i],meta:{percent:100}});}var centralDirLength=this.bytesWritten-localDirLength;var dirEnd=generateCentralDirectoryEnd(this.dirRecords.length,centralDirLength,localDirLength,this.zipComment,this.encodeFileName);this.push({data:dirEnd,meta:{percent:100}});};/** |
|
|
* Prepare the next source to be read. |
|
|
*/ZipFileWorker.prototype.prepareNextSource=function(){this.previous=this._sources.shift();this.openedSource(this.previous.streamInfo);if(this.isPaused){this.previous.pause();}else{this.previous.resume();}};/** |
|
|
* @see GenericWorker.registerPrevious |
|
|
*/ZipFileWorker.prototype.registerPrevious=function(previous){this._sources.push(previous);var self=this;previous.on('data',function(chunk){self.processChunk(chunk);});previous.on('end',function(){self.closedSource(self.previous.streamInfo);if(self._sources.length){self.prepareNextSource();}else{self.end();}});previous.on('error',function(e){self.error(e);});return this;};/** |
|
|
* @see GenericWorker.resume |
|
|
*/ZipFileWorker.prototype.resume=function(){if(!GenericWorker.prototype.resume.call(this)){return false;}if(!this.previous&&this._sources.length){this.prepareNextSource();return true;}if(!this.previous&&!this._sources.length&&!this.generatedError){this.end();return true;}};/** |
|
|
* @see GenericWorker.error |
|
|
*/ZipFileWorker.prototype.error=function(e){var sources=this._sources;if(!GenericWorker.prototype.error.call(this,e)){return false;}for(var i=0;i<sources.length;i++){try{sources[i].error(e);}catch(e){// the `error` exploded, nothing to do |
|
|
}}return true;};/** |
|
|
* @see GenericWorker.lock |
|
|
*/ZipFileWorker.prototype.lock=function(){GenericWorker.prototype.lock.call(this);var sources=this._sources;for(var i=0;i<sources.length;i++){sources[i].lock();}};module.exports=ZipFileWorker;},{"../crc32":370,"../signature":389,"../stream/GenericWorker":394,"../utf8":397,"../utils":398}],375:[function(require,module,exports){'use strict';var compressions=require('../compressions');var ZipFileWorker=require('./ZipFileWorker');/** |
|
|
* Find the compression to use. |
|
|
* @param {String} fileCompression the compression defined at the file level, if any. |
|
|
* @param {String} zipCompression the compression defined at the load() level. |
|
|
* @return {Object} the compression object to use. |
|
|
*/var getCompression=function getCompression(fileCompression,zipCompression){var compressionName=fileCompression||zipCompression;var compression=compressions[compressionName];if(!compression){throw new Error(compressionName+" is not a valid compression method !");}return compression;};/** |
|
|
* Create a worker to generate a zip file. |
|
|
* @param {JSZip} zip the JSZip instance at the right root level. |
|
|
* @param {Object} options to generate the zip file. |
|
|
* @param {String} comment the comment to use. |
|
|
*/exports.generateWorker=function(zip,options,comment){var zipFileWorker=new ZipFileWorker(options.streamFiles,comment,options.platform,options.encodeFileName);var entriesCount=0;try{zip.forEach(function(relativePath,file){entriesCount++;var compression=getCompression(file.options.compression,options.compression);var compressionOptions=file.options.compressionOptions||options.compressionOptions||{};var dir=file.dir,date=file.date;file._compressWorker(compression,compressionOptions).withStreamInfo("file",{name:relativePath,dir:dir,date:date,comment:file.comment||"",unixPermissions:file.unixPermissions,dosPermissions:file.dosPermissions}).pipe(zipFileWorker);});zipFileWorker.entriesCount=entriesCount;}catch(e){zipFileWorker.error(e);}return zipFileWorker;};},{"../compressions":369,"./ZipFileWorker":374}],376:[function(require,module,exports){'use strict';/** |
|
|
* Representation a of zip file in js |
|
|
* @constructor |
|
|
*/function JSZip(){// if this constructor is used without `new`, it adds `new` before itself: |
|
|
if(!(this instanceof JSZip)){return new JSZip();}if(arguments.length){throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");}// object containing the files : |
|
|
// { |
|
|
// "folder/" : {...}, |
|
|
// "folder/data.txt" : {...} |
|
|
// } |
|
|
this.files={};this.comment=null;// Where we are in the hierarchy |
|
|
this.root="";this.clone=function(){var newObj=new JSZip();for(var i in this){if(typeof this[i]!=="function"){newObj[i]=this[i];}}return newObj;};}JSZip.prototype=require('./object');JSZip.prototype.loadAsync=require('./load');JSZip.support=require('./support');JSZip.defaults=require('./defaults');// TODO find a better way to handle this version, |
|
|
// a require('package.json').version doesn't work with webpack, see #327 |
|
|
JSZip.version="3.4.0";JSZip.loadAsync=function(content,options){return new JSZip().loadAsync(content,options);};JSZip.external=require("./external");module.exports=JSZip;},{"./defaults":371,"./external":372,"./load":377,"./object":381,"./support":396}],377:[function(require,module,exports){'use strict';var utils=require('./utils');var external=require("./external");var utf8=require('./utf8');var utils=require('./utils');var ZipEntries=require('./zipEntries');var Crc32Probe=require('./stream/Crc32Probe');var nodejsUtils=require("./nodejsUtils");/** |
|
|
* Check the CRC32 of an entry. |
|
|
* @param {ZipEntry} zipEntry the zip entry to check. |
|
|
* @return {Promise} the result. |
|
|
*/function checkEntryCRC32(zipEntry){return new external.Promise(function(resolve,reject){var worker=zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe());worker.on("error",function(e){reject(e);}).on("end",function(){if(worker.streamInfo.crc32!==zipEntry.decompressed.crc32){reject(new Error("Corrupted zip : CRC32 mismatch"));}else{resolve();}}).resume();});}module.exports=function(data,options){var zip=this;options=utils.extend(options||{},{base64:false,checkCRC32:false,optimizedBinaryString:false,createFolders:false,decodeFileName:utf8.utf8decode});if(nodejsUtils.isNode&&nodejsUtils.isStream(data)){return external.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file."));}return utils.prepareContent("the loaded zip file",data,true,options.optimizedBinaryString,options.base64).then(function(data){var zipEntries=new ZipEntries(options);zipEntries.load(data);return zipEntries;}).then(function checkCRC32(zipEntries){var promises=[external.Promise.resolve(zipEntries)];var files=zipEntries.files;if(options.checkCRC32){for(var i=0;i<files.length;i++){promises.push(checkEntryCRC32(files[i]));}}return external.Promise.all(promises);}).then(function addFiles(results){var zipEntries=results.shift();var files=zipEntries.files;for(var i=0;i<files.length;i++){var input=files[i];zip.file(input.fileNameStr,input.decompressed,{binary:true,optimizedBinaryString:true,date:input.date,dir:input.dir,comment:input.fileCommentStr.length?input.fileCommentStr:null,unixPermissions:input.unixPermissions,dosPermissions:input.dosPermissions,createFolders:options.createFolders});}if(zipEntries.zipComment.length){zip.comment=zipEntries.zipComment;}return zip;});};},{"./external":372,"./nodejsUtils":380,"./stream/Crc32Probe":391,"./utf8":397,"./utils":398,"./zipEntries":399}],378:[function(require,module,exports){"use strict";var utils=require('../utils');var GenericWorker=require('../stream/GenericWorker');/** |
|
|
* A worker that use a nodejs stream as source. |
|
|
* @constructor |
|
|
* @param {String} filename the name of the file entry for this stream. |
|
|
* @param {Readable} stream the nodejs stream. |
|
|
*/function NodejsStreamInputAdapter(filename,stream){GenericWorker.call(this,"Nodejs stream input adapter for "+filename);this._upstreamEnded=false;this._bindStream(stream);}utils.inherits(NodejsStreamInputAdapter,GenericWorker);/** |
|
|
* Prepare the stream and bind the callbacks on it. |
|
|
* Do this ASAP on node 0.10 ! A lazy binding doesn't always work. |
|
|
* @param {Stream} stream the nodejs stream to use. |
|
|
*/NodejsStreamInputAdapter.prototype._bindStream=function(stream){var self=this;this._stream=stream;stream.pause();stream.on("data",function(chunk){self.push({data:chunk,meta:{percent:0}});}).on("error",function(e){if(self.isPaused){this.generatedError=e;}else{self.error(e);}}).on("end",function(){if(self.isPaused){self._upstreamEnded=true;}else{self.end();}});};NodejsStreamInputAdapter.prototype.pause=function(){if(!GenericWorker.prototype.pause.call(this)){return false;}this._stream.pause();return true;};NodejsStreamInputAdapter.prototype.resume=function(){if(!GenericWorker.prototype.resume.call(this)){return false;}if(this._upstreamEnded){this.end();}else{this._stream.resume();}return true;};module.exports=NodejsStreamInputAdapter;},{"../stream/GenericWorker":394,"../utils":398}],379:[function(require,module,exports){'use strict';var Readable=require('readable-stream').Readable;var utils=require('../utils');utils.inherits(NodejsStreamOutputAdapter,Readable);/** |
|
|
* A nodejs stream using a worker as source. |
|
|
* @see the SourceWrapper in http://nodejs.org/api/stream.html |
|
|
* @constructor |
|
|
* @param {StreamHelper} helper the helper wrapping the worker |
|
|
* @param {Object} options the nodejs stream options |
|
|
* @param {Function} updateCb the update callback. |
|
|
*/function NodejsStreamOutputAdapter(helper,options,updateCb){Readable.call(this,options);this._helper=helper;var self=this;helper.on("data",function(data,meta){if(!self.push(data)){self._helper.pause();}if(updateCb){updateCb(meta);}}).on("error",function(e){self.emit('error',e);}).on("end",function(){self.push(null);});}NodejsStreamOutputAdapter.prototype._read=function(){this._helper.resume();};module.exports=NodejsStreamOutputAdapter;},{"../utils":398,"readable-stream":382}],380:[function(require,module,exports){(function(Buffer){'use strict';module.exports={/** |
|
|
* True if this is running in Nodejs, will be undefined in a browser. |
|
|
* In a browser, browserify won't include this file and the whole module |
|
|
* will be resolved an empty object. |
|
|
*/isNode:typeof Buffer!=="undefined",/** |
|
|
* Create a new nodejs Buffer from an existing content. |
|
|
* @param {Object} data the data to pass to the constructor. |
|
|
* @param {String} encoding the encoding to use. |
|
|
* @return {Buffer} a new Buffer. |
|
|
*/newBufferFrom:function newBufferFrom(data,encoding){if(Buffer.from&&Buffer.from!==Uint8Array.from){return Buffer.from(data,encoding);}else{if(typeof data==="number"){// Safeguard for old Node.js versions. On newer versions, |
|
|
// Buffer.from(number) / Buffer(number, encoding) already throw. |
|
|
throw new Error("The \"data\" argument must not be a number");}return new Buffer(data,encoding);}},/** |
|
|
* Create a new nodejs Buffer with the specified size. |
|
|
* @param {Integer} size the size of the buffer. |
|
|
* @return {Buffer} a new Buffer. |
|
|
*/allocBuffer:function allocBuffer(size){if(Buffer.alloc){return Buffer.alloc(size);}else{var buf=new Buffer(size);buf.fill(0);return buf;}},/** |
|
|
* Find out if an object is a Buffer. |
|
|
* @param {Object} b the object to test. |
|
|
* @return {Boolean} true if the object is a Buffer, false otherwise. |
|
|
*/isBuffer:function isBuffer(b){return Buffer.isBuffer(b);},isStream:function isStream(obj){return obj&&typeof obj.on==="function"&&typeof obj.pause==="function"&&typeof obj.resume==="function";}};}).call(this,require("buffer").Buffer);},{"buffer":214}],381:[function(require,module,exports){'use strict';var utf8=require('./utf8');var utils=require('./utils');var GenericWorker=require('./stream/GenericWorker');var StreamHelper=require('./stream/StreamHelper');var defaults=require('./defaults');var CompressedObject=require('./compressedObject');var ZipObject=require('./zipObject');var generate=require("./generate");var nodejsUtils=require("./nodejsUtils");var NodejsStreamInputAdapter=require("./nodejs/NodejsStreamInputAdapter");/** |
|
|
* Add a file in the current folder. |
|
|
* @private |
|
|
* @param {string} name the name of the file |
|
|
* @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file |
|
|
* @param {Object} originalOptions the options of the file |
|
|
* @return {Object} the new file. |
|
|
*/var fileAdd=function fileAdd(name,data,originalOptions){// be sure sub folders exist |
|
|
var dataType=utils.getTypeOf(data),parent;/* |
|
|
* Correct options. |
|
|
*/var o=utils.extend(originalOptions||{},defaults);o.date=o.date||new Date();if(o.compression!==null){o.compression=o.compression.toUpperCase();}if(typeof o.unixPermissions==="string"){o.unixPermissions=parseInt(o.unixPermissions,8);}// UNX_IFDIR 0040000 see zipinfo.c |
|
|
if(o.unixPermissions&&o.unixPermissions&0x4000){o.dir=true;}// Bit 4 Directory |
|
|
if(o.dosPermissions&&o.dosPermissions&0x0010){o.dir=true;}if(o.dir){name=forceTrailingSlash(name);}if(o.createFolders&&(parent=parentFolder(name))){folderAdd.call(this,parent,true);}var isUnicodeString=dataType==="string"&&o.binary===false&&o.base64===false;if(!originalOptions||typeof originalOptions.binary==="undefined"){o.binary=!isUnicodeString;}var isCompressedEmpty=data instanceof CompressedObject&&data.uncompressedSize===0;if(isCompressedEmpty||o.dir||!data||data.length===0){o.base64=false;o.binary=true;data="";o.compression="STORE";dataType="string";}/* |
|
|
* Convert content to fit. |
|
|
*/var zipObjectContent=null;if(data instanceof CompressedObject||data instanceof GenericWorker){zipObjectContent=data;}else if(nodejsUtils.isNode&&nodejsUtils.isStream(data)){zipObjectContent=new NodejsStreamInputAdapter(name,data);}else{zipObjectContent=utils.prepareContent(name,data,o.binary,o.optimizedBinaryString,o.base64);}var object=new ZipObject(name,zipObjectContent,o);this.files[name]=object;/* |
|
|
TODO: we can't throw an exception because we have async promises |
|
|
(we can have a promise of a Date() for example) but returning a |
|
|
promise is useless because file(name, data) returns the JSZip |
|
|
object for chaining. Should we break that to allow the user |
|
|
to catch the error ? |
|
|
|
|
|
return external.Promise.resolve(zipObjectContent) |
|
|
.then(function () { |
|
|
return object; |
|
|
}); |
|
|
*/};/** |
|
|
* Find the parent folder of the path. |
|
|
* @private |
|
|
* @param {string} path the path to use |
|
|
* @return {string} the parent folder, or "" |
|
|
*/var parentFolder=function parentFolder(path){if(path.slice(-1)==='/'){path=path.substring(0,path.length-1);}var lastSlash=path.lastIndexOf('/');return lastSlash>0?path.substring(0,lastSlash):"";};/** |
|
|
* Returns the path with a slash at the end. |
|
|
* @private |
|
|
* @param {String} path the path to check. |
|
|
* @return {String} the path with a trailing slash. |
|
|
*/var forceTrailingSlash=function forceTrailingSlash(path){// Check the name ends with a / |
|
|
if(path.slice(-1)!=="/"){path+="/";// IE doesn't like substr(-1) |
|
|
}return path;};/** |
|
|
* Add a (sub) folder in the current folder. |
|
|
* @private |
|
|
* @param {string} name the folder's name |
|
|
* @param {boolean=} [createFolders] If true, automatically create sub |
|
|
* folders. Defaults to false. |
|
|
* @return {Object} the new folder. |
|
|
*/var folderAdd=function folderAdd(name,createFolders){createFolders=typeof createFolders!=='undefined'?createFolders:defaults.createFolders;name=forceTrailingSlash(name);// Does this folder already exist? |
|
|
if(!this.files[name]){fileAdd.call(this,name,null,{dir:true,createFolders:createFolders});}return this.files[name];};/** |
|
|
* Cross-window, cross-Node-context regular expression detection |
|
|
* @param {Object} object Anything |
|
|
* @return {Boolean} true if the object is a regular expression, |
|
|
* false otherwise |
|
|
*/function isRegExp(object){return Object.prototype.toString.call(object)==="[object RegExp]";}// return the actual prototype of JSZip |
|
|
var out={/** |
|
|
* @see loadAsync |
|
|
*/load:function load(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.");},/** |
|
|
* Call a callback function for each entry at this folder level. |
|
|
* @param {Function} cb the callback function: |
|
|
* function (relativePath, file) {...} |
|
|
* It takes 2 arguments : the relative path and the file. |
|
|
*/forEach:function forEach(cb){var filename,relativePath,file;for(filename in this.files){if(!this.files.hasOwnProperty(filename)){continue;}file=this.files[filename];relativePath=filename.slice(this.root.length,filename.length);if(relativePath&&filename.slice(0,this.root.length)===this.root){// the file is in the current root |
|
|
cb(relativePath,file);// TODO reverse the parameters ? need to be clean AND consistent with the filter search fn... |
|
|
}}},/** |
|
|
* Filter nested files/folders with the specified function. |
|
|
* @param {Function} search the predicate to use : |
|
|
* function (relativePath, file) {...} |
|
|
* It takes 2 arguments : the relative path and the file. |
|
|
* @return {Array} An array of matching elements. |
|
|
*/filter:function filter(search){var result=[];this.forEach(function(relativePath,entry){if(search(relativePath,entry)){// the file matches the function |
|
|
result.push(entry);}});return result;},/** |
|
|
* Add a file to the zip file, or search a file. |
|
|
* @param {string|RegExp} name The name of the file to add (if data is defined), |
|
|
* the name of the file to find (if no data) or a regex to match files. |
|
|
* @param {String|ArrayBuffer|Uint8Array|Buffer} data The file data, either raw or base64 encoded |
|
|
* @param {Object} o File options |
|
|
* @return {JSZip|Object|Array} this JSZip object (when adding a file), |
|
|
* a file (when searching by string) or an array of files (when searching by regex). |
|
|
*/file:function file(name,data,o){if(arguments.length===1){if(isRegExp(name)){var regexp=name;return this.filter(function(relativePath,file){return!file.dir&®exp.test(relativePath);});}else{// text |
|
|
var obj=this.files[this.root+name];if(obj&&!obj.dir){return obj;}else{return null;}}}else{// more than one argument : we have data ! |
|
|
name=this.root+name;fileAdd.call(this,name,data,o);}return this;},/** |
|
|
* Add a directory to the zip file, or search. |
|
|
* @param {String|RegExp} arg The name of the directory to add, or a regex to search folders. |
|
|
* @return {JSZip} an object with the new directory as the root, or an array containing matching folders. |
|
|
*/folder:function folder(arg){if(!arg){return this;}if(isRegExp(arg)){return this.filter(function(relativePath,file){return file.dir&&arg.test(relativePath);});}// else, name is a new folder |
|
|
var name=this.root+arg;var newFolder=folderAdd.call(this,name);// Allow chaining by returning a new object with this folder as the root |
|
|
var ret=this.clone();ret.root=newFolder.name;return ret;},/** |
|
|
* Delete a file, or a directory and all sub-files, from the zip |
|
|
* @param {string} name the name of the file to delete |
|
|
* @return {JSZip} this JSZip object |
|
|
*/remove:function remove(name){name=this.root+name;var file=this.files[name];if(!file){// Look for any folders |
|
|
if(name.slice(-1)!=="/"){name+="/";}file=this.files[name];}if(file&&!file.dir){// file |
|
|
delete this.files[name];}else{// maybe a folder, delete recursively |
|
|
var kids=this.filter(function(relativePath,file){return file.name.slice(0,name.length)===name;});for(var i=0;i<kids.length;i++){delete this.files[kids[i].name];}}return this;},/** |
|
|
* Generate the complete zip file |
|
|
* @param {Object} options the options to generate the zip file : |
|
|
* - compression, "STORE" by default. |
|
|
* - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. |
|
|
* @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file |
|
|
*/generate:function generate(options){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.");},/** |
|
|
* Generate the complete zip file as an internal stream. |
|
|
* @param {Object} options the options to generate the zip file : |
|
|
* - compression, "STORE" by default. |
|
|
* - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. |
|
|
* @return {StreamHelper} the streamed zip file. |
|
|
*/generateInternalStream:function generateInternalStream(options){var worker,opts={};try{opts=utils.extend(options||{},{streamFiles:false,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:'application/zip',encodeFileName:utf8.utf8encode});opts.type=opts.type.toLowerCase();opts.compression=opts.compression.toUpperCase();// "binarystring" is preferred but the internals use "string". |
|
|
if(opts.type==="binarystring"){opts.type="string";}if(!opts.type){throw new Error("No output type specified.");}utils.checkSupport(opts.type);// accept nodejs `process.platform` |
|
|
if(opts.platform==='darwin'||opts.platform==='freebsd'||opts.platform==='linux'||opts.platform==='sunos'){opts.platform="UNIX";}if(opts.platform==='win32'){opts.platform="DOS";}var comment=opts.comment||this.comment||"";worker=generate.generateWorker(this,opts,comment);}catch(e){worker=new GenericWorker("error");worker.error(e);}return new StreamHelper(worker,opts.type||"string",opts.mimeType);},/** |
|
|
* Generate the complete zip file asynchronously. |
|
|
* @see generateInternalStream |
|
|
*/generateAsync:function generateAsync(options,onUpdate){return this.generateInternalStream(options).accumulate(onUpdate);},/** |
|
|
* Generate the complete zip file asynchronously. |
|
|
* @see generateInternalStream |
|
|
*/generateNodeStream:function generateNodeStream(options,onUpdate){options=options||{};if(!options.type){options.type="nodebuffer";}return this.generateInternalStream(options).toNodejsStream(onUpdate);}};module.exports=out;},{"./compressedObject":368,"./defaults":371,"./generate":375,"./nodejs/NodejsStreamInputAdapter":378,"./nodejsUtils":380,"./stream/GenericWorker":394,"./stream/StreamHelper":395,"./utf8":397,"./utils":398,"./zipObject":401}],382:[function(require,module,exports){/* |
|
|
* This file is used by module bundlers (browserify/webpack/etc) when |
|
|
* including a stream implementation. We use "readable-stream" to get a |
|
|
* consistent behavior between nodejs versions but bundlers often have a shim |
|
|
* for "stream". Using this shim greatly improve the compatibility and greatly |
|
|
* reduce the final size of the bundle (only one stream implementation, not |
|
|
* two). |
|
|
*/module.exports=require("stream");},{"stream":481}],383:[function(require,module,exports){'use strict';var DataReader=require('./DataReader');var utils=require('../utils');function ArrayReader(data){DataReader.call(this,data);for(var i=0;i<this.data.length;i++){data[i]=data[i]&0xFF;}}utils.inherits(ArrayReader,DataReader);/** |
|
|
* @see DataReader.byteAt |
|
|
*/ArrayReader.prototype.byteAt=function(i){return this.data[this.zero+i];};/** |
|
|
* @see DataReader.lastIndexOfSignature |
|
|
*/ArrayReader.prototype.lastIndexOfSignature=function(sig){var sig0=sig.charCodeAt(0),sig1=sig.charCodeAt(1),sig2=sig.charCodeAt(2),sig3=sig.charCodeAt(3);for(var i=this.length-4;i>=0;--i){if(this.data[i]===sig0&&this.data[i+1]===sig1&&this.data[i+2]===sig2&&this.data[i+3]===sig3){return i-this.zero;}}return-1;};/** |
|
|
* @see DataReader.readAndCheckSignature |
|
|
*/ArrayReader.prototype.readAndCheckSignature=function(sig){var sig0=sig.charCodeAt(0),sig1=sig.charCodeAt(1),sig2=sig.charCodeAt(2),sig3=sig.charCodeAt(3),data=this.readData(4);return sig0===data[0]&&sig1===data[1]&&sig2===data[2]&&sig3===data[3];};/** |
|
|
* @see DataReader.readData |
|
|
*/ArrayReader.prototype.readData=function(size){this.checkOffset(size);if(size===0){return[];}var result=this.data.slice(this.zero+this.index,this.zero+this.index+size);this.index+=size;return result;};module.exports=ArrayReader;},{"../utils":398,"./DataReader":384}],384:[function(require,module,exports){'use strict';var utils=require('../utils');function DataReader(data){this.data=data;// type : see implementation |
|
|
this.length=data.length;this.index=0;this.zero=0;}DataReader.prototype={/** |
|
|
* Check that the offset will not go too far. |
|
|
* @param {string} offset the additional offset to check. |
|
|
* @throws {Error} an Error if the offset is out of bounds. |
|
|
*/checkOffset:function checkOffset(offset){this.checkIndex(this.index+offset);},/** |
|
|
* Check that the specified index will not be too far. |
|
|
* @param {string} newIndex the index to check. |
|
|
* @throws {Error} an Error if the index is out of bounds. |
|
|
*/checkIndex:function checkIndex(newIndex){if(this.length<this.zero+newIndex||newIndex<0){throw new Error("End of data reached (data length = "+this.length+", asked index = "+newIndex+"). Corrupted zip ?");}},/** |
|
|
* Change the index. |
|
|
* @param {number} newIndex The new index. |
|
|
* @throws {Error} if the new index is out of the data. |
|
|
*/setIndex:function setIndex(newIndex){this.checkIndex(newIndex);this.index=newIndex;},/** |
|
|
* Skip the next n bytes. |
|
|
* @param {number} n the number of bytes to skip. |
|
|
* @throws {Error} if the new index is out of the data. |
|
|
*/skip:function skip(n){this.setIndex(this.index+n);},/** |
|
|
* Get the byte at the specified index. |
|
|
* @param {number} i the index to use. |
|
|
* @return {number} a byte. |
|
|
*/byteAt:function byteAt(i){// see implementations |
|
|
},/** |
|
|
* Get the next number with a given byte size. |
|
|
* @param {number} size the number of bytes to read. |
|
|
* @return {number} the corresponding number. |
|
|
*/readInt:function readInt(size){var result=0,i;this.checkOffset(size);for(i=this.index+size-1;i>=this.index;i--){result=(result<<8)+this.byteAt(i);}this.index+=size;return result;},/** |
|
|
* Get the next string with a given byte size. |
|
|
* @param {number} size the number of bytes to read. |
|
|
* @return {string} the corresponding string. |
|
|
*/readString:function readString(size){return utils.transformTo("string",this.readData(size));},/** |
|
|
* Get raw data without conversion, <size> bytes. |
|
|
* @param {number} size the number of bytes to read. |
|
|
* @return {Object} the raw data, implementation specific. |
|
|
*/readData:function readData(size){// see implementations |
|
|
},/** |
|
|
* Find the last occurrence of a zip signature (4 bytes). |
|
|
* @param {string} sig the signature to find. |
|
|
* @return {number} the index of the last occurrence, -1 if not found. |
|
|
*/lastIndexOfSignature:function lastIndexOfSignature(sig){// see implementations |
|
|
},/** |
|
|
* Read the signature (4 bytes) at the current position and compare it with sig. |
|
|
* @param {string} sig the expected signature |
|
|
* @return {boolean} true if the signature matches, false otherwise. |
|
|
*/readAndCheckSignature:function readAndCheckSignature(sig){// see implementations |
|
|
},/** |
|
|
* Get the next date. |
|
|
* @return {Date} the date. |
|
|
*/readDate:function readDate(){var dostime=this.readInt(4);return new Date(Date.UTC((dostime>>25&0x7f)+1980,// year |
|
|
(dostime>>21&0x0f)-1,// month |
|
|
dostime>>16&0x1f,// day |
|
|
dostime>>11&0x1f,// hour |
|
|
dostime>>5&0x3f,// minute |
|
|
(dostime&0x1f)<<1));// second |
|
|
}};module.exports=DataReader;},{"../utils":398}],385:[function(require,module,exports){'use strict';var Uint8ArrayReader=require('./Uint8ArrayReader');var utils=require('../utils');function NodeBufferReader(data){Uint8ArrayReader.call(this,data);}utils.inherits(NodeBufferReader,Uint8ArrayReader);/** |
|
|
* @see DataReader.readData |
|
|
*/NodeBufferReader.prototype.readData=function(size){this.checkOffset(size);var result=this.data.slice(this.zero+this.index,this.zero+this.index+size);this.index+=size;return result;};module.exports=NodeBufferReader;},{"../utils":398,"./Uint8ArrayReader":387}],386:[function(require,module,exports){'use strict';var DataReader=require('./DataReader');var utils=require('../utils');function StringReader(data){DataReader.call(this,data);}utils.inherits(StringReader,DataReader);/** |
|
|
* @see DataReader.byteAt |
|
|
*/StringReader.prototype.byteAt=function(i){return this.data.charCodeAt(this.zero+i);};/** |
|
|
* @see DataReader.lastIndexOfSignature |
|
|
*/StringReader.prototype.lastIndexOfSignature=function(sig){return this.data.lastIndexOf(sig)-this.zero;};/** |
|
|
* @see DataReader.readAndCheckSignature |
|
|
*/StringReader.prototype.readAndCheckSignature=function(sig){var data=this.readData(4);return sig===data;};/** |
|
|
* @see DataReader.readData |
|
|
*/StringReader.prototype.readData=function(size){this.checkOffset(size);// this will work because the constructor applied the "& 0xff" mask. |
|
|
var result=this.data.slice(this.zero+this.index,this.zero+this.index+size);this.index+=size;return result;};module.exports=StringReader;},{"../utils":398,"./DataReader":384}],387:[function(require,module,exports){'use strict';var ArrayReader=require('./ArrayReader');var utils=require('../utils');function Uint8ArrayReader(data){ArrayReader.call(this,data);}utils.inherits(Uint8ArrayReader,ArrayReader);/** |
|
|
* @see DataReader.readData |
|
|
*/Uint8ArrayReader.prototype.readData=function(size){this.checkOffset(size);if(size===0){// in IE10, when using subarray(idx, idx), we get the array [0x00] instead of []. |
|
|
return new Uint8Array(0);}var result=this.data.subarray(this.zero+this.index,this.zero+this.index+size);this.index+=size;return result;};module.exports=Uint8ArrayReader;},{"../utils":398,"./ArrayReader":383}],388:[function(require,module,exports){'use strict';var utils=require('../utils');var support=require('../support');var ArrayReader=require('./ArrayReader');var StringReader=require('./StringReader');var NodeBufferReader=require('./NodeBufferReader');var Uint8ArrayReader=require('./Uint8ArrayReader');/** |
|
|
* Create a reader adapted to the data. |
|
|
* @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read. |
|
|
* @return {DataReader} the data reader. |
|
|
*/module.exports=function(data){var type=utils.getTypeOf(data);utils.checkSupport(type);if(type==="string"&&!support.uint8array){return new StringReader(data);}if(type==="nodebuffer"){return new NodeBufferReader(data);}if(support.uint8array){return new Uint8ArrayReader(utils.transformTo("uint8array",data));}return new ArrayReader(utils.transformTo("array",data));};},{"../support":396,"../utils":398,"./ArrayReader":383,"./NodeBufferReader":385,"./StringReader":386,"./Uint8ArrayReader":387}],389:[function(require,module,exports){'use strict';exports.LOCAL_FILE_HEADER="PK\x03\x04";exports.CENTRAL_FILE_HEADER="PK\x01\x02";exports.CENTRAL_DIRECTORY_END="PK\x05\x06";exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x06\x07";exports.ZIP64_CENTRAL_DIRECTORY_END="PK\x06\x06";exports.DATA_DESCRIPTOR="PK\x07\x08";},{}],390:[function(require,module,exports){'use strict';var GenericWorker=require('./GenericWorker');var utils=require('../utils');/** |
|
|
* A worker which convert chunks to a specified type. |
|
|
* @constructor |
|
|
* @param {String} destType the destination type. |
|
|
*/function ConvertWorker(destType){GenericWorker.call(this,"ConvertWorker to "+destType);this.destType=destType;}utils.inherits(ConvertWorker,GenericWorker);/** |
|
|
* @see GenericWorker.processChunk |
|
|
*/ConvertWorker.prototype.processChunk=function(chunk){this.push({data:utils.transformTo(this.destType,chunk.data),meta:chunk.meta});};module.exports=ConvertWorker;},{"../utils":398,"./GenericWorker":394}],391:[function(require,module,exports){'use strict';var GenericWorker=require('./GenericWorker');var crc32=require('../crc32');var utils=require('../utils');/** |
|
|
* A worker which calculate the crc32 of the data flowing through. |
|
|
* @constructor |
|
|
*/function Crc32Probe(){GenericWorker.call(this,"Crc32Probe");this.withStreamInfo("crc32",0);}utils.inherits(Crc32Probe,GenericWorker);/** |
|
|
* @see GenericWorker.processChunk |
|
|
*/Crc32Probe.prototype.processChunk=function(chunk){this.streamInfo.crc32=crc32(chunk.data,this.streamInfo.crc32||0);this.push(chunk);};module.exports=Crc32Probe;},{"../crc32":370,"../utils":398,"./GenericWorker":394}],392:[function(require,module,exports){'use strict';var utils=require('../utils');var GenericWorker=require('./GenericWorker');/** |
|
|
* A worker which calculate the total length of the data flowing through. |
|
|
* @constructor |
|
|
* @param {String} propName the name used to expose the length |
|
|
*/function DataLengthProbe(propName){GenericWorker.call(this,"DataLengthProbe for "+propName);this.propName=propName;this.withStreamInfo(propName,0);}utils.inherits(DataLengthProbe,GenericWorker);/** |
|
|
* @see GenericWorker.processChunk |
|
|
*/DataLengthProbe.prototype.processChunk=function(chunk){if(chunk){var length=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=length+chunk.data.length;}GenericWorker.prototype.processChunk.call(this,chunk);};module.exports=DataLengthProbe;},{"../utils":398,"./GenericWorker":394}],393:[function(require,module,exports){'use strict';var utils=require('../utils');var GenericWorker=require('./GenericWorker');// the size of the generated chunks |
|
|
// TODO expose this as a public variable |
|
|
var DEFAULT_BLOCK_SIZE=16*1024;/** |
|
|
* A worker that reads a content and emits chunks. |
|
|
* @constructor |
|
|
* @param {Promise} dataP the promise of the data to split |
|
|
*/function DataWorker(dataP){GenericWorker.call(this,"DataWorker");var self=this;this.dataIsReady=false;this.index=0;this.max=0;this.data=null;this.type="";this._tickScheduled=false;dataP.then(function(data){self.dataIsReady=true;self.data=data;self.max=data&&data.length||0;self.type=utils.getTypeOf(data);if(!self.isPaused){self._tickAndRepeat();}},function(e){self.error(e);});}utils.inherits(DataWorker,GenericWorker);/** |
|
|
* @see GenericWorker.cleanUp |
|
|
*/DataWorker.prototype.cleanUp=function(){GenericWorker.prototype.cleanUp.call(this);this.data=null;};/** |
|
|
* @see GenericWorker.resume |
|
|
*/DataWorker.prototype.resume=function(){if(!GenericWorker.prototype.resume.call(this)){return false;}if(!this._tickScheduled&&this.dataIsReady){this._tickScheduled=true;utils.delay(this._tickAndRepeat,[],this);}return true;};/** |
|
|
* Trigger a tick a schedule an other call to this function. |
|
|
*/DataWorker.prototype._tickAndRepeat=function(){this._tickScheduled=false;if(this.isPaused||this.isFinished){return;}this._tick();if(!this.isFinished){utils.delay(this._tickAndRepeat,[],this);this._tickScheduled=true;}};/** |
|
|
* Read and push a chunk. |
|
|
*/DataWorker.prototype._tick=function(){if(this.isPaused||this.isFinished){return false;}var size=DEFAULT_BLOCK_SIZE;var data=null,nextIndex=Math.min(this.max,this.index+size);if(this.index>=this.max){// EOF |
|
|
return this.end();}else{switch(this.type){case"string":data=this.data.substring(this.index,nextIndex);break;case"uint8array":data=this.data.subarray(this.index,nextIndex);break;case"array":case"nodebuffer":data=this.data.slice(this.index,nextIndex);break;}this.index=nextIndex;return this.push({data:data,meta:{percent:this.max?this.index/this.max*100:0}});}};module.exports=DataWorker;},{"../utils":398,"./GenericWorker":394}],394:[function(require,module,exports){'use strict';/** |
|
|
* A worker that does nothing but passing chunks to the next one. This is like |
|
|
* a nodejs stream but with some differences. On the good side : |
|
|
* - it works on IE 6-9 without any issue / polyfill |
|
|
* - it weights less than the full dependencies bundled with browserify |
|
|
* - it forwards errors (no need to declare an error handler EVERYWHERE) |
|
|
* |
|
|
* A chunk is an object with 2 attributes : `meta` and `data`. The former is an |
|
|
* object containing anything (`percent` for example), see each worker for more |
|
|
* details. The latter is the real data (String, Uint8Array, etc). |
|
|
* |
|
|
* @constructor |
|
|
* @param {String} name the name of the stream (mainly used for debugging purposes) |
|
|
*/function GenericWorker(name){// the name of the worker |
|
|
this.name=name||"default";// an object containing metadata about the workers chain |
|
|
this.streamInfo={};// an error which happened when the worker was paused |
|
|
this.generatedError=null;// an object containing metadata to be merged by this worker into the general metadata |
|
|
this.extraStreamInfo={};// true if the stream is paused (and should not do anything), false otherwise |
|
|
this.isPaused=true;// true if the stream is finished (and should not do anything), false otherwise |
|
|
this.isFinished=false;// true if the stream is locked to prevent further structure updates (pipe), false otherwise |
|
|
this.isLocked=false;// the event listeners |
|
|
this._listeners={'data':[],'end':[],'error':[]};// the previous worker, if any |
|
|
this.previous=null;}GenericWorker.prototype={/** |
|
|
* Push a chunk to the next workers. |
|
|
* @param {Object} chunk the chunk to push |
|
|
*/push:function push(chunk){this.emit("data",chunk);},/** |
|
|
* End the stream. |
|
|
* @return {Boolean} true if this call ended the worker, false otherwise. |
|
|
*/end:function end(){if(this.isFinished){return false;}this.flush();try{this.emit("end");this.cleanUp();this.isFinished=true;}catch(e){this.emit("error",e);}return true;},/** |
|
|
* End the stream with an error. |
|
|
* @param {Error} e the error which caused the premature end. |
|
|
* @return {Boolean} true if this call ended the worker with an error, false otherwise. |
|
|
*/error:function error(e){if(this.isFinished){return false;}if(this.isPaused){this.generatedError=e;}else{this.isFinished=true;this.emit("error",e);// in the workers chain exploded in the middle of the chain, |
|
|
// the error event will go downward but we also need to notify |
|
|
// workers upward that there has been an error. |
|
|
if(this.previous){this.previous.error(e);}this.cleanUp();}return true;},/** |
|
|
* Add a callback on an event. |
|
|
* @param {String} name the name of the event (data, end, error) |
|
|
* @param {Function} listener the function to call when the event is triggered |
|
|
* @return {GenericWorker} the current object for chainability |
|
|
*/on:function on(name,listener){this._listeners[name].push(listener);return this;},/** |
|
|
* Clean any references when a worker is ending. |
|
|
*/cleanUp:function cleanUp(){this.streamInfo=this.generatedError=this.extraStreamInfo=null;this._listeners=[];},/** |
|
|
* Trigger an event. This will call registered callback with the provided arg. |
|
|
* @param {String} name the name of the event (data, end, error) |
|
|
* @param {Object} arg the argument to call the callback with. |
|
|
*/emit:function emit(name,arg){if(this._listeners[name]){for(var i=0;i<this._listeners[name].length;i++){this._listeners[name][i].call(this,arg);}}},/** |
|
|
* Chain a worker with an other. |
|
|
* @param {Worker} next the worker receiving events from the current one. |
|
|
* @return {worker} the next worker for chainability |
|
|
*/pipe:function pipe(next){return next.registerPrevious(this);},/** |
|
|
* Same as `pipe` in the other direction. |
|
|
* Using an API with `pipe(next)` is very easy. |
|
|
* Implementing the API with the point of view of the next one registering |
|
|
* a source is easier, see the ZipFileWorker. |
|
|
* @param {Worker} previous the previous worker, sending events to this one |
|
|
* @return {Worker} the current worker for chainability |
|
|
*/registerPrevious:function registerPrevious(previous){if(this.isLocked){throw new Error("The stream '"+this+"' has already been used.");}// sharing the streamInfo... |
|
|
this.streamInfo=previous.streamInfo;// ... and adding our own bits |
|
|
this.mergeStreamInfo();this.previous=previous;var self=this;previous.on('data',function(chunk){self.processChunk(chunk);});previous.on('end',function(){self.end();});previous.on('error',function(e){self.error(e);});return this;},/** |
|
|
* Pause the stream so it doesn't send events anymore. |
|
|
* @return {Boolean} true if this call paused the worker, false otherwise. |
|
|
*/pause:function pause(){if(this.isPaused||this.isFinished){return false;}this.isPaused=true;if(this.previous){this.previous.pause();}return true;},/** |
|
|
* Resume a paused stream. |
|
|
* @return {Boolean} true if this call resumed the worker, false otherwise. |
|
|
*/resume:function resume(){if(!this.isPaused||this.isFinished){return false;}this.isPaused=false;// if true, the worker tried to resume but failed |
|
|
var withError=false;if(this.generatedError){this.error(this.generatedError);withError=true;}if(this.previous){this.previous.resume();}return!withError;},/** |
|
|
* Flush any remaining bytes as the stream is ending. |
|
|
*/flush:function flush(){},/** |
|
|
* Process a chunk. This is usually the method overridden. |
|
|
* @param {Object} chunk the chunk to process. |
|
|
*/processChunk:function processChunk(chunk){this.push(chunk);},/** |
|
|
* Add a key/value to be added in the workers chain streamInfo once activated. |
|
|
* @param {String} key the key to use |
|
|
* @param {Object} value the associated value |
|
|
* @return {Worker} the current worker for chainability |
|
|
*/withStreamInfo:function withStreamInfo(key,value){this.extraStreamInfo[key]=value;this.mergeStreamInfo();return this;},/** |
|
|
* Merge this worker's streamInfo into the chain's streamInfo. |
|
|
*/mergeStreamInfo:function mergeStreamInfo(){for(var key in this.extraStreamInfo){if(!this.extraStreamInfo.hasOwnProperty(key)){continue;}this.streamInfo[key]=this.extraStreamInfo[key];}},/** |
|
|
* Lock the stream to prevent further updates on the workers chain. |
|
|
* After calling this method, all calls to pipe will fail. |
|
|
*/lock:function lock(){if(this.isLocked){throw new Error("The stream '"+this+"' has already been used.");}this.isLocked=true;if(this.previous){this.previous.lock();}},/** |
|
|
* |
|
|
* Pretty print the workers chain. |
|
|
*/toString:function toString(){var me="Worker "+this.name;if(this.previous){return this.previous+" -> "+me;}else{return me;}}};module.exports=GenericWorker;},{}],395:[function(require,module,exports){(function(Buffer){'use strict';var utils=require('../utils');var ConvertWorker=require('./ConvertWorker');var GenericWorker=require('./GenericWorker');var base64=require('../base64');var support=require("../support");var external=require("../external");var NodejsStreamOutputAdapter=null;if(support.nodestream){try{NodejsStreamOutputAdapter=require('../nodejs/NodejsStreamOutputAdapter');}catch(e){}}/** |
|
|
* Apply the final transformation of the data. If the user wants a Blob for |
|
|
* example, it's easier to work with an U8intArray and finally do the |
|
|
* ArrayBuffer/Blob conversion. |
|
|
* @param {String} type the name of the final type |
|
|
* @param {String|Uint8Array|Buffer} content the content to transform |
|
|
* @param {String} mimeType the mime type of the content, if applicable. |
|
|
* @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format. |
|
|
*/function transformZipOutput(type,content,mimeType){switch(type){case"blob":return utils.newBlob(utils.transformTo("arraybuffer",content),mimeType);case"base64":return base64.encode(content);default:return utils.transformTo(type,content);}}/** |
|
|
* Concatenate an array of data of the given type. |
|
|
* @param {String} type the type of the data in the given array. |
|
|
* @param {Array} dataArray the array containing the data chunks to concatenate |
|
|
* @return {String|Uint8Array|Buffer} the concatenated data |
|
|
* @throws Error if the asked type is unsupported |
|
|
*/function concat(type,dataArray){var i,index=0,res=null,totalLength=0;for(i=0;i<dataArray.length;i++){totalLength+=dataArray[i].length;}switch(type){case"string":return dataArray.join("");case"array":return Array.prototype.concat.apply([],dataArray);case"uint8array":res=new Uint8Array(totalLength);for(i=0;i<dataArray.length;i++){res.set(dataArray[i],index);index+=dataArray[i].length;}return res;case"nodebuffer":return Buffer.concat(dataArray);default:throw new Error("concat : unsupported type '"+type+"'");}}/** |
|
|
* Listen a StreamHelper, accumulate its content and concatenate it into a |
|
|
* complete block. |
|
|
* @param {StreamHelper} helper the helper to use. |
|
|
* @param {Function} updateCallback a callback called on each update. Called |
|
|
* with one arg : |
|
|
* - the metadata linked to the update received. |
|
|
* @return Promise the promise for the accumulation. |
|
|
*/function _accumulate(helper,updateCallback){return new external.Promise(function(resolve,reject){var dataArray=[];var chunkType=helper._internalType,resultType=helper._outputType,mimeType=helper._mimeType;helper.on('data',function(data,meta){dataArray.push(data);if(updateCallback){updateCallback(meta);}}).on('error',function(err){dataArray=[];reject(err);}).on('end',function(){try{var result=transformZipOutput(resultType,concat(chunkType,dataArray),mimeType);resolve(result);}catch(e){reject(e);}dataArray=[];}).resume();});}/** |
|
|
* An helper to easily use workers outside of JSZip. |
|
|
* @constructor |
|
|
* @param {Worker} worker the worker to wrap |
|
|
* @param {String} outputType the type of data expected by the use |
|
|
* @param {String} mimeType the mime type of the content, if applicable. |
|
|
*/function StreamHelper(worker,outputType,mimeType){var internalType=outputType;switch(outputType){case"blob":case"arraybuffer":internalType="uint8array";break;case"base64":internalType="string";break;}try{// the type used internally |
|
|
this._internalType=internalType;// the type used to output results |
|
|
this._outputType=outputType;// the mime type |
|
|
this._mimeType=mimeType;utils.checkSupport(internalType);this._worker=worker.pipe(new ConvertWorker(internalType));// the last workers can be rewired without issues but we need to |
|
|
// prevent any updates on previous workers. |
|
|
worker.lock();}catch(e){this._worker=new GenericWorker("error");this._worker.error(e);}}StreamHelper.prototype={/** |
|
|
* Listen a StreamHelper, accumulate its content and concatenate it into a |
|
|
* complete block. |
|
|
* @param {Function} updateCb the update callback. |
|
|
* @return Promise the promise for the accumulation. |
|
|
*/accumulate:function accumulate(updateCb){return _accumulate(this,updateCb);},/** |
|
|
* Add a listener on an event triggered on a stream. |
|
|
* @param {String} evt the name of the event |
|
|
* @param {Function} fn the listener |
|
|
* @return {StreamHelper} the current helper. |
|
|
*/on:function on(evt,fn){var self=this;if(evt==="data"){this._worker.on(evt,function(chunk){fn.call(self,chunk.data,chunk.meta);});}else{this._worker.on(evt,function(){utils.delay(fn,arguments,self);});}return this;},/** |
|
|
* Resume the flow of chunks. |
|
|
* @return {StreamHelper} the current helper. |
|
|
*/resume:function resume(){utils.delay(this._worker.resume,[],this._worker);return this;},/** |
|
|
* Pause the flow of chunks. |
|
|
* @return {StreamHelper} the current helper. |
|
|
*/pause:function pause(){this._worker.pause();return this;},/** |
|
|
* Return a nodejs stream for this helper. |
|
|
* @param {Function} updateCb the update callback. |
|
|
* @return {NodejsStreamOutputAdapter} the nodejs stream. |
|
|
*/toNodejsStream:function toNodejsStream(updateCb){utils.checkSupport("nodestream");if(this._outputType!=="nodebuffer"){// an object stream containing blob/arraybuffer/uint8array/string |
|
|
// is strange and I don't know if it would be useful. |
|
|
// I you find this comment and have a good usecase, please open a |
|
|
// bug report ! |
|
|
throw new Error(this._outputType+" is not supported by this method");}return new NodejsStreamOutputAdapter(this,{objectMode:this._outputType!=="nodebuffer"},updateCb);}};module.exports=StreamHelper;}).call(this,require("buffer").Buffer);},{"../base64":367,"../external":372,"../nodejs/NodejsStreamOutputAdapter":379,"../support":396,"../utils":398,"./ConvertWorker":390,"./GenericWorker":394,"buffer":214}],396:[function(require,module,exports){(function(Buffer){'use strict';exports.base64=true;exports.array=true;exports.string=true;exports.arraybuffer=typeof ArrayBuffer!=="undefined"&&typeof Uint8Array!=="undefined";exports.nodebuffer=typeof Buffer!=="undefined";// contains true if JSZip can read/generate Uint8Array, false otherwise. |
|
|
exports.uint8array=typeof Uint8Array!=="undefined";if(typeof ArrayBuffer==="undefined"){exports.blob=false;}else{var buffer=new ArrayBuffer(0);try{exports.blob=new Blob([buffer],{type:"application/zip"}).size===0;}catch(e){try{var Builder=self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder;var builder=new Builder();builder.append(buffer);exports.blob=builder.getBlob('application/zip').size===0;}catch(e){exports.blob=false;}}}try{exports.nodestream=!!require('readable-stream').Readable;}catch(e){exports.nodestream=false;}}).call(this,require("buffer").Buffer);},{"buffer":214,"readable-stream":382}],397:[function(require,module,exports){'use strict';var utils=require('./utils');var support=require('./support');var nodejsUtils=require('./nodejsUtils');var GenericWorker=require('./stream/GenericWorker');/** |
|
|
* The following functions come from pako, from pako/lib/utils/strings |
|
|
* released under the MIT license, see pako https://github.com/nodeca/pako/ |
|
|
*/ // Table with utf8 lengths (calculated by first byte of sequence) |
|
|
// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, |
|
|
// because max possible codepoint is 0x10ffff |
|
|
var _utf8len=new Array(256);for(var i=0;i<256;i++){_utf8len[i]=i>=252?6:i>=248?5:i>=240?4:i>=224?3:i>=192?2:1;}_utf8len[254]=_utf8len[254]=1;// Invalid sequence start |
|
|
// convert string to array (typed, when possible) |
|
|
var string2buf=function string2buf(str){var buf,c,c2,m_pos,i,str_len=str.length,buf_len=0;// count binary size |
|
|
for(m_pos=0;m_pos<str_len;m_pos++){c=str.charCodeAt(m_pos);if((c&0xfc00)===0xd800&&m_pos+1<str_len){c2=str.charCodeAt(m_pos+1);if((c2&0xfc00)===0xdc00){c=0x10000+(c-0xd800<<10)+(c2-0xdc00);m_pos++;}}buf_len+=c<0x80?1:c<0x800?2:c<0x10000?3:4;}// allocate buffer |
|
|
if(support.uint8array){buf=new Uint8Array(buf_len);}else{buf=new Array(buf_len);}// convert |
|
|
for(i=0,m_pos=0;i<buf_len;m_pos++){c=str.charCodeAt(m_pos);if((c&0xfc00)===0xd800&&m_pos+1<str_len){c2=str.charCodeAt(m_pos+1);if((c2&0xfc00)===0xdc00){c=0x10000+(c-0xd800<<10)+(c2-0xdc00);m_pos++;}}if(c<0x80){/* one byte */buf[i++]=c;}else if(c<0x800){/* two bytes */buf[i++]=0xC0|c>>>6;buf[i++]=0x80|c&0x3f;}else if(c<0x10000){/* three bytes */buf[i++]=0xE0|c>>>12;buf[i++]=0x80|c>>>6&0x3f;buf[i++]=0x80|c&0x3f;}else{/* four bytes */buf[i++]=0xf0|c>>>18;buf[i++]=0x80|c>>>12&0x3f;buf[i++]=0x80|c>>>6&0x3f;buf[i++]=0x80|c&0x3f;}}return buf;};// Calculate max possible position in utf8 buffer, |
|
|
// that will not break sequence. If that's not possible |
|
|
// - (very small limits) return max size as is. |
|
|
// |
|
|
// buf[] - utf8 bytes array |
|
|
// max - length limit (mandatory); |
|
|
var utf8border=function utf8border(buf,max){var pos;max=max||buf.length;if(max>buf.length){max=buf.length;}// go back from last position, until start of sequence found |
|
|
pos=max-1;while(pos>=0&&(buf[pos]&0xC0)===0x80){pos--;}// Fuckup - very small and broken sequence, |
|
|
// return max, because we should return something anyway. |
|
|
if(pos<0){return max;}// If we came to start of buffer - that means vuffer is too small, |
|
|
// return max too. |
|
|
if(pos===0){return max;}return pos+_utf8len[buf[pos]]>max?pos:max;};// convert array to string |
|
|
var buf2string=function buf2string(buf){var str,i,out,c,c_len;var len=buf.length;// Reserve max possible length (2 words per char) |
|
|
// NB: by unknown reasons, Array is significantly faster for |
|
|
// String.fromCharCode.apply than Uint16Array. |
|
|
var utf16buf=new Array(len*2);for(out=0,i=0;i<len;){c=buf[i++];// quick process ascii |
|
|
if(c<0x80){utf16buf[out++]=c;continue;}c_len=_utf8len[c];// skip 5 & 6 byte codes |
|
|
if(c_len>4){utf16buf[out++]=0xfffd;i+=c_len-1;continue;}// apply mask on first byte |
|
|
c&=c_len===2?0x1f:c_len===3?0x0f:0x07;// join the rest |
|
|
while(c_len>1&&i<len){c=c<<6|buf[i++]&0x3f;c_len--;}// terminated by end of string? |
|
|
if(c_len>1){utf16buf[out++]=0xfffd;continue;}if(c<0x10000){utf16buf[out++]=c;}else{c-=0x10000;utf16buf[out++]=0xd800|c>>10&0x3ff;utf16buf[out++]=0xdc00|c&0x3ff;}}// shrinkBuf(utf16buf, out) |
|
|
if(utf16buf.length!==out){if(utf16buf.subarray){utf16buf=utf16buf.subarray(0,out);}else{utf16buf.length=out;}}// return String.fromCharCode.apply(null, utf16buf); |
|
|
return utils.applyFromCharCode(utf16buf);};// That's all for the pako functions. |
|
|
/** |
|
|
* Transform a javascript string into an array (typed if possible) of bytes, |
|
|
* UTF-8 encoded. |
|
|
* @param {String} str the string to encode |
|
|
* @return {Array|Uint8Array|Buffer} the UTF-8 encoded string. |
|
|
*/exports.utf8encode=function utf8encode(str){if(support.nodebuffer){return nodejsUtils.newBufferFrom(str,"utf-8");}return string2buf(str);};/** |
|
|
* Transform a bytes array (or a representation) representing an UTF-8 encoded |
|
|
* string into a javascript string. |
|
|
* @param {Array|Uint8Array|Buffer} buf the data de decode |
|
|
* @return {String} the decoded string. |
|
|
*/exports.utf8decode=function utf8decode(buf){if(support.nodebuffer){return utils.transformTo("nodebuffer",buf).toString("utf-8");}buf=utils.transformTo(support.uint8array?"uint8array":"array",buf);return buf2string(buf);};/** |
|
|
* A worker to decode utf8 encoded binary chunks into string chunks. |
|
|
* @constructor |
|
|
*/function Utf8DecodeWorker(){GenericWorker.call(this,"utf-8 decode");// the last bytes if a chunk didn't end with a complete codepoint. |
|
|
this.leftOver=null;}utils.inherits(Utf8DecodeWorker,GenericWorker);/** |
|
|
* @see GenericWorker.processChunk |
|
|
*/Utf8DecodeWorker.prototype.processChunk=function(chunk){var data=utils.transformTo(support.uint8array?"uint8array":"array",chunk.data);// 1st step, re-use what's left of the previous chunk |
|
|
if(this.leftOver&&this.leftOver.length){if(support.uint8array){var previousData=data;data=new Uint8Array(previousData.length+this.leftOver.length);data.set(this.leftOver,0);data.set(previousData,this.leftOver.length);}else{data=this.leftOver.concat(data);}this.leftOver=null;}var nextBoundary=utf8border(data);var usableData=data;if(nextBoundary!==data.length){if(support.uint8array){usableData=data.subarray(0,nextBoundary);this.leftOver=data.subarray(nextBoundary,data.length);}else{usableData=data.slice(0,nextBoundary);this.leftOver=data.slice(nextBoundary,data.length);}}this.push({data:exports.utf8decode(usableData),meta:chunk.meta});};/** |
|
|
* @see GenericWorker.flush |
|
|
*/Utf8DecodeWorker.prototype.flush=function(){if(this.leftOver&&this.leftOver.length){this.push({data:exports.utf8decode(this.leftOver),meta:{}});this.leftOver=null;}};exports.Utf8DecodeWorker=Utf8DecodeWorker;/** |
|
|
* A worker to endcode string chunks into utf8 encoded binary chunks. |
|
|
* @constructor |
|
|
*/function Utf8EncodeWorker(){GenericWorker.call(this,"utf-8 encode");}utils.inherits(Utf8EncodeWorker,GenericWorker);/** |
|
|
* @see GenericWorker.processChunk |
|
|
*/Utf8EncodeWorker.prototype.processChunk=function(chunk){this.push({data:exports.utf8encode(chunk.data),meta:chunk.meta});};exports.Utf8EncodeWorker=Utf8EncodeWorker;},{"./nodejsUtils":380,"./stream/GenericWorker":394,"./support":396,"./utils":398}],398:[function(require,module,exports){'use strict';var support=require('./support');var base64=require('./base64');var nodejsUtils=require('./nodejsUtils');var setImmediate=require('set-immediate-shim');var external=require("./external");/** |
|
|
* Convert a string that pass as a "binary string": it should represent a byte |
|
|
* array but may have > 255 char codes. Be sure to take only the first byte |
|
|
* and returns the byte array. |
|
|
* @param {String} str the string to transform. |
|
|
* @return {Array|Uint8Array} the string in a binary format. |
|
|
*/function string2binary(str){var result=null;if(support.uint8array){result=new Uint8Array(str.length);}else{result=new Array(str.length);}return stringToArrayLike(str,result);}/** |
|
|
* Create a new blob with the given content and the given type. |
|
|
* @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use |
|
|
* an Uint8Array because the stock browser of android 4 won't accept it (it |
|
|
* will be silently converted to a string, "[object Uint8Array]"). |
|
|
* |
|
|
* Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge: |
|
|
* when a large amount of Array is used to create the Blob, the amount of |
|
|
* memory consumed is nearly 100 times the original data amount. |
|
|
* |
|
|
* @param {String} type the mime type of the blob. |
|
|
* @return {Blob} the created blob. |
|
|
*/exports.newBlob=function(part,type){exports.checkSupport("blob");try{// Blob constructor |
|
|
return new Blob([part],{type:type});}catch(e){try{// deprecated, browser only, old way |
|
|
var Builder=self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder;var builder=new Builder();builder.append(part);return builder.getBlob(type);}catch(e){// well, fuck ?! |
|
|
throw new Error("Bug : can't construct the Blob.");}}};/** |
|
|
* The identity function. |
|
|
* @param {Object} input the input. |
|
|
* @return {Object} the same input. |
|
|
*/function identity(input){return input;}/** |
|
|
* Fill in an array with a string. |
|
|
* @param {String} str the string to use. |
|
|
* @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated). |
|
|
* @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array. |
|
|
*/function stringToArrayLike(str,array){for(var i=0;i<str.length;++i){array[i]=str.charCodeAt(i)&0xFF;}return array;}/** |
|
|
* An helper for the function arrayLikeToString. |
|
|
* This contains static information and functions that |
|
|
* can be optimized by the browser JIT compiler. |
|
|
*/var arrayToStringHelper={/** |
|
|
* Transform an array of int into a string, chunk by chunk. |
|
|
* See the performances notes on arrayLikeToString. |
|
|
* @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. |
|
|
* @param {String} type the type of the array. |
|
|
* @param {Integer} chunk the chunk size. |
|
|
* @return {String} the resulting string. |
|
|
* @throws Error if the chunk is too big for the stack. |
|
|
*/stringifyByChunk:function stringifyByChunk(array,type,chunk){var result=[],k=0,len=array.length;// shortcut |
|
|
if(len<=chunk){return String.fromCharCode.apply(null,array);}while(k<len){if(type==="array"||type==="nodebuffer"){result.push(String.fromCharCode.apply(null,array.slice(k,Math.min(k+chunk,len))));}else{result.push(String.fromCharCode.apply(null,array.subarray(k,Math.min(k+chunk,len))));}k+=chunk;}return result.join("");},/** |
|
|
* Call String.fromCharCode on every item in the array. |
|
|
* This is the naive implementation, which generate A LOT of intermediate string. |
|
|
* This should be used when everything else fail. |
|
|
* @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. |
|
|
* @return {String} the result. |
|
|
*/stringifyByChar:function stringifyByChar(array){var resultStr="";for(var i=0;i<array.length;i++){resultStr+=String.fromCharCode(array[i]);}return resultStr;},applyCanBeUsed:{/** |
|
|
* true if the browser accepts to use String.fromCharCode on Uint8Array |
|
|
*/uint8array:function(){try{return support.uint8array&&String.fromCharCode.apply(null,new Uint8Array(1)).length===1;}catch(e){return false;}}(),/** |
|
|
* true if the browser accepts to use String.fromCharCode on nodejs Buffer. |
|
|
*/nodebuffer:function(){try{return support.nodebuffer&&String.fromCharCode.apply(null,nodejsUtils.allocBuffer(1)).length===1;}catch(e){return false;}}()}};/** |
|
|
* Transform an array-like object to a string. |
|
|
* @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. |
|
|
* @return {String} the result. |
|
|
*/function arrayLikeToString(array){// Performances notes : |
|
|
// -------------------- |
|
|
// String.fromCharCode.apply(null, array) is the fastest, see |
|
|
// see http://jsperf.com/converting-a-uint8array-to-a-string/2 |
|
|
// but the stack is limited (and we can get huge arrays !). |
|
|
// |
|
|
// result += String.fromCharCode(array[i]); generate too many strings ! |
|
|
// |
|
|
// This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2 |
|
|
// TODO : we now have workers that split the work. Do we still need that ? |
|
|
var chunk=65536,type=exports.getTypeOf(array),canUseApply=true;if(type==="uint8array"){canUseApply=arrayToStringHelper.applyCanBeUsed.uint8array;}else if(type==="nodebuffer"){canUseApply=arrayToStringHelper.applyCanBeUsed.nodebuffer;}if(canUseApply){while(chunk>1){try{return arrayToStringHelper.stringifyByChunk(array,type,chunk);}catch(e){chunk=Math.floor(chunk/2);}}}// no apply or chunk error : slow and painful algorithm |
|
|
// default browser on android 4.* |
|
|
return arrayToStringHelper.stringifyByChar(array);}exports.applyFromCharCode=arrayLikeToString;/** |
|
|
* Copy the data from an array-like to an other array-like. |
|
|
* @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array. |
|
|
* @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated. |
|
|
* @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array. |
|
|
*/function arrayLikeToArrayLike(arrayFrom,arrayTo){for(var i=0;i<arrayFrom.length;i++){arrayTo[i]=arrayFrom[i];}return arrayTo;}// a matrix containing functions to transform everything into everything. |
|
|
var transform={};// string to ? |
|
|
transform["string"]={"string":identity,"array":function array(input){return stringToArrayLike(input,new Array(input.length));},"arraybuffer":function arraybuffer(input){return transform["string"]["uint8array"](input).buffer;},"uint8array":function uint8array(input){return stringToArrayLike(input,new Uint8Array(input.length));},"nodebuffer":function nodebuffer(input){return stringToArrayLike(input,nodejsUtils.allocBuffer(input.length));}};// array to ? |
|
|
transform["array"]={"string":arrayLikeToString,"array":identity,"arraybuffer":function arraybuffer(input){return new Uint8Array(input).buffer;},"uint8array":function uint8array(input){return new Uint8Array(input);},"nodebuffer":function nodebuffer(input){return nodejsUtils.newBufferFrom(input);}};// arraybuffer to ? |
|
|
transform["arraybuffer"]={"string":function string(input){return arrayLikeToString(new Uint8Array(input));},"array":function array(input){return arrayLikeToArrayLike(new Uint8Array(input),new Array(input.byteLength));},"arraybuffer":identity,"uint8array":function uint8array(input){return new Uint8Array(input);},"nodebuffer":function nodebuffer(input){return nodejsUtils.newBufferFrom(new Uint8Array(input));}};// uint8array to ? |
|
|
transform["uint8array"]={"string":arrayLikeToString,"array":function array(input){return arrayLikeToArrayLike(input,new Array(input.length));},"arraybuffer":function arraybuffer(input){return input.buffer;},"uint8array":identity,"nodebuffer":function nodebuffer(input){return nodejsUtils.newBufferFrom(input);}};// nodebuffer to ? |
|
|
transform["nodebuffer"]={"string":arrayLikeToString,"array":function array(input){return arrayLikeToArrayLike(input,new Array(input.length));},"arraybuffer":function arraybuffer(input){return transform["nodebuffer"]["uint8array"](input).buffer;},"uint8array":function uint8array(input){return arrayLikeToArrayLike(input,new Uint8Array(input.length));},"nodebuffer":identity};/** |
|
|
* Transform an input into any type. |
|
|
* The supported output type are : string, array, uint8array, arraybuffer, nodebuffer. |
|
|
* If no output type is specified, the unmodified input will be returned. |
|
|
* @param {String} outputType the output type. |
|
|
* @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert. |
|
|
* @throws {Error} an Error if the browser doesn't support the requested output type. |
|
|
*/exports.transformTo=function(outputType,input){if(!input){// undefined, null, etc |
|
|
// an empty string won't harm. |
|
|
input="";}if(!outputType){return input;}exports.checkSupport(outputType);var inputType=exports.getTypeOf(input);var result=transform[inputType][outputType](input);return result;};/** |
|
|
* Return the type of the input. |
|
|
* The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer. |
|
|
* @param {Object} input the input to identify. |
|
|
* @return {String} the (lowercase) type of the input. |
|
|
*/exports.getTypeOf=function(input){if(typeof input==="string"){return"string";}if(Object.prototype.toString.call(input)==="[object Array]"){return"array";}if(support.nodebuffer&&nodejsUtils.isBuffer(input)){return"nodebuffer";}if(support.uint8array&&input instanceof Uint8Array){return"uint8array";}if(support.arraybuffer&&input instanceof ArrayBuffer){return"arraybuffer";}};/** |
|
|
* Throw an exception if the type is not supported. |
|
|
* @param {String} type the type to check. |
|
|
* @throws {Error} an Error if the browser doesn't support the requested type. |
|
|
*/exports.checkSupport=function(type){var supported=support[type.toLowerCase()];if(!supported){throw new Error(type+" is not supported by this platform");}};exports.MAX_VALUE_16BITS=65535;exports.MAX_VALUE_32BITS=-1;// well, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" is parsed as -1 |
|
|
/** |
|
|
* Prettify a string read as binary. |
|
|
* @param {string} str the string to prettify. |
|
|
* @return {string} a pretty string. |
|
|
*/exports.pretty=function(str){var res='',code,i;for(i=0;i<(str||"").length;i++){code=str.charCodeAt(i);res+='\\x'+(code<16?"0":"")+code.toString(16).toUpperCase();}return res;};/** |
|
|
* Defer the call of a function. |
|
|
* @param {Function} callback the function to call asynchronously. |
|
|
* @param {Array} args the arguments to give to the callback. |
|
|
*/exports.delay=function(callback,args,self){setImmediate(function(){callback.apply(self||null,args||[]);});};/** |
|
|
* Extends a prototype with an other, without calling a constructor with |
|
|
* side effects. Inspired by nodejs' `utils.inherits` |
|
|
* @param {Function} ctor the constructor to augment |
|
|
* @param {Function} superCtor the parent constructor to use |
|
|
*/exports.inherits=function(ctor,superCtor){var Obj=function Obj(){};Obj.prototype=superCtor.prototype;ctor.prototype=new Obj();};/** |
|
|
* Merge the objects passed as parameters into a new one. |
|
|
* @private |
|
|
* @param {...Object} var_args All objects to merge. |
|
|
* @return {Object} a new object with the data of the others. |
|
|
*/exports.extend=function(){var result={},i,attr;for(i=0;i<arguments.length;i++){// arguments is not enumerable in some browsers |
|
|
for(attr in arguments[i]){if(arguments[i].hasOwnProperty(attr)&&typeof result[attr]==="undefined"){result[attr]=arguments[i][attr];}}}return result;};/** |
|
|
* Transform arbitrary content into a Promise. |
|
|
* @param {String} name a name for the content being processed. |
|
|
* @param {Object} inputData the content to process. |
|
|
* @param {Boolean} isBinary true if the content is not an unicode string |
|
|
* @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character. |
|
|
* @param {Boolean} isBase64 true if the string content is encoded with base64. |
|
|
* @return {Promise} a promise in a format usable by JSZip. |
|
|
*/exports.prepareContent=function(name,inputData,isBinary,isOptimizedBinaryString,isBase64){// if inputData is already a promise, this flatten it. |
|
|
var promise=external.Promise.resolve(inputData).then(function(data){var isBlob=support.blob&&(data instanceof Blob||['[object File]','[object Blob]'].indexOf(Object.prototype.toString.call(data))!==-1);if(isBlob&&typeof FileReader!=="undefined"){return new external.Promise(function(resolve,reject){var reader=new FileReader();reader.onload=function(e){resolve(e.target.result);};reader.onerror=function(e){reject(e.target.error);};reader.readAsArrayBuffer(data);});}else{return data;}});return promise.then(function(data){var dataType=exports.getTypeOf(data);if(!dataType){return external.Promise.reject(new Error("Can't read the data of '"+name+"'. Is it "+"in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"));}// special case : it's way easier to work with Uint8Array than with ArrayBuffer |
|
|
if(dataType==="arraybuffer"){data=exports.transformTo("uint8array",data);}else if(dataType==="string"){if(isBase64){data=base64.decode(data);}else if(isBinary){// optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask |
|
|
if(isOptimizedBinaryString!==true){// this is a string, not in a base64 format. |
|
|
// Be sure that this is a correct "binary string" |
|
|
data=string2binary(data);}}}return data;});};},{"./base64":367,"./external":372,"./nodejsUtils":380,"./support":396,"set-immediate-shim":472}],399:[function(require,module,exports){'use strict';var readerFor=require('./reader/readerFor');var utils=require('./utils');var sig=require('./signature');var ZipEntry=require('./zipEntry');var utf8=require('./utf8');var support=require('./support');// class ZipEntries {{{ |
|
|
/** |
|
|
* All the entries in the zip file. |
|
|
* @constructor |
|
|
* @param {Object} loadOptions Options for loading the stream. |
|
|
*/function ZipEntries(loadOptions){this.files=[];this.loadOptions=loadOptions;}ZipEntries.prototype={/** |
|
|
* Check that the reader is on the specified signature. |
|
|
* @param {string} expectedSignature the expected signature. |
|
|
* @throws {Error} if it is an other signature. |
|
|
*/checkSignature:function checkSignature(expectedSignature){if(!this.reader.readAndCheckSignature(expectedSignature)){this.reader.index-=4;var signature=this.reader.readString(4);throw new Error("Corrupted zip or bug: unexpected signature "+"("+utils.pretty(signature)+", expected "+utils.pretty(expectedSignature)+")");}},/** |
|
|
* Check if the given signature is at the given index. |
|
|
* @param {number} askedIndex the index to check. |
|
|
* @param {string} expectedSignature the signature to expect. |
|
|
* @return {boolean} true if the signature is here, false otherwise. |
|
|
*/isSignature:function isSignature(askedIndex,expectedSignature){var currentIndex=this.reader.index;this.reader.setIndex(askedIndex);var signature=this.reader.readString(4);var result=signature===expectedSignature;this.reader.setIndex(currentIndex);return result;},/** |
|
|
* Read the end of the central directory. |
|
|
*/readBlockEndOfCentral:function readBlockEndOfCentral(){this.diskNumber=this.reader.readInt(2);this.diskWithCentralDirStart=this.reader.readInt(2);this.centralDirRecordsOnThisDisk=this.reader.readInt(2);this.centralDirRecords=this.reader.readInt(2);this.centralDirSize=this.reader.readInt(4);this.centralDirOffset=this.reader.readInt(4);this.zipCommentLength=this.reader.readInt(2);// warning : the encoding depends of the system locale |
|
|
// On a linux machine with LANG=en_US.utf8, this field is utf8 encoded. |
|
|
// On a windows machine, this field is encoded with the localized windows code page. |
|
|
var zipComment=this.reader.readData(this.zipCommentLength);var decodeParamType=support.uint8array?"uint8array":"array";// To get consistent behavior with the generation part, we will assume that |
|
|
// this is utf8 encoded unless specified otherwise. |
|
|
var decodeContent=utils.transformTo(decodeParamType,zipComment);this.zipComment=this.loadOptions.decodeFileName(decodeContent);},/** |
|
|
* Read the end of the Zip 64 central directory. |
|
|
* Not merged with the method readEndOfCentral : |
|
|
* The end of central can coexist with its Zip64 brother, |
|
|
* I don't want to read the wrong number of bytes ! |
|
|
*/readBlockZip64EndOfCentral:function readBlockZip64EndOfCentral(){this.zip64EndOfCentralSize=this.reader.readInt(8);this.reader.skip(4);// this.versionMadeBy = this.reader.readString(2); |
|
|
// this.versionNeeded = this.reader.readInt(2); |
|
|
this.diskNumber=this.reader.readInt(4);this.diskWithCentralDirStart=this.reader.readInt(4);this.centralDirRecordsOnThisDisk=this.reader.readInt(8);this.centralDirRecords=this.reader.readInt(8);this.centralDirSize=this.reader.readInt(8);this.centralDirOffset=this.reader.readInt(8);this.zip64ExtensibleData={};var extraDataSize=this.zip64EndOfCentralSize-44,index=0,extraFieldId,extraFieldLength,extraFieldValue;while(index<extraDataSize){extraFieldId=this.reader.readInt(2);extraFieldLength=this.reader.readInt(4);extraFieldValue=this.reader.readData(extraFieldLength);this.zip64ExtensibleData[extraFieldId]={id:extraFieldId,length:extraFieldLength,value:extraFieldValue};}},/** |
|
|
* Read the end of the Zip 64 central directory locator. |
|
|
*/readBlockZip64EndOfCentralLocator:function readBlockZip64EndOfCentralLocator(){this.diskWithZip64CentralDirStart=this.reader.readInt(4);this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8);this.disksCount=this.reader.readInt(4);if(this.disksCount>1){throw new Error("Multi-volumes zip are not supported");}},/** |
|
|
* Read the local files, based on the offset read in the central part. |
|
|
*/readLocalFiles:function readLocalFiles(){var i,file;for(i=0;i<this.files.length;i++){file=this.files[i];this.reader.setIndex(file.localHeaderOffset);this.checkSignature(sig.LOCAL_FILE_HEADER);file.readLocalPart(this.reader);file.handleUTF8();file.processAttributes();}},/** |
|
|
* Read the central directory. |
|
|
*/readCentralDir:function readCentralDir(){var file;this.reader.setIndex(this.centralDirOffset);while(this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)){file=new ZipEntry({zip64:this.zip64},this.loadOptions);file.readCentralPart(this.reader);this.files.push(file);}if(this.centralDirRecords!==this.files.length){if(this.centralDirRecords!==0&&this.files.length===0){// We expected some records but couldn't find ANY. |
|
|
// This is really suspicious, as if something went wrong. |
|
|
throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length);}else{// We found some records but not all. |
|
|
// Something is wrong but we got something for the user: no error here. |
|
|
// console.warn("expected", this.centralDirRecords, "records in central dir, got", this.files.length); |
|
|
}}},/** |
|
|
* Read the end of central directory. |
|
|
*/readEndOfCentral:function readEndOfCentral(){var offset=this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);if(offset<0){// Check if the content is a truncated zip or complete garbage. |
|
|
// A "LOCAL_FILE_HEADER" is not required at the beginning (auto |
|
|
// extractible zip for example) but it can give a good hint. |
|
|
// If an ajax request was used without responseType, we will also |
|
|
// get unreadable data. |
|
|
var isGarbage=!this.isSignature(0,sig.LOCAL_FILE_HEADER);if(isGarbage){throw new Error("Can't find end of central directory : is this a zip file ? "+"If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html");}else{throw new Error("Corrupted zip: can't find end of central directory");}}this.reader.setIndex(offset);var endOfCentralDirOffset=offset;this.checkSignature(sig.CENTRAL_DIRECTORY_END);this.readBlockEndOfCentral();/* extract from the zip spec : |
|
|
4) If one of the fields in the end of central directory |
|
|
record is too small to hold required data, the field |
|
|
should be set to -1 (0xFFFF or 0xFFFFFFFF) and the |
|
|
ZIP64 format record should be created. |
|
|
5) The end of central directory record and the |
|
|
Zip64 end of central directory locator record must |
|
|
reside on the same disk when splitting or spanning |
|
|
an archive. |
|
|
*/if(this.diskNumber===utils.MAX_VALUE_16BITS||this.diskWithCentralDirStart===utils.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===utils.MAX_VALUE_16BITS||this.centralDirRecords===utils.MAX_VALUE_16BITS||this.centralDirSize===utils.MAX_VALUE_32BITS||this.centralDirOffset===utils.MAX_VALUE_32BITS){this.zip64=true;/* |
|
|
Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from |
|
|
the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents |
|
|
all numbers as 64-bit double precision IEEE 754 floating point numbers. |
|
|
So, we have 53bits for integers and bitwise operations treat everything as 32bits. |
|
|
see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators |
|
|
and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5 |
|
|
*/ // should look for a zip64 EOCD locator |
|
|
offset=this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);if(offset<0){throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");}this.reader.setIndex(offset);this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);this.readBlockZip64EndOfCentralLocator();// now the zip64 EOCD record |
|
|
if(!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,sig.ZIP64_CENTRAL_DIRECTORY_END)){// console.warn("ZIP64 end of central directory not where expected."); |
|
|
this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);if(this.relativeOffsetEndOfZip64CentralDir<0){throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");}}this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);this.readBlockZip64EndOfCentral();}var expectedEndOfCentralDirOffset=this.centralDirOffset+this.centralDirSize;if(this.zip64){expectedEndOfCentralDirOffset+=20;// end of central dir 64 locator |
|
|
expectedEndOfCentralDirOffset+=12/* should not include the leading 12 bytes */+this.zip64EndOfCentralSize;}var extraBytes=endOfCentralDirOffset-expectedEndOfCentralDirOffset;if(extraBytes>0){// console.warn(extraBytes, "extra bytes at beginning or within zipfile"); |
|
|
if(this.isSignature(endOfCentralDirOffset,sig.CENTRAL_FILE_HEADER)){// The offsets seem wrong, but we have something at the specified offset. |
|
|
// So… we keep it. |
|
|
}else{// the offset is wrong, update the "zero" of the reader |
|
|
// this happens if data has been prepended (crx files for example) |
|
|
this.reader.zero=extraBytes;}}else if(extraBytes<0){throw new Error("Corrupted zip: missing "+Math.abs(extraBytes)+" bytes.");}},prepareReader:function prepareReader(data){this.reader=readerFor(data);},/** |
|
|
* Read a zip file and create ZipEntries. |
|
|
* @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file. |
|
|
*/load:function load(data){this.prepareReader(data);this.readEndOfCentral();this.readCentralDir();this.readLocalFiles();}};// }}} end of ZipEntries |
|
|
module.exports=ZipEntries;},{"./reader/readerFor":388,"./signature":389,"./support":396,"./utf8":397,"./utils":398,"./zipEntry":400}],400:[function(require,module,exports){'use strict';var readerFor=require('./reader/readerFor');var utils=require('./utils');var CompressedObject=require('./compressedObject');var crc32fn=require('./crc32');var utf8=require('./utf8');var compressions=require('./compressions');var support=require('./support');var MADE_BY_DOS=0x00;var MADE_BY_UNIX=0x03;/** |
|
|
* Find a compression registered in JSZip. |
|
|
* @param {string} compressionMethod the method magic to find. |
|
|
* @return {Object|null} the JSZip compression object, null if none found. |
|
|
*/var findCompression=function findCompression(compressionMethod){for(var method in compressions){if(!compressions.hasOwnProperty(method)){continue;}if(compressions[method].magic===compressionMethod){return compressions[method];}}return null;};// class ZipEntry {{{ |
|
|
/** |
|
|
* An entry in the zip file. |
|
|
* @constructor |
|
|
* @param {Object} options Options of the current file. |
|
|
* @param {Object} loadOptions Options for loading the stream. |
|
|
*/function ZipEntry(options,loadOptions){this.options=options;this.loadOptions=loadOptions;}ZipEntry.prototype={/** |
|
|
* say if the file is encrypted. |
|
|
* @return {boolean} true if the file is encrypted, false otherwise. |
|
|
*/isEncrypted:function isEncrypted(){// bit 1 is set |
|
|
return(this.bitFlag&0x0001)===0x0001;},/** |
|
|
* say if the file has utf-8 filename/comment. |
|
|
* @return {boolean} true if the filename/comment is in utf-8, false otherwise. |
|
|
*/useUTF8:function useUTF8(){// bit 11 is set |
|
|
return(this.bitFlag&0x0800)===0x0800;},/** |
|
|
* Read the local part of a zip file and add the info in this object. |
|
|
* @param {DataReader} reader the reader to use. |
|
|
*/readLocalPart:function readLocalPart(reader){var compression,localExtraFieldsLength;// we already know everything from the central dir ! |
|
|
// If the central dir data are false, we are doomed. |
|
|
// On the bright side, the local part is scary : zip64, data descriptors, both, etc. |
|
|
// The less data we get here, the more reliable this should be. |
|
|
// Let's skip the whole header and dash to the data ! |
|
|
reader.skip(22);// in some zip created on windows, the filename stored in the central dir contains \ instead of /. |
|
|
// Strangely, the filename here is OK. |
|
|
// I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes |
|
|
// or APPNOTE#4.4.17.1, "All slashes MUST be forward slashes '/'") but there are a lot of bad zip generators... |
|
|
// Search "unzip mismatching "local" filename continuing with "central" filename version" on |
|
|
// the internet. |
|
|
// |
|
|
// I think I see the logic here : the central directory is used to display |
|
|
// content and the local directory is used to extract the files. Mixing / and \ |
|
|
// may be used to display \ to windows users and use / when extracting the files. |
|
|
// Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394 |
|
|
this.fileNameLength=reader.readInt(2);localExtraFieldsLength=reader.readInt(2);// can't be sure this will be the same as the central dir |
|
|
// the fileName is stored as binary data, the handleUTF8 method will take care of the encoding. |
|
|
this.fileName=reader.readData(this.fileNameLength);reader.skip(localExtraFieldsLength);if(this.compressedSize===-1||this.uncompressedSize===-1){throw new Error("Bug or corrupted zip : didn't get enough information from the central directory "+"(compressedSize === -1 || uncompressedSize === -1)");}compression=findCompression(this.compressionMethod);if(compression===null){// no compression found |
|
|
throw new Error("Corrupted zip : compression "+utils.pretty(this.compressionMethod)+" unknown (inner file : "+utils.transformTo("string",this.fileName)+")");}this.decompressed=new CompressedObject(this.compressedSize,this.uncompressedSize,this.crc32,compression,reader.readData(this.compressedSize));},/** |
|
|
* Read the central part of a zip file and add the info in this object. |
|
|
* @param {DataReader} reader the reader to use. |
|
|
*/readCentralPart:function readCentralPart(reader){this.versionMadeBy=reader.readInt(2);reader.skip(2);// this.versionNeeded = reader.readInt(2); |
|
|
this.bitFlag=reader.readInt(2);this.compressionMethod=reader.readString(2);this.date=reader.readDate();this.crc32=reader.readInt(4);this.compressedSize=reader.readInt(4);this.uncompressedSize=reader.readInt(4);var fileNameLength=reader.readInt(2);this.extraFieldsLength=reader.readInt(2);this.fileCommentLength=reader.readInt(2);this.diskNumberStart=reader.readInt(2);this.internalFileAttributes=reader.readInt(2);this.externalFileAttributes=reader.readInt(4);this.localHeaderOffset=reader.readInt(4);if(this.isEncrypted()){throw new Error("Encrypted zip are not supported");}// will be read in the local part, see the comments there |
|
|
reader.skip(fileNameLength);this.readExtraFields(reader);this.parseZIP64ExtraField(reader);this.fileComment=reader.readData(this.fileCommentLength);},/** |
|
|
* Parse the external file attributes and get the unix/dos permissions. |
|
|
*/processAttributes:function processAttributes(){this.unixPermissions=null;this.dosPermissions=null;var madeBy=this.versionMadeBy>>8;// Check if we have the DOS directory flag set. |
|
|
// We look for it in the DOS and UNIX permissions |
|
|
// but some unknown platform could set it as a compatibility flag. |
|
|
this.dir=this.externalFileAttributes&0x0010?true:false;if(madeBy===MADE_BY_DOS){// first 6 bits (0 to 5) |
|
|
this.dosPermissions=this.externalFileAttributes&0x3F;}if(madeBy===MADE_BY_UNIX){this.unixPermissions=this.externalFileAttributes>>16&0xFFFF;// the octal permissions are in (this.unixPermissions & 0x01FF).toString(8); |
|
|
}// fail safe : if the name ends with a / it probably means a folder |
|
|
if(!this.dir&&this.fileNameStr.slice(-1)==='/'){this.dir=true;}},/** |
|
|
* Parse the ZIP64 extra field and merge the info in the current ZipEntry. |
|
|
* @param {DataReader} reader the reader to use. |
|
|
*/parseZIP64ExtraField:function parseZIP64ExtraField(reader){if(!this.extraFields[0x0001]){return;}// should be something, preparing the extra reader |
|
|
var extraReader=readerFor(this.extraFields[0x0001].value);// I really hope that these 64bits integer can fit in 32 bits integer, because js |
|
|
// won't let us have more. |
|
|
if(this.uncompressedSize===utils.MAX_VALUE_32BITS){this.uncompressedSize=extraReader.readInt(8);}if(this.compressedSize===utils.MAX_VALUE_32BITS){this.compressedSize=extraReader.readInt(8);}if(this.localHeaderOffset===utils.MAX_VALUE_32BITS){this.localHeaderOffset=extraReader.readInt(8);}if(this.diskNumberStart===utils.MAX_VALUE_32BITS){this.diskNumberStart=extraReader.readInt(4);}},/** |
|
|
* Read the central part of a zip file and add the info in this object. |
|
|
* @param {DataReader} reader the reader to use. |
|
|
*/readExtraFields:function readExtraFields(reader){var end=reader.index+this.extraFieldsLength,extraFieldId,extraFieldLength,extraFieldValue;if(!this.extraFields){this.extraFields={};}while(reader.index<end){extraFieldId=reader.readInt(2);extraFieldLength=reader.readInt(2);extraFieldValue=reader.readData(extraFieldLength);this.extraFields[extraFieldId]={id:extraFieldId,length:extraFieldLength,value:extraFieldValue};}},/** |
|
|
* Apply an UTF8 transformation if needed. |
|
|
*/handleUTF8:function handleUTF8(){var decodeParamType=support.uint8array?"uint8array":"array";if(this.useUTF8()){this.fileNameStr=utf8.utf8decode(this.fileName);this.fileCommentStr=utf8.utf8decode(this.fileComment);}else{var upath=this.findExtraFieldUnicodePath();if(upath!==null){this.fileNameStr=upath;}else{// ASCII text or unsupported code page |
|
|
var fileNameByteArray=utils.transformTo(decodeParamType,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(fileNameByteArray);}var ucomment=this.findExtraFieldUnicodeComment();if(ucomment!==null){this.fileCommentStr=ucomment;}else{// ASCII text or unsupported code page |
|
|
var commentByteArray=utils.transformTo(decodeParamType,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(commentByteArray);}}},/** |
|
|
* Find the unicode path declared in the extra field, if any. |
|
|
* @return {String} the unicode path, null otherwise. |
|
|
*/findExtraFieldUnicodePath:function findExtraFieldUnicodePath(){var upathField=this.extraFields[0x7075];if(upathField){var extraReader=readerFor(upathField.value);// wrong version |
|
|
if(extraReader.readInt(1)!==1){return null;}// the crc of the filename changed, this field is out of date. |
|
|
if(crc32fn(this.fileName)!==extraReader.readInt(4)){return null;}return utf8.utf8decode(extraReader.readData(upathField.length-5));}return null;},/** |
|
|
* Find the unicode comment declared in the extra field, if any. |
|
|
* @return {String} the unicode comment, null otherwise. |
|
|
*/findExtraFieldUnicodeComment:function findExtraFieldUnicodeComment(){var ucommentField=this.extraFields[0x6375];if(ucommentField){var extraReader=readerFor(ucommentField.value);// wrong version |
|
|
if(extraReader.readInt(1)!==1){return null;}// the crc of the comment changed, this field is out of date. |
|
|
if(crc32fn(this.fileComment)!==extraReader.readInt(4)){return null;}return utf8.utf8decode(extraReader.readData(ucommentField.length-5));}return null;}};module.exports=ZipEntry;},{"./compressedObject":368,"./compressions":369,"./crc32":370,"./reader/readerFor":388,"./support":396,"./utf8":397,"./utils":398}],401:[function(require,module,exports){'use strict';var StreamHelper=require('./stream/StreamHelper');var DataWorker=require('./stream/DataWorker');var utf8=require('./utf8');var CompressedObject=require('./compressedObject');var GenericWorker=require('./stream/GenericWorker');/** |
|
|
* A simple object representing a file in the zip file. |
|
|
* @constructor |
|
|
* @param {string} name the name of the file |
|
|
* @param {String|ArrayBuffer|Uint8Array|Buffer} data the data |
|
|
* @param {Object} options the options of the file |
|
|
*/var ZipObject=function ZipObject(name,data,options){this.name=name;this.dir=options.dir;this.date=options.date;this.comment=options.comment;this.unixPermissions=options.unixPermissions;this.dosPermissions=options.dosPermissions;this._data=data;this._dataBinary=options.binary;// keep only the compression |
|
|
this.options={compression:options.compression,compressionOptions:options.compressionOptions};};ZipObject.prototype={/** |
|
|
* Create an internal stream for the content of this object. |
|
|
* @param {String} type the type of each chunk. |
|
|
* @return StreamHelper the stream. |
|
|
*/internalStream:function internalStream(type){var result=null,outputType="string";try{if(!type){throw new Error("No output type specified.");}outputType=type.toLowerCase();var askUnicodeString=outputType==="string"||outputType==="text";if(outputType==="binarystring"||outputType==="text"){outputType="string";}result=this._decompressWorker();var isUnicodeString=!this._dataBinary;if(isUnicodeString&&!askUnicodeString){result=result.pipe(new utf8.Utf8EncodeWorker());}if(!isUnicodeString&&askUnicodeString){result=result.pipe(new utf8.Utf8DecodeWorker());}}catch(e){result=new GenericWorker("error");result.error(e);}return new StreamHelper(result,outputType,"");},/** |
|
|
* Prepare the content in the asked type. |
|
|
* @param {String} type the type of the result. |
|
|
* @param {Function} onUpdate a function to call on each internal update. |
|
|
* @return Promise the promise of the result. |
|
|
*/async:function async(type,onUpdate){return this.internalStream(type).accumulate(onUpdate);},/** |
|
|
* Prepare the content as a nodejs stream. |
|
|
* @param {String} type the type of each chunk. |
|
|
* @param {Function} onUpdate a function to call on each internal update. |
|
|
* @return Stream the stream. |
|
|
*/nodeStream:function nodeStream(type,onUpdate){return this.internalStream(type||"nodebuffer").toNodejsStream(onUpdate);},/** |
|
|
* Return a worker for the compressed content. |
|
|
* @private |
|
|
* @param {Object} compression the compression object to use. |
|
|
* @param {Object} compressionOptions the options to use when compressing. |
|
|
* @return Worker the worker. |
|
|
*/_compressWorker:function _compressWorker(compression,compressionOptions){if(this._data instanceof CompressedObject&&this._data.compression.magic===compression.magic){return this._data.getCompressedWorker();}else{var result=this._decompressWorker();if(!this._dataBinary){result=result.pipe(new utf8.Utf8EncodeWorker());}return CompressedObject.createWorkerFrom(result,compression,compressionOptions);}},/** |
|
|
* Return a worker for the decompressed content. |
|
|
* @private |
|
|
* @return Worker the worker. |
|
|
*/_decompressWorker:function _decompressWorker(){if(this._data instanceof CompressedObject){return this._data.getContentWorker();}else if(this._data instanceof GenericWorker){return this._data;}else{return new DataWorker(this._data);}}};var removedMethods=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"];var removedFn=function removedFn(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.");};for(var i=0;i<removedMethods.length;i++){ZipObject.prototype[removedMethods[i]]=removedFn;}module.exports=ZipObject;},{"./compressedObject":368,"./stream/DataWorker":393,"./stream/GenericWorker":394,"./stream/StreamHelper":395,"./utf8":397}],402:[function(require,module,exports){'use strict';var immediate=require('immediate');/* istanbul ignore next */function INTERNAL(){}var handlers={};var REJECTED=['REJECTED'];var FULFILLED=['FULFILLED'];var PENDING=['PENDING'];module.exports=Promise;function Promise(resolver){if(typeof resolver!=='function'){throw new TypeError('resolver must be a function');}this.state=PENDING;this.queue=[];this.outcome=void 0;if(resolver!==INTERNAL){safelyResolveThenable(this,resolver);}}Promise.prototype["finally"]=function(callback){if(typeof callback!=='function'){return this;}var p=this.constructor;return this.then(resolve,reject);function resolve(value){function yes(){return value;}return p.resolve(callback()).then(yes);}function reject(reason){function no(){throw reason;}return p.resolve(callback()).then(no);}};Promise.prototype["catch"]=function(onRejected){return this.then(null,onRejected);};Promise.prototype.then=function(onFulfilled,onRejected){if(typeof onFulfilled!=='function'&&this.state===FULFILLED||typeof onRejected!=='function'&&this.state===REJECTED){return this;}var promise=new this.constructor(INTERNAL);if(this.state!==PENDING){var resolver=this.state===FULFILLED?onFulfilled:onRejected;unwrap(promise,resolver,this.outcome);}else{this.queue.push(new QueueItem(promise,onFulfilled,onRejected));}return promise;};function QueueItem(promise,onFulfilled,onRejected){this.promise=promise;if(typeof onFulfilled==='function'){this.onFulfilled=onFulfilled;this.callFulfilled=this.otherCallFulfilled;}if(typeof onRejected==='function'){this.onRejected=onRejected;this.callRejected=this.otherCallRejected;}}QueueItem.prototype.callFulfilled=function(value){handlers.resolve(this.promise,value);};QueueItem.prototype.otherCallFulfilled=function(value){unwrap(this.promise,this.onFulfilled,value);};QueueItem.prototype.callRejected=function(value){handlers.reject(this.promise,value);};QueueItem.prototype.otherCallRejected=function(value){unwrap(this.promise,this.onRejected,value);};function unwrap(promise,func,value){immediate(function(){var returnValue;try{returnValue=func(value);}catch(e){return handlers.reject(promise,e);}if(returnValue===promise){handlers.reject(promise,new TypeError('Cannot resolve promise with itself'));}else{handlers.resolve(promise,returnValue);}});}handlers.resolve=function(self,value){var result=tryCatch(getThen,value);if(result.status==='error'){return handlers.reject(self,result.value);}var thenable=result.value;if(thenable){safelyResolveThenable(self,thenable);}else{self.state=FULFILLED;self.outcome=value;var i=-1;var len=self.queue.length;while(++i<len){self.queue[i].callFulfilled(value);}}return self;};handlers.reject=function(self,error){self.state=REJECTED;self.outcome=error;var i=-1;var len=self.queue.length;while(++i<len){self.queue[i].callRejected(error);}return self;};function getThen(obj){// Make sure we only access the accessor once as required by the spec |
|
|
var then=obj&&obj.then;if(obj&&(_typeof2(obj)==='object'||typeof obj==='function')&&typeof then==='function'){return function appyThen(){then.apply(obj,arguments);};}}function safelyResolveThenable(self,thenable){// Either fulfill, reject or reject with error |
|
|
var called=false;function onError(value){if(called){return;}called=true;handlers.reject(self,value);}function onSuccess(value){if(called){return;}called=true;handlers.resolve(self,value);}function tryToUnwrap(){thenable(onSuccess,onError);}var result=tryCatch(tryToUnwrap);if(result.status==='error'){onError(result.value);}}function tryCatch(func,value){var out={};try{out.value=func(value);out.status='success';}catch(e){out.status='error';out.value=e;}return out;}Promise.resolve=resolve;function resolve(value){if(value instanceof this){return value;}return handlers.resolve(new this(INTERNAL),value);}Promise.reject=reject;function reject(reason){var promise=new this(INTERNAL);return handlers.reject(promise,reason);}Promise.all=all;function all(iterable){var self=this;if(Object.prototype.toString.call(iterable)!=='[object Array]'){return this.reject(new TypeError('must be an array'));}var len=iterable.length;var called=false;if(!len){return this.resolve([]);}var values=new Array(len);var resolved=0;var i=-1;var promise=new this(INTERNAL);while(++i<len){allResolver(iterable[i],i);}return promise;function allResolver(value,i){self.resolve(value).then(resolveFromAll,function(error){if(!called){called=true;handlers.reject(promise,error);}});function resolveFromAll(outValue){values[i]=outValue;if(++resolved===len&&!called){called=true;handlers.resolve(promise,values);}}}}Promise.race=race;function race(iterable){var self=this;if(Object.prototype.toString.call(iterable)!=='[object Array]'){return this.reject(new TypeError('must be an array'));}var len=iterable.length;var called=false;if(!len){return this.resolve([]);}var i=-1;var promise=new this(INTERNAL);while(++i<len){resolver(iterable[i]);}return promise;function resolver(value){self.resolve(value).then(function(response){if(!called){called=true;handlers.resolve(promise,response);}},function(error){if(!called){called=true;handlers.reject(promise,error);}});}}},{"immediate":363}],403:[function(require,module,exports){(function(global){/** |
|
|
* lodash (Custom Build) <https://lodash.com/> |
|
|
* Build: `lodash modularize exports="npm" -o ./` |
|
|
* Copyright jQuery Foundation and other contributors <https://jquery.org/> |
|
|
* Released under MIT license <https://lodash.com/license> |
|
|
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> |
|
|
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors |
|
|
*/ /** Used as references for various `Number` constants. */var INFINITY=1/0;/** `Object#toString` result references. */var symbolTag='[object Symbol]';/** |
|
|
* Used to match `RegExp` |
|
|
* [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). |
|
|
*/var reRegExpChar=/[\\^$.*+?()[\]{}|]/g,reHasRegExpChar=RegExp(reRegExpChar.source);/** Detect free variable `global` from Node.js. */var freeGlobal=_typeof2(global)=='object'&&global&&global.Object===Object&&global;/** Detect free variable `self`. */var freeSelf=(typeof self==="undefined"?"undefined":_typeof2(self))=='object'&&self&&self.Object===Object&&self;/** Used as a reference to the global object. */var root=freeGlobal||freeSelf||Function('return this')();/** Used for built-in method references. */var objectProto=Object.prototype;/** |
|
|
* Used to resolve the |
|
|
* [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) |
|
|
* of values. |
|
|
*/var objectToString=objectProto.toString;/** Built-in value references. */var _Symbol4=root.Symbol;/** Used to convert symbols to primitives and strings. */var symbolProto=_Symbol4?_Symbol4.prototype:undefined,symbolToString=symbolProto?symbolProto.toString:undefined;/** |
|
|
* The base implementation of `_.toString` which doesn't convert nullish |
|
|
* values to empty strings. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to process. |
|
|
* @returns {string} Returns the string. |
|
|
*/function baseToString(value){// Exit early for strings to avoid a performance hit in some environments. |
|
|
if(typeof value=='string'){return value;}if(isSymbol(value)){return symbolToString?symbolToString.call(value):'';}var result=value+'';return result=='0'&&1/value==-INFINITY?'-0':result;}/** |
|
|
* Checks if `value` is object-like. A value is object-like if it's not `null` |
|
|
* and has a `typeof` result of "object". |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 4.0.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is object-like, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isObjectLike({}); |
|
|
* // => true |
|
|
* |
|
|
* _.isObjectLike([1, 2, 3]); |
|
|
* // => true |
|
|
* |
|
|
* _.isObjectLike(_.noop); |
|
|
* // => false |
|
|
* |
|
|
* _.isObjectLike(null); |
|
|
* // => false |
|
|
*/function isObjectLike(value){return!!value&&_typeof2(value)=='object';}/** |
|
|
* Checks if `value` is classified as a `Symbol` primitive or object. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 4.0.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is a symbol, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isSymbol(Symbol.iterator); |
|
|
* // => true |
|
|
* |
|
|
* _.isSymbol('abc'); |
|
|
* // => false |
|
|
*/function isSymbol(value){return _typeof2(value)=='symbol'||isObjectLike(value)&&objectToString.call(value)==symbolTag;}/** |
|
|
* Converts `value` to a string. An empty string is returned for `null` |
|
|
* and `undefined` values. The sign of `-0` is preserved. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 4.0.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to process. |
|
|
* @returns {string} Returns the string. |
|
|
* @example |
|
|
* |
|
|
* _.toString(null); |
|
|
* // => '' |
|
|
* |
|
|
* _.toString(-0); |
|
|
* // => '-0' |
|
|
* |
|
|
* _.toString([1, 2, 3]); |
|
|
* // => '1,2,3' |
|
|
*/function toString(value){return value==null?'':baseToString(value);}/** |
|
|
* Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", |
|
|
* "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 3.0.0 |
|
|
* @category String |
|
|
* @param {string} [string=''] The string to escape. |
|
|
* @returns {string} Returns the escaped string. |
|
|
* @example |
|
|
* |
|
|
* _.escapeRegExp('[lodash](https://lodash.com/)'); |
|
|
* // => '\[lodash\]\(https://lodash\.com/\)' |
|
|
*/function escapeRegExp(string){string=toString(string);return string&&reHasRegExpChar.test(string)?string.replace(reRegExpChar,'\\$&'):string;}module.exports=escapeRegExp;}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{}],404:[function(require,module,exports){(function(global){/** |
|
|
* lodash (Custom Build) <https://lodash.com/> |
|
|
* Build: `lodash modularize exports="npm" -o ./` |
|
|
* Copyright jQuery Foundation and other contributors <https://jquery.org/> |
|
|
* Released under MIT license <https://lodash.com/license> |
|
|
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> |
|
|
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors |
|
|
*/ /** Used as the size to enable large array optimizations. */var LARGE_ARRAY_SIZE=200;/** Used as the `TypeError` message for "Functions" methods. */var FUNC_ERROR_TEXT='Expected a function';/** Used to stand-in for `undefined` hash values. */var HASH_UNDEFINED='__lodash_hash_undefined__';/** Used to compose bitmasks for comparison styles. */var UNORDERED_COMPARE_FLAG=1,PARTIAL_COMPARE_FLAG=2;/** Used as references for various `Number` constants. */var INFINITY=1/0,MAX_SAFE_INTEGER=9007199254740991;/** `Object#toString` result references. */var argsTag='[object Arguments]',arrayTag='[object Array]',boolTag='[object Boolean]',dateTag='[object Date]',errorTag='[object Error]',funcTag='[object Function]',genTag='[object GeneratorFunction]',mapTag='[object Map]',numberTag='[object Number]',objectTag='[object Object]',promiseTag='[object Promise]',regexpTag='[object RegExp]',setTag='[object Set]',stringTag='[object String]',symbolTag='[object Symbol]',weakMapTag='[object WeakMap]';var arrayBufferTag='[object ArrayBuffer]',dataViewTag='[object DataView]',float32Tag='[object Float32Array]',float64Tag='[object Float64Array]',int8Tag='[object Int8Array]',int16Tag='[object Int16Array]',int32Tag='[object Int32Array]',uint8Tag='[object Uint8Array]',uint8ClampedTag='[object Uint8ClampedArray]',uint16Tag='[object Uint16Array]',uint32Tag='[object Uint32Array]';/** Used to match property names within property paths. */var reIsDeepProp=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,reIsPlainProp=/^\w*$/,reLeadingDot=/^\./,rePropName=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;/** |
|
|
* Used to match `RegExp` |
|
|
* [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). |
|
|
*/var reRegExpChar=/[\\^$.*+?()[\]{}|]/g;/** Used to match backslashes in property paths. */var reEscapeChar=/\\(\\)?/g;/** Used to detect host constructors (Safari). */var reIsHostCtor=/^\[object .+?Constructor\]$/;/** Used to detect unsigned integer values. */var reIsUint=/^(?:0|[1-9]\d*)$/;/** Used to identify `toStringTag` values of typed arrays. */var typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=true;typedArrayTags[argsTag]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dataViewTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=false;/** Detect free variable `global` from Node.js. */var freeGlobal=_typeof2(global)=='object'&&global&&global.Object===Object&&global;/** Detect free variable `self`. */var freeSelf=(typeof self==="undefined"?"undefined":_typeof2(self))=='object'&&self&&self.Object===Object&&self;/** Used as a reference to the global object. */var root=freeGlobal||freeSelf||Function('return this')();/** Detect free variable `exports`. */var freeExports=_typeof2(exports)=='object'&&exports&&!exports.nodeType&&exports;/** Detect free variable `module`. */var freeModule=freeExports&&_typeof2(module)=='object'&&module&&!module.nodeType&&module;/** Detect the popular CommonJS extension `module.exports`. */var moduleExports=freeModule&&freeModule.exports===freeExports;/** Detect free variable `process` from Node.js. */var freeProcess=moduleExports&&freeGlobal.process;/** Used to access faster Node.js helpers. */var nodeUtil=function(){try{return freeProcess&&freeProcess.binding('util');}catch(e){}}();/* Node.js helper references. */var nodeIsTypedArray=nodeUtil&&nodeUtil.isTypedArray;/** |
|
|
* A specialized version of `baseAggregator` for arrays. |
|
|
* |
|
|
* @private |
|
|
* @param {Array} [array] The array to iterate over. |
|
|
* @param {Function} setter The function to set `accumulator` values. |
|
|
* @param {Function} iteratee The iteratee to transform keys. |
|
|
* @param {Object} accumulator The initial aggregated object. |
|
|
* @returns {Function} Returns `accumulator`. |
|
|
*/function arrayAggregator(array,setter,iteratee,accumulator){var index=-1,length=array?array.length:0;while(++index<length){var value=array[index];setter(accumulator,value,iteratee(value),array);}return accumulator;}/** |
|
|
* A specialized version of `_.some` for arrays without support for iteratee |
|
|
* shorthands. |
|
|
* |
|
|
* @private |
|
|
* @param {Array} [array] The array to iterate over. |
|
|
* @param {Function} predicate The function invoked per iteration. |
|
|
* @returns {boolean} Returns `true` if any element passes the predicate check, |
|
|
* else `false`. |
|
|
*/function arraySome(array,predicate){var index=-1,length=array?array.length:0;while(++index<length){if(predicate(array[index],index,array)){return true;}}return false;}/** |
|
|
* The base implementation of `_.property` without support for deep paths. |
|
|
* |
|
|
* @private |
|
|
* @param {string} key The key of the property to get. |
|
|
* @returns {Function} Returns the new accessor function. |
|
|
*/function baseProperty(key){return function(object){return object==null?undefined:object[key];};}/** |
|
|
* The base implementation of `_.times` without support for iteratee shorthands |
|
|
* or max array length checks. |
|
|
* |
|
|
* @private |
|
|
* @param {number} n The number of times to invoke `iteratee`. |
|
|
* @param {Function} iteratee The function invoked per iteration. |
|
|
* @returns {Array} Returns the array of results. |
|
|
*/function baseTimes(n,iteratee){var index=-1,result=Array(n);while(++index<n){result[index]=iteratee(index);}return result;}/** |
|
|
* The base implementation of `_.unary` without support for storing metadata. |
|
|
* |
|
|
* @private |
|
|
* @param {Function} func The function to cap arguments for. |
|
|
* @returns {Function} Returns the new capped function. |
|
|
*/function baseUnary(func){return function(value){return func(value);};}/** |
|
|
* Gets the value at `key` of `object`. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} [object] The object to query. |
|
|
* @param {string} key The key of the property to get. |
|
|
* @returns {*} Returns the property value. |
|
|
*/function getValue(object,key){return object==null?undefined:object[key];}/** |
|
|
* Checks if `value` is a host object in IE < 9. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is a host object, else `false`. |
|
|
*/function isHostObject(value){// Many host objects are `Object` objects that can coerce to strings |
|
|
// despite having improperly defined `toString` methods. |
|
|
var result=false;if(value!=null&&typeof value.toString!='function'){try{result=!!(value+'');}catch(e){}}return result;}/** |
|
|
* Converts `map` to its key-value pairs. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} map The map to convert. |
|
|
* @returns {Array} Returns the key-value pairs. |
|
|
*/function mapToArray(map){var index=-1,result=Array(map.size);map.forEach(function(value,key){result[++index]=[key,value];});return result;}/** |
|
|
* Creates a unary function that invokes `func` with its argument transformed. |
|
|
* |
|
|
* @private |
|
|
* @param {Function} func The function to wrap. |
|
|
* @param {Function} transform The argument transform. |
|
|
* @returns {Function} Returns the new function. |
|
|
*/function overArg(func,transform){return function(arg){return func(transform(arg));};}/** |
|
|
* Converts `set` to an array of its values. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} set The set to convert. |
|
|
* @returns {Array} Returns the values. |
|
|
*/function setToArray(set){var index=-1,result=Array(set.size);set.forEach(function(value){result[++index]=value;});return result;}/** Used for built-in method references. */var arrayProto=Array.prototype,funcProto=Function.prototype,objectProto=Object.prototype;/** Used to detect overreaching core-js shims. */var coreJsData=root['__core-js_shared__'];/** Used to detect methods masquerading as native. */var maskSrcKey=function(){var uid=/[^.]+$/.exec(coreJsData&&coreJsData.keys&&coreJsData.keys.IE_PROTO||'');return uid?'Symbol(src)_1.'+uid:'';}();/** Used to resolve the decompiled source of functions. */var funcToString=funcProto.toString;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/** |
|
|
* Used to resolve the |
|
|
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) |
|
|
* of values. |
|
|
*/var objectToString=objectProto.toString;/** Used to detect if a method is native. */var reIsNative=RegExp('^'+funcToString.call(hasOwnProperty).replace(reRegExpChar,'\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,'$1.*?')+'$');/** Built-in value references. */var _Symbol5=root.Symbol,Uint8Array=root.Uint8Array,propertyIsEnumerable=objectProto.propertyIsEnumerable,splice=arrayProto.splice;/* Built-in method references for those with the same name as other `lodash` methods. */var nativeKeys=overArg(Object.keys,Object);/* Built-in method references that are verified to be native. */var DataView=getNative(root,'DataView'),Map=getNative(root,'Map'),Promise=getNative(root,'Promise'),Set=getNative(root,'Set'),WeakMap=getNative(root,'WeakMap'),nativeCreate=getNative(Object,'create');/** Used to detect maps, sets, and weakmaps. */var dataViewCtorString=toSource(DataView),mapCtorString=toSource(Map),promiseCtorString=toSource(Promise),setCtorString=toSource(Set),weakMapCtorString=toSource(WeakMap);/** Used to convert symbols to primitives and strings. */var symbolProto=_Symbol5?_Symbol5.prototype:undefined,symbolValueOf=symbolProto?symbolProto.valueOf:undefined,symbolToString=symbolProto?symbolProto.toString:undefined;/** |
|
|
* Creates a hash object. |
|
|
* |
|
|
* @private |
|
|
* @constructor |
|
|
* @param {Array} [entries] The key-value pairs to cache. |
|
|
*/function Hash(entries){var index=-1,length=entries?entries.length:0;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}/** |
|
|
* Removes all key-value entries from the hash. |
|
|
* |
|
|
* @private |
|
|
* @name clear |
|
|
* @memberOf Hash |
|
|
*/function hashClear(){this.__data__=nativeCreate?nativeCreate(null):{};}/** |
|
|
* Removes `key` and its value from the hash. |
|
|
* |
|
|
* @private |
|
|
* @name delete |
|
|
* @memberOf Hash |
|
|
* @param {Object} hash The hash to modify. |
|
|
* @param {string} key The key of the value to remove. |
|
|
* @returns {boolean} Returns `true` if the entry was removed, else `false`. |
|
|
*/function hashDelete(key){return this.has(key)&&delete this.__data__[key];}/** |
|
|
* Gets the hash value for `key`. |
|
|
* |
|
|
* @private |
|
|
* @name get |
|
|
* @memberOf Hash |
|
|
* @param {string} key The key of the value to get. |
|
|
* @returns {*} Returns the entry value. |
|
|
*/function hashGet(key){var data=this.__data__;if(nativeCreate){var result=data[key];return result===HASH_UNDEFINED?undefined:result;}return hasOwnProperty.call(data,key)?data[key]:undefined;}/** |
|
|
* Checks if a hash value for `key` exists. |
|
|
* |
|
|
* @private |
|
|
* @name has |
|
|
* @memberOf Hash |
|
|
* @param {string} key The key of the entry to check. |
|
|
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. |
|
|
*/function hashHas(key){var data=this.__data__;return nativeCreate?data[key]!==undefined:hasOwnProperty.call(data,key);}/** |
|
|
* Sets the hash `key` to `value`. |
|
|
* |
|
|
* @private |
|
|
* @name set |
|
|
* @memberOf Hash |
|
|
* @param {string} key The key of the value to set. |
|
|
* @param {*} value The value to set. |
|
|
* @returns {Object} Returns the hash instance. |
|
|
*/function hashSet(key,value){var data=this.__data__;data[key]=nativeCreate&&value===undefined?HASH_UNDEFINED:value;return this;}// Add methods to `Hash`. |
|
|
Hash.prototype.clear=hashClear;Hash.prototype['delete']=hashDelete;Hash.prototype.get=hashGet;Hash.prototype.has=hashHas;Hash.prototype.set=hashSet;/** |
|
|
* Creates an list cache object. |
|
|
* |
|
|
* @private |
|
|
* @constructor |
|
|
* @param {Array} [entries] The key-value pairs to cache. |
|
|
*/function ListCache(entries){var index=-1,length=entries?entries.length:0;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}/** |
|
|
* Removes all key-value entries from the list cache. |
|
|
* |
|
|
* @private |
|
|
* @name clear |
|
|
* @memberOf ListCache |
|
|
*/function listCacheClear(){this.__data__=[];}/** |
|
|
* Removes `key` and its value from the list cache. |
|
|
* |
|
|
* @private |
|
|
* @name delete |
|
|
* @memberOf ListCache |
|
|
* @param {string} key The key of the value to remove. |
|
|
* @returns {boolean} Returns `true` if the entry was removed, else `false`. |
|
|
*/function listCacheDelete(key){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){return false;}var lastIndex=data.length-1;if(index==lastIndex){data.pop();}else{splice.call(data,index,1);}return true;}/** |
|
|
* Gets the list cache value for `key`. |
|
|
* |
|
|
* @private |
|
|
* @name get |
|
|
* @memberOf ListCache |
|
|
* @param {string} key The key of the value to get. |
|
|
* @returns {*} Returns the entry value. |
|
|
*/function listCacheGet(key){var data=this.__data__,index=assocIndexOf(data,key);return index<0?undefined:data[index][1];}/** |
|
|
* Checks if a list cache value for `key` exists. |
|
|
* |
|
|
* @private |
|
|
* @name has |
|
|
* @memberOf ListCache |
|
|
* @param {string} key The key of the entry to check. |
|
|
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. |
|
|
*/function listCacheHas(key){return assocIndexOf(this.__data__,key)>-1;}/** |
|
|
* Sets the list cache `key` to `value`. |
|
|
* |
|
|
* @private |
|
|
* @name set |
|
|
* @memberOf ListCache |
|
|
* @param {string} key The key of the value to set. |
|
|
* @param {*} value The value to set. |
|
|
* @returns {Object} Returns the list cache instance. |
|
|
*/function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){data.push([key,value]);}else{data[index][1]=value;}return this;}// Add methods to `ListCache`. |
|
|
ListCache.prototype.clear=listCacheClear;ListCache.prototype['delete']=listCacheDelete;ListCache.prototype.get=listCacheGet;ListCache.prototype.has=listCacheHas;ListCache.prototype.set=listCacheSet;/** |
|
|
* Creates a map cache object to store key-value pairs. |
|
|
* |
|
|
* @private |
|
|
* @constructor |
|
|
* @param {Array} [entries] The key-value pairs to cache. |
|
|
*/function MapCache(entries){var index=-1,length=entries?entries.length:0;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}/** |
|
|
* Removes all key-value entries from the map. |
|
|
* |
|
|
* @private |
|
|
* @name clear |
|
|
* @memberOf MapCache |
|
|
*/function mapCacheClear(){this.__data__={'hash':new Hash(),'map':new(Map||ListCache)(),'string':new Hash()};}/** |
|
|
* Removes `key` and its value from the map. |
|
|
* |
|
|
* @private |
|
|
* @name delete |
|
|
* @memberOf MapCache |
|
|
* @param {string} key The key of the value to remove. |
|
|
* @returns {boolean} Returns `true` if the entry was removed, else `false`. |
|
|
*/function mapCacheDelete(key){return getMapData(this,key)['delete'](key);}/** |
|
|
* Gets the map value for `key`. |
|
|
* |
|
|
* @private |
|
|
* @name get |
|
|
* @memberOf MapCache |
|
|
* @param {string} key The key of the value to get. |
|
|
* @returns {*} Returns the entry value. |
|
|
*/function mapCacheGet(key){return getMapData(this,key).get(key);}/** |
|
|
* Checks if a map value for `key` exists. |
|
|
* |
|
|
* @private |
|
|
* @name has |
|
|
* @memberOf MapCache |
|
|
* @param {string} key The key of the entry to check. |
|
|
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. |
|
|
*/function mapCacheHas(key){return getMapData(this,key).has(key);}/** |
|
|
* Sets the map `key` to `value`. |
|
|
* |
|
|
* @private |
|
|
* @name set |
|
|
* @memberOf MapCache |
|
|
* @param {string} key The key of the value to set. |
|
|
* @param {*} value The value to set. |
|
|
* @returns {Object} Returns the map cache instance. |
|
|
*/function mapCacheSet(key,value){getMapData(this,key).set(key,value);return this;}// Add methods to `MapCache`. |
|
|
MapCache.prototype.clear=mapCacheClear;MapCache.prototype['delete']=mapCacheDelete;MapCache.prototype.get=mapCacheGet;MapCache.prototype.has=mapCacheHas;MapCache.prototype.set=mapCacheSet;/** |
|
|
* |
|
|
* Creates an array cache object to store unique values. |
|
|
* |
|
|
* @private |
|
|
* @constructor |
|
|
* @param {Array} [values] The values to cache. |
|
|
*/function SetCache(values){var index=-1,length=values?values.length:0;this.__data__=new MapCache();while(++index<length){this.add(values[index]);}}/** |
|
|
* Adds `value` to the array cache. |
|
|
* |
|
|
* @private |
|
|
* @name add |
|
|
* @memberOf SetCache |
|
|
* @alias push |
|
|
* @param {*} value The value to cache. |
|
|
* @returns {Object} Returns the cache instance. |
|
|
*/function setCacheAdd(value){this.__data__.set(value,HASH_UNDEFINED);return this;}/** |
|
|
* Checks if `value` is in the array cache. |
|
|
* |
|
|
* @private |
|
|
* @name has |
|
|
* @memberOf SetCache |
|
|
* @param {*} value The value to search for. |
|
|
* @returns {number} Returns `true` if `value` is found, else `false`. |
|
|
*/function setCacheHas(value){return this.__data__.has(value);}// Add methods to `SetCache`. |
|
|
SetCache.prototype.add=SetCache.prototype.push=setCacheAdd;SetCache.prototype.has=setCacheHas;/** |
|
|
* Creates a stack cache object to store key-value pairs. |
|
|
* |
|
|
* @private |
|
|
* @constructor |
|
|
* @param {Array} [entries] The key-value pairs to cache. |
|
|
*/function Stack(entries){this.__data__=new ListCache(entries);}/** |
|
|
* Removes all key-value entries from the stack. |
|
|
* |
|
|
* @private |
|
|
* @name clear |
|
|
* @memberOf Stack |
|
|
*/function stackClear(){this.__data__=new ListCache();}/** |
|
|
* Removes `key` and its value from the stack. |
|
|
* |
|
|
* @private |
|
|
* @name delete |
|
|
* @memberOf Stack |
|
|
* @param {string} key The key of the value to remove. |
|
|
* @returns {boolean} Returns `true` if the entry was removed, else `false`. |
|
|
*/function stackDelete(key){return this.__data__['delete'](key);}/** |
|
|
* Gets the stack value for `key`. |
|
|
* |
|
|
* @private |
|
|
* @name get |
|
|
* @memberOf Stack |
|
|
* @param {string} key The key of the value to get. |
|
|
* @returns {*} Returns the entry value. |
|
|
*/function stackGet(key){return this.__data__.get(key);}/** |
|
|
* Checks if a stack value for `key` exists. |
|
|
* |
|
|
* @private |
|
|
* @name has |
|
|
* @memberOf Stack |
|
|
* @param {string} key The key of the entry to check. |
|
|
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. |
|
|
*/function stackHas(key){return this.__data__.has(key);}/** |
|
|
* Sets the stack `key` to `value`. |
|
|
* |
|
|
* @private |
|
|
* @name set |
|
|
* @memberOf Stack |
|
|
* @param {string} key The key of the value to set. |
|
|
* @param {*} value The value to set. |
|
|
* @returns {Object} Returns the stack cache instance. |
|
|
*/function stackSet(key,value){var cache=this.__data__;if(cache instanceof ListCache){var pairs=cache.__data__;if(!Map||pairs.length<LARGE_ARRAY_SIZE-1){pairs.push([key,value]);return this;}cache=this.__data__=new MapCache(pairs);}cache.set(key,value);return this;}// Add methods to `Stack`. |
|
|
Stack.prototype.clear=stackClear;Stack.prototype['delete']=stackDelete;Stack.prototype.get=stackGet;Stack.prototype.has=stackHas;Stack.prototype.set=stackSet;/** |
|
|
* Creates an array of the enumerable property names of the array-like `value`. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to query. |
|
|
* @param {boolean} inherited Specify returning inherited property names. |
|
|
* @returns {Array} Returns the array of property names. |
|
|
*/function arrayLikeKeys(value,inherited){// Safari 8.1 makes `arguments.callee` enumerable in strict mode. |
|
|
// Safari 9 makes `arguments.length` enumerable in strict mode. |
|
|
var result=isArray(value)||isArguments(value)?baseTimes(value.length,String):[];var length=result.length,skipIndexes=!!length;for(var key in value){if((inherited||hasOwnProperty.call(value,key))&&!(skipIndexes&&(key=='length'||isIndex(key,length)))){result.push(key);}}return result;}/** |
|
|
* Gets the index at which the `key` is found in `array` of key-value pairs. |
|
|
* |
|
|
* @private |
|
|
* @param {Array} array The array to inspect. |
|
|
* @param {*} key The key to search for. |
|
|
* @returns {number} Returns the index of the matched value, else `-1`. |
|
|
*/function assocIndexOf(array,key){var length=array.length;while(length--){if(eq(array[length][0],key)){return length;}}return-1;}/** |
|
|
* Aggregates elements of `collection` on `accumulator` with keys transformed |
|
|
* by `iteratee` and values set by `setter`. |
|
|
* |
|
|
* @private |
|
|
* @param {Array|Object} collection The collection to iterate over. |
|
|
* @param {Function} setter The function to set `accumulator` values. |
|
|
* @param {Function} iteratee The iteratee to transform keys. |
|
|
* @param {Object} accumulator The initial aggregated object. |
|
|
* @returns {Function} Returns `accumulator`. |
|
|
*/function baseAggregator(collection,setter,iteratee,accumulator){baseEach(collection,function(value,key,collection){setter(accumulator,value,iteratee(value),collection);});return accumulator;}/** |
|
|
* The base implementation of `_.forEach` without support for iteratee shorthands. |
|
|
* |
|
|
* @private |
|
|
* @param {Array|Object} collection The collection to iterate over. |
|
|
* @param {Function} iteratee The function invoked per iteration. |
|
|
* @returns {Array|Object} Returns `collection`. |
|
|
*/var baseEach=createBaseEach(baseForOwn);/** |
|
|
* The base implementation of `baseForOwn` which iterates over `object` |
|
|
* properties returned by `keysFunc` and invokes `iteratee` for each property. |
|
|
* Iteratee functions may exit iteration early by explicitly returning `false`. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} object The object to iterate over. |
|
|
* @param {Function} iteratee The function invoked per iteration. |
|
|
* @param {Function} keysFunc The function to get the keys of `object`. |
|
|
* @returns {Object} Returns `object`. |
|
|
*/var baseFor=createBaseFor();/** |
|
|
* The base implementation of `_.forOwn` without support for iteratee shorthands. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} object The object to iterate over. |
|
|
* @param {Function} iteratee The function invoked per iteration. |
|
|
* @returns {Object} Returns `object`. |
|
|
*/function baseForOwn(object,iteratee){return object&&baseFor(object,iteratee,keys);}/** |
|
|
* The base implementation of `_.get` without support for default values. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} object The object to query. |
|
|
* @param {Array|string} path The path of the property to get. |
|
|
* @returns {*} Returns the resolved value. |
|
|
*/function baseGet(object,path){path=isKey(path,object)?[path]:castPath(path);var index=0,length=path.length;while(object!=null&&index<length){object=object[toKey(path[index++])];}return index&&index==length?object:undefined;}/** |
|
|
* The base implementation of `getTag`. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to query. |
|
|
* @returns {string} Returns the `toStringTag`. |
|
|
*/function baseGetTag(value){return objectToString.call(value);}/** |
|
|
* The base implementation of `_.hasIn` without support for deep paths. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} [object] The object to query. |
|
|
* @param {Array|string} key The key to check. |
|
|
* @returns {boolean} Returns `true` if `key` exists, else `false`. |
|
|
*/function baseHasIn(object,key){return object!=null&&key in Object(object);}/** |
|
|
* The base implementation of `_.isEqual` which supports partial comparisons |
|
|
* and tracks traversed objects. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to compare. |
|
|
* @param {*} other The other value to compare. |
|
|
* @param {Function} [customizer] The function to customize comparisons. |
|
|
* @param {boolean} [bitmask] The bitmask of comparison flags. |
|
|
* The bitmask may be composed of the following flags: |
|
|
* 1 - Unordered comparison |
|
|
* 2 - Partial comparison |
|
|
* @param {Object} [stack] Tracks traversed `value` and `other` objects. |
|
|
* @returns {boolean} Returns `true` if the values are equivalent, else `false`. |
|
|
*/function baseIsEqual(value,other,customizer,bitmask,stack){if(value===other){return true;}if(value==null||other==null||!isObject(value)&&!isObjectLike(other)){return value!==value&&other!==other;}return baseIsEqualDeep(value,other,baseIsEqual,customizer,bitmask,stack);}/** |
|
|
* A specialized version of `baseIsEqual` for arrays and objects which performs |
|
|
* deep comparisons and tracks traversed objects enabling objects with circular |
|
|
* references to be compared. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} object The object to compare. |
|
|
* @param {Object} other The other object to compare. |
|
|
* @param {Function} equalFunc The function to determine equivalents of values. |
|
|
* @param {Function} [customizer] The function to customize comparisons. |
|
|
* @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` |
|
|
* for more details. |
|
|
* @param {Object} [stack] Tracks traversed `object` and `other` objects. |
|
|
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`. |
|
|
*/function baseIsEqualDeep(object,other,equalFunc,customizer,bitmask,stack){var objIsArr=isArray(object),othIsArr=isArray(other),objTag=arrayTag,othTag=arrayTag;if(!objIsArr){objTag=getTag(object);objTag=objTag==argsTag?objectTag:objTag;}if(!othIsArr){othTag=getTag(other);othTag=othTag==argsTag?objectTag:othTag;}var objIsObj=objTag==objectTag&&!isHostObject(object),othIsObj=othTag==objectTag&&!isHostObject(other),isSameTag=objTag==othTag;if(isSameTag&&!objIsObj){stack||(stack=new Stack());return objIsArr||isTypedArray(object)?equalArrays(object,other,equalFunc,customizer,bitmask,stack):equalByTag(object,other,objTag,equalFunc,customizer,bitmask,stack);}if(!(bitmask&PARTIAL_COMPARE_FLAG)){var objIsWrapped=objIsObj&&hasOwnProperty.call(object,'__wrapped__'),othIsWrapped=othIsObj&&hasOwnProperty.call(other,'__wrapped__');if(objIsWrapped||othIsWrapped){var objUnwrapped=objIsWrapped?object.value():object,othUnwrapped=othIsWrapped?other.value():other;stack||(stack=new Stack());return equalFunc(objUnwrapped,othUnwrapped,customizer,bitmask,stack);}}if(!isSameTag){return false;}stack||(stack=new Stack());return equalObjects(object,other,equalFunc,customizer,bitmask,stack);}/** |
|
|
* The base implementation of `_.isMatch` without support for iteratee shorthands. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} object The object to inspect. |
|
|
* @param {Object} source The object of property values to match. |
|
|
* @param {Array} matchData The property names, values, and compare flags to match. |
|
|
* @param {Function} [customizer] The function to customize comparisons. |
|
|
* @returns {boolean} Returns `true` if `object` is a match, else `false`. |
|
|
*/function baseIsMatch(object,source,matchData,customizer){var index=matchData.length,length=index,noCustomizer=!customizer;if(object==null){return!length;}object=Object(object);while(index--){var data=matchData[index];if(noCustomizer&&data[2]?data[1]!==object[data[0]]:!(data[0]in object)){return false;}}while(++index<length){data=matchData[index];var key=data[0],objValue=object[key],srcValue=data[1];if(noCustomizer&&data[2]){if(objValue===undefined&&!(key in object)){return false;}}else{var stack=new Stack();if(customizer){var result=customizer(objValue,srcValue,key,object,source,stack);}if(!(result===undefined?baseIsEqual(srcValue,objValue,customizer,UNORDERED_COMPARE_FLAG|PARTIAL_COMPARE_FLAG,stack):result)){return false;}}}return true;}/** |
|
|
* The base implementation of `_.isNative` without bad shim checks. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is a native function, |
|
|
* else `false`. |
|
|
*/function baseIsNative(value){if(!isObject(value)||isMasked(value)){return false;}var pattern=isFunction(value)||isHostObject(value)?reIsNative:reIsHostCtor;return pattern.test(toSource(value));}/** |
|
|
* The base implementation of `_.isTypedArray` without Node.js optimizations. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is a typed array, else `false`. |
|
|
*/function baseIsTypedArray(value){return isObjectLike(value)&&isLength(value.length)&&!!typedArrayTags[objectToString.call(value)];}/** |
|
|
* The base implementation of `_.iteratee`. |
|
|
* |
|
|
* @private |
|
|
* @param {*} [value=_.identity] The value to convert to an iteratee. |
|
|
* @returns {Function} Returns the iteratee. |
|
|
*/function baseIteratee(value){// Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. |
|
|
// See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. |
|
|
if(typeof value=='function'){return value;}if(value==null){return identity;}if(_typeof2(value)=='object'){return isArray(value)?baseMatchesProperty(value[0],value[1]):baseMatches(value);}return property(value);}/** |
|
|
* The base implementation of `_.keys` which doesn't treat sparse arrays as dense. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} object The object to query. |
|
|
* @returns {Array} Returns the array of property names. |
|
|
*/function baseKeys(object){if(!isPrototype(object)){return nativeKeys(object);}var result=[];for(var key in Object(object)){if(hasOwnProperty.call(object,key)&&key!='constructor'){result.push(key);}}return result;}/** |
|
|
* The base implementation of `_.matches` which doesn't clone `source`. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} source The object of property values to match. |
|
|
* @returns {Function} Returns the new spec function. |
|
|
*/function baseMatches(source){var matchData=getMatchData(source);if(matchData.length==1&&matchData[0][2]){return matchesStrictComparable(matchData[0][0],matchData[0][1]);}return function(object){return object===source||baseIsMatch(object,source,matchData);};}/** |
|
|
* The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. |
|
|
* |
|
|
* @private |
|
|
* @param {string} path The path of the property to get. |
|
|
* @param {*} srcValue The value to match. |
|
|
* @returns {Function} Returns the new spec function. |
|
|
*/function baseMatchesProperty(path,srcValue){if(isKey(path)&&isStrictComparable(srcValue)){return matchesStrictComparable(toKey(path),srcValue);}return function(object){var objValue=get(object,path);return objValue===undefined&&objValue===srcValue?hasIn(object,path):baseIsEqual(srcValue,objValue,undefined,UNORDERED_COMPARE_FLAG|PARTIAL_COMPARE_FLAG);};}/** |
|
|
* A specialized version of `baseProperty` which supports deep paths. |
|
|
* |
|
|
* @private |
|
|
* @param {Array|string} path The path of the property to get. |
|
|
* @returns {Function} Returns the new accessor function. |
|
|
*/function basePropertyDeep(path){return function(object){return baseGet(object,path);};}/** |
|
|
* The base implementation of `_.toString` which doesn't convert nullish |
|
|
* values to empty strings. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to process. |
|
|
* @returns {string} Returns the string. |
|
|
*/function baseToString(value){// Exit early for strings to avoid a performance hit in some environments. |
|
|
if(typeof value=='string'){return value;}if(isSymbol(value)){return symbolToString?symbolToString.call(value):'';}var result=value+'';return result=='0'&&1/value==-INFINITY?'-0':result;}/** |
|
|
* Casts `value` to a path array if it's not one. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to inspect. |
|
|
* @returns {Array} Returns the cast property path array. |
|
|
*/function castPath(value){return isArray(value)?value:stringToPath(value);}/** |
|
|
* Creates a function like `_.groupBy`. |
|
|
* |
|
|
* @private |
|
|
* @param {Function} setter The function to set accumulator values. |
|
|
* @param {Function} [initializer] The accumulator object initializer. |
|
|
* @returns {Function} Returns the new aggregator function. |
|
|
*/function createAggregator(setter,initializer){return function(collection,iteratee){var func=isArray(collection)?arrayAggregator:baseAggregator,accumulator=initializer?initializer():{};return func(collection,setter,baseIteratee(iteratee,2),accumulator);};}/** |
|
|
* Creates a `baseEach` or `baseEachRight` function. |
|
|
* |
|
|
* @private |
|
|
* @param {Function} eachFunc The function to iterate over a collection. |
|
|
* @param {boolean} [fromRight] Specify iterating from right to left. |
|
|
* @returns {Function} Returns the new base function. |
|
|
*/function createBaseEach(eachFunc,fromRight){return function(collection,iteratee){if(collection==null){return collection;}if(!isArrayLike(collection)){return eachFunc(collection,iteratee);}var length=collection.length,index=fromRight?length:-1,iterable=Object(collection);while(fromRight?index--:++index<length){if(iteratee(iterable[index],index,iterable)===false){break;}}return collection;};}/** |
|
|
* Creates a base function for methods like `_.forIn` and `_.forOwn`. |
|
|
* |
|
|
* @private |
|
|
* @param {boolean} [fromRight] Specify iterating from right to left. |
|
|
* @returns {Function} Returns the new base function. |
|
|
*/function createBaseFor(fromRight){return function(object,iteratee,keysFunc){var index=-1,iterable=Object(object),props=keysFunc(object),length=props.length;while(length--){var key=props[fromRight?length:++index];if(iteratee(iterable[key],key,iterable)===false){break;}}return object;};}/** |
|
|
* A specialized version of `baseIsEqualDeep` for arrays with support for |
|
|
* partial deep comparisons. |
|
|
* |
|
|
* @private |
|
|
* @param {Array} array The array to compare. |
|
|
* @param {Array} other The other array to compare. |
|
|
* @param {Function} equalFunc The function to determine equivalents of values. |
|
|
* @param {Function} customizer The function to customize comparisons. |
|
|
* @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` |
|
|
* for more details. |
|
|
* @param {Object} stack Tracks traversed `array` and `other` objects. |
|
|
* @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. |
|
|
*/function equalArrays(array,other,equalFunc,customizer,bitmask,stack){var isPartial=bitmask&PARTIAL_COMPARE_FLAG,arrLength=array.length,othLength=other.length;if(arrLength!=othLength&&!(isPartial&&othLength>arrLength)){return false;}// Assume cyclic values are equal. |
|
|
var stacked=stack.get(array);if(stacked&&stack.get(other)){return stacked==other;}var index=-1,result=true,seen=bitmask&UNORDERED_COMPARE_FLAG?new SetCache():undefined;stack.set(array,other);stack.set(other,array);// Ignore non-index properties. |
|
|
while(++index<arrLength){var arrValue=array[index],othValue=other[index];if(customizer){var compared=isPartial?customizer(othValue,arrValue,index,other,array,stack):customizer(arrValue,othValue,index,array,other,stack);}if(compared!==undefined){if(compared){continue;}result=false;break;}// Recursively compare arrays (susceptible to call stack limits). |
|
|
if(seen){if(!arraySome(other,function(othValue,othIndex){if(!seen.has(othIndex)&&(arrValue===othValue||equalFunc(arrValue,othValue,customizer,bitmask,stack))){return seen.add(othIndex);}})){result=false;break;}}else if(!(arrValue===othValue||equalFunc(arrValue,othValue,customizer,bitmask,stack))){result=false;break;}}stack['delete'](array);stack['delete'](other);return result;}/** |
|
|
* A specialized version of `baseIsEqualDeep` for comparing objects of |
|
|
* the same `toStringTag`. |
|
|
* |
|
|
* **Note:** This function only supports comparing values with tags of |
|
|
* `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} object The object to compare. |
|
|
* @param {Object} other The other object to compare. |
|
|
* @param {string} tag The `toStringTag` of the objects to compare. |
|
|
* @param {Function} equalFunc The function to determine equivalents of values. |
|
|
* @param {Function} customizer The function to customize comparisons. |
|
|
* @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` |
|
|
* for more details. |
|
|
* @param {Object} stack Tracks traversed `object` and `other` objects. |
|
|
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`. |
|
|
*/function equalByTag(object,other,tag,equalFunc,customizer,bitmask,stack){switch(tag){case dataViewTag:if(object.byteLength!=other.byteLength||object.byteOffset!=other.byteOffset){return false;}object=object.buffer;other=other.buffer;case arrayBufferTag:if(object.byteLength!=other.byteLength||!equalFunc(new Uint8Array(object),new Uint8Array(other))){return false;}return true;case boolTag:case dateTag:case numberTag:// Coerce booleans to `1` or `0` and dates to milliseconds. |
|
|
// Invalid dates are coerced to `NaN`. |
|
|
return eq(+object,+other);case errorTag:return object.name==other.name&&object.message==other.message;case regexpTag:case stringTag:// Coerce regexes to strings and treat strings, primitives and objects, |
|
|
// as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring |
|
|
// for more details. |
|
|
return object==other+'';case mapTag:var convert=mapToArray;case setTag:var isPartial=bitmask&PARTIAL_COMPARE_FLAG;convert||(convert=setToArray);if(object.size!=other.size&&!isPartial){return false;}// Assume cyclic values are equal. |
|
|
var stacked=stack.get(object);if(stacked){return stacked==other;}bitmask|=UNORDERED_COMPARE_FLAG;// Recursively compare objects (susceptible to call stack limits). |
|
|
stack.set(object,other);var result=equalArrays(convert(object),convert(other),equalFunc,customizer,bitmask,stack);stack['delete'](object);return result;case symbolTag:if(symbolValueOf){return symbolValueOf.call(object)==symbolValueOf.call(other);}}return false;}/** |
|
|
* A specialized version of `baseIsEqualDeep` for objects with support for |
|
|
* partial deep comparisons. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} object The object to compare. |
|
|
* @param {Object} other The other object to compare. |
|
|
* @param {Function} equalFunc The function to determine equivalents of values. |
|
|
* @param {Function} customizer The function to customize comparisons. |
|
|
* @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` |
|
|
* for more details. |
|
|
* @param {Object} stack Tracks traversed `object` and `other` objects. |
|
|
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`. |
|
|
*/function equalObjects(object,other,equalFunc,customizer,bitmask,stack){var isPartial=bitmask&PARTIAL_COMPARE_FLAG,objProps=keys(object),objLength=objProps.length,othProps=keys(other),othLength=othProps.length;if(objLength!=othLength&&!isPartial){return false;}var index=objLength;while(index--){var key=objProps[index];if(!(isPartial?key in other:hasOwnProperty.call(other,key))){return false;}}// Assume cyclic values are equal. |
|
|
var stacked=stack.get(object);if(stacked&&stack.get(other)){return stacked==other;}var result=true;stack.set(object,other);stack.set(other,object);var skipCtor=isPartial;while(++index<objLength){key=objProps[index];var objValue=object[key],othValue=other[key];if(customizer){var compared=isPartial?customizer(othValue,objValue,key,other,object,stack):customizer(objValue,othValue,key,object,other,stack);}// Recursively compare objects (susceptible to call stack limits). |
|
|
if(!(compared===undefined?objValue===othValue||equalFunc(objValue,othValue,customizer,bitmask,stack):compared)){result=false;break;}skipCtor||(skipCtor=key=='constructor');}if(result&&!skipCtor){var objCtor=object.constructor,othCtor=other.constructor;// Non `Object` object instances with different constructors are not equal. |
|
|
if(objCtor!=othCtor&&'constructor'in object&&'constructor'in other&&!(typeof objCtor=='function'&&objCtor instanceof objCtor&&typeof othCtor=='function'&&othCtor instanceof othCtor)){result=false;}}stack['delete'](object);stack['delete'](other);return result;}/** |
|
|
* Gets the data for `map`. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} map The map to query. |
|
|
* @param {string} key The reference key. |
|
|
* @returns {*} Returns the map data. |
|
|
*/function getMapData(map,key){var data=map.__data__;return isKeyable(key)?data[typeof key=='string'?'string':'hash']:data.map;}/** |
|
|
* Gets the property names, values, and compare flags of `object`. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} object The object to query. |
|
|
* @returns {Array} Returns the match data of `object`. |
|
|
*/function getMatchData(object){var result=keys(object),length=result.length;while(length--){var key=result[length],value=object[key];result[length]=[key,value,isStrictComparable(value)];}return result;}/** |
|
|
* Gets the native function at `key` of `object`. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} object The object to query. |
|
|
* @param {string} key The key of the method to get. |
|
|
* @returns {*} Returns the function if it's native, else `undefined`. |
|
|
*/function getNative(object,key){var value=getValue(object,key);return baseIsNative(value)?value:undefined;}/** |
|
|
* Gets the `toStringTag` of `value`. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to query. |
|
|
* @returns {string} Returns the `toStringTag`. |
|
|
*/var getTag=baseGetTag;// Fallback for data views, maps, sets, and weak maps in IE 11, |
|
|
// for data views in Edge < 14, and promises in Node.js. |
|
|
if(DataView&&getTag(new DataView(new ArrayBuffer(1)))!=dataViewTag||Map&&getTag(new Map())!=mapTag||Promise&&getTag(Promise.resolve())!=promiseTag||Set&&getTag(new Set())!=setTag||WeakMap&&getTag(new WeakMap())!=weakMapTag){getTag=function getTag(value){var result=objectToString.call(value),Ctor=result==objectTag?value.constructor:undefined,ctorString=Ctor?toSource(Ctor):undefined;if(ctorString){switch(ctorString){case dataViewCtorString:return dataViewTag;case mapCtorString:return mapTag;case promiseCtorString:return promiseTag;case setCtorString:return setTag;case weakMapCtorString:return weakMapTag;}}return result;};}/** |
|
|
* Checks if `path` exists on `object`. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} object The object to query. |
|
|
* @param {Array|string} path The path to check. |
|
|
* @param {Function} hasFunc The function to check properties. |
|
|
* @returns {boolean} Returns `true` if `path` exists, else `false`. |
|
|
*/function hasPath(object,path,hasFunc){path=isKey(path,object)?[path]:castPath(path);var result,index=-1,length=path.length;while(++index<length){var key=toKey(path[index]);if(!(result=object!=null&&hasFunc(object,key))){break;}object=object[key];}if(result){return result;}var length=object?object.length:0;return!!length&&isLength(length)&&isIndex(key,length)&&(isArray(object)||isArguments(object));}/** |
|
|
* Checks if `value` is a valid array-like index. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to check. |
|
|
* @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. |
|
|
* @returns {boolean} Returns `true` if `value` is a valid index, else `false`. |
|
|
*/function isIndex(value,length){length=length==null?MAX_SAFE_INTEGER:length;return!!length&&(typeof value=='number'||reIsUint.test(value))&&value>-1&&value%1==0&&value<length;}/** |
|
|
* Checks if `value` is a property name and not a property path. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to check. |
|
|
* @param {Object} [object] The object to query keys on. |
|
|
* @returns {boolean} Returns `true` if `value` is a property name, else `false`. |
|
|
*/function isKey(value,object){if(isArray(value)){return false;}var type=_typeof2(value);if(type=='number'||type=='symbol'||type=='boolean'||value==null||isSymbol(value)){return true;}return reIsPlainProp.test(value)||!reIsDeepProp.test(value)||object!=null&&value in Object(object);}/** |
|
|
* Checks if `value` is suitable for use as unique object key. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is suitable, else `false`. |
|
|
*/function isKeyable(value){var type=_typeof2(value);return type=='string'||type=='number'||type=='symbol'||type=='boolean'?value!=='__proto__':value===null;}/** |
|
|
* Checks if `func` has its source masked. |
|
|
* |
|
|
* @private |
|
|
* @param {Function} func The function to check. |
|
|
* @returns {boolean} Returns `true` if `func` is masked, else `false`. |
|
|
*/function isMasked(func){return!!maskSrcKey&&maskSrcKey in func;}/** |
|
|
* Checks if `value` is likely a prototype object. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is a prototype, else `false`. |
|
|
*/function isPrototype(value){var Ctor=value&&value.constructor,proto=typeof Ctor=='function'&&Ctor.prototype||objectProto;return value===proto;}/** |
|
|
* Checks if `value` is suitable for strict equality comparisons, i.e. `===`. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` if suitable for strict |
|
|
* equality comparisons, else `false`. |
|
|
*/function isStrictComparable(value){return value===value&&!isObject(value);}/** |
|
|
* A specialized version of `matchesProperty` for source values suitable |
|
|
* for strict equality comparisons, i.e. `===`. |
|
|
* |
|
|
* @private |
|
|
* @param {string} key The key of the property to get. |
|
|
* @param {*} srcValue The value to match. |
|
|
* @returns {Function} Returns the new spec function. |
|
|
*/function matchesStrictComparable(key,srcValue){return function(object){if(object==null){return false;}return object[key]===srcValue&&(srcValue!==undefined||key in Object(object));};}/** |
|
|
* Converts `string` to a property path array. |
|
|
* |
|
|
* @private |
|
|
* @param {string} string The string to convert. |
|
|
* @returns {Array} Returns the property path array. |
|
|
*/var stringToPath=memoize(function(string){string=toString(string);var result=[];if(reLeadingDot.test(string)){result.push('');}string.replace(rePropName,function(match,number,quote,string){result.push(quote?string.replace(reEscapeChar,'$1'):number||match);});return result;});/** |
|
|
* Converts `value` to a string key if it's not a string or symbol. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to inspect. |
|
|
* @returns {string|symbol} Returns the key. |
|
|
*/function toKey(value){if(typeof value=='string'||isSymbol(value)){return value;}var result=value+'';return result=='0'&&1/value==-INFINITY?'-0':result;}/** |
|
|
* Converts `func` to its source code. |
|
|
* |
|
|
* @private |
|
|
* @param {Function} func The function to process. |
|
|
* @returns {string} Returns the source code. |
|
|
*/function toSource(func){if(func!=null){try{return funcToString.call(func);}catch(e){}try{return func+'';}catch(e){}}return'';}/** |
|
|
* Creates an object composed of keys generated from the results of running |
|
|
* each element of `collection` thru `iteratee`. The order of grouped values |
|
|
* is determined by the order they occur in `collection`. The corresponding |
|
|
* value of each key is an array of elements responsible for generating the |
|
|
* key. The iteratee is invoked with one argument: (value). |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 0.1.0 |
|
|
* @category Collection |
|
|
* @param {Array|Object} collection The collection to iterate over. |
|
|
* @param {Function} [iteratee=_.identity] |
|
|
* The iteratee to transform keys. |
|
|
* @returns {Object} Returns the composed aggregate object. |
|
|
* @example |
|
|
* |
|
|
* _.groupBy([6.1, 4.2, 6.3], Math.floor); |
|
|
* // => { '4': [4.2], '6': [6.1, 6.3] } |
|
|
* |
|
|
* // The `_.property` iteratee shorthand. |
|
|
* _.groupBy(['one', 'two', 'three'], 'length'); |
|
|
* // => { '3': ['one', 'two'], '5': ['three'] } |
|
|
*/var groupBy=createAggregator(function(result,value,key){if(hasOwnProperty.call(result,key)){result[key].push(value);}else{result[key]=[value];}});/** |
|
|
* Creates a function that memoizes the result of `func`. If `resolver` is |
|
|
* provided, it determines the cache key for storing the result based on the |
|
|
* arguments provided to the memoized function. By default, the first argument |
|
|
* provided to the memoized function is used as the map cache key. The `func` |
|
|
* is invoked with the `this` binding of the memoized function. |
|
|
* |
|
|
* **Note:** The cache is exposed as the `cache` property on the memoized |
|
|
* function. Its creation may be customized by replacing the `_.memoize.Cache` |
|
|
* constructor with one whose instances implement the |
|
|
* [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) |
|
|
* method interface of `delete`, `get`, `has`, and `set`. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 0.1.0 |
|
|
* @category Function |
|
|
* @param {Function} func The function to have its output memoized. |
|
|
* @param {Function} [resolver] The function to resolve the cache key. |
|
|
* @returns {Function} Returns the new memoized function. |
|
|
* @example |
|
|
* |
|
|
* var object = { 'a': 1, 'b': 2 }; |
|
|
* var other = { 'c': 3, 'd': 4 }; |
|
|
* |
|
|
* var values = _.memoize(_.values); |
|
|
* values(object); |
|
|
* // => [1, 2] |
|
|
* |
|
|
* values(other); |
|
|
* // => [3, 4] |
|
|
* |
|
|
* object.a = 2; |
|
|
* values(object); |
|
|
* // => [1, 2] |
|
|
* |
|
|
* // Modify the result cache. |
|
|
* values.cache.set(object, ['a', 'b']); |
|
|
* values(object); |
|
|
* // => ['a', 'b'] |
|
|
* |
|
|
* // Replace `_.memoize.Cache`. |
|
|
* _.memoize.Cache = WeakMap; |
|
|
*/function memoize(func,resolver){if(typeof func!='function'||resolver&&typeof resolver!='function'){throw new TypeError(FUNC_ERROR_TEXT);}var memoized=function memoized(){var args=arguments,key=resolver?resolver.apply(this,args):args[0],cache=memoized.cache;if(cache.has(key)){return cache.get(key);}var result=func.apply(this,args);memoized.cache=cache.set(key,result);return result;};memoized.cache=new(memoize.Cache||MapCache)();return memoized;}// Assign cache to `_.memoize`. |
|
|
memoize.Cache=MapCache;/** |
|
|
* Performs a |
|
|
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) |
|
|
* comparison between two values to determine if they are equivalent. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 4.0.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to compare. |
|
|
* @param {*} other The other value to compare. |
|
|
* @returns {boolean} Returns `true` if the values are equivalent, else `false`. |
|
|
* @example |
|
|
* |
|
|
* var object = { 'a': 1 }; |
|
|
* var other = { 'a': 1 }; |
|
|
* |
|
|
* _.eq(object, object); |
|
|
* // => true |
|
|
* |
|
|
* _.eq(object, other); |
|
|
* // => false |
|
|
* |
|
|
* _.eq('a', 'a'); |
|
|
* // => true |
|
|
* |
|
|
* _.eq('a', Object('a')); |
|
|
* // => false |
|
|
* |
|
|
* _.eq(NaN, NaN); |
|
|
* // => true |
|
|
*/function eq(value,other){return value===other||value!==value&&other!==other;}/** |
|
|
* Checks if `value` is likely an `arguments` object. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 0.1.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is an `arguments` object, |
|
|
* else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isArguments(function() { return arguments; }()); |
|
|
* // => true |
|
|
* |
|
|
* _.isArguments([1, 2, 3]); |
|
|
* // => false |
|
|
*/function isArguments(value){// Safari 8.1 makes `arguments.callee` enumerable in strict mode. |
|
|
return isArrayLikeObject(value)&&hasOwnProperty.call(value,'callee')&&(!propertyIsEnumerable.call(value,'callee')||objectToString.call(value)==argsTag);}/** |
|
|
* Checks if `value` is classified as an `Array` object. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 0.1.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is an array, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isArray([1, 2, 3]); |
|
|
* // => true |
|
|
* |
|
|
* _.isArray(document.body.children); |
|
|
* // => false |
|
|
* |
|
|
* _.isArray('abc'); |
|
|
* // => false |
|
|
* |
|
|
* _.isArray(_.noop); |
|
|
* // => false |
|
|
*/var isArray=Array.isArray;/** |
|
|
* Checks if `value` is array-like. A value is considered array-like if it's |
|
|
* not a function and has a `value.length` that's an integer greater than or |
|
|
* equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 4.0.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is array-like, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isArrayLike([1, 2, 3]); |
|
|
* // => true |
|
|
* |
|
|
* _.isArrayLike(document.body.children); |
|
|
* // => true |
|
|
* |
|
|
* _.isArrayLike('abc'); |
|
|
* // => true |
|
|
* |
|
|
* _.isArrayLike(_.noop); |
|
|
* // => false |
|
|
*/function isArrayLike(value){return value!=null&&isLength(value.length)&&!isFunction(value);}/** |
|
|
* This method is like `_.isArrayLike` except that it also checks if `value` |
|
|
* is an object. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 4.0.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is an array-like object, |
|
|
* else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isArrayLikeObject([1, 2, 3]); |
|
|
* // => true |
|
|
* |
|
|
* _.isArrayLikeObject(document.body.children); |
|
|
* // => true |
|
|
* |
|
|
* _.isArrayLikeObject('abc'); |
|
|
* // => false |
|
|
* |
|
|
* _.isArrayLikeObject(_.noop); |
|
|
* // => false |
|
|
*/function isArrayLikeObject(value){return isObjectLike(value)&&isArrayLike(value);}/** |
|
|
* Checks if `value` is classified as a `Function` object. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 0.1.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is a function, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isFunction(_); |
|
|
* // => true |
|
|
* |
|
|
* _.isFunction(/abc/); |
|
|
* // => false |
|
|
*/function isFunction(value){// The use of `Object#toString` avoids issues with the `typeof` operator |
|
|
// in Safari 8-9 which returns 'object' for typed array and other constructors. |
|
|
var tag=isObject(value)?objectToString.call(value):'';return tag==funcTag||tag==genTag;}/** |
|
|
* Checks if `value` is a valid array-like length. |
|
|
* |
|
|
* **Note:** This method is loosely based on |
|
|
* [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 4.0.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is a valid length, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isLength(3); |
|
|
* // => true |
|
|
* |
|
|
* _.isLength(Number.MIN_VALUE); |
|
|
* // => false |
|
|
* |
|
|
* _.isLength(Infinity); |
|
|
* // => false |
|
|
* |
|
|
* _.isLength('3'); |
|
|
* // => false |
|
|
*/function isLength(value){return typeof value=='number'&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER;}/** |
|
|
* Checks if `value` is the |
|
|
* [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) |
|
|
* of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 0.1.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is an object, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isObject({}); |
|
|
* // => true |
|
|
* |
|
|
* _.isObject([1, 2, 3]); |
|
|
* // => true |
|
|
* |
|
|
* _.isObject(_.noop); |
|
|
* // => true |
|
|
* |
|
|
* _.isObject(null); |
|
|
* // => false |
|
|
*/function isObject(value){var type=_typeof2(value);return!!value&&(type=='object'||type=='function');}/** |
|
|
* Checks if `value` is object-like. A value is object-like if it's not `null` |
|
|
* and has a `typeof` result of "object". |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 4.0.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is object-like, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isObjectLike({}); |
|
|
* // => true |
|
|
* |
|
|
* _.isObjectLike([1, 2, 3]); |
|
|
* // => true |
|
|
* |
|
|
* _.isObjectLike(_.noop); |
|
|
* // => false |
|
|
* |
|
|
* _.isObjectLike(null); |
|
|
* // => false |
|
|
*/function isObjectLike(value){return!!value&&_typeof2(value)=='object';}/** |
|
|
* Checks if `value` is classified as a `Symbol` primitive or object. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 4.0.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is a symbol, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isSymbol(Symbol.iterator); |
|
|
* // => true |
|
|
* |
|
|
* _.isSymbol('abc'); |
|
|
* // => false |
|
|
*/function isSymbol(value){return _typeof2(value)=='symbol'||isObjectLike(value)&&objectToString.call(value)==symbolTag;}/** |
|
|
* Checks if `value` is classified as a typed array. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 3.0.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is a typed array, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isTypedArray(new Uint8Array); |
|
|
* // => true |
|
|
* |
|
|
* _.isTypedArray([]); |
|
|
* // => false |
|
|
*/var isTypedArray=nodeIsTypedArray?baseUnary(nodeIsTypedArray):baseIsTypedArray;/** |
|
|
* Converts `value` to a string. An empty string is returned for `null` |
|
|
* and `undefined` values. The sign of `-0` is preserved. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 4.0.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to process. |
|
|
* @returns {string} Returns the string. |
|
|
* @example |
|
|
* |
|
|
* _.toString(null); |
|
|
* // => '' |
|
|
* |
|
|
* _.toString(-0); |
|
|
* // => '-0' |
|
|
* |
|
|
* _.toString([1, 2, 3]); |
|
|
* // => '1,2,3' |
|
|
*/function toString(value){return value==null?'':baseToString(value);}/** |
|
|
* Gets the value at `path` of `object`. If the resolved value is |
|
|
* `undefined`, the `defaultValue` is returned in its place. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 3.7.0 |
|
|
* @category Object |
|
|
* @param {Object} object The object to query. |
|
|
* @param {Array|string} path The path of the property to get. |
|
|
* @param {*} [defaultValue] The value returned for `undefined` resolved values. |
|
|
* @returns {*} Returns the resolved value. |
|
|
* @example |
|
|
* |
|
|
* var object = { 'a': [{ 'b': { 'c': 3 } }] }; |
|
|
* |
|
|
* _.get(object, 'a[0].b.c'); |
|
|
* // => 3 |
|
|
* |
|
|
* _.get(object, ['a', '0', 'b', 'c']); |
|
|
* // => 3 |
|
|
* |
|
|
* _.get(object, 'a.b.c', 'default'); |
|
|
* // => 'default' |
|
|
*/function get(object,path,defaultValue){var result=object==null?undefined:baseGet(object,path);return result===undefined?defaultValue:result;}/** |
|
|
* Checks if `path` is a direct or inherited property of `object`. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 4.0.0 |
|
|
* @category Object |
|
|
* @param {Object} object The object to query. |
|
|
* @param {Array|string} path The path to check. |
|
|
* @returns {boolean} Returns `true` if `path` exists, else `false`. |
|
|
* @example |
|
|
* |
|
|
* var object = _.create({ 'a': _.create({ 'b': 2 }) }); |
|
|
* |
|
|
* _.hasIn(object, 'a'); |
|
|
* // => true |
|
|
* |
|
|
* _.hasIn(object, 'a.b'); |
|
|
* // => true |
|
|
* |
|
|
* _.hasIn(object, ['a', 'b']); |
|
|
* // => true |
|
|
* |
|
|
* _.hasIn(object, 'b'); |
|
|
* // => false |
|
|
*/function hasIn(object,path){return object!=null&&hasPath(object,path,baseHasIn);}/** |
|
|
* Creates an array of the own enumerable property names of `object`. |
|
|
* |
|
|
* **Note:** Non-object values are coerced to objects. See the |
|
|
* [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) |
|
|
* for more details. |
|
|
* |
|
|
* @static |
|
|
* @since 0.1.0 |
|
|
* @memberOf _ |
|
|
* @category Object |
|
|
* @param {Object} object The object to query. |
|
|
* @returns {Array} Returns the array of property names. |
|
|
* @example |
|
|
* |
|
|
* function Foo() { |
|
|
* this.a = 1; |
|
|
* this.b = 2; |
|
|
* } |
|
|
* |
|
|
* Foo.prototype.c = 3; |
|
|
* |
|
|
* _.keys(new Foo); |
|
|
* // => ['a', 'b'] (iteration order is not guaranteed) |
|
|
* |
|
|
* _.keys('hi'); |
|
|
* // => ['0', '1'] |
|
|
*/function keys(object){return isArrayLike(object)?arrayLikeKeys(object):baseKeys(object);}/** |
|
|
* This method returns the first argument it receives. |
|
|
* |
|
|
* @static |
|
|
* @since 0.1.0 |
|
|
* @memberOf _ |
|
|
* @category Util |
|
|
* @param {*} value Any value. |
|
|
* @returns {*} Returns `value`. |
|
|
* @example |
|
|
* |
|
|
* var object = { 'a': 1 }; |
|
|
* |
|
|
* console.log(_.identity(object) === object); |
|
|
* // => true |
|
|
*/function identity(value){return value;}/** |
|
|
* Creates a function that returns the value at `path` of a given object. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 2.4.0 |
|
|
* @category Util |
|
|
* @param {Array|string} path The path of the property to get. |
|
|
* @returns {Function} Returns the new accessor function. |
|
|
* @example |
|
|
* |
|
|
* var objects = [ |
|
|
* { 'a': { 'b': 2 } }, |
|
|
* { 'a': { 'b': 1 } } |
|
|
* ]; |
|
|
* |
|
|
* _.map(objects, _.property('a.b')); |
|
|
* // => [2, 1] |
|
|
* |
|
|
* _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); |
|
|
* // => [1, 2] |
|
|
*/function property(path){return isKey(path)?baseProperty(toKey(path)):basePropertyDeep(path);}module.exports=groupBy;}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{}],405:[function(require,module,exports){/** |
|
|
* lodash 3.0.3 (Custom Build) <https://lodash.com/> |
|
|
* Build: `lodash modularize exports="npm" -o ./` |
|
|
* Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/> |
|
|
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> |
|
|
* Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors |
|
|
* Available under MIT license <https://lodash.com/license> |
|
|
*/ /** `Object#toString` result references. */var boolTag='[object Boolean]';/** Used for built-in method references. */var objectProto=Object.prototype;/** |
|
|
* Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) |
|
|
* of values. |
|
|
*/var objectToString=objectProto.toString;/** |
|
|
* Checks if `value` is classified as a boolean primitive or object. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isBoolean(false); |
|
|
* // => true |
|
|
* |
|
|
* _.isBoolean(null); |
|
|
* // => false |
|
|
*/function isBoolean(value){return value===true||value===false||isObjectLike(value)&&objectToString.call(value)==boolTag;}/** |
|
|
* Checks if `value` is object-like. A value is object-like if it's not `null` |
|
|
* and has a `typeof` result of "object". |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is object-like, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isObjectLike({}); |
|
|
* // => true |
|
|
* |
|
|
* _.isObjectLike([1, 2, 3]); |
|
|
* // => true |
|
|
* |
|
|
* _.isObjectLike(_.noop); |
|
|
* // => false |
|
|
* |
|
|
* _.isObjectLike(null); |
|
|
* // => false |
|
|
*/function isObjectLike(value){return!!value&&_typeof2(value)=='object';}module.exports=isBoolean;},{}],406:[function(require,module,exports){(function(global){/** |
|
|
* Lodash (Custom Build) <https://lodash.com/> |
|
|
* Build: `lodash modularize exports="npm" -o ./` |
|
|
* Copyright JS Foundation and other contributors <https://js.foundation/> |
|
|
* Released under MIT license <https://lodash.com/license> |
|
|
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> |
|
|
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors |
|
|
*/ /** Used as the size to enable large array optimizations. */var LARGE_ARRAY_SIZE=200;/** Used to stand-in for `undefined` hash values. */var HASH_UNDEFINED='__lodash_hash_undefined__';/** Used to compose bitmasks for value comparisons. */var COMPARE_PARTIAL_FLAG=1,COMPARE_UNORDERED_FLAG=2;/** Used as references for various `Number` constants. */var MAX_SAFE_INTEGER=9007199254740991;/** `Object#toString` result references. */var argsTag='[object Arguments]',arrayTag='[object Array]',asyncTag='[object AsyncFunction]',boolTag='[object Boolean]',dateTag='[object Date]',errorTag='[object Error]',funcTag='[object Function]',genTag='[object GeneratorFunction]',mapTag='[object Map]',numberTag='[object Number]',nullTag='[object Null]',objectTag='[object Object]',promiseTag='[object Promise]',proxyTag='[object Proxy]',regexpTag='[object RegExp]',setTag='[object Set]',stringTag='[object String]',symbolTag='[object Symbol]',undefinedTag='[object Undefined]',weakMapTag='[object WeakMap]';var arrayBufferTag='[object ArrayBuffer]',dataViewTag='[object DataView]',float32Tag='[object Float32Array]',float64Tag='[object Float64Array]',int8Tag='[object Int8Array]',int16Tag='[object Int16Array]',int32Tag='[object Int32Array]',uint8Tag='[object Uint8Array]',uint8ClampedTag='[object Uint8ClampedArray]',uint16Tag='[object Uint16Array]',uint32Tag='[object Uint32Array]';/** |
|
|
* Used to match `RegExp` |
|
|
* [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). |
|
|
*/var reRegExpChar=/[\\^$.*+?()[\]{}|]/g;/** Used to detect host constructors (Safari). */var reIsHostCtor=/^\[object .+?Constructor\]$/;/** Used to detect unsigned integer values. */var reIsUint=/^(?:0|[1-9]\d*)$/;/** Used to identify `toStringTag` values of typed arrays. */var typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=true;typedArrayTags[argsTag]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dataViewTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=false;/** Detect free variable `global` from Node.js. */var freeGlobal=_typeof2(global)=='object'&&global&&global.Object===Object&&global;/** Detect free variable `self`. */var freeSelf=(typeof self==="undefined"?"undefined":_typeof2(self))=='object'&&self&&self.Object===Object&&self;/** Used as a reference to the global object. */var root=freeGlobal||freeSelf||Function('return this')();/** Detect free variable `exports`. */var freeExports=_typeof2(exports)=='object'&&exports&&!exports.nodeType&&exports;/** Detect free variable `module`. */var freeModule=freeExports&&_typeof2(module)=='object'&&module&&!module.nodeType&&module;/** Detect the popular CommonJS extension `module.exports`. */var moduleExports=freeModule&&freeModule.exports===freeExports;/** Detect free variable `process` from Node.js. */var freeProcess=moduleExports&&freeGlobal.process;/** Used to access faster Node.js helpers. */var nodeUtil=function(){try{return freeProcess&&freeProcess.binding&&freeProcess.binding('util');}catch(e){}}();/* Node.js helper references. */var nodeIsTypedArray=nodeUtil&&nodeUtil.isTypedArray;/** |
|
|
* A specialized version of `_.filter` for arrays without support for |
|
|
* iteratee shorthands. |
|
|
* |
|
|
* @private |
|
|
* @param {Array} [array] The array to iterate over. |
|
|
* @param {Function} predicate The function invoked per iteration. |
|
|
* @returns {Array} Returns the new filtered array. |
|
|
*/function arrayFilter(array,predicate){var index=-1,length=array==null?0:array.length,resIndex=0,result=[];while(++index<length){var value=array[index];if(predicate(value,index,array)){result[resIndex++]=value;}}return result;}/** |
|
|
* Appends the elements of `values` to `array`. |
|
|
* |
|
|
* @private |
|
|
* @param {Array} array The array to modify. |
|
|
* @param {Array} values The values to append. |
|
|
* @returns {Array} Returns `array`. |
|
|
*/function arrayPush(array,values){var index=-1,length=values.length,offset=array.length;while(++index<length){array[offset+index]=values[index];}return array;}/** |
|
|
* A specialized version of `_.some` for arrays without support for iteratee |
|
|
* shorthands. |
|
|
* |
|
|
* @private |
|
|
* @param {Array} [array] The array to iterate over. |
|
|
* @param {Function} predicate The function invoked per iteration. |
|
|
* @returns {boolean} Returns `true` if any element passes the predicate check, |
|
|
* else `false`. |
|
|
*/function arraySome(array,predicate){var index=-1,length=array==null?0:array.length;while(++index<length){if(predicate(array[index],index,array)){return true;}}return false;}/** |
|
|
* The base implementation of `_.times` without support for iteratee shorthands |
|
|
* or max array length checks. |
|
|
* |
|
|
* @private |
|
|
* @param {number} n The number of times to invoke `iteratee`. |
|
|
* @param {Function} iteratee The function invoked per iteration. |
|
|
* @returns {Array} Returns the array of results. |
|
|
*/function baseTimes(n,iteratee){var index=-1,result=Array(n);while(++index<n){result[index]=iteratee(index);}return result;}/** |
|
|
* The base implementation of `_.unary` without support for storing metadata. |
|
|
* |
|
|
* @private |
|
|
* @param {Function} func The function to cap arguments for. |
|
|
* @returns {Function} Returns the new capped function. |
|
|
*/function baseUnary(func){return function(value){return func(value);};}/** |
|
|
* Checks if a `cache` value for `key` exists. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} cache The cache to query. |
|
|
* @param {string} key The key of the entry to check. |
|
|
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. |
|
|
*/function cacheHas(cache,key){return cache.has(key);}/** |
|
|
* Gets the value at `key` of `object`. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} [object] The object to query. |
|
|
* @param {string} key The key of the property to get. |
|
|
* @returns {*} Returns the property value. |
|
|
*/function getValue(object,key){return object==null?undefined:object[key];}/** |
|
|
* Converts `map` to its key-value pairs. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} map The map to convert. |
|
|
* @returns {Array} Returns the key-value pairs. |
|
|
*/function mapToArray(map){var index=-1,result=Array(map.size);map.forEach(function(value,key){result[++index]=[key,value];});return result;}/** |
|
|
* Creates a unary function that invokes `func` with its argument transformed. |
|
|
* |
|
|
* @private |
|
|
* @param {Function} func The function to wrap. |
|
|
* @param {Function} transform The argument transform. |
|
|
* @returns {Function} Returns the new function. |
|
|
*/function overArg(func,transform){return function(arg){return func(transform(arg));};}/** |
|
|
* Converts `set` to an array of its values. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} set The set to convert. |
|
|
* @returns {Array} Returns the values. |
|
|
*/function setToArray(set){var index=-1,result=Array(set.size);set.forEach(function(value){result[++index]=value;});return result;}/** Used for built-in method references. */var arrayProto=Array.prototype,funcProto=Function.prototype,objectProto=Object.prototype;/** Used to detect overreaching core-js shims. */var coreJsData=root['__core-js_shared__'];/** Used to resolve the decompiled source of functions. */var funcToString=funcProto.toString;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/** Used to detect methods masquerading as native. */var maskSrcKey=function(){var uid=/[^.]+$/.exec(coreJsData&&coreJsData.keys&&coreJsData.keys.IE_PROTO||'');return uid?'Symbol(src)_1.'+uid:'';}();/** |
|
|
* Used to resolve the |
|
|
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) |
|
|
* of values. |
|
|
*/var nativeObjectToString=objectProto.toString;/** Used to detect if a method is native. */var reIsNative=RegExp('^'+funcToString.call(hasOwnProperty).replace(reRegExpChar,'\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,'$1.*?')+'$');/** Built-in value references. */var Buffer=moduleExports?root.Buffer:undefined,_Symbol6=root.Symbol,Uint8Array=root.Uint8Array,propertyIsEnumerable=objectProto.propertyIsEnumerable,splice=arrayProto.splice,symToStringTag=_Symbol6?_Symbol6.toStringTag:undefined;/* Built-in method references for those with the same name as other `lodash` methods. */var nativeGetSymbols=Object.getOwnPropertySymbols,nativeIsBuffer=Buffer?Buffer.isBuffer:undefined,nativeKeys=overArg(Object.keys,Object);/* Built-in method references that are verified to be native. */var DataView=getNative(root,'DataView'),Map=getNative(root,'Map'),Promise=getNative(root,'Promise'),Set=getNative(root,'Set'),WeakMap=getNative(root,'WeakMap'),nativeCreate=getNative(Object,'create');/** Used to detect maps, sets, and weakmaps. */var dataViewCtorString=toSource(DataView),mapCtorString=toSource(Map),promiseCtorString=toSource(Promise),setCtorString=toSource(Set),weakMapCtorString=toSource(WeakMap);/** Used to convert symbols to primitives and strings. */var symbolProto=_Symbol6?_Symbol6.prototype:undefined,symbolValueOf=symbolProto?symbolProto.valueOf:undefined;/** |
|
|
* Creates a hash object. |
|
|
* |
|
|
* @private |
|
|
* @constructor |
|
|
* @param {Array} [entries] The key-value pairs to cache. |
|
|
*/function Hash(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}/** |
|
|
* Removes all key-value entries from the hash. |
|
|
* |
|
|
* @private |
|
|
* @name clear |
|
|
* @memberOf Hash |
|
|
*/function hashClear(){this.__data__=nativeCreate?nativeCreate(null):{};this.size=0;}/** |
|
|
* Removes `key` and its value from the hash. |
|
|
* |
|
|
* @private |
|
|
* @name delete |
|
|
* @memberOf Hash |
|
|
* @param {Object} hash The hash to modify. |
|
|
* @param {string} key The key of the value to remove. |
|
|
* @returns {boolean} Returns `true` if the entry was removed, else `false`. |
|
|
*/function hashDelete(key){var result=this.has(key)&&delete this.__data__[key];this.size-=result?1:0;return result;}/** |
|
|
* Gets the hash value for `key`. |
|
|
* |
|
|
* @private |
|
|
* @name get |
|
|
* @memberOf Hash |
|
|
* @param {string} key The key of the value to get. |
|
|
* @returns {*} Returns the entry value. |
|
|
*/function hashGet(key){var data=this.__data__;if(nativeCreate){var result=data[key];return result===HASH_UNDEFINED?undefined:result;}return hasOwnProperty.call(data,key)?data[key]:undefined;}/** |
|
|
* Checks if a hash value for `key` exists. |
|
|
* |
|
|
* @private |
|
|
* @name has |
|
|
* @memberOf Hash |
|
|
* @param {string} key The key of the entry to check. |
|
|
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. |
|
|
*/function hashHas(key){var data=this.__data__;return nativeCreate?data[key]!==undefined:hasOwnProperty.call(data,key);}/** |
|
|
* Sets the hash `key` to `value`. |
|
|
* |
|
|
* @private |
|
|
* @name set |
|
|
* @memberOf Hash |
|
|
* @param {string} key The key of the value to set. |
|
|
* @param {*} value The value to set. |
|
|
* @returns {Object} Returns the hash instance. |
|
|
*/function hashSet(key,value){var data=this.__data__;this.size+=this.has(key)?0:1;data[key]=nativeCreate&&value===undefined?HASH_UNDEFINED:value;return this;}// Add methods to `Hash`. |
|
|
Hash.prototype.clear=hashClear;Hash.prototype['delete']=hashDelete;Hash.prototype.get=hashGet;Hash.prototype.has=hashHas;Hash.prototype.set=hashSet;/** |
|
|
* Creates an list cache object. |
|
|
* |
|
|
* @private |
|
|
* @constructor |
|
|
* @param {Array} [entries] The key-value pairs to cache. |
|
|
*/function ListCache(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}/** |
|
|
* Removes all key-value entries from the list cache. |
|
|
* |
|
|
* @private |
|
|
* @name clear |
|
|
* @memberOf ListCache |
|
|
*/function listCacheClear(){this.__data__=[];this.size=0;}/** |
|
|
* Removes `key` and its value from the list cache. |
|
|
* |
|
|
* @private |
|
|
* @name delete |
|
|
* @memberOf ListCache |
|
|
* @param {string} key The key of the value to remove. |
|
|
* @returns {boolean} Returns `true` if the entry was removed, else `false`. |
|
|
*/function listCacheDelete(key){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){return false;}var lastIndex=data.length-1;if(index==lastIndex){data.pop();}else{splice.call(data,index,1);}--this.size;return true;}/** |
|
|
* Gets the list cache value for `key`. |
|
|
* |
|
|
* @private |
|
|
* @name get |
|
|
* @memberOf ListCache |
|
|
* @param {string} key The key of the value to get. |
|
|
* @returns {*} Returns the entry value. |
|
|
*/function listCacheGet(key){var data=this.__data__,index=assocIndexOf(data,key);return index<0?undefined:data[index][1];}/** |
|
|
* Checks if a list cache value for `key` exists. |
|
|
* |
|
|
* @private |
|
|
* @name has |
|
|
* @memberOf ListCache |
|
|
* @param {string} key The key of the entry to check. |
|
|
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. |
|
|
*/function listCacheHas(key){return assocIndexOf(this.__data__,key)>-1;}/** |
|
|
* Sets the list cache `key` to `value`. |
|
|
* |
|
|
* @private |
|
|
* @name set |
|
|
* @memberOf ListCache |
|
|
* @param {string} key The key of the value to set. |
|
|
* @param {*} value The value to set. |
|
|
* @returns {Object} Returns the list cache instance. |
|
|
*/function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){++this.size;data.push([key,value]);}else{data[index][1]=value;}return this;}// Add methods to `ListCache`. |
|
|
ListCache.prototype.clear=listCacheClear;ListCache.prototype['delete']=listCacheDelete;ListCache.prototype.get=listCacheGet;ListCache.prototype.has=listCacheHas;ListCache.prototype.set=listCacheSet;/** |
|
|
* Creates a map cache object to store key-value pairs. |
|
|
* |
|
|
* @private |
|
|
* @constructor |
|
|
* @param {Array} [entries] The key-value pairs to cache. |
|
|
*/function MapCache(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}/** |
|
|
* Removes all key-value entries from the map. |
|
|
* |
|
|
* @private |
|
|
* @name clear |
|
|
* @memberOf MapCache |
|
|
*/function mapCacheClear(){this.size=0;this.__data__={'hash':new Hash(),'map':new(Map||ListCache)(),'string':new Hash()};}/** |
|
|
* Removes `key` and its value from the map. |
|
|
* |
|
|
* @private |
|
|
* @name delete |
|
|
* @memberOf MapCache |
|
|
* @param {string} key The key of the value to remove. |
|
|
* @returns {boolean} Returns `true` if the entry was removed, else `false`. |
|
|
*/function mapCacheDelete(key){var result=getMapData(this,key)['delete'](key);this.size-=result?1:0;return result;}/** |
|
|
* Gets the map value for `key`. |
|
|
* |
|
|
* @private |
|
|
* @name get |
|
|
* @memberOf MapCache |
|
|
* @param {string} key The key of the value to get. |
|
|
* @returns {*} Returns the entry value. |
|
|
*/function mapCacheGet(key){return getMapData(this,key).get(key);}/** |
|
|
* Checks if a map value for `key` exists. |
|
|
* |
|
|
* @private |
|
|
* @name has |
|
|
* @memberOf MapCache |
|
|
* @param {string} key The key of the entry to check. |
|
|
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. |
|
|
*/function mapCacheHas(key){return getMapData(this,key).has(key);}/** |
|
|
* Sets the map `key` to `value`. |
|
|
* |
|
|
* @private |
|
|
* @name set |
|
|
* @memberOf MapCache |
|
|
* @param {string} key The key of the value to set. |
|
|
* @param {*} value The value to set. |
|
|
* @returns {Object} Returns the map cache instance. |
|
|
*/function mapCacheSet(key,value){var data=getMapData(this,key),size=data.size;data.set(key,value);this.size+=data.size==size?0:1;return this;}// Add methods to `MapCache`. |
|
|
MapCache.prototype.clear=mapCacheClear;MapCache.prototype['delete']=mapCacheDelete;MapCache.prototype.get=mapCacheGet;MapCache.prototype.has=mapCacheHas;MapCache.prototype.set=mapCacheSet;/** |
|
|
* |
|
|
* Creates an array cache object to store unique values. |
|
|
* |
|
|
* @private |
|
|
* @constructor |
|
|
* @param {Array} [values] The values to cache. |
|
|
*/function SetCache(values){var index=-1,length=values==null?0:values.length;this.__data__=new MapCache();while(++index<length){this.add(values[index]);}}/** |
|
|
* Adds `value` to the array cache. |
|
|
* |
|
|
* @private |
|
|
* @name add |
|
|
* @memberOf SetCache |
|
|
* @alias push |
|
|
* @param {*} value The value to cache. |
|
|
* @returns {Object} Returns the cache instance. |
|
|
*/function setCacheAdd(value){this.__data__.set(value,HASH_UNDEFINED);return this;}/** |
|
|
* Checks if `value` is in the array cache. |
|
|
* |
|
|
* @private |
|
|
* @name has |
|
|
* @memberOf SetCache |
|
|
* @param {*} value The value to search for. |
|
|
* @returns {number} Returns `true` if `value` is found, else `false`. |
|
|
*/function setCacheHas(value){return this.__data__.has(value);}// Add methods to `SetCache`. |
|
|
SetCache.prototype.add=SetCache.prototype.push=setCacheAdd;SetCache.prototype.has=setCacheHas;/** |
|
|
* Creates a stack cache object to store key-value pairs. |
|
|
* |
|
|
* @private |
|
|
* @constructor |
|
|
* @param {Array} [entries] The key-value pairs to cache. |
|
|
*/function Stack(entries){var data=this.__data__=new ListCache(entries);this.size=data.size;}/** |
|
|
* Removes all key-value entries from the stack. |
|
|
* |
|
|
* @private |
|
|
* @name clear |
|
|
* @memberOf Stack |
|
|
*/function stackClear(){this.__data__=new ListCache();this.size=0;}/** |
|
|
* Removes `key` and its value from the stack. |
|
|
* |
|
|
* @private |
|
|
* @name delete |
|
|
* @memberOf Stack |
|
|
* @param {string} key The key of the value to remove. |
|
|
* @returns {boolean} Returns `true` if the entry was removed, else `false`. |
|
|
*/function stackDelete(key){var data=this.__data__,result=data['delete'](key);this.size=data.size;return result;}/** |
|
|
* Gets the stack value for `key`. |
|
|
* |
|
|
* @private |
|
|
* @name get |
|
|
* @memberOf Stack |
|
|
* @param {string} key The key of the value to get. |
|
|
* @returns {*} Returns the entry value. |
|
|
*/function stackGet(key){return this.__data__.get(key);}/** |
|
|
* Checks if a stack value for `key` exists. |
|
|
* |
|
|
* @private |
|
|
* @name has |
|
|
* @memberOf Stack |
|
|
* @param {string} key The key of the entry to check. |
|
|
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. |
|
|
*/function stackHas(key){return this.__data__.has(key);}/** |
|
|
* Sets the stack `key` to `value`. |
|
|
* |
|
|
* @private |
|
|
* @name set |
|
|
* @memberOf Stack |
|
|
* @param {string} key The key of the value to set. |
|
|
* @param {*} value The value to set. |
|
|
* @returns {Object} Returns the stack cache instance. |
|
|
*/function stackSet(key,value){var data=this.__data__;if(data instanceof ListCache){var pairs=data.__data__;if(!Map||pairs.length<LARGE_ARRAY_SIZE-1){pairs.push([key,value]);this.size=++data.size;return this;}data=this.__data__=new MapCache(pairs);}data.set(key,value);this.size=data.size;return this;}// Add methods to `Stack`. |
|
|
Stack.prototype.clear=stackClear;Stack.prototype['delete']=stackDelete;Stack.prototype.get=stackGet;Stack.prototype.has=stackHas;Stack.prototype.set=stackSet;/** |
|
|
* Creates an array of the enumerable property names of the array-like `value`. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to query. |
|
|
* @param {boolean} inherited Specify returning inherited property names. |
|
|
* @returns {Array} Returns the array of property names. |
|
|
*/function arrayLikeKeys(value,inherited){var isArr=isArray(value),isArg=!isArr&&isArguments(value),isBuff=!isArr&&!isArg&&isBuffer(value),isType=!isArr&&!isArg&&!isBuff&&isTypedArray(value),skipIndexes=isArr||isArg||isBuff||isType,result=skipIndexes?baseTimes(value.length,String):[],length=result.length;for(var key in value){if((inherited||hasOwnProperty.call(value,key))&&!(skipIndexes&&(// Safari 9 has enumerable `arguments.length` in strict mode. |
|
|
key=='length'||// Node.js 0.10 has enumerable non-index properties on buffers. |
|
|
isBuff&&(key=='offset'||key=='parent')||// PhantomJS 2 has enumerable non-index properties on typed arrays. |
|
|
isType&&(key=='buffer'||key=='byteLength'||key=='byteOffset')||// Skip index properties. |
|
|
isIndex(key,length)))){result.push(key);}}return result;}/** |
|
|
* Gets the index at which the `key` is found in `array` of key-value pairs. |
|
|
* |
|
|
* @private |
|
|
* @param {Array} array The array to inspect. |
|
|
* @param {*} key The key to search for. |
|
|
* @returns {number} Returns the index of the matched value, else `-1`. |
|
|
*/function assocIndexOf(array,key){var length=array.length;while(length--){if(eq(array[length][0],key)){return length;}}return-1;}/** |
|
|
* The base implementation of `getAllKeys` and `getAllKeysIn` which uses |
|
|
* `keysFunc` and `symbolsFunc` to get the enumerable property names and |
|
|
* symbols of `object`. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} object The object to query. |
|
|
* @param {Function} keysFunc The function to get the keys of `object`. |
|
|
* @param {Function} symbolsFunc The function to get the symbols of `object`. |
|
|
* @returns {Array} Returns the array of property names and symbols. |
|
|
*/function baseGetAllKeys(object,keysFunc,symbolsFunc){var result=keysFunc(object);return isArray(object)?result:arrayPush(result,symbolsFunc(object));}/** |
|
|
* The base implementation of `getTag` without fallbacks for buggy environments. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to query. |
|
|
* @returns {string} Returns the `toStringTag`. |
|
|
*/function baseGetTag(value){if(value==null){return value===undefined?undefinedTag:nullTag;}return symToStringTag&&symToStringTag in Object(value)?getRawTag(value):objectToString(value);}/** |
|
|
* The base implementation of `_.isArguments`. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is an `arguments` object, |
|
|
*/function baseIsArguments(value){return isObjectLike(value)&&baseGetTag(value)==argsTag;}/** |
|
|
* The base implementation of `_.isEqual` which supports partial comparisons |
|
|
* and tracks traversed objects. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to compare. |
|
|
* @param {*} other The other value to compare. |
|
|
* @param {boolean} bitmask The bitmask flags. |
|
|
* 1 - Unordered comparison |
|
|
* 2 - Partial comparison |
|
|
* @param {Function} [customizer] The function to customize comparisons. |
|
|
* @param {Object} [stack] Tracks traversed `value` and `other` objects. |
|
|
* @returns {boolean} Returns `true` if the values are equivalent, else `false`. |
|
|
*/function baseIsEqual(value,other,bitmask,customizer,stack){if(value===other){return true;}if(value==null||other==null||!isObjectLike(value)&&!isObjectLike(other)){return value!==value&&other!==other;}return baseIsEqualDeep(value,other,bitmask,customizer,baseIsEqual,stack);}/** |
|
|
* A specialized version of `baseIsEqual` for arrays and objects which performs |
|
|
* deep comparisons and tracks traversed objects enabling objects with circular |
|
|
* references to be compared. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} object The object to compare. |
|
|
* @param {Object} other The other object to compare. |
|
|
* @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. |
|
|
* @param {Function} customizer The function to customize comparisons. |
|
|
* @param {Function} equalFunc The function to determine equivalents of values. |
|
|
* @param {Object} [stack] Tracks traversed `object` and `other` objects. |
|
|
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`. |
|
|
*/function baseIsEqualDeep(object,other,bitmask,customizer,equalFunc,stack){var objIsArr=isArray(object),othIsArr=isArray(other),objTag=objIsArr?arrayTag:getTag(object),othTag=othIsArr?arrayTag:getTag(other);objTag=objTag==argsTag?objectTag:objTag;othTag=othTag==argsTag?objectTag:othTag;var objIsObj=objTag==objectTag,othIsObj=othTag==objectTag,isSameTag=objTag==othTag;if(isSameTag&&isBuffer(object)){if(!isBuffer(other)){return false;}objIsArr=true;objIsObj=false;}if(isSameTag&&!objIsObj){stack||(stack=new Stack());return objIsArr||isTypedArray(object)?equalArrays(object,other,bitmask,customizer,equalFunc,stack):equalByTag(object,other,objTag,bitmask,customizer,equalFunc,stack);}if(!(bitmask&COMPARE_PARTIAL_FLAG)){var objIsWrapped=objIsObj&&hasOwnProperty.call(object,'__wrapped__'),othIsWrapped=othIsObj&&hasOwnProperty.call(other,'__wrapped__');if(objIsWrapped||othIsWrapped){var objUnwrapped=objIsWrapped?object.value():object,othUnwrapped=othIsWrapped?other.value():other;stack||(stack=new Stack());return equalFunc(objUnwrapped,othUnwrapped,bitmask,customizer,stack);}}if(!isSameTag){return false;}stack||(stack=new Stack());return equalObjects(object,other,bitmask,customizer,equalFunc,stack);}/** |
|
|
* The base implementation of `_.isNative` without bad shim checks. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is a native function, |
|
|
* else `false`. |
|
|
*/function baseIsNative(value){if(!isObject(value)||isMasked(value)){return false;}var pattern=isFunction(value)?reIsNative:reIsHostCtor;return pattern.test(toSource(value));}/** |
|
|
* The base implementation of `_.isTypedArray` without Node.js optimizations. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is a typed array, else `false`. |
|
|
*/function baseIsTypedArray(value){return isObjectLike(value)&&isLength(value.length)&&!!typedArrayTags[baseGetTag(value)];}/** |
|
|
* The base implementation of `_.keys` which doesn't treat sparse arrays as dense. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} object The object to query. |
|
|
* @returns {Array} Returns the array of property names. |
|
|
*/function baseKeys(object){if(!isPrototype(object)){return nativeKeys(object);}var result=[];for(var key in Object(object)){if(hasOwnProperty.call(object,key)&&key!='constructor'){result.push(key);}}return result;}/** |
|
|
* A specialized version of `baseIsEqualDeep` for arrays with support for |
|
|
* partial deep comparisons. |
|
|
* |
|
|
* @private |
|
|
* @param {Array} array The array to compare. |
|
|
* @param {Array} other The other array to compare. |
|
|
* @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. |
|
|
* @param {Function} customizer The function to customize comparisons. |
|
|
* @param {Function} equalFunc The function to determine equivalents of values. |
|
|
* @param {Object} stack Tracks traversed `array` and `other` objects. |
|
|
* @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. |
|
|
*/function equalArrays(array,other,bitmask,customizer,equalFunc,stack){var isPartial=bitmask&COMPARE_PARTIAL_FLAG,arrLength=array.length,othLength=other.length;if(arrLength!=othLength&&!(isPartial&&othLength>arrLength)){return false;}// Assume cyclic values are equal. |
|
|
var stacked=stack.get(array);if(stacked&&stack.get(other)){return stacked==other;}var index=-1,result=true,seen=bitmask&COMPARE_UNORDERED_FLAG?new SetCache():undefined;stack.set(array,other);stack.set(other,array);// Ignore non-index properties. |
|
|
while(++index<arrLength){var arrValue=array[index],othValue=other[index];if(customizer){var compared=isPartial?customizer(othValue,arrValue,index,other,array,stack):customizer(arrValue,othValue,index,array,other,stack);}if(compared!==undefined){if(compared){continue;}result=false;break;}// Recursively compare arrays (susceptible to call stack limits). |
|
|
if(seen){if(!arraySome(other,function(othValue,othIndex){if(!cacheHas(seen,othIndex)&&(arrValue===othValue||equalFunc(arrValue,othValue,bitmask,customizer,stack))){return seen.push(othIndex);}})){result=false;break;}}else if(!(arrValue===othValue||equalFunc(arrValue,othValue,bitmask,customizer,stack))){result=false;break;}}stack['delete'](array);stack['delete'](other);return result;}/** |
|
|
* A specialized version of `baseIsEqualDeep` for comparing objects of |
|
|
* the same `toStringTag`. |
|
|
* |
|
|
* **Note:** This function only supports comparing values with tags of |
|
|
* `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} object The object to compare. |
|
|
* @param {Object} other The other object to compare. |
|
|
* @param {string} tag The `toStringTag` of the objects to compare. |
|
|
* @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. |
|
|
* @param {Function} customizer The function to customize comparisons. |
|
|
* @param {Function} equalFunc The function to determine equivalents of values. |
|
|
* @param {Object} stack Tracks traversed `object` and `other` objects. |
|
|
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`. |
|
|
*/function equalByTag(object,other,tag,bitmask,customizer,equalFunc,stack){switch(tag){case dataViewTag:if(object.byteLength!=other.byteLength||object.byteOffset!=other.byteOffset){return false;}object=object.buffer;other=other.buffer;case arrayBufferTag:if(object.byteLength!=other.byteLength||!equalFunc(new Uint8Array(object),new Uint8Array(other))){return false;}return true;case boolTag:case dateTag:case numberTag:// Coerce booleans to `1` or `0` and dates to milliseconds. |
|
|
// Invalid dates are coerced to `NaN`. |
|
|
return eq(+object,+other);case errorTag:return object.name==other.name&&object.message==other.message;case regexpTag:case stringTag:// Coerce regexes to strings and treat strings, primitives and objects, |
|
|
// as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring |
|
|
// for more details. |
|
|
return object==other+'';case mapTag:var convert=mapToArray;case setTag:var isPartial=bitmask&COMPARE_PARTIAL_FLAG;convert||(convert=setToArray);if(object.size!=other.size&&!isPartial){return false;}// Assume cyclic values are equal. |
|
|
var stacked=stack.get(object);if(stacked){return stacked==other;}bitmask|=COMPARE_UNORDERED_FLAG;// Recursively compare objects (susceptible to call stack limits). |
|
|
stack.set(object,other);var result=equalArrays(convert(object),convert(other),bitmask,customizer,equalFunc,stack);stack['delete'](object);return result;case symbolTag:if(symbolValueOf){return symbolValueOf.call(object)==symbolValueOf.call(other);}}return false;}/** |
|
|
* A specialized version of `baseIsEqualDeep` for objects with support for |
|
|
* partial deep comparisons. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} object The object to compare. |
|
|
* @param {Object} other The other object to compare. |
|
|
* @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. |
|
|
* @param {Function} customizer The function to customize comparisons. |
|
|
* @param {Function} equalFunc The function to determine equivalents of values. |
|
|
* @param {Object} stack Tracks traversed `object` and `other` objects. |
|
|
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`. |
|
|
*/function equalObjects(object,other,bitmask,customizer,equalFunc,stack){var isPartial=bitmask&COMPARE_PARTIAL_FLAG,objProps=getAllKeys(object),objLength=objProps.length,othProps=getAllKeys(other),othLength=othProps.length;if(objLength!=othLength&&!isPartial){return false;}var index=objLength;while(index--){var key=objProps[index];if(!(isPartial?key in other:hasOwnProperty.call(other,key))){return false;}}// Assume cyclic values are equal. |
|
|
var stacked=stack.get(object);if(stacked&&stack.get(other)){return stacked==other;}var result=true;stack.set(object,other);stack.set(other,object);var skipCtor=isPartial;while(++index<objLength){key=objProps[index];var objValue=object[key],othValue=other[key];if(customizer){var compared=isPartial?customizer(othValue,objValue,key,other,object,stack):customizer(objValue,othValue,key,object,other,stack);}// Recursively compare objects (susceptible to call stack limits). |
|
|
if(!(compared===undefined?objValue===othValue||equalFunc(objValue,othValue,bitmask,customizer,stack):compared)){result=false;break;}skipCtor||(skipCtor=key=='constructor');}if(result&&!skipCtor){var objCtor=object.constructor,othCtor=other.constructor;// Non `Object` object instances with different constructors are not equal. |
|
|
if(objCtor!=othCtor&&'constructor'in object&&'constructor'in other&&!(typeof objCtor=='function'&&objCtor instanceof objCtor&&typeof othCtor=='function'&&othCtor instanceof othCtor)){result=false;}}stack['delete'](object);stack['delete'](other);return result;}/** |
|
|
* Creates an array of own enumerable property names and symbols of `object`. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} object The object to query. |
|
|
* @returns {Array} Returns the array of property names and symbols. |
|
|
*/function getAllKeys(object){return baseGetAllKeys(object,keys,getSymbols);}/** |
|
|
* Gets the data for `map`. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} map The map to query. |
|
|
* @param {string} key The reference key. |
|
|
* @returns {*} Returns the map data. |
|
|
*/function getMapData(map,key){var data=map.__data__;return isKeyable(key)?data[typeof key=='string'?'string':'hash']:data.map;}/** |
|
|
* Gets the native function at `key` of `object`. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} object The object to query. |
|
|
* @param {string} key The key of the method to get. |
|
|
* @returns {*} Returns the function if it's native, else `undefined`. |
|
|
*/function getNative(object,key){var value=getValue(object,key);return baseIsNative(value)?value:undefined;}/** |
|
|
* A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to query. |
|
|
* @returns {string} Returns the raw `toStringTag`. |
|
|
*/function getRawTag(value){var isOwn=hasOwnProperty.call(value,symToStringTag),tag=value[symToStringTag];try{value[symToStringTag]=undefined;var unmasked=true;}catch(e){}var result=nativeObjectToString.call(value);if(unmasked){if(isOwn){value[symToStringTag]=tag;}else{delete value[symToStringTag];}}return result;}/** |
|
|
* Creates an array of the own enumerable symbols of `object`. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} object The object to query. |
|
|
* @returns {Array} Returns the array of symbols. |
|
|
*/var getSymbols=!nativeGetSymbols?stubArray:function(object){if(object==null){return[];}object=Object(object);return arrayFilter(nativeGetSymbols(object),function(symbol){return propertyIsEnumerable.call(object,symbol);});};/** |
|
|
* Gets the `toStringTag` of `value`. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to query. |
|
|
* @returns {string} Returns the `toStringTag`. |
|
|
*/var getTag=baseGetTag;// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. |
|
|
if(DataView&&getTag(new DataView(new ArrayBuffer(1)))!=dataViewTag||Map&&getTag(new Map())!=mapTag||Promise&&getTag(Promise.resolve())!=promiseTag||Set&&getTag(new Set())!=setTag||WeakMap&&getTag(new WeakMap())!=weakMapTag){getTag=function getTag(value){var result=baseGetTag(value),Ctor=result==objectTag?value.constructor:undefined,ctorString=Ctor?toSource(Ctor):'';if(ctorString){switch(ctorString){case dataViewCtorString:return dataViewTag;case mapCtorString:return mapTag;case promiseCtorString:return promiseTag;case setCtorString:return setTag;case weakMapCtorString:return weakMapTag;}}return result;};}/** |
|
|
* Checks if `value` is a valid array-like index. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to check. |
|
|
* @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. |
|
|
* @returns {boolean} Returns `true` if `value` is a valid index, else `false`. |
|
|
*/function isIndex(value,length){length=length==null?MAX_SAFE_INTEGER:length;return!!length&&(typeof value=='number'||reIsUint.test(value))&&value>-1&&value%1==0&&value<length;}/** |
|
|
* Checks if `value` is suitable for use as unique object key. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is suitable, else `false`. |
|
|
*/function isKeyable(value){var type=_typeof2(value);return type=='string'||type=='number'||type=='symbol'||type=='boolean'?value!=='__proto__':value===null;}/** |
|
|
* Checks if `func` has its source masked. |
|
|
* |
|
|
* @private |
|
|
* @param {Function} func The function to check. |
|
|
* @returns {boolean} Returns `true` if `func` is masked, else `false`. |
|
|
*/function isMasked(func){return!!maskSrcKey&&maskSrcKey in func;}/** |
|
|
* Checks if `value` is likely a prototype object. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is a prototype, else `false`. |
|
|
*/function isPrototype(value){var Ctor=value&&value.constructor,proto=typeof Ctor=='function'&&Ctor.prototype||objectProto;return value===proto;}/** |
|
|
* Converts `value` to a string using `Object.prototype.toString`. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to convert. |
|
|
* @returns {string} Returns the converted string. |
|
|
*/function objectToString(value){return nativeObjectToString.call(value);}/** |
|
|
* Converts `func` to its source code. |
|
|
* |
|
|
* @private |
|
|
* @param {Function} func The function to convert. |
|
|
* @returns {string} Returns the source code. |
|
|
*/function toSource(func){if(func!=null){try{return funcToString.call(func);}catch(e){}try{return func+'';}catch(e){}}return'';}/** |
|
|
* Performs a |
|
|
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) |
|
|
* comparison between two values to determine if they are equivalent. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 4.0.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to compare. |
|
|
* @param {*} other The other value to compare. |
|
|
* @returns {boolean} Returns `true` if the values are equivalent, else `false`. |
|
|
* @example |
|
|
* |
|
|
* var object = { 'a': 1 }; |
|
|
* var other = { 'a': 1 }; |
|
|
* |
|
|
* _.eq(object, object); |
|
|
* // => true |
|
|
* |
|
|
* _.eq(object, other); |
|
|
* // => false |
|
|
* |
|
|
* _.eq('a', 'a'); |
|
|
* // => true |
|
|
* |
|
|
* _.eq('a', Object('a')); |
|
|
* // => false |
|
|
* |
|
|
* _.eq(NaN, NaN); |
|
|
* // => true |
|
|
*/function eq(value,other){return value===other||value!==value&&other!==other;}/** |
|
|
* Checks if `value` is likely an `arguments` object. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 0.1.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is an `arguments` object, |
|
|
* else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isArguments(function() { return arguments; }()); |
|
|
* // => true |
|
|
* |
|
|
* _.isArguments([1, 2, 3]); |
|
|
* // => false |
|
|
*/var isArguments=baseIsArguments(function(){return arguments;}())?baseIsArguments:function(value){return isObjectLike(value)&&hasOwnProperty.call(value,'callee')&&!propertyIsEnumerable.call(value,'callee');};/** |
|
|
* Checks if `value` is classified as an `Array` object. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 0.1.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is an array, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isArray([1, 2, 3]); |
|
|
* // => true |
|
|
* |
|
|
* _.isArray(document.body.children); |
|
|
* // => false |
|
|
* |
|
|
* _.isArray('abc'); |
|
|
* // => false |
|
|
* |
|
|
* _.isArray(_.noop); |
|
|
* // => false |
|
|
*/var isArray=Array.isArray;/** |
|
|
* Checks if `value` is array-like. A value is considered array-like if it's |
|
|
* not a function and has a `value.length` that's an integer greater than or |
|
|
* equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 4.0.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is array-like, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isArrayLike([1, 2, 3]); |
|
|
* // => true |
|
|
* |
|
|
* _.isArrayLike(document.body.children); |
|
|
* // => true |
|
|
* |
|
|
* _.isArrayLike('abc'); |
|
|
* // => true |
|
|
* |
|
|
* _.isArrayLike(_.noop); |
|
|
* // => false |
|
|
*/function isArrayLike(value){return value!=null&&isLength(value.length)&&!isFunction(value);}/** |
|
|
* Checks if `value` is a buffer. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 4.3.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is a buffer, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isBuffer(new Buffer(2)); |
|
|
* // => true |
|
|
* |
|
|
* _.isBuffer(new Uint8Array(2)); |
|
|
* // => false |
|
|
*/var isBuffer=nativeIsBuffer||stubFalse;/** |
|
|
* Performs a deep comparison between two values to determine if they are |
|
|
* equivalent. |
|
|
* |
|
|
* **Note:** This method supports comparing arrays, array buffers, booleans, |
|
|
* date objects, error objects, maps, numbers, `Object` objects, regexes, |
|
|
* sets, strings, symbols, and typed arrays. `Object` objects are compared |
|
|
* by their own, not inherited, enumerable properties. Functions and DOM |
|
|
* nodes are compared by strict equality, i.e. `===`. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 0.1.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to compare. |
|
|
* @param {*} other The other value to compare. |
|
|
* @returns {boolean} Returns `true` if the values are equivalent, else `false`. |
|
|
* @example |
|
|
* |
|
|
* var object = { 'a': 1 }; |
|
|
* var other = { 'a': 1 }; |
|
|
* |
|
|
* _.isEqual(object, other); |
|
|
* // => true |
|
|
* |
|
|
* object === other; |
|
|
* // => false |
|
|
*/function isEqual(value,other){return baseIsEqual(value,other);}/** |
|
|
* Checks if `value` is classified as a `Function` object. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 0.1.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is a function, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isFunction(_); |
|
|
* // => true |
|
|
* |
|
|
* _.isFunction(/abc/); |
|
|
* // => false |
|
|
*/function isFunction(value){if(!isObject(value)){return false;}// The use of `Object#toString` avoids issues with the `typeof` operator |
|
|
// in Safari 9 which returns 'object' for typed arrays and other constructors. |
|
|
var tag=baseGetTag(value);return tag==funcTag||tag==genTag||tag==asyncTag||tag==proxyTag;}/** |
|
|
* Checks if `value` is a valid array-like length. |
|
|
* |
|
|
* **Note:** This method is loosely based on |
|
|
* [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 4.0.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is a valid length, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isLength(3); |
|
|
* // => true |
|
|
* |
|
|
* _.isLength(Number.MIN_VALUE); |
|
|
* // => false |
|
|
* |
|
|
* _.isLength(Infinity); |
|
|
* // => false |
|
|
* |
|
|
* _.isLength('3'); |
|
|
* // => false |
|
|
*/function isLength(value){return typeof value=='number'&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER;}/** |
|
|
* Checks if `value` is the |
|
|
* [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) |
|
|
* of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 0.1.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is an object, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isObject({}); |
|
|
* // => true |
|
|
* |
|
|
* _.isObject([1, 2, 3]); |
|
|
* // => true |
|
|
* |
|
|
* _.isObject(_.noop); |
|
|
* // => true |
|
|
* |
|
|
* _.isObject(null); |
|
|
* // => false |
|
|
*/function isObject(value){var type=_typeof2(value);return value!=null&&(type=='object'||type=='function');}/** |
|
|
* Checks if `value` is object-like. A value is object-like if it's not `null` |
|
|
* and has a `typeof` result of "object". |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 4.0.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is object-like, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isObjectLike({}); |
|
|
* // => true |
|
|
* |
|
|
* _.isObjectLike([1, 2, 3]); |
|
|
* // => true |
|
|
* |
|
|
* _.isObjectLike(_.noop); |
|
|
* // => false |
|
|
* |
|
|
* _.isObjectLike(null); |
|
|
* // => false |
|
|
*/function isObjectLike(value){return value!=null&&_typeof2(value)=='object';}/** |
|
|
* Checks if `value` is classified as a typed array. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 3.0.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is a typed array, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isTypedArray(new Uint8Array); |
|
|
* // => true |
|
|
* |
|
|
* _.isTypedArray([]); |
|
|
* // => false |
|
|
*/var isTypedArray=nodeIsTypedArray?baseUnary(nodeIsTypedArray):baseIsTypedArray;/** |
|
|
* Creates an array of the own enumerable property names of `object`. |
|
|
* |
|
|
* **Note:** Non-object values are coerced to objects. See the |
|
|
* [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) |
|
|
* for more details. |
|
|
* |
|
|
* @static |
|
|
* @since 0.1.0 |
|
|
* @memberOf _ |
|
|
* @category Object |
|
|
* @param {Object} object The object to query. |
|
|
* @returns {Array} Returns the array of property names. |
|
|
* @example |
|
|
* |
|
|
* function Foo() { |
|
|
* this.a = 1; |
|
|
* this.b = 2; |
|
|
* } |
|
|
* |
|
|
* Foo.prototype.c = 3; |
|
|
* |
|
|
* _.keys(new Foo); |
|
|
* // => ['a', 'b'] (iteration order is not guaranteed) |
|
|
* |
|
|
* _.keys('hi'); |
|
|
* // => ['0', '1'] |
|
|
*/function keys(object){return isArrayLike(object)?arrayLikeKeys(object):baseKeys(object);}/** |
|
|
* This method returns a new empty array. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 4.13.0 |
|
|
* @category Util |
|
|
* @returns {Array} Returns the new empty array. |
|
|
* @example |
|
|
* |
|
|
* var arrays = _.times(2, _.stubArray); |
|
|
* |
|
|
* console.log(arrays); |
|
|
* // => [[], []] |
|
|
* |
|
|
* console.log(arrays[0] === arrays[1]); |
|
|
* // => false |
|
|
*/function stubArray(){return[];}/** |
|
|
* This method returns `false`. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 4.13.0 |
|
|
* @category Util |
|
|
* @returns {boolean} Returns `false`. |
|
|
* @example |
|
|
* |
|
|
* _.times(2, _.stubFalse); |
|
|
* // => [false, false] |
|
|
*/function stubFalse(){return false;}module.exports=isEqual;}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{}],407:[function(require,module,exports){(function(global){/** |
|
|
* Lodash (Custom Build) <https://lodash.com/> |
|
|
* Build: `lodash modularize exports="npm" -o ./` |
|
|
* Copyright JS Foundation and other contributors <https://js.foundation/> |
|
|
* Released under MIT license <https://lodash.com/license> |
|
|
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> |
|
|
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors |
|
|
*/ /** `Object#toString` result references. */var asyncTag='[object AsyncFunction]',funcTag='[object Function]',genTag='[object GeneratorFunction]',nullTag='[object Null]',proxyTag='[object Proxy]',undefinedTag='[object Undefined]';/** Detect free variable `global` from Node.js. */var freeGlobal=_typeof2(global)=='object'&&global&&global.Object===Object&&global;/** Detect free variable `self`. */var freeSelf=(typeof self==="undefined"?"undefined":_typeof2(self))=='object'&&self&&self.Object===Object&&self;/** Used as a reference to the global object. */var root=freeGlobal||freeSelf||Function('return this')();/** Used for built-in method references. */var objectProto=Object.prototype;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/** |
|
|
* Used to resolve the |
|
|
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) |
|
|
* of values. |
|
|
*/var nativeObjectToString=objectProto.toString;/** Built-in value references. */var _Symbol7=root.Symbol,symToStringTag=_Symbol7?_Symbol7.toStringTag:undefined;/** |
|
|
* The base implementation of `getTag` without fallbacks for buggy environments. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to query. |
|
|
* @returns {string} Returns the `toStringTag`. |
|
|
*/function baseGetTag(value){if(value==null){return value===undefined?undefinedTag:nullTag;}return symToStringTag&&symToStringTag in Object(value)?getRawTag(value):objectToString(value);}/** |
|
|
* A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to query. |
|
|
* @returns {string} Returns the raw `toStringTag`. |
|
|
*/function getRawTag(value){var isOwn=hasOwnProperty.call(value,symToStringTag),tag=value[symToStringTag];try{value[symToStringTag]=undefined;var unmasked=true;}catch(e){}var result=nativeObjectToString.call(value);if(unmasked){if(isOwn){value[symToStringTag]=tag;}else{delete value[symToStringTag];}}return result;}/** |
|
|
* Converts `value` to a string using `Object.prototype.toString`. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to convert. |
|
|
* @returns {string} Returns the converted string. |
|
|
*/function objectToString(value){return nativeObjectToString.call(value);}/** |
|
|
* Checks if `value` is classified as a `Function` object. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 0.1.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is a function, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isFunction(_); |
|
|
* // => true |
|
|
* |
|
|
* _.isFunction(/abc/); |
|
|
* // => false |
|
|
*/function isFunction(value){if(!isObject(value)){return false;}// The use of `Object#toString` avoids issues with the `typeof` operator |
|
|
// in Safari 9 which returns 'object' for typed arrays and other constructors. |
|
|
var tag=baseGetTag(value);return tag==funcTag||tag==genTag||tag==asyncTag||tag==proxyTag;}/** |
|
|
* Checks if `value` is the |
|
|
* [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) |
|
|
* of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 0.1.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is an object, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isObject({}); |
|
|
* // => true |
|
|
* |
|
|
* _.isObject([1, 2, 3]); |
|
|
* // => true |
|
|
* |
|
|
* _.isObject(_.noop); |
|
|
* // => true |
|
|
* |
|
|
* _.isObject(null); |
|
|
* // => false |
|
|
*/function isObject(value){var type=_typeof2(value);return value!=null&&(type=='object'||type=='function');}module.exports=isFunction;}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{}],408:[function(require,module,exports){/** |
|
|
* lodash 4.0.0 (Custom Build) <https://lodash.com/> |
|
|
* Build: `lodash modularize exports="npm" -o ./` |
|
|
* Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/> |
|
|
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> |
|
|
* Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors |
|
|
* Available under MIT license <https://lodash.com/license> |
|
|
*/ /** |
|
|
* Checks if `value` is `null` or `undefined`. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is nullish, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isNil(null); |
|
|
* // => true |
|
|
* |
|
|
* _.isNil(void 0); |
|
|
* // => true |
|
|
* |
|
|
* _.isNil(NaN); |
|
|
* // => false |
|
|
*/function isNil(value){return value==null;}module.exports=isNil;},{}],409:[function(require,module,exports){/** |
|
|
* lodash 3.0.1 (Custom Build) <https://lodash.com/> |
|
|
* Build: `lodash modern modularize exports="npm" -o ./` |
|
|
* Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/> |
|
|
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> |
|
|
* Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors |
|
|
* Available under MIT license <https://lodash.com/license> |
|
|
*/ /** |
|
|
* Checks if `value` is `undefined`. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isUndefined(void 0); |
|
|
* // => true |
|
|
* |
|
|
* _.isUndefined(null); |
|
|
* // => false |
|
|
*/function isUndefined(value){return value===undefined;}module.exports=isUndefined;},{}],410:[function(require,module,exports){(function(global){/** |
|
|
* lodash (Custom Build) <https://lodash.com/> |
|
|
* Build: `lodash modularize exports="npm" -o ./` |
|
|
* Copyright jQuery Foundation and other contributors <https://jquery.org/> |
|
|
* Released under MIT license <https://lodash.com/license> |
|
|
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> |
|
|
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors |
|
|
*/ /** Used as the size to enable large array optimizations. */var LARGE_ARRAY_SIZE=200;/** Used to stand-in for `undefined` hash values. */var HASH_UNDEFINED='__lodash_hash_undefined__';/** Used as references for various `Number` constants. */var INFINITY=1/0;/** `Object#toString` result references. */var funcTag='[object Function]',genTag='[object GeneratorFunction]';/** |
|
|
* Used to match `RegExp` |
|
|
* [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). |
|
|
*/var reRegExpChar=/[\\^$.*+?()[\]{}|]/g;/** Used to detect host constructors (Safari). */var reIsHostCtor=/^\[object .+?Constructor\]$/;/** Detect free variable `global` from Node.js. */var freeGlobal=_typeof2(global)=='object'&&global&&global.Object===Object&&global;/** Detect free variable `self`. */var freeSelf=(typeof self==="undefined"?"undefined":_typeof2(self))=='object'&&self&&self.Object===Object&&self;/** Used as a reference to the global object. */var root=freeGlobal||freeSelf||Function('return this')();/** |
|
|
* A specialized version of `_.includes` for arrays without support for |
|
|
* specifying an index to search from. |
|
|
* |
|
|
* @private |
|
|
* @param {Array} [array] The array to inspect. |
|
|
* @param {*} target The value to search for. |
|
|
* @returns {boolean} Returns `true` if `target` is found, else `false`. |
|
|
*/function arrayIncludes(array,value){var length=array?array.length:0;return!!length&&baseIndexOf(array,value,0)>-1;}/** |
|
|
* This function is like `arrayIncludes` except that it accepts a comparator. |
|
|
* |
|
|
* @private |
|
|
* @param {Array} [array] The array to inspect. |
|
|
* @param {*} target The value to search for. |
|
|
* @param {Function} comparator The comparator invoked per element. |
|
|
* @returns {boolean} Returns `true` if `target` is found, else `false`. |
|
|
*/function arrayIncludesWith(array,value,comparator){var index=-1,length=array?array.length:0;while(++index<length){if(comparator(value,array[index])){return true;}}return false;}/** |
|
|
* The base implementation of `_.findIndex` and `_.findLastIndex` without |
|
|
* support for iteratee shorthands. |
|
|
* |
|
|
* @private |
|
|
* @param {Array} array The array to inspect. |
|
|
* @param {Function} predicate The function invoked per iteration. |
|
|
* @param {number} fromIndex The index to search from. |
|
|
* @param {boolean} [fromRight] Specify iterating from right to left. |
|
|
* @returns {number} Returns the index of the matched value, else `-1`. |
|
|
*/function baseFindIndex(array,predicate,fromIndex,fromRight){var length=array.length,index=fromIndex+(fromRight?1:-1);while(fromRight?index--:++index<length){if(predicate(array[index],index,array)){return index;}}return-1;}/** |
|
|
* The base implementation of `_.indexOf` without `fromIndex` bounds checks. |
|
|
* |
|
|
* @private |
|
|
* @param {Array} array The array to inspect. |
|
|
* @param {*} value The value to search for. |
|
|
* @param {number} fromIndex The index to search from. |
|
|
* @returns {number} Returns the index of the matched value, else `-1`. |
|
|
*/function baseIndexOf(array,value,fromIndex){if(value!==value){return baseFindIndex(array,baseIsNaN,fromIndex);}var index=fromIndex-1,length=array.length;while(++index<length){if(array[index]===value){return index;}}return-1;}/** |
|
|
* The base implementation of `_.isNaN` without support for number objects. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. |
|
|
*/function baseIsNaN(value){return value!==value;}/** |
|
|
* Checks if a cache value for `key` exists. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} cache The cache to query. |
|
|
* @param {string} key The key of the entry to check. |
|
|
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. |
|
|
*/function cacheHas(cache,key){return cache.has(key);}/** |
|
|
* Gets the value at `key` of `object`. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} [object] The object to query. |
|
|
* @param {string} key The key of the property to get. |
|
|
* @returns {*} Returns the property value. |
|
|
*/function getValue(object,key){return object==null?undefined:object[key];}/** |
|
|
* Checks if `value` is a host object in IE < 9. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is a host object, else `false`. |
|
|
*/function isHostObject(value){// Many host objects are `Object` objects that can coerce to strings |
|
|
// despite having improperly defined `toString` methods. |
|
|
var result=false;if(value!=null&&typeof value.toString!='function'){try{result=!!(value+'');}catch(e){}}return result;}/** |
|
|
* Converts `set` to an array of its values. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} set The set to convert. |
|
|
* @returns {Array} Returns the values. |
|
|
*/function setToArray(set){var index=-1,result=Array(set.size);set.forEach(function(value){result[++index]=value;});return result;}/** Used for built-in method references. */var arrayProto=Array.prototype,funcProto=Function.prototype,objectProto=Object.prototype;/** Used to detect overreaching core-js shims. */var coreJsData=root['__core-js_shared__'];/** Used to detect methods masquerading as native. */var maskSrcKey=function(){var uid=/[^.]+$/.exec(coreJsData&&coreJsData.keys&&coreJsData.keys.IE_PROTO||'');return uid?'Symbol(src)_1.'+uid:'';}();/** Used to resolve the decompiled source of functions. */var funcToString=funcProto.toString;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/** |
|
|
* Used to resolve the |
|
|
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) |
|
|
* of values. |
|
|
*/var objectToString=objectProto.toString;/** Used to detect if a method is native. */var reIsNative=RegExp('^'+funcToString.call(hasOwnProperty).replace(reRegExpChar,'\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,'$1.*?')+'$');/** Built-in value references. */var splice=arrayProto.splice;/* Built-in method references that are verified to be native. */var Map=getNative(root,'Map'),Set=getNative(root,'Set'),nativeCreate=getNative(Object,'create');/** |
|
|
* Creates a hash object. |
|
|
* |
|
|
* @private |
|
|
* @constructor |
|
|
* @param {Array} [entries] The key-value pairs to cache. |
|
|
*/function Hash(entries){var index=-1,length=entries?entries.length:0;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}/** |
|
|
* Removes all key-value entries from the hash. |
|
|
* |
|
|
* @private |
|
|
* @name clear |
|
|
* @memberOf Hash |
|
|
*/function hashClear(){this.__data__=nativeCreate?nativeCreate(null):{};}/** |
|
|
* Removes `key` and its value from the hash. |
|
|
* |
|
|
* @private |
|
|
* @name delete |
|
|
* @memberOf Hash |
|
|
* @param {Object} hash The hash to modify. |
|
|
* @param {string} key The key of the value to remove. |
|
|
* @returns {boolean} Returns `true` if the entry was removed, else `false`. |
|
|
*/function hashDelete(key){return this.has(key)&&delete this.__data__[key];}/** |
|
|
* Gets the hash value for `key`. |
|
|
* |
|
|
* @private |
|
|
* @name get |
|
|
* @memberOf Hash |
|
|
* @param {string} key The key of the value to get. |
|
|
* @returns {*} Returns the entry value. |
|
|
*/function hashGet(key){var data=this.__data__;if(nativeCreate){var result=data[key];return result===HASH_UNDEFINED?undefined:result;}return hasOwnProperty.call(data,key)?data[key]:undefined;}/** |
|
|
* Checks if a hash value for `key` exists. |
|
|
* |
|
|
* @private |
|
|
* @name has |
|
|
* @memberOf Hash |
|
|
* @param {string} key The key of the entry to check. |
|
|
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. |
|
|
*/function hashHas(key){var data=this.__data__;return nativeCreate?data[key]!==undefined:hasOwnProperty.call(data,key);}/** |
|
|
* Sets the hash `key` to `value`. |
|
|
* |
|
|
* @private |
|
|
* @name set |
|
|
* @memberOf Hash |
|
|
* @param {string} key The key of the value to set. |
|
|
* @param {*} value The value to set. |
|
|
* @returns {Object} Returns the hash instance. |
|
|
*/function hashSet(key,value){var data=this.__data__;data[key]=nativeCreate&&value===undefined?HASH_UNDEFINED:value;return this;}// Add methods to `Hash`. |
|
|
Hash.prototype.clear=hashClear;Hash.prototype['delete']=hashDelete;Hash.prototype.get=hashGet;Hash.prototype.has=hashHas;Hash.prototype.set=hashSet;/** |
|
|
* Creates an list cache object. |
|
|
* |
|
|
* @private |
|
|
* @constructor |
|
|
* @param {Array} [entries] The key-value pairs to cache. |
|
|
*/function ListCache(entries){var index=-1,length=entries?entries.length:0;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}/** |
|
|
* Removes all key-value entries from the list cache. |
|
|
* |
|
|
* @private |
|
|
* @name clear |
|
|
* @memberOf ListCache |
|
|
*/function listCacheClear(){this.__data__=[];}/** |
|
|
* Removes `key` and its value from the list cache. |
|
|
* |
|
|
* @private |
|
|
* @name delete |
|
|
* @memberOf ListCache |
|
|
* @param {string} key The key of the value to remove. |
|
|
* @returns {boolean} Returns `true` if the entry was removed, else `false`. |
|
|
*/function listCacheDelete(key){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){return false;}var lastIndex=data.length-1;if(index==lastIndex){data.pop();}else{splice.call(data,index,1);}return true;}/** |
|
|
* Gets the list cache value for `key`. |
|
|
* |
|
|
* @private |
|
|
* @name get |
|
|
* @memberOf ListCache |
|
|
* @param {string} key The key of the value to get. |
|
|
* @returns {*} Returns the entry value. |
|
|
*/function listCacheGet(key){var data=this.__data__,index=assocIndexOf(data,key);return index<0?undefined:data[index][1];}/** |
|
|
* Checks if a list cache value for `key` exists. |
|
|
* |
|
|
* @private |
|
|
* @name has |
|
|
* @memberOf ListCache |
|
|
* @param {string} key The key of the entry to check. |
|
|
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. |
|
|
*/function listCacheHas(key){return assocIndexOf(this.__data__,key)>-1;}/** |
|
|
* Sets the list cache `key` to `value`. |
|
|
* |
|
|
* @private |
|
|
* @name set |
|
|
* @memberOf ListCache |
|
|
* @param {string} key The key of the value to set. |
|
|
* @param {*} value The value to set. |
|
|
* @returns {Object} Returns the list cache instance. |
|
|
*/function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){data.push([key,value]);}else{data[index][1]=value;}return this;}// Add methods to `ListCache`. |
|
|
ListCache.prototype.clear=listCacheClear;ListCache.prototype['delete']=listCacheDelete;ListCache.prototype.get=listCacheGet;ListCache.prototype.has=listCacheHas;ListCache.prototype.set=listCacheSet;/** |
|
|
* Creates a map cache object to store key-value pairs. |
|
|
* |
|
|
* @private |
|
|
* @constructor |
|
|
* @param {Array} [entries] The key-value pairs to cache. |
|
|
*/function MapCache(entries){var index=-1,length=entries?entries.length:0;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}/** |
|
|
* Removes all key-value entries from the map. |
|
|
* |
|
|
* @private |
|
|
* @name clear |
|
|
* @memberOf MapCache |
|
|
*/function mapCacheClear(){this.__data__={'hash':new Hash(),'map':new(Map||ListCache)(),'string':new Hash()};}/** |
|
|
* Removes `key` and its value from the map. |
|
|
* |
|
|
* @private |
|
|
* @name delete |
|
|
* @memberOf MapCache |
|
|
* @param {string} key The key of the value to remove. |
|
|
* @returns {boolean} Returns `true` if the entry was removed, else `false`. |
|
|
*/function mapCacheDelete(key){return getMapData(this,key)['delete'](key);}/** |
|
|
* Gets the map value for `key`. |
|
|
* |
|
|
* @private |
|
|
* @name get |
|
|
* @memberOf MapCache |
|
|
* @param {string} key The key of the value to get. |
|
|
* @returns {*} Returns the entry value. |
|
|
*/function mapCacheGet(key){return getMapData(this,key).get(key);}/** |
|
|
* Checks if a map value for `key` exists. |
|
|
* |
|
|
* @private |
|
|
* @name has |
|
|
* @memberOf MapCache |
|
|
* @param {string} key The key of the entry to check. |
|
|
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. |
|
|
*/function mapCacheHas(key){return getMapData(this,key).has(key);}/** |
|
|
* Sets the map `key` to `value`. |
|
|
* |
|
|
* @private |
|
|
* @name set |
|
|
* @memberOf MapCache |
|
|
* @param {string} key The key of the value to set. |
|
|
* @param {*} value The value to set. |
|
|
* @returns {Object} Returns the map cache instance. |
|
|
*/function mapCacheSet(key,value){getMapData(this,key).set(key,value);return this;}// Add methods to `MapCache`. |
|
|
MapCache.prototype.clear=mapCacheClear;MapCache.prototype['delete']=mapCacheDelete;MapCache.prototype.get=mapCacheGet;MapCache.prototype.has=mapCacheHas;MapCache.prototype.set=mapCacheSet;/** |
|
|
* |
|
|
* Creates an array cache object to store unique values. |
|
|
* |
|
|
* @private |
|
|
* @constructor |
|
|
* @param {Array} [values] The values to cache. |
|
|
*/function SetCache(values){var index=-1,length=values?values.length:0;this.__data__=new MapCache();while(++index<length){this.add(values[index]);}}/** |
|
|
* Adds `value` to the array cache. |
|
|
* |
|
|
* @private |
|
|
* @name add |
|
|
* @memberOf SetCache |
|
|
* @alias push |
|
|
* @param {*} value The value to cache. |
|
|
* @returns {Object} Returns the cache instance. |
|
|
*/function setCacheAdd(value){this.__data__.set(value,HASH_UNDEFINED);return this;}/** |
|
|
* Checks if `value` is in the array cache. |
|
|
* |
|
|
* @private |
|
|
* @name has |
|
|
* @memberOf SetCache |
|
|
* @param {*} value The value to search for. |
|
|
* @returns {number} Returns `true` if `value` is found, else `false`. |
|
|
*/function setCacheHas(value){return this.__data__.has(value);}// Add methods to `SetCache`. |
|
|
SetCache.prototype.add=SetCache.prototype.push=setCacheAdd;SetCache.prototype.has=setCacheHas;/** |
|
|
* Gets the index at which the `key` is found in `array` of key-value pairs. |
|
|
* |
|
|
* @private |
|
|
* @param {Array} array The array to inspect. |
|
|
* @param {*} key The key to search for. |
|
|
* @returns {number} Returns the index of the matched value, else `-1`. |
|
|
*/function assocIndexOf(array,key){var length=array.length;while(length--){if(eq(array[length][0],key)){return length;}}return-1;}/** |
|
|
* The base implementation of `_.isNative` without bad shim checks. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is a native function, |
|
|
* else `false`. |
|
|
*/function baseIsNative(value){if(!isObject(value)||isMasked(value)){return false;}var pattern=isFunction(value)||isHostObject(value)?reIsNative:reIsHostCtor;return pattern.test(toSource(value));}/** |
|
|
* The base implementation of `_.uniqBy` without support for iteratee shorthands. |
|
|
* |
|
|
* @private |
|
|
* @param {Array} array The array to inspect. |
|
|
* @param {Function} [iteratee] The iteratee invoked per element. |
|
|
* @param {Function} [comparator] The comparator invoked per element. |
|
|
* @returns {Array} Returns the new duplicate free array. |
|
|
*/function baseUniq(array,iteratee,comparator){var index=-1,includes=arrayIncludes,length=array.length,isCommon=true,result=[],seen=result;if(comparator){isCommon=false;includes=arrayIncludesWith;}else if(length>=LARGE_ARRAY_SIZE){var set=iteratee?null:createSet(array);if(set){return setToArray(set);}isCommon=false;includes=cacheHas;seen=new SetCache();}else{seen=iteratee?[]:result;}outer:while(++index<length){var value=array[index],computed=iteratee?iteratee(value):value;value=comparator||value!==0?value:0;if(isCommon&&computed===computed){var seenIndex=seen.length;while(seenIndex--){if(seen[seenIndex]===computed){continue outer;}}if(iteratee){seen.push(computed);}result.push(value);}else if(!includes(seen,computed,comparator)){if(seen!==result){seen.push(computed);}result.push(value);}}return result;}/** |
|
|
* Creates a set object of `values`. |
|
|
* |
|
|
* @private |
|
|
* @param {Array} values The values to add to the set. |
|
|
* @returns {Object} Returns the new set. |
|
|
*/var createSet=!(Set&&1/setToArray(new Set([,-0]))[1]==INFINITY)?noop:function(values){return new Set(values);};/** |
|
|
* Gets the data for `map`. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} map The map to query. |
|
|
* @param {string} key The reference key. |
|
|
* @returns {*} Returns the map data. |
|
|
*/function getMapData(map,key){var data=map.__data__;return isKeyable(key)?data[typeof key=='string'?'string':'hash']:data.map;}/** |
|
|
* Gets the native function at `key` of `object`. |
|
|
* |
|
|
* @private |
|
|
* @param {Object} object The object to query. |
|
|
* @param {string} key The key of the method to get. |
|
|
* @returns {*} Returns the function if it's native, else `undefined`. |
|
|
*/function getNative(object,key){var value=getValue(object,key);return baseIsNative(value)?value:undefined;}/** |
|
|
* Checks if `value` is suitable for use as unique object key. |
|
|
* |
|
|
* @private |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is suitable, else `false`. |
|
|
*/function isKeyable(value){var type=_typeof2(value);return type=='string'||type=='number'||type=='symbol'||type=='boolean'?value!=='__proto__':value===null;}/** |
|
|
* Checks if `func` has its source masked. |
|
|
* |
|
|
* @private |
|
|
* @param {Function} func The function to check. |
|
|
* @returns {boolean} Returns `true` if `func` is masked, else `false`. |
|
|
*/function isMasked(func){return!!maskSrcKey&&maskSrcKey in func;}/** |
|
|
* Converts `func` to its source code. |
|
|
* |
|
|
* @private |
|
|
* @param {Function} func The function to process. |
|
|
* @returns {string} Returns the source code. |
|
|
*/function toSource(func){if(func!=null){try{return funcToString.call(func);}catch(e){}try{return func+'';}catch(e){}}return'';}/** |
|
|
* Creates a duplicate-free version of an array, using |
|
|
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) |
|
|
* for equality comparisons, in which only the first occurrence of each |
|
|
* element is kept. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 0.1.0 |
|
|
* @category Array |
|
|
* @param {Array} array The array to inspect. |
|
|
* @returns {Array} Returns the new duplicate free array. |
|
|
* @example |
|
|
* |
|
|
* _.uniq([2, 1, 2]); |
|
|
* // => [2, 1] |
|
|
*/function uniq(array){return array&&array.length?baseUniq(array):[];}/** |
|
|
* Performs a |
|
|
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) |
|
|
* comparison between two values to determine if they are equivalent. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 4.0.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to compare. |
|
|
* @param {*} other The other value to compare. |
|
|
* @returns {boolean} Returns `true` if the values are equivalent, else `false`. |
|
|
* @example |
|
|
* |
|
|
* var object = { 'a': 1 }; |
|
|
* var other = { 'a': 1 }; |
|
|
* |
|
|
* _.eq(object, object); |
|
|
* // => true |
|
|
* |
|
|
* _.eq(object, other); |
|
|
* // => false |
|
|
* |
|
|
* _.eq('a', 'a'); |
|
|
* // => true |
|
|
* |
|
|
* _.eq('a', Object('a')); |
|
|
* // => false |
|
|
* |
|
|
* _.eq(NaN, NaN); |
|
|
* // => true |
|
|
*/function eq(value,other){return value===other||value!==value&&other!==other;}/** |
|
|
* Checks if `value` is classified as a `Function` object. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 0.1.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is a function, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isFunction(_); |
|
|
* // => true |
|
|
* |
|
|
* _.isFunction(/abc/); |
|
|
* // => false |
|
|
*/function isFunction(value){// The use of `Object#toString` avoids issues with the `typeof` operator |
|
|
// in Safari 8-9 which returns 'object' for typed array and other constructors. |
|
|
var tag=isObject(value)?objectToString.call(value):'';return tag==funcTag||tag==genTag;}/** |
|
|
* Checks if `value` is the |
|
|
* [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) |
|
|
* of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 0.1.0 |
|
|
* @category Lang |
|
|
* @param {*} value The value to check. |
|
|
* @returns {boolean} Returns `true` if `value` is an object, else `false`. |
|
|
* @example |
|
|
* |
|
|
* _.isObject({}); |
|
|
* // => true |
|
|
* |
|
|
* _.isObject([1, 2, 3]); |
|
|
* // => true |
|
|
* |
|
|
* _.isObject(_.noop); |
|
|
* // => true |
|
|
* |
|
|
* _.isObject(null); |
|
|
* // => false |
|
|
*/function isObject(value){var type=_typeof2(value);return!!value&&(type=='object'||type=='function');}/** |
|
|
* This method returns `undefined`. |
|
|
* |
|
|
* @static |
|
|
* @memberOf _ |
|
|
* @since 2.3.0 |
|
|
* @category Util |
|
|
* @example |
|
|
* |
|
|
* _.times(2, _.noop); |
|
|
* // => [undefined, undefined] |
|
|
*/function noop(){// No operation performed. |
|
|
}module.exports=uniq;}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{}],411:[function(require,module,exports){'use strict';var inherits=require('inherits');var HashBase=require('hash-base');var Buffer=require('safe-buffer').Buffer;var ARRAY16=new Array(16);function MD5(){HashBase.call(this,64);// state |
|
|
this._a=0x67452301;this._b=0xefcdab89;this._c=0x98badcfe;this._d=0x10325476;}inherits(MD5,HashBase);MD5.prototype._update=function(){var M=ARRAY16;for(var i=0;i<16;++i){M[i]=this._block.readInt32LE(i*4);}var a=this._a;var b=this._b;var c=this._c;var d=this._d;a=fnF(a,b,c,d,M[0],0xd76aa478,7);d=fnF(d,a,b,c,M[1],0xe8c7b756,12);c=fnF(c,d,a,b,M[2],0x242070db,17);b=fnF(b,c,d,a,M[3],0xc1bdceee,22);a=fnF(a,b,c,d,M[4],0xf57c0faf,7);d=fnF(d,a,b,c,M[5],0x4787c62a,12);c=fnF(c,d,a,b,M[6],0xa8304613,17);b=fnF(b,c,d,a,M[7],0xfd469501,22);a=fnF(a,b,c,d,M[8],0x698098d8,7);d=fnF(d,a,b,c,M[9],0x8b44f7af,12);c=fnF(c,d,a,b,M[10],0xffff5bb1,17);b=fnF(b,c,d,a,M[11],0x895cd7be,22);a=fnF(a,b,c,d,M[12],0x6b901122,7);d=fnF(d,a,b,c,M[13],0xfd987193,12);c=fnF(c,d,a,b,M[14],0xa679438e,17);b=fnF(b,c,d,a,M[15],0x49b40821,22);a=fnG(a,b,c,d,M[1],0xf61e2562,5);d=fnG(d,a,b,c,M[6],0xc040b340,9);c=fnG(c,d,a,b,M[11],0x265e5a51,14);b=fnG(b,c,d,a,M[0],0xe9b6c7aa,20);a=fnG(a,b,c,d,M[5],0xd62f105d,5);d=fnG(d,a,b,c,M[10],0x02441453,9);c=fnG(c,d,a,b,M[15],0xd8a1e681,14);b=fnG(b,c,d,a,M[4],0xe7d3fbc8,20);a=fnG(a,b,c,d,M[9],0x21e1cde6,5);d=fnG(d,a,b,c,M[14],0xc33707d6,9);c=fnG(c,d,a,b,M[3],0xf4d50d87,14);b=fnG(b,c,d,a,M[8],0x455a14ed,20);a=fnG(a,b,c,d,M[13],0xa9e3e905,5);d=fnG(d,a,b,c,M[2],0xfcefa3f8,9);c=fnG(c,d,a,b,M[7],0x676f02d9,14);b=fnG(b,c,d,a,M[12],0x8d2a4c8a,20);a=fnH(a,b,c,d,M[5],0xfffa3942,4);d=fnH(d,a,b,c,M[8],0x8771f681,11);c=fnH(c,d,a,b,M[11],0x6d9d6122,16);b=fnH(b,c,d,a,M[14],0xfde5380c,23);a=fnH(a,b,c,d,M[1],0xa4beea44,4);d=fnH(d,a,b,c,M[4],0x4bdecfa9,11);c=fnH(c,d,a,b,M[7],0xf6bb4b60,16);b=fnH(b,c,d,a,M[10],0xbebfbc70,23);a=fnH(a,b,c,d,M[13],0x289b7ec6,4);d=fnH(d,a,b,c,M[0],0xeaa127fa,11);c=fnH(c,d,a,b,M[3],0xd4ef3085,16);b=fnH(b,c,d,a,M[6],0x04881d05,23);a=fnH(a,b,c,d,M[9],0xd9d4d039,4);d=fnH(d,a,b,c,M[12],0xe6db99e5,11);c=fnH(c,d,a,b,M[15],0x1fa27cf8,16);b=fnH(b,c,d,a,M[2],0xc4ac5665,23);a=fnI(a,b,c,d,M[0],0xf4292244,6);d=fnI(d,a,b,c,M[7],0x432aff97,10);c=fnI(c,d,a,b,M[14],0xab9423a7,15);b=fnI(b,c,d,a,M[5],0xfc93a039,21);a=fnI(a,b,c,d,M[12],0x655b59c3,6);d=fnI(d,a,b,c,M[3],0x8f0ccc92,10);c=fnI(c,d,a,b,M[10],0xffeff47d,15);b=fnI(b,c,d,a,M[1],0x85845dd1,21);a=fnI(a,b,c,d,M[8],0x6fa87e4f,6);d=fnI(d,a,b,c,M[15],0xfe2ce6e0,10);c=fnI(c,d,a,b,M[6],0xa3014314,15);b=fnI(b,c,d,a,M[13],0x4e0811a1,21);a=fnI(a,b,c,d,M[4],0xf7537e82,6);d=fnI(d,a,b,c,M[11],0xbd3af235,10);c=fnI(c,d,a,b,M[2],0x2ad7d2bb,15);b=fnI(b,c,d,a,M[9],0xeb86d391,21);this._a=this._a+a|0;this._b=this._b+b|0;this._c=this._c+c|0;this._d=this._d+d|0;};MD5.prototype._digest=function(){// create padding and handle blocks |
|
|
this._block[this._blockOffset++]=0x80;if(this._blockOffset>56){this._block.fill(0,this._blockOffset,64);this._update();this._blockOffset=0;}this._block.fill(0,this._blockOffset,56);this._block.writeUInt32LE(this._length[0],56);this._block.writeUInt32LE(this._length[1],60);this._update();// produce result |
|
|
var buffer=Buffer.allocUnsafe(16);buffer.writeInt32LE(this._a,0);buffer.writeInt32LE(this._b,4);buffer.writeInt32LE(this._c,8);buffer.writeInt32LE(this._d,12);return buffer;};function rotl(x,n){return x<<n|x>>>32-n;}function fnF(a,b,c,d,m,k,s){return rotl(a+(b&c|~b&d)+m+k|0,s)+b|0;}function fnG(a,b,c,d,m,k,s){return rotl(a+(b&d|c&~d)+m+k|0,s)+b|0;}function fnH(a,b,c,d,m,k,s){return rotl(a+(b^c^d)+m+k|0,s)+b|0;}function fnI(a,b,c,d,m,k,s){return rotl(a+(c^(b|~d))+m+k|0,s)+b|0;}module.exports=MD5;},{"hash-base":347,"inherits":364,"safe-buffer":470}],412:[function(require,module,exports){var bn=require('bn.js');var brorand=require('brorand');function MillerRabin(rand){this.rand=rand||new brorand.Rand();}module.exports=MillerRabin;MillerRabin.create=function create(rand){return new MillerRabin(rand);};MillerRabin.prototype._randbelow=function _randbelow(n){var len=n.bitLength();var min_bytes=Math.ceil(len/8);// Generage random bytes until a number less than n is found. |
|
|
// This ensures that 0..n-1 have an equal probability of being selected. |
|
|
do{var a=new bn(this.rand.generate(min_bytes));}while(a.cmp(n)>=0);return a;};MillerRabin.prototype._randrange=function _randrange(start,stop){// Generate a random number greater than or equal to start and less than stop. |
|
|
var size=stop.sub(start);return start.add(this._randbelow(size));};MillerRabin.prototype.test=function test(n,k,cb){var len=n.bitLength();var red=bn.mont(n);var rone=new bn(1).toRed(red);if(!k)k=Math.max(1,len/48|0);// Find d and s, (n - 1) = (2 ^ s) * d; |
|
|
var n1=n.subn(1);for(var s=0;!n1.testn(s);s++){}var d=n.shrn(s);var rn1=n1.toRed(red);var prime=true;for(;k>0;k--){var a=this._randrange(new bn(2),n1);if(cb)cb(a);var x=a.toRed(red).redPow(d);if(x.cmp(rone)===0||x.cmp(rn1)===0)continue;for(var i=1;i<s;i++){x=x.redSqr();if(x.cmp(rone)===0)return false;if(x.cmp(rn1)===0)break;}if(i===s)return false;}return prime;};MillerRabin.prototype.getDivisor=function getDivisor(n,k){var len=n.bitLength();var red=bn.mont(n);var rone=new bn(1).toRed(red);if(!k)k=Math.max(1,len/48|0);// Find d and s, (n - 1) = (2 ^ s) * d; |
|
|
var n1=n.subn(1);for(var s=0;!n1.testn(s);s++){}var d=n.shrn(s);var rn1=n1.toRed(red);for(;k>0;k--){var a=this._randrange(new bn(2),n1);var g=n.gcd(a);if(g.cmpn(1)!==0)return g;var x=a.toRed(red).redPow(d);if(x.cmp(rone)===0||x.cmp(rn1)===0)continue;for(var i=1;i<s;i++){x=x.redSqr();if(x.cmp(rone)===0)return x.fromRed().subn(1).gcd(n);if(x.cmp(rn1)===0)break;}if(i===s){x=x.redSqr();return x.fromRed().subn(1).gcd(n);}}return false;};},{"bn.js":413,"brorand":182}],413:[function(require,module,exports){arguments[4][179][0].apply(exports,arguments);},{"buffer":183,"dup":179}],414:[function(require,module,exports){module.exports=assert;function assert(val,msg){if(!val)throw new Error(msg||'Assertion failed');}assert.equal=function assertEqual(l,r,msg){if(l!=r)throw new Error(msg||'Assertion failed: '+l+' != '+r);};},{}],415:[function(require,module,exports){'use strict';var utils=exports;function toArray(msg,enc){if(Array.isArray(msg))return msg.slice();if(!msg)return[];var res=[];if(typeof msg!=='string'){for(var i=0;i<msg.length;i++){res[i]=msg[i]|0;}return res;}if(enc==='hex'){msg=msg.replace(/[^a-z0-9]+/ig,'');if(msg.length%2!==0)msg='0'+msg;for(var i=0;i<msg.length;i+=2){res.push(parseInt(msg[i]+msg[i+1],16));}}else{for(var i=0;i<msg.length;i++){var c=msg.charCodeAt(i);var hi=c>>8;var lo=c&0xff;if(hi)res.push(hi,lo);else res.push(lo);}}return res;}utils.toArray=toArray;function zero2(word){if(word.length===1)return'0'+word;else return word;}utils.zero2=zero2;function toHex(msg){var res='';for(var i=0;i<msg.length;i++){res+=zero2(msg[i].toString(16));}return res;}utils.toHex=toHex;utils.encode=function encode(arr,enc){if(enc==='hex')return toHex(arr);else return arr;};},{}],416:[function(require,module,exports){// Top level file is just a mixin of submodules & constants |
|
|
'use strict';var assign=require('./lib/utils/common').assign;var deflate=require('./lib/deflate');var inflate=require('./lib/inflate');var constants=require('./lib/zlib/constants');var pako={};assign(pako,deflate,inflate,constants);module.exports=pako;},{"./lib/deflate":417,"./lib/inflate":418,"./lib/utils/common":419,"./lib/zlib/constants":422}],417:[function(require,module,exports){'use strict';var zlib_deflate=require('./zlib/deflate');var utils=require('./utils/common');var strings=require('./utils/strings');var msg=require('./zlib/messages');var ZStream=require('./zlib/zstream');var toString=Object.prototype.toString;/* Public constants ==========================================================*/ /* ===========================================================================*/var Z_NO_FLUSH=0;var Z_FINISH=4;var Z_OK=0;var Z_STREAM_END=1;var Z_SYNC_FLUSH=2;var Z_DEFAULT_COMPRESSION=-1;var Z_DEFAULT_STRATEGY=0;var Z_DEFLATED=8;/* ===========================================================================*/ /** |
|
|
* class Deflate |
|
|
* |
|
|
* Generic JS-style wrapper for zlib calls. If you don't need |
|
|
* streaming behaviour - use more simple functions: [[deflate]], |
|
|
* [[deflateRaw]] and [[gzip]]. |
|
|
**/ /* internal |
|
|
* Deflate.chunks -> Array |
|
|
* |
|
|
* Chunks of output data, if [[Deflate#onData]] not overridden. |
|
|
**/ /** |
|
|
* Deflate.result -> Uint8Array|Array |
|
|
* |
|
|
* Compressed result, generated by default [[Deflate#onData]] |
|
|
* and [[Deflate#onEnd]] handlers. Filled after you push last chunk |
|
|
* (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you |
|
|
* push a chunk with explicit flush (call [[Deflate#push]] with |
|
|
* `Z_SYNC_FLUSH` param). |
|
|
**/ /** |
|
|
* Deflate.err -> Number |
|
|
* |
|
|
* Error code after deflate finished. 0 (Z_OK) on success. |
|
|
* You will not need it in real life, because deflate errors |
|
|
* are possible only on wrong options or bad `onData` / `onEnd` |
|
|
* custom handlers. |
|
|
**/ /** |
|
|
* Deflate.msg -> String |
|
|
* |
|
|
* Error message, if [[Deflate.err]] != 0 |
|
|
**/ /** |
|
|
* new Deflate(options) |
|
|
* - options (Object): zlib deflate options. |
|
|
* |
|
|
* Creates new deflator instance with specified params. Throws exception |
|
|
* on bad params. Supported options: |
|
|
* |
|
|
* - `level` |
|
|
* - `windowBits` |
|
|
* - `memLevel` |
|
|
* - `strategy` |
|
|
* - `dictionary` |
|
|
* |
|
|
* [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) |
|
|
* for more information on these. |
|
|
* |
|
|
* Additional options, for internal needs: |
|
|
* |
|
|
* - `chunkSize` - size of generated data chunks (16K by default) |
|
|
* - `raw` (Boolean) - do raw deflate |
|
|
* - `gzip` (Boolean) - create gzip wrapper |
|
|
* - `to` (String) - if equal to 'string', then result will be "binary string" |
|
|
* (each char code [0..255]) |
|
|
* - `header` (Object) - custom header for gzip |
|
|
* - `text` (Boolean) - true if compressed data believed to be text |
|
|
* - `time` (Number) - modification time, unix timestamp |
|
|
* - `os` (Number) - operation system code |
|
|
* - `extra` (Array) - array of bytes with extra data (max 65536) |
|
|
* - `name` (String) - file name (binary string) |
|
|
* - `comment` (String) - comment (binary string) |
|
|
* - `hcrc` (Boolean) - true if header crc should be added |
|
|
* |
|
|
* ##### Example: |
|
|
* |
|
|
* ```javascript |
|
|
* var pako = require('pako') |
|
|
* , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) |
|
|
* , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); |
|
|
* |
|
|
* var deflate = new pako.Deflate({ level: 3}); |
|
|
* |
|
|
* deflate.push(chunk1, false); |
|
|
* deflate.push(chunk2, true); // true -> last chunk |
|
|
* |
|
|
* if (deflate.err) { throw new Error(deflate.err); } |
|
|
* |
|
|
* console.log(deflate.result); |
|
|
* ``` |
|
|
**/function Deflate(options){if(!(this instanceof Deflate))return new Deflate(options);this.options=utils.assign({level:Z_DEFAULT_COMPRESSION,method:Z_DEFLATED,chunkSize:16384,windowBits:15,memLevel:8,strategy:Z_DEFAULT_STRATEGY,to:''},options||{});var opt=this.options;if(opt.raw&&opt.windowBits>0){opt.windowBits=-opt.windowBits;}else if(opt.gzip&&opt.windowBits>0&&opt.windowBits<16){opt.windowBits+=16;}this.err=0;// error code, if happens (0 = Z_OK) |
|
|
this.msg='';// error message |
|
|
this.ended=false;// used to avoid multiple onEnd() calls |
|
|
this.chunks=[];// chunks of compressed data |
|
|
this.strm=new ZStream();this.strm.avail_out=0;var status=zlib_deflate.deflateInit2(this.strm,opt.level,opt.method,opt.windowBits,opt.memLevel,opt.strategy);if(status!==Z_OK){throw new Error(msg[status]);}if(opt.header){zlib_deflate.deflateSetHeader(this.strm,opt.header);}if(opt.dictionary){var dict;// Convert data if needed |
|
|
if(typeof opt.dictionary==='string'){// If we need to compress text, change encoding to utf8. |
|
|
dict=strings.string2buf(opt.dictionary);}else if(toString.call(opt.dictionary)==='[object ArrayBuffer]'){dict=new Uint8Array(opt.dictionary);}else{dict=opt.dictionary;}status=zlib_deflate.deflateSetDictionary(this.strm,dict);if(status!==Z_OK){throw new Error(msg[status]);}this._dict_set=true;}}/** |
|
|
* Deflate#push(data[, mode]) -> Boolean |
|
|
* - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be |
|
|
* converted to utf8 byte sequence. |
|
|
* - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. |
|
|
* See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH. |
|
|
* |
|
|
* Sends input data to deflate pipe, generating [[Deflate#onData]] calls with |
|
|
* new compressed chunks. Returns `true` on success. The last data block must have |
|
|
* mode Z_FINISH (or `true`). That will flush internal pending buffers and call |
|
|
* [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you |
|
|
* can use mode Z_SYNC_FLUSH, keeping the compression context. |
|
|
* |
|
|
* On fail call [[Deflate#onEnd]] with error code and return false. |
|
|
* |
|
|
* We strongly recommend to use `Uint8Array` on input for best speed (output |
|
|
* array format is detected automatically). Also, don't skip last param and always |
|
|
* use the same type in your code (boolean or number). That will improve JS speed. |
|
|
* |
|
|
* For regular `Array`-s make sure all elements are [0..255]. |
|
|
* |
|
|
* ##### Example |
|
|
* |
|
|
* ```javascript |
|
|
* push(chunk, false); // push one of data chunks |
|
|
* ... |
|
|
* push(chunk, true); // push last chunk |
|
|
* ``` |
|
|
**/Deflate.prototype.push=function(data,mode){var strm=this.strm;var chunkSize=this.options.chunkSize;var status,_mode;if(this.ended){return false;}_mode=mode===~~mode?mode:mode===true?Z_FINISH:Z_NO_FLUSH;// Convert data if needed |
|
|
if(typeof data==='string'){// If we need to compress text, change encoding to utf8. |
|
|
strm.input=strings.string2buf(data);}else if(toString.call(data)==='[object ArrayBuffer]'){strm.input=new Uint8Array(data);}else{strm.input=data;}strm.next_in=0;strm.avail_in=strm.input.length;do{if(strm.avail_out===0){strm.output=new utils.Buf8(chunkSize);strm.next_out=0;strm.avail_out=chunkSize;}status=zlib_deflate.deflate(strm,_mode);/* no bad return value */if(status!==Z_STREAM_END&&status!==Z_OK){this.onEnd(status);this.ended=true;return false;}if(strm.avail_out===0||strm.avail_in===0&&(_mode===Z_FINISH||_mode===Z_SYNC_FLUSH)){if(this.options.to==='string'){this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output,strm.next_out)));}else{this.onData(utils.shrinkBuf(strm.output,strm.next_out));}}}while((strm.avail_in>0||strm.avail_out===0)&&status!==Z_STREAM_END);// Finalize on the last chunk. |
|
|
if(_mode===Z_FINISH){status=zlib_deflate.deflateEnd(this.strm);this.onEnd(status);this.ended=true;return status===Z_OK;}// callback interim results if Z_SYNC_FLUSH. |
|
|
if(_mode===Z_SYNC_FLUSH){this.onEnd(Z_OK);strm.avail_out=0;return true;}return true;};/** |
|
|
* Deflate#onData(chunk) -> Void |
|
|
* - chunk (Uint8Array|Array|String): output data. Type of array depends |
|
|
* on js engine support. When string output requested, each chunk |
|
|
* will be string. |
|
|
* |
|
|
* By default, stores data blocks in `chunks[]` property and glue |
|
|
* those in `onEnd`. Override this handler, if you need another behaviour. |
|
|
**/Deflate.prototype.onData=function(chunk){this.chunks.push(chunk);};/** |
|
|
* Deflate#onEnd(status) -> Void |
|
|
* - status (Number): deflate status. 0 (Z_OK) on success, |
|
|
* other if not. |
|
|
* |
|
|
* Called once after you tell deflate that the input stream is |
|
|
* complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) |
|
|
* or if an error happened. By default - join collected chunks, |
|
|
* free memory and fill `results` / `err` properties. |
|
|
**/Deflate.prototype.onEnd=function(status){// On success - join |
|
|
if(status===Z_OK){if(this.options.to==='string'){this.result=this.chunks.join('');}else{this.result=utils.flattenChunks(this.chunks);}}this.chunks=[];this.err=status;this.msg=this.strm.msg;};/** |
|
|
* deflate(data[, options]) -> Uint8Array|Array|String |
|
|
* - data (Uint8Array|Array|String): input data to compress. |
|
|
* - options (Object): zlib deflate options. |
|
|
* |
|
|
* Compress `data` with deflate algorithm and `options`. |
|
|
* |
|
|
* Supported options are: |
|
|
* |
|
|
* - level |
|
|
* - windowBits |
|
|
* - memLevel |
|
|
* - strategy |
|
|
* - dictionary |
|
|
* |
|
|
* [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) |
|
|
* for more information on these. |
|
|
* |
|
|
* Sugar (options): |
|
|
* |
|
|
* - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify |
|
|
* negative windowBits implicitly. |
|
|
* - `to` (String) - if equal to 'string', then result will be "binary string" |
|
|
* (each char code [0..255]) |
|
|
* |
|
|
* ##### Example: |
|
|
* |
|
|
* ```javascript |
|
|
* var pako = require('pako') |
|
|
* , data = Uint8Array([1,2,3,4,5,6,7,8,9]); |
|
|
* |
|
|
* console.log(pako.deflate(data)); |
|
|
* ``` |
|
|
**/function deflate(input,options){var deflator=new Deflate(options);deflator.push(input,true);// That will never happens, if you don't cheat with options :) |
|
|
if(deflator.err){throw deflator.msg||msg[deflator.err];}return deflator.result;}/** |
|
|
* deflateRaw(data[, options]) -> Uint8Array|Array|String |
|
|
* - data (Uint8Array|Array|String): input data to compress. |
|
|
* - options (Object): zlib deflate options. |
|
|
* |
|
|
* The same as [[deflate]], but creates raw data, without wrapper |
|
|
* (header and adler32 crc). |
|
|
**/function deflateRaw(input,options){options=options||{};options.raw=true;return deflate(input,options);}/** |
|
|
* gzip(data[, options]) -> Uint8Array|Array|String |
|
|
* - data (Uint8Array|Array|String): input data to compress. |
|
|
* - options (Object): zlib deflate options. |
|
|
* |
|
|
* The same as [[deflate]], but create gzip wrapper instead of |
|
|
* deflate one. |
|
|
**/function gzip(input,options){options=options||{};options.gzip=true;return deflate(input,options);}exports.Deflate=Deflate;exports.deflate=deflate;exports.deflateRaw=deflateRaw;exports.gzip=gzip;},{"./utils/common":419,"./utils/strings":420,"./zlib/deflate":424,"./zlib/messages":429,"./zlib/zstream":431}],418:[function(require,module,exports){'use strict';var zlib_inflate=require('./zlib/inflate');var utils=require('./utils/common');var strings=require('./utils/strings');var c=require('./zlib/constants');var msg=require('./zlib/messages');var ZStream=require('./zlib/zstream');var GZheader=require('./zlib/gzheader');var toString=Object.prototype.toString;/** |
|
|
* class Inflate |
|
|
* |
|
|
* Generic JS-style wrapper for zlib calls. If you don't need |
|
|
* streaming behaviour - use more simple functions: [[inflate]] |
|
|
* and [[inflateRaw]]. |
|
|
**/ /* internal |
|
|
* inflate.chunks -> Array |
|
|
* |
|
|
* Chunks of output data, if [[Inflate#onData]] not overridden. |
|
|
**/ /** |
|
|
* Inflate.result -> Uint8Array|Array|String |
|
|
* |
|
|
* Uncompressed result, generated by default [[Inflate#onData]] |
|
|
* and [[Inflate#onEnd]] handlers. Filled after you push last chunk |
|
|
* (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you |
|
|
* push a chunk with explicit flush (call [[Inflate#push]] with |
|
|
* `Z_SYNC_FLUSH` param). |
|
|
**/ /** |
|
|
* Inflate.err -> Number |
|
|
* |
|
|
* Error code after inflate finished. 0 (Z_OK) on success. |
|
|
* Should be checked if broken data possible. |
|
|
**/ /** |
|
|
* Inflate.msg -> String |
|
|
* |
|
|
* Error message, if [[Inflate.err]] != 0 |
|
|
**/ /** |
|
|
* new Inflate(options) |
|
|
* - options (Object): zlib inflate options. |
|
|
* |
|
|
* Creates new inflator instance with specified params. Throws exception |
|
|
* on bad params. Supported options: |
|
|
* |
|
|
* - `windowBits` |
|
|
* - `dictionary` |
|
|
* |
|
|
* [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) |
|
|
* for more information on these. |
|
|
* |
|
|
* Additional options, for internal needs: |
|
|
* |
|
|
* - `chunkSize` - size of generated data chunks (16K by default) |
|
|
* - `raw` (Boolean) - do raw inflate |
|
|
* - `to` (String) - if equal to 'string', then result will be converted |
|
|
* from utf8 to utf16 (javascript) string. When string output requested, |
|
|
* chunk length can differ from `chunkSize`, depending on content. |
|
|
* |
|
|
* By default, when no options set, autodetect deflate/gzip data format via |
|
|
* wrapper header. |
|
|
* |
|
|
* ##### Example: |
|
|
* |
|
|
* ```javascript |
|
|
* var pako = require('pako') |
|
|
* , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) |
|
|
* , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); |
|
|
* |
|
|
* var inflate = new pako.Inflate({ level: 3}); |
|
|
* |
|
|
* inflate.push(chunk1, false); |
|
|
* inflate.push(chunk2, true); // true -> last chunk |
|
|
* |
|
|
* if (inflate.err) { throw new Error(inflate.err); } |
|
|
* |
|
|
* console.log(inflate.result); |
|
|
* ``` |
|
|
**/function Inflate(options){if(!(this instanceof Inflate))return new Inflate(options);this.options=utils.assign({chunkSize:16384,windowBits:0,to:''},options||{});var opt=this.options;// Force window size for `raw` data, if not set directly, |
|
|
// because we have no header for autodetect. |
|
|
if(opt.raw&&opt.windowBits>=0&&opt.windowBits<16){opt.windowBits=-opt.windowBits;if(opt.windowBits===0){opt.windowBits=-15;}}// If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate |
|
|
if(opt.windowBits>=0&&opt.windowBits<16&&!(options&&options.windowBits)){opt.windowBits+=32;}// Gzip header has no info about windows size, we can do autodetect only |
|
|
// for deflate. So, if window size not set, force it to max when gzip possible |
|
|
if(opt.windowBits>15&&opt.windowBits<48){// bit 3 (16) -> gzipped data |
|
|
// bit 4 (32) -> autodetect gzip/deflate |
|
|
if((opt.windowBits&15)===0){opt.windowBits|=15;}}this.err=0;// error code, if happens (0 = Z_OK) |
|
|
this.msg='';// error message |
|
|
this.ended=false;// used to avoid multiple onEnd() calls |
|
|
this.chunks=[];// chunks of compressed data |
|
|
this.strm=new ZStream();this.strm.avail_out=0;var status=zlib_inflate.inflateInit2(this.strm,opt.windowBits);if(status!==c.Z_OK){throw new Error(msg[status]);}this.header=new GZheader();zlib_inflate.inflateGetHeader(this.strm,this.header);// Setup dictionary |
|
|
if(opt.dictionary){// Convert data if needed |
|
|
if(typeof opt.dictionary==='string'){opt.dictionary=strings.string2buf(opt.dictionary);}else if(toString.call(opt.dictionary)==='[object ArrayBuffer]'){opt.dictionary=new Uint8Array(opt.dictionary);}if(opt.raw){//In raw mode we need to set the dictionary early |
|
|
status=zlib_inflate.inflateSetDictionary(this.strm,opt.dictionary);if(status!==c.Z_OK){throw new Error(msg[status]);}}}}/** |
|
|
* Inflate#push(data[, mode]) -> Boolean |
|
|
* - data (Uint8Array|Array|ArrayBuffer|String): input data |
|
|
* - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. |
|
|
* See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH. |
|
|
* |
|
|
* Sends input data to inflate pipe, generating [[Inflate#onData]] calls with |
|
|
* new output chunks. Returns `true` on success. The last data block must have |
|
|
* mode Z_FINISH (or `true`). That will flush internal pending buffers and call |
|
|
* [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you |
|
|
* can use mode Z_SYNC_FLUSH, keeping the decompression context. |
|
|
* |
|
|
* On fail call [[Inflate#onEnd]] with error code and return false. |
|
|
* |
|
|
* We strongly recommend to use `Uint8Array` on input for best speed (output |
|
|
* format is detected automatically). Also, don't skip last param and always |
|
|
* use the same type in your code (boolean or number). That will improve JS speed. |
|
|
* |
|
|
* For regular `Array`-s make sure all elements are [0..255]. |
|
|
* |
|
|
* ##### Example |
|
|
* |
|
|
* ```javascript |
|
|
* push(chunk, false); // push one of data chunks |
|
|
* ... |
|
|
* push(chunk, true); // push last chunk |
|
|
* ``` |
|
|
**/Inflate.prototype.push=function(data,mode){var strm=this.strm;var chunkSize=this.options.chunkSize;var dictionary=this.options.dictionary;var status,_mode;var next_out_utf8,tail,utf8str;// Flag to properly process Z_BUF_ERROR on testing inflate call |
|
|
// when we check that all output data was flushed. |
|
|
var allowBufError=false;if(this.ended){return false;}_mode=mode===~~mode?mode:mode===true?c.Z_FINISH:c.Z_NO_FLUSH;// Convert data if needed |
|
|
if(typeof data==='string'){// Only binary strings can be decompressed on practice |
|
|
strm.input=strings.binstring2buf(data);}else if(toString.call(data)==='[object ArrayBuffer]'){strm.input=new Uint8Array(data);}else{strm.input=data;}strm.next_in=0;strm.avail_in=strm.input.length;do{if(strm.avail_out===0){strm.output=new utils.Buf8(chunkSize);strm.next_out=0;strm.avail_out=chunkSize;}status=zlib_inflate.inflate(strm,c.Z_NO_FLUSH);/* no bad return value */if(status===c.Z_NEED_DICT&&dictionary){status=zlib_inflate.inflateSetDictionary(this.strm,dictionary);}if(status===c.Z_BUF_ERROR&&allowBufError===true){status=c.Z_OK;allowBufError=false;}if(status!==c.Z_STREAM_END&&status!==c.Z_OK){this.onEnd(status);this.ended=true;return false;}if(strm.next_out){if(strm.avail_out===0||status===c.Z_STREAM_END||strm.avail_in===0&&(_mode===c.Z_FINISH||_mode===c.Z_SYNC_FLUSH)){if(this.options.to==='string'){next_out_utf8=strings.utf8border(strm.output,strm.next_out);tail=strm.next_out-next_out_utf8;utf8str=strings.buf2string(strm.output,next_out_utf8);// move tail |
|
|
strm.next_out=tail;strm.avail_out=chunkSize-tail;if(tail){utils.arraySet(strm.output,strm.output,next_out_utf8,tail,0);}this.onData(utf8str);}else{this.onData(utils.shrinkBuf(strm.output,strm.next_out));}}}// When no more input data, we should check that internal inflate buffers |
|
|
// are flushed. The only way to do it when avail_out = 0 - run one more |
|
|
// inflate pass. But if output data not exists, inflate return Z_BUF_ERROR. |
|
|
// Here we set flag to process this error properly. |
|
|
// |
|
|
// NOTE. Deflate does not return error in this case and does not needs such |
|
|
// logic. |
|
|
if(strm.avail_in===0&&strm.avail_out===0){allowBufError=true;}}while((strm.avail_in>0||strm.avail_out===0)&&status!==c.Z_STREAM_END);if(status===c.Z_STREAM_END){_mode=c.Z_FINISH;}// Finalize on the last chunk. |
|
|
if(_mode===c.Z_FINISH){status=zlib_inflate.inflateEnd(this.strm);this.onEnd(status);this.ended=true;return status===c.Z_OK;}// callback interim results if Z_SYNC_FLUSH. |
|
|
if(_mode===c.Z_SYNC_FLUSH){this.onEnd(c.Z_OK);strm.avail_out=0;return true;}return true;};/** |
|
|
* Inflate#onData(chunk) -> Void |
|
|
* - chunk (Uint8Array|Array|String): output data. Type of array depends |
|
|
* on js engine support. When string output requested, each chunk |
|
|
* will be string. |
|
|
* |
|
|
* By default, stores data blocks in `chunks[]` property and glue |
|
|
* those in `onEnd`. Override this handler, if you need another behaviour. |
|
|
**/Inflate.prototype.onData=function(chunk){this.chunks.push(chunk);};/** |
|
|
* Inflate#onEnd(status) -> Void |
|
|
* - status (Number): inflate status. 0 (Z_OK) on success, |
|
|
* other if not. |
|
|
* |
|
|
* Called either after you tell inflate that the input stream is |
|
|
* complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) |
|
|
* or if an error happened. By default - join collected chunks, |
|
|
* free memory and fill `results` / `err` properties. |
|
|
**/Inflate.prototype.onEnd=function(status){// On success - join |
|
|
if(status===c.Z_OK){if(this.options.to==='string'){// Glue & convert here, until we teach pako to send |
|
|
// utf8 aligned strings to onData |
|
|
this.result=this.chunks.join('');}else{this.result=utils.flattenChunks(this.chunks);}}this.chunks=[];this.err=status;this.msg=this.strm.msg;};/** |
|
|
* inflate(data[, options]) -> Uint8Array|Array|String |
|
|
* - data (Uint8Array|Array|String): input data to decompress. |
|
|
* - options (Object): zlib inflate options. |
|
|
* |
|
|
* Decompress `data` with inflate/ungzip and `options`. Autodetect |
|
|
* format via wrapper header by default. That's why we don't provide |
|
|
* separate `ungzip` method. |
|
|
* |
|
|
* Supported options are: |
|
|
* |
|
|
* - windowBits |
|
|
* |
|
|
* [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) |
|
|
* for more information. |
|
|
* |
|
|
* Sugar (options): |
|
|
* |
|
|
* - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify |
|
|
* negative windowBits implicitly. |
|
|
* - `to` (String) - if equal to 'string', then result will be converted |
|
|
* from utf8 to utf16 (javascript) string. When string output requested, |
|
|
* chunk length can differ from `chunkSize`, depending on content. |
|
|
* |
|
|
* |
|
|
* ##### Example: |
|
|
* |
|
|
* ```javascript |
|
|
* var pako = require('pako') |
|
|
* , input = pako.deflate([1,2,3,4,5,6,7,8,9]) |
|
|
* , output; |
|
|
* |
|
|
* try { |
|
|
* output = pako.inflate(input); |
|
|
* } catch (err) |
|
|
* console.log(err); |
|
|
* } |
|
|
* ``` |
|
|
**/function inflate(input,options){var inflator=new Inflate(options);inflator.push(input,true);// That will never happens, if you don't cheat with options :) |
|
|
if(inflator.err){throw inflator.msg||msg[inflator.err];}return inflator.result;}/** |
|
|
* inflateRaw(data[, options]) -> Uint8Array|Array|String |
|
|
* - data (Uint8Array|Array|String): input data to decompress. |
|
|
* - options (Object): zlib inflate options. |
|
|
* |
|
|
* The same as [[inflate]], but creates raw data, without wrapper |
|
|
* (header and adler32 crc). |
|
|
**/function inflateRaw(input,options){options=options||{};options.raw=true;return inflate(input,options);}/** |
|
|
* ungzip(data[, options]) -> Uint8Array|Array|String |
|
|
* - data (Uint8Array|Array|String): input data to decompress. |
|
|
* - options (Object): zlib inflate options. |
|
|
* |
|
|
* Just shortcut to [[inflate]], because it autodetects format |
|
|
* by header.content. Done for convenience. |
|
|
**/exports.Inflate=Inflate;exports.inflate=inflate;exports.inflateRaw=inflateRaw;exports.ungzip=inflate;},{"./utils/common":419,"./utils/strings":420,"./zlib/constants":422,"./zlib/gzheader":425,"./zlib/inflate":427,"./zlib/messages":429,"./zlib/zstream":431}],419:[function(require,module,exports){'use strict';var TYPED_OK=typeof Uint8Array!=='undefined'&&typeof Uint16Array!=='undefined'&&typeof Int32Array!=='undefined';function _has(obj,key){return Object.prototype.hasOwnProperty.call(obj,key);}exports.assign=function(obj/*from1, from2, from3, ...*/){var sources=Array.prototype.slice.call(arguments,1);while(sources.length){var source=sources.shift();if(!source){continue;}if(_typeof2(source)!=='object'){throw new TypeError(source+'must be non-object');}for(var p in source){if(_has(source,p)){obj[p]=source[p];}}}return obj;};// reduce buffer size, avoiding mem copy |
|
|
exports.shrinkBuf=function(buf,size){if(buf.length===size){return buf;}if(buf.subarray){return buf.subarray(0,size);}buf.length=size;return buf;};var fnTyped={arraySet:function arraySet(dest,src,src_offs,len,dest_offs){if(src.subarray&&dest.subarray){dest.set(src.subarray(src_offs,src_offs+len),dest_offs);return;}// Fallback to ordinary array |
|
|
for(var i=0;i<len;i++){dest[dest_offs+i]=src[src_offs+i];}},// Join array of chunks to single array. |
|
|
flattenChunks:function flattenChunks(chunks){var i,l,len,pos,chunk,result;// calculate data length |
|
|
len=0;for(i=0,l=chunks.length;i<l;i++){len+=chunks[i].length;}// join chunks |
|
|
result=new Uint8Array(len);pos=0;for(i=0,l=chunks.length;i<l;i++){chunk=chunks[i];result.set(chunk,pos);pos+=chunk.length;}return result;}};var fnUntyped={arraySet:function arraySet(dest,src,src_offs,len,dest_offs){for(var i=0;i<len;i++){dest[dest_offs+i]=src[src_offs+i];}},// Join array of chunks to single array. |
|
|
flattenChunks:function flattenChunks(chunks){return[].concat.apply([],chunks);}};// Enable/Disable typed arrays use, for testing |
|
|
// |
|
|
exports.setTyped=function(on){if(on){exports.Buf8=Uint8Array;exports.Buf16=Uint16Array;exports.Buf32=Int32Array;exports.assign(exports,fnTyped);}else{exports.Buf8=Array;exports.Buf16=Array;exports.Buf32=Array;exports.assign(exports,fnUntyped);}};exports.setTyped(TYPED_OK);},{}],420:[function(require,module,exports){// String encode/decode helpers |
|
|
'use strict';var utils=require('./common');// Quick check if we can use fast array to bin string conversion |
|
|
// |
|
|
// - apply(Array) can fail on Android 2.2 |
|
|
// - apply(Uint8Array) can fail on iOS 5.1 Safari |
|
|
// |
|
|
var STR_APPLY_OK=true;var STR_APPLY_UIA_OK=true;try{String.fromCharCode.apply(null,[0]);}catch(__){STR_APPLY_OK=false;}try{String.fromCharCode.apply(null,new Uint8Array(1));}catch(__){STR_APPLY_UIA_OK=false;}// Table with utf8 lengths (calculated by first byte of sequence) |
|
|
// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, |
|
|
// because max possible codepoint is 0x10ffff |
|
|
var _utf8len=new utils.Buf8(256);for(var q=0;q<256;q++){_utf8len[q]=q>=252?6:q>=248?5:q>=240?4:q>=224?3:q>=192?2:1;}_utf8len[254]=_utf8len[254]=1;// Invalid sequence start |
|
|
// convert string to array (typed, when possible) |
|
|
exports.string2buf=function(str){var buf,c,c2,m_pos,i,str_len=str.length,buf_len=0;// count binary size |
|
|
for(m_pos=0;m_pos<str_len;m_pos++){c=str.charCodeAt(m_pos);if((c&0xfc00)===0xd800&&m_pos+1<str_len){c2=str.charCodeAt(m_pos+1);if((c2&0xfc00)===0xdc00){c=0x10000+(c-0xd800<<10)+(c2-0xdc00);m_pos++;}}buf_len+=c<0x80?1:c<0x800?2:c<0x10000?3:4;}// allocate buffer |
|
|
buf=new utils.Buf8(buf_len);// convert |
|
|
for(i=0,m_pos=0;i<buf_len;m_pos++){c=str.charCodeAt(m_pos);if((c&0xfc00)===0xd800&&m_pos+1<str_len){c2=str.charCodeAt(m_pos+1);if((c2&0xfc00)===0xdc00){c=0x10000+(c-0xd800<<10)+(c2-0xdc00);m_pos++;}}if(c<0x80){/* one byte */buf[i++]=c;}else if(c<0x800){/* two bytes */buf[i++]=0xC0|c>>>6;buf[i++]=0x80|c&0x3f;}else if(c<0x10000){/* three bytes */buf[i++]=0xE0|c>>>12;buf[i++]=0x80|c>>>6&0x3f;buf[i++]=0x80|c&0x3f;}else{/* four bytes */buf[i++]=0xf0|c>>>18;buf[i++]=0x80|c>>>12&0x3f;buf[i++]=0x80|c>>>6&0x3f;buf[i++]=0x80|c&0x3f;}}return buf;};// Helper (used in 2 places) |
|
|
function buf2binstring(buf,len){// On Chrome, the arguments in a function call that are allowed is `65534`. |
|
|
// If the length of the buffer is smaller than that, we can use this optimization, |
|
|
// otherwise we will take a slower path. |
|
|
if(len<65534){if(buf.subarray&&STR_APPLY_UIA_OK||!buf.subarray&&STR_APPLY_OK){return String.fromCharCode.apply(null,utils.shrinkBuf(buf,len));}}var result='';for(var i=0;i<len;i++){result+=String.fromCharCode(buf[i]);}return result;}// Convert byte array to binary string |
|
|
exports.buf2binstring=function(buf){return buf2binstring(buf,buf.length);};// Convert binary string (typed, when possible) |
|
|
exports.binstring2buf=function(str){var buf=new utils.Buf8(str.length);for(var i=0,len=buf.length;i<len;i++){buf[i]=str.charCodeAt(i);}return buf;};// convert array to string |
|
|
exports.buf2string=function(buf,max){var i,out,c,c_len;var len=max||buf.length;// Reserve max possible length (2 words per char) |
|
|
// NB: by unknown reasons, Array is significantly faster for |
|
|
// String.fromCharCode.apply than Uint16Array. |
|
|
var utf16buf=new Array(len*2);for(out=0,i=0;i<len;){c=buf[i++];// quick process ascii |
|
|
if(c<0x80){utf16buf[out++]=c;continue;}c_len=_utf8len[c];// skip 5 & 6 byte codes |
|
|
if(c_len>4){utf16buf[out++]=0xfffd;i+=c_len-1;continue;}// apply mask on first byte |
|
|
c&=c_len===2?0x1f:c_len===3?0x0f:0x07;// join the rest |
|
|
while(c_len>1&&i<len){c=c<<6|buf[i++]&0x3f;c_len--;}// terminated by end of string? |
|
|
if(c_len>1){utf16buf[out++]=0xfffd;continue;}if(c<0x10000){utf16buf[out++]=c;}else{c-=0x10000;utf16buf[out++]=0xd800|c>>10&0x3ff;utf16buf[out++]=0xdc00|c&0x3ff;}}return buf2binstring(utf16buf,out);};// Calculate max possible position in utf8 buffer, |
|
|
// that will not break sequence. If that's not possible |
|
|
// - (very small limits) return max size as is. |
|
|
// |
|
|
// buf[] - utf8 bytes array |
|
|
// max - length limit (mandatory); |
|
|
exports.utf8border=function(buf,max){var pos;max=max||buf.length;if(max>buf.length){max=buf.length;}// go back from last position, until start of sequence found |
|
|
pos=max-1;while(pos>=0&&(buf[pos]&0xC0)===0x80){pos--;}// Very small and broken sequence, |
|
|
// return max, because we should return something anyway. |
|
|
if(pos<0){return max;}// If we came to start of buffer - that means buffer is too small, |
|
|
// return max too. |
|
|
if(pos===0){return max;}return pos+_utf8len[buf[pos]]>max?pos:max;};},{"./common":419}],421:[function(require,module,exports){'use strict';// Note: adler32 takes 12% for level 0 and 2% for level 6. |
|
|
// It isn't worth it to make additional optimizations as in original. |
|
|
// Small size is preferable. |
|
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler |
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin |
|
|
// |
|
|
// This software is provided 'as-is', without any express or implied |
|
|
// warranty. In no event will the authors be held liable for any damages |
|
|
// arising from the use of this software. |
|
|
// |
|
|
// Permission is granted to anyone to use this software for any purpose, |
|
|
// including commercial applications, and to alter it and redistribute it |
|
|
// freely, subject to the following restrictions: |
|
|
// |
|
|
// 1. The origin of this software must not be misrepresented; you must not |
|
|
// claim that you wrote the original software. If you use this software |
|
|
// in a product, an acknowledgment in the product documentation would be |
|
|
// appreciated but is not required. |
|
|
// 2. Altered source versions must be plainly marked as such, and must not be |
|
|
// misrepresented as being the original software. |
|
|
// 3. This notice may not be removed or altered from any source distribution. |
|
|
function adler32(adler,buf,len,pos){var s1=adler&0xffff|0,s2=adler>>>16&0xffff|0,n=0;while(len!==0){// Set limit ~ twice less than 5552, to keep |
|
|
// s2 in 31-bits, because we force signed ints. |
|
|
// in other case %= will fail. |
|
|
n=len>2000?2000:len;len-=n;do{s1=s1+buf[pos++]|0;s2=s2+s1|0;}while(--n);s1%=65521;s2%=65521;}return s1|s2<<16|0;}module.exports=adler32;},{}],422:[function(require,module,exports){'use strict';// (C) 1995-2013 Jean-loup Gailly and Mark Adler |
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin |
|
|
// |
|
|
// This software is provided 'as-is', without any express or implied |
|
|
// warranty. In no event will the authors be held liable for any damages |
|
|
// arising from the use of this software. |
|
|
// |
|
|
// Permission is granted to anyone to use this software for any purpose, |
|
|
// including commercial applications, and to alter it and redistribute it |
|
|
// freely, subject to the following restrictions: |
|
|
// |
|
|
// 1. The origin of this software must not be misrepresented; you must not |
|
|
// claim that you wrote the original software. If you use this software |
|
|
// in a product, an acknowledgment in the product documentation would be |
|
|
// appreciated but is not required. |
|
|
// 2. Altered source versions must be plainly marked as such, and must not be |
|
|
// misrepresented as being the original software. |
|
|
// 3. This notice may not be removed or altered from any source distribution. |
|
|
module.exports={/* Allowed flush values; see deflate() and inflate() below for details */Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,/* Return codes for the compression/decompression functions. Negative values |
|
|
* are errors, positive values are used for special but normal events. |
|
|
*/Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,//Z_MEM_ERROR: -4, |
|
|
Z_BUF_ERROR:-5,//Z_VERSION_ERROR: -6, |
|
|
/* compression levels */Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,/* Possible values of the data_type field (though see inflate()) */Z_BINARY:0,Z_TEXT:1,//Z_ASCII: 1, // = Z_TEXT (deprecated) |
|
|
Z_UNKNOWN:2,/* The deflate compression method */Z_DEFLATED:8//Z_NULL: null // Use -1 or null inline, depending on var type |
|
|
};},{}],423:[function(require,module,exports){'use strict';// Note: we can't get significant speed boost here. |
|
|
// So write code to minimize size - no pregenerated tables |
|
|
// and array tools dependencies. |
|
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler |
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin |
|
|
// |
|
|
// This software is provided 'as-is', without any express or implied |
|
|
// warranty. In no event will the authors be held liable for any damages |
|
|
// arising from the use of this software. |
|
|
// |
|
|
// Permission is granted to anyone to use this software for any purpose, |
|
|
// including commercial applications, and to alter it and redistribute it |
|
|
// freely, subject to the following restrictions: |
|
|
// |
|
|
// 1. The origin of this software must not be misrepresented; you must not |
|
|
// claim that you wrote the original software. If you use this software |
|
|
// in a product, an acknowledgment in the product documentation would be |
|
|
// appreciated but is not required. |
|
|
// 2. Altered source versions must be plainly marked as such, and must not be |
|
|
// misrepresented as being the original software. |
|
|
// 3. This notice may not be removed or altered from any source distribution. |
|
|
// Use ordinary array, since untyped makes no boost here |
|
|
function makeTable(){var c,table=[];for(var n=0;n<256;n++){c=n;for(var k=0;k<8;k++){c=c&1?0xEDB88320^c>>>1:c>>>1;}table[n]=c;}return table;}// Create table on load. Just 255 signed longs. Not a problem. |
|
|
var crcTable=makeTable();function crc32(crc,buf,len,pos){var t=crcTable,end=pos+len;crc^=-1;for(var i=pos;i<end;i++){crc=crc>>>8^t[(crc^buf[i])&0xFF];}return crc^-1;// >>> 0; |
|
|
}module.exports=crc32;},{}],424:[function(require,module,exports){'use strict';// (C) 1995-2013 Jean-loup Gailly and Mark Adler |
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin |
|
|
// |
|
|
// This software is provided 'as-is', without any express or implied |
|
|
// warranty. In no event will the authors be held liable for any damages |
|
|
// arising from the use of this software. |
|
|
// |
|
|
// Permission is granted to anyone to use this software for any purpose, |
|
|
// including commercial applications, and to alter it and redistribute it |
|
|
// freely, subject to the following restrictions: |
|
|
// |
|
|
// 1. The origin of this software must not be misrepresented; you must not |
|
|
// claim that you wrote the original software. If you use this software |
|
|
// in a product, an acknowledgment in the product documentation would be |
|
|
// appreciated but is not required. |
|
|
// 2. Altered source versions must be plainly marked as such, and must not be |
|
|
// misrepresented as being the original software. |
|
|
// 3. This notice may not be removed or altered from any source distribution. |
|
|
var utils=require('../utils/common');var trees=require('./trees');var adler32=require('./adler32');var crc32=require('./crc32');var msg=require('./messages');/* Public constants ==========================================================*/ /* ===========================================================================*/ /* Allowed flush values; see deflate() and inflate() below for details */var Z_NO_FLUSH=0;var Z_PARTIAL_FLUSH=1;//var Z_SYNC_FLUSH = 2; |
|
|
var Z_FULL_FLUSH=3;var Z_FINISH=4;var Z_BLOCK=5;//var Z_TREES = 6; |
|
|
/* Return codes for the compression/decompression functions. Negative values |
|
|
* are errors, positive values are used for special but normal events. |
|
|
*/var Z_OK=0;var Z_STREAM_END=1;//var Z_NEED_DICT = 2; |
|
|
//var Z_ERRNO = -1; |
|
|
var Z_STREAM_ERROR=-2;var Z_DATA_ERROR=-3;//var Z_MEM_ERROR = -4; |
|
|
var Z_BUF_ERROR=-5;//var Z_VERSION_ERROR = -6; |
|
|
/* compression levels */ //var Z_NO_COMPRESSION = 0; |
|
|
//var Z_BEST_SPEED = 1; |
|
|
//var Z_BEST_COMPRESSION = 9; |
|
|
var Z_DEFAULT_COMPRESSION=-1;var Z_FILTERED=1;var Z_HUFFMAN_ONLY=2;var Z_RLE=3;var Z_FIXED=4;var Z_DEFAULT_STRATEGY=0;/* Possible values of the data_type field (though see inflate()) */ //var Z_BINARY = 0; |
|
|
//var Z_TEXT = 1; |
|
|
//var Z_ASCII = 1; // = Z_TEXT |
|
|
var Z_UNKNOWN=2;/* The deflate compression method */var Z_DEFLATED=8;/*============================================================================*/var MAX_MEM_LEVEL=9;/* Maximum value for memLevel in deflateInit2 */var MAX_WBITS=15;/* 32K LZ77 window */var DEF_MEM_LEVEL=8;var LENGTH_CODES=29;/* number of length codes, not counting the special END_BLOCK code */var LITERALS=256;/* number of literal bytes 0..255 */var L_CODES=LITERALS+1+LENGTH_CODES;/* number of Literal or Length codes, including the END_BLOCK code */var D_CODES=30;/* number of distance codes */var BL_CODES=19;/* number of codes used to transfer the bit lengths */var HEAP_SIZE=2*L_CODES+1;/* maximum heap size */var MAX_BITS=15;/* All codes must not exceed MAX_BITS bits */var MIN_MATCH=3;var MAX_MATCH=258;var MIN_LOOKAHEAD=MAX_MATCH+MIN_MATCH+1;var PRESET_DICT=0x20;var INIT_STATE=42;var EXTRA_STATE=69;var NAME_STATE=73;var COMMENT_STATE=91;var HCRC_STATE=103;var BUSY_STATE=113;var FINISH_STATE=666;var BS_NEED_MORE=1;/* block not completed, need more input or more output */var BS_BLOCK_DONE=2;/* block flush performed */var BS_FINISH_STARTED=3;/* finish started, need only more output at next deflate */var BS_FINISH_DONE=4;/* finish done, accept no more input or output */var OS_CODE=0x03;// Unix :) . Don't detect, use this default. |
|
|
function err(strm,errorCode){strm.msg=msg[errorCode];return errorCode;}function rank(f){return(f<<1)-(f>4?9:0);}function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0;}}/* ========================================================================= |
|
|
* Flush as much pending output as possible. All deflate() output goes |
|
|
* through this function so some applications may wish to modify it |
|
|
* to avoid allocating a large strm->output buffer and copying into it. |
|
|
* (See also read_buf()). |
|
|
*/function flush_pending(strm){var s=strm.state;//_tr_flush_bits(s); |
|
|
var len=s.pending;if(len>strm.avail_out){len=strm.avail_out;}if(len===0){return;}utils.arraySet(strm.output,s.pending_buf,s.pending_out,len,strm.next_out);strm.next_out+=len;s.pending_out+=len;strm.total_out+=len;strm.avail_out-=len;s.pending-=len;if(s.pending===0){s.pending_out=0;}}function flush_block_only(s,last){trees._tr_flush_block(s,s.block_start>=0?s.block_start:-1,s.strstart-s.block_start,last);s.block_start=s.strstart;flush_pending(s.strm);}function put_byte(s,b){s.pending_buf[s.pending++]=b;}/* ========================================================================= |
|
|
* Put a short in the pending buffer. The 16-bit value is put in MSB order. |
|
|
* IN assertion: the stream state is correct and there is enough room in |
|
|
* pending_buf. |
|
|
*/function putShortMSB(s,b){// put_byte(s, (Byte)(b >> 8)); |
|
|
// put_byte(s, (Byte)(b & 0xff)); |
|
|
s.pending_buf[s.pending++]=b>>>8&0xff;s.pending_buf[s.pending++]=b&0xff;}/* =========================================================================== |
|
|
* Read a new buffer from the current input stream, update the adler32 |
|
|
* and total number of bytes read. All deflate() input goes through |
|
|
* this function so some applications may wish to modify it to avoid |
|
|
* allocating a large strm->input buffer and copying from it. |
|
|
* (See also flush_pending()). |
|
|
*/function read_buf(strm,buf,start,size){var len=strm.avail_in;if(len>size){len=size;}if(len===0){return 0;}strm.avail_in-=len;// zmemcpy(buf, strm->next_in, len); |
|
|
utils.arraySet(buf,strm.input,strm.next_in,len,start);if(strm.state.wrap===1){strm.adler=adler32(strm.adler,buf,len,start);}else if(strm.state.wrap===2){strm.adler=crc32(strm.adler,buf,len,start);}strm.next_in+=len;strm.total_in+=len;return len;}/* =========================================================================== |
|
|
* Set match_start to the longest match starting at the given string and |
|
|
* return its length. Matches shorter or equal to prev_length are discarded, |
|
|
* in which case the result is equal to prev_length and match_start is |
|
|
* garbage. |
|
|
* IN assertions: cur_match is the head of the hash chain for the current |
|
|
* string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 |
|
|
* OUT assertion: the match length is not greater than s->lookahead. |
|
|
*/function longest_match(s,cur_match){var chain_length=s.max_chain_length;/* max hash chain length */var scan=s.strstart;/* current string */var match;/* matched string */var len;/* length of current match */var best_len=s.prev_length;/* best match length so far */var nice_match=s.nice_match;/* stop if match long enough */var limit=s.strstart>s.w_size-MIN_LOOKAHEAD?s.strstart-(s.w_size-MIN_LOOKAHEAD):0/*NIL*/;var _win=s.window;// shortcut |
|
|
var wmask=s.w_mask;var prev=s.prev;/* Stop when cur_match becomes <= limit. To simplify the code, |
|
|
* we prevent matches with the string of window index 0. |
|
|
*/var strend=s.strstart+MAX_MATCH;var scan_end1=_win[scan+best_len-1];var scan_end=_win[scan+best_len];/* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. |
|
|
* It is easy to get rid of this optimization if necessary. |
|
|
*/ // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); |
|
|
/* Do not waste too much time if we already have a good match: */if(s.prev_length>=s.good_match){chain_length>>=2;}/* Do not look for matches beyond the end of the input. This is necessary |
|
|
* to make deflate deterministic. |
|
|
*/if(nice_match>s.lookahead){nice_match=s.lookahead;}// Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); |
|
|
do{// Assert(cur_match < s->strstart, "no future"); |
|
|
match=cur_match;/* Skip to next match if the match length cannot increase |
|
|
* or if the match length is less than 2. Note that the checks below |
|
|
* for insufficient lookahead only occur occasionally for performance |
|
|
* reasons. Therefore uninitialized memory will be accessed, and |
|
|
* conditional jumps will be made that depend on those values. |
|
|
* However the length of the match is limited to the lookahead, so |
|
|
* the output of deflate is not affected by the uninitialized values. |
|
|
*/if(_win[match+best_len]!==scan_end||_win[match+best_len-1]!==scan_end1||_win[match]!==_win[scan]||_win[++match]!==_win[scan+1]){continue;}/* The check at best_len-1 can be removed because it will be made |
|
|
* again later. (This heuristic is not always a win.) |
|
|
* It is not necessary to compare scan[2] and match[2] since they |
|
|
* are always equal when the other bytes match, given that |
|
|
* the hash keys are equal and that HASH_BITS >= 8. |
|
|
*/scan+=2;match++;// Assert(*scan == *match, "match[2]?"); |
|
|
/* We check for insufficient lookahead only every 8th comparison; |
|
|
* the 256th check will be made at strstart+258. |
|
|
*/do{/*jshint noempty:false*/}while(_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&scan<strend);// Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); |
|
|
len=MAX_MATCH-(strend-scan);scan=strend-MAX_MATCH;if(len>best_len){s.match_start=cur_match;best_len=len;if(len>=nice_match){break;}scan_end1=_win[scan+best_len-1];scan_end=_win[scan+best_len];}}while((cur_match=prev[cur_match&wmask])>limit&&--chain_length!==0);if(best_len<=s.lookahead){return best_len;}return s.lookahead;}/* =========================================================================== |
|
|
* Fill the window when the lookahead becomes insufficient. |
|
|
* Updates strstart and lookahead. |
|
|
* |
|
|
* IN assertion: lookahead < MIN_LOOKAHEAD |
|
|
* OUT assertions: strstart <= window_size-MIN_LOOKAHEAD |
|
|
* At least one byte has been read, or avail_in == 0; reads are |
|
|
* performed for at least two bytes (required for the zip translate_eol |
|
|
* option -- not supported here). |
|
|
*/function fill_window(s){var _w_size=s.w_size;var p,n,m,more,str;//Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); |
|
|
do{more=s.window_size-s.lookahead-s.strstart;// JS ints have 32 bit, block below not needed |
|
|
/* Deal with !@#$% 64K limit: */ //if (sizeof(int) <= 2) { |
|
|
// if (more == 0 && s->strstart == 0 && s->lookahead == 0) { |
|
|
// more = wsize; |
|
|
// |
|
|
// } else if (more == (unsigned)(-1)) { |
|
|
// /* Very unlikely, but possible on 16 bit machine if |
|
|
// * strstart == 0 && lookahead == 1 (input done a byte at time) |
|
|
// */ |
|
|
// more--; |
|
|
// } |
|
|
//} |
|
|
/* If the window is almost full and there is insufficient lookahead, |
|
|
* move the upper half to the lower one to make room in the upper half. |
|
|
*/if(s.strstart>=_w_size+(_w_size-MIN_LOOKAHEAD)){utils.arraySet(s.window,s.window,_w_size,_w_size,0);s.match_start-=_w_size;s.strstart-=_w_size;/* we now have strstart >= MAX_DIST */s.block_start-=_w_size;/* Slide the hash table (could be avoided with 32 bit values |
|
|
at the expense of memory usage). We slide even when level == 0 |
|
|
to keep the hash table consistent if we switch back to level > 0 |
|
|
later. (Using level 0 permanently is not an optimal usage of |
|
|
zlib, so we don't care about this pathological case.) |
|
|
*/n=s.hash_size;p=n;do{m=s.head[--p];s.head[p]=m>=_w_size?m-_w_size:0;}while(--n);n=_w_size;p=n;do{m=s.prev[--p];s.prev[p]=m>=_w_size?m-_w_size:0;/* If n is not on any hash chain, prev[n] is garbage but |
|
|
* its value will never be used. |
|
|
*/}while(--n);more+=_w_size;}if(s.strm.avail_in===0){break;}/* If there was no sliding: |
|
|
* strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && |
|
|
* more == window_size - lookahead - strstart |
|
|
* => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) |
|
|
* => more >= window_size - 2*WSIZE + 2 |
|
|
* In the BIG_MEM or MMAP case (not yet supported), |
|
|
* window_size == input_size + MIN_LOOKAHEAD && |
|
|
* strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. |
|
|
* Otherwise, window_size == 2*WSIZE so more >= 2. |
|
|
* If there was sliding, more >= WSIZE. So in all cases, more >= 2. |
|
|
*/ //Assert(more >= 2, "more < 2"); |
|
|
n=read_buf(s.strm,s.window,s.strstart+s.lookahead,more);s.lookahead+=n;/* Initialize the hash value now that we have some input: */if(s.lookahead+s.insert>=MIN_MATCH){str=s.strstart-s.insert;s.ins_h=s.window[str];/* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */s.ins_h=(s.ins_h<<s.hash_shift^s.window[str+1])&s.hash_mask;//#if MIN_MATCH != 3 |
|
|
// Call update_hash() MIN_MATCH-3 more times |
|
|
//#endif |
|
|
while(s.insert){/* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */s.ins_h=(s.ins_h<<s.hash_shift^s.window[str+MIN_MATCH-1])&s.hash_mask;s.prev[str&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=str;str++;s.insert--;if(s.lookahead+s.insert<MIN_MATCH){break;}}}/* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, |
|
|
* but this is not important since only literal bytes will be emitted. |
|
|
*/}while(s.lookahead<MIN_LOOKAHEAD&&s.strm.avail_in!==0);/* If the WIN_INIT bytes after the end of the current data have never been |
|
|
* written, then zero those bytes in order to avoid memory check reports of |
|
|
* the use of uninitialized (or uninitialised as Julian writes) bytes by |
|
|
* the longest match routines. Update the high water mark for the next |
|
|
* time through here. WIN_INIT is set to MAX_MATCH since the longest match |
|
|
* routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. |
|
|
*/ // if (s.high_water < s.window_size) { |
|
|
// var curr = s.strstart + s.lookahead; |
|
|
// var init = 0; |
|
|
// |
|
|
// if (s.high_water < curr) { |
|
|
// /* Previous high water mark below current data -- zero WIN_INIT |
|
|
// * bytes or up to end of window, whichever is less. |
|
|
// */ |
|
|
// init = s.window_size - curr; |
|
|
// if (init > WIN_INIT) |
|
|
// init = WIN_INIT; |
|
|
// zmemzero(s->window + curr, (unsigned)init); |
|
|
// s->high_water = curr + init; |
|
|
// } |
|
|
// else if (s->high_water < (ulg)curr + WIN_INIT) { |
|
|
// /* High water mark at or above current data, but below current data |
|
|
// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up |
|
|
// * to end of window, whichever is less. |
|
|
// */ |
|
|
// init = (ulg)curr + WIN_INIT - s->high_water; |
|
|
// if (init > s->window_size - s->high_water) |
|
|
// init = s->window_size - s->high_water; |
|
|
// zmemzero(s->window + s->high_water, (unsigned)init); |
|
|
// s->high_water += init; |
|
|
// } |
|
|
// } |
|
|
// |
|
|
// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, |
|
|
// "not enough room for search"); |
|
|
}/* =========================================================================== |
|
|
* Copy without compression as much as possible from the input stream, return |
|
|
* the current block state. |
|
|
* This function does not insert new strings in the dictionary since |
|
|
* uncompressible data is probably not useful. This function is used |
|
|
* only for the level=0 compression option. |
|
|
* NOTE: this function should be optimized to avoid extra copying from |
|
|
* window to pending_buf. |
|
|
*/function deflate_stored(s,flush){/* Stored blocks are limited to 0xffff bytes, pending_buf is limited |
|
|
* to pending_buf_size, and each stored block has a 5 byte header: |
|
|
*/var max_block_size=0xffff;if(max_block_size>s.pending_buf_size-5){max_block_size=s.pending_buf_size-5;}/* Copy as much as possible from input to output: */for(;;){/* Fill the window as much as possible: */if(s.lookahead<=1){//Assert(s->strstart < s->w_size+MAX_DIST(s) || |
|
|
// s->block_start >= (long)s->w_size, "slide too late"); |
|
|
// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) || |
|
|
// s.block_start >= s.w_size)) { |
|
|
// throw new Error("slide too late"); |
|
|
// } |
|
|
fill_window(s);if(s.lookahead===0&&flush===Z_NO_FLUSH){return BS_NEED_MORE;}if(s.lookahead===0){break;}/* flush the current block */}//Assert(s->block_start >= 0L, "block gone"); |
|
|
// if (s.block_start < 0) throw new Error("block gone"); |
|
|
s.strstart+=s.lookahead;s.lookahead=0;/* Emit a stored block if pending_buf will be full: */var max_start=s.block_start+max_block_size;if(s.strstart===0||s.strstart>=max_start){/* strstart == 0 is possible when wraparound on 16-bit machine */s.lookahead=s.strstart-max_start;s.strstart=max_start;/*** FLUSH_BLOCK(s, 0); ***/flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}/***/}/* Flush if we may have to slide, otherwise block_start may become |
|
|
* negative and the data will be gone: |
|
|
*/if(s.strstart-s.block_start>=s.w_size-MIN_LOOKAHEAD){/*** FLUSH_BLOCK(s, 0); ***/flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}/***/}}s.insert=0;if(flush===Z_FINISH){/*** FLUSH_BLOCK(s, 1); ***/flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED;}/***/return BS_FINISH_DONE;}if(s.strstart>s.block_start){/*** FLUSH_BLOCK(s, 0); ***/flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}/***/}return BS_NEED_MORE;}/* =========================================================================== |
|
|
* Compress as much as possible from the input stream, return the current |
|
|
* block state. |
|
|
* This function does not perform lazy evaluation of matches and inserts |
|
|
* new strings in the dictionary only for unmatched strings or for short |
|
|
* matches. It is used only for the fast compression options. |
|
|
*/function deflate_fast(s,flush){var hash_head;/* head of the hash chain */var bflush;/* set if current block must be flushed */for(;;){/* Make sure that we always have enough lookahead, except |
|
|
* at the end of the input file. We need MAX_MATCH bytes |
|
|
* for the next match, plus MIN_MATCH bytes to insert the |
|
|
* string following the next match. |
|
|
*/if(s.lookahead<MIN_LOOKAHEAD){fill_window(s);if(s.lookahead<MIN_LOOKAHEAD&&flush===Z_NO_FLUSH){return BS_NEED_MORE;}if(s.lookahead===0){break;/* flush the current block */}}/* Insert the string window[strstart .. strstart+2] in the |
|
|
* dictionary, and set hash_head to the head of the hash chain: |
|
|
*/hash_head=0/*NIL*/;if(s.lookahead>=MIN_MATCH){/*** INSERT_STRING(s, s.strstart, hash_head); ***/s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart;/***/}/* Find the longest match, discarding those <= prev_length. |
|
|
* At this point we have always match_length < MIN_MATCH |
|
|
*/if(hash_head!==0/*NIL*/&&s.strstart-hash_head<=s.w_size-MIN_LOOKAHEAD){/* To simplify the code, we prevent matches with the string |
|
|
* of window index 0 (in particular we have to avoid a match |
|
|
* of the string with itself at the start of the input file). |
|
|
*/s.match_length=longest_match(s,hash_head);/* longest_match() sets match_start */}if(s.match_length>=MIN_MATCH){// check_match(s, s.strstart, s.match_start, s.match_length); // for debug only |
|
|
/*** _tr_tally_dist(s, s.strstart - s.match_start, |
|
|
s.match_length - MIN_MATCH, bflush); ***/bflush=trees._tr_tally(s,s.strstart-s.match_start,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;/* Insert new strings in the hash table only if the match length |
|
|
* is not too large. This saves time but degrades compression. |
|
|
*/if(s.match_length<=s.max_lazy_match/*max_insert_length*/&&s.lookahead>=MIN_MATCH){s.match_length--;/* string at strstart already in table */do{s.strstart++;/*** INSERT_STRING(s, s.strstart, hash_head); ***/s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart;/***/ /* strstart never exceeds WSIZE-MAX_MATCH, so there are |
|
|
* always MIN_MATCH bytes ahead. |
|
|
*/}while(--s.match_length!==0);s.strstart++;}else{s.strstart+=s.match_length;s.match_length=0;s.ins_h=s.window[s.strstart];/* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+1])&s.hash_mask;//#if MIN_MATCH != 3 |
|
|
// Call UPDATE_HASH() MIN_MATCH-3 more times |
|
|
//#endif |
|
|
/* If lookahead < MIN_MATCH, ins_h is garbage, but it does not |
|
|
* matter since it will be recomputed at next deflate call. |
|
|
*/}}else{/* No match, output a literal byte */ //Tracevv((stderr,"%c", s.window[s.strstart])); |
|
|
/*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++;}if(bflush){/*** FLUSH_BLOCK(s, 0); ***/flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}/***/}}s.insert=s.strstart<MIN_MATCH-1?s.strstart:MIN_MATCH-1;if(flush===Z_FINISH){/*** FLUSH_BLOCK(s, 1); ***/flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED;}/***/return BS_FINISH_DONE;}if(s.last_lit){/*** FLUSH_BLOCK(s, 0); ***/flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}/***/}return BS_BLOCK_DONE;}/* =========================================================================== |
|
|
* Same as above, but achieves better compression. We use a lazy |
|
|
* evaluation for matches: a match is finally adopted only if there is |
|
|
* no better match at the next window position. |
|
|
*/function deflate_slow(s,flush){var hash_head;/* head of hash chain */var bflush;/* set if current block must be flushed */var max_insert;/* Process the input block. */for(;;){/* Make sure that we always have enough lookahead, except |
|
|
* at the end of the input file. We need MAX_MATCH bytes |
|
|
* for the next match, plus MIN_MATCH bytes to insert the |
|
|
* string following the next match. |
|
|
*/if(s.lookahead<MIN_LOOKAHEAD){fill_window(s);if(s.lookahead<MIN_LOOKAHEAD&&flush===Z_NO_FLUSH){return BS_NEED_MORE;}if(s.lookahead===0){break;}/* flush the current block */}/* Insert the string window[strstart .. strstart+2] in the |
|
|
* dictionary, and set hash_head to the head of the hash chain: |
|
|
*/hash_head=0/*NIL*/;if(s.lookahead>=MIN_MATCH){/*** INSERT_STRING(s, s.strstart, hash_head); ***/s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart;/***/}/* Find the longest match, discarding those <= prev_length. |
|
|
*/s.prev_length=s.match_length;s.prev_match=s.match_start;s.match_length=MIN_MATCH-1;if(hash_head!==0/*NIL*/&&s.prev_length<s.max_lazy_match&&s.strstart-hash_head<=s.w_size-MIN_LOOKAHEAD/*MAX_DIST(s)*/){/* To simplify the code, we prevent matches with the string |
|
|
* of window index 0 (in particular we have to avoid a match |
|
|
* of the string with itself at the start of the input file). |
|
|
*/s.match_length=longest_match(s,hash_head);/* longest_match() sets match_start */if(s.match_length<=5&&(s.strategy===Z_FILTERED||s.match_length===MIN_MATCH&&s.strstart-s.match_start>4096/*TOO_FAR*/)){/* If prev_match is also MIN_MATCH, match_start is garbage |
|
|
* but we will ignore the current match anyway. |
|
|
*/s.match_length=MIN_MATCH-1;}}/* If there was a match at the previous step and the current |
|
|
* match is not better, output the previous match: |
|
|
*/if(s.prev_length>=MIN_MATCH&&s.match_length<=s.prev_length){max_insert=s.strstart+s.lookahead-MIN_MATCH;/* Do not insert strings in hash table beyond this. */ //check_match(s, s.strstart-1, s.prev_match, s.prev_length); |
|
|
/***_tr_tally_dist(s, s.strstart - 1 - s.prev_match, |
|
|
s.prev_length - MIN_MATCH, bflush);***/bflush=trees._tr_tally(s,s.strstart-1-s.prev_match,s.prev_length-MIN_MATCH);/* Insert in hash table all strings up to the end of the match. |
|
|
* strstart-1 and strstart are already inserted. If there is not |
|
|
* enough lookahead, the last two strings are not inserted in |
|
|
* the hash table. |
|
|
*/s.lookahead-=s.prev_length-1;s.prev_length-=2;do{if(++s.strstart<=max_insert){/*** INSERT_STRING(s, s.strstart, hash_head); ***/s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart;/***/}}while(--s.prev_length!==0);s.match_available=0;s.match_length=MIN_MATCH-1;s.strstart++;if(bflush){/*** FLUSH_BLOCK(s, 0); ***/flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}/***/}}else if(s.match_available){/* If there was no match at the previous position, output a |
|
|
* single literal. If there was a match but the current match |
|
|
* is longer, truncate the previous match to a single literal. |
|
|
*/ //Tracevv((stderr,"%c", s->window[s->strstart-1])); |
|
|
/*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/bflush=trees._tr_tally(s,0,s.window[s.strstart-1]);if(bflush){/*** FLUSH_BLOCK_ONLY(s, 0) ***/flush_block_only(s,false);/***/}s.strstart++;s.lookahead--;if(s.strm.avail_out===0){return BS_NEED_MORE;}}else{/* There is no previous match to compare with, wait for |
|
|
* the next step to decide. |
|
|
*/s.match_available=1;s.strstart++;s.lookahead--;}}//Assert (flush != Z_NO_FLUSH, "no flush?"); |
|
|
if(s.match_available){//Tracevv((stderr,"%c", s->window[s->strstart-1])); |
|
|
/*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/bflush=trees._tr_tally(s,0,s.window[s.strstart-1]);s.match_available=0;}s.insert=s.strstart<MIN_MATCH-1?s.strstart:MIN_MATCH-1;if(flush===Z_FINISH){/*** FLUSH_BLOCK(s, 1); ***/flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED;}/***/return BS_FINISH_DONE;}if(s.last_lit){/*** FLUSH_BLOCK(s, 0); ***/flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}/***/}return BS_BLOCK_DONE;}/* =========================================================================== |
|
|
* For Z_RLE, simply look for runs of bytes, generate matches only of distance |
|
|
* one. Do not maintain a hash table. (It will be regenerated if this run of |
|
|
* deflate switches away from Z_RLE.) |
|
|
*/function deflate_rle(s,flush){var bflush;/* set if current block must be flushed */var prev;/* byte at distance one to match */var scan,strend;/* scan goes up to strend for length of run */var _win=s.window;for(;;){/* Make sure that we always have enough lookahead, except |
|
|
* at the end of the input file. We need MAX_MATCH bytes |
|
|
* for the longest run, plus one for the unrolled loop. |
|
|
*/if(s.lookahead<=MAX_MATCH){fill_window(s);if(s.lookahead<=MAX_MATCH&&flush===Z_NO_FLUSH){return BS_NEED_MORE;}if(s.lookahead===0){break;}/* flush the current block */}/* See how many times the previous byte repeats */s.match_length=0;if(s.lookahead>=MIN_MATCH&&s.strstart>0){scan=s.strstart-1;prev=_win[scan];if(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]){strend=s.strstart+MAX_MATCH;do{/*jshint noempty:false*/}while(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&scan<strend);s.match_length=MAX_MATCH-(strend-scan);if(s.match_length>s.lookahead){s.match_length=s.lookahead;}}//Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); |
|
|
}/* Emit match if have run of MIN_MATCH or longer, else emit literal */if(s.match_length>=MIN_MATCH){//check_match(s, s.strstart, s.strstart - 1, s.match_length); |
|
|
/*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/bflush=trees._tr_tally(s,1,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;s.strstart+=s.match_length;s.match_length=0;}else{/* No match, output a literal byte */ //Tracevv((stderr,"%c", s->window[s->strstart])); |
|
|
/*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++;}if(bflush){/*** FLUSH_BLOCK(s, 0); ***/flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}/***/}}s.insert=0;if(flush===Z_FINISH){/*** FLUSH_BLOCK(s, 1); ***/flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED;}/***/return BS_FINISH_DONE;}if(s.last_lit){/*** FLUSH_BLOCK(s, 0); ***/flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}/***/}return BS_BLOCK_DONE;}/* =========================================================================== |
|
|
* For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. |
|
|
* (It will be regenerated if this run of deflate switches away from Huffman.) |
|
|
*/function deflate_huff(s,flush){var bflush;/* set if current block must be flushed */for(;;){/* Make sure that we have a literal to write. */if(s.lookahead===0){fill_window(s);if(s.lookahead===0){if(flush===Z_NO_FLUSH){return BS_NEED_MORE;}break;/* flush the current block */}}/* Output a literal byte */s.match_length=0;//Tracevv((stderr,"%c", s->window[s->strstart])); |
|
|
/*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++;if(bflush){/*** FLUSH_BLOCK(s, 0); ***/flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}/***/}}s.insert=0;if(flush===Z_FINISH){/*** FLUSH_BLOCK(s, 1); ***/flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED;}/***/return BS_FINISH_DONE;}if(s.last_lit){/*** FLUSH_BLOCK(s, 0); ***/flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}/***/}return BS_BLOCK_DONE;}/* Values for max_lazy_match, good_match and max_chain_length, depending on |
|
|
* the desired pack level (0..9). The values given below have been tuned to |
|
|
* exclude worst case performance for pathological files. Better values may be |
|
|
* found for specific files. |
|
|
*/function Config(good_length,max_lazy,nice_length,max_chain,func){this.good_length=good_length;this.max_lazy=max_lazy;this.nice_length=nice_length;this.max_chain=max_chain;this.func=func;}var configuration_table;configuration_table=[/* good lazy nice chain */new Config(0,0,0,0,deflate_stored),/* 0 store only */new Config(4,4,8,4,deflate_fast),/* 1 max speed, no lazy matches */new Config(4,5,16,8,deflate_fast),/* 2 */new Config(4,6,32,32,deflate_fast),/* 3 */new Config(4,4,16,16,deflate_slow),/* 4 lazy matches */new Config(8,16,32,32,deflate_slow),/* 5 */new Config(8,16,128,128,deflate_slow),/* 6 */new Config(8,32,128,256,deflate_slow),/* 7 */new Config(32,128,258,1024,deflate_slow),/* 8 */new Config(32,258,258,4096,deflate_slow)/* 9 max compression */];/* =========================================================================== |
|
|
* Initialize the "longest match" routines for a new zlib stream |
|
|
*/function lm_init(s){s.window_size=2*s.w_size;/*** CLEAR_HASH(s); ***/zero(s.head);// Fill with NIL (= 0); |
|
|
/* Set the default configuration parameters: |
|
|
*/s.max_lazy_match=configuration_table[s.level].max_lazy;s.good_match=configuration_table[s.level].good_length;s.nice_match=configuration_table[s.level].nice_length;s.max_chain_length=configuration_table[s.level].max_chain;s.strstart=0;s.block_start=0;s.lookahead=0;s.insert=0;s.match_length=s.prev_length=MIN_MATCH-1;s.match_available=0;s.ins_h=0;}function DeflateState(){this.strm=null;/* pointer back to this zlib stream */this.status=0;/* as the name implies */this.pending_buf=null;/* output still pending */this.pending_buf_size=0;/* size of pending_buf */this.pending_out=0;/* next pending byte to output to the stream */this.pending=0;/* nb of bytes in the pending buffer */this.wrap=0;/* bit 0 true for zlib, bit 1 true for gzip */this.gzhead=null;/* gzip header information to write */this.gzindex=0;/* where in extra, name, or comment */this.method=Z_DEFLATED;/* can only be DEFLATED */this.last_flush=-1;/* value of flush param for previous deflate call */this.w_size=0;/* LZ77 window size (32K by default) */this.w_bits=0;/* log2(w_size) (8..16) */this.w_mask=0;/* w_size - 1 */this.window=null;/* Sliding window. Input bytes are read into the second half of the window, |
|
|
* and move to the first half later to keep a dictionary of at least wSize |
|
|
* bytes. With this organization, matches are limited to a distance of |
|
|
* wSize-MAX_MATCH bytes, but this ensures that IO is always |
|
|
* performed with a length multiple of the block size. |
|
|
*/this.window_size=0;/* Actual size of window: 2*wSize, except when the user input buffer |
|
|
* is directly used as sliding window. |
|
|
*/this.prev=null;/* Link to older string with same hash index. To limit the size of this |
|
|
* array to 64K, this link is maintained only for the last 32K strings. |
|
|
* An index in this array is thus a window index modulo 32K. |
|
|
*/this.head=null;/* Heads of the hash chains or NIL. */this.ins_h=0;/* hash index of string to be inserted */this.hash_size=0;/* number of elements in hash table */this.hash_bits=0;/* log2(hash_size) */this.hash_mask=0;/* hash_size-1 */this.hash_shift=0;/* Number of bits by which ins_h must be shifted at each input |
|
|
* step. It must be such that after MIN_MATCH steps, the oldest |
|
|
* byte no longer takes part in the hash key, that is: |
|
|
* hash_shift * MIN_MATCH >= hash_bits |
|
|
*/this.block_start=0;/* Window position at the beginning of the current output block. Gets |
|
|
* negative when the window is moved backwards. |
|
|
*/this.match_length=0;/* length of best match */this.prev_match=0;/* previous match */this.match_available=0;/* set if previous match exists */this.strstart=0;/* start of string to insert */this.match_start=0;/* start of matching string */this.lookahead=0;/* number of valid bytes ahead in window */this.prev_length=0;/* Length of the best match at previous step. Matches not greater than this |
|
|
* are discarded. This is used in the lazy match evaluation. |
|
|
*/this.max_chain_length=0;/* To speed up deflation, hash chains are never searched beyond this |
|
|
* length. A higher limit improves compression ratio but degrades the |
|
|
* speed. |
|
|
*/this.max_lazy_match=0;/* Attempt to find a better match only when the current match is strictly |
|
|
* smaller than this value. This mechanism is used only for compression |
|
|
* levels >= 4. |
|
|
*/ // That's alias to max_lazy_match, don't use directly |
|
|
//this.max_insert_length = 0; |
|
|
/* Insert new strings in the hash table only if the match length is not |
|
|
* greater than this length. This saves time but degrades compression. |
|
|
* max_insert_length is used only for compression levels <= 3. |
|
|
*/this.level=0;/* compression level (1..9) */this.strategy=0;/* favor or force Huffman coding*/this.good_match=0;/* Use a faster search when the previous match is longer than this */this.nice_match=0;/* Stop searching when current match exceeds this */ /* used by trees.c: */ /* Didn't use ct_data typedef below to suppress compiler warning */ // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ |
|
|
// struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ |
|
|
// struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ |
|
|
// Use flat array of DOUBLE size, with interleaved fata, |
|
|
// because JS does not support effective |
|
|
this.dyn_ltree=new utils.Buf16(HEAP_SIZE*2);this.dyn_dtree=new utils.Buf16((2*D_CODES+1)*2);this.bl_tree=new utils.Buf16((2*BL_CODES+1)*2);zero(this.dyn_ltree);zero(this.dyn_dtree);zero(this.bl_tree);this.l_desc=null;/* desc. for literal tree */this.d_desc=null;/* desc. for distance tree */this.bl_desc=null;/* desc. for bit length tree */ //ush bl_count[MAX_BITS+1]; |
|
|
this.bl_count=new utils.Buf16(MAX_BITS+1);/* number of codes at each bit length for an optimal tree */ //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ |
|
|
this.heap=new utils.Buf16(2*L_CODES+1);/* heap used to build the Huffman trees */zero(this.heap);this.heap_len=0;/* number of elements in the heap */this.heap_max=0;/* element of largest frequency */ /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. |
|
|
* The same heap array is used to build all trees. |
|
|
*/this.depth=new utils.Buf16(2*L_CODES+1);//uch depth[2*L_CODES+1]; |
|
|
zero(this.depth);/* Depth of each subtree used as tie breaker for trees of equal frequency |
|
|
*/this.l_buf=0;/* buffer index for literals or lengths */this.lit_bufsize=0;/* Size of match buffer for literals/lengths. There are 4 reasons for |
|
|
* limiting lit_bufsize to 64K: |
|
|
* - frequencies can be kept in 16 bit counters |
|
|
* - if compression is not successful for the first block, all input |
|
|
* data is still in the window so we can still emit a stored block even |
|
|
* when input comes from standard input. (This can also be done for |
|
|
* all blocks if lit_bufsize is not greater than 32K.) |
|
|
* - if compression is not successful for a file smaller than 64K, we can |
|
|
* even emit a stored file instead of a stored block (saving 5 bytes). |
|
|
* This is applicable only for zip (not gzip or zlib). |
|
|
* - creating new Huffman trees less frequently may not provide fast |
|
|
* adaptation to changes in the input data statistics. (Take for |
|
|
* example a binary file with poorly compressible code followed by |
|
|
* a highly compressible string table.) Smaller buffer sizes give |
|
|
* fast adaptation but have of course the overhead of transmitting |
|
|
* trees more frequently. |
|
|
* - I can't count above 4 |
|
|
*/this.last_lit=0;/* running index in l_buf */this.d_buf=0;/* Buffer index for distances. To simplify the code, d_buf and l_buf have |
|
|
* the same number of elements. To use different lengths, an extra flag |
|
|
* array would be necessary. |
|
|
*/this.opt_len=0;/* bit length of current block with optimal trees */this.static_len=0;/* bit length of current block with static trees */this.matches=0;/* number of string matches in current block */this.insert=0;/* bytes at end of window left to insert */this.bi_buf=0;/* Output buffer. bits are inserted starting at the bottom (least |
|
|
* significant bits). |
|
|
*/this.bi_valid=0;/* Number of valid bits in bi_buf. All bits above the last valid bit |
|
|
* are always zero. |
|
|
*/ // Used for window memory init. We safely ignore it for JS. That makes |
|
|
// sense only for pointers and memory check tools. |
|
|
//this.high_water = 0; |
|
|
/* High water mark offset in window for initialized bytes -- bytes above |
|
|
* this are set to zero in order to avoid memory check warnings when |
|
|
* longest match routines access bytes past the input. This is then |
|
|
* updated to the new high water mark. |
|
|
*/}function deflateResetKeep(strm){var s;if(!strm||!strm.state){return err(strm,Z_STREAM_ERROR);}strm.total_in=strm.total_out=0;strm.data_type=Z_UNKNOWN;s=strm.state;s.pending=0;s.pending_out=0;if(s.wrap<0){s.wrap=-s.wrap;/* was made negative by deflate(..., Z_FINISH); */}s.status=s.wrap?INIT_STATE:BUSY_STATE;strm.adler=s.wrap===2?0// crc32(0, Z_NULL, 0) |
|
|
:1;// adler32(0, Z_NULL, 0) |
|
|
s.last_flush=Z_NO_FLUSH;trees._tr_init(s);return Z_OK;}function deflateReset(strm){var ret=deflateResetKeep(strm);if(ret===Z_OK){lm_init(strm.state);}return ret;}function deflateSetHeader(strm,head){if(!strm||!strm.state){return Z_STREAM_ERROR;}if(strm.state.wrap!==2){return Z_STREAM_ERROR;}strm.state.gzhead=head;return Z_OK;}function deflateInit2(strm,level,method,windowBits,memLevel,strategy){if(!strm){// === Z_NULL |
|
|
return Z_STREAM_ERROR;}var wrap=1;if(level===Z_DEFAULT_COMPRESSION){level=6;}if(windowBits<0){/* suppress zlib wrapper */wrap=0;windowBits=-windowBits;}else if(windowBits>15){wrap=2;/* write gzip wrapper instead */windowBits-=16;}if(memLevel<1||memLevel>MAX_MEM_LEVEL||method!==Z_DEFLATED||windowBits<8||windowBits>15||level<0||level>9||strategy<0||strategy>Z_FIXED){return err(strm,Z_STREAM_ERROR);}if(windowBits===8){windowBits=9;}/* until 256-byte window bug fixed */var s=new DeflateState();strm.state=s;s.strm=strm;s.wrap=wrap;s.gzhead=null;s.w_bits=windowBits;s.w_size=1<<s.w_bits;s.w_mask=s.w_size-1;s.hash_bits=memLevel+7;s.hash_size=1<<s.hash_bits;s.hash_mask=s.hash_size-1;s.hash_shift=~~((s.hash_bits+MIN_MATCH-1)/MIN_MATCH);s.window=new utils.Buf8(s.w_size*2);s.head=new utils.Buf16(s.hash_size);s.prev=new utils.Buf16(s.w_size);// Don't need mem init magic for JS. |
|
|
//s.high_water = 0; /* nothing written to s->window yet */ |
|
|
s.lit_bufsize=1<<memLevel+6;/* 16K elements by default */s.pending_buf_size=s.lit_bufsize*4;//overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); |
|
|
//s->pending_buf = (uchf *) overlay; |
|
|
s.pending_buf=new utils.Buf8(s.pending_buf_size);// It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`) |
|
|
//s->d_buf = overlay + s->lit_bufsize/sizeof(ush); |
|
|
s.d_buf=1*s.lit_bufsize;//s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; |
|
|
s.l_buf=(1+2)*s.lit_bufsize;s.level=level;s.strategy=strategy;s.method=method;return deflateReset(strm);}function deflateInit(strm,level){return deflateInit2(strm,level,Z_DEFLATED,MAX_WBITS,DEF_MEM_LEVEL,Z_DEFAULT_STRATEGY);}function deflate(strm,flush){var old_flush,s;var beg,val;// for gzip header write only |
|
|
if(!strm||!strm.state||flush>Z_BLOCK||flush<0){return strm?err(strm,Z_STREAM_ERROR):Z_STREAM_ERROR;}s=strm.state;if(!strm.output||!strm.input&&strm.avail_in!==0||s.status===FINISH_STATE&&flush!==Z_FINISH){return err(strm,strm.avail_out===0?Z_BUF_ERROR:Z_STREAM_ERROR);}s.strm=strm;/* just in case */old_flush=s.last_flush;s.last_flush=flush;/* Write the header */if(s.status===INIT_STATE){if(s.wrap===2){// GZIP header |
|
|
strm.adler=0;//crc32(0L, Z_NULL, 0); |
|
|
put_byte(s,31);put_byte(s,139);put_byte(s,8);if(!s.gzhead){// s->gzhead == Z_NULL |
|
|
put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,OS_CODE);s.status=BUSY_STATE;}else{put_byte(s,(s.gzhead.text?1:0)+(s.gzhead.hcrc?2:0)+(!s.gzhead.extra?0:4)+(!s.gzhead.name?0:8)+(!s.gzhead.comment?0:16));put_byte(s,s.gzhead.time&0xff);put_byte(s,s.gzhead.time>>8&0xff);put_byte(s,s.gzhead.time>>16&0xff);put_byte(s,s.gzhead.time>>24&0xff);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,s.gzhead.os&0xff);if(s.gzhead.extra&&s.gzhead.extra.length){put_byte(s,s.gzhead.extra.length&0xff);put_byte(s,s.gzhead.extra.length>>8&0xff);}if(s.gzhead.hcrc){strm.adler=crc32(strm.adler,s.pending_buf,s.pending,0);}s.gzindex=0;s.status=EXTRA_STATE;}}else// DEFLATE header |
|
|
{var header=Z_DEFLATED+(s.w_bits-8<<4)<<8;var level_flags=-1;if(s.strategy>=Z_HUFFMAN_ONLY||s.level<2){level_flags=0;}else if(s.level<6){level_flags=1;}else if(s.level===6){level_flags=2;}else{level_flags=3;}header|=level_flags<<6;if(s.strstart!==0){header|=PRESET_DICT;}header+=31-header%31;s.status=BUSY_STATE;putShortMSB(s,header);/* Save the adler32 of the preset dictionary: */if(s.strstart!==0){putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&0xffff);}strm.adler=1;// adler32(0L, Z_NULL, 0); |
|
|
}}//#ifdef GZIP |
|
|
if(s.status===EXTRA_STATE){if(s.gzhead.extra/* != Z_NULL*/){beg=s.pending;/* start of bytes to update crc */while(s.gzindex<(s.gzhead.extra.length&0xffff)){if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg);}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){break;}}put_byte(s,s.gzhead.extra[s.gzindex]&0xff);s.gzindex++;}if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg);}if(s.gzindex===s.gzhead.extra.length){s.gzindex=0;s.status=NAME_STATE;}}else{s.status=NAME_STATE;}}if(s.status===NAME_STATE){if(s.gzhead.name/* != Z_NULL*/){beg=s.pending;/* start of bytes to update crc */ //int val; |
|
|
do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg);}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break;}}// JS specific: little magic to add zero terminator to end of string |
|
|
if(s.gzindex<s.gzhead.name.length){val=s.gzhead.name.charCodeAt(s.gzindex++)&0xff;}else{val=0;}put_byte(s,val);}while(val!==0);if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg);}if(val===0){s.gzindex=0;s.status=COMMENT_STATE;}}else{s.status=COMMENT_STATE;}}if(s.status===COMMENT_STATE){if(s.gzhead.comment/* != Z_NULL*/){beg=s.pending;/* start of bytes to update crc */ //int val; |
|
|
do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg);}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break;}}// JS specific: little magic to add zero terminator to end of string |
|
|
if(s.gzindex<s.gzhead.comment.length){val=s.gzhead.comment.charCodeAt(s.gzindex++)&0xff;}else{val=0;}put_byte(s,val);}while(val!==0);if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg);}if(val===0){s.status=HCRC_STATE;}}else{s.status=HCRC_STATE;}}if(s.status===HCRC_STATE){if(s.gzhead.hcrc){if(s.pending+2>s.pending_buf_size){flush_pending(strm);}if(s.pending+2<=s.pending_buf_size){put_byte(s,strm.adler&0xff);put_byte(s,strm.adler>>8&0xff);strm.adler=0;//crc32(0L, Z_NULL, 0); |
|
|
s.status=BUSY_STATE;}}else{s.status=BUSY_STATE;}}//#endif |
|
|
/* Flush as much pending output as possible */if(s.pending!==0){flush_pending(strm);if(strm.avail_out===0){/* Since avail_out is 0, deflate will be called again with |
|
|
* more output space, but possibly with both pending and |
|
|
* avail_in equal to zero. There won't be anything to do, |
|
|
* but this is not an error situation so make sure we |
|
|
* return OK instead of BUF_ERROR at next call of deflate: |
|
|
*/s.last_flush=-1;return Z_OK;}/* Make sure there is something to do and avoid duplicate consecutive |
|
|
* flushes. For repeated and useless calls with Z_FINISH, we keep |
|
|
* returning Z_STREAM_END instead of Z_BUF_ERROR. |
|
|
*/}else if(strm.avail_in===0&&rank(flush)<=rank(old_flush)&&flush!==Z_FINISH){return err(strm,Z_BUF_ERROR);}/* User must not provide more input after the first FINISH: */if(s.status===FINISH_STATE&&strm.avail_in!==0){return err(strm,Z_BUF_ERROR);}/* Start a new block or continue the current one. |
|
|
*/if(strm.avail_in!==0||s.lookahead!==0||flush!==Z_NO_FLUSH&&s.status!==FINISH_STATE){var bstate=s.strategy===Z_HUFFMAN_ONLY?deflate_huff(s,flush):s.strategy===Z_RLE?deflate_rle(s,flush):configuration_table[s.level].func(s,flush);if(bstate===BS_FINISH_STARTED||bstate===BS_FINISH_DONE){s.status=FINISH_STATE;}if(bstate===BS_NEED_MORE||bstate===BS_FINISH_STARTED){if(strm.avail_out===0){s.last_flush=-1;/* avoid BUF_ERROR next call, see above */}return Z_OK;/* If flush != Z_NO_FLUSH && avail_out == 0, the next call |
|
|
* of deflate should use the same flush parameter to make sure |
|
|
* that the flush is complete. So we don't have to output an |
|
|
* empty block here, this will be done at next call. This also |
|
|
* ensures that for a very small output buffer, we emit at most |
|
|
* one empty block. |
|
|
*/}if(bstate===BS_BLOCK_DONE){if(flush===Z_PARTIAL_FLUSH){trees._tr_align(s);}else if(flush!==Z_BLOCK){/* FULL_FLUSH or SYNC_FLUSH */trees._tr_stored_block(s,0,0,false);/* For a full flush, this empty block will be recognized |
|
|
* as a special marker by inflate_sync(). |
|
|
*/if(flush===Z_FULL_FLUSH){/*** CLEAR_HASH(s); ***/ /* forget history */zero(s.head);// Fill with NIL (= 0); |
|
|
if(s.lookahead===0){s.strstart=0;s.block_start=0;s.insert=0;}}}flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;/* avoid BUF_ERROR at next call, see above */return Z_OK;}}}//Assert(strm->avail_out > 0, "bug2"); |
|
|
//if (strm.avail_out <= 0) { throw new Error("bug2");} |
|
|
if(flush!==Z_FINISH){return Z_OK;}if(s.wrap<=0){return Z_STREAM_END;}/* Write the trailer */if(s.wrap===2){put_byte(s,strm.adler&0xff);put_byte(s,strm.adler>>8&0xff);put_byte(s,strm.adler>>16&0xff);put_byte(s,strm.adler>>24&0xff);put_byte(s,strm.total_in&0xff);put_byte(s,strm.total_in>>8&0xff);put_byte(s,strm.total_in>>16&0xff);put_byte(s,strm.total_in>>24&0xff);}else{putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&0xffff);}flush_pending(strm);/* If avail_out is zero, the application will call deflate again |
|
|
* to flush the rest. |
|
|
*/if(s.wrap>0){s.wrap=-s.wrap;}/* write the trailer only once! */return s.pending!==0?Z_OK:Z_STREAM_END;}function deflateEnd(strm){var status;if(!strm/*== Z_NULL*/||!strm.state/*== Z_NULL*/){return Z_STREAM_ERROR;}status=strm.state.status;if(status!==INIT_STATE&&status!==EXTRA_STATE&&status!==NAME_STATE&&status!==COMMENT_STATE&&status!==HCRC_STATE&&status!==BUSY_STATE&&status!==FINISH_STATE){return err(strm,Z_STREAM_ERROR);}strm.state=null;return status===BUSY_STATE?err(strm,Z_DATA_ERROR):Z_OK;}/* ========================================================================= |
|
|
* Initializes the compression dictionary from the given byte |
|
|
* sequence without producing any compressed output. |
|
|
*/function deflateSetDictionary(strm,dictionary){var dictLength=dictionary.length;var s;var str,n;var wrap;var avail;var next;var input;var tmpDict;if(!strm/*== Z_NULL*/||!strm.state/*== Z_NULL*/){return Z_STREAM_ERROR;}s=strm.state;wrap=s.wrap;if(wrap===2||wrap===1&&s.status!==INIT_STATE||s.lookahead){return Z_STREAM_ERROR;}/* when using zlib wrappers, compute Adler-32 for provided dictionary */if(wrap===1){/* adler32(strm->adler, dictionary, dictLength); */strm.adler=adler32(strm.adler,dictionary,dictLength,0);}s.wrap=0;/* avoid computing Adler-32 in read_buf */ /* if dictionary would fill window, just replace the history */if(dictLength>=s.w_size){if(wrap===0){/* already empty otherwise */ /*** CLEAR_HASH(s); ***/zero(s.head);// Fill with NIL (= 0); |
|
|
s.strstart=0;s.block_start=0;s.insert=0;}/* use the tail */ // dictionary = dictionary.slice(dictLength - s.w_size); |
|
|
tmpDict=new utils.Buf8(s.w_size);utils.arraySet(tmpDict,dictionary,dictLength-s.w_size,s.w_size,0);dictionary=tmpDict;dictLength=s.w_size;}/* insert dictionary into window and hash */avail=strm.avail_in;next=strm.next_in;input=strm.input;strm.avail_in=dictLength;strm.next_in=0;strm.input=dictionary;fill_window(s);while(s.lookahead>=MIN_MATCH){str=s.strstart;n=s.lookahead-(MIN_MATCH-1);do{/* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */s.ins_h=(s.ins_h<<s.hash_shift^s.window[str+MIN_MATCH-1])&s.hash_mask;s.prev[str&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=str;str++;}while(--n);s.strstart=str;s.lookahead=MIN_MATCH-1;fill_window(s);}s.strstart+=s.lookahead;s.block_start=s.strstart;s.insert=s.lookahead;s.lookahead=0;s.match_length=s.prev_length=MIN_MATCH-1;s.match_available=0;strm.next_in=next;strm.input=input;strm.avail_in=avail;s.wrap=wrap;return Z_OK;}exports.deflateInit=deflateInit;exports.deflateInit2=deflateInit2;exports.deflateReset=deflateReset;exports.deflateResetKeep=deflateResetKeep;exports.deflateSetHeader=deflateSetHeader;exports.deflate=deflate;exports.deflateEnd=deflateEnd;exports.deflateSetDictionary=deflateSetDictionary;exports.deflateInfo='pako deflate (from Nodeca project)';/* Not implemented |
|
|
exports.deflateBound = deflateBound; |
|
|
exports.deflateCopy = deflateCopy; |
|
|
exports.deflateParams = deflateParams; |
|
|
exports.deflatePending = deflatePending; |
|
|
exports.deflatePrime = deflatePrime; |
|
|
exports.deflateTune = deflateTune; |
|
|
*/},{"../utils/common":419,"./adler32":421,"./crc32":423,"./messages":429,"./trees":430}],425:[function(require,module,exports){'use strict';// (C) 1995-2013 Jean-loup Gailly and Mark Adler |
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin |
|
|
// |
|
|
// This software is provided 'as-is', without any express or implied |
|
|
// warranty. In no event will the authors be held liable for any damages |
|
|
// arising from the use of this software. |
|
|
// |
|
|
// Permission is granted to anyone to use this software for any purpose, |
|
|
// including commercial applications, and to alter it and redistribute it |
|
|
// freely, subject to the following restrictions: |
|
|
// |
|
|
// 1. The origin of this software must not be misrepresented; you must not |
|
|
// claim that you wrote the original software. If you use this software |
|
|
// in a product, an acknowledgment in the product documentation would be |
|
|
// appreciated but is not required. |
|
|
// 2. Altered source versions must be plainly marked as such, and must not be |
|
|
// misrepresented as being the original software. |
|
|
// 3. This notice may not be removed or altered from any source distribution. |
|
|
function GZheader(){/* true if compressed data believed to be text */this.text=0;/* modification time */this.time=0;/* extra flags (not used when writing a gzip file) */this.xflags=0;/* operating system */this.os=0;/* pointer to extra field or Z_NULL if none */this.extra=null;/* extra field length (valid if extra != Z_NULL) */this.extra_len=0;// Actually, we don't need it in JS, |
|
|
// but leave for few code modifications |
|
|
// |
|
|
// Setup limits is not necessary because in js we should not preallocate memory |
|
|
// for inflate use constant limit in 65536 bytes |
|
|
// |
|
|
/* space at extra (only when reading header) */ // this.extra_max = 0; |
|
|
/* pointer to zero-terminated file name or Z_NULL */this.name='';/* space at name (only when reading header) */ // this.name_max = 0; |
|
|
/* pointer to zero-terminated comment or Z_NULL */this.comment='';/* space at comment (only when reading header) */ // this.comm_max = 0; |
|
|
/* true if there was or will be a header crc */this.hcrc=0;/* true when done reading gzip header (not used when writing a gzip file) */this.done=false;}module.exports=GZheader;},{}],426:[function(require,module,exports){'use strict';// (C) 1995-2013 Jean-loup Gailly and Mark Adler |
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin |
|
|
// |
|
|
// This software is provided 'as-is', without any express or implied |
|
|
// warranty. In no event will the authors be held liable for any damages |
|
|
// arising from the use of this software. |
|
|
// |
|
|
// Permission is granted to anyone to use this software for any purpose, |
|
|
// including commercial applications, and to alter it and redistribute it |
|
|
// freely, subject to the following restrictions: |
|
|
// |
|
|
// 1. The origin of this software must not be misrepresented; you must not |
|
|
// claim that you wrote the original software. If you use this software |
|
|
// in a product, an acknowledgment in the product documentation would be |
|
|
// appreciated but is not required. |
|
|
// 2. Altered source versions must be plainly marked as such, and must not be |
|
|
// misrepresented as being the original software. |
|
|
// 3. This notice may not be removed or altered from any source distribution. |
|
|
// See state defs from inflate.js |
|
|
var BAD=30;/* got a data error -- remain here until reset */var TYPE=12;/* i: waiting for type bits, including last-flag bit */ /* |
|
|
Decode literal, length, and distance codes and write out the resulting |
|
|
literal and match bytes until either not enough input or output is |
|
|
available, an end-of-block is encountered, or a data error is encountered. |
|
|
When large enough input and output buffers are supplied to inflate(), for |
|
|
example, a 16K input buffer and a 64K output buffer, more than 95% of the |
|
|
inflate execution time is spent in this routine. |
|
|
|
|
|
Entry assumptions: |
|
|
|
|
|
state.mode === LEN |
|
|
strm.avail_in >= 6 |
|
|
strm.avail_out >= 258 |
|
|
start >= strm.avail_out |
|
|
state.bits < 8 |
|
|
|
|
|
On return, state.mode is one of: |
|
|
|
|
|
LEN -- ran out of enough output space or enough available input |
|
|
TYPE -- reached end of block code, inflate() to interpret next block |
|
|
BAD -- error in block data |
|
|
|
|
|
Notes: |
|
|
|
|
|
- The maximum input bits used by a length/distance pair is 15 bits for the |
|
|
length code, 5 bits for the length extra, 15 bits for the distance code, |
|
|
and 13 bits for the distance extra. This totals 48 bits, or six bytes. |
|
|
Therefore if strm.avail_in >= 6, then there is enough input to avoid |
|
|
checking for available input while decoding. |
|
|
|
|
|
- The maximum bytes that a single length/distance pair can output is 258 |
|
|
bytes, which is the maximum length that can be coded. inflate_fast() |
|
|
requires strm.avail_out >= 258 for each loop to avoid checking for |
|
|
output space. |
|
|
*/module.exports=function inflate_fast(strm,start){var state;var _in;/* local strm.input */var last;/* have enough input while in < last */var _out;/* local strm.output */var beg;/* inflate()'s initial strm.output */var end;/* while out < end, enough space available */ //#ifdef INFLATE_STRICT |
|
|
var dmax;/* maximum distance from zlib header */ //#endif |
|
|
var wsize;/* window size or zero if not using window */var whave;/* valid bytes in the window */var wnext;/* window write index */ // Use `s_window` instead `window`, avoid conflict with instrumentation tools |
|
|
var s_window;/* allocated sliding window, if wsize != 0 */var hold;/* local strm.hold */var bits;/* local strm.bits */var lcode;/* local strm.lencode */var dcode;/* local strm.distcode */var lmask;/* mask for first level of length codes */var dmask;/* mask for first level of distance codes */var here;/* retrieved table entry */var op;/* code bits, operation, extra bits, or */ /* window position, window bytes to copy */var len;/* match length, unused bytes */var dist;/* match distance */var from;/* where to copy match from */var from_source;var input,output;// JS specific, because we have no pointers |
|
|
/* copy state to local variables */state=strm.state;//here = state.here; |
|
|
_in=strm.next_in;input=strm.input;last=_in+(strm.avail_in-5);_out=strm.next_out;output=strm.output;beg=_out-(start-strm.avail_out);end=_out+(strm.avail_out-257);//#ifdef INFLATE_STRICT |
|
|
dmax=state.dmax;//#endif |
|
|
wsize=state.wsize;whave=state.whave;wnext=state.wnext;s_window=state.window;hold=state.hold;bits=state.bits;lcode=state.lencode;dcode=state.distcode;lmask=(1<<state.lenbits)-1;dmask=(1<<state.distbits)-1;/* decode literals and length/distances until end-of-block or not enough |
|
|
input data or output space */top:do{if(bits<15){hold+=input[_in++]<<bits;bits+=8;hold+=input[_in++]<<bits;bits+=8;}here=lcode[hold&lmask];dolen:for(;;){// Goto emulation |
|
|
op=here>>>24/*here.bits*/;hold>>>=op;bits-=op;op=here>>>16&0xff/*here.op*/;if(op===0){/* literal */ //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? |
|
|
// "inflate: literal '%c'\n" : |
|
|
// "inflate: literal 0x%02x\n", here.val)); |
|
|
output[_out++]=here&0xffff/*here.val*/;}else if(op&16){/* length base */len=here&0xffff/*here.val*/;op&=15;/* number of extra bits */if(op){if(bits<op){hold+=input[_in++]<<bits;bits+=8;}len+=hold&(1<<op)-1;hold>>>=op;bits-=op;}//Tracevv((stderr, "inflate: length %u\n", len)); |
|
|
if(bits<15){hold+=input[_in++]<<bits;bits+=8;hold+=input[_in++]<<bits;bits+=8;}here=dcode[hold&dmask];dodist:for(;;){// goto emulation |
|
|
op=here>>>24/*here.bits*/;hold>>>=op;bits-=op;op=here>>>16&0xff/*here.op*/;if(op&16){/* distance base */dist=here&0xffff/*here.val*/;op&=15;/* number of extra bits */if(bits<op){hold+=input[_in++]<<bits;bits+=8;if(bits<op){hold+=input[_in++]<<bits;bits+=8;}}dist+=hold&(1<<op)-1;//#ifdef INFLATE_STRICT |
|
|
if(dist>dmax){strm.msg='invalid distance too far back';state.mode=BAD;break top;}//#endif |
|
|
hold>>>=op;bits-=op;//Tracevv((stderr, "inflate: distance %u\n", dist)); |
|
|
op=_out-beg;/* max distance in output */if(dist>op){/* see if copy from window */op=dist-op;/* distance back in window */if(op>whave){if(state.sane){strm.msg='invalid distance too far back';state.mode=BAD;break top;}// (!) This block is disabled in zlib defaults, |
|
|
// don't enable it for binary compatibility |
|
|
//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR |
|
|
// if (len <= op - whave) { |
|
|
// do { |
|
|
// output[_out++] = 0; |
|
|
// } while (--len); |
|
|
// continue top; |
|
|
// } |
|
|
// len -= op - whave; |
|
|
// do { |
|
|
// output[_out++] = 0; |
|
|
// } while (--op > whave); |
|
|
// if (op === 0) { |
|
|
// from = _out - dist; |
|
|
// do { |
|
|
// output[_out++] = output[from++]; |
|
|
// } while (--len); |
|
|
// continue top; |
|
|
// } |
|
|
//#endif |
|
|
}from=0;// window index |
|
|
from_source=s_window;if(wnext===0){/* very common case */from+=wsize-op;if(op<len){/* some from window */len-=op;do{output[_out++]=s_window[from++];}while(--op);from=_out-dist;/* rest from output */from_source=output;}}else if(wnext<op){/* wrap around window */from+=wsize+wnext-op;op-=wnext;if(op<len){/* some from end of window */len-=op;do{output[_out++]=s_window[from++];}while(--op);from=0;if(wnext<len){/* some from start of window */op=wnext;len-=op;do{output[_out++]=s_window[from++];}while(--op);from=_out-dist;/* rest from output */from_source=output;}}}else{/* contiguous in window */from+=wnext-op;if(op<len){/* some from window */len-=op;do{output[_out++]=s_window[from++];}while(--op);from=_out-dist;/* rest from output */from_source=output;}}while(len>2){output[_out++]=from_source[from++];output[_out++]=from_source[from++];output[_out++]=from_source[from++];len-=3;}if(len){output[_out++]=from_source[from++];if(len>1){output[_out++]=from_source[from++];}}}else{from=_out-dist;/* copy direct from output */do{/* minimum length is three */output[_out++]=output[from++];output[_out++]=output[from++];output[_out++]=output[from++];len-=3;}while(len>2);if(len){output[_out++]=output[from++];if(len>1){output[_out++]=output[from++];}}}}else if((op&64)===0){/* 2nd level distance code */here=dcode[(here&0xffff)+(/*here.val*/hold&(1<<op)-1)];continue dodist;}else{strm.msg='invalid distance code';state.mode=BAD;break top;}break;// need to emulate goto via "continue" |
|
|
}}else if((op&64)===0){/* 2nd level length code */here=lcode[(here&0xffff)+(/*here.val*/hold&(1<<op)-1)];continue dolen;}else if(op&32){/* end-of-block */ //Tracevv((stderr, "inflate: end of block\n")); |
|
|
state.mode=TYPE;break top;}else{strm.msg='invalid literal/length code';state.mode=BAD;break top;}break;// need to emulate goto via "continue" |
|
|
}}while(_in<last&&_out<end);/* return unused bytes (on entry, bits < 8, so in won't go too far back) */len=bits>>3;_in-=len;bits-=len<<3;hold&=(1<<bits)-1;/* update state and return */strm.next_in=_in;strm.next_out=_out;strm.avail_in=_in<last?5+(last-_in):5-(_in-last);strm.avail_out=_out<end?257+(end-_out):257-(_out-end);state.hold=hold;state.bits=bits;return;};},{}],427:[function(require,module,exports){'use strict';// (C) 1995-2013 Jean-loup Gailly and Mark Adler |
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin |
|
|
// |
|
|
// This software is provided 'as-is', without any express or implied |
|
|
// warranty. In no event will the authors be held liable for any damages |
|
|
// arising from the use of this software. |
|
|
// |
|
|
// Permission is granted to anyone to use this software for any purpose, |
|
|
// including commercial applications, and to alter it and redistribute it |
|
|
// freely, subject to the following restrictions: |
|
|
// |
|
|
// 1. The origin of this software must not be misrepresented; you must not |
|
|
// claim that you wrote the original software. If you use this software |
|
|
// in a product, an acknowledgment in the product documentation would be |
|
|
// appreciated but is not required. |
|
|
// 2. Altered source versions must be plainly marked as such, and must not be |
|
|
// misrepresented as being the original software. |
|
|
// 3. This notice may not be removed or altered from any source distribution. |
|
|
var utils=require('../utils/common');var adler32=require('./adler32');var crc32=require('./crc32');var inflate_fast=require('./inffast');var inflate_table=require('./inftrees');var CODES=0;var LENS=1;var DISTS=2;/* Public constants ==========================================================*/ /* ===========================================================================*/ /* Allowed flush values; see deflate() and inflate() below for details */ //var Z_NO_FLUSH = 0; |
|
|
//var Z_PARTIAL_FLUSH = 1; |
|
|
//var Z_SYNC_FLUSH = 2; |
|
|
//var Z_FULL_FLUSH = 3; |
|
|
var Z_FINISH=4;var Z_BLOCK=5;var Z_TREES=6;/* Return codes for the compression/decompression functions. Negative values |
|
|
* are errors, positive values are used for special but normal events. |
|
|
*/var Z_OK=0;var Z_STREAM_END=1;var Z_NEED_DICT=2;//var Z_ERRNO = -1; |
|
|
var Z_STREAM_ERROR=-2;var Z_DATA_ERROR=-3;var Z_MEM_ERROR=-4;var Z_BUF_ERROR=-5;//var Z_VERSION_ERROR = -6; |
|
|
/* The deflate compression method */var Z_DEFLATED=8;/* STATES ====================================================================*/ /* ===========================================================================*/var HEAD=1;/* i: waiting for magic header */var FLAGS=2;/* i: waiting for method and flags (gzip) */var TIME=3;/* i: waiting for modification time (gzip) */var OS=4;/* i: waiting for extra flags and operating system (gzip) */var EXLEN=5;/* i: waiting for extra length (gzip) */var EXTRA=6;/* i: waiting for extra bytes (gzip) */var NAME=7;/* i: waiting for end of file name (gzip) */var COMMENT=8;/* i: waiting for end of comment (gzip) */var HCRC=9;/* i: waiting for header crc (gzip) */var DICTID=10;/* i: waiting for dictionary check value */var DICT=11;/* waiting for inflateSetDictionary() call */var TYPE=12;/* i: waiting for type bits, including last-flag bit */var TYPEDO=13;/* i: same, but skip check to exit inflate on new block */var STORED=14;/* i: waiting for stored size (length and complement) */var COPY_=15;/* i/o: same as COPY below, but only first time in */var COPY=16;/* i/o: waiting for input or output to copy stored block */var TABLE=17;/* i: waiting for dynamic block table lengths */var LENLENS=18;/* i: waiting for code length code lengths */var CODELENS=19;/* i: waiting for length/lit and distance code lengths */var LEN_=20;/* i: same as LEN below, but only first time in */var LEN=21;/* i: waiting for length/lit/eob code */var LENEXT=22;/* i: waiting for length extra bits */var DIST=23;/* i: waiting for distance code */var DISTEXT=24;/* i: waiting for distance extra bits */var MATCH=25;/* o: waiting for output space to copy string */var LIT=26;/* o: waiting for output space to write literal */var CHECK=27;/* i: waiting for 32-bit check value */var LENGTH=28;/* i: waiting for 32-bit length (gzip) */var DONE=29;/* finished check, done -- remain here until reset */var BAD=30;/* got a data error -- remain here until reset */var MEM=31;/* got an inflate() memory error -- remain here until reset */var SYNC=32;/* looking for synchronization bytes to restart inflate() */ /* ===========================================================================*/var ENOUGH_LENS=852;var ENOUGH_DISTS=592;//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); |
|
|
var MAX_WBITS=15;/* 32K LZ77 window */var DEF_WBITS=MAX_WBITS;function zswap32(q){return(q>>>24&0xff)+(q>>>8&0xff00)+((q&0xff00)<<8)+((q&0xff)<<24);}function InflateState(){this.mode=0;/* current inflate mode */this.last=false;/* true if processing last block */this.wrap=0;/* bit 0 true for zlib, bit 1 true for gzip */this.havedict=false;/* true if dictionary provided */this.flags=0;/* gzip header method and flags (0 if zlib) */this.dmax=0;/* zlib header max distance (INFLATE_STRICT) */this.check=0;/* protected copy of check value */this.total=0;/* protected copy of output count */ // TODO: may be {} |
|
|
this.head=null;/* where to save gzip header information */ /* sliding window */this.wbits=0;/* log base 2 of requested window size */this.wsize=0;/* window size or zero if not using window */this.whave=0;/* valid bytes in the window */this.wnext=0;/* window write index */this.window=null;/* allocated sliding window, if needed */ /* bit accumulator */this.hold=0;/* input bit accumulator */this.bits=0;/* number of bits in "in" */ /* for string and stored block copying */this.length=0;/* literal or length of data to copy */this.offset=0;/* distance back to copy string from */ /* for table and code decoding */this.extra=0;/* extra bits needed */ /* fixed and dynamic code tables */this.lencode=null;/* starting table for length/literal codes */this.distcode=null;/* starting table for distance codes */this.lenbits=0;/* index bits for lencode */this.distbits=0;/* index bits for distcode */ /* dynamic table building */this.ncode=0;/* number of code length code lengths */this.nlen=0;/* number of length code lengths */this.ndist=0;/* number of distance code lengths */this.have=0;/* number of code lengths in lens[] */this.next=null;/* next available space in codes[] */this.lens=new utils.Buf16(320);/* temporary storage for code lengths */this.work=new utils.Buf16(288);/* work area for code table building */ /* |
|
|
because we don't have pointers in js, we use lencode and distcode directly |
|
|
as buffers so we don't need codes |
|
|
*/ //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */ |
|
|
this.lendyn=null;/* dynamic table for length/literal codes (JS specific) */this.distdyn=null;/* dynamic table for distance codes (JS specific) */this.sane=0;/* if false, allow invalid distance too far */this.back=0;/* bits back of last unprocessed length/lit */this.was=0;/* initial length of match */}function inflateResetKeep(strm){var state;if(!strm||!strm.state){return Z_STREAM_ERROR;}state=strm.state;strm.total_in=strm.total_out=state.total=0;strm.msg='';/*Z_NULL*/if(state.wrap){/* to support ill-conceived Java test suite */strm.adler=state.wrap&1;}state.mode=HEAD;state.last=0;state.havedict=0;state.dmax=32768;state.head=null/*Z_NULL*/;state.hold=0;state.bits=0;//state.lencode = state.distcode = state.next = state.codes; |
|
|
state.lencode=state.lendyn=new utils.Buf32(ENOUGH_LENS);state.distcode=state.distdyn=new utils.Buf32(ENOUGH_DISTS);state.sane=1;state.back=-1;//Tracev((stderr, "inflate: reset\n")); |
|
|
return Z_OK;}function inflateReset(strm){var state;if(!strm||!strm.state){return Z_STREAM_ERROR;}state=strm.state;state.wsize=0;state.whave=0;state.wnext=0;return inflateResetKeep(strm);}function inflateReset2(strm,windowBits){var wrap;var state;/* get the state */if(!strm||!strm.state){return Z_STREAM_ERROR;}state=strm.state;/* extract wrap request from windowBits parameter */if(windowBits<0){wrap=0;windowBits=-windowBits;}else{wrap=(windowBits>>4)+1;if(windowBits<48){windowBits&=15;}}/* set number of window bits, free window if different */if(windowBits&&(windowBits<8||windowBits>15)){return Z_STREAM_ERROR;}if(state.window!==null&&state.wbits!==windowBits){state.window=null;}/* update state and reset the rest of it */state.wrap=wrap;state.wbits=windowBits;return inflateReset(strm);}function inflateInit2(strm,windowBits){var ret;var state;if(!strm){return Z_STREAM_ERROR;}//strm.msg = Z_NULL; /* in case we return an error */ |
|
|
state=new InflateState();//if (state === Z_NULL) return Z_MEM_ERROR; |
|
|
//Tracev((stderr, "inflate: allocated\n")); |
|
|
strm.state=state;state.window=null/*Z_NULL*/;ret=inflateReset2(strm,windowBits);if(ret!==Z_OK){strm.state=null/*Z_NULL*/;}return ret;}function inflateInit(strm){return inflateInit2(strm,DEF_WBITS);}/* |
|
|
Return state with length and distance decoding tables and index sizes set to |
|
|
fixed code decoding. Normally this returns fixed tables from inffixed.h. |
|
|
If BUILDFIXED is defined, then instead this routine builds the tables the |
|
|
first time it's called, and returns those tables the first time and |
|
|
thereafter. This reduces the size of the code by about 2K bytes, in |
|
|
exchange for a little execution time. However, BUILDFIXED should not be |
|
|
used for threaded applications, since the rewriting of the tables and virgin |
|
|
may not be thread-safe. |
|
|
*/var virgin=true;var lenfix,distfix;// We have no pointers in JS, so keep tables separate |
|
|
function fixedtables(state){/* build fixed huffman tables if first call (may not be thread safe) */if(virgin){var sym;lenfix=new utils.Buf32(512);distfix=new utils.Buf32(32);/* literal/length table */sym=0;while(sym<144){state.lens[sym++]=8;}while(sym<256){state.lens[sym++]=9;}while(sym<280){state.lens[sym++]=7;}while(sym<288){state.lens[sym++]=8;}inflate_table(LENS,state.lens,0,288,lenfix,0,state.work,{bits:9});/* distance table */sym=0;while(sym<32){state.lens[sym++]=5;}inflate_table(DISTS,state.lens,0,32,distfix,0,state.work,{bits:5});/* do this just once */virgin=false;}state.lencode=lenfix;state.lenbits=9;state.distcode=distfix;state.distbits=5;}/* |
|
|
Update the window with the last wsize (normally 32K) bytes written before |
|
|
returning. If window does not exist yet, create it. This is only called |
|
|
when a window is already in use, or when output has been written during this |
|
|
inflate call, but the end of the deflate stream has not been reached yet. |
|
|
It is also called to create a window for dictionary data when a dictionary |
|
|
is loaded. |
|
|
|
|
|
Providing output buffers larger than 32K to inflate() should provide a speed |
|
|
advantage, since only the last 32K of output is copied to the sliding window |
|
|
upon return from inflate(), and since all distances after the first 32K of |
|
|
output will fall in the output data, making match copies simpler and faster. |
|
|
The advantage may be dependent on the size of the processor's data caches. |
|
|
*/function updatewindow(strm,src,end,copy){var dist;var state=strm.state;/* if it hasn't been done already, allocate space for the window */if(state.window===null){state.wsize=1<<state.wbits;state.wnext=0;state.whave=0;state.window=new utils.Buf8(state.wsize);}/* copy state->wsize or less output bytes into the circular window */if(copy>=state.wsize){utils.arraySet(state.window,src,end-state.wsize,state.wsize,0);state.wnext=0;state.whave=state.wsize;}else{dist=state.wsize-state.wnext;if(dist>copy){dist=copy;}//zmemcpy(state->window + state->wnext, end - copy, dist); |
|
|
utils.arraySet(state.window,src,end-copy,dist,state.wnext);copy-=dist;if(copy){//zmemcpy(state->window, end - copy, copy); |
|
|
utils.arraySet(state.window,src,end-copy,copy,0);state.wnext=copy;state.whave=state.wsize;}else{state.wnext+=dist;if(state.wnext===state.wsize){state.wnext=0;}if(state.whave<state.wsize){state.whave+=dist;}}}return 0;}function inflate(strm,flush){var state;var input,output;// input/output buffers |
|
|
var next;/* next input INDEX */var put;/* next output INDEX */var have,left;/* available input and output */var hold;/* bit buffer */var bits;/* bits in bit buffer */var _in,_out;/* save starting available input and output */var copy;/* number of stored or match bytes to copy */var from;/* where to copy match bytes from */var from_source;var here=0;/* current decoding table entry */var here_bits,here_op,here_val;// paked "here" denormalized (JS specific) |
|
|
//var last; /* parent table entry */ |
|
|
var last_bits,last_op,last_val;// paked "last" denormalized (JS specific) |
|
|
var len;/* length to copy for repeats, bits to drop */var ret;/* return code */var hbuf=new utils.Buf8(4);/* buffer for gzip header crc calculation */var opts;var n;// temporary var for NEED_BITS |
|
|
var order=/* permutation of code lengths */[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!strm||!strm.state||!strm.output||!strm.input&&strm.avail_in!==0){return Z_STREAM_ERROR;}state=strm.state;if(state.mode===TYPE){state.mode=TYPEDO;}/* skip check */ //--- LOAD() --- |
|
|
put=strm.next_out;output=strm.output;left=strm.avail_out;next=strm.next_in;input=strm.input;have=strm.avail_in;hold=state.hold;bits=state.bits;//--- |
|
|
_in=have;_out=left;ret=Z_OK;inf_leave:// goto emulation |
|
|
for(;;){switch(state.mode){case HEAD:if(state.wrap===0){state.mode=TYPEDO;break;}//=== NEEDBITS(16); |
|
|
while(bits<16){if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;}//===// |
|
|
if(state.wrap&2&&hold===0x8b1f){/* gzip header */state.check=0/*crc32(0L, Z_NULL, 0)*/;//=== CRC2(state.check, hold); |
|
|
hbuf[0]=hold&0xff;hbuf[1]=hold>>>8&0xff;state.check=crc32(state.check,hbuf,2,0);//===// |
|
|
//=== INITBITS(); |
|
|
hold=0;bits=0;//===// |
|
|
state.mode=FLAGS;break;}state.flags=0;/* expect zlib header */if(state.head){state.head.done=false;}if(!(state.wrap&1)||/* check if zlib header allowed */(((hold&0xff)<</*BITS(8)*/8)+(hold>>8))%31){strm.msg='incorrect header check';state.mode=BAD;break;}if((hold&0x0f)!==/*BITS(4)*/Z_DEFLATED){strm.msg='unknown compression method';state.mode=BAD;break;}//--- DROPBITS(4) ---// |
|
|
hold>>>=4;bits-=4;//---// |
|
|
len=(hold&0x0f)+/*BITS(4)*/8;if(state.wbits===0){state.wbits=len;}else if(len>state.wbits){strm.msg='invalid window size';state.mode=BAD;break;}state.dmax=1<<len;//Tracev((stderr, "inflate: zlib header ok\n")); |
|
|
strm.adler=state.check=1/*adler32(0L, Z_NULL, 0)*/;state.mode=hold&0x200?DICTID:TYPE;//=== INITBITS(); |
|
|
hold=0;bits=0;//===// |
|
|
break;case FLAGS://=== NEEDBITS(16); */ |
|
|
while(bits<16){if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;}//===// |
|
|
state.flags=hold;if((state.flags&0xff)!==Z_DEFLATED){strm.msg='unknown compression method';state.mode=BAD;break;}if(state.flags&0xe000){strm.msg='unknown header flags set';state.mode=BAD;break;}if(state.head){state.head.text=hold>>8&1;}if(state.flags&0x0200){//=== CRC2(state.check, hold); |
|
|
hbuf[0]=hold&0xff;hbuf[1]=hold>>>8&0xff;state.check=crc32(state.check,hbuf,2,0);//===// |
|
|
}//=== INITBITS(); |
|
|
hold=0;bits=0;//===// |
|
|
state.mode=TIME;/* falls through */case TIME://=== NEEDBITS(32); */ |
|
|
while(bits<32){if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;}//===// |
|
|
if(state.head){state.head.time=hold;}if(state.flags&0x0200){//=== CRC4(state.check, hold) |
|
|
hbuf[0]=hold&0xff;hbuf[1]=hold>>>8&0xff;hbuf[2]=hold>>>16&0xff;hbuf[3]=hold>>>24&0xff;state.check=crc32(state.check,hbuf,4,0);//=== |
|
|
}//=== INITBITS(); |
|
|
hold=0;bits=0;//===// |
|
|
state.mode=OS;/* falls through */case OS://=== NEEDBITS(16); */ |
|
|
while(bits<16){if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;}//===// |
|
|
if(state.head){state.head.xflags=hold&0xff;state.head.os=hold>>8;}if(state.flags&0x0200){//=== CRC2(state.check, hold); |
|
|
hbuf[0]=hold&0xff;hbuf[1]=hold>>>8&0xff;state.check=crc32(state.check,hbuf,2,0);//===// |
|
|
}//=== INITBITS(); |
|
|
hold=0;bits=0;//===// |
|
|
state.mode=EXLEN;/* falls through */case EXLEN:if(state.flags&0x0400){//=== NEEDBITS(16); */ |
|
|
while(bits<16){if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;}//===// |
|
|
state.length=hold;if(state.head){state.head.extra_len=hold;}if(state.flags&0x0200){//=== CRC2(state.check, hold); |
|
|
hbuf[0]=hold&0xff;hbuf[1]=hold>>>8&0xff;state.check=crc32(state.check,hbuf,2,0);//===// |
|
|
}//=== INITBITS(); |
|
|
hold=0;bits=0;//===// |
|
|
}else if(state.head){state.head.extra=null/*Z_NULL*/;}state.mode=EXTRA;/* falls through */case EXTRA:if(state.flags&0x0400){copy=state.length;if(copy>have){copy=have;}if(copy){if(state.head){len=state.head.extra_len-state.length;if(!state.head.extra){// Use untyped array for more convenient processing later |
|
|
state.head.extra=new Array(state.head.extra_len);}utils.arraySet(state.head.extra,input,next,// extra field is limited to 65536 bytes |
|
|
// - no need for additional size check |
|
|
copy,/*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/len);//zmemcpy(state.head.extra + len, next, |
|
|
// len + copy > state.head.extra_max ? |
|
|
// state.head.extra_max - len : copy); |
|
|
}if(state.flags&0x0200){state.check=crc32(state.check,input,copy,next);}have-=copy;next+=copy;state.length-=copy;}if(state.length){break inf_leave;}}state.length=0;state.mode=NAME;/* falls through */case NAME:if(state.flags&0x0800){if(have===0){break inf_leave;}copy=0;do{// TODO: 2 or 1 bytes? |
|
|
len=input[next+copy++];/* use constant limit because in js we should not preallocate memory */if(state.head&&len&&state.length<65536/*state.head.name_max*/){state.head.name+=String.fromCharCode(len);}}while(len&©<have);if(state.flags&0x0200){state.check=crc32(state.check,input,copy,next);}have-=copy;next+=copy;if(len){break inf_leave;}}else if(state.head){state.head.name=null;}state.length=0;state.mode=COMMENT;/* falls through */case COMMENT:if(state.flags&0x1000){if(have===0){break inf_leave;}copy=0;do{len=input[next+copy++];/* use constant limit because in js we should not preallocate memory */if(state.head&&len&&state.length<65536/*state.head.comm_max*/){state.head.comment+=String.fromCharCode(len);}}while(len&©<have);if(state.flags&0x0200){state.check=crc32(state.check,input,copy,next);}have-=copy;next+=copy;if(len){break inf_leave;}}else if(state.head){state.head.comment=null;}state.mode=HCRC;/* falls through */case HCRC:if(state.flags&0x0200){//=== NEEDBITS(16); */ |
|
|
while(bits<16){if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;}//===// |
|
|
if(hold!==(state.check&0xffff)){strm.msg='header crc mismatch';state.mode=BAD;break;}//=== INITBITS(); |
|
|
hold=0;bits=0;//===// |
|
|
}if(state.head){state.head.hcrc=state.flags>>9&1;state.head.done=true;}strm.adler=state.check=0;state.mode=TYPE;break;case DICTID://=== NEEDBITS(32); */ |
|
|
while(bits<32){if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;}//===// |
|
|
strm.adler=state.check=zswap32(hold);//=== INITBITS(); |
|
|
hold=0;bits=0;//===// |
|
|
state.mode=DICT;/* falls through */case DICT:if(state.havedict===0){//--- RESTORE() --- |
|
|
strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;//--- |
|
|
return Z_NEED_DICT;}strm.adler=state.check=1/*adler32(0L, Z_NULL, 0)*/;state.mode=TYPE;/* falls through */case TYPE:if(flush===Z_BLOCK||flush===Z_TREES){break inf_leave;}/* falls through */case TYPEDO:if(state.last){//--- BYTEBITS() ---// |
|
|
hold>>>=bits&7;bits-=bits&7;//---// |
|
|
state.mode=CHECK;break;}//=== NEEDBITS(3); */ |
|
|
while(bits<3){if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;}//===// |
|
|
state.last=hold&0x01/*BITS(1)*/;//--- DROPBITS(1) ---// |
|
|
hold>>>=1;bits-=1;//---// |
|
|
switch(hold&0x03){/*BITS(2)*/case 0:/* stored block */ //Tracev((stderr, "inflate: stored block%s\n", |
|
|
// state.last ? " (last)" : "")); |
|
|
state.mode=STORED;break;case 1:/* fixed block */fixedtables(state);//Tracev((stderr, "inflate: fixed codes block%s\n", |
|
|
// state.last ? " (last)" : "")); |
|
|
state.mode=LEN_;/* decode codes */if(flush===Z_TREES){//--- DROPBITS(2) ---// |
|
|
hold>>>=2;bits-=2;//---// |
|
|
break inf_leave;}break;case 2:/* dynamic block */ //Tracev((stderr, "inflate: dynamic codes block%s\n", |
|
|
// state.last ? " (last)" : "")); |
|
|
state.mode=TABLE;break;case 3:strm.msg='invalid block type';state.mode=BAD;}//--- DROPBITS(2) ---// |
|
|
hold>>>=2;bits-=2;//---// |
|
|
break;case STORED://--- BYTEBITS() ---// /* go to byte boundary */ |
|
|
hold>>>=bits&7;bits-=bits&7;//---// |
|
|
//=== NEEDBITS(32); */ |
|
|
while(bits<32){if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;}//===// |
|
|
if((hold&0xffff)!==(hold>>>16^0xffff)){strm.msg='invalid stored block lengths';state.mode=BAD;break;}state.length=hold&0xffff;//Tracev((stderr, "inflate: stored length %u\n", |
|
|
// state.length)); |
|
|
//=== INITBITS(); |
|
|
hold=0;bits=0;//===// |
|
|
state.mode=COPY_;if(flush===Z_TREES){break inf_leave;}/* falls through */case COPY_:state.mode=COPY;/* falls through */case COPY:copy=state.length;if(copy){if(copy>have){copy=have;}if(copy>left){copy=left;}if(copy===0){break inf_leave;}//--- zmemcpy(put, next, copy); --- |
|
|
utils.arraySet(output,input,next,copy,put);//---// |
|
|
have-=copy;next+=copy;left-=copy;put+=copy;state.length-=copy;break;}//Tracev((stderr, "inflate: stored end\n")); |
|
|
state.mode=TYPE;break;case TABLE://=== NEEDBITS(14); */ |
|
|
while(bits<14){if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;}//===// |
|
|
state.nlen=(hold&0x1f)+/*BITS(5)*/257;//--- DROPBITS(5) ---// |
|
|
hold>>>=5;bits-=5;//---// |
|
|
state.ndist=(hold&0x1f)+/*BITS(5)*/1;//--- DROPBITS(5) ---// |
|
|
hold>>>=5;bits-=5;//---// |
|
|
state.ncode=(hold&0x0f)+/*BITS(4)*/4;//--- DROPBITS(4) ---// |
|
|
hold>>>=4;bits-=4;//---// |
|
|
//#ifndef PKZIP_BUG_WORKAROUND |
|
|
if(state.nlen>286||state.ndist>30){strm.msg='too many length or distance symbols';state.mode=BAD;break;}//#endif |
|
|
//Tracev((stderr, "inflate: table sizes ok\n")); |
|
|
state.have=0;state.mode=LENLENS;/* falls through */case LENLENS:while(state.have<state.ncode){//=== NEEDBITS(3); |
|
|
while(bits<3){if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;}//===// |
|
|
state.lens[order[state.have++]]=hold&0x07;//BITS(3); |
|
|
//--- DROPBITS(3) ---// |
|
|
hold>>>=3;bits-=3;//---// |
|
|
}while(state.have<19){state.lens[order[state.have++]]=0;}// We have separate tables & no pointers. 2 commented lines below not needed. |
|
|
//state.next = state.codes; |
|
|
//state.lencode = state.next; |
|
|
// Switch to use dynamic table |
|
|
state.lencode=state.lendyn;state.lenbits=7;opts={bits:state.lenbits};ret=inflate_table(CODES,state.lens,0,19,state.lencode,0,state.work,opts);state.lenbits=opts.bits;if(ret){strm.msg='invalid code lengths set';state.mode=BAD;break;}//Tracev((stderr, "inflate: code lengths ok\n")); |
|
|
state.have=0;state.mode=CODELENS;/* falls through */case CODELENS:while(state.have<state.nlen+state.ndist){for(;;){here=state.lencode[hold&(1<<state.lenbits)-1];/*BITS(state.lenbits)*/here_bits=here>>>24;here_op=here>>>16&0xff;here_val=here&0xffff;if(here_bits<=bits){break;}//--- PULLBYTE() ---// |
|
|
if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;//---// |
|
|
}if(here_val<16){//--- DROPBITS(here.bits) ---// |
|
|
hold>>>=here_bits;bits-=here_bits;//---// |
|
|
state.lens[state.have++]=here_val;}else{if(here_val===16){//=== NEEDBITS(here.bits + 2); |
|
|
n=here_bits+2;while(bits<n){if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;}//===// |
|
|
//--- DROPBITS(here.bits) ---// |
|
|
hold>>>=here_bits;bits-=here_bits;//---// |
|
|
if(state.have===0){strm.msg='invalid bit length repeat';state.mode=BAD;break;}len=state.lens[state.have-1];copy=3+(hold&0x03);//BITS(2); |
|
|
//--- DROPBITS(2) ---// |
|
|
hold>>>=2;bits-=2;//---// |
|
|
}else if(here_val===17){//=== NEEDBITS(here.bits + 3); |
|
|
n=here_bits+3;while(bits<n){if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;}//===// |
|
|
//--- DROPBITS(here.bits) ---// |
|
|
hold>>>=here_bits;bits-=here_bits;//---// |
|
|
len=0;copy=3+(hold&0x07);//BITS(3); |
|
|
//--- DROPBITS(3) ---// |
|
|
hold>>>=3;bits-=3;//---// |
|
|
}else{//=== NEEDBITS(here.bits + 7); |
|
|
n=here_bits+7;while(bits<n){if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;}//===// |
|
|
//--- DROPBITS(here.bits) ---// |
|
|
hold>>>=here_bits;bits-=here_bits;//---// |
|
|
len=0;copy=11+(hold&0x7f);//BITS(7); |
|
|
//--- DROPBITS(7) ---// |
|
|
hold>>>=7;bits-=7;//---// |
|
|
}if(state.have+copy>state.nlen+state.ndist){strm.msg='invalid bit length repeat';state.mode=BAD;break;}while(copy--){state.lens[state.have++]=len;}}}/* handle error breaks in while */if(state.mode===BAD){break;}/* check for end-of-block code (better have one) */if(state.lens[256]===0){strm.msg='invalid code -- missing end-of-block';state.mode=BAD;break;}/* build code tables -- note: do not change the lenbits or distbits |
|
|
values here (9 and 6) without reading the comments in inftrees.h |
|
|
concerning the ENOUGH constants, which depend on those values */state.lenbits=9;opts={bits:state.lenbits};ret=inflate_table(LENS,state.lens,0,state.nlen,state.lencode,0,state.work,opts);// We have separate tables & no pointers. 2 commented lines below not needed. |
|
|
// state.next_index = opts.table_index; |
|
|
state.lenbits=opts.bits;// state.lencode = state.next; |
|
|
if(ret){strm.msg='invalid literal/lengths set';state.mode=BAD;break;}state.distbits=6;//state.distcode.copy(state.codes); |
|
|
// Switch to use dynamic table |
|
|
state.distcode=state.distdyn;opts={bits:state.distbits};ret=inflate_table(DISTS,state.lens,state.nlen,state.ndist,state.distcode,0,state.work,opts);// We have separate tables & no pointers. 2 commented lines below not needed. |
|
|
// state.next_index = opts.table_index; |
|
|
state.distbits=opts.bits;// state.distcode = state.next; |
|
|
if(ret){strm.msg='invalid distances set';state.mode=BAD;break;}//Tracev((stderr, 'inflate: codes ok\n')); |
|
|
state.mode=LEN_;if(flush===Z_TREES){break inf_leave;}/* falls through */case LEN_:state.mode=LEN;/* falls through */case LEN:if(have>=6&&left>=258){//--- RESTORE() --- |
|
|
strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;//--- |
|
|
inflate_fast(strm,_out);//--- LOAD() --- |
|
|
put=strm.next_out;output=strm.output;left=strm.avail_out;next=strm.next_in;input=strm.input;have=strm.avail_in;hold=state.hold;bits=state.bits;//--- |
|
|
if(state.mode===TYPE){state.back=-1;}break;}state.back=0;for(;;){here=state.lencode[hold&(1<<state.lenbits)-1];/*BITS(state.lenbits)*/here_bits=here>>>24;here_op=here>>>16&0xff;here_val=here&0xffff;if(here_bits<=bits){break;}//--- PULLBYTE() ---// |
|
|
if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;//---// |
|
|
}if(here_op&&(here_op&0xf0)===0){last_bits=here_bits;last_op=here_op;last_val=here_val;for(;;){here=state.lencode[last_val+((hold&(1<<last_bits+last_op)-1)>>/*BITS(last.bits + last.op)*/last_bits)];here_bits=here>>>24;here_op=here>>>16&0xff;here_val=here&0xffff;if(last_bits+here_bits<=bits){break;}//--- PULLBYTE() ---// |
|
|
if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;//---// |
|
|
}//--- DROPBITS(last.bits) ---// |
|
|
hold>>>=last_bits;bits-=last_bits;//---// |
|
|
state.back+=last_bits;}//--- DROPBITS(here.bits) ---// |
|
|
hold>>>=here_bits;bits-=here_bits;//---// |
|
|
state.back+=here_bits;state.length=here_val;if(here_op===0){//Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? |
|
|
// "inflate: literal '%c'\n" : |
|
|
// "inflate: literal 0x%02x\n", here.val)); |
|
|
state.mode=LIT;break;}if(here_op&32){//Tracevv((stderr, "inflate: end of block\n")); |
|
|
state.back=-1;state.mode=TYPE;break;}if(here_op&64){strm.msg='invalid literal/length code';state.mode=BAD;break;}state.extra=here_op&15;state.mode=LENEXT;/* falls through */case LENEXT:if(state.extra){//=== NEEDBITS(state.extra); |
|
|
n=state.extra;while(bits<n){if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;}//===// |
|
|
state.length+=hold&(1<<state.extra)-1/*BITS(state.extra)*/;//--- DROPBITS(state.extra) ---// |
|
|
hold>>>=state.extra;bits-=state.extra;//---// |
|
|
state.back+=state.extra;}//Tracevv((stderr, "inflate: length %u\n", state.length)); |
|
|
state.was=state.length;state.mode=DIST;/* falls through */case DIST:for(;;){here=state.distcode[hold&(1<<state.distbits)-1];/*BITS(state.distbits)*/here_bits=here>>>24;here_op=here>>>16&0xff;here_val=here&0xffff;if(here_bits<=bits){break;}//--- PULLBYTE() ---// |
|
|
if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;//---// |
|
|
}if((here_op&0xf0)===0){last_bits=here_bits;last_op=here_op;last_val=here_val;for(;;){here=state.distcode[last_val+((hold&(1<<last_bits+last_op)-1)>>/*BITS(last.bits + last.op)*/last_bits)];here_bits=here>>>24;here_op=here>>>16&0xff;here_val=here&0xffff;if(last_bits+here_bits<=bits){break;}//--- PULLBYTE() ---// |
|
|
if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;//---// |
|
|
}//--- DROPBITS(last.bits) ---// |
|
|
hold>>>=last_bits;bits-=last_bits;//---// |
|
|
state.back+=last_bits;}//--- DROPBITS(here.bits) ---// |
|
|
hold>>>=here_bits;bits-=here_bits;//---// |
|
|
state.back+=here_bits;if(here_op&64){strm.msg='invalid distance code';state.mode=BAD;break;}state.offset=here_val;state.extra=here_op&15;state.mode=DISTEXT;/* falls through */case DISTEXT:if(state.extra){//=== NEEDBITS(state.extra); |
|
|
n=state.extra;while(bits<n){if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;}//===// |
|
|
state.offset+=hold&(1<<state.extra)-1/*BITS(state.extra)*/;//--- DROPBITS(state.extra) ---// |
|
|
hold>>>=state.extra;bits-=state.extra;//---// |
|
|
state.back+=state.extra;}//#ifdef INFLATE_STRICT |
|
|
if(state.offset>state.dmax){strm.msg='invalid distance too far back';state.mode=BAD;break;}//#endif |
|
|
//Tracevv((stderr, "inflate: distance %u\n", state.offset)); |
|
|
state.mode=MATCH;/* falls through */case MATCH:if(left===0){break inf_leave;}copy=_out-left;if(state.offset>copy){/* copy from window */copy=state.offset-copy;if(copy>state.whave){if(state.sane){strm.msg='invalid distance too far back';state.mode=BAD;break;}// (!) This block is disabled in zlib defaults, |
|
|
// don't enable it for binary compatibility |
|
|
//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR |
|
|
// Trace((stderr, "inflate.c too far\n")); |
|
|
// copy -= state.whave; |
|
|
// if (copy > state.length) { copy = state.length; } |
|
|
// if (copy > left) { copy = left; } |
|
|
// left -= copy; |
|
|
// state.length -= copy; |
|
|
// do { |
|
|
// output[put++] = 0; |
|
|
// } while (--copy); |
|
|
// if (state.length === 0) { state.mode = LEN; } |
|
|
// break; |
|
|
//#endif |
|
|
}if(copy>state.wnext){copy-=state.wnext;from=state.wsize-copy;}else{from=state.wnext-copy;}if(copy>state.length){copy=state.length;}from_source=state.window;}else{/* copy from output */from_source=output;from=put-state.offset;copy=state.length;}if(copy>left){copy=left;}left-=copy;state.length-=copy;do{output[put++]=from_source[from++];}while(--copy);if(state.length===0){state.mode=LEN;}break;case LIT:if(left===0){break inf_leave;}output[put++]=state.length;left--;state.mode=LEN;break;case CHECK:if(state.wrap){//=== NEEDBITS(32); |
|
|
while(bits<32){if(have===0){break inf_leave;}have--;// Use '|' instead of '+' to make sure that result is signed |
|
|
hold|=input[next++]<<bits;bits+=8;}//===// |
|
|
_out-=left;strm.total_out+=_out;state.total+=_out;if(_out){strm.adler=state.check=/*UPDATE(state.check, put - _out, _out);*/state.flags?crc32(state.check,output,_out,put-_out):adler32(state.check,output,_out,put-_out);}_out=left;// NB: crc32 stored as signed 32-bit int, zswap32 returns signed too |
|
|
if((state.flags?hold:zswap32(hold))!==state.check){strm.msg='incorrect data check';state.mode=BAD;break;}//=== INITBITS(); |
|
|
hold=0;bits=0;//===// |
|
|
//Tracev((stderr, "inflate: check matches trailer\n")); |
|
|
}state.mode=LENGTH;/* falls through */case LENGTH:if(state.wrap&&state.flags){//=== NEEDBITS(32); |
|
|
while(bits<32){if(have===0){break inf_leave;}have--;hold+=input[next++]<<bits;bits+=8;}//===// |
|
|
if(hold!==(state.total&0xffffffff)){strm.msg='incorrect length check';state.mode=BAD;break;}//=== INITBITS(); |
|
|
hold=0;bits=0;//===// |
|
|
//Tracev((stderr, "inflate: length matches trailer\n")); |
|
|
}state.mode=DONE;/* falls through */case DONE:ret=Z_STREAM_END;break inf_leave;case BAD:ret=Z_DATA_ERROR;break inf_leave;case MEM:return Z_MEM_ERROR;case SYNC:/* falls through */default:return Z_STREAM_ERROR;}}// inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave" |
|
|
/* |
|
|
Return from inflate(), updating the total counts and the check value. |
|
|
If there was no progress during the inflate() call, return a buffer |
|
|
error. Call updatewindow() to create and/or update the window state. |
|
|
Note: a memory error from inflate() is non-recoverable. |
|
|
*/ //--- RESTORE() --- |
|
|
strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;//--- |
|
|
if(state.wsize||_out!==strm.avail_out&&state.mode<BAD&&(state.mode<CHECK||flush!==Z_FINISH)){if(updatewindow(strm,strm.output,strm.next_out,_out-strm.avail_out)){state.mode=MEM;return Z_MEM_ERROR;}}_in-=strm.avail_in;_out-=strm.avail_out;strm.total_in+=_in;strm.total_out+=_out;state.total+=_out;if(state.wrap&&_out){strm.adler=state.check=/*UPDATE(state.check, strm.next_out - _out, _out);*/state.flags?crc32(state.check,output,_out,strm.next_out-_out):adler32(state.check,output,_out,strm.next_out-_out);}strm.data_type=state.bits+(state.last?64:0)+(state.mode===TYPE?128:0)+(state.mode===LEN_||state.mode===COPY_?256:0);if((_in===0&&_out===0||flush===Z_FINISH)&&ret===Z_OK){ret=Z_BUF_ERROR;}return ret;}function inflateEnd(strm){if(!strm||!strm.state/*|| strm->zfree == (free_func)0*/){return Z_STREAM_ERROR;}var state=strm.state;if(state.window){state.window=null;}strm.state=null;return Z_OK;}function inflateGetHeader(strm,head){var state;/* check state */if(!strm||!strm.state){return Z_STREAM_ERROR;}state=strm.state;if((state.wrap&2)===0){return Z_STREAM_ERROR;}/* save header structure */state.head=head;head.done=false;return Z_OK;}function inflateSetDictionary(strm,dictionary){var dictLength=dictionary.length;var state;var dictid;var ret;/* check state */if(!strm/* == Z_NULL */||!strm.state/* == Z_NULL */){return Z_STREAM_ERROR;}state=strm.state;if(state.wrap!==0&&state.mode!==DICT){return Z_STREAM_ERROR;}/* check for correct dictionary identifier */if(state.mode===DICT){dictid=1;/* adler32(0, null, 0)*/ /* dictid = adler32(dictid, dictionary, dictLength); */dictid=adler32(dictid,dictionary,dictLength,0);if(dictid!==state.check){return Z_DATA_ERROR;}}/* copy dictionary to window using updatewindow(), which will amend the |
|
|
existing dictionary if appropriate */ret=updatewindow(strm,dictionary,dictLength,dictLength);if(ret){state.mode=MEM;return Z_MEM_ERROR;}state.havedict=1;// Tracev((stderr, "inflate: dictionary set\n")); |
|
|
return Z_OK;}exports.inflateReset=inflateReset;exports.inflateReset2=inflateReset2;exports.inflateResetKeep=inflateResetKeep;exports.inflateInit=inflateInit;exports.inflateInit2=inflateInit2;exports.inflate=inflate;exports.inflateEnd=inflateEnd;exports.inflateGetHeader=inflateGetHeader;exports.inflateSetDictionary=inflateSetDictionary;exports.inflateInfo='pako inflate (from Nodeca project)';/* Not implemented |
|
|
exports.inflateCopy = inflateCopy; |
|
|
exports.inflateGetDictionary = inflateGetDictionary; |
|
|
exports.inflateMark = inflateMark; |
|
|
exports.inflatePrime = inflatePrime; |
|
|
exports.inflateSync = inflateSync; |
|
|
exports.inflateSyncPoint = inflateSyncPoint; |
|
|
exports.inflateUndermine = inflateUndermine; |
|
|
*/},{"../utils/common":419,"./adler32":421,"./crc32":423,"./inffast":426,"./inftrees":428}],428:[function(require,module,exports){'use strict';// (C) 1995-2013 Jean-loup Gailly and Mark Adler |
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin |
|
|
// |
|
|
// This software is provided 'as-is', without any express or implied |
|
|
// warranty. In no event will the authors be held liable for any damages |
|
|
// arising from the use of this software. |
|
|
// |
|
|
// Permission is granted to anyone to use this software for any purpose, |
|
|
// including commercial applications, and to alter it and redistribute it |
|
|
// freely, subject to the following restrictions: |
|
|
// |
|
|
// 1. The origin of this software must not be misrepresented; you must not |
|
|
// claim that you wrote the original software. If you use this software |
|
|
// in a product, an acknowledgment in the product documentation would be |
|
|
// appreciated but is not required. |
|
|
// 2. Altered source versions must be plainly marked as such, and must not be |
|
|
// misrepresented as being the original software. |
|
|
// 3. This notice may not be removed or altered from any source distribution. |
|
|
var utils=require('../utils/common');var MAXBITS=15;var ENOUGH_LENS=852;var ENOUGH_DISTS=592;//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); |
|
|
var CODES=0;var LENS=1;var DISTS=2;var lbase=[/* Length codes 257..285 base */3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0];var lext=[/* Length codes 257..285 extra */16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78];var dbase=[/* Distance codes 0..29 base */1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0];var dext=[/* Distance codes 0..29 extra */16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];module.exports=function inflate_table(type,lens,lens_index,codes,table,table_index,work,opts){var bits=opts.bits;//here = opts.here; /* table entry for duplication */ |
|
|
var len=0;/* a code's length in bits */var sym=0;/* index of code symbols */var min=0,max=0;/* minimum and maximum code lengths */var root=0;/* number of index bits for root table */var curr=0;/* number of index bits for current table */var drop=0;/* code bits to drop for sub-table */var left=0;/* number of prefix codes available */var used=0;/* code entries in table used */var huff=0;/* Huffman code */var incr;/* for incrementing code, index */var fill;/* index for replicating entries */var low;/* low bits for current root entry */var mask;/* mask for low root bits */var next;/* next available space in table */var base=null;/* base value table to use */var base_index=0;// var shoextra; /* extra bits table to use */ |
|
|
var end;/* use base and extra for symbol > end */var count=new utils.Buf16(MAXBITS+1);//[MAXBITS+1]; /* number of codes of each length */ |
|
|
var offs=new utils.Buf16(MAXBITS+1);//[MAXBITS+1]; /* offsets in table for each length */ |
|
|
var extra=null;var extra_index=0;var here_bits,here_op,here_val;/* |
|
|
Process a set of code lengths to create a canonical Huffman code. The |
|
|
code lengths are lens[0..codes-1]. Each length corresponds to the |
|
|
symbols 0..codes-1. The Huffman code is generated by first sorting the |
|
|
symbols by length from short to long, and retaining the symbol order |
|
|
for codes with equal lengths. Then the code starts with all zero bits |
|
|
for the first code of the shortest length, and the codes are integer |
|
|
increments for the same length, and zeros are appended as the length |
|
|
increases. For the deflate format, these bits are stored backwards |
|
|
from their more natural integer increment ordering, and so when the |
|
|
decoding tables are built in the large loop below, the integer codes |
|
|
are incremented backwards. |
|
|
|
|
|
This routine assumes, but does not check, that all of the entries in |
|
|
lens[] are in the range 0..MAXBITS. The caller must assure this. |
|
|
1..MAXBITS is interpreted as that code length. zero means that that |
|
|
symbol does not occur in this code. |
|
|
|
|
|
The codes are sorted by computing a count of codes for each length, |
|
|
creating from that a table of starting indices for each length in the |
|
|
sorted table, and then entering the symbols in order in the sorted |
|
|
table. The sorted table is work[], with that space being provided by |
|
|
the caller. |
|
|
|
|
|
The length counts are used for other purposes as well, i.e. finding |
|
|
the minimum and maximum length codes, determining if there are any |
|
|
codes at all, checking for a valid set of lengths, and looking ahead |
|
|
at length counts to determine sub-table sizes when building the |
|
|
decoding tables. |
|
|
*/ /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */for(len=0;len<=MAXBITS;len++){count[len]=0;}for(sym=0;sym<codes;sym++){count[lens[lens_index+sym]]++;}/* bound code lengths, force root to be within code lengths */root=bits;for(max=MAXBITS;max>=1;max--){if(count[max]!==0){break;}}if(root>max){root=max;}if(max===0){/* no symbols to code at all */ //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */ |
|
|
//table.bits[opts.table_index] = 1; //here.bits = (var char)1; |
|
|
//table.val[opts.table_index++] = 0; //here.val = (var short)0; |
|
|
table[table_index++]=1<<24|64<<16|0;//table.op[opts.table_index] = 64; |
|
|
//table.bits[opts.table_index] = 1; |
|
|
//table.val[opts.table_index++] = 0; |
|
|
table[table_index++]=1<<24|64<<16|0;opts.bits=1;return 0;/* no symbols, but wait for decoding to report error */}for(min=1;min<max;min++){if(count[min]!==0){break;}}if(root<min){root=min;}/* check for an over-subscribed or incomplete set of lengths */left=1;for(len=1;len<=MAXBITS;len++){left<<=1;left-=count[len];if(left<0){return-1;}/* over-subscribed */}if(left>0&&(type===CODES||max!==1)){return-1;/* incomplete set */}/* generate offsets into symbol table for each length for sorting */offs[1]=0;for(len=1;len<MAXBITS;len++){offs[len+1]=offs[len]+count[len];}/* sort symbols by length, by symbol order within each length */for(sym=0;sym<codes;sym++){if(lens[lens_index+sym]!==0){work[offs[lens[lens_index+sym]]++]=sym;}}/* |
|
|
Create and fill in decoding tables. In this loop, the table being |
|
|
filled is at next and has curr index bits. The code being used is huff |
|
|
with length len. That code is converted to an index by dropping drop |
|
|
bits off of the bottom. For codes where len is less than drop + curr, |
|
|
those top drop + curr - len bits are incremented through all values to |
|
|
fill the table with replicated entries. |
|
|
|
|
|
root is the number of index bits for the root table. When len exceeds |
|
|
root, sub-tables are created pointed to by the root entry with an index |
|
|
of the low root bits of huff. This is saved in low to check for when a |
|
|
new sub-table should be started. drop is zero when the root table is |
|
|
being filled, and drop is root when sub-tables are being filled. |
|
|
|
|
|
When a new sub-table is needed, it is necessary to look ahead in the |
|
|
code lengths to determine what size sub-table is needed. The length |
|
|
counts are used for this, and so count[] is decremented as codes are |
|
|
entered in the tables. |
|
|
|
|
|
used keeps track of how many table entries have been allocated from the |
|
|
provided *table space. It is checked for LENS and DIST tables against |
|
|
the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in |
|
|
the initial root table size constants. See the comments in inftrees.h |
|
|
for more information. |
|
|
|
|
|
sym increments through all symbols, and the loop terminates when |
|
|
all codes of length max, i.e. all codes, have been processed. This |
|
|
routine permits incomplete codes, so another loop after this one fills |
|
|
in the rest of the decoding tables with invalid code markers. |
|
|
*/ /* set up for code type */ // poor man optimization - use if-else instead of switch, |
|
|
// to avoid deopts in old v8 |
|
|
if(type===CODES){base=extra=work;/* dummy value--not used */end=19;}else if(type===LENS){base=lbase;base_index-=257;extra=lext;extra_index-=257;end=256;}else{/* DISTS */base=dbase;extra=dext;end=-1;}/* initialize opts for loop */huff=0;/* starting code */sym=0;/* starting code symbol */len=min;/* starting code length */next=table_index;/* current table to fill in */curr=root;/* current table index bits */drop=0;/* current bits to drop from code for index */low=-1;/* trigger new sub-table when len > root */used=1<<root;/* use root table entries */mask=used-1;/* mask for comparing low */ /* check available table space */if(type===LENS&&used>ENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS){return 1;}/* process all codes and make table entries */for(;;){/* create table entry */here_bits=len-drop;if(work[sym]<end){here_op=0;here_val=work[sym];}else if(work[sym]>end){here_op=extra[extra_index+work[sym]];here_val=base[base_index+work[sym]];}else{here_op=32+64;/* end of block */here_val=0;}/* replicate for those indices with low len bits equal to huff */incr=1<<len-drop;fill=1<<curr;min=fill;/* save offset to next table */do{fill-=incr;table[next+(huff>>drop)+fill]=here_bits<<24|here_op<<16|here_val|0;}while(fill!==0);/* backwards increment the len-bit code huff */incr=1<<len-1;while(huff&incr){incr>>=1;}if(incr!==0){huff&=incr-1;huff+=incr;}else{huff=0;}/* go to next symbol, update count, len */sym++;if(--count[len]===0){if(len===max){break;}len=lens[lens_index+work[sym]];}/* create new sub-table if needed */if(len>root&&(huff&mask)!==low){/* if first time, transition to sub-tables */if(drop===0){drop=root;}/* increment past last table */next+=min;/* here min is 1 << curr */ /* determine length of next table */curr=len-drop;left=1<<curr;while(curr+drop<max){left-=count[curr+drop];if(left<=0){break;}curr++;left<<=1;}/* check for enough space */used+=1<<curr;if(type===LENS&&used>ENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS){return 1;}/* point entry in root table to sub-table */low=huff&mask;/*table.op[low] = curr; |
|
|
table.bits[low] = root; |
|
|
table.val[low] = next - opts.table_index;*/table[low]=root<<24|curr<<16|next-table_index|0;}}/* fill in remaining table entry if code is incomplete (guaranteed to have |
|
|
at most one remaining entry, since if the code is incomplete, the |
|
|
maximum code length that was allowed to get this far is one bit) */if(huff!==0){//table.op[next + huff] = 64; /* invalid code marker */ |
|
|
//table.bits[next + huff] = len - drop; |
|
|
//table.val[next + huff] = 0; |
|
|
table[next+huff]=len-drop<<24|64<<16|0;}/* set return parameters */ //opts.table_index += used; |
|
|
opts.bits=root;return 0;};},{"../utils/common":419}],429:[function(require,module,exports){'use strict';// (C) 1995-2013 Jean-loup Gailly and Mark Adler |
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin |
|
|
// |
|
|
// This software is provided 'as-is', without any express or implied |
|
|
// warranty. In no event will the authors be held liable for any damages |
|
|
// arising from the use of this software. |
|
|
// |
|
|
// Permission is granted to anyone to use this software for any purpose, |
|
|
// including commercial applications, and to alter it and redistribute it |
|
|
// freely, subject to the following restrictions: |
|
|
// |
|
|
// 1. The origin of this software must not be misrepresented; you must not |
|
|
// claim that you wrote the original software. If you use this software |
|
|
// in a product, an acknowledgment in the product documentation would be |
|
|
// appreciated but is not required. |
|
|
// 2. Altered source versions must be plainly marked as such, and must not be |
|
|
// misrepresented as being the original software. |
|
|
// 3. This notice may not be removed or altered from any source distribution. |
|
|
module.exports={2:'need dictionary',/* Z_NEED_DICT 2 */1:'stream end',/* Z_STREAM_END 1 */0:'',/* Z_OK 0 */'-1':'file error',/* Z_ERRNO (-1) */'-2':'stream error',/* Z_STREAM_ERROR (-2) */'-3':'data error',/* Z_DATA_ERROR (-3) */'-4':'insufficient memory',/* Z_MEM_ERROR (-4) */'-5':'buffer error',/* Z_BUF_ERROR (-5) */'-6':'incompatible version'/* Z_VERSION_ERROR (-6) */};},{}],430:[function(require,module,exports){'use strict';// (C) 1995-2013 Jean-loup Gailly and Mark Adler |
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin |
|
|
// |
|
|
// This software is provided 'as-is', without any express or implied |
|
|
// warranty. In no event will the authors be held liable for any damages |
|
|
// arising from the use of this software. |
|
|
// |
|
|
// Permission is granted to anyone to use this software for any purpose, |
|
|
// including commercial applications, and to alter it and redistribute it |
|
|
// freely, subject to the following restrictions: |
|
|
// |
|
|
// 1. The origin of this software must not be misrepresented; you must not |
|
|
// claim that you wrote the original software. If you use this software |
|
|
// in a product, an acknowledgment in the product documentation would be |
|
|
// appreciated but is not required. |
|
|
// 2. Altered source versions must be plainly marked as such, and must not be |
|
|
// misrepresented as being the original software. |
|
|
// 3. This notice may not be removed or altered from any source distribution. |
|
|
/* eslint-disable space-unary-ops */var utils=require('../utils/common');/* Public constants ==========================================================*/ /* ===========================================================================*/ //var Z_FILTERED = 1; |
|
|
//var Z_HUFFMAN_ONLY = 2; |
|
|
//var Z_RLE = 3; |
|
|
var Z_FIXED=4;//var Z_DEFAULT_STRATEGY = 0; |
|
|
/* Possible values of the data_type field (though see inflate()) */var Z_BINARY=0;var Z_TEXT=1;//var Z_ASCII = 1; // = Z_TEXT |
|
|
var Z_UNKNOWN=2;/*============================================================================*/function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0;}}// From zutil.h |
|
|
var STORED_BLOCK=0;var STATIC_TREES=1;var DYN_TREES=2;/* The three kinds of block type */var MIN_MATCH=3;var MAX_MATCH=258;/* The minimum and maximum match lengths */ // From deflate.h |
|
|
/* =========================================================================== |
|
|
* Internal compression state. |
|
|
*/var LENGTH_CODES=29;/* number of length codes, not counting the special END_BLOCK code */var LITERALS=256;/* number of literal bytes 0..255 */var L_CODES=LITERALS+1+LENGTH_CODES;/* number of Literal or Length codes, including the END_BLOCK code */var D_CODES=30;/* number of distance codes */var BL_CODES=19;/* number of codes used to transfer the bit lengths */var HEAP_SIZE=2*L_CODES+1;/* maximum heap size */var MAX_BITS=15;/* All codes must not exceed MAX_BITS bits */var Buf_size=16;/* size of bit buffer in bi_buf */ /* =========================================================================== |
|
|
* Constants |
|
|
*/var MAX_BL_BITS=7;/* Bit length codes must not exceed MAX_BL_BITS bits */var END_BLOCK=256;/* end of block literal code */var REP_3_6=16;/* repeat previous bit length 3-6 times (2 bits of repeat count) */var REPZ_3_10=17;/* repeat a zero length 3-10 times (3 bits of repeat count) */var REPZ_11_138=18;/* repeat a zero length 11-138 times (7 bits of repeat count) */ /* eslint-disable comma-spacing,array-bracket-spacing */var extra_lbits=/* extra bits for each length code */[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];var extra_dbits=/* extra bits for each distance code */[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];var extra_blbits=/* extra bits for each bit length code */[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];var bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];/* eslint-enable comma-spacing,array-bracket-spacing */ /* The lengths of the bit length codes are sent in order of decreasing |
|
|
* probability, to avoid transmitting the lengths for unused bit length codes. |
|
|
*/ /* =========================================================================== |
|
|
* Local data. These are initialized only once. |
|
|
*/ // We pre-fill arrays with 0 to avoid uninitialized gaps |
|
|
var DIST_CODE_LEN=512;/* see definition of array dist_code below */ // !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1 |
|
|
var static_ltree=new Array((L_CODES+2)*2);zero(static_ltree);/* The static literal tree. Since the bit lengths are imposed, there is no |
|
|
* need for the L_CODES extra codes used during heap construction. However |
|
|
* The codes 286 and 287 are needed to build a canonical tree (see _tr_init |
|
|
* below). |
|
|
*/var static_dtree=new Array(D_CODES*2);zero(static_dtree);/* The static distance tree. (Actually a trivial tree since all codes use |
|
|
* 5 bits.) |
|
|
*/var _dist_code=new Array(DIST_CODE_LEN);zero(_dist_code);/* Distance codes. The first 256 values correspond to the distances |
|
|
* 3 .. 258, the last 256 values correspond to the top 8 bits of |
|
|
* the 15 bit distances. |
|
|
*/var _length_code=new Array(MAX_MATCH-MIN_MATCH+1);zero(_length_code);/* length code for each normalized match length (0 == MIN_MATCH) */var base_length=new Array(LENGTH_CODES);zero(base_length);/* First normalized length for each code (0 = MIN_MATCH) */var base_dist=new Array(D_CODES);zero(base_dist);/* First normalized distance for each code (0 = distance of 1) */function StaticTreeDesc(static_tree,extra_bits,extra_base,elems,max_length){this.static_tree=static_tree;/* static tree or NULL */this.extra_bits=extra_bits;/* extra bits for each code or NULL */this.extra_base=extra_base;/* base index for extra_bits */this.elems=elems;/* max number of elements in the tree */this.max_length=max_length;/* max bit length for the codes */ // show if `static_tree` has data or dummy - needed for monomorphic objects |
|
|
this.has_stree=static_tree&&static_tree.length;}var static_l_desc;var static_d_desc;var static_bl_desc;function TreeDesc(dyn_tree,stat_desc){this.dyn_tree=dyn_tree;/* the dynamic tree */this.max_code=0;/* largest code with non zero frequency */this.stat_desc=stat_desc;/* the corresponding static tree */}function d_code(dist){return dist<256?_dist_code[dist]:_dist_code[256+(dist>>>7)];}/* =========================================================================== |
|
|
* Output a short LSB first on the stream. |
|
|
* IN assertion: there is enough room in pendingBuf. |
|
|
*/function put_short(s,w){// put_byte(s, (uch)((w) & 0xff)); |
|
|
// put_byte(s, (uch)((ush)(w) >> 8)); |
|
|
s.pending_buf[s.pending++]=w&0xff;s.pending_buf[s.pending++]=w>>>8&0xff;}/* =========================================================================== |
|
|
* Send a value on a given number of bits. |
|
|
* IN assertion: length <= 16 and value fits in length bits. |
|
|
*/function send_bits(s,value,length){if(s.bi_valid>Buf_size-length){s.bi_buf|=value<<s.bi_valid&0xffff;put_short(s,s.bi_buf);s.bi_buf=value>>Buf_size-s.bi_valid;s.bi_valid+=length-Buf_size;}else{s.bi_buf|=value<<s.bi_valid&0xffff;s.bi_valid+=length;}}function send_code(s,c,tree){send_bits(s,tree[c*2]/*.Code*/,tree[c*2+1]/*.Len*/);}/* =========================================================================== |
|
|
* Reverse the first len bits of a code, using straightforward code (a faster |
|
|
* method would use a table) |
|
|
* IN assertion: 1 <= len <= 15 |
|
|
*/function bi_reverse(code,len){var res=0;do{res|=code&1;code>>>=1;res<<=1;}while(--len>0);return res>>>1;}/* =========================================================================== |
|
|
* Flush the bit buffer, keeping at most 7 bits in it. |
|
|
*/function bi_flush(s){if(s.bi_valid===16){put_short(s,s.bi_buf);s.bi_buf=0;s.bi_valid=0;}else if(s.bi_valid>=8){s.pending_buf[s.pending++]=s.bi_buf&0xff;s.bi_buf>>=8;s.bi_valid-=8;}}/* =========================================================================== |
|
|
* Compute the optimal bit lengths for a tree and update the total bit length |
|
|
* for the current block. |
|
|
* IN assertion: the fields freq and dad are set, heap[heap_max] and |
|
|
* above are the tree nodes sorted by increasing frequency. |
|
|
* OUT assertions: the field len is set to the optimal bit length, the |
|
|
* array bl_count contains the frequencies for each bit length. |
|
|
* The length opt_len is updated; static_len is also updated if stree is |
|
|
* not null. |
|
|
*/function gen_bitlen(s,desc)// deflate_state *s; |
|
|
// tree_desc *desc; /* the tree descriptor */ |
|
|
{var tree=desc.dyn_tree;var max_code=desc.max_code;var stree=desc.stat_desc.static_tree;var has_stree=desc.stat_desc.has_stree;var extra=desc.stat_desc.extra_bits;var base=desc.stat_desc.extra_base;var max_length=desc.stat_desc.max_length;var h;/* heap index */var n,m;/* iterate over the tree elements */var bits;/* bit length */var xbits;/* extra bits */var f;/* frequency */var overflow=0;/* number of elements with bit length too large */for(bits=0;bits<=MAX_BITS;bits++){s.bl_count[bits]=0;}/* In a first pass, compute the optimal bit lengths (which may |
|
|
* overflow in the case of the bit length tree). |
|
|
*/tree[s.heap[s.heap_max]*2+1]/*.Len*/=0;/* root of the heap */for(h=s.heap_max+1;h<HEAP_SIZE;h++){n=s.heap[h];bits=tree[tree[n*2+1]/*.Dad*/*2+1]/*.Len*/+1;if(bits>max_length){bits=max_length;overflow++;}tree[n*2+1]/*.Len*/=bits;/* We overwrite tree[n].Dad which is no longer needed */if(n>max_code){continue;}/* not a leaf node */s.bl_count[bits]++;xbits=0;if(n>=base){xbits=extra[n-base];}f=tree[n*2]/*.Freq*/;s.opt_len+=f*(bits+xbits);if(has_stree){s.static_len+=f*(stree[n*2+1]/*.Len*/+xbits);}}if(overflow===0){return;}// Trace((stderr,"\nbit length overflow\n")); |
|
|
/* This happens for example on obj2 and pic of the Calgary corpus */ /* Find the first bit length which could increase: */do{bits=max_length-1;while(s.bl_count[bits]===0){bits--;}s.bl_count[bits]--;/* move one leaf down the tree */s.bl_count[bits+1]+=2;/* move one overflow item as its brother */s.bl_count[max_length]--;/* The brother of the overflow item also moves one step up, |
|
|
* but this does not affect bl_count[max_length] |
|
|
*/overflow-=2;}while(overflow>0);/* Now recompute all bit lengths, scanning in increasing frequency. |
|
|
* h is still equal to HEAP_SIZE. (It is simpler to reconstruct all |
|
|
* lengths instead of fixing only the wrong ones. This idea is taken |
|
|
* from 'ar' written by Haruhiko Okumura.) |
|
|
*/for(bits=max_length;bits!==0;bits--){n=s.bl_count[bits];while(n!==0){m=s.heap[--h];if(m>max_code){continue;}if(tree[m*2+1]/*.Len*/!==bits){// Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); |
|
|
s.opt_len+=(bits-tree[m*2+1]/*.Len*/)*tree[m*2]/*.Freq*/;tree[m*2+1]/*.Len*/=bits;}n--;}}}/* =========================================================================== |
|
|
* Generate the codes for a given tree and bit counts (which need not be |
|
|
* optimal). |
|
|
* IN assertion: the array bl_count contains the bit length statistics for |
|
|
* the given tree and the field len is set for all tree elements. |
|
|
* OUT assertion: the field code is set for all tree elements of non |
|
|
* zero code length. |
|
|
*/function gen_codes(tree,max_code,bl_count)// ct_data *tree; /* the tree to decorate */ |
|
|
// int max_code; /* largest code with non zero frequency */ |
|
|
// ushf *bl_count; /* number of codes at each bit length */ |
|
|
{var next_code=new Array(MAX_BITS+1);/* next code value for each bit length */var code=0;/* running code value */var bits;/* bit index */var n;/* code index */ /* The distribution counts are first used to generate the code values |
|
|
* without bit reversal. |
|
|
*/for(bits=1;bits<=MAX_BITS;bits++){next_code[bits]=code=code+bl_count[bits-1]<<1;}/* Check that the bit counts in bl_count are consistent. The last code |
|
|
* must be all ones. |
|
|
*/ //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1, |
|
|
// "inconsistent bit counts"); |
|
|
//Tracev((stderr,"\ngen_codes: max_code %d ", max_code)); |
|
|
for(n=0;n<=max_code;n++){var len=tree[n*2+1]/*.Len*/;if(len===0){continue;}/* Now reverse the bits */tree[n*2]/*.Code*/=bi_reverse(next_code[len]++,len);//Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ", |
|
|
// n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1)); |
|
|
}}/* =========================================================================== |
|
|
* Initialize the various 'constant' tables. |
|
|
*/function tr_static_init(){var n;/* iterates over tree elements */var bits;/* bit counter */var length;/* length value */var code;/* code value */var dist;/* distance index */var bl_count=new Array(MAX_BITS+1);/* number of codes at each bit length for an optimal tree */ // do check in _tr_init() |
|
|
//if (static_init_done) return; |
|
|
/* For some embedded targets, global variables are not initialized: */ /*#ifdef NO_INIT_GLOBAL_POINTERS |
|
|
static_l_desc.static_tree = static_ltree; |
|
|
static_l_desc.extra_bits = extra_lbits; |
|
|
static_d_desc.static_tree = static_dtree; |
|
|
static_d_desc.extra_bits = extra_dbits; |
|
|
static_bl_desc.extra_bits = extra_blbits; |
|
|
#endif*/ /* Initialize the mapping length (0..255) -> length code (0..28) */length=0;for(code=0;code<LENGTH_CODES-1;code++){base_length[code]=length;for(n=0;n<1<<extra_lbits[code];n++){_length_code[length++]=code;}}//Assert (length == 256, "tr_static_init: length != 256"); |
|
|
/* Note that the length 255 (match length 258) can be represented |
|
|
* in two different ways: code 284 + 5 bits or code 285, so we |
|
|
* overwrite length_code[255] to use the best encoding: |
|
|
*/_length_code[length-1]=code;/* Initialize the mapping dist (0..32K) -> dist code (0..29) */dist=0;for(code=0;code<16;code++){base_dist[code]=dist;for(n=0;n<1<<extra_dbits[code];n++){_dist_code[dist++]=code;}}//Assert (dist == 256, "tr_static_init: dist != 256"); |
|
|
dist>>=7;/* from now on, all distances are divided by 128 */for(;code<D_CODES;code++){base_dist[code]=dist<<7;for(n=0;n<1<<extra_dbits[code]-7;n++){_dist_code[256+dist++]=code;}}//Assert (dist == 256, "tr_static_init: 256+dist != 512"); |
|
|
/* Construct the codes of the static literal tree */for(bits=0;bits<=MAX_BITS;bits++){bl_count[bits]=0;}n=0;while(n<=143){static_ltree[n*2+1]/*.Len*/=8;n++;bl_count[8]++;}while(n<=255){static_ltree[n*2+1]/*.Len*/=9;n++;bl_count[9]++;}while(n<=279){static_ltree[n*2+1]/*.Len*/=7;n++;bl_count[7]++;}while(n<=287){static_ltree[n*2+1]/*.Len*/=8;n++;bl_count[8]++;}/* Codes 286 and 287 do not exist, but we must include them in the |
|
|
* tree construction to get a canonical Huffman tree (longest code |
|
|
* all ones) |
|
|
*/gen_codes(static_ltree,L_CODES+1,bl_count);/* The static distance tree is trivial: */for(n=0;n<D_CODES;n++){static_dtree[n*2+1]/*.Len*/=5;static_dtree[n*2]/*.Code*/=bi_reverse(n,5);}// Now data ready and we can init static trees |
|
|
static_l_desc=new StaticTreeDesc(static_ltree,extra_lbits,LITERALS+1,L_CODES,MAX_BITS);static_d_desc=new StaticTreeDesc(static_dtree,extra_dbits,0,D_CODES,MAX_BITS);static_bl_desc=new StaticTreeDesc(new Array(0),extra_blbits,0,BL_CODES,MAX_BL_BITS);//static_init_done = true; |
|
|
}/* =========================================================================== |
|
|
* Initialize a new block. |
|
|
*/function init_block(s){var n;/* iterates over tree elements */ /* Initialize the trees. */for(n=0;n<L_CODES;n++){s.dyn_ltree[n*2]/*.Freq*/=0;}for(n=0;n<D_CODES;n++){s.dyn_dtree[n*2]/*.Freq*/=0;}for(n=0;n<BL_CODES;n++){s.bl_tree[n*2]/*.Freq*/=0;}s.dyn_ltree[END_BLOCK*2]/*.Freq*/=1;s.opt_len=s.static_len=0;s.last_lit=s.matches=0;}/* =========================================================================== |
|
|
* Flush the bit buffer and align the output on a byte boundary |
|
|
*/function bi_windup(s){if(s.bi_valid>8){put_short(s,s.bi_buf);}else if(s.bi_valid>0){//put_byte(s, (Byte)s->bi_buf); |
|
|
s.pending_buf[s.pending++]=s.bi_buf;}s.bi_buf=0;s.bi_valid=0;}/* =========================================================================== |
|
|
* Copy a stored block, storing first the length and its |
|
|
* one's complement if requested. |
|
|
*/function copy_block(s,buf,len,header)//DeflateState *s; |
|
|
//charf *buf; /* the input data */ |
|
|
//unsigned len; /* its length */ |
|
|
//int header; /* true if block header must be written */ |
|
|
{bi_windup(s);/* align on byte boundary */if(header){put_short(s,len);put_short(s,~len);}// while (len--) { |
|
|
// put_byte(s, *buf++); |
|
|
// } |
|
|
utils.arraySet(s.pending_buf,s.window,buf,len,s.pending);s.pending+=len;}/* =========================================================================== |
|
|
* Compares to subtrees, using the tree depth as tie breaker when |
|
|
* the subtrees have equal frequency. This minimizes the worst case length. |
|
|
*/function smaller(tree,n,m,depth){var _n2=n*2;var _m2=m*2;return tree[_n2]/*.Freq*/<tree[_m2]/*.Freq*/||tree[_n2]/*.Freq*/===tree[_m2]/*.Freq*/&&depth[n]<=depth[m];}/* =========================================================================== |
|
|
* Restore the heap property by moving down the tree starting at node k, |
|
|
* exchanging a node with the smallest of its two sons if necessary, stopping |
|
|
* when the heap property is re-established (each father smaller than its |
|
|
* two sons). |
|
|
*/function pqdownheap(s,tree,k)// deflate_state *s; |
|
|
// ct_data *tree; /* the tree to restore */ |
|
|
// int k; /* node to move down */ |
|
|
{var v=s.heap[k];var j=k<<1;/* left son of k */while(j<=s.heap_len){/* Set j to the smallest of the two sons: */if(j<s.heap_len&&smaller(tree,s.heap[j+1],s.heap[j],s.depth)){j++;}/* Exit if v is smaller than both sons */if(smaller(tree,v,s.heap[j],s.depth)){break;}/* Exchange v with the smallest son */s.heap[k]=s.heap[j];k=j;/* And continue down the tree, setting j to the left son of k */j<<=1;}s.heap[k]=v;}// inlined manually |
|
|
// var SMALLEST = 1; |
|
|
/* =========================================================================== |
|
|
* Send the block data compressed using the given Huffman trees |
|
|
*/function compress_block(s,ltree,dtree)// deflate_state *s; |
|
|
// const ct_data *ltree; /* literal tree */ |
|
|
// const ct_data *dtree; /* distance tree */ |
|
|
{var dist;/* distance of matched string */var lc;/* match length or unmatched char (if dist == 0) */var lx=0;/* running index in l_buf */var code;/* the code to send */var extra;/* number of extra bits to send */if(s.last_lit!==0){do{dist=s.pending_buf[s.d_buf+lx*2]<<8|s.pending_buf[s.d_buf+lx*2+1];lc=s.pending_buf[s.l_buf+lx];lx++;if(dist===0){send_code(s,lc,ltree);/* send a literal byte */ //Tracecv(isgraph(lc), (stderr," '%c' ", lc)); |
|
|
}else{/* Here, lc is the match length - MIN_MATCH */code=_length_code[lc];send_code(s,code+LITERALS+1,ltree);/* send the length code */extra=extra_lbits[code];if(extra!==0){lc-=base_length[code];send_bits(s,lc,extra);/* send the extra length bits */}dist--;/* dist is now the match distance - 1 */code=d_code(dist);//Assert (code < D_CODES, "bad d_code"); |
|
|
send_code(s,code,dtree);/* send the distance code */extra=extra_dbits[code];if(extra!==0){dist-=base_dist[code];send_bits(s,dist,extra);/* send the extra distance bits */}}/* literal or match pair ? */ /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, |
|
|
// "pendingBuf overflow"); |
|
|
}while(lx<s.last_lit);}send_code(s,END_BLOCK,ltree);}/* =========================================================================== |
|
|
* Construct one Huffman tree and assigns the code bit strings and lengths. |
|
|
* Update the total bit length for the current block. |
|
|
* IN assertion: the field freq is set for all tree elements. |
|
|
* OUT assertions: the fields len and code are set to the optimal bit length |
|
|
* and corresponding code. The length opt_len is updated; static_len is |
|
|
* also updated if stree is not null. The field max_code is set. |
|
|
*/function build_tree(s,desc)// deflate_state *s; |
|
|
// tree_desc *desc; /* the tree descriptor */ |
|
|
{var tree=desc.dyn_tree;var stree=desc.stat_desc.static_tree;var has_stree=desc.stat_desc.has_stree;var elems=desc.stat_desc.elems;var n,m;/* iterate over heap elements */var max_code=-1;/* largest code with non zero frequency */var node;/* new node being created */ /* Construct the initial heap, with least frequent element in |
|
|
* heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. |
|
|
* heap[0] is not used. |
|
|
*/s.heap_len=0;s.heap_max=HEAP_SIZE;for(n=0;n<elems;n++){if(tree[n*2]/*.Freq*/!==0){s.heap[++s.heap_len]=max_code=n;s.depth[n]=0;}else{tree[n*2+1]/*.Len*/=0;}}/* The pkzip format requires that at least one distance code exists, |
|
|
* and that at least one bit should be sent even if there is only one |
|
|
* possible code. So to avoid special checks later on we force at least |
|
|
* two codes of non zero frequency. |
|
|
*/while(s.heap_len<2){node=s.heap[++s.heap_len]=max_code<2?++max_code:0;tree[node*2]/*.Freq*/=1;s.depth[node]=0;s.opt_len--;if(has_stree){s.static_len-=stree[node*2+1]/*.Len*/;}/* node is 0 or 1 so it does not have extra bits */}desc.max_code=max_code;/* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, |
|
|
* establish sub-heaps of increasing lengths: |
|
|
*/for(n=s.heap_len>>1/*int /2*/;n>=1;n--){pqdownheap(s,tree,n);}/* Construct the Huffman tree by repeatedly combining the least two |
|
|
* frequent nodes. |
|
|
*/node=elems;/* next internal node of the tree */do{//pqremove(s, tree, n); /* n = node of least frequency */ |
|
|
/*** pqremove ***/n=s.heap[1/*SMALLEST*/];s.heap[1/*SMALLEST*/]=s.heap[s.heap_len--];pqdownheap(s,tree,1/*SMALLEST*/);/***/m=s.heap[1/*SMALLEST*/];/* m = node of next least frequency */s.heap[--s.heap_max]=n;/* keep the nodes sorted by frequency */s.heap[--s.heap_max]=m;/* Create a new node father of n and m */tree[node*2]/*.Freq*/=tree[n*2]/*.Freq*/+tree[m*2]/*.Freq*/;s.depth[node]=(s.depth[n]>=s.depth[m]?s.depth[n]:s.depth[m])+1;tree[n*2+1]/*.Dad*/=tree[m*2+1]/*.Dad*/=node;/* and insert the new node in the heap */s.heap[1/*SMALLEST*/]=node++;pqdownheap(s,tree,1/*SMALLEST*/);}while(s.heap_len>=2);s.heap[--s.heap_max]=s.heap[1/*SMALLEST*/];/* At this point, the fields freq and dad are set. We can now |
|
|
* generate the bit lengths. |
|
|
*/gen_bitlen(s,desc);/* The field len is now set, we can generate the bit codes */gen_codes(tree,max_code,s.bl_count);}/* =========================================================================== |
|
|
* Scan a literal or distance tree to determine the frequencies of the codes |
|
|
* in the bit length tree. |
|
|
*/function scan_tree(s,tree,max_code)// deflate_state *s; |
|
|
// ct_data *tree; /* the tree to be scanned */ |
|
|
// int max_code; /* and its largest code of non zero frequency */ |
|
|
{var n;/* iterates over all tree elements */var prevlen=-1;/* last emitted length */var curlen;/* length of current code */var nextlen=tree[0*2+1]/*.Len*/;/* length of next code */var count=0;/* repeat count of the current code */var max_count=7;/* max repeat count */var min_count=4;/* min repeat count */if(nextlen===0){max_count=138;min_count=3;}tree[(max_code+1)*2+1]/*.Len*/=0xffff;/* guard */for(n=0;n<=max_code;n++){curlen=nextlen;nextlen=tree[(n+1)*2+1]/*.Len*/;if(++count<max_count&&curlen===nextlen){continue;}else if(count<min_count){s.bl_tree[curlen*2]/*.Freq*/+=count;}else if(curlen!==0){if(curlen!==prevlen){s.bl_tree[curlen*2]/*.Freq*/++;}s.bl_tree[REP_3_6*2]/*.Freq*/++;}else if(count<=10){s.bl_tree[REPZ_3_10*2]/*.Freq*/++;}else{s.bl_tree[REPZ_11_138*2]/*.Freq*/++;}count=0;prevlen=curlen;if(nextlen===0){max_count=138;min_count=3;}else if(curlen===nextlen){max_count=6;min_count=3;}else{max_count=7;min_count=4;}}}/* =========================================================================== |
|
|
* Send a literal or distance tree in compressed form, using the codes in |
|
|
* bl_tree. |
|
|
*/function send_tree(s,tree,max_code)// deflate_state *s; |
|
|
// ct_data *tree; /* the tree to be scanned */ |
|
|
// int max_code; /* and its largest code of non zero frequency */ |
|
|
{var n;/* iterates over all tree elements */var prevlen=-1;/* last emitted length */var curlen;/* length of current code */var nextlen=tree[0*2+1]/*.Len*/;/* length of next code */var count=0;/* repeat count of the current code */var max_count=7;/* max repeat count */var min_count=4;/* min repeat count */ /* tree[max_code+1].Len = -1; */ /* guard already set */if(nextlen===0){max_count=138;min_count=3;}for(n=0;n<=max_code;n++){curlen=nextlen;nextlen=tree[(n+1)*2+1]/*.Len*/;if(++count<max_count&&curlen===nextlen){continue;}else if(count<min_count){do{send_code(s,curlen,s.bl_tree);}while(--count!==0);}else if(curlen!==0){if(curlen!==prevlen){send_code(s,curlen,s.bl_tree);count--;}//Assert(count >= 3 && count <= 6, " 3_6?"); |
|
|
send_code(s,REP_3_6,s.bl_tree);send_bits(s,count-3,2);}else if(count<=10){send_code(s,REPZ_3_10,s.bl_tree);send_bits(s,count-3,3);}else{send_code(s,REPZ_11_138,s.bl_tree);send_bits(s,count-11,7);}count=0;prevlen=curlen;if(nextlen===0){max_count=138;min_count=3;}else if(curlen===nextlen){max_count=6;min_count=3;}else{max_count=7;min_count=4;}}}/* =========================================================================== |
|
|
* Construct the Huffman tree for the bit lengths and return the index in |
|
|
* bl_order of the last bit length code to send. |
|
|
*/function build_bl_tree(s){var max_blindex;/* index of last bit length code of non zero freq */ /* Determine the bit length frequencies for literal and distance trees */scan_tree(s,s.dyn_ltree,s.l_desc.max_code);scan_tree(s,s.dyn_dtree,s.d_desc.max_code);/* Build the bit length tree: */build_tree(s,s.bl_desc);/* opt_len now includes the length of the tree representations, except |
|
|
* the lengths of the bit lengths codes and the 5+5+4 bits for the counts. |
|
|
*/ /* Determine the number of bit length codes to send. The pkzip format |
|
|
* requires that at least 4 bit length codes be sent. (appnote.txt says |
|
|
* 3 but the actual value used is 4.) |
|
|
*/for(max_blindex=BL_CODES-1;max_blindex>=3;max_blindex--){if(s.bl_tree[bl_order[max_blindex]*2+1]/*.Len*/!==0){break;}}/* Update opt_len to include the bit length tree and counts */s.opt_len+=3*(max_blindex+1)+5+5+4;//Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", |
|
|
// s->opt_len, s->static_len)); |
|
|
return max_blindex;}/* =========================================================================== |
|
|
* Send the header for a block using dynamic Huffman trees: the counts, the |
|
|
* lengths of the bit length codes, the literal tree and the distance tree. |
|
|
* IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. |
|
|
*/function send_all_trees(s,lcodes,dcodes,blcodes)// deflate_state *s; |
|
|
// int lcodes, dcodes, blcodes; /* number of codes for each tree */ |
|
|
{var rank;/* index in bl_order */ //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); |
|
|
//Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, |
|
|
// "too many codes"); |
|
|
//Tracev((stderr, "\nbl counts: ")); |
|
|
send_bits(s,lcodes-257,5);/* not +255 as stated in appnote.txt */send_bits(s,dcodes-1,5);send_bits(s,blcodes-4,4);/* not -3 as stated in appnote.txt */for(rank=0;rank<blcodes;rank++){//Tracev((stderr, "\nbl code %2d ", bl_order[rank])); |
|
|
send_bits(s,s.bl_tree[bl_order[rank]*2+1]/*.Len*/,3);}//Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); |
|
|
send_tree(s,s.dyn_ltree,lcodes-1);/* literal tree */ //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); |
|
|
send_tree(s,s.dyn_dtree,dcodes-1);/* distance tree */ //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); |
|
|
}/* =========================================================================== |
|
|
* Check if the data type is TEXT or BINARY, using the following algorithm: |
|
|
* - TEXT if the two conditions below are satisfied: |
|
|
* a) There are no non-portable control characters belonging to the |
|
|
* "black list" (0..6, 14..25, 28..31). |
|
|
* b) There is at least one printable character belonging to the |
|
|
* "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). |
|
|
* - BINARY otherwise. |
|
|
* - The following partially-portable control characters form a |
|
|
* "gray list" that is ignored in this detection algorithm: |
|
|
* (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). |
|
|
* IN assertion: the fields Freq of dyn_ltree are set. |
|
|
*/function detect_data_type(s){/* black_mask is the bit mask of black-listed bytes |
|
|
* set bits 0..6, 14..25, and 28..31 |
|
|
* 0xf3ffc07f = binary 11110011111111111100000001111111 |
|
|
*/var black_mask=0xf3ffc07f;var n;/* Check for non-textual ("black-listed") bytes. */for(n=0;n<=31;n++,black_mask>>>=1){if(black_mask&1&&s.dyn_ltree[n*2]/*.Freq*/!==0){return Z_BINARY;}}/* Check for textual ("white-listed") bytes. */if(s.dyn_ltree[9*2]/*.Freq*/!==0||s.dyn_ltree[10*2]/*.Freq*/!==0||s.dyn_ltree[13*2]/*.Freq*/!==0){return Z_TEXT;}for(n=32;n<LITERALS;n++){if(s.dyn_ltree[n*2]/*.Freq*/!==0){return Z_TEXT;}}/* There are no "black-listed" or "white-listed" bytes: |
|
|
* this stream either is empty or has tolerated ("gray-listed") bytes only. |
|
|
*/return Z_BINARY;}var static_init_done=false;/* =========================================================================== |
|
|
* Initialize the tree data structures for a new zlib stream. |
|
|
*/function _tr_init(s){if(!static_init_done){tr_static_init();static_init_done=true;}s.l_desc=new TreeDesc(s.dyn_ltree,static_l_desc);s.d_desc=new TreeDesc(s.dyn_dtree,static_d_desc);s.bl_desc=new TreeDesc(s.bl_tree,static_bl_desc);s.bi_buf=0;s.bi_valid=0;/* Initialize the first block of the first file: */init_block(s);}/* =========================================================================== |
|
|
* Send a stored block |
|
|
*/function _tr_stored_block(s,buf,stored_len,last)//DeflateState *s; |
|
|
//charf *buf; /* input block */ |
|
|
//ulg stored_len; /* length of input block */ |
|
|
//int last; /* one if this is the last block for a file */ |
|
|
{send_bits(s,(STORED_BLOCK<<1)+(last?1:0),3);/* send block type */copy_block(s,buf,stored_len,true);/* with header */}/* =========================================================================== |
|
|
* Send one empty static block to give enough lookahead for inflate. |
|
|
* This takes 10 bits, of which 7 may remain in the bit buffer. |
|
|
*/function _tr_align(s){send_bits(s,STATIC_TREES<<1,3);send_code(s,END_BLOCK,static_ltree);bi_flush(s);}/* =========================================================================== |
|
|
* Determine the best encoding for the current block: dynamic trees, static |
|
|
* trees or store, and output the encoded block to the zip file. |
|
|
*/function _tr_flush_block(s,buf,stored_len,last)//DeflateState *s; |
|
|
//charf *buf; /* input block, or NULL if too old */ |
|
|
//ulg stored_len; /* length of input block */ |
|
|
//int last; /* one if this is the last block for a file */ |
|
|
{var opt_lenb,static_lenb;/* opt_len and static_len in bytes */var max_blindex=0;/* index of last bit length code of non zero freq */ /* Build the Huffman trees unless a stored block is forced */if(s.level>0){/* Check if the file is binary or text */if(s.strm.data_type===Z_UNKNOWN){s.strm.data_type=detect_data_type(s);}/* Construct the literal and distance trees */build_tree(s,s.l_desc);// Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, |
|
|
// s->static_len)); |
|
|
build_tree(s,s.d_desc);// Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, |
|
|
// s->static_len)); |
|
|
/* At this point, opt_len and static_len are the total bit lengths of |
|
|
* the compressed block data, excluding the tree representations. |
|
|
*/ /* Build the bit length tree for the above two trees, and get the index |
|
|
* in bl_order of the last bit length code to send. |
|
|
*/max_blindex=build_bl_tree(s);/* Determine the best encoding. Compute the block lengths in bytes. */opt_lenb=s.opt_len+3+7>>>3;static_lenb=s.static_len+3+7>>>3;// Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", |
|
|
// opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, |
|
|
// s->last_lit)); |
|
|
if(static_lenb<=opt_lenb){opt_lenb=static_lenb;}}else{// Assert(buf != (char*)0, "lost buf"); |
|
|
opt_lenb=static_lenb=stored_len+5;/* force a stored block */}if(stored_len+4<=opt_lenb&&buf!==-1){/* 4: two words for the lengths */ /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. |
|
|
* Otherwise we can't have processed more than WSIZE input bytes since |
|
|
* the last block flush, because compression would have been |
|
|
* successful. If LIT_BUFSIZE <= WSIZE, it is never too late to |
|
|
* transform a block into a stored block. |
|
|
*/_tr_stored_block(s,buf,stored_len,last);}else if(s.strategy===Z_FIXED||static_lenb===opt_lenb){send_bits(s,(STATIC_TREES<<1)+(last?1:0),3);compress_block(s,static_ltree,static_dtree);}else{send_bits(s,(DYN_TREES<<1)+(last?1:0),3);send_all_trees(s,s.l_desc.max_code+1,s.d_desc.max_code+1,max_blindex+1);compress_block(s,s.dyn_ltree,s.dyn_dtree);}// Assert (s->compressed_len == s->bits_sent, "bad compressed size"); |
|
|
/* The above check is made mod 2^32, for files larger than 512 MB |
|
|
* and uLong implemented on 32 bits. |
|
|
*/init_block(s);if(last){bi_windup(s);}// Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, |
|
|
// s->compressed_len-7*last)); |
|
|
}/* =========================================================================== |
|
|
* Save the match info and tally the frequency counts. Return true if |
|
|
* the current block must be flushed. |
|
|
*/function _tr_tally(s,dist,lc)// deflate_state *s; |
|
|
// unsigned dist; /* distance of matched string */ |
|
|
// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ |
|
|
{//var out_length, in_length, dcode; |
|
|
s.pending_buf[s.d_buf+s.last_lit*2]=dist>>>8&0xff;s.pending_buf[s.d_buf+s.last_lit*2+1]=dist&0xff;s.pending_buf[s.l_buf+s.last_lit]=lc&0xff;s.last_lit++;if(dist===0){/* lc is the unmatched char */s.dyn_ltree[lc*2]/*.Freq*/++;}else{s.matches++;/* Here, lc is the match length - MIN_MATCH */dist--;/* dist = match distance - 1 */ //Assert((ush)dist < (ush)MAX_DIST(s) && |
|
|
// (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && |
|
|
// (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); |
|
|
s.dyn_ltree[(_length_code[lc]+LITERALS+1)*2]/*.Freq*/++;s.dyn_dtree[d_code(dist)*2]/*.Freq*/++;}// (!) This block is disabled in zlib defaults, |
|
|
// don't enable it for binary compatibility |
|
|
//#ifdef TRUNCATE_BLOCK |
|
|
// /* Try to guess if it is profitable to stop the current block here */ |
|
|
// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) { |
|
|
// /* Compute an upper bound for the compressed length */ |
|
|
// out_length = s.last_lit*8; |
|
|
// in_length = s.strstart - s.block_start; |
|
|
// |
|
|
// for (dcode = 0; dcode < D_CODES; dcode++) { |
|
|
// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]); |
|
|
// } |
|
|
// out_length >>>= 3; |
|
|
// //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", |
|
|
// // s->last_lit, in_length, out_length, |
|
|
// // 100L - out_length*100L/in_length)); |
|
|
// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) { |
|
|
// return true; |
|
|
// } |
|
|
// } |
|
|
//#endif |
|
|
return s.last_lit===s.lit_bufsize-1;/* We avoid equality with lit_bufsize because of wraparound at 64K |
|
|
* on 16 bit machines and because stored blocks are restricted to |
|
|
* 64K-1 bytes. |
|
|
*/}exports._tr_init=_tr_init;exports._tr_stored_block=_tr_stored_block;exports._tr_flush_block=_tr_flush_block;exports._tr_tally=_tr_tally;exports._tr_align=_tr_align;},{"../utils/common":419}],431:[function(require,module,exports){'use strict';// (C) 1995-2013 Jean-loup Gailly and Mark Adler |
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin |
|
|
// |
|
|
// This software is provided 'as-is', without any express or implied |
|
|
// warranty. In no event will the authors be held liable for any damages |
|
|
// arising from the use of this software. |
|
|
// |
|
|
// Permission is granted to anyone to use this software for any purpose, |
|
|
// including commercial applications, and to alter it and redistribute it |
|
|
// freely, subject to the following restrictions: |
|
|
// |
|
|
// 1. The origin of this software must not be misrepresented; you must not |
|
|
// claim that you wrote the original software. If you use this software |
|
|
// in a product, an acknowledgment in the product documentation would be |
|
|
// appreciated but is not required. |
|
|
// 2. Altered source versions must be plainly marked as such, and must not be |
|
|
// misrepresented as being the original software. |
|
|
// 3. This notice may not be removed or altered from any source distribution. |
|
|
function ZStream(){/* next input byte */this.input=null;// JS specific, because we have no pointers |
|
|
this.next_in=0;/* number of bytes available at input */this.avail_in=0;/* total number of input bytes read so far */this.total_in=0;/* next output byte should be put there */this.output=null;// JS specific, because we have no pointers |
|
|
this.next_out=0;/* remaining free space at output */this.avail_out=0;/* total number of bytes output so far */this.total_out=0;/* last error message, NULL if no error */this.msg=''/*Z_NULL*/;/* not visible by applications */this.state=null;/* best guess about the data type: binary or text */this.data_type=2/*Z_UNKNOWN*/;/* adler32 value of the uncompressed data */this.adler=0;}module.exports=ZStream;},{}],432:[function(require,module,exports){module.exports={"2.16.840.1.101.3.4.1.1":"aes-128-ecb","2.16.840.1.101.3.4.1.2":"aes-128-cbc","2.16.840.1.101.3.4.1.3":"aes-128-ofb","2.16.840.1.101.3.4.1.4":"aes-128-cfb","2.16.840.1.101.3.4.1.21":"aes-192-ecb","2.16.840.1.101.3.4.1.22":"aes-192-cbc","2.16.840.1.101.3.4.1.23":"aes-192-ofb","2.16.840.1.101.3.4.1.24":"aes-192-cfb","2.16.840.1.101.3.4.1.41":"aes-256-ecb","2.16.840.1.101.3.4.1.42":"aes-256-cbc","2.16.840.1.101.3.4.1.43":"aes-256-ofb","2.16.840.1.101.3.4.1.44":"aes-256-cfb"};},{}],433:[function(require,module,exports){// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js |
|
|
// Fedor, you are amazing. |
|
|
'use strict';var asn1=require('asn1.js');exports.certificate=require('./certificate');var RSAPrivateKey=asn1.define('RSAPrivateKey',function(){this.seq().obj(this.key('version').int(),this.key('modulus').int(),this.key('publicExponent').int(),this.key('privateExponent').int(),this.key('prime1').int(),this.key('prime2').int(),this.key('exponent1').int(),this.key('exponent2').int(),this.key('coefficient').int());});exports.RSAPrivateKey=RSAPrivateKey;var RSAPublicKey=asn1.define('RSAPublicKey',function(){this.seq().obj(this.key('modulus').int(),this.key('publicExponent').int());});exports.RSAPublicKey=RSAPublicKey;var PublicKey=asn1.define('SubjectPublicKeyInfo',function(){this.seq().obj(this.key('algorithm').use(AlgorithmIdentifier),this.key('subjectPublicKey').bitstr());});exports.PublicKey=PublicKey;var AlgorithmIdentifier=asn1.define('AlgorithmIdentifier',function(){this.seq().obj(this.key('algorithm').objid(),this.key('none').null_().optional(),this.key('curve').objid().optional(),this.key('params').seq().obj(this.key('p').int(),this.key('q').int(),this.key('g').int()).optional());});var PrivateKeyInfo=asn1.define('PrivateKeyInfo',function(){this.seq().obj(this.key('version').int(),this.key('algorithm').use(AlgorithmIdentifier),this.key('subjectPrivateKey').octstr());});exports.PrivateKey=PrivateKeyInfo;var EncryptedPrivateKeyInfo=asn1.define('EncryptedPrivateKeyInfo',function(){this.seq().obj(this.key('algorithm').seq().obj(this.key('id').objid(),this.key('decrypt').seq().obj(this.key('kde').seq().obj(this.key('id').objid(),this.key('kdeparams').seq().obj(this.key('salt').octstr(),this.key('iters').int())),this.key('cipher').seq().obj(this.key('algo').objid(),this.key('iv').octstr()))),this.key('subjectPrivateKey').octstr());});exports.EncryptedPrivateKey=EncryptedPrivateKeyInfo;var DSAPrivateKey=asn1.define('DSAPrivateKey',function(){this.seq().obj(this.key('version').int(),this.key('p').int(),this.key('q').int(),this.key('g').int(),this.key('pub_key').int(),this.key('priv_key').int());});exports.DSAPrivateKey=DSAPrivateKey;exports.DSAparam=asn1.define('DSAparam',function(){this.int();});var ECPrivateKey=asn1.define('ECPrivateKey',function(){this.seq().obj(this.key('version').int(),this.key('privateKey').octstr(),this.key('parameters').optional().explicit(0).use(ECParameters),this.key('publicKey').optional().explicit(1).bitstr());});exports.ECPrivateKey=ECPrivateKey;var ECParameters=asn1.define('ECParameters',function(){this.choice({namedCurve:this.objid()});});exports.signature=asn1.define('signature',function(){this.seq().obj(this.key('r').int(),this.key('s').int());});},{"./certificate":434,"asn1.js":165}],434:[function(require,module,exports){// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js |
|
|
// thanks to @Rantanen |
|
|
'use strict';var asn=require('asn1.js');var Time=asn.define('Time',function(){this.choice({utcTime:this.utctime(),generalTime:this.gentime()});});var AttributeTypeValue=asn.define('AttributeTypeValue',function(){this.seq().obj(this.key('type').objid(),this.key('value').any());});var AlgorithmIdentifier=asn.define('AlgorithmIdentifier',function(){this.seq().obj(this.key('algorithm').objid(),this.key('parameters').optional(),this.key('curve').objid().optional());});var SubjectPublicKeyInfo=asn.define('SubjectPublicKeyInfo',function(){this.seq().obj(this.key('algorithm').use(AlgorithmIdentifier),this.key('subjectPublicKey').bitstr());});var RelativeDistinguishedName=asn.define('RelativeDistinguishedName',function(){this.setof(AttributeTypeValue);});var RDNSequence=asn.define('RDNSequence',function(){this.seqof(RelativeDistinguishedName);});var Name=asn.define('Name',function(){this.choice({rdnSequence:this.use(RDNSequence)});});var Validity=asn.define('Validity',function(){this.seq().obj(this.key('notBefore').use(Time),this.key('notAfter').use(Time));});var Extension=asn.define('Extension',function(){this.seq().obj(this.key('extnID').objid(),this.key('critical').bool().def(false),this.key('extnValue').octstr());});var TBSCertificate=asn.define('TBSCertificate',function(){this.seq().obj(this.key('version').explicit(0).int().optional(),this.key('serialNumber').int(),this.key('signature').use(AlgorithmIdentifier),this.key('issuer').use(Name),this.key('validity').use(Validity),this.key('subject').use(Name),this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),this.key('issuerUniqueID').implicit(1).bitstr().optional(),this.key('subjectUniqueID').implicit(2).bitstr().optional(),this.key('extensions').explicit(3).seqof(Extension).optional());});var X509Certificate=asn.define('X509Certificate',function(){this.seq().obj(this.key('tbsCertificate').use(TBSCertificate),this.key('signatureAlgorithm').use(AlgorithmIdentifier),this.key('signatureValue').bitstr());});module.exports=X509Certificate;},{"asn1.js":165}],435:[function(require,module,exports){// adapted from https://github.com/apatil/pemstrip |
|
|
var findProc=/Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r\+\/\=]+)[\n\r]+/m;var startRegex=/^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m;var fullRegex=/^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r\+\/\=]+)-----END \1-----$/m;var evp=require('evp_bytestokey');var ciphers=require('browserify-aes');var Buffer=require('safe-buffer').Buffer;module.exports=function(okey,password){var key=okey.toString();var match=key.match(findProc);var decrypted;if(!match){var match2=key.match(fullRegex);decrypted=new Buffer(match2[2].replace(/[\r\n]/g,''),'base64');}else{var suite='aes'+match[1];var iv=Buffer.from(match[2],'hex');var cipherText=Buffer.from(match[3].replace(/[\r\n]/g,''),'base64');var cipherKey=evp(password,iv.slice(0,8),parseInt(match[1],10)).key;var out=[];var cipher=ciphers.createDecipheriv(suite,cipherKey,iv);out.push(cipher.update(cipherText));out.push(cipher.final());decrypted=Buffer.concat(out);}var tag=key.match(startRegex)[1];return{tag:tag,data:decrypted};};},{"browserify-aes":186,"evp_bytestokey":345,"safe-buffer":470}],436:[function(require,module,exports){var asn1=require('./asn1');var aesid=require('./aesid.json');var fixProc=require('./fixProc');var ciphers=require('browserify-aes');var compat=require('pbkdf2');var Buffer=require('safe-buffer').Buffer;module.exports=parseKeys;function parseKeys(buffer){var password;if(_typeof2(buffer)==='object'&&!Buffer.isBuffer(buffer)){password=buffer.passphrase;buffer=buffer.key;}if(typeof buffer==='string'){buffer=Buffer.from(buffer);}var stripped=fixProc(buffer,password);var type=stripped.tag;var data=stripped.data;var subtype,ndata;switch(type){case'CERTIFICATE':ndata=asn1.certificate.decode(data,'der').tbsCertificate.subjectPublicKeyInfo;// falls through |
|
|
case'PUBLIC KEY':if(!ndata){ndata=asn1.PublicKey.decode(data,'der');}subtype=ndata.algorithm.algorithm.join('.');switch(subtype){case'1.2.840.113549.1.1.1':return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data,'der');case'1.2.840.10045.2.1':ndata.subjectPrivateKey=ndata.subjectPublicKey;return{type:'ec',data:ndata};case'1.2.840.10040.4.1':ndata.algorithm.params.pub_key=asn1.DSAparam.decode(ndata.subjectPublicKey.data,'der');return{type:'dsa',data:ndata.algorithm.params};default:throw new Error('unknown key id '+subtype);}throw new Error('unknown key type '+type);case'ENCRYPTED PRIVATE KEY':data=asn1.EncryptedPrivateKey.decode(data,'der');data=decrypt(data,password);// falls through |
|
|
case'PRIVATE KEY':ndata=asn1.PrivateKey.decode(data,'der');subtype=ndata.algorithm.algorithm.join('.');switch(subtype){case'1.2.840.113549.1.1.1':return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey,'der');case'1.2.840.10045.2.1':return{curve:ndata.algorithm.curve,privateKey:asn1.ECPrivateKey.decode(ndata.subjectPrivateKey,'der').privateKey};case'1.2.840.10040.4.1':ndata.algorithm.params.priv_key=asn1.DSAparam.decode(ndata.subjectPrivateKey,'der');return{type:'dsa',params:ndata.algorithm.params};default:throw new Error('unknown key id '+subtype);}throw new Error('unknown key type '+type);case'RSA PUBLIC KEY':return asn1.RSAPublicKey.decode(data,'der');case'RSA PRIVATE KEY':return asn1.RSAPrivateKey.decode(data,'der');case'DSA PRIVATE KEY':return{type:'dsa',params:asn1.DSAPrivateKey.decode(data,'der')};case'EC PRIVATE KEY':data=asn1.ECPrivateKey.decode(data,'der');return{curve:data.parameters.value,privateKey:data.privateKey};default:throw new Error('unknown key type '+type);}}parseKeys.signature=asn1.signature;function decrypt(data,password){var salt=data.algorithm.decrypt.kde.kdeparams.salt;var iters=parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(),10);var algo=aesid[data.algorithm.decrypt.cipher.algo.join('.')];var iv=data.algorithm.decrypt.cipher.iv;var cipherText=data.subjectPrivateKey;var keylen=parseInt(algo.split('-')[1],10)/8;var key=compat.pbkdf2Sync(password,salt,iters,keylen,'sha1');var cipher=ciphers.createDecipheriv(algo,key,iv);var out=[];out.push(cipher.update(cipherText));out.push(cipher.final());return Buffer.concat(out);}},{"./aesid.json":432,"./asn1":433,"./fixProc":435,"browserify-aes":186,"pbkdf2":437,"safe-buffer":470}],437:[function(require,module,exports){exports.pbkdf2=require('./lib/async');exports.pbkdf2Sync=require('./lib/sync');},{"./lib/async":438,"./lib/sync":441}],438:[function(require,module,exports){(function(process,global){var checkParameters=require('./precondition');var defaultEncoding=require('./default-encoding');var sync=require('./sync');var Buffer=require('safe-buffer').Buffer;var ZERO_BUF;var subtle=global.crypto&&global.crypto.subtle;var toBrowser={'sha':'SHA-1','sha-1':'SHA-1','sha1':'SHA-1','sha256':'SHA-256','sha-256':'SHA-256','sha384':'SHA-384','sha-384':'SHA-384','sha-512':'SHA-512','sha512':'SHA-512'};var checks=[];function checkNative(algo){if(global.process&&!global.process.browser){return Promise.resolve(false);}if(!subtle||!subtle.importKey||!subtle.deriveBits){return Promise.resolve(false);}if(checks[algo]!==undefined){return checks[algo];}ZERO_BUF=ZERO_BUF||Buffer.alloc(8);var prom=browserPbkdf2(ZERO_BUF,ZERO_BUF,10,128,algo).then(function(){return true;}).catch(function(){return false;});checks[algo]=prom;return prom;}function browserPbkdf2(password,salt,iterations,length,algo){return subtle.importKey('raw',password,{name:'PBKDF2'},false,['deriveBits']).then(function(key){return subtle.deriveBits({name:'PBKDF2',salt:salt,iterations:iterations,hash:{name:algo}},key,length<<3);}).then(function(res){return Buffer.from(res);});}function resolvePromise(promise,callback){promise.then(function(out){process.nextTick(function(){callback(null,out);});},function(e){process.nextTick(function(){callback(e);});});}module.exports=function(password,salt,iterations,keylen,digest,callback){if(typeof digest==='function'){callback=digest;digest=undefined;}digest=digest||'sha1';var algo=toBrowser[digest.toLowerCase()];if(!algo||typeof global.Promise!=='function'){return process.nextTick(function(){var out;try{out=sync(password,salt,iterations,keylen,digest);}catch(e){return callback(e);}callback(null,out);});}checkParameters(password,salt,iterations,keylen);if(typeof callback!=='function')throw new Error('No callback provided to pbkdf2');if(!Buffer.isBuffer(password))password=Buffer.from(password,defaultEncoding);if(!Buffer.isBuffer(salt))salt=Buffer.from(salt,defaultEncoding);resolvePromise(checkNative(algo).then(function(resp){if(resp)return browserPbkdf2(password,salt,iterations,keylen,algo);return sync(password,salt,iterations,keylen,digest);}),callback);};}).call(this,require('_process'),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{"./default-encoding":439,"./precondition":440,"./sync":441,"_process":443,"safe-buffer":470}],439:[function(require,module,exports){(function(process){var defaultEncoding;/* istanbul ignore next */if(process.browser){defaultEncoding='utf-8';}else{var pVersionMajor=parseInt(process.version.split('.')[0].slice(1),10);defaultEncoding=pVersionMajor>=6?'utf-8':'binary';}module.exports=defaultEncoding;}).call(this,require('_process'));},{"_process":443}],440:[function(require,module,exports){(function(Buffer){var MAX_ALLOC=Math.pow(2,30)-1;// default in iojs |
|
|
function checkBuffer(buf,name){if(typeof buf!=='string'&&!Buffer.isBuffer(buf)){throw new TypeError(name+' must be a buffer or string');}}module.exports=function(password,salt,iterations,keylen){checkBuffer(password,'Password');checkBuffer(salt,'Salt');if(typeof iterations!=='number'){throw new TypeError('Iterations not a number');}if(iterations<0){throw new TypeError('Bad iterations');}if(typeof keylen!=='number'){throw new TypeError('Key length not a number');}if(keylen<0||keylen>MAX_ALLOC||keylen!==keylen){/* eslint no-self-compare: 0 */throw new TypeError('Bad key length');}};}).call(this,{"isBuffer":require("../../is-buffer/index.js")});},{"../../is-buffer/index.js":365}],441:[function(require,module,exports){var md5=require('create-hash/md5');var RIPEMD160=require('ripemd160');var sha=require('sha.js');var checkParameters=require('./precondition');var defaultEncoding=require('./default-encoding');var Buffer=require('safe-buffer').Buffer;var ZEROS=Buffer.alloc(128);var sizes={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20};function Hmac(alg,key,saltLen){var hash=getDigest(alg);var blocksize=alg==='sha512'||alg==='sha384'?128:64;if(key.length>blocksize){key=hash(key);}else if(key.length<blocksize){key=Buffer.concat([key,ZEROS],blocksize);}var ipad=Buffer.allocUnsafe(blocksize+sizes[alg]);var opad=Buffer.allocUnsafe(blocksize+sizes[alg]);for(var i=0;i<blocksize;i++){ipad[i]=key[i]^0x36;opad[i]=key[i]^0x5C;}var ipad1=Buffer.allocUnsafe(blocksize+saltLen+4);ipad.copy(ipad1,0,0,blocksize);this.ipad1=ipad1;this.ipad2=ipad;this.opad=opad;this.alg=alg;this.blocksize=blocksize;this.hash=hash;this.size=sizes[alg];}Hmac.prototype.run=function(data,ipad){data.copy(ipad,this.blocksize);var h=this.hash(ipad);h.copy(this.opad,this.blocksize);return this.hash(this.opad);};function getDigest(alg){function shaFunc(data){return sha(alg).update(data).digest();}function rmd160Func(data){return new RIPEMD160().update(data).digest();}if(alg==='rmd160'||alg==='ripemd160')return rmd160Func;if(alg==='md5')return md5;return shaFunc;}function pbkdf2(password,salt,iterations,keylen,digest){checkParameters(password,salt,iterations,keylen);if(!Buffer.isBuffer(password))password=Buffer.from(password,defaultEncoding);if(!Buffer.isBuffer(salt))salt=Buffer.from(salt,defaultEncoding);digest=digest||'sha1';var hmac=new Hmac(digest,password,salt.length);var DK=Buffer.allocUnsafe(keylen);var block1=Buffer.allocUnsafe(salt.length+4);salt.copy(block1,0,0,salt.length);var destPos=0;var hLen=sizes[digest];var l=Math.ceil(keylen/hLen);for(var i=1;i<=l;i++){block1.writeUInt32BE(i,salt.length);var T=hmac.run(block1,hmac.ipad1);var U=T;for(var j=1;j<iterations;j++){U=hmac.run(U,hmac.ipad2);for(var k=0;k<hLen;k++){T[k]^=U[k];}}T.copy(DK,destPos);destPos+=hLen;}return DK;}module.exports=pbkdf2;},{"./default-encoding":439,"./precondition":440,"create-hash/md5":309,"ripemd160":469,"safe-buffer":470,"sha.js":474}],442:[function(require,module,exports){(function(process){'use strict';if(typeof process==='undefined'||!process.version||process.version.indexOf('v0.')===0||process.version.indexOf('v1.')===0&&process.version.indexOf('v1.8.')!==0){module.exports={nextTick:nextTick};}else{module.exports=process;}function nextTick(fn,arg1,arg2,arg3){if(typeof fn!=='function'){throw new TypeError('"callback" argument must be a function');}var len=arguments.length;var args,i;switch(len){case 0:case 1:return process.nextTick(fn);case 2:return process.nextTick(function afterTickOne(){fn.call(null,arg1);});case 3:return process.nextTick(function afterTickTwo(){fn.call(null,arg1,arg2);});case 4:return process.nextTick(function afterTickThree(){fn.call(null,arg1,arg2,arg3);});default:args=new Array(len-1);i=0;while(i<args.length){args[i++]=arguments[i];}return process.nextTick(function afterTick(){fn.apply(null,args);});}}}).call(this,require('_process'));},{"_process":443}],443:[function(require,module,exports){// shim for using process in browser |
|
|
var process=module.exports={};// cached from whatever global is present so that test runners that stub it |
|
|
// don't break things. But we need to wrap it in a try catch in case it is |
|
|
// wrapped in strict mode code which doesn't define any globals. It's inside a |
|
|
// function because try/catches deoptimize in certain engines. |
|
|
var cachedSetTimeout;var cachedClearTimeout;function defaultSetTimout(){throw new Error('setTimeout has not been defined');}function defaultClearTimeout(){throw new Error('clearTimeout has not been defined');}(function(){try{if(typeof setTimeout==='function'){cachedSetTimeout=setTimeout;}else{cachedSetTimeout=defaultSetTimout;}}catch(e){cachedSetTimeout=defaultSetTimout;}try{if(typeof clearTimeout==='function'){cachedClearTimeout=clearTimeout;}else{cachedClearTimeout=defaultClearTimeout;}}catch(e){cachedClearTimeout=defaultClearTimeout;}})();function runTimeout(fun){if(cachedSetTimeout===setTimeout){//normal enviroments in sane situations |
|
|
return setTimeout(fun,0);}// if setTimeout wasn't available but was latter defined |
|
|
if((cachedSetTimeout===defaultSetTimout||!cachedSetTimeout)&&setTimeout){cachedSetTimeout=setTimeout;return setTimeout(fun,0);}try{// when when somebody has screwed with setTimeout but no I.E. maddness |
|
|
return cachedSetTimeout(fun,0);}catch(e){try{// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally |
|
|
return cachedSetTimeout.call(null,fun,0);}catch(e){// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error |
|
|
return cachedSetTimeout.call(this,fun,0);}}}function runClearTimeout(marker){if(cachedClearTimeout===clearTimeout){//normal enviroments in sane situations |
|
|
return clearTimeout(marker);}// if clearTimeout wasn't available but was latter defined |
|
|
if((cachedClearTimeout===defaultClearTimeout||!cachedClearTimeout)&&clearTimeout){cachedClearTimeout=clearTimeout;return clearTimeout(marker);}try{// when when somebody has screwed with setTimeout but no I.E. maddness |
|
|
return cachedClearTimeout(marker);}catch(e){try{// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally |
|
|
return cachedClearTimeout.call(null,marker);}catch(e){// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. |
|
|
// Some versions of I.E. have different rules for clearTimeout vs setTimeout |
|
|
return cachedClearTimeout.call(this,marker);}}}var queue=[];var draining=false;var currentQueue;var queueIndex=-1;function cleanUpNextTick(){if(!draining||!currentQueue){return;}draining=false;if(currentQueue.length){queue=currentQueue.concat(queue);}else{queueIndex=-1;}if(queue.length){drainQueue();}}function drainQueue(){if(draining){return;}var timeout=runTimeout(cleanUpNextTick);draining=true;var len=queue.length;while(len){currentQueue=queue;queue=[];while(++queueIndex<len){if(currentQueue){currentQueue[queueIndex].run();}}queueIndex=-1;len=queue.length;}currentQueue=null;draining=false;runClearTimeout(timeout);}process.nextTick=function(fun){var args=new Array(arguments.length-1);if(arguments.length>1){for(var i=1;i<arguments.length;i++){args[i-1]=arguments[i];}}queue.push(new Item(fun,args));if(queue.length===1&&!draining){runTimeout(drainQueue);}};// v8 likes predictible objects |
|
|
function Item(fun,array){this.fun=fun;this.array=array;}Item.prototype.run=function(){this.fun.apply(null,this.array);};process.title='browser';process.browser=true;process.env={};process.argv=[];process.version='';// empty string to avoid regexp issues |
|
|
process.versions={};function noop(){}process.on=noop;process.addListener=noop;process.once=noop;process.off=noop;process.removeListener=noop;process.removeAllListeners=noop;process.emit=noop;process.prependListener=noop;process.prependOnceListener=noop;process.listeners=function(name){return[];};process.binding=function(name){throw new Error('process.binding is not supported');};process.cwd=function(){return'/';};process.chdir=function(dir){throw new Error('process.chdir is not supported');};process.umask=function(){return 0;};},{}],444:[function(require,module,exports){exports.publicEncrypt=require('./publicEncrypt');exports.privateDecrypt=require('./privateDecrypt');exports.privateEncrypt=function privateEncrypt(key,buf){return exports.publicEncrypt(key,buf,true);};exports.publicDecrypt=function publicDecrypt(key,buf){return exports.privateDecrypt(key,buf,true);};},{"./privateDecrypt":447,"./publicEncrypt":448}],445:[function(require,module,exports){var createHash=require('create-hash');var Buffer=require('safe-buffer').Buffer;module.exports=function(seed,len){var t=Buffer.alloc(0);var i=0;var c;while(t.length<len){c=i2ops(i++);t=Buffer.concat([t,createHash('sha1').update(seed).update(c).digest()]);}return t.slice(0,len);};function i2ops(c){var out=Buffer.allocUnsafe(4);out.writeUInt32BE(c,0);return out;}},{"create-hash":308,"safe-buffer":470}],446:[function(require,module,exports){arguments[4][179][0].apply(exports,arguments);},{"buffer":183,"dup":179}],447:[function(require,module,exports){var parseKeys=require('parse-asn1');var mgf=require('./mgf');var xor=require('./xor');var BN=require('bn.js');var crt=require('browserify-rsa');var createHash=require('create-hash');var withPublic=require('./withPublic');var Buffer=require('safe-buffer').Buffer;module.exports=function privateDecrypt(privateKey,enc,reverse){var padding;if(privateKey.padding){padding=privateKey.padding;}else if(reverse){padding=1;}else{padding=4;}var key=parseKeys(privateKey);var k=key.modulus.byteLength();if(enc.length>k||new BN(enc).cmp(key.modulus)>=0){throw new Error('decryption error');}var msg;if(reverse){msg=withPublic(new BN(enc),key);}else{msg=crt(enc,key);}var zBuffer=Buffer.alloc(k-msg.length);msg=Buffer.concat([zBuffer,msg],k);if(padding===4){return oaep(key,msg);}else if(padding===1){return pkcs1(key,msg,reverse);}else if(padding===3){return msg;}else{throw new Error('unknown padding');}};function oaep(key,msg){var k=key.modulus.byteLength();var iHash=createHash('sha1').update(Buffer.alloc(0)).digest();var hLen=iHash.length;if(msg[0]!==0){throw new Error('decryption error');}var maskedSeed=msg.slice(1,hLen+1);var maskedDb=msg.slice(hLen+1);var seed=xor(maskedSeed,mgf(maskedDb,hLen));var db=xor(maskedDb,mgf(seed,k-hLen-1));if(compare(iHash,db.slice(0,hLen))){throw new Error('decryption error');}var i=hLen;while(db[i]===0){i++;}if(db[i++]!==1){throw new Error('decryption error');}return db.slice(i);}function pkcs1(key,msg,reverse){var p1=msg.slice(0,2);var i=2;var status=0;while(msg[i++]!==0){if(i>=msg.length){status++;break;}}var ps=msg.slice(2,i-1);if(p1.toString('hex')!=='0002'&&!reverse||p1.toString('hex')!=='0001'&&reverse){status++;}if(ps.length<8){status++;}if(status){throw new Error('decryption error');}return msg.slice(i);}function compare(a,b){a=Buffer.from(a);b=Buffer.from(b);var dif=0;var len=a.length;if(a.length!==b.length){dif++;len=Math.min(a.length,b.length);}var i=-1;while(++i<len){dif+=a[i]^b[i];}return dif;}},{"./mgf":445,"./withPublic":449,"./xor":450,"bn.js":446,"browserify-rsa":204,"create-hash":308,"parse-asn1":436,"safe-buffer":470}],448:[function(require,module,exports){var parseKeys=require('parse-asn1');var randomBytes=require('randombytes');var createHash=require('create-hash');var mgf=require('./mgf');var xor=require('./xor');var BN=require('bn.js');var withPublic=require('./withPublic');var crt=require('browserify-rsa');var Buffer=require('safe-buffer').Buffer;module.exports=function publicEncrypt(publicKey,msg,reverse){var padding;if(publicKey.padding){padding=publicKey.padding;}else if(reverse){padding=1;}else{padding=4;}var key=parseKeys(publicKey);var paddedMsg;if(padding===4){paddedMsg=oaep(key,msg);}else if(padding===1){paddedMsg=pkcs1(key,msg,reverse);}else if(padding===3){paddedMsg=new BN(msg);if(paddedMsg.cmp(key.modulus)>=0){throw new Error('data too long for modulus');}}else{throw new Error('unknown padding');}if(reverse){return crt(paddedMsg,key);}else{return withPublic(paddedMsg,key);}};function oaep(key,msg){var k=key.modulus.byteLength();var mLen=msg.length;var iHash=createHash('sha1').update(Buffer.alloc(0)).digest();var hLen=iHash.length;var hLen2=2*hLen;if(mLen>k-hLen2-2){throw new Error('message too long');}var ps=Buffer.alloc(k-mLen-hLen2-2);var dblen=k-hLen-1;var seed=randomBytes(hLen);var maskedDb=xor(Buffer.concat([iHash,ps,Buffer.alloc(1,1),msg],dblen),mgf(seed,dblen));var maskedSeed=xor(seed,mgf(maskedDb,hLen));return new BN(Buffer.concat([Buffer.alloc(1),maskedSeed,maskedDb],k));}function pkcs1(key,msg,reverse){var mLen=msg.length;var k=key.modulus.byteLength();if(mLen>k-11){throw new Error('message too long');}var ps;if(reverse){ps=Buffer.alloc(k-mLen-3,0xff);}else{ps=nonZero(k-mLen-3);}return new BN(Buffer.concat([Buffer.from([0,reverse?1:2]),ps,Buffer.alloc(1),msg],k));}function nonZero(len){var out=Buffer.allocUnsafe(len);var i=0;var cache=randomBytes(len*2);var cur=0;var num;while(i<len){if(cur===cache.length){cache=randomBytes(len*2);cur=0;}num=cache[cur++];if(num){out[i++]=num;}}return out;}},{"./mgf":445,"./withPublic":449,"./xor":450,"bn.js":446,"browserify-rsa":204,"create-hash":308,"parse-asn1":436,"randombytes":451,"safe-buffer":470}],449:[function(require,module,exports){var BN=require('bn.js');var Buffer=require('safe-buffer').Buffer;function withPublic(paddedMsg,key){return Buffer.from(paddedMsg.toRed(BN.mont(key.modulus)).redPow(new BN(key.publicExponent)).fromRed().toArray());}module.exports=withPublic;},{"bn.js":446,"safe-buffer":470}],450:[function(require,module,exports){module.exports=function xor(a,b){var len=a.length;var i=-1;while(++i<len){a[i]^=b[i];}return a;};},{}],451:[function(require,module,exports){(function(process,global){'use strict';// limit of Crypto.getRandomValues() |
|
|
// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues |
|
|
var MAX_BYTES=65536;// Node supports requesting up to this number of bytes |
|
|
// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48 |
|
|
var MAX_UINT32=4294967295;function oldBrowser(){throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11');}var Buffer=require('safe-buffer').Buffer;var crypto=global.crypto||global.msCrypto;if(crypto&&crypto.getRandomValues){module.exports=randomBytes;}else{module.exports=oldBrowser;}function randomBytes(size,cb){// phantomjs needs to throw |
|
|
if(size>MAX_UINT32)throw new RangeError('requested too many random bytes');var bytes=Buffer.allocUnsafe(size);if(size>0){// getRandomValues fails on IE if size == 0 |
|
|
if(size>MAX_BYTES){// this is the max bytes crypto.getRandomValues |
|
|
// can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues |
|
|
for(var generated=0;generated<size;generated+=MAX_BYTES){// buffer.slice automatically checks if the end is past the end of |
|
|
// the buffer so we don't have to here |
|
|
crypto.getRandomValues(bytes.slice(generated,generated+MAX_BYTES));}}else{crypto.getRandomValues(bytes);}}if(typeof cb==='function'){return process.nextTick(function(){cb(null,bytes);});}return bytes;}}).call(this,require('_process'),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{"_process":443,"safe-buffer":470}],452:[function(require,module,exports){(function(process,global){'use strict';function oldBrowser(){throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11');}var safeBuffer=require('safe-buffer');var randombytes=require('randombytes');var Buffer=safeBuffer.Buffer;var kBufferMaxLength=safeBuffer.kMaxLength;var crypto=global.crypto||global.msCrypto;var kMaxUint32=Math.pow(2,32)-1;function assertOffset(offset,length){if(typeof offset!=='number'||offset!==offset){// eslint-disable-line no-self-compare |
|
|
throw new TypeError('offset must be a number');}if(offset>kMaxUint32||offset<0){throw new TypeError('offset must be a uint32');}if(offset>kBufferMaxLength||offset>length){throw new RangeError('offset out of range');}}function assertSize(size,offset,length){if(typeof size!=='number'||size!==size){// eslint-disable-line no-self-compare |
|
|
throw new TypeError('size must be a number');}if(size>kMaxUint32||size<0){throw new TypeError('size must be a uint32');}if(size+offset>length||size>kBufferMaxLength){throw new RangeError('buffer too small');}}if(crypto&&crypto.getRandomValues||!process.browser){exports.randomFill=randomFill;exports.randomFillSync=randomFillSync;}else{exports.randomFill=oldBrowser;exports.randomFillSync=oldBrowser;}function randomFill(buf,offset,size,cb){if(!Buffer.isBuffer(buf)&&!(buf instanceof global.Uint8Array)){throw new TypeError('"buf" argument must be a Buffer or Uint8Array');}if(typeof offset==='function'){cb=offset;offset=0;size=buf.length;}else if(typeof size==='function'){cb=size;size=buf.length-offset;}else if(typeof cb!=='function'){throw new TypeError('"cb" argument must be a function');}assertOffset(offset,buf.length);assertSize(size,offset,buf.length);return actualFill(buf,offset,size,cb);}function actualFill(buf,offset,size,cb){if(process.browser){var ourBuf=buf.buffer;var uint=new Uint8Array(ourBuf,offset,size);crypto.getRandomValues(uint);if(cb){process.nextTick(function(){cb(null,buf);});return;}return buf;}if(cb){randombytes(size,function(err,bytes){if(err){return cb(err);}bytes.copy(buf,offset);cb(null,buf);});return;}var bytes=randombytes(size);bytes.copy(buf,offset);return buf;}function randomFillSync(buf,offset,size){if(typeof offset==='undefined'){offset=0;}if(!Buffer.isBuffer(buf)&&!(buf instanceof global.Uint8Array)){throw new TypeError('"buf" argument must be a Buffer or Uint8Array');}assertOffset(offset,buf.length);if(size===undefined)size=buf.length-offset;assertSize(size,offset,buf.length);return actualFill(buf,offset,size);}}).call(this,require('_process'),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{"_process":443,"randombytes":451,"safe-buffer":470}],453:[function(require,module,exports){'use strict';function _inheritsLoose(subClass,superClass){subClass.prototype=Object.create(superClass.prototype);subClass.prototype.constructor=subClass;subClass.__proto__=superClass;}var codes={};function createErrorType(code,message,Base){if(!Base){Base=Error;}function getMessage(arg1,arg2,arg3){if(typeof message==='string'){return message;}else{return message(arg1,arg2,arg3);}}var NodeError=/*#__PURE__*/function(_Base){_inheritsLoose(NodeError,_Base);function NodeError(arg1,arg2,arg3){return _Base.call(this,getMessage(arg1,arg2,arg3))||this;}return NodeError;}(Base);NodeError.prototype.name=Base.name;NodeError.prototype.code=code;codes[code]=NodeError;}// https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js |
|
|
function oneOf(expected,thing){if(Array.isArray(expected)){var len=expected.length;expected=expected.map(function(i){return String(i);});if(len>2){return"one of ".concat(thing," ").concat(expected.slice(0,len-1).join(', '),", or ")+expected[len-1];}else if(len===2){return"one of ".concat(thing," ").concat(expected[0]," or ").concat(expected[1]);}else{return"of ".concat(thing," ").concat(expected[0]);}}else{return"of ".concat(thing," ").concat(String(expected));}}// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith |
|
|
function startsWith(str,search,pos){return str.substr(!pos||pos<0?0:+pos,search.length)===search;}// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith |
|
|
function endsWith(str,search,this_len){if(this_len===undefined||this_len>str.length){this_len=str.length;}return str.substring(this_len-search.length,this_len)===search;}// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes |
|
|
function includes(str,search,start){if(typeof start!=='number'){start=0;}if(start+search.length>str.length){return false;}else{return str.indexOf(search,start)!==-1;}}createErrorType('ERR_INVALID_OPT_VALUE',function(name,value){return'The value "'+value+'" is invalid for option "'+name+'"';},TypeError);createErrorType('ERR_INVALID_ARG_TYPE',function(name,expected,actual){// determiner: 'must be' or 'must not be' |
|
|
var determiner;if(typeof expected==='string'&&startsWith(expected,'not ')){determiner='must not be';expected=expected.replace(/^not /,'');}else{determiner='must be';}var msg;if(endsWith(name,' argument')){// For cases like 'first argument' |
|
|
msg="The ".concat(name," ").concat(determiner," ").concat(oneOf(expected,'type'));}else{var type=includes(name,'.')?'property':'argument';msg="The \"".concat(name,"\" ").concat(type," ").concat(determiner," ").concat(oneOf(expected,'type'));}msg+=". Received type ".concat(_typeof2(actual));return msg;},TypeError);createErrorType('ERR_STREAM_PUSH_AFTER_EOF','stream.push() after EOF');createErrorType('ERR_METHOD_NOT_IMPLEMENTED',function(name){return'The '+name+' method is not implemented';});createErrorType('ERR_STREAM_PREMATURE_CLOSE','Premature close');createErrorType('ERR_STREAM_DESTROYED',function(name){return'Cannot call '+name+' after a stream was destroyed';});createErrorType('ERR_MULTIPLE_CALLBACK','Callback called multiple times');createErrorType('ERR_STREAM_CANNOT_PIPE','Cannot pipe, not readable');createErrorType('ERR_STREAM_WRITE_AFTER_END','write after end');createErrorType('ERR_STREAM_NULL_VALUES','May not write null values to stream',TypeError);createErrorType('ERR_UNKNOWN_ENCODING',function(arg){return'Unknown encoding: '+arg;},TypeError);createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT','stream.unshift() after end event');module.exports.codes=codes;},{}],454:[function(require,module,exports){(function(process){// Copyright Joyent, Inc. and other Node contributors. |
|
|
// |
|
|
// Permission is hereby granted, free of charge, to any person obtaining a |
|
|
// copy of this software and associated documentation files (the |
|
|
// "Software"), to deal in the Software without restriction, including |
|
|
// without limitation the rights to use, copy, modify, merge, publish, |
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit |
|
|
// persons to whom the Software is furnished to do so, subject to the |
|
|
// following conditions: |
|
|
// |
|
|
// The above copyright notice and this permission notice shall be included |
|
|
// in all copies or substantial portions of the Software. |
|
|
// |
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
|
// a duplex stream is just a stream that is both readable and writable. |
|
|
// Since JS doesn't have multiple prototypal inheritance, this class |
|
|
// prototypally inherits from Readable, and then parasitically from |
|
|
// Writable. |
|
|
'use strict';/*<replacement>*/var objectKeys=Object.keys||function(obj){var keys=[];for(var key in obj){keys.push(key);}return keys;};/*</replacement>*/module.exports=Duplex;var Readable=require('./_stream_readable');var Writable=require('./_stream_writable');require('inherits')(Duplex,Readable);{// Allow the keys array to be GC'ed. |
|
|
var keys=objectKeys(Writable.prototype);for(var v=0;v<keys.length;v++){var method=keys[v];if(!Duplex.prototype[method])Duplex.prototype[method]=Writable.prototype[method];}}function Duplex(options){if(!(this instanceof Duplex))return new Duplex(options);Readable.call(this,options);Writable.call(this,options);this.allowHalfOpen=true;if(options){if(options.readable===false)this.readable=false;if(options.writable===false)this.writable=false;if(options.allowHalfOpen===false){this.allowHalfOpen=false;this.once('end',onend);}}}Object.defineProperty(Duplex.prototype,'writableHighWaterMark',{// making it explicit this property is not enumerable |
|
|
// because otherwise some prototype manipulation in |
|
|
// userland will fail |
|
|
enumerable:false,get:function get(){return this._writableState.highWaterMark;}});Object.defineProperty(Duplex.prototype,'writableBuffer',{// making it explicit this property is not enumerable |
|
|
// because otherwise some prototype manipulation in |
|
|
// userland will fail |
|
|
enumerable:false,get:function get(){return this._writableState&&this._writableState.getBuffer();}});Object.defineProperty(Duplex.prototype,'writableLength',{// making it explicit this property is not enumerable |
|
|
// because otherwise some prototype manipulation in |
|
|
// userland will fail |
|
|
enumerable:false,get:function get(){return this._writableState.length;}});// the no-half-open enforcer |
|
|
function onend(){// If the writable side ended, then we're ok. |
|
|
if(this._writableState.ended)return;// no more data can be written. |
|
|
// But allow more writes to happen in this tick. |
|
|
process.nextTick(onEndNT,this);}function onEndNT(self){self.end();}Object.defineProperty(Duplex.prototype,'destroyed',{// making it explicit this property is not enumerable |
|
|
// because otherwise some prototype manipulation in |
|
|
// userland will fail |
|
|
enumerable:false,get:function get(){if(this._readableState===undefined||this._writableState===undefined){return false;}return this._readableState.destroyed&&this._writableState.destroyed;},set:function set(value){// we ignore the value if the stream |
|
|
// has not been initialized yet |
|
|
if(this._readableState===undefined||this._writableState===undefined){return;}// backward compatibility, the user is explicitly |
|
|
// managing destroyed |
|
|
this._readableState.destroyed=value;this._writableState.destroyed=value;}});}).call(this,require('_process'));},{"./_stream_readable":456,"./_stream_writable":458,"_process":443,"inherits":364}],455:[function(require,module,exports){// Copyright Joyent, Inc. and other Node contributors. |
|
|
// |
|
|
// Permission is hereby granted, free of charge, to any person obtaining a |
|
|
// copy of this software and associated documentation files (the |
|
|
// "Software"), to deal in the Software without restriction, including |
|
|
// without limitation the rights to use, copy, modify, merge, publish, |
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit |
|
|
// persons to whom the Software is furnished to do so, subject to the |
|
|
// following conditions: |
|
|
// |
|
|
// The above copyright notice and this permission notice shall be included |
|
|
// in all copies or substantial portions of the Software. |
|
|
// |
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
|
// a passthrough stream. |
|
|
// basically just the most minimal sort of Transform stream. |
|
|
// Every written chunk gets output as-is. |
|
|
'use strict';module.exports=PassThrough;var Transform=require('./_stream_transform');require('inherits')(PassThrough,Transform);function PassThrough(options){if(!(this instanceof PassThrough))return new PassThrough(options);Transform.call(this,options);}PassThrough.prototype._transform=function(chunk,encoding,cb){cb(null,chunk);};},{"./_stream_transform":457,"inherits":364}],456:[function(require,module,exports){(function(process,global){// Copyright Joyent, Inc. and other Node contributors. |
|
|
// |
|
|
// Permission is hereby granted, free of charge, to any person obtaining a |
|
|
// copy of this software and associated documentation files (the |
|
|
// "Software"), to deal in the Software without restriction, including |
|
|
// without limitation the rights to use, copy, modify, merge, publish, |
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit |
|
|
// persons to whom the Software is furnished to do so, subject to the |
|
|
// following conditions: |
|
|
// |
|
|
// The above copyright notice and this permission notice shall be included |
|
|
// in all copies or substantial portions of the Software. |
|
|
// |
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
|
'use strict';module.exports=Readable;/*<replacement>*/var Duplex;/*</replacement>*/Readable.ReadableState=ReadableState;/*<replacement>*/var EE=require('events').EventEmitter;var EElistenerCount=function EElistenerCount(emitter,type){return emitter.listeners(type).length;};/*</replacement>*/ /*<replacement>*/var Stream=require('./internal/streams/stream');/*</replacement>*/var Buffer=require('buffer').Buffer;var OurUint8Array=global.Uint8Array||function(){};function _uint8ArrayToBuffer(chunk){return Buffer.from(chunk);}function _isUint8Array(obj){return Buffer.isBuffer(obj)||obj instanceof OurUint8Array;}/*<replacement>*/var debugUtil=require('util');var debug;if(debugUtil&&debugUtil.debuglog){debug=debugUtil.debuglog('stream');}else{debug=function debug(){};}/*</replacement>*/var BufferList=require('./internal/streams/buffer_list');var destroyImpl=require('./internal/streams/destroy');var _require=require('./internal/streams/state'),getHighWaterMark=_require.getHighWaterMark;var _require$codes=require('../errors').codes,ERR_INVALID_ARG_TYPE=_require$codes.ERR_INVALID_ARG_TYPE,ERR_STREAM_PUSH_AFTER_EOF=_require$codes.ERR_STREAM_PUSH_AFTER_EOF,ERR_METHOD_NOT_IMPLEMENTED=_require$codes.ERR_METHOD_NOT_IMPLEMENTED,ERR_STREAM_UNSHIFT_AFTER_END_EVENT=_require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;// Lazy loaded to improve the startup performance. |
|
|
var StringDecoder;var createReadableStreamAsyncIterator;var from;require('inherits')(Readable,Stream);var errorOrDestroy=destroyImpl.errorOrDestroy;var kProxyEvents=['error','close','destroy','pause','resume'];function prependListener(emitter,event,fn){// Sadly this is not cacheable as some libraries bundle their own |
|
|
// event emitter implementation with them. |
|
|
if(typeof emitter.prependListener==='function')return emitter.prependListener(event,fn);// This is a hack to make sure that our error handler is attached before any |
|
|
// userland ones. NEVER DO THIS. This is here only because this code needs |
|
|
// to continue to work with older versions of Node.js that do not include |
|
|
// the prependListener() method. The goal is to eventually remove this hack. |
|
|
if(!emitter._events||!emitter._events[event])emitter.on(event,fn);else if(Array.isArray(emitter._events[event]))emitter._events[event].unshift(fn);else emitter._events[event]=[fn,emitter._events[event]];}function ReadableState(options,stream,isDuplex){Duplex=Duplex||require('./_stream_duplex');options=options||{};// Duplex streams are both readable and writable, but share |
|
|
// the same options object. |
|
|
// However, some cases require setting options to different |
|
|
// values for the readable and the writable sides of the duplex stream. |
|
|
// These options can be provided separately as readableXXX and writableXXX. |
|
|
if(typeof isDuplex!=='boolean')isDuplex=stream instanceof Duplex;// object stream flag. Used to make read(n) ignore n and to |
|
|
// make all the buffer merging and length checks go away |
|
|
this.objectMode=!!options.objectMode;if(isDuplex)this.objectMode=this.objectMode||!!options.readableObjectMode;// the point at which it stops calling _read() to fill the buffer |
|
|
// Note: 0 is a valid value, means "don't call _read preemptively ever" |
|
|
this.highWaterMark=getHighWaterMark(this,options,'readableHighWaterMark',isDuplex);// A linked list is used to store data chunks instead of an array because the |
|
|
// linked list can remove elements from the beginning faster than |
|
|
// array.shift() |
|
|
this.buffer=new BufferList();this.length=0;this.pipes=null;this.pipesCount=0;this.flowing=null;this.ended=false;this.endEmitted=false;this.reading=false;// a flag to be able to tell if the event 'readable'/'data' is emitted |
|
|
// immediately, or on a later tick. We set this to true at first, because |
|
|
// any actions that shouldn't happen until "later" should generally also |
|
|
// not happen before the first read call. |
|
|
this.sync=true;// whenever we return null, then we set a flag to say |
|
|
// that we're awaiting a 'readable' event emission. |
|
|
this.needReadable=false;this.emittedReadable=false;this.readableListening=false;this.resumeScheduled=false;this.paused=true;// Should close be emitted on destroy. Defaults to true. |
|
|
this.emitClose=options.emitClose!==false;// Should .destroy() be called after 'end' (and potentially 'finish') |
|
|
this.autoDestroy=!!options.autoDestroy;// has it been destroyed |
|
|
this.destroyed=false;// Crypto is kind of old and crusty. Historically, its default string |
|
|
// encoding is 'binary' so we have to make this configurable. |
|
|
// Everything else in the universe uses 'utf8', though. |
|
|
this.defaultEncoding=options.defaultEncoding||'utf8';// the number of writers that are awaiting a drain event in .pipe()s |
|
|
this.awaitDrain=0;// if true, a maybeReadMore has been scheduled |
|
|
this.readingMore=false;this.decoder=null;this.encoding=null;if(options.encoding){if(!StringDecoder)StringDecoder=require('string_decoder/').StringDecoder;this.decoder=new StringDecoder(options.encoding);this.encoding=options.encoding;}}function Readable(options){Duplex=Duplex||require('./_stream_duplex');if(!(this instanceof Readable))return new Readable(options);// Checking for a Stream.Duplex instance is faster here instead of inside |
|
|
// the ReadableState constructor, at least with V8 6.5 |
|
|
var isDuplex=this instanceof Duplex;this._readableState=new ReadableState(options,this,isDuplex);// legacy |
|
|
this.readable=true;if(options){if(typeof options.read==='function')this._read=options.read;if(typeof options.destroy==='function')this._destroy=options.destroy;}Stream.call(this);}Object.defineProperty(Readable.prototype,'destroyed',{// making it explicit this property is not enumerable |
|
|
// because otherwise some prototype manipulation in |
|
|
// userland will fail |
|
|
enumerable:false,get:function get(){if(this._readableState===undefined){return false;}return this._readableState.destroyed;},set:function set(value){// we ignore the value if the stream |
|
|
// has not been initialized yet |
|
|
if(!this._readableState){return;}// backward compatibility, the user is explicitly |
|
|
// managing destroyed |
|
|
this._readableState.destroyed=value;}});Readable.prototype.destroy=destroyImpl.destroy;Readable.prototype._undestroy=destroyImpl.undestroy;Readable.prototype._destroy=function(err,cb){cb(err);};// Manually shove something into the read() buffer. |
|
|
// This returns true if the highWaterMark has not been hit yet, |
|
|
// similar to how Writable.write() returns true if you should |
|
|
// write() some more. |
|
|
Readable.prototype.push=function(chunk,encoding){var state=this._readableState;var skipChunkCheck;if(!state.objectMode){if(typeof chunk==='string'){encoding=encoding||state.defaultEncoding;if(encoding!==state.encoding){chunk=Buffer.from(chunk,encoding);encoding='';}skipChunkCheck=true;}}else{skipChunkCheck=true;}return readableAddChunk(this,chunk,encoding,false,skipChunkCheck);};// Unshift should *always* be something directly out of read() |
|
|
Readable.prototype.unshift=function(chunk){return readableAddChunk(this,chunk,null,true,false);};function readableAddChunk(stream,chunk,encoding,addToFront,skipChunkCheck){debug('readableAddChunk',chunk);var state=stream._readableState;if(chunk===null){state.reading=false;onEofChunk(stream,state);}else{var er;if(!skipChunkCheck)er=chunkInvalid(state,chunk);if(er){errorOrDestroy(stream,er);}else if(state.objectMode||chunk&&chunk.length>0){if(typeof chunk!=='string'&&!state.objectMode&&Object.getPrototypeOf(chunk)!==Buffer.prototype){chunk=_uint8ArrayToBuffer(chunk);}if(addToFront){if(state.endEmitted)errorOrDestroy(stream,new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream,state,chunk,true);}else if(state.ended){errorOrDestroy(stream,new ERR_STREAM_PUSH_AFTER_EOF());}else if(state.destroyed){return false;}else{state.reading=false;if(state.decoder&&!encoding){chunk=state.decoder.write(chunk);if(state.objectMode||chunk.length!==0)addChunk(stream,state,chunk,false);else maybeReadMore(stream,state);}else{addChunk(stream,state,chunk,false);}}}else if(!addToFront){state.reading=false;maybeReadMore(stream,state);}}// We can push more data if we are below the highWaterMark. |
|
|
// Also, if we have no data yet, we can stand some more bytes. |
|
|
// This is to work around cases where hwm=0, such as the repl. |
|
|
return!state.ended&&(state.length<state.highWaterMark||state.length===0);}function addChunk(stream,state,chunk,addToFront){if(state.flowing&&state.length===0&&!state.sync){state.awaitDrain=0;stream.emit('data',chunk);}else{// update the buffer info. |
|
|
state.length+=state.objectMode?1:chunk.length;if(addToFront)state.buffer.unshift(chunk);else state.buffer.push(chunk);if(state.needReadable)emitReadable(stream);}maybeReadMore(stream,state);}function chunkInvalid(state,chunk){var er;if(!_isUint8Array(chunk)&&typeof chunk!=='string'&&chunk!==undefined&&!state.objectMode){er=new ERR_INVALID_ARG_TYPE('chunk',['string','Buffer','Uint8Array'],chunk);}return er;}Readable.prototype.isPaused=function(){return this._readableState.flowing===false;};// backwards compatibility. |
|
|
Readable.prototype.setEncoding=function(enc){if(!StringDecoder)StringDecoder=require('string_decoder/').StringDecoder;var decoder=new StringDecoder(enc);this._readableState.decoder=decoder;// If setEncoding(null), decoder.encoding equals utf8 |
|
|
this._readableState.encoding=this._readableState.decoder.encoding;// Iterate over current buffer to convert already stored Buffers: |
|
|
var p=this._readableState.buffer.head;var content='';while(p!==null){content+=decoder.write(p.data);p=p.next;}this._readableState.buffer.clear();if(content!=='')this._readableState.buffer.push(content);this._readableState.length=content.length;return this;};// Don't raise the hwm > 1GB |
|
|
var MAX_HWM=0x40000000;function computeNewHighWaterMark(n){if(n>=MAX_HWM){// TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE. |
|
|
n=MAX_HWM;}else{// Get the next highest power of 2 to prevent increasing hwm excessively in |
|
|
// tiny amounts |
|
|
n--;n|=n>>>1;n|=n>>>2;n|=n>>>4;n|=n>>>8;n|=n>>>16;n++;}return n;}// This function is designed to be inlinable, so please take care when making |
|
|
// changes to the function body. |
|
|
function howMuchToRead(n,state){if(n<=0||state.length===0&&state.ended)return 0;if(state.objectMode)return 1;if(n!==n){// Only flow one buffer at a time |
|
|
if(state.flowing&&state.length)return state.buffer.head.data.length;else return state.length;}// If we're asking for more than the current hwm, then raise the hwm. |
|
|
if(n>state.highWaterMark)state.highWaterMark=computeNewHighWaterMark(n);if(n<=state.length)return n;// Don't have enough |
|
|
if(!state.ended){state.needReadable=true;return 0;}return state.length;}// you can override either this method, or the async _read(n) below. |
|
|
Readable.prototype.read=function(n){debug('read',n);n=parseInt(n,10);var state=this._readableState;var nOrig=n;if(n!==0)state.emittedReadable=false;// if we're doing read(0) to trigger a readable event, but we |
|
|
// already have a bunch of data in the buffer, then just trigger |
|
|
// the 'readable' event and move on. |
|
|
if(n===0&&state.needReadable&&((state.highWaterMark!==0?state.length>=state.highWaterMark:state.length>0)||state.ended)){debug('read: emitReadable',state.length,state.ended);if(state.length===0&&state.ended)endReadable(this);else emitReadable(this);return null;}n=howMuchToRead(n,state);// if we've ended, and we're now clear, then finish it up. |
|
|
if(n===0&&state.ended){if(state.length===0)endReadable(this);return null;}// All the actual chunk generation logic needs to be |
|
|
// *below* the call to _read. The reason is that in certain |
|
|
// synthetic stream cases, such as passthrough streams, _read |
|
|
// may be a completely synchronous operation which may change |
|
|
// the state of the read buffer, providing enough data when |
|
|
// before there was *not* enough. |
|
|
// |
|
|
// So, the steps are: |
|
|
// 1. Figure out what the state of things will be after we do |
|
|
// a read from the buffer. |
|
|
// |
|
|
// 2. If that resulting state will trigger a _read, then call _read. |
|
|
// Note that this may be asynchronous, or synchronous. Yes, it is |
|
|
// deeply ugly to write APIs this way, but that still doesn't mean |
|
|
// that the Readable class should behave improperly, as streams are |
|
|
// designed to be sync/async agnostic. |
|
|
// Take note if the _read call is sync or async (ie, if the read call |
|
|
// has returned yet), so that we know whether or not it's safe to emit |
|
|
// 'readable' etc. |
|
|
// |
|
|
// 3. Actually pull the requested chunks out of the buffer and return. |
|
|
// if we need a readable event, then we need to do some reading. |
|
|
var doRead=state.needReadable;debug('need readable',doRead);// if we currently have less than the highWaterMark, then also read some |
|
|
if(state.length===0||state.length-n<state.highWaterMark){doRead=true;debug('length less than watermark',doRead);}// however, if we've ended, then there's no point, and if we're already |
|
|
// reading, then it's unnecessary. |
|
|
if(state.ended||state.reading){doRead=false;debug('reading or ended',doRead);}else if(doRead){debug('do read');state.reading=true;state.sync=true;// if the length is currently zero, then we *need* a readable event. |
|
|
if(state.length===0)state.needReadable=true;// call internal read method |
|
|
this._read(state.highWaterMark);state.sync=false;// If _read pushed data synchronously, then `reading` will be false, |
|
|
// and we need to re-evaluate how much data we can return to the user. |
|
|
if(!state.reading)n=howMuchToRead(nOrig,state);}var ret;if(n>0)ret=fromList(n,state);else ret=null;if(ret===null){state.needReadable=state.length<=state.highWaterMark;n=0;}else{state.length-=n;state.awaitDrain=0;}if(state.length===0){// If we have nothing in the buffer, then we want to know |
|
|
// as soon as we *do* get something into the buffer. |
|
|
if(!state.ended)state.needReadable=true;// If we tried to read() past the EOF, then emit end on the next tick. |
|
|
if(nOrig!==n&&state.ended)endReadable(this);}if(ret!==null)this.emit('data',ret);return ret;};function onEofChunk(stream,state){debug('onEofChunk');if(state.ended)return;if(state.decoder){var chunk=state.decoder.end();if(chunk&&chunk.length){state.buffer.push(chunk);state.length+=state.objectMode?1:chunk.length;}}state.ended=true;if(state.sync){// if we are sync, wait until next tick to emit the data. |
|
|
// Otherwise we risk emitting data in the flow() |
|
|
// the readable code triggers during a read() call |
|
|
emitReadable(stream);}else{// emit 'readable' now to make sure it gets picked up. |
|
|
state.needReadable=false;if(!state.emittedReadable){state.emittedReadable=true;emitReadable_(stream);}}}// Don't emit readable right away in sync mode, because this can trigger |
|
|
// another read() call => stack overflow. This way, it might trigger |
|
|
// a nextTick recursion warning, but that's not so bad. |
|
|
function emitReadable(stream){var state=stream._readableState;debug('emitReadable',state.needReadable,state.emittedReadable);state.needReadable=false;if(!state.emittedReadable){debug('emitReadable',state.flowing);state.emittedReadable=true;process.nextTick(emitReadable_,stream);}}function emitReadable_(stream){var state=stream._readableState;debug('emitReadable_',state.destroyed,state.length,state.ended);if(!state.destroyed&&(state.length||state.ended)){stream.emit('readable');state.emittedReadable=false;}// The stream needs another readable event if |
|
|
// 1. It is not flowing, as the flow mechanism will take |
|
|
// care of it. |
|
|
// 2. It is not ended. |
|
|
// 3. It is below the highWaterMark, so we can schedule |
|
|
// another readable later. |
|
|
state.needReadable=!state.flowing&&!state.ended&&state.length<=state.highWaterMark;flow(stream);}// at this point, the user has presumably seen the 'readable' event, |
|
|
// and called read() to consume some data. that may have triggered |
|
|
// in turn another _read(n) call, in which case reading = true if |
|
|
// it's in progress. |
|
|
// However, if we're not ended, or reading, and the length < hwm, |
|
|
// then go ahead and try to read some more preemptively. |
|
|
function maybeReadMore(stream,state){if(!state.readingMore){state.readingMore=true;process.nextTick(maybeReadMore_,stream,state);}}function maybeReadMore_(stream,state){// Attempt to read more data if we should. |
|
|
// |
|
|
// The conditions for reading more data are (one of): |
|
|
// - Not enough data buffered (state.length < state.highWaterMark). The loop |
|
|
// is responsible for filling the buffer with enough data if such data |
|
|
// is available. If highWaterMark is 0 and we are not in the flowing mode |
|
|
// we should _not_ attempt to buffer any extra data. We'll get more data |
|
|
// when the stream consumer calls read() instead. |
|
|
// - No data in the buffer, and the stream is in flowing mode. In this mode |
|
|
// the loop below is responsible for ensuring read() is called. Failing to |
|
|
// call read here would abort the flow and there's no other mechanism for |
|
|
// continuing the flow if the stream consumer has just subscribed to the |
|
|
// 'data' event. |
|
|
// |
|
|
// In addition to the above conditions to keep reading data, the following |
|
|
// conditions prevent the data from being read: |
|
|
// - The stream has ended (state.ended). |
|
|
// - There is already a pending 'read' operation (state.reading). This is a |
|
|
// case where the the stream has called the implementation defined _read() |
|
|
// method, but they are processing the call asynchronously and have _not_ |
|
|
// called push() with new data. In this case we skip performing more |
|
|
// read()s. The execution ends in this method again after the _read() ends |
|
|
// up calling push() with more data. |
|
|
while(!state.reading&&!state.ended&&(state.length<state.highWaterMark||state.flowing&&state.length===0)){var len=state.length;debug('maybeReadMore read 0');stream.read(0);if(len===state.length)// didn't get any data, stop spinning. |
|
|
break;}state.readingMore=false;}// abstract method. to be overridden in specific implementation classes. |
|
|
// call cb(er, data) where data is <= n in length. |
|
|
// for virtual (non-string, non-buffer) streams, "length" is somewhat |
|
|
// arbitrary, and perhaps not very meaningful. |
|
|
Readable.prototype._read=function(n){errorOrDestroy(this,new ERR_METHOD_NOT_IMPLEMENTED('_read()'));};Readable.prototype.pipe=function(dest,pipeOpts){var src=this;var state=this._readableState;switch(state.pipesCount){case 0:state.pipes=dest;break;case 1:state.pipes=[state.pipes,dest];break;default:state.pipes.push(dest);break;}state.pipesCount+=1;debug('pipe count=%d opts=%j',state.pipesCount,pipeOpts);var doEnd=(!pipeOpts||pipeOpts.end!==false)&&dest!==process.stdout&&dest!==process.stderr;var endFn=doEnd?onend:unpipe;if(state.endEmitted)process.nextTick(endFn);else src.once('end',endFn);dest.on('unpipe',onunpipe);function onunpipe(readable,unpipeInfo){debug('onunpipe');if(readable===src){if(unpipeInfo&&unpipeInfo.hasUnpiped===false){unpipeInfo.hasUnpiped=true;cleanup();}}}function onend(){debug('onend');dest.end();}// when the dest drains, it reduces the awaitDrain counter |
|
|
// on the source. This would be more elegant with a .once() |
|
|
// handler in flow(), but adding and removing repeatedly is |
|
|
// too slow. |
|
|
var ondrain=pipeOnDrain(src);dest.on('drain',ondrain);var cleanedUp=false;function cleanup(){debug('cleanup');// cleanup event handlers once the pipe is broken |
|
|
dest.removeListener('close',onclose);dest.removeListener('finish',onfinish);dest.removeListener('drain',ondrain);dest.removeListener('error',onerror);dest.removeListener('unpipe',onunpipe);src.removeListener('end',onend);src.removeListener('end',unpipe);src.removeListener('data',ondata);cleanedUp=true;// if the reader is waiting for a drain event from this |
|
|
// specific writer, then it would cause it to never start |
|
|
// flowing again. |
|
|
// So, if this is awaiting a drain, then we just call it now. |
|
|
// If we don't know, then assume that we are waiting for one. |
|
|
if(state.awaitDrain&&(!dest._writableState||dest._writableState.needDrain))ondrain();}src.on('data',ondata);function ondata(chunk){debug('ondata');var ret=dest.write(chunk);debug('dest.write',ret);if(ret===false){// If the user unpiped during `dest.write()`, it is possible |
|
|
// to get stuck in a permanently paused state if that write |
|
|
// also returned false. |
|
|
// => Check whether `dest` is still a piping destination. |
|
|
if((state.pipesCount===1&&state.pipes===dest||state.pipesCount>1&&indexOf(state.pipes,dest)!==-1)&&!cleanedUp){debug('false write response, pause',state.awaitDrain);state.awaitDrain++;}src.pause();}}// if the dest has an error, then stop piping into it. |
|
|
// however, don't suppress the throwing behavior for this. |
|
|
function onerror(er){debug('onerror',er);unpipe();dest.removeListener('error',onerror);if(EElistenerCount(dest,'error')===0)errorOrDestroy(dest,er);}// Make sure our error handler is attached before userland ones. |
|
|
prependListener(dest,'error',onerror);// Both close and finish should trigger unpipe, but only once. |
|
|
function onclose(){dest.removeListener('finish',onfinish);unpipe();}dest.once('close',onclose);function onfinish(){debug('onfinish');dest.removeListener('close',onclose);unpipe();}dest.once('finish',onfinish);function unpipe(){debug('unpipe');src.unpipe(dest);}// tell the dest that it's being piped to |
|
|
dest.emit('pipe',src);// start the flow if it hasn't been started already. |
|
|
if(!state.flowing){debug('pipe resume');src.resume();}return dest;};function pipeOnDrain(src){return function pipeOnDrainFunctionResult(){var state=src._readableState;debug('pipeOnDrain',state.awaitDrain);if(state.awaitDrain)state.awaitDrain--;if(state.awaitDrain===0&&EElistenerCount(src,'data')){state.flowing=true;flow(src);}};}Readable.prototype.unpipe=function(dest){var state=this._readableState;var unpipeInfo={hasUnpiped:false};// if we're not piping anywhere, then do nothing. |
|
|
if(state.pipesCount===0)return this;// just one destination. most common case. |
|
|
if(state.pipesCount===1){// passed in one, but it's not the right one. |
|
|
if(dest&&dest!==state.pipes)return this;if(!dest)dest=state.pipes;// got a match. |
|
|
state.pipes=null;state.pipesCount=0;state.flowing=false;if(dest)dest.emit('unpipe',this,unpipeInfo);return this;}// slow case. multiple pipe destinations. |
|
|
if(!dest){// remove all. |
|
|
var dests=state.pipes;var len=state.pipesCount;state.pipes=null;state.pipesCount=0;state.flowing=false;for(var i=0;i<len;i++){dests[i].emit('unpipe',this,{hasUnpiped:false});}return this;}// try to find the right one. |
|
|
var index=indexOf(state.pipes,dest);if(index===-1)return this;state.pipes.splice(index,1);state.pipesCount-=1;if(state.pipesCount===1)state.pipes=state.pipes[0];dest.emit('unpipe',this,unpipeInfo);return this;};// set up data events if they are asked for |
|
|
// Ensure readable listeners eventually get something |
|
|
Readable.prototype.on=function(ev,fn){var res=Stream.prototype.on.call(this,ev,fn);var state=this._readableState;if(ev==='data'){// update readableListening so that resume() may be a no-op |
|
|
// a few lines down. This is needed to support once('readable'). |
|
|
state.readableListening=this.listenerCount('readable')>0;// Try start flowing on next tick if stream isn't explicitly paused |
|
|
if(state.flowing!==false)this.resume();}else if(ev==='readable'){if(!state.endEmitted&&!state.readableListening){state.readableListening=state.needReadable=true;state.flowing=false;state.emittedReadable=false;debug('on readable',state.length,state.reading);if(state.length){emitReadable(this);}else if(!state.reading){process.nextTick(nReadingNextTick,this);}}}return res;};Readable.prototype.addListener=Readable.prototype.on;Readable.prototype.removeListener=function(ev,fn){var res=Stream.prototype.removeListener.call(this,ev,fn);if(ev==='readable'){// We need to check if there is someone still listening to |
|
|
// readable and reset the state. However this needs to happen |
|
|
// after readable has been emitted but before I/O (nextTick) to |
|
|
// support once('readable', fn) cycles. This means that calling |
|
|
// resume within the same tick will have no |
|
|
// effect. |
|
|
process.nextTick(updateReadableListening,this);}return res;};Readable.prototype.removeAllListeners=function(ev){var res=Stream.prototype.removeAllListeners.apply(this,arguments);if(ev==='readable'||ev===undefined){// We need to check if there is someone still listening to |
|
|
// readable and reset the state. However this needs to happen |
|
|
// after readable has been emitted but before I/O (nextTick) to |
|
|
// support once('readable', fn) cycles. This means that calling |
|
|
// resume within the same tick will have no |
|
|
// effect. |
|
|
process.nextTick(updateReadableListening,this);}return res;};function updateReadableListening(self){var state=self._readableState;state.readableListening=self.listenerCount('readable')>0;if(state.resumeScheduled&&!state.paused){// flowing needs to be set to true now, otherwise |
|
|
// the upcoming resume will not flow. |
|
|
state.flowing=true;// crude way to check if we should resume |
|
|
}else if(self.listenerCount('data')>0){self.resume();}}function nReadingNextTick(self){debug('readable nexttick read 0');self.read(0);}// pause() and resume() are remnants of the legacy readable stream API |
|
|
// If the user uses them, then switch into old mode. |
|
|
Readable.prototype.resume=function(){var state=this._readableState;if(!state.flowing){debug('resume');// we flow only if there is no one listening |
|
|
// for readable, but we still have to call |
|
|
// resume() |
|
|
state.flowing=!state.readableListening;resume(this,state);}state.paused=false;return this;};function resume(stream,state){if(!state.resumeScheduled){state.resumeScheduled=true;process.nextTick(resume_,stream,state);}}function resume_(stream,state){debug('resume',state.reading);if(!state.reading){stream.read(0);}state.resumeScheduled=false;stream.emit('resume');flow(stream);if(state.flowing&&!state.reading)stream.read(0);}Readable.prototype.pause=function(){debug('call pause flowing=%j',this._readableState.flowing);if(this._readableState.flowing!==false){debug('pause');this._readableState.flowing=false;this.emit('pause');}this._readableState.paused=true;return this;};function flow(stream){var state=stream._readableState;debug('flow',state.flowing);while(state.flowing&&stream.read()!==null){;}}// wrap an old-style stream as the async data source. |
|
|
// This is *not* part of the readable stream interface. |
|
|
// It is an ugly unfortunate mess of history. |
|
|
Readable.prototype.wrap=function(stream){var _this=this;var state=this._readableState;var paused=false;stream.on('end',function(){debug('wrapped end');if(state.decoder&&!state.ended){var chunk=state.decoder.end();if(chunk&&chunk.length)_this.push(chunk);}_this.push(null);});stream.on('data',function(chunk){debug('wrapped data');if(state.decoder)chunk=state.decoder.write(chunk);// don't skip over falsy values in objectMode |
|
|
if(state.objectMode&&(chunk===null||chunk===undefined))return;else if(!state.objectMode&&(!chunk||!chunk.length))return;var ret=_this.push(chunk);if(!ret){paused=true;stream.pause();}});// proxy all the other methods. |
|
|
// important when wrapping filters and duplexes. |
|
|
for(var i in stream){if(this[i]===undefined&&typeof stream[i]==='function'){this[i]=function methodWrap(method){return function methodWrapReturnFunction(){return stream[method].apply(stream,arguments);};}(i);}}// proxy certain important events. |
|
|
for(var n=0;n<kProxyEvents.length;n++){stream.on(kProxyEvents[n],this.emit.bind(this,kProxyEvents[n]));}// when we try to consume some more bytes, simply unpause the |
|
|
// underlying stream. |
|
|
this._read=function(n){debug('wrapped _read',n);if(paused){paused=false;stream.resume();}};return this;};if(typeof Symbol==='function'){Readable.prototype[Symbol.asyncIterator]=function(){if(createReadableStreamAsyncIterator===undefined){createReadableStreamAsyncIterator=require('./internal/streams/async_iterator');}return createReadableStreamAsyncIterator(this);};}Object.defineProperty(Readable.prototype,'readableHighWaterMark',{// making it explicit this property is not enumerable |
|
|
// because otherwise some prototype manipulation in |
|
|
// userland will fail |
|
|
enumerable:false,get:function get(){return this._readableState.highWaterMark;}});Object.defineProperty(Readable.prototype,'readableBuffer',{// making it explicit this property is not enumerable |
|
|
// because otherwise some prototype manipulation in |
|
|
// userland will fail |
|
|
enumerable:false,get:function get(){return this._readableState&&this._readableState.buffer;}});Object.defineProperty(Readable.prototype,'readableFlowing',{// making it explicit this property is not enumerable |
|
|
// because otherwise some prototype manipulation in |
|
|
// userland will fail |
|
|
enumerable:false,get:function get(){return this._readableState.flowing;},set:function set(state){if(this._readableState){this._readableState.flowing=state;}}});// exposed for testing purposes only. |
|
|
Readable._fromList=fromList;Object.defineProperty(Readable.prototype,'readableLength',{// making it explicit this property is not enumerable |
|
|
// because otherwise some prototype manipulation in |
|
|
// userland will fail |
|
|
enumerable:false,get:function get(){return this._readableState.length;}});// Pluck off n bytes from an array of buffers. |
|
|
// Length is the combined lengths of all the buffers in the list. |
|
|
// This function is designed to be inlinable, so please take care when making |
|
|
// changes to the function body. |
|
|
function fromList(n,state){// nothing buffered |
|
|
if(state.length===0)return null;var ret;if(state.objectMode)ret=state.buffer.shift();else if(!n||n>=state.length){// read it all, truncate the list |
|
|
if(state.decoder)ret=state.buffer.join('');else if(state.buffer.length===1)ret=state.buffer.first();else ret=state.buffer.concat(state.length);state.buffer.clear();}else{// read part of list |
|
|
ret=state.buffer.consume(n,state.decoder);}return ret;}function endReadable(stream){var state=stream._readableState;debug('endReadable',state.endEmitted);if(!state.endEmitted){state.ended=true;process.nextTick(endReadableNT,state,stream);}}function endReadableNT(state,stream){debug('endReadableNT',state.endEmitted,state.length);// Check that we didn't get one last unshift. |
|
|
if(!state.endEmitted&&state.length===0){state.endEmitted=true;stream.readable=false;stream.emit('end');if(state.autoDestroy){// In case of duplex streams we need a way to detect |
|
|
// if the writable side is ready for autoDestroy as well |
|
|
var wState=stream._writableState;if(!wState||wState.autoDestroy&&wState.finished){stream.destroy();}}}}if(typeof Symbol==='function'){Readable.from=function(iterable,opts){if(from===undefined){from=require('./internal/streams/from');}return from(Readable,iterable,opts);};}function indexOf(xs,x){for(var i=0,l=xs.length;i<l;i++){if(xs[i]===x)return i;}return-1;}}).call(this,require('_process'),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{"../errors":453,"./_stream_duplex":454,"./internal/streams/async_iterator":459,"./internal/streams/buffer_list":460,"./internal/streams/destroy":461,"./internal/streams/from":463,"./internal/streams/state":465,"./internal/streams/stream":466,"_process":443,"buffer":214,"events":344,"inherits":364,"string_decoder/":495,"util":183}],457:[function(require,module,exports){// Copyright Joyent, Inc. and other Node contributors. |
|
|
// |
|
|
// Permission is hereby granted, free of charge, to any person obtaining a |
|
|
// copy of this software and associated documentation files (the |
|
|
// "Software"), to deal in the Software without restriction, including |
|
|
// without limitation the rights to use, copy, modify, merge, publish, |
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit |
|
|
// persons to whom the Software is furnished to do so, subject to the |
|
|
// following conditions: |
|
|
// |
|
|
// The above copyright notice and this permission notice shall be included |
|
|
// in all copies or substantial portions of the Software. |
|
|
// |
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
|
// a transform stream is a readable/writable stream where you do |
|
|
// something with the data. Sometimes it's called a "filter", |
|
|
// but that's not a great name for it, since that implies a thing where |
|
|
// some bits pass through, and others are simply ignored. (That would |
|
|
// be a valid example of a transform, of course.) |
|
|
// |
|
|
// While the output is causally related to the input, it's not a |
|
|
// necessarily symmetric or synchronous transformation. For example, |
|
|
// a zlib stream might take multiple plain-text writes(), and then |
|
|
// emit a single compressed chunk some time in the future. |
|
|
// |
|
|
// Here's how this works: |
|
|
// |
|
|
// The Transform stream has all the aspects of the readable and writable |
|
|
// stream classes. When you write(chunk), that calls _write(chunk,cb) |
|
|
// internally, and returns false if there's a lot of pending writes |
|
|
// buffered up. When you call read(), that calls _read(n) until |
|
|
// there's enough pending readable data buffered up. |
|
|
// |
|
|
// In a transform stream, the written data is placed in a buffer. When |
|
|
// _read(n) is called, it transforms the queued up data, calling the |
|
|
// buffered _write cb's as it consumes chunks. If consuming a single |
|
|
// written chunk would result in multiple output chunks, then the first |
|
|
// outputted bit calls the readcb, and subsequent chunks just go into |
|
|
// the read buffer, and will cause it to emit 'readable' if necessary. |
|
|
// |
|
|
// This way, back-pressure is actually determined by the reading side, |
|
|
// since _read has to be called to start processing a new chunk. However, |
|
|
// a pathological inflate type of transform can cause excessive buffering |
|
|
// here. For example, imagine a stream where every byte of input is |
|
|
// interpreted as an integer from 0-255, and then results in that many |
|
|
// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in |
|
|
// 1kb of data being output. In this case, you could write a very small |
|
|
// amount of input, and end up with a very large amount of output. In |
|
|
// such a pathological inflating mechanism, there'd be no way to tell |
|
|
// the system to stop doing the transform. A single 4MB write could |
|
|
// cause the system to run out of memory. |
|
|
// |
|
|
// However, even in such a pathological case, only a single written chunk |
|
|
// would be consumed, and then the rest would wait (un-transformed) until |
|
|
// the results of the previous transformed chunk were consumed. |
|
|
'use strict';module.exports=Transform;var _require$codes=require('../errors').codes,ERR_METHOD_NOT_IMPLEMENTED=_require$codes.ERR_METHOD_NOT_IMPLEMENTED,ERR_MULTIPLE_CALLBACK=_require$codes.ERR_MULTIPLE_CALLBACK,ERR_TRANSFORM_ALREADY_TRANSFORMING=_require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,ERR_TRANSFORM_WITH_LENGTH_0=_require$codes.ERR_TRANSFORM_WITH_LENGTH_0;var Duplex=require('./_stream_duplex');require('inherits')(Transform,Duplex);function afterTransform(er,data){var ts=this._transformState;ts.transforming=false;var cb=ts.writecb;if(cb===null){return this.emit('error',new ERR_MULTIPLE_CALLBACK());}ts.writechunk=null;ts.writecb=null;if(data!=null)// single equals check for both `null` and `undefined` |
|
|
this.push(data);cb(er);var rs=this._readableState;rs.reading=false;if(rs.needReadable||rs.length<rs.highWaterMark){this._read(rs.highWaterMark);}}function Transform(options){if(!(this instanceof Transform))return new Transform(options);Duplex.call(this,options);this._transformState={afterTransform:afterTransform.bind(this),needTransform:false,transforming:false,writecb:null,writechunk:null,writeencoding:null};// start out asking for a readable event once data is transformed. |
|
|
this._readableState.needReadable=true;// we have implemented the _read method, and done the other things |
|
|
// that Readable wants before the first _read call, so unset the |
|
|
// sync guard flag. |
|
|
this._readableState.sync=false;if(options){if(typeof options.transform==='function')this._transform=options.transform;if(typeof options.flush==='function')this._flush=options.flush;}// When the writable side finishes, then flush out anything remaining. |
|
|
this.on('prefinish',prefinish);}function prefinish(){var _this=this;if(typeof this._flush==='function'&&!this._readableState.destroyed){this._flush(function(er,data){done(_this,er,data);});}else{done(this,null,null);}}Transform.prototype.push=function(chunk,encoding){this._transformState.needTransform=false;return Duplex.prototype.push.call(this,chunk,encoding);};// This is the part where you do stuff! |
|
|
// override this function in implementation classes. |
|
|
// 'chunk' is an input chunk. |
|
|
// |
|
|
// Call `push(newChunk)` to pass along transformed output |
|
|
// to the readable side. You may call 'push' zero or more times. |
|
|
// |
|
|
// Call `cb(err)` when you are done with this chunk. If you pass |
|
|
// an error, then that'll put the hurt on the whole operation. If you |
|
|
// never call cb(), then you'll never get another chunk. |
|
|
Transform.prototype._transform=function(chunk,encoding,cb){cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));};Transform.prototype._write=function(chunk,encoding,cb){var ts=this._transformState;ts.writecb=cb;ts.writechunk=chunk;ts.writeencoding=encoding;if(!ts.transforming){var rs=this._readableState;if(ts.needTransform||rs.needReadable||rs.length<rs.highWaterMark)this._read(rs.highWaterMark);}};// Doesn't matter what the args are here. |
|
|
// _transform does all the work. |
|
|
// That we got here means that the readable side wants more data. |
|
|
Transform.prototype._read=function(n){var ts=this._transformState;if(ts.writechunk!==null&&!ts.transforming){ts.transforming=true;this._transform(ts.writechunk,ts.writeencoding,ts.afterTransform);}else{// mark that we need a transform, so that any data that comes in |
|
|
// will get processed, now that we've asked for it. |
|
|
ts.needTransform=true;}};Transform.prototype._destroy=function(err,cb){Duplex.prototype._destroy.call(this,err,function(err2){cb(err2);});};function done(stream,er,data){if(er)return stream.emit('error',er);if(data!=null)// single equals check for both `null` and `undefined` |
|
|
stream.push(data);// TODO(BridgeAR): Write a test for these two error cases |
|
|
// if there's nothing in the write buffer, then that means |
|
|
// that nothing more will ever be provided |
|
|
if(stream._writableState.length)throw new ERR_TRANSFORM_WITH_LENGTH_0();if(stream._transformState.transforming)throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();return stream.push(null);}},{"../errors":453,"./_stream_duplex":454,"inherits":364}],458:[function(require,module,exports){(function(process,global){// Copyright Joyent, Inc. and other Node contributors. |
|
|
// |
|
|
// Permission is hereby granted, free of charge, to any person obtaining a |
|
|
// copy of this software and associated documentation files (the |
|
|
// "Software"), to deal in the Software without restriction, including |
|
|
// without limitation the rights to use, copy, modify, merge, publish, |
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit |
|
|
// persons to whom the Software is furnished to do so, subject to the |
|
|
// following conditions: |
|
|
// |
|
|
// The above copyright notice and this permission notice shall be included |
|
|
// in all copies or substantial portions of the Software. |
|
|
// |
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
|
// A bit simpler than readable streams. |
|
|
// Implement an async ._write(chunk, encoding, cb), and it'll handle all |
|
|
// the drain event emission and buffering. |
|
|
'use strict';module.exports=Writable;/* <replacement> */function WriteReq(chunk,encoding,cb){this.chunk=chunk;this.encoding=encoding;this.callback=cb;this.next=null;}// It seems a linked list but it is not |
|
|
// there will be only 2 of these for each stream |
|
|
function CorkedRequest(state){var _this=this;this.next=null;this.entry=null;this.finish=function(){onCorkedFinish(_this,state);};}/* </replacement> */ /*<replacement>*/var Duplex;/*</replacement>*/Writable.WritableState=WritableState;/*<replacement>*/var internalUtil={deprecate:require('util-deprecate')};/*</replacement>*/ /*<replacement>*/var Stream=require('./internal/streams/stream');/*</replacement>*/var Buffer=require('buffer').Buffer;var OurUint8Array=global.Uint8Array||function(){};function _uint8ArrayToBuffer(chunk){return Buffer.from(chunk);}function _isUint8Array(obj){return Buffer.isBuffer(obj)||obj instanceof OurUint8Array;}var destroyImpl=require('./internal/streams/destroy');var _require=require('./internal/streams/state'),getHighWaterMark=_require.getHighWaterMark;var _require$codes=require('../errors').codes,ERR_INVALID_ARG_TYPE=_require$codes.ERR_INVALID_ARG_TYPE,ERR_METHOD_NOT_IMPLEMENTED=_require$codes.ERR_METHOD_NOT_IMPLEMENTED,ERR_MULTIPLE_CALLBACK=_require$codes.ERR_MULTIPLE_CALLBACK,ERR_STREAM_CANNOT_PIPE=_require$codes.ERR_STREAM_CANNOT_PIPE,ERR_STREAM_DESTROYED=_require$codes.ERR_STREAM_DESTROYED,ERR_STREAM_NULL_VALUES=_require$codes.ERR_STREAM_NULL_VALUES,ERR_STREAM_WRITE_AFTER_END=_require$codes.ERR_STREAM_WRITE_AFTER_END,ERR_UNKNOWN_ENCODING=_require$codes.ERR_UNKNOWN_ENCODING;var errorOrDestroy=destroyImpl.errorOrDestroy;require('inherits')(Writable,Stream);function nop(){}function WritableState(options,stream,isDuplex){Duplex=Duplex||require('./_stream_duplex');options=options||{};// Duplex streams are both readable and writable, but share |
|
|
// the same options object. |
|
|
// However, some cases require setting options to different |
|
|
// values for the readable and the writable sides of the duplex stream, |
|
|
// e.g. options.readableObjectMode vs. options.writableObjectMode, etc. |
|
|
if(typeof isDuplex!=='boolean')isDuplex=stream instanceof Duplex;// object stream flag to indicate whether or not this stream |
|
|
// contains buffers or objects. |
|
|
this.objectMode=!!options.objectMode;if(isDuplex)this.objectMode=this.objectMode||!!options.writableObjectMode;// the point at which write() starts returning false |
|
|
// Note: 0 is a valid value, means that we always return false if |
|
|
// the entire buffer is not flushed immediately on write() |
|
|
this.highWaterMark=getHighWaterMark(this,options,'writableHighWaterMark',isDuplex);// if _final has been called |
|
|
this.finalCalled=false;// drain event flag. |
|
|
this.needDrain=false;// at the start of calling end() |
|
|
this.ending=false;// when end() has been called, and returned |
|
|
this.ended=false;// when 'finish' is emitted |
|
|
this.finished=false;// has it been destroyed |
|
|
this.destroyed=false;// should we decode strings into buffers before passing to _write? |
|
|
// this is here so that some node-core streams can optimize string |
|
|
// handling at a lower level. |
|
|
var noDecode=options.decodeStrings===false;this.decodeStrings=!noDecode;// Crypto is kind of old and crusty. Historically, its default string |
|
|
// encoding is 'binary' so we have to make this configurable. |
|
|
// Everything else in the universe uses 'utf8', though. |
|
|
this.defaultEncoding=options.defaultEncoding||'utf8';// not an actual buffer we keep track of, but a measurement |
|
|
// of how much we're waiting to get pushed to some underlying |
|
|
// socket or file. |
|
|
this.length=0;// a flag to see when we're in the middle of a write. |
|
|
this.writing=false;// when true all writes will be buffered until .uncork() call |
|
|
this.corked=0;// a flag to be able to tell if the onwrite cb is called immediately, |
|
|
// or on a later tick. We set this to true at first, because any |
|
|
// actions that shouldn't happen until "later" should generally also |
|
|
// not happen before the first write call. |
|
|
this.sync=true;// a flag to know if we're processing previously buffered items, which |
|
|
// may call the _write() callback in the same tick, so that we don't |
|
|
// end up in an overlapped onwrite situation. |
|
|
this.bufferProcessing=false;// the callback that's passed to _write(chunk,cb) |
|
|
this.onwrite=function(er){onwrite(stream,er);};// the callback that the user supplies to write(chunk,encoding,cb) |
|
|
this.writecb=null;// the amount that is being written when _write is called. |
|
|
this.writelen=0;this.bufferedRequest=null;this.lastBufferedRequest=null;// number of pending user-supplied write callbacks |
|
|
// this must be 0 before 'finish' can be emitted |
|
|
this.pendingcb=0;// emit prefinish if the only thing we're waiting for is _write cbs |
|
|
// This is relevant for synchronous Transform streams |
|
|
this.prefinished=false;// True if the error was already emitted and should not be thrown again |
|
|
this.errorEmitted=false;// Should close be emitted on destroy. Defaults to true. |
|
|
this.emitClose=options.emitClose!==false;// Should .destroy() be called after 'finish' (and potentially 'end') |
|
|
this.autoDestroy=!!options.autoDestroy;// count buffered requests |
|
|
this.bufferedRequestCount=0;// allocate the first CorkedRequest, there is always |
|
|
// one allocated and free to use, and we maintain at most two |
|
|
this.corkedRequestsFree=new CorkedRequest(this);}WritableState.prototype.getBuffer=function getBuffer(){var current=this.bufferedRequest;var out=[];while(current){out.push(current);current=current.next;}return out;};(function(){try{Object.defineProperty(WritableState.prototype,'buffer',{get:internalUtil.deprecate(function writableStateBufferGetter(){return this.getBuffer();},'_writableState.buffer is deprecated. Use _writableState.getBuffer '+'instead.','DEP0003')});}catch(_){}})();// Test _writableState for inheritance to account for Duplex streams, |
|
|
// whose prototype chain only points to Readable. |
|
|
var realHasInstance;if(typeof Symbol==='function'&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]==='function'){realHasInstance=Function.prototype[Symbol.hasInstance];Object.defineProperty(Writable,Symbol.hasInstance,{value:function value(object){if(realHasInstance.call(this,object))return true;if(this!==Writable)return false;return object&&object._writableState instanceof WritableState;}});}else{realHasInstance=function realHasInstance(object){return object instanceof this;};}function Writable(options){Duplex=Duplex||require('./_stream_duplex');// Writable ctor is applied to Duplexes, too. |
|
|
// `realHasInstance` is necessary because using plain `instanceof` |
|
|
// would return false, as no `_writableState` property is attached. |
|
|
// Trying to use the custom `instanceof` for Writable here will also break the |
|
|
// Node.js LazyTransform implementation, which has a non-trivial getter for |
|
|
// `_writableState` that would lead to infinite recursion. |
|
|
// Checking for a Stream.Duplex instance is faster here instead of inside |
|
|
// the WritableState constructor, at least with V8 6.5 |
|
|
var isDuplex=this instanceof Duplex;if(!isDuplex&&!realHasInstance.call(Writable,this))return new Writable(options);this._writableState=new WritableState(options,this,isDuplex);// legacy. |
|
|
this.writable=true;if(options){if(typeof options.write==='function')this._write=options.write;if(typeof options.writev==='function')this._writev=options.writev;if(typeof options.destroy==='function')this._destroy=options.destroy;if(typeof options.final==='function')this._final=options.final;}Stream.call(this);}// Otherwise people can pipe Writable streams, which is just wrong. |
|
|
Writable.prototype.pipe=function(){errorOrDestroy(this,new ERR_STREAM_CANNOT_PIPE());};function writeAfterEnd(stream,cb){var er=new ERR_STREAM_WRITE_AFTER_END();// TODO: defer error events consistently everywhere, not just the cb |
|
|
errorOrDestroy(stream,er);process.nextTick(cb,er);}// Checks that a user-supplied chunk is valid, especially for the particular |
|
|
// mode the stream is in. Currently this means that `null` is never accepted |
|
|
// and undefined/non-string values are only allowed in object mode. |
|
|
function validChunk(stream,state,chunk,cb){var er;if(chunk===null){er=new ERR_STREAM_NULL_VALUES();}else if(typeof chunk!=='string'&&!state.objectMode){er=new ERR_INVALID_ARG_TYPE('chunk',['string','Buffer'],chunk);}if(er){errorOrDestroy(stream,er);process.nextTick(cb,er);return false;}return true;}Writable.prototype.write=function(chunk,encoding,cb){var state=this._writableState;var ret=false;var isBuf=!state.objectMode&&_isUint8Array(chunk);if(isBuf&&!Buffer.isBuffer(chunk)){chunk=_uint8ArrayToBuffer(chunk);}if(typeof encoding==='function'){cb=encoding;encoding=null;}if(isBuf)encoding='buffer';else if(!encoding)encoding=state.defaultEncoding;if(typeof cb!=='function')cb=nop;if(state.ending)writeAfterEnd(this,cb);else if(isBuf||validChunk(this,state,chunk,cb)){state.pendingcb++;ret=writeOrBuffer(this,state,isBuf,chunk,encoding,cb);}return ret;};Writable.prototype.cork=function(){this._writableState.corked++;};Writable.prototype.uncork=function(){var state=this._writableState;if(state.corked){state.corked--;if(!state.writing&&!state.corked&&!state.bufferProcessing&&state.bufferedRequest)clearBuffer(this,state);}};Writable.prototype.setDefaultEncoding=function setDefaultEncoding(encoding){// node::ParseEncoding() requires lower case. |
|
|
if(typeof encoding==='string')encoding=encoding.toLowerCase();if(!(['hex','utf8','utf-8','ascii','binary','base64','ucs2','ucs-2','utf16le','utf-16le','raw'].indexOf((encoding+'').toLowerCase())>-1))throw new ERR_UNKNOWN_ENCODING(encoding);this._writableState.defaultEncoding=encoding;return this;};Object.defineProperty(Writable.prototype,'writableBuffer',{// making it explicit this property is not enumerable |
|
|
// because otherwise some prototype manipulation in |
|
|
// userland will fail |
|
|
enumerable:false,get:function get(){return this._writableState&&this._writableState.getBuffer();}});function decodeChunk(state,chunk,encoding){if(!state.objectMode&&state.decodeStrings!==false&&typeof chunk==='string'){chunk=Buffer.from(chunk,encoding);}return chunk;}Object.defineProperty(Writable.prototype,'writableHighWaterMark',{// making it explicit this property is not enumerable |
|
|
// because otherwise some prototype manipulation in |
|
|
// userland will fail |
|
|
enumerable:false,get:function get(){return this._writableState.highWaterMark;}});// if we're already writing something, then just put this |
|
|
// in the queue, and wait our turn. Otherwise, call _write |
|
|
// If we return false, then we need a drain event, so set that flag. |
|
|
function writeOrBuffer(stream,state,isBuf,chunk,encoding,cb){if(!isBuf){var newChunk=decodeChunk(state,chunk,encoding);if(chunk!==newChunk){isBuf=true;encoding='buffer';chunk=newChunk;}}var len=state.objectMode?1:chunk.length;state.length+=len;var ret=state.length<state.highWaterMark;// we must ensure that previous needDrain will not be reset to false. |
|
|
if(!ret)state.needDrain=true;if(state.writing||state.corked){var last=state.lastBufferedRequest;state.lastBufferedRequest={chunk:chunk,encoding:encoding,isBuf:isBuf,callback:cb,next:null};if(last){last.next=state.lastBufferedRequest;}else{state.bufferedRequest=state.lastBufferedRequest;}state.bufferedRequestCount+=1;}else{doWrite(stream,state,false,len,chunk,encoding,cb);}return ret;}function doWrite(stream,state,writev,len,chunk,encoding,cb){state.writelen=len;state.writecb=cb;state.writing=true;state.sync=true;if(state.destroyed)state.onwrite(new ERR_STREAM_DESTROYED('write'));else if(writev)stream._writev(chunk,state.onwrite);else stream._write(chunk,encoding,state.onwrite);state.sync=false;}function onwriteError(stream,state,sync,er,cb){--state.pendingcb;if(sync){// defer the callback if we are being called synchronously |
|
|
// to avoid piling up things on the stack |
|
|
process.nextTick(cb,er);// this can emit finish, and it will always happen |
|
|
// after error |
|
|
process.nextTick(finishMaybe,stream,state);stream._writableState.errorEmitted=true;errorOrDestroy(stream,er);}else{// the caller expect this to happen before if |
|
|
// it is async |
|
|
cb(er);stream._writableState.errorEmitted=true;errorOrDestroy(stream,er);// this can emit finish, but finish must |
|
|
// always follow error |
|
|
finishMaybe(stream,state);}}function onwriteStateUpdate(state){state.writing=false;state.writecb=null;state.length-=state.writelen;state.writelen=0;}function onwrite(stream,er){var state=stream._writableState;var sync=state.sync;var cb=state.writecb;if(typeof cb!=='function')throw new ERR_MULTIPLE_CALLBACK();onwriteStateUpdate(state);if(er)onwriteError(stream,state,sync,er,cb);else{// Check if we're actually ready to finish, but don't emit yet |
|
|
var finished=needFinish(state)||stream.destroyed;if(!finished&&!state.corked&&!state.bufferProcessing&&state.bufferedRequest){clearBuffer(stream,state);}if(sync){process.nextTick(afterWrite,stream,state,finished,cb);}else{afterWrite(stream,state,finished,cb);}}}function afterWrite(stream,state,finished,cb){if(!finished)onwriteDrain(stream,state);state.pendingcb--;cb();finishMaybe(stream,state);}// Must force callback to be called on nextTick, so that we don't |
|
|
// emit 'drain' before the write() consumer gets the 'false' return |
|
|
// value, and has a chance to attach a 'drain' listener. |
|
|
function onwriteDrain(stream,state){if(state.length===0&&state.needDrain){state.needDrain=false;stream.emit('drain');}}// if there's something in the buffer waiting, then process it |
|
|
function clearBuffer(stream,state){state.bufferProcessing=true;var entry=state.bufferedRequest;if(stream._writev&&entry&&entry.next){// Fast case, write everything using _writev() |
|
|
var l=state.bufferedRequestCount;var buffer=new Array(l);var holder=state.corkedRequestsFree;holder.entry=entry;var count=0;var allBuffers=true;while(entry){buffer[count]=entry;if(!entry.isBuf)allBuffers=false;entry=entry.next;count+=1;}buffer.allBuffers=allBuffers;doWrite(stream,state,true,state.length,buffer,'',holder.finish);// doWrite is almost always async, defer these to save a bit of time |
|
|
// as the hot path ends with doWrite |
|
|
state.pendingcb++;state.lastBufferedRequest=null;if(holder.next){state.corkedRequestsFree=holder.next;holder.next=null;}else{state.corkedRequestsFree=new CorkedRequest(state);}state.bufferedRequestCount=0;}else{// Slow case, write chunks one-by-one |
|
|
while(entry){var chunk=entry.chunk;var encoding=entry.encoding;var cb=entry.callback;var len=state.objectMode?1:chunk.length;doWrite(stream,state,false,len,chunk,encoding,cb);entry=entry.next;state.bufferedRequestCount--;// if we didn't call the onwrite immediately, then |
|
|
// it means that we need to wait until it does. |
|
|
// also, that means that the chunk and cb are currently |
|
|
// being processed, so move the buffer counter past them. |
|
|
if(state.writing){break;}}if(entry===null)state.lastBufferedRequest=null;}state.bufferedRequest=entry;state.bufferProcessing=false;}Writable.prototype._write=function(chunk,encoding,cb){cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));};Writable.prototype._writev=null;Writable.prototype.end=function(chunk,encoding,cb){var state=this._writableState;if(typeof chunk==='function'){cb=chunk;chunk=null;encoding=null;}else if(typeof encoding==='function'){cb=encoding;encoding=null;}if(chunk!==null&&chunk!==undefined)this.write(chunk,encoding);// .end() fully uncorks |
|
|
if(state.corked){state.corked=1;this.uncork();}// ignore unnecessary end() calls. |
|
|
if(!state.ending)endWritable(this,state,cb);return this;};Object.defineProperty(Writable.prototype,'writableLength',{// making it explicit this property is not enumerable |
|
|
// because otherwise some prototype manipulation in |
|
|
// userland will fail |
|
|
enumerable:false,get:function get(){return this._writableState.length;}});function needFinish(state){return state.ending&&state.length===0&&state.bufferedRequest===null&&!state.finished&&!state.writing;}function callFinal(stream,state){stream._final(function(err){state.pendingcb--;if(err){errorOrDestroy(stream,err);}state.prefinished=true;stream.emit('prefinish');finishMaybe(stream,state);});}function prefinish(stream,state){if(!state.prefinished&&!state.finalCalled){if(typeof stream._final==='function'&&!state.destroyed){state.pendingcb++;state.finalCalled=true;process.nextTick(callFinal,stream,state);}else{state.prefinished=true;stream.emit('prefinish');}}}function finishMaybe(stream,state){var need=needFinish(state);if(need){prefinish(stream,state);if(state.pendingcb===0){state.finished=true;stream.emit('finish');if(state.autoDestroy){// In case of duplex streams we need a way to detect |
|
|
// if the readable side is ready for autoDestroy as well |
|
|
var rState=stream._readableState;if(!rState||rState.autoDestroy&&rState.endEmitted){stream.destroy();}}}}return need;}function endWritable(stream,state,cb){state.ending=true;finishMaybe(stream,state);if(cb){if(state.finished)process.nextTick(cb);else stream.once('finish',cb);}state.ended=true;stream.writable=false;}function onCorkedFinish(corkReq,state,err){var entry=corkReq.entry;corkReq.entry=null;while(entry){var cb=entry.callback;state.pendingcb--;cb(err);entry=entry.next;}// reuse the free corkReq. |
|
|
state.corkedRequestsFree.next=corkReq;}Object.defineProperty(Writable.prototype,'destroyed',{// making it explicit this property is not enumerable |
|
|
// because otherwise some prototype manipulation in |
|
|
// userland will fail |
|
|
enumerable:false,get:function get(){if(this._writableState===undefined){return false;}return this._writableState.destroyed;},set:function set(value){// we ignore the value if the stream |
|
|
// has not been initialized yet |
|
|
if(!this._writableState){return;}// backward compatibility, the user is explicitly |
|
|
// managing destroyed |
|
|
this._writableState.destroyed=value;}});Writable.prototype.destroy=destroyImpl.destroy;Writable.prototype._undestroy=destroyImpl.undestroy;Writable.prototype._destroy=function(err,cb){cb(err);};}).call(this,require('_process'),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{"../errors":453,"./_stream_duplex":454,"./internal/streams/destroy":461,"./internal/streams/state":465,"./internal/streams/stream":466,"_process":443,"buffer":214,"inherits":364,"util-deprecate":497}],459:[function(require,module,exports){(function(process){'use strict';var _Object$setPrototypeO;function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}var finished=require('./end-of-stream');var kLastResolve=Symbol('lastResolve');var kLastReject=Symbol('lastReject');var kError=Symbol('error');var kEnded=Symbol('ended');var kLastPromise=Symbol('lastPromise');var kHandlePromise=Symbol('handlePromise');var kStream=Symbol('stream');function createIterResult(value,done){return{value:value,done:done};}function readAndResolve(iter){var resolve=iter[kLastResolve];if(resolve!==null){var data=iter[kStream].read();// we defer if data is null |
|
|
// we can be expecting either 'end' or |
|
|
// 'error' |
|
|
if(data!==null){iter[kLastPromise]=null;iter[kLastResolve]=null;iter[kLastReject]=null;resolve(createIterResult(data,false));}}}function onReadable(iter){// we wait for the next tick, because it might |
|
|
// emit an error with process.nextTick |
|
|
process.nextTick(readAndResolve,iter);}function wrapForNext(lastPromise,iter){return function(resolve,reject){lastPromise.then(function(){if(iter[kEnded]){resolve(createIterResult(undefined,true));return;}iter[kHandlePromise](resolve,reject);},reject);};}var AsyncIteratorPrototype=Object.getPrototypeOf(function(){});var ReadableStreamAsyncIteratorPrototype=Object.setPrototypeOf((_Object$setPrototypeO={get stream(){return this[kStream];},next:function next(){var _this=this;// if we have detected an error in the meanwhile |
|
|
// reject straight away |
|
|
var error=this[kError];if(error!==null){return Promise.reject(error);}if(this[kEnded]){return Promise.resolve(createIterResult(undefined,true));}if(this[kStream].destroyed){// We need to defer via nextTick because if .destroy(err) is |
|
|
// called, the error will be emitted via nextTick, and |
|
|
// we cannot guarantee that there is no error lingering around |
|
|
// waiting to be emitted. |
|
|
return new Promise(function(resolve,reject){process.nextTick(function(){if(_this[kError]){reject(_this[kError]);}else{resolve(createIterResult(undefined,true));}});});}// if we have multiple next() calls |
|
|
// we will wait for the previous Promise to finish |
|
|
// this logic is optimized to support for await loops, |
|
|
// where next() is only called once at a time |
|
|
var lastPromise=this[kLastPromise];var promise;if(lastPromise){promise=new Promise(wrapForNext(lastPromise,this));}else{// fast path needed to support multiple this.push() |
|
|
// without triggering the next() queue |
|
|
var data=this[kStream].read();if(data!==null){return Promise.resolve(createIterResult(data,false));}promise=new Promise(this[kHandlePromise]);}this[kLastPromise]=promise;return promise;}},_defineProperty(_Object$setPrototypeO,Symbol.asyncIterator,function(){return this;}),_defineProperty(_Object$setPrototypeO,"return",function _return(){var _this2=this;// destroy(err, cb) is a private API |
|
|
// we can guarantee we have that here, because we control the |
|
|
// Readable class this is attached to |
|
|
return new Promise(function(resolve,reject){_this2[kStream].destroy(null,function(err){if(err){reject(err);return;}resolve(createIterResult(undefined,true));});});}),_Object$setPrototypeO),AsyncIteratorPrototype);var createReadableStreamAsyncIterator=function createReadableStreamAsyncIterator(stream){var _Object$create;var iterator=Object.create(ReadableStreamAsyncIteratorPrototype,(_Object$create={},_defineProperty(_Object$create,kStream,{value:stream,writable:true}),_defineProperty(_Object$create,kLastResolve,{value:null,writable:true}),_defineProperty(_Object$create,kLastReject,{value:null,writable:true}),_defineProperty(_Object$create,kError,{value:null,writable:true}),_defineProperty(_Object$create,kEnded,{value:stream._readableState.endEmitted,writable:true}),_defineProperty(_Object$create,kHandlePromise,{value:function value(resolve,reject){var data=iterator[kStream].read();if(data){iterator[kLastPromise]=null;iterator[kLastResolve]=null;iterator[kLastReject]=null;resolve(createIterResult(data,false));}else{iterator[kLastResolve]=resolve;iterator[kLastReject]=reject;}},writable:true}),_Object$create));iterator[kLastPromise]=null;finished(stream,function(err){if(err&&err.code!=='ERR_STREAM_PREMATURE_CLOSE'){var reject=iterator[kLastReject];// reject if we are waiting for data in the Promise |
|
|
// returned by next() and store the error |
|
|
if(reject!==null){iterator[kLastPromise]=null;iterator[kLastResolve]=null;iterator[kLastReject]=null;reject(err);}iterator[kError]=err;return;}var resolve=iterator[kLastResolve];if(resolve!==null){iterator[kLastPromise]=null;iterator[kLastResolve]=null;iterator[kLastReject]=null;resolve(createIterResult(undefined,true));}iterator[kEnded]=true;});stream.on('readable',onReadable.bind(null,iterator));return iterator;};module.exports=createReadableStreamAsyncIterator;}).call(this,require('_process'));},{"./end-of-stream":462,"_process":443}],460:[function(require,module,exports){'use strict';function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly)symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;});keys.push.apply(keys,symbols);}return keys;}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};if(i%2){ownKeys(Object(source),true).forEach(function(key){_defineProperty(target,key,source[key]);});}else if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source));}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key));});}}return target;}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}var _require=require('buffer'),Buffer=_require.Buffer;var _require2=require('util'),inspect=_require2.inspect;var custom=inspect&&inspect.custom||'inspect';function copyBuffer(src,target,offset){Buffer.prototype.copy.call(src,target,offset);}module.exports=/*#__PURE__*/function(){function BufferList(){_classCallCheck(this,BufferList);this.head=null;this.tail=null;this.length=0;}_createClass(BufferList,[{key:"push",value:function push(v){var entry={data:v,next:null};if(this.length>0)this.tail.next=entry;else this.head=entry;this.tail=entry;++this.length;}},{key:"unshift",value:function unshift(v){var entry={data:v,next:this.head};if(this.length===0)this.tail=entry;this.head=entry;++this.length;}},{key:"shift",value:function shift(){if(this.length===0)return;var ret=this.head.data;if(this.length===1)this.head=this.tail=null;else this.head=this.head.next;--this.length;return ret;}},{key:"clear",value:function clear(){this.head=this.tail=null;this.length=0;}},{key:"join",value:function join(s){if(this.length===0)return'';var p=this.head;var ret=''+p.data;while(p=p.next){ret+=s+p.data;}return ret;}},{key:"concat",value:function concat(n){if(this.length===0)return Buffer.alloc(0);var ret=Buffer.allocUnsafe(n>>>0);var p=this.head;var i=0;while(p){copyBuffer(p.data,ret,i);i+=p.data.length;p=p.next;}return ret;}// Consumes a specified amount of bytes or characters from the buffered data. |
|
|
},{key:"consume",value:function consume(n,hasStrings){var ret;if(n<this.head.data.length){// `slice` is the same for buffers and strings. |
|
|
ret=this.head.data.slice(0,n);this.head.data=this.head.data.slice(n);}else if(n===this.head.data.length){// First chunk is a perfect match. |
|
|
ret=this.shift();}else{// Result spans more than one buffer. |
|
|
ret=hasStrings?this._getString(n):this._getBuffer(n);}return ret;}},{key:"first",value:function first(){return this.head.data;}// Consumes a specified amount of characters from the buffered data. |
|
|
},{key:"_getString",value:function _getString(n){var p=this.head;var c=1;var ret=p.data;n-=ret.length;while(p=p.next){var str=p.data;var nb=n>str.length?str.length:n;if(nb===str.length)ret+=str;else ret+=str.slice(0,n);n-=nb;if(n===0){if(nb===str.length){++c;if(p.next)this.head=p.next;else this.head=this.tail=null;}else{this.head=p;p.data=str.slice(nb);}break;}++c;}this.length-=c;return ret;}// Consumes a specified amount of bytes from the buffered data. |
|
|
},{key:"_getBuffer",value:function _getBuffer(n){var ret=Buffer.allocUnsafe(n);var p=this.head;var c=1;p.data.copy(ret);n-=p.data.length;while(p=p.next){var buf=p.data;var nb=n>buf.length?buf.length:n;buf.copy(ret,ret.length-n,0,nb);n-=nb;if(n===0){if(nb===buf.length){++c;if(p.next)this.head=p.next;else this.head=this.tail=null;}else{this.head=p;p.data=buf.slice(nb);}break;}++c;}this.length-=c;return ret;}// Make sure the linked list only shows the minimal necessary information. |
|
|
},{key:custom,value:function value(_,options){return inspect(this,_objectSpread({},options,{// Only inspect one level. |
|
|
depth:0,// It should not recurse. |
|
|
customInspect:false}));}}]);return BufferList;}();},{"buffer":214,"util":183}],461:[function(require,module,exports){(function(process){'use strict';// undocumented cb() API, needed for core, not for public API |
|
|
function destroy(err,cb){var _this=this;var readableDestroyed=this._readableState&&this._readableState.destroyed;var writableDestroyed=this._writableState&&this._writableState.destroyed;if(readableDestroyed||writableDestroyed){if(cb){cb(err);}else if(err){if(!this._writableState){process.nextTick(emitErrorNT,this,err);}else if(!this._writableState.errorEmitted){this._writableState.errorEmitted=true;process.nextTick(emitErrorNT,this,err);}}return this;}// we set destroyed to true before firing error callbacks in order |
|
|
// to make it re-entrance safe in case destroy() is called within callbacks |
|
|
if(this._readableState){this._readableState.destroyed=true;}// if this is a duplex stream mark the writable part as destroyed as well |
|
|
if(this._writableState){this._writableState.destroyed=true;}this._destroy(err||null,function(err){if(!cb&&err){if(!_this._writableState){process.nextTick(emitErrorAndCloseNT,_this,err);}else if(!_this._writableState.errorEmitted){_this._writableState.errorEmitted=true;process.nextTick(emitErrorAndCloseNT,_this,err);}else{process.nextTick(emitCloseNT,_this);}}else if(cb){process.nextTick(emitCloseNT,_this);cb(err);}else{process.nextTick(emitCloseNT,_this);}});return this;}function emitErrorAndCloseNT(self,err){emitErrorNT(self,err);emitCloseNT(self);}function emitCloseNT(self){if(self._writableState&&!self._writableState.emitClose)return;if(self._readableState&&!self._readableState.emitClose)return;self.emit('close');}function undestroy(){if(this._readableState){this._readableState.destroyed=false;this._readableState.reading=false;this._readableState.ended=false;this._readableState.endEmitted=false;}if(this._writableState){this._writableState.destroyed=false;this._writableState.ended=false;this._writableState.ending=false;this._writableState.finalCalled=false;this._writableState.prefinished=false;this._writableState.finished=false;this._writableState.errorEmitted=false;}}function emitErrorNT(self,err){self.emit('error',err);}function errorOrDestroy(stream,err){// We have tests that rely on errors being emitted |
|
|
// in the same tick, so changing this is semver major. |
|
|
// For now when you opt-in to autoDestroy we allow |
|
|
// the error to be emitted nextTick. In a future |
|
|
// semver major update we should change the default to this. |
|
|
var rState=stream._readableState;var wState=stream._writableState;if(rState&&rState.autoDestroy||wState&&wState.autoDestroy)stream.destroy(err);else stream.emit('error',err);}module.exports={destroy:destroy,undestroy:undestroy,errorOrDestroy:errorOrDestroy};}).call(this,require('_process'));},{"_process":443}],462:[function(require,module,exports){// Ported from https://github.com/mafintosh/end-of-stream with |
|
|
// permission from the author, Mathias Buus (@mafintosh). |
|
|
'use strict';var ERR_STREAM_PREMATURE_CLOSE=require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;function once(callback){var called=false;return function(){if(called)return;called=true;for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}callback.apply(this,args);};}function noop(){}function isRequest(stream){return stream.setHeader&&typeof stream.abort==='function';}function eos(stream,opts,callback){if(typeof opts==='function')return eos(stream,null,opts);if(!opts)opts={};callback=once(callback||noop);var readable=opts.readable||opts.readable!==false&&stream.readable;var writable=opts.writable||opts.writable!==false&&stream.writable;var onlegacyfinish=function onlegacyfinish(){if(!stream.writable)onfinish();};var writableEnded=stream._writableState&&stream._writableState.finished;var onfinish=function onfinish(){writable=false;writableEnded=true;if(!readable)callback.call(stream);};var readableEnded=stream._readableState&&stream._readableState.endEmitted;var onend=function onend(){readable=false;readableEnded=true;if(!writable)callback.call(stream);};var onerror=function onerror(err){callback.call(stream,err);};var onclose=function onclose(){var err;if(readable&&!readableEnded){if(!stream._readableState||!stream._readableState.ended)err=new ERR_STREAM_PREMATURE_CLOSE();return callback.call(stream,err);}if(writable&&!writableEnded){if(!stream._writableState||!stream._writableState.ended)err=new ERR_STREAM_PREMATURE_CLOSE();return callback.call(stream,err);}};var onrequest=function onrequest(){stream.req.on('finish',onfinish);};if(isRequest(stream)){stream.on('complete',onfinish);stream.on('abort',onclose);if(stream.req)onrequest();else stream.on('request',onrequest);}else if(writable&&!stream._writableState){// legacy streams |
|
|
stream.on('end',onlegacyfinish);stream.on('close',onlegacyfinish);}stream.on('end',onend);stream.on('finish',onfinish);if(opts.error!==false)stream.on('error',onerror);stream.on('close',onclose);return function(){stream.removeListener('complete',onfinish);stream.removeListener('abort',onclose);stream.removeListener('request',onrequest);if(stream.req)stream.req.removeListener('finish',onfinish);stream.removeListener('end',onlegacyfinish);stream.removeListener('close',onlegacyfinish);stream.removeListener('finish',onfinish);stream.removeListener('end',onend);stream.removeListener('error',onerror);stream.removeListener('close',onclose);};}module.exports=eos;},{"../../../errors":453}],463:[function(require,module,exports){module.exports=function(){throw new Error('Readable.from is not available in the browser');};},{}],464:[function(require,module,exports){// Ported from https://github.com/mafintosh/pump with |
|
|
// permission from the author, Mathias Buus (@mafintosh). |
|
|
'use strict';var eos;function once(callback){var called=false;return function(){if(called)return;called=true;callback.apply(void 0,arguments);};}var _require$codes=require('../../../errors').codes,ERR_MISSING_ARGS=_require$codes.ERR_MISSING_ARGS,ERR_STREAM_DESTROYED=_require$codes.ERR_STREAM_DESTROYED;function noop(err){// Rethrow the error if it exists to avoid swallowing it |
|
|
if(err)throw err;}function isRequest(stream){return stream.setHeader&&typeof stream.abort==='function';}function destroyer(stream,reading,writing,callback){callback=once(callback);var closed=false;stream.on('close',function(){closed=true;});if(eos===undefined)eos=require('./end-of-stream');eos(stream,{readable:reading,writable:writing},function(err){if(err)return callback(err);closed=true;callback();});var destroyed=false;return function(err){if(closed)return;if(destroyed)return;destroyed=true;// request.destroy just do .end - .abort is what we want |
|
|
if(isRequest(stream))return stream.abort();if(typeof stream.destroy==='function')return stream.destroy();callback(err||new ERR_STREAM_DESTROYED('pipe'));};}function call(fn){fn();}function pipe(from,to){return from.pipe(to);}function popCallback(streams){if(!streams.length)return noop;if(typeof streams[streams.length-1]!=='function')return noop;return streams.pop();}function pipeline(){for(var _len=arguments.length,streams=new Array(_len),_key=0;_key<_len;_key++){streams[_key]=arguments[_key];}var callback=popCallback(streams);if(Array.isArray(streams[0]))streams=streams[0];if(streams.length<2){throw new ERR_MISSING_ARGS('streams');}var error;var destroys=streams.map(function(stream,i){var reading=i<streams.length-1;var writing=i>0;return destroyer(stream,reading,writing,function(err){if(!error)error=err;if(err)destroys.forEach(call);if(reading)return;destroys.forEach(call);callback(error);});});return streams.reduce(pipe);}module.exports=pipeline;},{"../../../errors":453,"./end-of-stream":462}],465:[function(require,module,exports){'use strict';var ERR_INVALID_OPT_VALUE=require('../../../errors').codes.ERR_INVALID_OPT_VALUE;function highWaterMarkFrom(options,isDuplex,duplexKey){return options.highWaterMark!=null?options.highWaterMark:isDuplex?options[duplexKey]:null;}function getHighWaterMark(state,options,duplexKey,isDuplex){var hwm=highWaterMarkFrom(options,isDuplex,duplexKey);if(hwm!=null){if(!(isFinite(hwm)&&Math.floor(hwm)===hwm)||hwm<0){var name=isDuplex?duplexKey:'highWaterMark';throw new ERR_INVALID_OPT_VALUE(name,hwm);}return Math.floor(hwm);}// Default value |
|
|
return state.objectMode?16:16*1024;}module.exports={getHighWaterMark:getHighWaterMark};},{"../../../errors":453}],466:[function(require,module,exports){module.exports=require('events').EventEmitter;},{"events":344}],467:[function(require,module,exports){exports=module.exports=require('./lib/_stream_readable.js');exports.Stream=exports;exports.Readable=exports;exports.Writable=require('./lib/_stream_writable.js');exports.Duplex=require('./lib/_stream_duplex.js');exports.Transform=require('./lib/_stream_transform.js');exports.PassThrough=require('./lib/_stream_passthrough.js');exports.finished=require('./lib/internal/streams/end-of-stream.js');exports.pipeline=require('./lib/internal/streams/pipeline.js');},{"./lib/_stream_duplex.js":454,"./lib/_stream_passthrough.js":455,"./lib/_stream_readable.js":456,"./lib/_stream_transform.js":457,"./lib/_stream_writable.js":458,"./lib/internal/streams/end-of-stream.js":462,"./lib/internal/streams/pipeline.js":464}],468:[function(require,module,exports){/** |
|
|
* Copyright (c) 2014-present, Facebook, Inc. |
|
|
* |
|
|
* This source code is licensed under the MIT license found in the |
|
|
* LICENSE file in the root directory of this source tree. |
|
|
*/var runtime=function(exports){"use strict";var Op=Object.prototype;var hasOwn=Op.hasOwnProperty;var undefined;// More compressible than void 0. |
|
|
var $Symbol=typeof Symbol==="function"?Symbol:{};var iteratorSymbol=$Symbol.iterator||"@@iterator";var asyncIteratorSymbol=$Symbol.asyncIterator||"@@asyncIterator";var toStringTagSymbol=$Symbol.toStringTag||"@@toStringTag";function wrap(innerFn,outerFn,self,tryLocsList){// If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. |
|
|
var protoGenerator=outerFn&&outerFn.prototype instanceof Generator?outerFn:Generator;var generator=Object.create(protoGenerator.prototype);var context=new Context(tryLocsList||[]);// The ._invoke method unifies the implementations of the .next, |
|
|
// .throw, and .return methods. |
|
|
generator._invoke=makeInvokeMethod(innerFn,self,context);return generator;}exports.wrap=wrap;// Try/catch helper to minimize deoptimizations. Returns a completion |
|
|
// record like context.tryEntries[i].completion. This interface could |
|
|
// have been (and was previously) designed to take a closure to be |
|
|
// invoked without arguments, but in all the cases we care about we |
|
|
// already have an existing method we want to call, so there's no need |
|
|
// to create a new function object. We can even get away with assuming |
|
|
// the method takes exactly one argument, since that happens to be true |
|
|
// in every case, so we don't have to touch the arguments object. The |
|
|
// only additional allocation required is the completion record, which |
|
|
// has a stable shape and so hopefully should be cheap to allocate. |
|
|
function tryCatch(fn,obj,arg){try{return{type:"normal",arg:fn.call(obj,arg)};}catch(err){return{type:"throw",arg:err};}}var GenStateSuspendedStart="suspendedStart";var GenStateSuspendedYield="suspendedYield";var GenStateExecuting="executing";var GenStateCompleted="completed";// Returning this object from the innerFn has the same effect as |
|
|
// breaking out of the dispatch switch statement. |
|
|
var ContinueSentinel={};// Dummy constructor functions that we use as the .constructor and |
|
|
// .constructor.prototype properties for functions that return Generator |
|
|
// objects. For full spec compliance, you may wish to configure your |
|
|
// minifier not to mangle the names of these two functions. |
|
|
function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}// This is a polyfill for %IteratorPrototype% for environments that |
|
|
// don't natively support it. |
|
|
var IteratorPrototype={};IteratorPrototype[iteratorSymbol]=function(){return this;};var getProto=Object.getPrototypeOf;var NativeIteratorPrototype=getProto&&getProto(getProto(values([])));if(NativeIteratorPrototype&&NativeIteratorPrototype!==Op&&hasOwn.call(NativeIteratorPrototype,iteratorSymbol)){// This environment has a native %IteratorPrototype%; use it instead |
|
|
// of the polyfill. |
|
|
IteratorPrototype=NativeIteratorPrototype;}var Gp=GeneratorFunctionPrototype.prototype=Generator.prototype=Object.create(IteratorPrototype);GeneratorFunction.prototype=Gp.constructor=GeneratorFunctionPrototype;GeneratorFunctionPrototype.constructor=GeneratorFunction;GeneratorFunctionPrototype[toStringTagSymbol]=GeneratorFunction.displayName="GeneratorFunction";// Helper for defining the .next, .throw, and .return methods of the |
|
|
// Iterator interface in terms of a single ._invoke method. |
|
|
function defineIteratorMethods(prototype){["next","throw","return"].forEach(function(method){prototype[method]=function(arg){return this._invoke(method,arg);};});}exports.isGeneratorFunction=function(genFun){var ctor=typeof genFun==="function"&&genFun.constructor;return ctor?ctor===GeneratorFunction||// For the native GeneratorFunction constructor, the best we can |
|
|
// do is to check its .name property. |
|
|
(ctor.displayName||ctor.name)==="GeneratorFunction":false;};exports.mark=function(genFun){if(Object.setPrototypeOf){Object.setPrototypeOf(genFun,GeneratorFunctionPrototype);}else{genFun.__proto__=GeneratorFunctionPrototype;if(!(toStringTagSymbol in genFun)){genFun[toStringTagSymbol]="GeneratorFunction";}}genFun.prototype=Object.create(Gp);return genFun;};// Within the body of any async function, `await x` is transformed to |
|
|
// `yield regeneratorRuntime.awrap(x)`, so that the runtime can test |
|
|
// `hasOwn.call(value, "__await")` to determine if the yielded value is |
|
|
// meant to be awaited. |
|
|
exports.awrap=function(arg){return{__await:arg};};function AsyncIterator(generator,PromiseImpl){function invoke(method,arg,resolve,reject){var record=tryCatch(generator[method],generator,arg);if(record.type==="throw"){reject(record.arg);}else{var result=record.arg;var value=result.value;if(value&&_typeof2(value)==="object"&&hasOwn.call(value,"__await")){return PromiseImpl.resolve(value.__await).then(function(value){invoke("next",value,resolve,reject);},function(err){invoke("throw",err,resolve,reject);});}return PromiseImpl.resolve(value).then(function(unwrapped){// When a yielded Promise is resolved, its final value becomes |
|
|
// the .value of the Promise<{value,done}> result for the |
|
|
// current iteration. |
|
|
result.value=unwrapped;resolve(result);},function(error){// If a rejected Promise was yielded, throw the rejection back |
|
|
// into the async generator function so it can be handled there. |
|
|
return invoke("throw",error,resolve,reject);});}}var previousPromise;function enqueue(method,arg){function callInvokeWithMethodAndArg(){return new PromiseImpl(function(resolve,reject){invoke(method,arg,resolve,reject);});}return previousPromise=// If enqueue has been called before, then we want to wait until |
|
|
// all previous Promises have been resolved before calling invoke, |
|
|
// so that results are always delivered in the correct order. If |
|
|
// enqueue has not been called before, then it is important to |
|
|
// call invoke immediately, without waiting on a callback to fire, |
|
|
// so that the async generator function has the opportunity to do |
|
|
// any necessary setup in a predictable way. This predictability |
|
|
// is why the Promise constructor synchronously invokes its |
|
|
// executor callback, and why async functions synchronously |
|
|
// execute code before the first await. Since we implement simple |
|
|
// async functions in terms of async generators, it is especially |
|
|
// important to get this right, even though it requires care. |
|
|
previousPromise?previousPromise.then(callInvokeWithMethodAndArg,// Avoid propagating failures to Promises returned by later |
|
|
// invocations of the iterator. |
|
|
callInvokeWithMethodAndArg):callInvokeWithMethodAndArg();}// Define the unified helper method that is used to implement .next, |
|
|
// .throw, and .return (see defineIteratorMethods). |
|
|
this._invoke=enqueue;}defineIteratorMethods(AsyncIterator.prototype);AsyncIterator.prototype[asyncIteratorSymbol]=function(){return this;};exports.AsyncIterator=AsyncIterator;// Note that simple async functions are implemented on top of |
|
|
// AsyncIterator objects; they just return a Promise for the value of |
|
|
// the final result produced by the iterator. |
|
|
exports.async=function(innerFn,outerFn,self,tryLocsList,PromiseImpl){if(PromiseImpl===void 0)PromiseImpl=Promise;var iter=new AsyncIterator(wrap(innerFn,outerFn,self,tryLocsList),PromiseImpl);return exports.isGeneratorFunction(outerFn)?iter// If outerFn is a generator, return the full iterator. |
|
|
:iter.next().then(function(result){return result.done?result.value:iter.next();});};function makeInvokeMethod(innerFn,self,context){var state=GenStateSuspendedStart;return function invoke(method,arg){if(state===GenStateExecuting){throw new Error("Generator is already running");}if(state===GenStateCompleted){if(method==="throw"){throw arg;}// Be forgiving, per 25.3.3.3.3 of the spec: |
|
|
// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume |
|
|
return doneResult();}context.method=method;context.arg=arg;while(true){var delegate=context.delegate;if(delegate){var delegateResult=maybeInvokeDelegate(delegate,context);if(delegateResult){if(delegateResult===ContinueSentinel)continue;return delegateResult;}}if(context.method==="next"){// Setting context._sent for legacy support of Babel's |
|
|
// function.sent implementation. |
|
|
context.sent=context._sent=context.arg;}else if(context.method==="throw"){if(state===GenStateSuspendedStart){state=GenStateCompleted;throw context.arg;}context.dispatchException(context.arg);}else if(context.method==="return"){context.abrupt("return",context.arg);}state=GenStateExecuting;var record=tryCatch(innerFn,self,context);if(record.type==="normal"){// If an exception is thrown from innerFn, we leave state === |
|
|
// GenStateExecuting and loop back for another invocation. |
|
|
state=context.done?GenStateCompleted:GenStateSuspendedYield;if(record.arg===ContinueSentinel){continue;}return{value:record.arg,done:context.done};}else if(record.type==="throw"){state=GenStateCompleted;// Dispatch the exception by looping back around to the |
|
|
// context.dispatchException(context.arg) call above. |
|
|
context.method="throw";context.arg=record.arg;}}};}// Call delegate.iterator[context.method](context.arg) and handle the |
|
|
// result, either by returning a { value, done } result from the |
|
|
// delegate iterator, or by modifying context.method and context.arg, |
|
|
// setting context.delegate to null, and returning the ContinueSentinel. |
|
|
function maybeInvokeDelegate(delegate,context){var method=delegate.iterator[context.method];if(method===undefined){// A .throw or .return when the delegate iterator has no .throw |
|
|
// method always terminates the yield* loop. |
|
|
context.delegate=null;if(context.method==="throw"){// Note: ["return"] must be used for ES3 parsing compatibility. |
|
|
if(delegate.iterator["return"]){// If the delegate iterator has a return method, give it a |
|
|
// chance to clean up. |
|
|
context.method="return";context.arg=undefined;maybeInvokeDelegate(delegate,context);if(context.method==="throw"){// If maybeInvokeDelegate(context) changed context.method from |
|
|
// "return" to "throw", let that override the TypeError below. |
|
|
return ContinueSentinel;}}context.method="throw";context.arg=new TypeError("The iterator does not provide a 'throw' method");}return ContinueSentinel;}var record=tryCatch(method,delegate.iterator,context.arg);if(record.type==="throw"){context.method="throw";context.arg=record.arg;context.delegate=null;return ContinueSentinel;}var info=record.arg;if(!info){context.method="throw";context.arg=new TypeError("iterator result is not an object");context.delegate=null;return ContinueSentinel;}if(info.done){// Assign the result of the finished delegate to the temporary |
|
|
// variable specified by delegate.resultName (see delegateYield). |
|
|
context[delegate.resultName]=info.value;// Resume execution at the desired location (see delegateYield). |
|
|
context.next=delegate.nextLoc;// If context.method was "throw" but the delegate handled the |
|
|
// exception, let the outer generator proceed normally. If |
|
|
// context.method was "next", forget context.arg since it has been |
|
|
// "consumed" by the delegate iterator. If context.method was |
|
|
// "return", allow the original .return call to continue in the |
|
|
// outer generator. |
|
|
if(context.method!=="return"){context.method="next";context.arg=undefined;}}else{// Re-yield the result returned by the delegate method. |
|
|
return info;}// The delegate iterator is finished, so forget it and continue with |
|
|
// the outer generator. |
|
|
context.delegate=null;return ContinueSentinel;}// Define Generator.prototype.{next,throw,return} in terms of the |
|
|
// unified ._invoke helper method. |
|
|
defineIteratorMethods(Gp);Gp[toStringTagSymbol]="Generator";// A Generator should always return itself as the iterator object when the |
|
|
// @@iterator function is called on it. Some browsers' implementations of the |
|
|
// iterator prototype chain incorrectly implement this, causing the Generator |
|
|
// object to not be returned from this call. This ensures that doesn't happen. |
|
|
// See https://github.com/facebook/regenerator/issues/274 for more details. |
|
|
Gp[iteratorSymbol]=function(){return this;};Gp.toString=function(){return"[object Generator]";};function pushTryEntry(locs){var entry={tryLoc:locs[0]};if(1 in locs){entry.catchLoc=locs[1];}if(2 in locs){entry.finallyLoc=locs[2];entry.afterLoc=locs[3];}this.tryEntries.push(entry);}function resetTryEntry(entry){var record=entry.completion||{};record.type="normal";delete record.arg;entry.completion=record;}function Context(tryLocsList){// The root entry object (effectively a try statement without a catch |
|
|
// or a finally block) gives us a place to store values thrown from |
|
|
// locations where there is no enclosing try statement. |
|
|
this.tryEntries=[{tryLoc:"root"}];tryLocsList.forEach(pushTryEntry,this);this.reset(true);}exports.keys=function(object){var keys=[];for(var key in object){keys.push(key);}keys.reverse();// Rather than returning an object with a next method, we keep |
|
|
// things simple and return the next function itself. |
|
|
return function next(){while(keys.length){var key=keys.pop();if(key in object){next.value=key;next.done=false;return next;}}// To avoid creating an additional object, we just hang the .value |
|
|
// and .done properties off the next function object itself. This |
|
|
// also ensures that the minifier will not anonymize the function. |
|
|
next.done=true;return next;};};function values(iterable){if(iterable){var iteratorMethod=iterable[iteratorSymbol];if(iteratorMethod){return iteratorMethod.call(iterable);}if(typeof iterable.next==="function"){return iterable;}if(!isNaN(iterable.length)){var i=-1,next=function next(){while(++i<iterable.length){if(hasOwn.call(iterable,i)){next.value=iterable[i];next.done=false;return next;}}next.value=undefined;next.done=true;return next;};return next.next=next;}}// Return an iterator with no values. |
|
|
return{next:doneResult};}exports.values=values;function doneResult(){return{value:undefined,done:true};}Context.prototype={constructor:Context,reset:function reset(skipTempReset){this.prev=0;this.next=0;// Resetting context._sent for legacy support of Babel's |
|
|
// function.sent implementation. |
|
|
this.sent=this._sent=undefined;this.done=false;this.delegate=null;this.method="next";this.arg=undefined;this.tryEntries.forEach(resetTryEntry);if(!skipTempReset){for(var name in this){// Not sure about the optimal order of these conditions: |
|
|
if(name.charAt(0)==="t"&&hasOwn.call(this,name)&&!isNaN(+name.slice(1))){this[name]=undefined;}}}},stop:function stop(){this.done=true;var rootEntry=this.tryEntries[0];var rootRecord=rootEntry.completion;if(rootRecord.type==="throw"){throw rootRecord.arg;}return this.rval;},dispatchException:function dispatchException(exception){if(this.done){throw exception;}var context=this;function handle(loc,caught){record.type="throw";record.arg=exception;context.next=loc;if(caught){// If the dispatched exception was caught by a catch block, |
|
|
// then let that catch block handle the exception normally. |
|
|
context.method="next";context.arg=undefined;}return!!caught;}for(var i=this.tryEntries.length-1;i>=0;--i){var entry=this.tryEntries[i];var record=entry.completion;if(entry.tryLoc==="root"){// Exception thrown outside of any try block that could handle |
|
|
// it, so set the completion value of the entire function to |
|
|
// throw the exception. |
|
|
return handle("end");}if(entry.tryLoc<=this.prev){var hasCatch=hasOwn.call(entry,"catchLoc");var hasFinally=hasOwn.call(entry,"finallyLoc");if(hasCatch&&hasFinally){if(this.prev<entry.catchLoc){return handle(entry.catchLoc,true);}else if(this.prev<entry.finallyLoc){return handle(entry.finallyLoc);}}else if(hasCatch){if(this.prev<entry.catchLoc){return handle(entry.catchLoc,true);}}else if(hasFinally){if(this.prev<entry.finallyLoc){return handle(entry.finallyLoc);}}else{throw new Error("try statement without catch or finally");}}}},abrupt:function abrupt(type,arg){for(var i=this.tryEntries.length-1;i>=0;--i){var entry=this.tryEntries[i];if(entry.tryLoc<=this.prev&&hasOwn.call(entry,"finallyLoc")&&this.prev<entry.finallyLoc){var finallyEntry=entry;break;}}if(finallyEntry&&(type==="break"||type==="continue")&&finallyEntry.tryLoc<=arg&&arg<=finallyEntry.finallyLoc){// Ignore the finally entry if control is not jumping to a |
|
|
// location outside the try/catch block. |
|
|
finallyEntry=null;}var record=finallyEntry?finallyEntry.completion:{};record.type=type;record.arg=arg;if(finallyEntry){this.method="next";this.next=finallyEntry.finallyLoc;return ContinueSentinel;}return this.complete(record);},complete:function complete(record,afterLoc){if(record.type==="throw"){throw record.arg;}if(record.type==="break"||record.type==="continue"){this.next=record.arg;}else if(record.type==="return"){this.rval=this.arg=record.arg;this.method="return";this.next="end";}else if(record.type==="normal"&&afterLoc){this.next=afterLoc;}return ContinueSentinel;},finish:function finish(finallyLoc){for(var i=this.tryEntries.length-1;i>=0;--i){var entry=this.tryEntries[i];if(entry.finallyLoc===finallyLoc){this.complete(entry.completion,entry.afterLoc);resetTryEntry(entry);return ContinueSentinel;}}},"catch":function _catch(tryLoc){for(var i=this.tryEntries.length-1;i>=0;--i){var entry=this.tryEntries[i];if(entry.tryLoc===tryLoc){var record=entry.completion;if(record.type==="throw"){var thrown=record.arg;resetTryEntry(entry);}return thrown;}}// The context.catch method must only be called with a location |
|
|
// argument that corresponds to a known catch block. |
|
|
throw new Error("illegal catch attempt");},delegateYield:function delegateYield(iterable,resultName,nextLoc){this.delegate={iterator:values(iterable),resultName:resultName,nextLoc:nextLoc};if(this.method==="next"){// Deliberately forget the last sent value so that we don't |
|
|
// accidentally pass it on to the delegate. |
|
|
this.arg=undefined;}return ContinueSentinel;}};// Regardless of whether this script is executing as a CommonJS module |
|
|
// or not, return the runtime object so that we can declare the variable |
|
|
// regeneratorRuntime in the outer scope, which allows this module to be |
|
|
// injected easily by `bin/regenerator --include-runtime script.js`. |
|
|
return exports;}(// If this script is executing as a CommonJS module, use module.exports |
|
|
// as the regeneratorRuntime namespace. Otherwise create a new empty |
|
|
// object. Either way, the resulting object will be used to initialize |
|
|
// the regeneratorRuntime variable at the top of this file. |
|
|
_typeof2(module)==="object"?module.exports:{});try{regeneratorRuntime=runtime;}catch(accidentalStrictMode){// This module should not be running in strict mode, so the above |
|
|
// assignment should always work unless something is misconfigured. Just |
|
|
// in case runtime.js accidentally runs in strict mode, we can escape |
|
|
// strict mode using a global Function call. This could conceivably fail |
|
|
// if a Content Security Policy forbids using Function, but in that case |
|
|
// the proper solution is to fix the accidental strict mode problem. If |
|
|
// you've misconfigured your bundler to force strict mode and applied a |
|
|
// CSP to forbid Function, and you're not willing to fix either of those |
|
|
// problems, please detail your unique predicament in a GitHub issue. |
|
|
Function("r","regeneratorRuntime = r")(runtime);}},{}],469:[function(require,module,exports){'use strict';var Buffer=require('buffer').Buffer;var inherits=require('inherits');var HashBase=require('hash-base');var ARRAY16=new Array(16);var zl=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13];var zr=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11];var sl=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6];var sr=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11];var hl=[0x00000000,0x5a827999,0x6ed9eba1,0x8f1bbcdc,0xa953fd4e];var hr=[0x50a28be6,0x5c4dd124,0x6d703ef3,0x7a6d76e9,0x00000000];function RIPEMD160(){HashBase.call(this,64);// state |
|
|
this._a=0x67452301;this._b=0xefcdab89;this._c=0x98badcfe;this._d=0x10325476;this._e=0xc3d2e1f0;}inherits(RIPEMD160,HashBase);RIPEMD160.prototype._update=function(){var words=ARRAY16;for(var j=0;j<16;++j){words[j]=this._block.readInt32LE(j*4);}var al=this._a|0;var bl=this._b|0;var cl=this._c|0;var dl=this._d|0;var el=this._e|0;var ar=this._a|0;var br=this._b|0;var cr=this._c|0;var dr=this._d|0;var er=this._e|0;// computation |
|
|
for(var i=0;i<80;i+=1){var tl;var tr;if(i<16){tl=fn1(al,bl,cl,dl,el,words[zl[i]],hl[0],sl[i]);tr=fn5(ar,br,cr,dr,er,words[zr[i]],hr[0],sr[i]);}else if(i<32){tl=fn2(al,bl,cl,dl,el,words[zl[i]],hl[1],sl[i]);tr=fn4(ar,br,cr,dr,er,words[zr[i]],hr[1],sr[i]);}else if(i<48){tl=fn3(al,bl,cl,dl,el,words[zl[i]],hl[2],sl[i]);tr=fn3(ar,br,cr,dr,er,words[zr[i]],hr[2],sr[i]);}else if(i<64){tl=fn4(al,bl,cl,dl,el,words[zl[i]],hl[3],sl[i]);tr=fn2(ar,br,cr,dr,er,words[zr[i]],hr[3],sr[i]);}else{// if (i<80) { |
|
|
tl=fn5(al,bl,cl,dl,el,words[zl[i]],hl[4],sl[i]);tr=fn1(ar,br,cr,dr,er,words[zr[i]],hr[4],sr[i]);}al=el;el=dl;dl=rotl(cl,10);cl=bl;bl=tl;ar=er;er=dr;dr=rotl(cr,10);cr=br;br=tr;}// update state |
|
|
var t=this._b+cl+dr|0;this._b=this._c+dl+er|0;this._c=this._d+el+ar|0;this._d=this._e+al+br|0;this._e=this._a+bl+cr|0;this._a=t;};RIPEMD160.prototype._digest=function(){// create padding and handle blocks |
|
|
this._block[this._blockOffset++]=0x80;if(this._blockOffset>56){this._block.fill(0,this._blockOffset,64);this._update();this._blockOffset=0;}this._block.fill(0,this._blockOffset,56);this._block.writeUInt32LE(this._length[0],56);this._block.writeUInt32LE(this._length[1],60);this._update();// produce result |
|
|
var buffer=Buffer.alloc?Buffer.alloc(20):new Buffer(20);buffer.writeInt32LE(this._a,0);buffer.writeInt32LE(this._b,4);buffer.writeInt32LE(this._c,8);buffer.writeInt32LE(this._d,12);buffer.writeInt32LE(this._e,16);return buffer;};function rotl(x,n){return x<<n|x>>>32-n;}function fn1(a,b,c,d,e,m,k,s){return rotl(a+(b^c^d)+m+k|0,s)+e|0;}function fn2(a,b,c,d,e,m,k,s){return rotl(a+(b&c|~b&d)+m+k|0,s)+e|0;}function fn3(a,b,c,d,e,m,k,s){return rotl(a+((b|~c)^d)+m+k|0,s)+e|0;}function fn4(a,b,c,d,e,m,k,s){return rotl(a+(b&d|c&~d)+m+k|0,s)+e|0;}function fn5(a,b,c,d,e,m,k,s){return rotl(a+(b^(c|~d))+m+k|0,s)+e|0;}module.exports=RIPEMD160;},{"buffer":214,"hash-base":347,"inherits":364}],470:[function(require,module,exports){/* eslint-disable node/no-deprecated-api */var buffer=require('buffer');var Buffer=buffer.Buffer;// alternative to using Object.keys for old browsers |
|
|
function copyProps(src,dst){for(var key in src){dst[key]=src[key];}}if(Buffer.from&&Buffer.alloc&&Buffer.allocUnsafe&&Buffer.allocUnsafeSlow){module.exports=buffer;}else{// Copy properties from require('buffer') |
|
|
copyProps(buffer,exports);exports.Buffer=SafeBuffer;}function SafeBuffer(arg,encodingOrOffset,length){return Buffer(arg,encodingOrOffset,length);}// Copy static methods from Buffer |
|
|
copyProps(Buffer,SafeBuffer);SafeBuffer.from=function(arg,encodingOrOffset,length){if(typeof arg==='number'){throw new TypeError('Argument must not be a number');}return Buffer(arg,encodingOrOffset,length);};SafeBuffer.alloc=function(size,fill,encoding){if(typeof size!=='number'){throw new TypeError('Argument must be a number');}var buf=Buffer(size);if(fill!==undefined){if(typeof encoding==='string'){buf.fill(fill,encoding);}else{buf.fill(fill);}}else{buf.fill(0);}return buf;};SafeBuffer.allocUnsafe=function(size){if(typeof size!=='number'){throw new TypeError('Argument must be a number');}return Buffer(size);};SafeBuffer.allocUnsafeSlow=function(size){if(typeof size!=='number'){throw new TypeError('Argument must be a number');}return buffer.SlowBuffer(size);};},{"buffer":214}],471:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var ed5=require("xmlchars/xml/1.0/ed5");var ed2=require("xmlchars/xml/1.1/ed2");var NSed3=require("xmlchars/xmlns/1.0/ed3");var isS=ed5.isS;var isChar10=ed5.isChar;var isNameStartChar=ed5.isNameStartChar;var isNameChar=ed5.isNameChar;var S_LIST=ed5.S_LIST;var NAME_RE=ed5.NAME_RE;var isChar11=ed2.isChar;var isNCNameStartChar=NSed3.isNCNameStartChar;var isNCNameChar=NSed3.isNCNameChar;var NC_NAME_RE=NSed3.NC_NAME_RE;var XML_NAMESPACE="http://www.w3.org/XML/1998/namespace";var XMLNS_NAMESPACE="http://www.w3.org/2000/xmlns/";var rootNS={// eslint-disable-next-line @typescript-eslint/no-explicit-any |
|
|
__proto__:null,xml:XML_NAMESPACE,xmlns:XMLNS_NAMESPACE};var XML_ENTITIES={// eslint-disable-next-line @typescript-eslint/no-explicit-any |
|
|
__proto__:null,amp:"&",gt:">",lt:"<",quot:"\"",apos:"'"};// EOC: end-of-chunk |
|
|
var EOC=-1;var NL_LIKE=-2;var S_BEGIN=0;// Initial state. |
|
|
var S_BEGIN_WHITESPACE=1;// leading whitespace |
|
|
var S_DOCTYPE=2;// <!DOCTYPE |
|
|
var S_DOCTYPE_QUOTE=3;// <!DOCTYPE "//blah |
|
|
var S_DTD=4;// <!DOCTYPE "//blah" [ ... |
|
|
var S_DTD_QUOTED=5;// <!DOCTYPE "//blah" [ "foo |
|
|
var S_DTD_OPEN_WAKA=6;var S_DTD_OPEN_WAKA_BANG=7;var S_DTD_COMMENT=8;// <!-- |
|
|
var S_DTD_COMMENT_ENDING=9;// <!-- blah - |
|
|
var S_DTD_COMMENT_ENDED=10;// <!-- blah -- |
|
|
var S_DTD_PI=11;// <? |
|
|
var S_DTD_PI_ENDING=12;// <?hi "there" ? |
|
|
var S_TEXT=13;// general stuff |
|
|
var S_ENTITY=14;// & and such |
|
|
var S_OPEN_WAKA=15;// < |
|
|
var S_OPEN_WAKA_BANG=16;// <!... |
|
|
var S_COMMENT=17;// <!-- |
|
|
var S_COMMENT_ENDING=18;// <!-- blah - |
|
|
var S_COMMENT_ENDED=19;// <!-- blah -- |
|
|
var S_CDATA=20;// <![CDATA[ something |
|
|
var S_CDATA_ENDING=21;// ] |
|
|
var S_CDATA_ENDING_2=22;// ]] |
|
|
var S_PI_FIRST_CHAR=23;// <?hi, first char |
|
|
var S_PI_REST=24;// <?hi, rest of the name |
|
|
var S_PI_BODY=25;// <?hi there |
|
|
var S_PI_ENDING=26;// <?hi "there" ? |
|
|
var S_XML_DECL_NAME_START=27;// <?xml |
|
|
var S_XML_DECL_NAME=28;// <?xml foo |
|
|
var S_XML_DECL_EQ=29;// <?xml foo= |
|
|
var S_XML_DECL_VALUE_START=30;// <?xml foo= |
|
|
var S_XML_DECL_VALUE=31;// <?xml foo="bar" |
|
|
var S_XML_DECL_SEPARATOR=32;// <?xml foo="bar" |
|
|
var S_XML_DECL_ENDING=33;// <?xml ... ? |
|
|
var S_OPEN_TAG=34;// <strong |
|
|
var S_OPEN_TAG_SLASH=35;// <strong / |
|
|
var S_ATTRIB=36;// <a |
|
|
var S_ATTRIB_NAME=37;// <a foo |
|
|
var S_ATTRIB_NAME_SAW_WHITE=38;// <a foo _ |
|
|
var S_ATTRIB_VALUE=39;// <a foo= |
|
|
var S_ATTRIB_VALUE_QUOTED=40;// <a foo="bar |
|
|
var S_ATTRIB_VALUE_CLOSED=41;// <a foo="bar" |
|
|
var S_ATTRIB_VALUE_UNQUOTED=42;// <a foo=bar |
|
|
var S_CLOSE_TAG=43;// </a |
|
|
var S_CLOSE_TAG_SAW_WHITE=44;// </a > |
|
|
var TAB=9;var NL=0xA;var CR=0xD;var SPACE=0x20;var BANG=0x21;var DQUOTE=0x22;var AMP=0x26;var SQUOTE=0x27;var MINUS=0x2D;var FORWARD_SLASH=0x2F;var SEMICOLON=0x3B;var LESS=0x3C;var EQUAL=0x3D;var GREATER=0x3E;var QUESTION=0x3F;var OPEN_BRACKET=0x5B;var CLOSE_BRACKET=0x5D;var NEL=0x85;var LS=0x2028;// Line Separator |
|
|
var isQuote=function isQuote(c){return c===DQUOTE||c===SQUOTE;};var QUOTES=[DQUOTE,SQUOTE];var DOCTYPE_TERMINATOR=[].concat(QUOTES,[OPEN_BRACKET,GREATER]);var DTD_TERMINATOR=[].concat(QUOTES,[LESS,CLOSE_BRACKET]);var XML_DECL_NAME_TERMINATOR=[EQUAL,QUESTION].concat(_toConsumableArray2(S_LIST));var ATTRIB_VALUE_UNQUOTED_TERMINATOR=[].concat(_toConsumableArray2(S_LIST),[GREATER,AMP,LESS]);function nsPairCheck(parser,prefix,uri){switch(prefix){case"xml":if(uri!==XML_NAMESPACE){parser.fail("xml prefix must be bound to ".concat(XML_NAMESPACE,"."));}break;case"xmlns":if(uri!==XMLNS_NAMESPACE){parser.fail("xmlns prefix must be bound to ".concat(XMLNS_NAMESPACE,"."));}break;default:}switch(uri){case XMLNS_NAMESPACE:parser.fail(prefix===""?"the default namespace may not be set to ".concat(uri,"."):"may not assign a prefix (even \"xmlns\") to the URI ".concat(XMLNS_NAMESPACE,"."));break;case XML_NAMESPACE:switch(prefix){case"xml":// Assinging the XML namespace to "xml" is fine. |
|
|
break;case"":parser.fail("the default namespace may not be set to ".concat(uri,"."));break;default:parser.fail("may not assign the xml namespace to another prefix.");}break;default:}}function nsMappingCheck(parser,mapping){for(var _i4=0,_Object$keys=Object.keys(mapping);_i4<_Object$keys.length;_i4++){var local=_Object$keys[_i4];nsPairCheck(parser,local,mapping[local]);}}var isNCName=function isNCName(name){return NC_NAME_RE.test(name);};var isName=function isName(name){return NAME_RE.test(name);};var FORBIDDEN_START=0;var FORBIDDEN_BRACKET=1;var FORBIDDEN_BRACKET_BRACKET=2;/** |
|
|
* The list of supported events. |
|
|
*/exports.EVENTS=["xmldecl","text","processinginstruction","doctype","comment","opentagstart","attribute","opentag","closetag","cdata","error","end","ready"];var EVENT_NAME_TO_HANDLER_NAME={xmldecl:"xmldeclHandler",text:"textHandler",processinginstruction:"piHandler",doctype:"doctypeHandler",comment:"commentHandler",opentagstart:"openTagStartHandler",attribute:"attributeHandler",opentag:"openTagHandler",closetag:"closeTagHandler",cdata:"cdataHandler",error:"errorHandler",end:"endHandler",ready:"readyHandler"};var SaxesParser=/*#__PURE__*/function(){/** |
|
|
* @param opt The parser options. |
|
|
*/function SaxesParser(opt){_classCallCheck2(this,SaxesParser);this.opt=opt!==null&&opt!==void 0?opt:{};this.fragmentOpt=!!this.opt.fragment;var xmlnsOpt=this.xmlnsOpt=!!this.opt.xmlns;this.trackPosition=this.opt.position!==false;this.fileName=this.opt.fileName;if(xmlnsOpt){// This is the function we use to perform name checks on PIs and entities. |
|
|
// When namespaces are used, colons are not allowed in PI target names or |
|
|
// entity names. So the check depends on whether namespaces are used. See: |
|
|
// |
|
|
// https://www.w3.org/XML/xml-names-19990114-errata.html |
|
|
// NE08 |
|
|
// |
|
|
this.nameStartCheck=isNCNameStartChar;this.nameCheck=isNCNameChar;this.isName=isNCName;// eslint-disable-next-line @typescript-eslint/unbound-method |
|
|
this.processAttribs=this.processAttribsNS;// eslint-disable-next-line @typescript-eslint/unbound-method |
|
|
this.pushAttrib=this.pushAttribNS;// eslint-disable-next-line @typescript-eslint/no-explicit-any |
|
|
this.ns=Object.assign({__proto__:null},rootNS);var additional=this.opt.additionalNamespaces;if(additional!=null){nsMappingCheck(this,additional);Object.assign(this.ns,additional);}}else{this.nameStartCheck=isNameStartChar;this.nameCheck=isNameChar;this.isName=isName;// eslint-disable-next-line @typescript-eslint/unbound-method |
|
|
this.processAttribs=this.processAttribsPlain;// eslint-disable-next-line @typescript-eslint/unbound-method |
|
|
this.pushAttrib=this.pushAttribPlain;}// |
|
|
// The order of the members in this table needs to correspond to the state |
|
|
// numbers given to the states that correspond to the methods being recorded |
|
|
// here. |
|
|
// |
|
|
this.stateTable=[/* eslint-disable @typescript-eslint/unbound-method */this.sBegin,this.sBeginWhitespace,this.sDoctype,this.sDoctypeQuote,this.sDTD,this.sDTDQuoted,this.sDTDOpenWaka,this.sDTDOpenWakaBang,this.sDTDComment,this.sDTDCommentEnding,this.sDTDCommentEnded,this.sDTDPI,this.sDTDPIEnding,this.sText,this.sEntity,this.sOpenWaka,this.sOpenWakaBang,this.sComment,this.sCommentEnding,this.sCommentEnded,this.sCData,this.sCDataEnding,this.sCDataEnding2,this.sPIFirstChar,this.sPIRest,this.sPIBody,this.sPIEnding,this.sXMLDeclNameStart,this.sXMLDeclName,this.sXMLDeclEq,this.sXMLDeclValueStart,this.sXMLDeclValue,this.sXMLDeclSeparator,this.sXMLDeclEnding,this.sOpenTag,this.sOpenTagSlash,this.sAttrib,this.sAttribName,this.sAttribNameSawWhite,this.sAttribValue,this.sAttribValueQuoted,this.sAttribValueClosed,this.sAttribValueUnquoted,this.sCloseTag,this.sCloseTagSawWhite];this._init();}/** |
|
|
* Indicates whether or not the parser is closed. If ``true``, wait for |
|
|
* the ``ready`` event to write again. |
|
|
*/_createClass2(SaxesParser,[{key:"_init",value:function _init(){var _a;this.openWakaBang="";this.text="";this.name="";this.piTarget="";this.entity="";this.q=null;this.tags=[];this.tag=null;this.topNS=null;this.chunk="";this.chunkPosition=0;this.i=0;this.prevI=0;this.carriedFromPrevious=undefined;this.forbiddenState=FORBIDDEN_START;this.attribList=[];// The logic is organized so as to minimize the need to check |
|
|
// this.opt.fragment while parsing. |
|
|
var fragmentOpt=this.fragmentOpt;this.state=fragmentOpt?S_TEXT:S_BEGIN;// We want these to be all true if we are dealing with a fragment. |
|
|
this.reportedTextBeforeRoot=this.reportedTextAfterRoot=this.closedRoot=this.sawRoot=fragmentOpt;// An XML declaration is intially possible only when parsing whole |
|
|
// documents. |
|
|
this.xmlDeclPossible=!fragmentOpt;this.xmlDeclExpects=["version"];this.entityReturnState=undefined;var defaultXMLVersion=this.opt.defaultXMLVersion;if(defaultXMLVersion===undefined){if(this.opt.forceXMLVersion===true){throw new Error("forceXMLVersion set but defaultXMLVersion is not set");}defaultXMLVersion="1.0";}this.setXMLVersion(defaultXMLVersion);this.positionAtNewLine=0;this.doctype=false;this._closed=false;this.xmlDecl={version:undefined,encoding:undefined,standalone:undefined};this.line=1;this.column=0;this.ENTITIES=Object.create(XML_ENTITIES);// eslint-disable-next-line no-unused-expressions |
|
|
(_a=this.readyHandler)===null||_a===void 0?void 0:_a.call(this);}/** |
|
|
* The stream position the parser is currently looking at. This field is |
|
|
* zero-based. |
|
|
* |
|
|
* This field is not based on counting Unicode characters but is to be |
|
|
* interpreted as a plain index into a JavaScript string. |
|
|
*/},{key:"on",/** |
|
|
* Set an event listener on an event. The parser supports one handler per |
|
|
* event type. If you try to set an event handler over an existing handler, |
|
|
* the old handler is silently overwritten. |
|
|
* |
|
|
* @param name The event to listen to. |
|
|
* |
|
|
* @param handler The handler to set. |
|
|
*/value:function on(name,handler){// eslint-disable-next-line @typescript-eslint/no-explicit-any |
|
|
this[EVENT_NAME_TO_HANDLER_NAME[name]]=handler;}/** |
|
|
* Unset an event handler. |
|
|
* |
|
|
* @parma name The event to stop listening to. |
|
|
*/},{key:"off",value:function off(name){// eslint-disable-next-line @typescript-eslint/no-explicit-any |
|
|
this[EVENT_NAME_TO_HANDLER_NAME[name]]=undefined;}/** |
|
|
* Make an error object. The error object will have a message that contains |
|
|
* the ``fileName`` option passed at the creation of the parser. If position |
|
|
* tracking was turned on, it will also have line and column number |
|
|
* information. |
|
|
* |
|
|
* @param message The message describing the error to report. |
|
|
* |
|
|
* @returns An error object with a properly formatted message. |
|
|
*/},{key:"makeError",value:function makeError(message){var _a;var msg=(_a=this.fileName)!==null&&_a!==void 0?_a:"";if(this.trackPosition){if(msg.length>0){msg+=":";}msg+="".concat(this.line,":").concat(this.column);}if(msg.length>0){msg+=": ";}return new Error(msg+message);}/** |
|
|
* Report a parsing error. This method is made public so that client code may |
|
|
* check for issues that are outside the scope of this project and can report |
|
|
* errors. |
|
|
* |
|
|
* @param message The error to report. |
|
|
* |
|
|
* @returns this |
|
|
*/},{key:"fail",value:function fail(message){var err=this.makeError(message);var handler=this.errorHandler;if(handler===undefined){throw err;}else{handler(err);}return this;}/** |
|
|
* Write a XML data to the parser. |
|
|
* |
|
|
* @param chunk The XML data to write. |
|
|
* |
|
|
* @returns this |
|
|
*/},{key:"write",value:function write(chunk){if(this.closed){return this.fail("cannot write after close; assign an onready handler.");}var end=false;if(chunk===null){// We cannot return immediately because carriedFromPrevious may need |
|
|
// processing. |
|
|
end=true;chunk="";}else if(_typeof2(chunk)==="object"){chunk=chunk.toString();}// We checked if performing a pre-decomposition of the string into an array |
|
|
// of single complete characters (``Array.from(chunk)``) would be faster |
|
|
// than the current repeated calls to ``charCodeAt``. As of August 2018, it |
|
|
// isn't. (There may be Node-specific code that would perform faster than |
|
|
// ``Array.from`` but don't want to be dependent on Node.) |
|
|
if(this.carriedFromPrevious!==undefined){// The previous chunk had char we must carry over. |
|
|
chunk="".concat(this.carriedFromPrevious).concat(chunk);this.carriedFromPrevious=undefined;}var limit=chunk.length;var lastCode=chunk.charCodeAt(limit-1);if(!end&&(// A trailing CR or surrogate must be carried over to the next |
|
|
// chunk. |
|
|
lastCode===CR||lastCode>=0xD800&&lastCode<=0xDBFF)){// The chunk ends with a character that must be carried over. We cannot |
|
|
// know how to handle it until we get the next chunk or the end of the |
|
|
// stream. So save it for later. |
|
|
this.carriedFromPrevious=chunk[limit-1];limit--;chunk=chunk.slice(0,limit);}var stateTable=this.stateTable;this.chunk=chunk;this.i=0;while(this.i<limit){// eslint-disable-next-line @typescript-eslint/no-explicit-any |
|
|
stateTable[this.state].call(this);}this.chunkPosition+=limit;return end?this.end():this;}/** |
|
|
* Close the current stream. Perform final well-formedness checks and reset |
|
|
* the parser tstate. |
|
|
* |
|
|
* @returns this |
|
|
*/},{key:"close",value:function close(){return this.write(null);}/** |
|
|
* Get a single code point out of the current chunk. This updates the current |
|
|
* position if we do position tracking. |
|
|
* |
|
|
* This is the algorithm to use for XML 1.0. |
|
|
* |
|
|
* @returns The character read. |
|
|
*/},{key:"getCode10",value:function getCode10(){var chunk=this.chunk,i=this.i;this.prevI=i;// Yes, we do this instead of doing this.i++. Doing it this way, we do not |
|
|
// read this.i again, which is a bit faster. |
|
|
this.i=i+1;if(i>=chunk.length){return EOC;}// Using charCodeAt and handling the surrogates ourselves is faster |
|
|
// than using codePointAt. |
|
|
var code=chunk.charCodeAt(i);this.column++;if(code<0xD800){if(code>=SPACE||code===TAB){return code;}switch(code){case NL:this.line++;this.column=0;this.positionAtNewLine=this.position;return NL;case CR:// We may get NaN if we read past the end of the chunk, which is fine. |
|
|
if(chunk.charCodeAt(i+1)===NL){// A \r\n sequence is converted to \n so we have to skip over the |
|
|
// next character. We already know it has a size of 1 so ++ is fine |
|
|
// here. |
|
|
this.i=i+2;}// Otherwise, a \r is just converted to \n, so we don't have to skip |
|
|
// ahead. |
|
|
// In either case, \r becomes \n. |
|
|
this.line++;this.column=0;this.positionAtNewLine=this.position;return NL_LIKE;default:// If we get here, then code < SPACE and it is not NL CR or TAB. |
|
|
this.fail("disallowed character.");return code;}}if(code>0xDBFF){// This is a specialized version of isChar10 that takes into account |
|
|
// that in this context code > 0xDBFF and code <= 0xFFFF. So it does not |
|
|
// test cases that don't need testing. |
|
|
if(!(code>=0xE000&&code<=0xFFFD)){this.fail("disallowed character.");}return code;}var final=0x10000+(code-0xD800)*0x400+(chunk.charCodeAt(i+1)-0xDC00);this.i=i+2;// This is a specialized version of isChar10 that takes into account that in |
|
|
// this context necessarily final >= 0x10000. |
|
|
if(final>0x10FFFF){this.fail("disallowed character.");}return final;}/** |
|
|
* Get a single code point out of the current chunk. This updates the current |
|
|
* position if we do position tracking. |
|
|
* |
|
|
* This is the algorithm to use for XML 1.1. |
|
|
* |
|
|
* @returns {number} The character read. |
|
|
*/},{key:"getCode11",value:function getCode11(){var chunk=this.chunk,i=this.i;this.prevI=i;// Yes, we do this instead of doing this.i++. Doing it this way, we do not |
|
|
// read this.i again, which is a bit faster. |
|
|
this.i=i+1;if(i>=chunk.length){return EOC;}// Using charCodeAt and handling the surrogates ourselves is faster |
|
|
// than using codePointAt. |
|
|
var code=chunk.charCodeAt(i);this.column++;if(code<0xD800){if(code>0x1F&&code<0x7F||code>0x9F&&code!==LS||code===TAB){return code;}switch(code){case NL:// 0xA |
|
|
this.line++;this.column=0;this.positionAtNewLine=this.position;return NL;case CR:{// 0xD |
|
|
// We may get NaN if we read past the end of the chunk, which is |
|
|
// fine. |
|
|
var next=chunk.charCodeAt(i+1);if(next===NL||next===NEL){// A CR NL or CR NEL sequence is converted to NL so we have to skip |
|
|
// over the next character. We already know it has a size of 1. |
|
|
this.i=i+2;}// Otherwise, a CR is just converted to NL, no skip. |
|
|
}/* yes, fall through */case NEL:// 0x85 |
|
|
case LS:// Ox2028 |
|
|
this.line++;this.column=0;this.positionAtNewLine=this.position;return NL_LIKE;default:this.fail("disallowed character.");return code;}}if(code>0xDBFF){// This is a specialized version of isCharAndNotRestricted that takes into |
|
|
// account that in this context code > 0xDBFF and code <= 0xFFFF. So it |
|
|
// does not test cases that don't need testing. |
|
|
if(!(code>=0xE000&&code<=0xFFFD)){this.fail("disallowed character.");}return code;}var final=0x10000+(code-0xD800)*0x400+(chunk.charCodeAt(i+1)-0xDC00);this.i=i+2;// This is a specialized version of isCharAndNotRestricted that takes into |
|
|
// account that in this context necessarily final >= 0x10000. |
|
|
if(final>0x10FFFF){this.fail("disallowed character.");}return final;}/** |
|
|
* Like ``getCode`` but with the return value normalized so that ``NL`` is |
|
|
* returned for ``NL_LIKE``. |
|
|
*/},{key:"getCodeNorm",value:function getCodeNorm(){var c=this.getCode();return c===NL_LIKE?NL:c;}},{key:"unget",value:function unget(){this.i=this.prevI;this.column--;}/** |
|
|
* Capture characters into a buffer until encountering one of a set of |
|
|
* characters. |
|
|
* |
|
|
* @param chars An array of codepoints. Encountering a character in the array |
|
|
* ends the capture. (``chars`` may safely contain ``NL``.) |
|
|
* |
|
|
* @return The character code that made the capture end, or ``EOC`` if we hit |
|
|
* the end of the chunk. The return value cannot be NL_LIKE: NL is returned |
|
|
* instead. |
|
|
*/},{key:"captureTo",value:function captureTo(chars){var start=this.i;var chunk=this.chunk;// eslint-disable-next-line no-constant-condition |
|
|
while(true){var c=this.getCode();var isNLLike=c===NL_LIKE;var final=isNLLike?NL:c;if(final===EOC||chars.includes(final)){this.text+=chunk.slice(start,this.prevI);return final;}if(isNLLike){this.text+="".concat(chunk.slice(start,this.prevI),"\n");start=this.i;}}}/** |
|
|
* Capture characters into a buffer until encountering a character. |
|
|
* |
|
|
* @param char The codepoint that ends the capture. **NOTE ``char`` MAY NOT |
|
|
* CONTAIN ``NL``.** Passing ``NL`` will result in buggy behavior. |
|
|
* |
|
|
* @return ``true`` if we ran into the character. Otherwise, we ran into the |
|
|
* end of the current chunk. |
|
|
*/},{key:"captureToChar",value:function captureToChar(char){var start=this.i;var chunk=this.chunk;// eslint-disable-next-line no-constant-condition |
|
|
while(true){var c=this.getCode();switch(c){case NL_LIKE:this.text+="".concat(chunk.slice(start,this.prevI),"\n");start=this.i;c=NL;break;case EOC:this.text+=chunk.slice(start);return false;default:}if(c===char){this.text+=chunk.slice(start,this.prevI);return true;}}}/** |
|
|
* Capture characters that satisfy ``isNameChar`` into the ``name`` field of |
|
|
* this parser. |
|
|
* |
|
|
* @return The character code that made the test fail, or ``EOC`` if we hit |
|
|
* the end of the chunk. The return value cannot be NL_LIKE: NL is returned |
|
|
* instead. |
|
|
*/},{key:"captureNameChars",value:function captureNameChars(){var chunk=this.chunk,start=this.i;// eslint-disable-next-line no-constant-condition |
|
|
while(true){var c=this.getCode();if(c===EOC){this.name+=chunk.slice(start);return EOC;}// NL is not a name char so we don't have to test specifically for it. |
|
|
if(!isNameChar(c)){this.name+=chunk.slice(start,this.prevI);return c===NL_LIKE?NL:c;}}}/** |
|
|
* Skip white spaces. |
|
|
* |
|
|
* @return The character that ended the skip, or ``EOC`` if we hit |
|
|
* the end of the chunk. The return value cannot be NL_LIKE: NL is returned |
|
|
* instead. |
|
|
*/},{key:"skipSpaces",value:function skipSpaces(){// eslint-disable-next-line no-constant-condition |
|
|
while(true){var c=this.getCodeNorm();if(c===EOC||!isS(c)){return c;}}}},{key:"setXMLVersion",value:function setXMLVersion(version){this.currentXMLVersion=version;/* eslint-disable @typescript-eslint/unbound-method */if(version==="1.0"){this.isChar=isChar10;this.getCode=this.getCode10;}else{this.isChar=isChar11;this.getCode=this.getCode11;}/* eslint-enable @typescript-eslint/unbound-method */}// STATE ENGINE METHODS |
|
|
// This needs to be a state separate from S_BEGIN_WHITESPACE because we want |
|
|
// to be sure never to come back to this state later. |
|
|
},{key:"sBegin",value:function sBegin(){// We are essentially peeking at the first character of the chunk. Since |
|
|
// S_BEGIN can be in effect only when we start working on the first chunk, |
|
|
// the index at which we must look is necessarily 0. Note also that the |
|
|
// following test does not depend on decoding surrogates. |
|
|
// If the initial character is 0xFEFF, ignore it. |
|
|
if(this.chunk.charCodeAt(0)===0xFEFF){this.i++;this.column++;}this.state=S_BEGIN_WHITESPACE;}},{key:"sBeginWhitespace",value:function sBeginWhitespace(){// We need to know whether we've encountered spaces or not because as soon |
|
|
// as we run into a space, an XML declaration is no longer possible. Rather |
|
|
// than slow down skipSpaces even in places where we don't care whether it |
|
|
// skipped anything or not, we check whether prevI is equal to the value of |
|
|
// i from before we skip spaces. |
|
|
var iBefore=this.i;var c=this.skipSpaces();if(this.prevI!==iBefore){this.xmlDeclPossible=false;}switch(c){case LESS:this.state=S_OPEN_WAKA;// We could naively call closeText but in this state, it is not normal |
|
|
// to have text be filled with any data. |
|
|
if(this.text.length!==0){throw new Error("no-empty text at start");}break;case EOC:break;default:this.unget();this.state=S_TEXT;this.xmlDeclPossible=false;}}},{key:"sDoctype",value:function sDoctype(){var _a;var c=this.captureTo(DOCTYPE_TERMINATOR);switch(c){case GREATER:{// eslint-disable-next-line no-unused-expressions |
|
|
(_a=this.doctypeHandler)===null||_a===void 0?void 0:_a.call(this,this.text);this.text="";this.state=S_TEXT;this.doctype=true;// just remember that we saw it. |
|
|
break;}case EOC:break;default:this.text+=String.fromCodePoint(c);if(c===OPEN_BRACKET){this.state=S_DTD;}else if(isQuote(c)){this.state=S_DOCTYPE_QUOTE;this.q=c;}}}},{key:"sDoctypeQuote",value:function sDoctypeQuote(){var q=this.q;if(this.captureToChar(q)){this.text+=String.fromCodePoint(q);this.q=null;this.state=S_DOCTYPE;}}},{key:"sDTD",value:function sDTD(){var c=this.captureTo(DTD_TERMINATOR);if(c===EOC){return;}this.text+=String.fromCodePoint(c);if(c===CLOSE_BRACKET){this.state=S_DOCTYPE;}else if(c===LESS){this.state=S_DTD_OPEN_WAKA;}else if(isQuote(c)){this.state=S_DTD_QUOTED;this.q=c;}}},{key:"sDTDQuoted",value:function sDTDQuoted(){var q=this.q;if(this.captureToChar(q)){this.text+=String.fromCodePoint(q);this.state=S_DTD;this.q=null;}}},{key:"sDTDOpenWaka",value:function sDTDOpenWaka(){var c=this.getCodeNorm();this.text+=String.fromCodePoint(c);switch(c){case BANG:this.state=S_DTD_OPEN_WAKA_BANG;this.openWakaBang="";break;case QUESTION:this.state=S_DTD_PI;break;default:this.state=S_DTD;}}},{key:"sDTDOpenWakaBang",value:function sDTDOpenWakaBang(){var char=String.fromCodePoint(this.getCodeNorm());var owb=this.openWakaBang+=char;this.text+=char;if(owb!=="-"){this.state=owb==="--"?S_DTD_COMMENT:S_DTD;this.openWakaBang="";}}},{key:"sDTDComment",value:function sDTDComment(){if(this.captureToChar(MINUS)){this.text+="-";this.state=S_DTD_COMMENT_ENDING;}}},{key:"sDTDCommentEnding",value:function sDTDCommentEnding(){var c=this.getCodeNorm();this.text+=String.fromCodePoint(c);this.state=c===MINUS?S_DTD_COMMENT_ENDED:S_DTD_COMMENT;}},{key:"sDTDCommentEnded",value:function sDTDCommentEnded(){var c=this.getCodeNorm();this.text+=String.fromCodePoint(c);if(c===GREATER){this.state=S_DTD;}else{this.fail("malformed comment.");// <!-- blah -- bloo --> will be recorded as |
|
|
// a comment of " blah -- bloo " |
|
|
this.state=S_DTD_COMMENT;}}},{key:"sDTDPI",value:function sDTDPI(){if(this.captureToChar(QUESTION)){this.text+="?";this.state=S_DTD_PI_ENDING;}}},{key:"sDTDPIEnding",value:function sDTDPIEnding(){var c=this.getCodeNorm();this.text+=String.fromCodePoint(c);if(c===GREATER){this.state=S_DTD;}}},{key:"sText",value:function sText(){// |
|
|
// We did try a version of saxes where the S_TEXT state was split in two |
|
|
// states: one for text inside the root element, and one for text |
|
|
// outside. This was avoiding having to test this.tags.length to decide |
|
|
// what implementation to actually use. |
|
|
// |
|
|
// Peformance testing on gigabyte-size files did not show any advantage to |
|
|
// using the two states solution instead of the current one. Conversely, it |
|
|
// made the code a bit more complicated elsewhere. For instance, a comment |
|
|
// can appear before the root element so when a comment ended it was |
|
|
// necessary to determine whether to return to the S_TEXT state or to the |
|
|
// new text-outside-root state. |
|
|
// |
|
|
if(this.tags.length!==0){this.handleTextInRoot();}else{this.handleTextOutsideRoot();}}},{key:"sEntity",value:function sEntity(){// This is essentially a specialized version of captureToChar(SEMICOLON...) |
|
|
var start=this.i;var chunk=this.chunk;// eslint-disable-next-line no-labels, no-restricted-syntax |
|
|
loop:// eslint-disable-next-line no-constant-condition |
|
|
while(true){switch(this.getCode()){case NL_LIKE:this.entity+="".concat(chunk.slice(start,this.prevI),"\n");start=this.i;break;case SEMICOLON:{var entityReturnState=this.entityReturnState;var entity=this.entity+chunk.slice(start,this.prevI);this.state=entityReturnState;var parsed=void 0;if(entity===""){this.fail("empty entity name.");parsed="&;";}else{parsed=this.parseEntity(entity);this.entity="";}if(entityReturnState!==S_TEXT||this.textHandler!==undefined){this.text+=parsed;}// eslint-disable-next-line no-labels |
|
|
break loop;}case EOC:this.entity+=chunk.slice(start);// eslint-disable-next-line no-labels |
|
|
break loop;default:}}}},{key:"sOpenWaka",value:function sOpenWaka(){// Reminder: a state handler is called with at least one character |
|
|
// available in the current chunk. So the first call to get code inside of |
|
|
// a state handler cannot return ``EOC``. That's why we don't test |
|
|
// for it. |
|
|
var c=this.getCode();// either a /, ?, !, or text is coming next. |
|
|
if(isNameStartChar(c)){this.state=S_OPEN_TAG;this.unget();this.xmlDeclPossible=false;}else{switch(c){case FORWARD_SLASH:this.state=S_CLOSE_TAG;this.xmlDeclPossible=false;break;case BANG:this.state=S_OPEN_WAKA_BANG;this.openWakaBang="";this.xmlDeclPossible=false;break;case QUESTION:this.state=S_PI_FIRST_CHAR;break;default:this.fail("disallowed character in tag name");this.state=S_TEXT;this.xmlDeclPossible=false;}}}},{key:"sOpenWakaBang",value:function sOpenWakaBang(){this.openWakaBang+=String.fromCodePoint(this.getCodeNorm());switch(this.openWakaBang){case"[CDATA[":if(!this.sawRoot&&!this.reportedTextBeforeRoot){this.fail("text data outside of root node.");this.reportedTextBeforeRoot=true;}if(this.closedRoot&&!this.reportedTextAfterRoot){this.fail("text data outside of root node.");this.reportedTextAfterRoot=true;}this.state=S_CDATA;this.openWakaBang="";break;case"--":this.state=S_COMMENT;this.openWakaBang="";break;case"DOCTYPE":this.state=S_DOCTYPE;if(this.doctype||this.sawRoot){this.fail("inappropriately located doctype declaration.");}this.openWakaBang="";break;default:// 7 happens to be the maximum length of the string that can possibly |
|
|
// match one of the cases above. |
|
|
if(this.openWakaBang.length>=7){this.fail("incorrect syntax.");}}}},{key:"sComment",value:function sComment(){if(this.captureToChar(MINUS)){this.state=S_COMMENT_ENDING;}}},{key:"sCommentEnding",value:function sCommentEnding(){var _a;var c=this.getCodeNorm();if(c===MINUS){this.state=S_COMMENT_ENDED;// eslint-disable-next-line no-unused-expressions |
|
|
(_a=this.commentHandler)===null||_a===void 0?void 0:_a.call(this,this.text);this.text="";}else{this.text+="-".concat(String.fromCodePoint(c));this.state=S_COMMENT;}}},{key:"sCommentEnded",value:function sCommentEnded(){var c=this.getCodeNorm();if(c!==GREATER){this.fail("malformed comment.");// <!-- blah -- bloo --> will be recorded as |
|
|
// a comment of " blah -- bloo " |
|
|
this.text+="--".concat(String.fromCodePoint(c));this.state=S_COMMENT;}else{this.state=S_TEXT;}}},{key:"sCData",value:function sCData(){if(this.captureToChar(CLOSE_BRACKET)){this.state=S_CDATA_ENDING;}}},{key:"sCDataEnding",value:function sCDataEnding(){var c=this.getCodeNorm();if(c===CLOSE_BRACKET){this.state=S_CDATA_ENDING_2;}else{this.text+="]".concat(String.fromCodePoint(c));this.state=S_CDATA;}}},{key:"sCDataEnding2",value:function sCDataEnding2(){var _a;var c=this.getCodeNorm();switch(c){case GREATER:{// eslint-disable-next-line no-unused-expressions |
|
|
(_a=this.cdataHandler)===null||_a===void 0?void 0:_a.call(this,this.text);this.text="";this.state=S_TEXT;break;}case CLOSE_BRACKET:this.text+="]";break;default:this.text+="]]".concat(String.fromCodePoint(c));this.state=S_CDATA;}}// We need this separate state to check the first character fo the pi target |
|
|
// with this.nameStartCheck which allows less characters than this.nameCheck. |
|
|
},{key:"sPIFirstChar",value:function sPIFirstChar(){var c=this.getCodeNorm();// This is first because in the case where the file is well-formed this is |
|
|
// the branch taken. We optimize for well-formedness. |
|
|
if(this.nameStartCheck(c)){this.piTarget+=String.fromCodePoint(c);this.state=S_PI_REST;}else if(c===QUESTION||isS(c)){this.fail("processing instruction without a target.");this.state=c===QUESTION?S_PI_ENDING:S_PI_BODY;}else{this.fail("disallowed character in processing instruction name.");this.piTarget+=String.fromCodePoint(c);this.state=S_PI_REST;}}},{key:"sPIRest",value:function sPIRest(){// Capture characters into a piTarget while ``this.nameCheck`` run on the |
|
|
// character read returns true. |
|
|
var chunk=this.chunk,start=this.i;// eslint-disable-next-line no-constant-condition |
|
|
while(true){var c=this.getCodeNorm();if(c===EOC){this.piTarget+=chunk.slice(start);return;}// NL cannot satisfy this.nameCheck so we don't have to test specifically |
|
|
// for it. |
|
|
if(!this.nameCheck(c)){this.piTarget+=chunk.slice(start,this.prevI);var isQuestion=c===QUESTION;if(isQuestion||isS(c)){if(this.piTarget==="xml"){if(!this.xmlDeclPossible){this.fail("an XML declaration must be at the start of the document.");}this.state=isQuestion?S_XML_DECL_ENDING:S_XML_DECL_NAME_START;}else{this.state=isQuestion?S_PI_ENDING:S_PI_BODY;}}else{this.fail("disallowed character in processing instruction name.");this.piTarget+=String.fromCodePoint(c);}break;}}}},{key:"sPIBody",value:function sPIBody(){if(this.text.length===0){var c=this.getCodeNorm();if(c===QUESTION){this.state=S_PI_ENDING;}else if(!isS(c)){this.text=String.fromCodePoint(c);}}// The question mark character is not valid inside any of the XML |
|
|
// declaration name/value pairs. |
|
|
else if(this.captureToChar(QUESTION)){this.state=S_PI_ENDING;}}},{key:"sPIEnding",value:function sPIEnding(){var _a;var c=this.getCodeNorm();if(c===GREATER){var piTarget=this.piTarget;if(piTarget.toLowerCase()==="xml"){this.fail("the XML declaration must appear at the start of the document.");}// eslint-disable-next-line no-unused-expressions |
|
|
(_a=this.piHandler)===null||_a===void 0?void 0:_a.call(this,{target:piTarget,body:this.text});this.piTarget=this.text="";this.state=S_TEXT;}else if(c===QUESTION){// We ran into ?? as part of a processing instruction. We initially took |
|
|
// the first ? as a sign that the PI was ending, but it is not. So we have |
|
|
// to add it to the body but we take the new ? as a sign that the PI is |
|
|
// ending. |
|
|
this.text+="?";}else{this.text+="?".concat(String.fromCodePoint(c));this.state=S_PI_BODY;}this.xmlDeclPossible=false;}},{key:"sXMLDeclNameStart",value:function sXMLDeclNameStart(){var c=this.skipSpaces();// The question mark character is not valid inside any of the XML |
|
|
// declaration name/value pairs. |
|
|
if(c===QUESTION){// It is valid to go to S_XML_DECL_ENDING from this state. |
|
|
this.state=S_XML_DECL_ENDING;return;}if(c!==EOC){this.state=S_XML_DECL_NAME;this.name=String.fromCodePoint(c);}}},{key:"sXMLDeclName",value:function sXMLDeclName(){var c=this.captureTo(XML_DECL_NAME_TERMINATOR);// The question mark character is not valid inside any of the XML |
|
|
// declaration name/value pairs. |
|
|
if(c===QUESTION){this.state=S_XML_DECL_ENDING;this.name+=this.text;this.text="";this.fail("XML declaration is incomplete.");return;}if(!(isS(c)||c===EQUAL)){return;}this.name+=this.text;this.text="";if(!this.xmlDeclExpects.includes(this.name)){switch(this.name.length){case 0:this.fail("did not expect any more name/value pairs.");break;case 1:this.fail("expected the name ".concat(this.xmlDeclExpects[0],"."));break;default:this.fail("expected one of ".concat(this.xmlDeclExpects.join(", ")));}}this.state=c===EQUAL?S_XML_DECL_VALUE_START:S_XML_DECL_EQ;}},{key:"sXMLDeclEq",value:function sXMLDeclEq(){var c=this.getCodeNorm();// The question mark character is not valid inside any of the XML |
|
|
// declaration name/value pairs. |
|
|
if(c===QUESTION){this.state=S_XML_DECL_ENDING;this.fail("XML declaration is incomplete.");return;}if(isS(c)){return;}if(c!==EQUAL){this.fail("value required.");}this.state=S_XML_DECL_VALUE_START;}},{key:"sXMLDeclValueStart",value:function sXMLDeclValueStart(){var c=this.getCodeNorm();// The question mark character is not valid inside any of the XML |
|
|
// declaration name/value pairs. |
|
|
if(c===QUESTION){this.state=S_XML_DECL_ENDING;this.fail("XML declaration is incomplete.");return;}if(isS(c)){return;}if(!isQuote(c)){this.fail("value must be quoted.");this.q=SPACE;}else{this.q=c;}this.state=S_XML_DECL_VALUE;}},{key:"sXMLDeclValue",value:function sXMLDeclValue(){var c=this.captureTo([this.q,QUESTION]);// The question mark character is not valid inside any of the XML |
|
|
// declaration name/value pairs. |
|
|
if(c===QUESTION){this.state=S_XML_DECL_ENDING;this.text="";this.fail("XML declaration is incomplete.");return;}if(c===EOC){return;}var value=this.text;this.text="";switch(this.name){case"version":{this.xmlDeclExpects=["encoding","standalone"];var version=value;this.xmlDecl.version=version;// This is the test specified by XML 1.0 but it is fine for XML 1.1. |
|
|
if(!/^1\.[0-9]+$/.test(version)){this.fail("version number must match /^1\\.[0-9]+$/.");}// When forceXMLVersion is set, the XML declaration is ignored. |
|
|
else if(!this.opt.forceXMLVersion){this.setXMLVersion(version);}break;}case"encoding":if(!/^[A-Za-z][A-Za-z0-9._-]*$/.test(value)){this.fail("encoding value must match \ |
|
|
/^[A-Za-z0-9][A-Za-z0-9._-]*$/.");}this.xmlDeclExpects=["standalone"];this.xmlDecl.encoding=value;break;case"standalone":if(value!=="yes"&&value!=="no"){this.fail("standalone value must match \"yes\" or \"no\".");}this.xmlDeclExpects=[];this.xmlDecl.standalone=value;break;default:// We don't need to raise an error here since we've already raised one |
|
|
// when checking what name was expected. |
|
|
}this.name="";this.state=S_XML_DECL_SEPARATOR;}},{key:"sXMLDeclSeparator",value:function sXMLDeclSeparator(){var c=this.getCodeNorm();// The question mark character is not valid inside any of the XML |
|
|
// declaration name/value pairs. |
|
|
if(c===QUESTION){// It is valid to go to S_XML_DECL_ENDING from this state. |
|
|
this.state=S_XML_DECL_ENDING;return;}if(!isS(c)){this.fail("whitespace required.");this.unget();}this.state=S_XML_DECL_NAME_START;}},{key:"sXMLDeclEnding",value:function sXMLDeclEnding(){var _a;var c=this.getCodeNorm();if(c===GREATER){if(this.piTarget!=="xml"){this.fail("processing instructions are not allowed before root.");}else if(this.name!=="version"&&this.xmlDeclExpects.includes("version")){this.fail("XML declaration must contain a version.");}// eslint-disable-next-line no-unused-expressions |
|
|
(_a=this.xmldeclHandler)===null||_a===void 0?void 0:_a.call(this,this.xmlDecl);this.name="";this.piTarget=this.text="";this.state=S_TEXT;}else{// We got here because the previous character was a ?, but the question |
|
|
// mark character is not valid inside any of the XML declaration |
|
|
// name/value pairs. |
|
|
this.fail("The character ? is disallowed anywhere in XML declarations.");}this.xmlDeclPossible=false;}},{key:"sOpenTag",value:function sOpenTag(){var _a;var c=this.captureNameChars();if(c===EOC){return;}var tag=this.tag={name:this.name,attributes:Object.create(null)};this.name="";if(this.xmlnsOpt){this.topNS=tag.ns=Object.create(null);}// eslint-disable-next-line no-unused-expressions |
|
|
(_a=this.openTagStartHandler)===null||_a===void 0?void 0:_a.call(this,tag);this.sawRoot=true;if(!this.fragmentOpt&&this.closedRoot){this.fail("documents may contain only one root.");}switch(c){case GREATER:this.openTag();break;case FORWARD_SLASH:this.state=S_OPEN_TAG_SLASH;break;default:if(!isS(c)){this.fail("disallowed character in tag name.");}this.state=S_ATTRIB;}}},{key:"sOpenTagSlash",value:function sOpenTagSlash(){if(this.getCode()===GREATER){this.openSelfClosingTag();}else{this.fail("forward-slash in opening tag not followed by >.");this.state=S_ATTRIB;}}},{key:"sAttrib",value:function sAttrib(){var c=this.skipSpaces();if(c===EOC){return;}if(isNameStartChar(c)){this.unget();this.state=S_ATTRIB_NAME;}else if(c===GREATER){this.openTag();}else if(c===FORWARD_SLASH){this.state=S_OPEN_TAG_SLASH;}else{this.fail("disallowed character in attribute name.");}}},{key:"sAttribName",value:function sAttribName(){var c=this.captureNameChars();if(c===EQUAL){this.state=S_ATTRIB_VALUE;}else if(isS(c)){this.state=S_ATTRIB_NAME_SAW_WHITE;}else if(c===GREATER){this.fail("attribute without value.");this.pushAttrib(this.name,this.name);this.name=this.text="";this.openTag();}else if(c!==EOC){this.fail("disallowed character in attribute name.");}}},{key:"sAttribNameSawWhite",value:function sAttribNameSawWhite(){var c=this.skipSpaces();switch(c){case EOC:return;case EQUAL:this.state=S_ATTRIB_VALUE;break;default:this.fail("attribute without value.");// Should we do this??? |
|
|
// this.tag.attributes[this.name] = ""; |
|
|
this.text="";this.name="";if(c===GREATER){this.openTag();}else if(isNameStartChar(c)){this.unget();this.state=S_ATTRIB_NAME;}else{this.fail("disallowed character in attribute name.");this.state=S_ATTRIB;}}}},{key:"sAttribValue",value:function sAttribValue(){var c=this.getCodeNorm();if(isQuote(c)){this.q=c;this.state=S_ATTRIB_VALUE_QUOTED;}else if(!isS(c)){this.fail("unquoted attribute value.");this.state=S_ATTRIB_VALUE_UNQUOTED;this.unget();}}},{key:"sAttribValueQuoted",value:function sAttribValueQuoted(){// We deliberately do not use captureTo here. The specialized code we use |
|
|
// here is faster than using captureTo. |
|
|
var q=this.q,chunk=this.chunk;var start=this.i;// eslint-disable-next-line no-constant-condition |
|
|
while(true){switch(this.getCode()){case q:this.pushAttrib(this.name,this.text+chunk.slice(start,this.prevI));this.name=this.text="";this.q=null;this.state=S_ATTRIB_VALUE_CLOSED;return;case AMP:this.text+=chunk.slice(start,this.prevI);this.state=S_ENTITY;this.entityReturnState=S_ATTRIB_VALUE_QUOTED;return;case NL:case NL_LIKE:case TAB:this.text+="".concat(chunk.slice(start,this.prevI)," ");start=this.i;break;case LESS:this.text+=chunk.slice(start,this.prevI);this.fail("disallowed character.");return;case EOC:this.text+=chunk.slice(start);return;default:}}}},{key:"sAttribValueClosed",value:function sAttribValueClosed(){var c=this.getCodeNorm();if(isS(c)){this.state=S_ATTRIB;}else if(c===GREATER){this.openTag();}else if(c===FORWARD_SLASH){this.state=S_OPEN_TAG_SLASH;}else if(isNameStartChar(c)){this.fail("no whitespace between attributes.");this.unget();this.state=S_ATTRIB_NAME;}else{this.fail("disallowed character in attribute name.");}}},{key:"sAttribValueUnquoted",value:function sAttribValueUnquoted(){// We don't do anything regarding EOL or space handling for unquoted |
|
|
// attributes. We already have failed by the time we get here, and the |
|
|
// contract that saxes upholds states that upon failure, it is not safe to |
|
|
// rely on the data passed to event handlers (other than |
|
|
// ``onerror``). Passing "bad" data is not a problem. |
|
|
var c=this.captureTo(ATTRIB_VALUE_UNQUOTED_TERMINATOR);switch(c){case AMP:this.state=S_ENTITY;this.entityReturnState=S_ATTRIB_VALUE_UNQUOTED;break;case LESS:this.fail("disallowed character.");break;case EOC:break;default:if(this.text.includes("]]>")){this.fail("the string \"]]>\" is disallowed in char data.");}this.pushAttrib(this.name,this.text);this.name=this.text="";if(c===GREATER){this.openTag();}else{this.state=S_ATTRIB;}}}},{key:"sCloseTag",value:function sCloseTag(){var c=this.captureNameChars();if(c===GREATER){this.closeTag();}else if(isS(c)){this.state=S_CLOSE_TAG_SAW_WHITE;}else if(c!==EOC){this.fail("disallowed character in closing tag.");}}},{key:"sCloseTagSawWhite",value:function sCloseTagSawWhite(){switch(this.skipSpaces()){case GREATER:this.closeTag();break;case EOC:break;default:this.fail("disallowed character in closing tag.");}}// END OF STATE ENGINE METHODS |
|
|
},{key:"handleTextInRoot",value:function handleTextInRoot(){// This is essentially a specialized version of captureTo which is optimized |
|
|
// for performing the ]]> check. A previous version of this code, checked |
|
|
// ``this.text`` for the presence of ]]>. It simplified the code but was |
|
|
// very costly when character data contained a lot of entities to be parsed. |
|
|
// |
|
|
// Since we are using a specialized loop, we also keep track of the presence |
|
|
// of ]]> in text data. The sequence ]]> is forbidden to appear as-is. |
|
|
// |
|
|
var start=this.i,forbiddenState=this.forbiddenState;var chunk=this.chunk,handler=this.textHandler;// eslint-disable-next-line no-labels, no-restricted-syntax |
|
|
scanLoop:// eslint-disable-next-line no-constant-condition |
|
|
while(true){switch(this.getCode()){case LESS:{this.state=S_OPEN_WAKA;if(handler!==undefined){var text=this.text;var slice=chunk.slice(start,this.prevI);if(text.length!==0){handler(text+slice);this.text="";}else if(slice.length!==0){handler(slice);}}forbiddenState=FORBIDDEN_START;// eslint-disable-next-line no-labels |
|
|
break scanLoop;}case AMP:this.state=S_ENTITY;this.entityReturnState=S_TEXT;if(handler!==undefined){this.text+=chunk.slice(start,this.prevI);}forbiddenState=FORBIDDEN_START;// eslint-disable-next-line no-labels |
|
|
break scanLoop;case CLOSE_BRACKET:switch(forbiddenState){case FORBIDDEN_START:forbiddenState=FORBIDDEN_BRACKET;break;case FORBIDDEN_BRACKET:forbiddenState=FORBIDDEN_BRACKET_BRACKET;break;case FORBIDDEN_BRACKET_BRACKET:break;default:throw new Error("impossible state");}break;case GREATER:if(forbiddenState===FORBIDDEN_BRACKET_BRACKET){this.fail("the string \"]]>\" is disallowed in char data.");}forbiddenState=FORBIDDEN_START;break;case NL_LIKE:if(handler!==undefined){this.text+="".concat(chunk.slice(start,this.prevI),"\n");}start=this.i;forbiddenState=FORBIDDEN_START;break;case EOC:if(handler!==undefined){this.text+=chunk.slice(start);}// eslint-disable-next-line no-labels |
|
|
break scanLoop;default:forbiddenState=FORBIDDEN_START;}}this.forbiddenState=forbiddenState;}},{key:"handleTextOutsideRoot",value:function handleTextOutsideRoot(){// This is essentially a specialized version of captureTo which is optimized |
|
|
// for a specialized task. We keep track of the presence of non-space |
|
|
// characters in the text since these are errors when appearing outside the |
|
|
// document root element. |
|
|
var start=this.i;var chunk=this.chunk,handler=this.textHandler;var nonSpace=false;// eslint-disable-next-line no-labels, no-restricted-syntax |
|
|
outRootLoop:// eslint-disable-next-line no-constant-condition |
|
|
while(true){var code=this.getCode();switch(code){case LESS:{this.state=S_OPEN_WAKA;if(handler!==undefined){var text=this.text;var slice=chunk.slice(start,this.prevI);if(text.length!==0){handler(text+slice);this.text="";}else if(slice.length!==0){handler(slice);}}// eslint-disable-next-line no-labels |
|
|
break outRootLoop;}case AMP:this.state=S_ENTITY;this.entityReturnState=S_TEXT;if(handler!==undefined){this.text+=chunk.slice(start,this.prevI);}nonSpace=true;// eslint-disable-next-line no-labels |
|
|
break outRootLoop;case NL_LIKE:if(handler!==undefined){this.text+="".concat(chunk.slice(start,this.prevI),"\n");}start=this.i;break;case EOC:if(handler!==undefined){this.text+=chunk.slice(start);}// eslint-disable-next-line no-labels |
|
|
break outRootLoop;default:if(!isS(code)){nonSpace=true;}}}if(!nonSpace){return;}// We use the reportedTextBeforeRoot and reportedTextAfterRoot flags |
|
|
// to avoid reporting errors for every single character that is out of |
|
|
// place. |
|
|
if(!this.sawRoot&&!this.reportedTextBeforeRoot){this.fail("text data outside of root node.");this.reportedTextBeforeRoot=true;}if(this.closedRoot&&!this.reportedTextAfterRoot){this.fail("text data outside of root node.");this.reportedTextAfterRoot=true;}}},{key:"pushAttribNS",value:function pushAttribNS(name,value){var _a;var _this$qname=this.qname(name),prefix=_this$qname.prefix,local=_this$qname.local;var attr={name:name,prefix:prefix,local:local,value:value};this.attribList.push(attr);// eslint-disable-next-line no-unused-expressions |
|
|
(_a=this.attributeHandler)===null||_a===void 0?void 0:_a.call(this,attr);if(prefix==="xmlns"){var trimmed=value.trim();if(this.currentXMLVersion==="1.0"&&trimmed===""){this.fail("invalid attempt to undefine prefix in XML 1.0");}this.topNS[local]=trimmed;nsPairCheck(this,local,trimmed);}else if(name==="xmlns"){var _trimmed=value.trim();this.topNS[""]=_trimmed;nsPairCheck(this,"",_trimmed);}}},{key:"pushAttribPlain",value:function pushAttribPlain(name,value){var _a;var attr={name:name,value:value};this.attribList.push(attr);// eslint-disable-next-line no-unused-expressions |
|
|
(_a=this.attributeHandler)===null||_a===void 0?void 0:_a.call(this,attr);}/** |
|
|
* End parsing. This performs final well-formedness checks and resets the |
|
|
* parser to a clean state. |
|
|
* |
|
|
* @returns this |
|
|
*/},{key:"end",value:function end(){var _a,_b;if(!this.sawRoot){this.fail("document must contain a root element.");}var tags=this.tags;while(tags.length>0){var tag=tags.pop();this.fail("unclosed tag: ".concat(tag.name));}if(this.state!==S_BEGIN&&this.state!==S_TEXT){this.fail("unexpected end.");}var text=this.text;if(text.length!==0){// eslint-disable-next-line no-unused-expressions |
|
|
(_a=this.textHandler)===null||_a===void 0?void 0:_a.call(this,text);this.text="";}this._closed=true;// eslint-disable-next-line no-unused-expressions |
|
|
(_b=this.endHandler)===null||_b===void 0?void 0:_b.call(this);this._init();return this;}/** |
|
|
* Resolve a namespace prefix. |
|
|
* |
|
|
* @param prefix The prefix to resolve. |
|
|
* |
|
|
* @returns The namespace URI or ``undefined`` if the prefix is not defined. |
|
|
*/},{key:"resolve",value:function resolve(prefix){var _a,_b;var uri=this.topNS[prefix];if(uri!==undefined){return uri;}var tags=this.tags;for(var index=tags.length-1;index>=0;index--){uri=tags[index].ns[prefix];if(uri!==undefined){return uri;}}uri=this.ns[prefix];if(uri!==undefined){return uri;}return(_b=(_a=this.opt).resolvePrefix)===null||_b===void 0?void 0:_b.call(_a,prefix);}/** |
|
|
* Parse a qname into its prefix and local name parts. |
|
|
* |
|
|
* @param name The name to parse |
|
|
* |
|
|
* @returns |
|
|
*/},{key:"qname",value:function qname(name){// This is faster than using name.split(":"). |
|
|
var colon=name.indexOf(":");if(colon===-1){return{prefix:"",local:name};}var local=name.slice(colon+1);var prefix=name.slice(0,colon);if(prefix===""||local===""||local.includes(":")){this.fail("malformed name: ".concat(name,"."));}return{prefix:prefix,local:local};}},{key:"processAttribsNS",value:function processAttribsNS(){var _a;var attribList=this.attribList;var tag=this.tag;{// add namespace info to tag |
|
|
var _this$qname2=this.qname(tag.name),prefix=_this$qname2.prefix,local=_this$qname2.local;tag.prefix=prefix;tag.local=local;var uri=tag.uri=(_a=this.resolve(prefix))!==null&&_a!==void 0?_a:"";if(prefix!==""){if(prefix==="xmlns"){this.fail("tags may not have \"xmlns\" as prefix.");}if(uri===""){this.fail("unbound namespace prefix: ".concat(JSON.stringify(prefix),"."));tag.uri=prefix;}}}if(attribList.length===0){return;}var attributes=tag.attributes;var seen=new Set();// Note: do not apply default ns to attributes: |
|
|
// http://www.w3.org/TR/REC-xml-names/#defaulting |
|
|
var _iterator3=_createForOfIteratorHelper2(attribList),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var attr=_step3.value;var name=attr.name,_prefix=attr.prefix,_local=attr.local;var _uri=void 0;var eqname=void 0;if(_prefix===""){_uri=name==="xmlns"?XMLNS_NAMESPACE:"";eqname=name;}else{_uri=this.resolve(_prefix);// if there's any attributes with an undefined namespace, |
|
|
// then fail on them now. |
|
|
if(_uri===undefined){this.fail("unbound namespace prefix: ".concat(JSON.stringify(_prefix),"."));_uri=_prefix;}eqname="{".concat(_uri,"}").concat(_local);}if(seen.has(eqname)){this.fail("duplicate attribute: ".concat(eqname,"."));}seen.add(eqname);attr.uri=_uri;attributes[name]=attr;}}catch(err){_iterator3.e(err);}finally{_iterator3.f();}this.attribList=[];}},{key:"processAttribsPlain",value:function processAttribsPlain(){var attribList=this.attribList;// eslint-disable-next-line prefer-destructuring |
|
|
var attributes=this.tag.attributes;var _iterator4=_createForOfIteratorHelper2(attribList),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var _step4$value=_step4.value,name=_step4$value.name,value=_step4$value.value;if(attributes[name]!==undefined){this.fail("duplicate attribute: ".concat(name,"."));}attributes[name]=value;}}catch(err){_iterator4.e(err);}finally{_iterator4.f();}this.attribList=[];}/** |
|
|
* Handle a complete open tag. This parser code calls this once it has seen |
|
|
* the whole tag. This method checks for well-formeness and then emits |
|
|
* ``onopentag``. |
|
|
*/},{key:"openTag",value:function openTag(){var _a;this.processAttribs();var tags=this.tags;var tag=this.tag;tag.isSelfClosing=false;// There cannot be any pending text here due to the onopentagstart that was |
|
|
// necessarily emitted before we get here. So we do not check text. |
|
|
// eslint-disable-next-line no-unused-expressions |
|
|
(_a=this.openTagHandler)===null||_a===void 0?void 0:_a.call(this,tag);tags.push(tag);this.state=S_TEXT;this.name="";}/** |
|
|
* Handle a complete self-closing tag. This parser code calls this once it has |
|
|
* seen the whole tag. This method checks for well-formeness and then emits |
|
|
* ``onopentag`` and ``onclosetag``. |
|
|
*/},{key:"openSelfClosingTag",value:function openSelfClosingTag(){var _a,_b,_c;this.processAttribs();var tags=this.tags;var tag=this.tag;tag.isSelfClosing=true;// There cannot be any pending text here due to the onopentagstart that was |
|
|
// necessarily emitted before we get here. So we do not check text. |
|
|
// eslint-disable-next-line no-unused-expressions |
|
|
(_a=this.openTagHandler)===null||_a===void 0?void 0:_a.call(this,tag);// eslint-disable-next-line no-unused-expressions |
|
|
(_b=this.closeTagHandler)===null||_b===void 0?void 0:_b.call(this,tag);var top=this.tag=(_c=tags[tags.length-1])!==null&&_c!==void 0?_c:null;if(top===null){this.closedRoot=true;}this.state=S_TEXT;this.name="";}/** |
|
|
* Handle a complete close tag. This parser code calls this once it has seen |
|
|
* the whole tag. This method checks for well-formeness and then emits |
|
|
* ``onclosetag``. |
|
|
*/},{key:"closeTag",value:function closeTag(){var tags=this.tags,name=this.name;// Our state after this will be S_TEXT, no matter what, and we can clear |
|
|
// tagName now. |
|
|
this.state=S_TEXT;this.name="";if(name===""){this.fail("weird empty close tag.");this.text+="</>";return;}var handler=this.closeTagHandler;var l=tags.length;while(l-->0){var tag=this.tag=tags.pop();this.topNS=tag.ns;// eslint-disable-next-line no-unused-expressions |
|
|
handler===null||handler===void 0?void 0:handler(tag);if(tag.name===name){break;}this.fail("unexpected close tag.");}if(l===0){this.closedRoot=true;}else if(l<0){this.fail("unmatched closing tag: ".concat(name,"."));this.text+="</".concat(name,">");}}/** |
|
|
* Resolves an entity. Makes any necessary well-formedness checks. |
|
|
* |
|
|
* @param entity The entity to resolve. |
|
|
* |
|
|
* @returns The parsed entity. |
|
|
*/},{key:"parseEntity",value:function parseEntity(entity){// startsWith would be significantly slower for this test. |
|
|
// eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with |
|
|
if(entity[0]!=="#"){var defined=this.ENTITIES[entity];if(defined!==undefined){return defined;}this.fail(this.isName(entity)?"undefined entity.":"disallowed character in entity name.");return"&".concat(entity,";");}var num=NaN;if(entity[1]==="x"&&/^#x[0-9a-f]+$/i.test(entity)){num=parseInt(entity.slice(2),16);}else if(/^#[0-9]+$/.test(entity)){num=parseInt(entity.slice(1),10);}// The character reference is required to match the CHAR production. |
|
|
if(!this.isChar(num)){this.fail("malformed character entity.");return"&".concat(entity,";");}return String.fromCodePoint(num);}},{key:"closed",get:function get(){return this._closed;}},{key:"position",get:function get(){return this.chunkPosition+this.i;}/** |
|
|
* The column number of the next character to be read by the parser. * |
|
|
* This field is zero-based. (The first column in a line is 0.) |
|
|
* |
|
|
* This field reports the index at which the next character would be in the |
|
|
* line if the line were represented as a JavaScript string. Note that this |
|
|
* *can* be different to a count based on the number of *Unicode characters* |
|
|
* due to how JavaScript handles astral plane characters. |
|
|
* |
|
|
* See [[column]] for a number that corresponds to a count of Unicode |
|
|
* characters. |
|
|
*/},{key:"columnIndex",get:function get(){return this.position-this.positionAtNewLine;}}]);return SaxesParser;}();exports.SaxesParser=SaxesParser;},{"xmlchars/xml/1.0/ed5":512,"xmlchars/xml/1.1/ed2":513,"xmlchars/xmlns/1.0/ed3":514}],472:[function(require,module,exports){(function(setImmediate){'use strict';module.exports=typeof setImmediate==='function'?setImmediate:function setImmediate(){var args=[].slice.apply(arguments);args.splice(1,0,0);setTimeout.apply(null,args);};}).call(this,require("timers").setImmediate);},{"timers":496}],473:[function(require,module,exports){var Buffer=require('safe-buffer').Buffer;// prototype class for hash functions |
|
|
function Hash(blockSize,finalSize){this._block=Buffer.alloc(blockSize);this._finalSize=finalSize;this._blockSize=blockSize;this._len=0;}Hash.prototype.update=function(data,enc){if(typeof data==='string'){enc=enc||'utf8';data=Buffer.from(data,enc);}var block=this._block;var blockSize=this._blockSize;var length=data.length;var accum=this._len;for(var offset=0;offset<length;){var assigned=accum%blockSize;var remainder=Math.min(length-offset,blockSize-assigned);for(var i=0;i<remainder;i++){block[assigned+i]=data[offset+i];}accum+=remainder;offset+=remainder;if(accum%blockSize===0){this._update(block);}}this._len+=length;return this;};Hash.prototype.digest=function(enc){var rem=this._len%this._blockSize;this._block[rem]=0x80;// zero (rem + 1) trailing bits, where (rem + 1) is the smallest |
|
|
// non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize |
|
|
this._block.fill(0,rem+1);if(rem>=this._finalSize){this._update(this._block);this._block.fill(0);}var bits=this._len*8;// uint32 |
|
|
if(bits<=0xffffffff){this._block.writeUInt32BE(bits,this._blockSize-4);// uint64 |
|
|
}else{var lowBits=(bits&0xffffffff)>>>0;var highBits=(bits-lowBits)/0x100000000;this._block.writeUInt32BE(highBits,this._blockSize-8);this._block.writeUInt32BE(lowBits,this._blockSize-4);}this._update(this._block);var hash=this._hash();return enc?hash.toString(enc):hash;};Hash.prototype._update=function(){throw new Error('_update must be implemented by subclass');};module.exports=Hash;},{"safe-buffer":470}],474:[function(require,module,exports){var exports=module.exports=function SHA(algorithm){algorithm=algorithm.toLowerCase();var Algorithm=exports[algorithm];if(!Algorithm)throw new Error(algorithm+' is not supported (we accept pull requests)');return new Algorithm();};exports.sha=require('./sha');exports.sha1=require('./sha1');exports.sha224=require('./sha224');exports.sha256=require('./sha256');exports.sha384=require('./sha384');exports.sha512=require('./sha512');},{"./sha":475,"./sha1":476,"./sha224":477,"./sha256":478,"./sha384":479,"./sha512":480}],475:[function(require,module,exports){/* |
|
|
* A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined |
|
|
* in FIPS PUB 180-1 |
|
|
* This source code is derived from sha1.js of the same repository. |
|
|
* The difference between SHA-0 and SHA-1 is just a bitwise rotate left |
|
|
* operation was added. |
|
|
*/var inherits=require('inherits');var Hash=require('./hash');var Buffer=require('safe-buffer').Buffer;var K=[0x5a827999,0x6ed9eba1,0x8f1bbcdc|0,0xca62c1d6|0];var W=new Array(80);function Sha(){this.init();this._w=W;Hash.call(this,64,56);}inherits(Sha,Hash);Sha.prototype.init=function(){this._a=0x67452301;this._b=0xefcdab89;this._c=0x98badcfe;this._d=0x10325476;this._e=0xc3d2e1f0;return this;};function rotl5(num){return num<<5|num>>>27;}function rotl30(num){return num<<30|num>>>2;}function ft(s,b,c,d){if(s===0)return b&c|~b&d;if(s===2)return b&c|b&d|c&d;return b^c^d;}Sha.prototype._update=function(M){var W=this._w;var a=this._a|0;var b=this._b|0;var c=this._c|0;var d=this._d|0;var e=this._e|0;for(var i=0;i<16;++i){W[i]=M.readInt32BE(i*4);}for(;i<80;++i){W[i]=W[i-3]^W[i-8]^W[i-14]^W[i-16];}for(var j=0;j<80;++j){var s=~~(j/20);var t=rotl5(a)+ft(s,b,c,d)+e+W[j]+K[s]|0;e=d;d=c;c=rotl30(b);b=a;a=t;}this._a=a+this._a|0;this._b=b+this._b|0;this._c=c+this._c|0;this._d=d+this._d|0;this._e=e+this._e|0;};Sha.prototype._hash=function(){var H=Buffer.allocUnsafe(20);H.writeInt32BE(this._a|0,0);H.writeInt32BE(this._b|0,4);H.writeInt32BE(this._c|0,8);H.writeInt32BE(this._d|0,12);H.writeInt32BE(this._e|0,16);return H;};module.exports=Sha;},{"./hash":473,"inherits":364,"safe-buffer":470}],476:[function(require,module,exports){/* |
|
|
* A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined |
|
|
* in FIPS PUB 180-1 |
|
|
* Version 2.1a Copyright Paul Johnston 2000 - 2002. |
|
|
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet |
|
|
* Distributed under the BSD License |
|
|
* See http://pajhome.org.uk/crypt/md5 for details. |
|
|
*/var inherits=require('inherits');var Hash=require('./hash');var Buffer=require('safe-buffer').Buffer;var K=[0x5a827999,0x6ed9eba1,0x8f1bbcdc|0,0xca62c1d6|0];var W=new Array(80);function Sha1(){this.init();this._w=W;Hash.call(this,64,56);}inherits(Sha1,Hash);Sha1.prototype.init=function(){this._a=0x67452301;this._b=0xefcdab89;this._c=0x98badcfe;this._d=0x10325476;this._e=0xc3d2e1f0;return this;};function rotl1(num){return num<<1|num>>>31;}function rotl5(num){return num<<5|num>>>27;}function rotl30(num){return num<<30|num>>>2;}function ft(s,b,c,d){if(s===0)return b&c|~b&d;if(s===2)return b&c|b&d|c&d;return b^c^d;}Sha1.prototype._update=function(M){var W=this._w;var a=this._a|0;var b=this._b|0;var c=this._c|0;var d=this._d|0;var e=this._e|0;for(var i=0;i<16;++i){W[i]=M.readInt32BE(i*4);}for(;i<80;++i){W[i]=rotl1(W[i-3]^W[i-8]^W[i-14]^W[i-16]);}for(var j=0;j<80;++j){var s=~~(j/20);var t=rotl5(a)+ft(s,b,c,d)+e+W[j]+K[s]|0;e=d;d=c;c=rotl30(b);b=a;a=t;}this._a=a+this._a|0;this._b=b+this._b|0;this._c=c+this._c|0;this._d=d+this._d|0;this._e=e+this._e|0;};Sha1.prototype._hash=function(){var H=Buffer.allocUnsafe(20);H.writeInt32BE(this._a|0,0);H.writeInt32BE(this._b|0,4);H.writeInt32BE(this._c|0,8);H.writeInt32BE(this._d|0,12);H.writeInt32BE(this._e|0,16);return H;};module.exports=Sha1;},{"./hash":473,"inherits":364,"safe-buffer":470}],477:[function(require,module,exports){/** |
|
|
* A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined |
|
|
* in FIPS 180-2 |
|
|
* Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. |
|
|
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet |
|
|
* |
|
|
*/var inherits=require('inherits');var Sha256=require('./sha256');var Hash=require('./hash');var Buffer=require('safe-buffer').Buffer;var W=new Array(64);function Sha224(){this.init();this._w=W;// new Array(64) |
|
|
Hash.call(this,64,56);}inherits(Sha224,Sha256);Sha224.prototype.init=function(){this._a=0xc1059ed8;this._b=0x367cd507;this._c=0x3070dd17;this._d=0xf70e5939;this._e=0xffc00b31;this._f=0x68581511;this._g=0x64f98fa7;this._h=0xbefa4fa4;return this;};Sha224.prototype._hash=function(){var H=Buffer.allocUnsafe(28);H.writeInt32BE(this._a,0);H.writeInt32BE(this._b,4);H.writeInt32BE(this._c,8);H.writeInt32BE(this._d,12);H.writeInt32BE(this._e,16);H.writeInt32BE(this._f,20);H.writeInt32BE(this._g,24);return H;};module.exports=Sha224;},{"./hash":473,"./sha256":478,"inherits":364,"safe-buffer":470}],478:[function(require,module,exports){/** |
|
|
* A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined |
|
|
* in FIPS 180-2 |
|
|
* Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. |
|
|
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet |
|
|
* |
|
|
*/var inherits=require('inherits');var Hash=require('./hash');var Buffer=require('safe-buffer').Buffer;var K=[0x428A2F98,0x71374491,0xB5C0FBCF,0xE9B5DBA5,0x3956C25B,0x59F111F1,0x923F82A4,0xAB1C5ED5,0xD807AA98,0x12835B01,0x243185BE,0x550C7DC3,0x72BE5D74,0x80DEB1FE,0x9BDC06A7,0xC19BF174,0xE49B69C1,0xEFBE4786,0x0FC19DC6,0x240CA1CC,0x2DE92C6F,0x4A7484AA,0x5CB0A9DC,0x76F988DA,0x983E5152,0xA831C66D,0xB00327C8,0xBF597FC7,0xC6E00BF3,0xD5A79147,0x06CA6351,0x14292967,0x27B70A85,0x2E1B2138,0x4D2C6DFC,0x53380D13,0x650A7354,0x766A0ABB,0x81C2C92E,0x92722C85,0xA2BFE8A1,0xA81A664B,0xC24B8B70,0xC76C51A3,0xD192E819,0xD6990624,0xF40E3585,0x106AA070,0x19A4C116,0x1E376C08,0x2748774C,0x34B0BCB5,0x391C0CB3,0x4ED8AA4A,0x5B9CCA4F,0x682E6FF3,0x748F82EE,0x78A5636F,0x84C87814,0x8CC70208,0x90BEFFFA,0xA4506CEB,0xBEF9A3F7,0xC67178F2];var W=new Array(64);function Sha256(){this.init();this._w=W;// new Array(64) |
|
|
Hash.call(this,64,56);}inherits(Sha256,Hash);Sha256.prototype.init=function(){this._a=0x6a09e667;this._b=0xbb67ae85;this._c=0x3c6ef372;this._d=0xa54ff53a;this._e=0x510e527f;this._f=0x9b05688c;this._g=0x1f83d9ab;this._h=0x5be0cd19;return this;};function ch(x,y,z){return z^x&(y^z);}function maj(x,y,z){return x&y|z&(x|y);}function sigma0(x){return(x>>>2|x<<30)^(x>>>13|x<<19)^(x>>>22|x<<10);}function sigma1(x){return(x>>>6|x<<26)^(x>>>11|x<<21)^(x>>>25|x<<7);}function gamma0(x){return(x>>>7|x<<25)^(x>>>18|x<<14)^x>>>3;}function gamma1(x){return(x>>>17|x<<15)^(x>>>19|x<<13)^x>>>10;}Sha256.prototype._update=function(M){var W=this._w;var a=this._a|0;var b=this._b|0;var c=this._c|0;var d=this._d|0;var e=this._e|0;var f=this._f|0;var g=this._g|0;var h=this._h|0;for(var i=0;i<16;++i){W[i]=M.readInt32BE(i*4);}for(;i<64;++i){W[i]=gamma1(W[i-2])+W[i-7]+gamma0(W[i-15])+W[i-16]|0;}for(var j=0;j<64;++j){var T1=h+sigma1(e)+ch(e,f,g)+K[j]+W[j]|0;var T2=sigma0(a)+maj(a,b,c)|0;h=g;g=f;f=e;e=d+T1|0;d=c;c=b;b=a;a=T1+T2|0;}this._a=a+this._a|0;this._b=b+this._b|0;this._c=c+this._c|0;this._d=d+this._d|0;this._e=e+this._e|0;this._f=f+this._f|0;this._g=g+this._g|0;this._h=h+this._h|0;};Sha256.prototype._hash=function(){var H=Buffer.allocUnsafe(32);H.writeInt32BE(this._a,0);H.writeInt32BE(this._b,4);H.writeInt32BE(this._c,8);H.writeInt32BE(this._d,12);H.writeInt32BE(this._e,16);H.writeInt32BE(this._f,20);H.writeInt32BE(this._g,24);H.writeInt32BE(this._h,28);return H;};module.exports=Sha256;},{"./hash":473,"inherits":364,"safe-buffer":470}],479:[function(require,module,exports){var inherits=require('inherits');var SHA512=require('./sha512');var Hash=require('./hash');var Buffer=require('safe-buffer').Buffer;var W=new Array(160);function Sha384(){this.init();this._w=W;Hash.call(this,128,112);}inherits(Sha384,SHA512);Sha384.prototype.init=function(){this._ah=0xcbbb9d5d;this._bh=0x629a292a;this._ch=0x9159015a;this._dh=0x152fecd8;this._eh=0x67332667;this._fh=0x8eb44a87;this._gh=0xdb0c2e0d;this._hh=0x47b5481d;this._al=0xc1059ed8;this._bl=0x367cd507;this._cl=0x3070dd17;this._dl=0xf70e5939;this._el=0xffc00b31;this._fl=0x68581511;this._gl=0x64f98fa7;this._hl=0xbefa4fa4;return this;};Sha384.prototype._hash=function(){var H=Buffer.allocUnsafe(48);function writeInt64BE(h,l,offset){H.writeInt32BE(h,offset);H.writeInt32BE(l,offset+4);}writeInt64BE(this._ah,this._al,0);writeInt64BE(this._bh,this._bl,8);writeInt64BE(this._ch,this._cl,16);writeInt64BE(this._dh,this._dl,24);writeInt64BE(this._eh,this._el,32);writeInt64BE(this._fh,this._fl,40);return H;};module.exports=Sha384;},{"./hash":473,"./sha512":480,"inherits":364,"safe-buffer":470}],480:[function(require,module,exports){var inherits=require('inherits');var Hash=require('./hash');var Buffer=require('safe-buffer').Buffer;var K=[0x428a2f98,0xd728ae22,0x71374491,0x23ef65cd,0xb5c0fbcf,0xec4d3b2f,0xe9b5dba5,0x8189dbbc,0x3956c25b,0xf348b538,0x59f111f1,0xb605d019,0x923f82a4,0xaf194f9b,0xab1c5ed5,0xda6d8118,0xd807aa98,0xa3030242,0x12835b01,0x45706fbe,0x243185be,0x4ee4b28c,0x550c7dc3,0xd5ffb4e2,0x72be5d74,0xf27b896f,0x80deb1fe,0x3b1696b1,0x9bdc06a7,0x25c71235,0xc19bf174,0xcf692694,0xe49b69c1,0x9ef14ad2,0xefbe4786,0x384f25e3,0x0fc19dc6,0x8b8cd5b5,0x240ca1cc,0x77ac9c65,0x2de92c6f,0x592b0275,0x4a7484aa,0x6ea6e483,0x5cb0a9dc,0xbd41fbd4,0x76f988da,0x831153b5,0x983e5152,0xee66dfab,0xa831c66d,0x2db43210,0xb00327c8,0x98fb213f,0xbf597fc7,0xbeef0ee4,0xc6e00bf3,0x3da88fc2,0xd5a79147,0x930aa725,0x06ca6351,0xe003826f,0x14292967,0x0a0e6e70,0x27b70a85,0x46d22ffc,0x2e1b2138,0x5c26c926,0x4d2c6dfc,0x5ac42aed,0x53380d13,0x9d95b3df,0x650a7354,0x8baf63de,0x766a0abb,0x3c77b2a8,0x81c2c92e,0x47edaee6,0x92722c85,0x1482353b,0xa2bfe8a1,0x4cf10364,0xa81a664b,0xbc423001,0xc24b8b70,0xd0f89791,0xc76c51a3,0x0654be30,0xd192e819,0xd6ef5218,0xd6990624,0x5565a910,0xf40e3585,0x5771202a,0x106aa070,0x32bbd1b8,0x19a4c116,0xb8d2d0c8,0x1e376c08,0x5141ab53,0x2748774c,0xdf8eeb99,0x34b0bcb5,0xe19b48a8,0x391c0cb3,0xc5c95a63,0x4ed8aa4a,0xe3418acb,0x5b9cca4f,0x7763e373,0x682e6ff3,0xd6b2b8a3,0x748f82ee,0x5defb2fc,0x78a5636f,0x43172f60,0x84c87814,0xa1f0ab72,0x8cc70208,0x1a6439ec,0x90befffa,0x23631e28,0xa4506ceb,0xde82bde9,0xbef9a3f7,0xb2c67915,0xc67178f2,0xe372532b,0xca273ece,0xea26619c,0xd186b8c7,0x21c0c207,0xeada7dd6,0xcde0eb1e,0xf57d4f7f,0xee6ed178,0x06f067aa,0x72176fba,0x0a637dc5,0xa2c898a6,0x113f9804,0xbef90dae,0x1b710b35,0x131c471b,0x28db77f5,0x23047d84,0x32caab7b,0x40c72493,0x3c9ebe0a,0x15c9bebc,0x431d67c4,0x9c100d4c,0x4cc5d4be,0xcb3e42b6,0x597f299c,0xfc657e2a,0x5fcb6fab,0x3ad6faec,0x6c44198c,0x4a475817];var W=new Array(160);function Sha512(){this.init();this._w=W;Hash.call(this,128,112);}inherits(Sha512,Hash);Sha512.prototype.init=function(){this._ah=0x6a09e667;this._bh=0xbb67ae85;this._ch=0x3c6ef372;this._dh=0xa54ff53a;this._eh=0x510e527f;this._fh=0x9b05688c;this._gh=0x1f83d9ab;this._hh=0x5be0cd19;this._al=0xf3bcc908;this._bl=0x84caa73b;this._cl=0xfe94f82b;this._dl=0x5f1d36f1;this._el=0xade682d1;this._fl=0x2b3e6c1f;this._gl=0xfb41bd6b;this._hl=0x137e2179;return this;};function Ch(x,y,z){return z^x&(y^z);}function maj(x,y,z){return x&y|z&(x|y);}function sigma0(x,xl){return(x>>>28|xl<<4)^(xl>>>2|x<<30)^(xl>>>7|x<<25);}function sigma1(x,xl){return(x>>>14|xl<<18)^(x>>>18|xl<<14)^(xl>>>9|x<<23);}function Gamma0(x,xl){return(x>>>1|xl<<31)^(x>>>8|xl<<24)^x>>>7;}function Gamma0l(x,xl){return(x>>>1|xl<<31)^(x>>>8|xl<<24)^(x>>>7|xl<<25);}function Gamma1(x,xl){return(x>>>19|xl<<13)^(xl>>>29|x<<3)^x>>>6;}function Gamma1l(x,xl){return(x>>>19|xl<<13)^(xl>>>29|x<<3)^(x>>>6|xl<<26);}function getCarry(a,b){return a>>>0<b>>>0?1:0;}Sha512.prototype._update=function(M){var W=this._w;var ah=this._ah|0;var bh=this._bh|0;var ch=this._ch|0;var dh=this._dh|0;var eh=this._eh|0;var fh=this._fh|0;var gh=this._gh|0;var hh=this._hh|0;var al=this._al|0;var bl=this._bl|0;var cl=this._cl|0;var dl=this._dl|0;var el=this._el|0;var fl=this._fl|0;var gl=this._gl|0;var hl=this._hl|0;for(var i=0;i<32;i+=2){W[i]=M.readInt32BE(i*4);W[i+1]=M.readInt32BE(i*4+4);}for(;i<160;i+=2){var xh=W[i-15*2];var xl=W[i-15*2+1];var gamma0=Gamma0(xh,xl);var gamma0l=Gamma0l(xl,xh);xh=W[i-2*2];xl=W[i-2*2+1];var gamma1=Gamma1(xh,xl);var gamma1l=Gamma1l(xl,xh);// W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] |
|
|
var Wi7h=W[i-7*2];var Wi7l=W[i-7*2+1];var Wi16h=W[i-16*2];var Wi16l=W[i-16*2+1];var Wil=gamma0l+Wi7l|0;var Wih=gamma0+Wi7h+getCarry(Wil,gamma0l)|0;Wil=Wil+gamma1l|0;Wih=Wih+gamma1+getCarry(Wil,gamma1l)|0;Wil=Wil+Wi16l|0;Wih=Wih+Wi16h+getCarry(Wil,Wi16l)|0;W[i]=Wih;W[i+1]=Wil;}for(var j=0;j<160;j+=2){Wih=W[j];Wil=W[j+1];var majh=maj(ah,bh,ch);var majl=maj(al,bl,cl);var sigma0h=sigma0(ah,al);var sigma0l=sigma0(al,ah);var sigma1h=sigma1(eh,el);var sigma1l=sigma1(el,eh);// t1 = h + sigma1 + ch + K[j] + W[j] |
|
|
var Kih=K[j];var Kil=K[j+1];var chh=Ch(eh,fh,gh);var chl=Ch(el,fl,gl);var t1l=hl+sigma1l|0;var t1h=hh+sigma1h+getCarry(t1l,hl)|0;t1l=t1l+chl|0;t1h=t1h+chh+getCarry(t1l,chl)|0;t1l=t1l+Kil|0;t1h=t1h+Kih+getCarry(t1l,Kil)|0;t1l=t1l+Wil|0;t1h=t1h+Wih+getCarry(t1l,Wil)|0;// t2 = sigma0 + maj |
|
|
var t2l=sigma0l+majl|0;var t2h=sigma0h+majh+getCarry(t2l,sigma0l)|0;hh=gh;hl=gl;gh=fh;gl=fl;fh=eh;fl=el;el=dl+t1l|0;eh=dh+t1h+getCarry(el,dl)|0;dh=ch;dl=cl;ch=bh;cl=bl;bh=ah;bl=al;al=t1l+t2l|0;ah=t1h+t2h+getCarry(al,t1l)|0;}this._al=this._al+al|0;this._bl=this._bl+bl|0;this._cl=this._cl+cl|0;this._dl=this._dl+dl|0;this._el=this._el+el|0;this._fl=this._fl+fl|0;this._gl=this._gl+gl|0;this._hl=this._hl+hl|0;this._ah=this._ah+ah+getCarry(this._al,al)|0;this._bh=this._bh+bh+getCarry(this._bl,bl)|0;this._ch=this._ch+ch+getCarry(this._cl,cl)|0;this._dh=this._dh+dh+getCarry(this._dl,dl)|0;this._eh=this._eh+eh+getCarry(this._el,el)|0;this._fh=this._fh+fh+getCarry(this._fl,fl)|0;this._gh=this._gh+gh+getCarry(this._gl,gl)|0;this._hh=this._hh+hh+getCarry(this._hl,hl)|0;};Sha512.prototype._hash=function(){var H=Buffer.allocUnsafe(64);function writeInt64BE(h,l,offset){H.writeInt32BE(h,offset);H.writeInt32BE(l,offset+4);}writeInt64BE(this._ah,this._al,0);writeInt64BE(this._bh,this._bl,8);writeInt64BE(this._ch,this._cl,16);writeInt64BE(this._dh,this._dl,24);writeInt64BE(this._eh,this._el,32);writeInt64BE(this._fh,this._fl,40);writeInt64BE(this._gh,this._gl,48);writeInt64BE(this._hh,this._hl,56);return H;};module.exports=Sha512;},{"./hash":473,"inherits":364,"safe-buffer":470}],481:[function(require,module,exports){// Copyright Joyent, Inc. and other Node contributors. |
|
|
// |
|
|
// Permission is hereby granted, free of charge, to any person obtaining a |
|
|
// copy of this software and associated documentation files (the |
|
|
// "Software"), to deal in the Software without restriction, including |
|
|
// without limitation the rights to use, copy, modify, merge, publish, |
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit |
|
|
// persons to whom the Software is furnished to do so, subject to the |
|
|
// following conditions: |
|
|
// |
|
|
// The above copyright notice and this permission notice shall be included |
|
|
// in all copies or substantial portions of the Software. |
|
|
// |
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
|
module.exports=Stream;var EE=require('events').EventEmitter;var inherits=require('inherits');inherits(Stream,EE);Stream.Readable=require('readable-stream/readable.js');Stream.Writable=require('readable-stream/writable.js');Stream.Duplex=require('readable-stream/duplex.js');Stream.Transform=require('readable-stream/transform.js');Stream.PassThrough=require('readable-stream/passthrough.js');// Backwards-compat with node 0.4.x |
|
|
Stream.Stream=Stream;// old-style streams. Note that the pipe method (the only relevant |
|
|
// part of this class) is overridden in the Readable class. |
|
|
function Stream(){EE.call(this);}Stream.prototype.pipe=function(dest,options){var source=this;function ondata(chunk){if(dest.writable){if(false===dest.write(chunk)&&source.pause){source.pause();}}}source.on('data',ondata);function ondrain(){if(source.readable&&source.resume){source.resume();}}dest.on('drain',ondrain);// If the 'end' option is not supplied, dest.end() will be called when |
|
|
// source gets the 'end' or 'close' events. Only dest.end() once. |
|
|
if(!dest._isStdio&&(!options||options.end!==false)){source.on('end',onend);source.on('close',onclose);}var didOnEnd=false;function onend(){if(didOnEnd)return;didOnEnd=true;dest.end();}function onclose(){if(didOnEnd)return;didOnEnd=true;if(typeof dest.destroy==='function')dest.destroy();}// don't leave dangling pipes when there are errors. |
|
|
function onerror(er){cleanup();if(EE.listenerCount(this,'error')===0){throw er;// Unhandled stream error in pipe. |
|
|
}}source.on('error',onerror);dest.on('error',onerror);// remove all the event listeners that were added. |
|
|
function cleanup(){source.removeListener('data',ondata);dest.removeListener('drain',ondrain);source.removeListener('end',onend);source.removeListener('close',onclose);source.removeListener('error',onerror);dest.removeListener('error',onerror);source.removeListener('end',cleanup);source.removeListener('close',cleanup);dest.removeListener('close',cleanup);}source.on('end',cleanup);source.on('close',cleanup);dest.on('close',cleanup);dest.emit('pipe',source);// Allow for unix-like usage: A.pipe(B).pipe(C) |
|
|
return dest;};},{"events":344,"inherits":364,"readable-stream/duplex.js":482,"readable-stream/passthrough.js":491,"readable-stream/readable.js":492,"readable-stream/transform.js":493,"readable-stream/writable.js":494}],482:[function(require,module,exports){module.exports=require('./lib/_stream_duplex.js');},{"./lib/_stream_duplex.js":483}],483:[function(require,module,exports){// Copyright Joyent, Inc. and other Node contributors. |
|
|
// |
|
|
// Permission is hereby granted, free of charge, to any person obtaining a |
|
|
// copy of this software and associated documentation files (the |
|
|
// "Software"), to deal in the Software without restriction, including |
|
|
// without limitation the rights to use, copy, modify, merge, publish, |
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit |
|
|
// persons to whom the Software is furnished to do so, subject to the |
|
|
// following conditions: |
|
|
// |
|
|
// The above copyright notice and this permission notice shall be included |
|
|
// in all copies or substantial portions of the Software. |
|
|
// |
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
|
// a duplex stream is just a stream that is both readable and writable. |
|
|
// Since JS doesn't have multiple prototypal inheritance, this class |
|
|
// prototypally inherits from Readable, and then parasitically from |
|
|
// Writable. |
|
|
'use strict';/*<replacement>*/var pna=require('process-nextick-args');/*</replacement>*/ /*<replacement>*/var objectKeys=Object.keys||function(obj){var keys=[];for(var key in obj){keys.push(key);}return keys;};/*</replacement>*/module.exports=Duplex;/*<replacement>*/var util=Object.create(require('core-util-is'));util.inherits=require('inherits');/*</replacement>*/var Readable=require('./_stream_readable');var Writable=require('./_stream_writable');util.inherits(Duplex,Readable);{// avoid scope creep, the keys array can then be collected |
|
|
var keys=objectKeys(Writable.prototype);for(var v=0;v<keys.length;v++){var method=keys[v];if(!Duplex.prototype[method])Duplex.prototype[method]=Writable.prototype[method];}}function Duplex(options){if(!(this instanceof Duplex))return new Duplex(options);Readable.call(this,options);Writable.call(this,options);if(options&&options.readable===false)this.readable=false;if(options&&options.writable===false)this.writable=false;this.allowHalfOpen=true;if(options&&options.allowHalfOpen===false)this.allowHalfOpen=false;this.once('end',onend);}Object.defineProperty(Duplex.prototype,'writableHighWaterMark',{// making it explicit this property is not enumerable |
|
|
// because otherwise some prototype manipulation in |
|
|
// userland will fail |
|
|
enumerable:false,get:function get(){return this._writableState.highWaterMark;}});// the no-half-open enforcer |
|
|
function onend(){// if we allow half-open state, or if the writable side ended, |
|
|
// then we're ok. |
|
|
if(this.allowHalfOpen||this._writableState.ended)return;// no more data can be written. |
|
|
// But allow more writes to happen in this tick. |
|
|
pna.nextTick(onEndNT,this);}function onEndNT(self){self.end();}Object.defineProperty(Duplex.prototype,'destroyed',{get:function get(){if(this._readableState===undefined||this._writableState===undefined){return false;}return this._readableState.destroyed&&this._writableState.destroyed;},set:function set(value){// we ignore the value if the stream |
|
|
// has not been initialized yet |
|
|
if(this._readableState===undefined||this._writableState===undefined){return;}// backward compatibility, the user is explicitly |
|
|
// managing destroyed |
|
|
this._readableState.destroyed=value;this._writableState.destroyed=value;}});Duplex.prototype._destroy=function(err,cb){this.push(null);this.end();pna.nextTick(cb,err);};},{"./_stream_readable":485,"./_stream_writable":487,"core-util-is":305,"inherits":364,"process-nextick-args":442}],484:[function(require,module,exports){// Copyright Joyent, Inc. and other Node contributors. |
|
|
// |
|
|
// Permission is hereby granted, free of charge, to any person obtaining a |
|
|
// copy of this software and associated documentation files (the |
|
|
// "Software"), to deal in the Software without restriction, including |
|
|
// without limitation the rights to use, copy, modify, merge, publish, |
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit |
|
|
// persons to whom the Software is furnished to do so, subject to the |
|
|
// following conditions: |
|
|
// |
|
|
// The above copyright notice and this permission notice shall be included |
|
|
// in all copies or substantial portions of the Software. |
|
|
// |
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
|
// a passthrough stream. |
|
|
// basically just the most minimal sort of Transform stream. |
|
|
// Every written chunk gets output as-is. |
|
|
'use strict';module.exports=PassThrough;var Transform=require('./_stream_transform');/*<replacement>*/var util=Object.create(require('core-util-is'));util.inherits=require('inherits');/*</replacement>*/util.inherits(PassThrough,Transform);function PassThrough(options){if(!(this instanceof PassThrough))return new PassThrough(options);Transform.call(this,options);}PassThrough.prototype._transform=function(chunk,encoding,cb){cb(null,chunk);};},{"./_stream_transform":486,"core-util-is":305,"inherits":364}],485:[function(require,module,exports){(function(process,global){// Copyright Joyent, Inc. and other Node contributors. |
|
|
// |
|
|
// Permission is hereby granted, free of charge, to any person obtaining a |
|
|
// copy of this software and associated documentation files (the |
|
|
// "Software"), to deal in the Software without restriction, including |
|
|
// without limitation the rights to use, copy, modify, merge, publish, |
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit |
|
|
// persons to whom the Software is furnished to do so, subject to the |
|
|
// following conditions: |
|
|
// |
|
|
// The above copyright notice and this permission notice shall be included |
|
|
// in all copies or substantial portions of the Software. |
|
|
// |
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
|
'use strict';/*<replacement>*/var pna=require('process-nextick-args');/*</replacement>*/module.exports=Readable;/*<replacement>*/var isArray=require('isarray');/*</replacement>*/ /*<replacement>*/var Duplex;/*</replacement>*/Readable.ReadableState=ReadableState;/*<replacement>*/var EE=require('events').EventEmitter;var EElistenerCount=function EElistenerCount(emitter,type){return emitter.listeners(type).length;};/*</replacement>*/ /*<replacement>*/var Stream=require('./internal/streams/stream');/*</replacement>*/ /*<replacement>*/var Buffer=require('safe-buffer').Buffer;var OurUint8Array=global.Uint8Array||function(){};function _uint8ArrayToBuffer(chunk){return Buffer.from(chunk);}function _isUint8Array(obj){return Buffer.isBuffer(obj)||obj instanceof OurUint8Array;}/*</replacement>*/ /*<replacement>*/var util=Object.create(require('core-util-is'));util.inherits=require('inherits');/*</replacement>*/ /*<replacement>*/var debugUtil=require('util');var debug=void 0;if(debugUtil&&debugUtil.debuglog){debug=debugUtil.debuglog('stream');}else{debug=function debug(){};}/*</replacement>*/var BufferList=require('./internal/streams/BufferList');var destroyImpl=require('./internal/streams/destroy');var StringDecoder;util.inherits(Readable,Stream);var kProxyEvents=['error','close','destroy','pause','resume'];function prependListener(emitter,event,fn){// Sadly this is not cacheable as some libraries bundle their own |
|
|
// event emitter implementation with them. |
|
|
if(typeof emitter.prependListener==='function')return emitter.prependListener(event,fn);// This is a hack to make sure that our error handler is attached before any |
|
|
// userland ones. NEVER DO THIS. This is here only because this code needs |
|
|
// to continue to work with older versions of Node.js that do not include |
|
|
// the prependListener() method. The goal is to eventually remove this hack. |
|
|
if(!emitter._events||!emitter._events[event])emitter.on(event,fn);else if(isArray(emitter._events[event]))emitter._events[event].unshift(fn);else emitter._events[event]=[fn,emitter._events[event]];}function ReadableState(options,stream){Duplex=Duplex||require('./_stream_duplex');options=options||{};// Duplex streams are both readable and writable, but share |
|
|
// the same options object. |
|
|
// However, some cases require setting options to different |
|
|
// values for the readable and the writable sides of the duplex stream. |
|
|
// These options can be provided separately as readableXXX and writableXXX. |
|
|
var isDuplex=stream instanceof Duplex;// object stream flag. Used to make read(n) ignore n and to |
|
|
// make all the buffer merging and length checks go away |
|
|
this.objectMode=!!options.objectMode;if(isDuplex)this.objectMode=this.objectMode||!!options.readableObjectMode;// the point at which it stops calling _read() to fill the buffer |
|
|
// Note: 0 is a valid value, means "don't call _read preemptively ever" |
|
|
var hwm=options.highWaterMark;var readableHwm=options.readableHighWaterMark;var defaultHwm=this.objectMode?16:16*1024;if(hwm||hwm===0)this.highWaterMark=hwm;else if(isDuplex&&(readableHwm||readableHwm===0))this.highWaterMark=readableHwm;else this.highWaterMark=defaultHwm;// cast to ints. |
|
|
this.highWaterMark=Math.floor(this.highWaterMark);// A linked list is used to store data chunks instead of an array because the |
|
|
// linked list can remove elements from the beginning faster than |
|
|
// array.shift() |
|
|
this.buffer=new BufferList();this.length=0;this.pipes=null;this.pipesCount=0;this.flowing=null;this.ended=false;this.endEmitted=false;this.reading=false;// a flag to be able to tell if the event 'readable'/'data' is emitted |
|
|
// immediately, or on a later tick. We set this to true at first, because |
|
|
// any actions that shouldn't happen until "later" should generally also |
|
|
// not happen before the first read call. |
|
|
this.sync=true;// whenever we return null, then we set a flag to say |
|
|
// that we're awaiting a 'readable' event emission. |
|
|
this.needReadable=false;this.emittedReadable=false;this.readableListening=false;this.resumeScheduled=false;// has it been destroyed |
|
|
this.destroyed=false;// Crypto is kind of old and crusty. Historically, its default string |
|
|
// encoding is 'binary' so we have to make this configurable. |
|
|
// Everything else in the universe uses 'utf8', though. |
|
|
this.defaultEncoding=options.defaultEncoding||'utf8';// the number of writers that are awaiting a drain event in .pipe()s |
|
|
this.awaitDrain=0;// if true, a maybeReadMore has been scheduled |
|
|
this.readingMore=false;this.decoder=null;this.encoding=null;if(options.encoding){if(!StringDecoder)StringDecoder=require('string_decoder/').StringDecoder;this.decoder=new StringDecoder(options.encoding);this.encoding=options.encoding;}}function Readable(options){Duplex=Duplex||require('./_stream_duplex');if(!(this instanceof Readable))return new Readable(options);this._readableState=new ReadableState(options,this);// legacy |
|
|
this.readable=true;if(options){if(typeof options.read==='function')this._read=options.read;if(typeof options.destroy==='function')this._destroy=options.destroy;}Stream.call(this);}Object.defineProperty(Readable.prototype,'destroyed',{get:function get(){if(this._readableState===undefined){return false;}return this._readableState.destroyed;},set:function set(value){// we ignore the value if the stream |
|
|
// has not been initialized yet |
|
|
if(!this._readableState){return;}// backward compatibility, the user is explicitly |
|
|
// managing destroyed |
|
|
this._readableState.destroyed=value;}});Readable.prototype.destroy=destroyImpl.destroy;Readable.prototype._undestroy=destroyImpl.undestroy;Readable.prototype._destroy=function(err,cb){this.push(null);cb(err);};// Manually shove something into the read() buffer. |
|
|
// This returns true if the highWaterMark has not been hit yet, |
|
|
// similar to how Writable.write() returns true if you should |
|
|
// write() some more. |
|
|
Readable.prototype.push=function(chunk,encoding){var state=this._readableState;var skipChunkCheck;if(!state.objectMode){if(typeof chunk==='string'){encoding=encoding||state.defaultEncoding;if(encoding!==state.encoding){chunk=Buffer.from(chunk,encoding);encoding='';}skipChunkCheck=true;}}else{skipChunkCheck=true;}return readableAddChunk(this,chunk,encoding,false,skipChunkCheck);};// Unshift should *always* be something directly out of read() |
|
|
Readable.prototype.unshift=function(chunk){return readableAddChunk(this,chunk,null,true,false);};function readableAddChunk(stream,chunk,encoding,addToFront,skipChunkCheck){var state=stream._readableState;if(chunk===null){state.reading=false;onEofChunk(stream,state);}else{var er;if(!skipChunkCheck)er=chunkInvalid(state,chunk);if(er){stream.emit('error',er);}else if(state.objectMode||chunk&&chunk.length>0){if(typeof chunk!=='string'&&!state.objectMode&&Object.getPrototypeOf(chunk)!==Buffer.prototype){chunk=_uint8ArrayToBuffer(chunk);}if(addToFront){if(state.endEmitted)stream.emit('error',new Error('stream.unshift() after end event'));else addChunk(stream,state,chunk,true);}else if(state.ended){stream.emit('error',new Error('stream.push() after EOF'));}else{state.reading=false;if(state.decoder&&!encoding){chunk=state.decoder.write(chunk);if(state.objectMode||chunk.length!==0)addChunk(stream,state,chunk,false);else maybeReadMore(stream,state);}else{addChunk(stream,state,chunk,false);}}}else if(!addToFront){state.reading=false;}}return needMoreData(state);}function addChunk(stream,state,chunk,addToFront){if(state.flowing&&state.length===0&&!state.sync){stream.emit('data',chunk);stream.read(0);}else{// update the buffer info. |
|
|
state.length+=state.objectMode?1:chunk.length;if(addToFront)state.buffer.unshift(chunk);else state.buffer.push(chunk);if(state.needReadable)emitReadable(stream);}maybeReadMore(stream,state);}function chunkInvalid(state,chunk){var er;if(!_isUint8Array(chunk)&&typeof chunk!=='string'&&chunk!==undefined&&!state.objectMode){er=new TypeError('Invalid non-string/buffer chunk');}return er;}// if it's past the high water mark, we can push in some more. |
|
|
// Also, if we have no data yet, we can stand some |
|
|
// more bytes. This is to work around cases where hwm=0, |
|
|
// such as the repl. Also, if the push() triggered a |
|
|
// readable event, and the user called read(largeNumber) such that |
|
|
// needReadable was set, then we ought to push more, so that another |
|
|
// 'readable' event will be triggered. |
|
|
function needMoreData(state){return!state.ended&&(state.needReadable||state.length<state.highWaterMark||state.length===0);}Readable.prototype.isPaused=function(){return this._readableState.flowing===false;};// backwards compatibility. |
|
|
Readable.prototype.setEncoding=function(enc){if(!StringDecoder)StringDecoder=require('string_decoder/').StringDecoder;this._readableState.decoder=new StringDecoder(enc);this._readableState.encoding=enc;return this;};// Don't raise the hwm > 8MB |
|
|
var MAX_HWM=0x800000;function computeNewHighWaterMark(n){if(n>=MAX_HWM){n=MAX_HWM;}else{// Get the next highest power of 2 to prevent increasing hwm excessively in |
|
|
// tiny amounts |
|
|
n--;n|=n>>>1;n|=n>>>2;n|=n>>>4;n|=n>>>8;n|=n>>>16;n++;}return n;}// This function is designed to be inlinable, so please take care when making |
|
|
// changes to the function body. |
|
|
function howMuchToRead(n,state){if(n<=0||state.length===0&&state.ended)return 0;if(state.objectMode)return 1;if(n!==n){// Only flow one buffer at a time |
|
|
if(state.flowing&&state.length)return state.buffer.head.data.length;else return state.length;}// If we're asking for more than the current hwm, then raise the hwm. |
|
|
if(n>state.highWaterMark)state.highWaterMark=computeNewHighWaterMark(n);if(n<=state.length)return n;// Don't have enough |
|
|
if(!state.ended){state.needReadable=true;return 0;}return state.length;}// you can override either this method, or the async _read(n) below. |
|
|
Readable.prototype.read=function(n){debug('read',n);n=parseInt(n,10);var state=this._readableState;var nOrig=n;if(n!==0)state.emittedReadable=false;// if we're doing read(0) to trigger a readable event, but we |
|
|
// already have a bunch of data in the buffer, then just trigger |
|
|
// the 'readable' event and move on. |
|
|
if(n===0&&state.needReadable&&(state.length>=state.highWaterMark||state.ended)){debug('read: emitReadable',state.length,state.ended);if(state.length===0&&state.ended)endReadable(this);else emitReadable(this);return null;}n=howMuchToRead(n,state);// if we've ended, and we're now clear, then finish it up. |
|
|
if(n===0&&state.ended){if(state.length===0)endReadable(this);return null;}// All the actual chunk generation logic needs to be |
|
|
// *below* the call to _read. The reason is that in certain |
|
|
// synthetic stream cases, such as passthrough streams, _read |
|
|
// may be a completely synchronous operation which may change |
|
|
// the state of the read buffer, providing enough data when |
|
|
// before there was *not* enough. |
|
|
// |
|
|
// So, the steps are: |
|
|
// 1. Figure out what the state of things will be after we do |
|
|
// a read from the buffer. |
|
|
// |
|
|
// 2. If that resulting state will trigger a _read, then call _read. |
|
|
// Note that this may be asynchronous, or synchronous. Yes, it is |
|
|
// deeply ugly to write APIs this way, but that still doesn't mean |
|
|
// that the Readable class should behave improperly, as streams are |
|
|
// designed to be sync/async agnostic. |
|
|
// Take note if the _read call is sync or async (ie, if the read call |
|
|
// has returned yet), so that we know whether or not it's safe to emit |
|
|
// 'readable' etc. |
|
|
// |
|
|
// 3. Actually pull the requested chunks out of the buffer and return. |
|
|
// if we need a readable event, then we need to do some reading. |
|
|
var doRead=state.needReadable;debug('need readable',doRead);// if we currently have less than the highWaterMark, then also read some |
|
|
if(state.length===0||state.length-n<state.highWaterMark){doRead=true;debug('length less than watermark',doRead);}// however, if we've ended, then there's no point, and if we're already |
|
|
// reading, then it's unnecessary. |
|
|
if(state.ended||state.reading){doRead=false;debug('reading or ended',doRead);}else if(doRead){debug('do read');state.reading=true;state.sync=true;// if the length is currently zero, then we *need* a readable event. |
|
|
if(state.length===0)state.needReadable=true;// call internal read method |
|
|
this._read(state.highWaterMark);state.sync=false;// If _read pushed data synchronously, then `reading` will be false, |
|
|
// and we need to re-evaluate how much data we can return to the user. |
|
|
if(!state.reading)n=howMuchToRead(nOrig,state);}var ret;if(n>0)ret=fromList(n,state);else ret=null;if(ret===null){state.needReadable=true;n=0;}else{state.length-=n;}if(state.length===0){// If we have nothing in the buffer, then we want to know |
|
|
// as soon as we *do* get something into the buffer. |
|
|
if(!state.ended)state.needReadable=true;// If we tried to read() past the EOF, then emit end on the next tick. |
|
|
if(nOrig!==n&&state.ended)endReadable(this);}if(ret!==null)this.emit('data',ret);return ret;};function onEofChunk(stream,state){if(state.ended)return;if(state.decoder){var chunk=state.decoder.end();if(chunk&&chunk.length){state.buffer.push(chunk);state.length+=state.objectMode?1:chunk.length;}}state.ended=true;// emit 'readable' now to make sure it gets picked up. |
|
|
emitReadable(stream);}// Don't emit readable right away in sync mode, because this can trigger |
|
|
// another read() call => stack overflow. This way, it might trigger |
|
|
// a nextTick recursion warning, but that's not so bad. |
|
|
function emitReadable(stream){var state=stream._readableState;state.needReadable=false;if(!state.emittedReadable){debug('emitReadable',state.flowing);state.emittedReadable=true;if(state.sync)pna.nextTick(emitReadable_,stream);else emitReadable_(stream);}}function emitReadable_(stream){debug('emit readable');stream.emit('readable');flow(stream);}// at this point, the user has presumably seen the 'readable' event, |
|
|
// and called read() to consume some data. that may have triggered |
|
|
// in turn another _read(n) call, in which case reading = true if |
|
|
// it's in progress. |
|
|
// However, if we're not ended, or reading, and the length < hwm, |
|
|
// then go ahead and try to read some more preemptively. |
|
|
function maybeReadMore(stream,state){if(!state.readingMore){state.readingMore=true;pna.nextTick(maybeReadMore_,stream,state);}}function maybeReadMore_(stream,state){var len=state.length;while(!state.reading&&!state.flowing&&!state.ended&&state.length<state.highWaterMark){debug('maybeReadMore read 0');stream.read(0);if(len===state.length)// didn't get any data, stop spinning. |
|
|
break;else len=state.length;}state.readingMore=false;}// abstract method. to be overridden in specific implementation classes. |
|
|
// call cb(er, data) where data is <= n in length. |
|
|
// for virtual (non-string, non-buffer) streams, "length" is somewhat |
|
|
// arbitrary, and perhaps not very meaningful. |
|
|
Readable.prototype._read=function(n){this.emit('error',new Error('_read() is not implemented'));};Readable.prototype.pipe=function(dest,pipeOpts){var src=this;var state=this._readableState;switch(state.pipesCount){case 0:state.pipes=dest;break;case 1:state.pipes=[state.pipes,dest];break;default:state.pipes.push(dest);break;}state.pipesCount+=1;debug('pipe count=%d opts=%j',state.pipesCount,pipeOpts);var doEnd=(!pipeOpts||pipeOpts.end!==false)&&dest!==process.stdout&&dest!==process.stderr;var endFn=doEnd?onend:unpipe;if(state.endEmitted)pna.nextTick(endFn);else src.once('end',endFn);dest.on('unpipe',onunpipe);function onunpipe(readable,unpipeInfo){debug('onunpipe');if(readable===src){if(unpipeInfo&&unpipeInfo.hasUnpiped===false){unpipeInfo.hasUnpiped=true;cleanup();}}}function onend(){debug('onend');dest.end();}// when the dest drains, it reduces the awaitDrain counter |
|
|
// on the source. This would be more elegant with a .once() |
|
|
// handler in flow(), but adding and removing repeatedly is |
|
|
// too slow. |
|
|
var ondrain=pipeOnDrain(src);dest.on('drain',ondrain);var cleanedUp=false;function cleanup(){debug('cleanup');// cleanup event handlers once the pipe is broken |
|
|
dest.removeListener('close',onclose);dest.removeListener('finish',onfinish);dest.removeListener('drain',ondrain);dest.removeListener('error',onerror);dest.removeListener('unpipe',onunpipe);src.removeListener('end',onend);src.removeListener('end',unpipe);src.removeListener('data',ondata);cleanedUp=true;// if the reader is waiting for a drain event from this |
|
|
// specific writer, then it would cause it to never start |
|
|
// flowing again. |
|
|
// So, if this is awaiting a drain, then we just call it now. |
|
|
// If we don't know, then assume that we are waiting for one. |
|
|
if(state.awaitDrain&&(!dest._writableState||dest._writableState.needDrain))ondrain();}// If the user pushes more data while we're writing to dest then we'll end up |
|
|
// in ondata again. However, we only want to increase awaitDrain once because |
|
|
// dest will only emit one 'drain' event for the multiple writes. |
|
|
// => Introduce a guard on increasing awaitDrain. |
|
|
var increasedAwaitDrain=false;src.on('data',ondata);function ondata(chunk){debug('ondata');increasedAwaitDrain=false;var ret=dest.write(chunk);if(false===ret&&!increasedAwaitDrain){// If the user unpiped during `dest.write()`, it is possible |
|
|
// to get stuck in a permanently paused state if that write |
|
|
// also returned false. |
|
|
// => Check whether `dest` is still a piping destination. |
|
|
if((state.pipesCount===1&&state.pipes===dest||state.pipesCount>1&&indexOf(state.pipes,dest)!==-1)&&!cleanedUp){debug('false write response, pause',src._readableState.awaitDrain);src._readableState.awaitDrain++;increasedAwaitDrain=true;}src.pause();}}// if the dest has an error, then stop piping into it. |
|
|
// however, don't suppress the throwing behavior for this. |
|
|
function onerror(er){debug('onerror',er);unpipe();dest.removeListener('error',onerror);if(EElistenerCount(dest,'error')===0)dest.emit('error',er);}// Make sure our error handler is attached before userland ones. |
|
|
prependListener(dest,'error',onerror);// Both close and finish should trigger unpipe, but only once. |
|
|
function onclose(){dest.removeListener('finish',onfinish);unpipe();}dest.once('close',onclose);function onfinish(){debug('onfinish');dest.removeListener('close',onclose);unpipe();}dest.once('finish',onfinish);function unpipe(){debug('unpipe');src.unpipe(dest);}// tell the dest that it's being piped to |
|
|
dest.emit('pipe',src);// start the flow if it hasn't been started already. |
|
|
if(!state.flowing){debug('pipe resume');src.resume();}return dest;};function pipeOnDrain(src){return function(){var state=src._readableState;debug('pipeOnDrain',state.awaitDrain);if(state.awaitDrain)state.awaitDrain--;if(state.awaitDrain===0&&EElistenerCount(src,'data')){state.flowing=true;flow(src);}};}Readable.prototype.unpipe=function(dest){var state=this._readableState;var unpipeInfo={hasUnpiped:false};// if we're not piping anywhere, then do nothing. |
|
|
if(state.pipesCount===0)return this;// just one destination. most common case. |
|
|
if(state.pipesCount===1){// passed in one, but it's not the right one. |
|
|
if(dest&&dest!==state.pipes)return this;if(!dest)dest=state.pipes;// got a match. |
|
|
state.pipes=null;state.pipesCount=0;state.flowing=false;if(dest)dest.emit('unpipe',this,unpipeInfo);return this;}// slow case. multiple pipe destinations. |
|
|
if(!dest){// remove all. |
|
|
var dests=state.pipes;var len=state.pipesCount;state.pipes=null;state.pipesCount=0;state.flowing=false;for(var i=0;i<len;i++){dests[i].emit('unpipe',this,unpipeInfo);}return this;}// try to find the right one. |
|
|
var index=indexOf(state.pipes,dest);if(index===-1)return this;state.pipes.splice(index,1);state.pipesCount-=1;if(state.pipesCount===1)state.pipes=state.pipes[0];dest.emit('unpipe',this,unpipeInfo);return this;};// set up data events if they are asked for |
|
|
// Ensure readable listeners eventually get something |
|
|
Readable.prototype.on=function(ev,fn){var res=Stream.prototype.on.call(this,ev,fn);if(ev==='data'){// Start flowing on next tick if stream isn't explicitly paused |
|
|
if(this._readableState.flowing!==false)this.resume();}else if(ev==='readable'){var state=this._readableState;if(!state.endEmitted&&!state.readableListening){state.readableListening=state.needReadable=true;state.emittedReadable=false;if(!state.reading){pna.nextTick(nReadingNextTick,this);}else if(state.length){emitReadable(this);}}}return res;};Readable.prototype.addListener=Readable.prototype.on;function nReadingNextTick(self){debug('readable nexttick read 0');self.read(0);}// pause() and resume() are remnants of the legacy readable stream API |
|
|
// If the user uses them, then switch into old mode. |
|
|
Readable.prototype.resume=function(){var state=this._readableState;if(!state.flowing){debug('resume');state.flowing=true;resume(this,state);}return this;};function resume(stream,state){if(!state.resumeScheduled){state.resumeScheduled=true;pna.nextTick(resume_,stream,state);}}function resume_(stream,state){if(!state.reading){debug('resume read 0');stream.read(0);}state.resumeScheduled=false;state.awaitDrain=0;stream.emit('resume');flow(stream);if(state.flowing&&!state.reading)stream.read(0);}Readable.prototype.pause=function(){debug('call pause flowing=%j',this._readableState.flowing);if(false!==this._readableState.flowing){debug('pause');this._readableState.flowing=false;this.emit('pause');}return this;};function flow(stream){var state=stream._readableState;debug('flow',state.flowing);while(state.flowing&&stream.read()!==null){}}// wrap an old-style stream as the async data source. |
|
|
// This is *not* part of the readable stream interface. |
|
|
// It is an ugly unfortunate mess of history. |
|
|
Readable.prototype.wrap=function(stream){var _this=this;var state=this._readableState;var paused=false;stream.on('end',function(){debug('wrapped end');if(state.decoder&&!state.ended){var chunk=state.decoder.end();if(chunk&&chunk.length)_this.push(chunk);}_this.push(null);});stream.on('data',function(chunk){debug('wrapped data');if(state.decoder)chunk=state.decoder.write(chunk);// don't skip over falsy values in objectMode |
|
|
if(state.objectMode&&(chunk===null||chunk===undefined))return;else if(!state.objectMode&&(!chunk||!chunk.length))return;var ret=_this.push(chunk);if(!ret){paused=true;stream.pause();}});// proxy all the other methods. |
|
|
// important when wrapping filters and duplexes. |
|
|
for(var i in stream){if(this[i]===undefined&&typeof stream[i]==='function'){this[i]=function(method){return function(){return stream[method].apply(stream,arguments);};}(i);}}// proxy certain important events. |
|
|
for(var n=0;n<kProxyEvents.length;n++){stream.on(kProxyEvents[n],this.emit.bind(this,kProxyEvents[n]));}// when we try to consume some more bytes, simply unpause the |
|
|
// underlying stream. |
|
|
this._read=function(n){debug('wrapped _read',n);if(paused){paused=false;stream.resume();}};return this;};Object.defineProperty(Readable.prototype,'readableHighWaterMark',{// making it explicit this property is not enumerable |
|
|
// because otherwise some prototype manipulation in |
|
|
// userland will fail |
|
|
enumerable:false,get:function get(){return this._readableState.highWaterMark;}});// exposed for testing purposes only. |
|
|
Readable._fromList=fromList;// Pluck off n bytes from an array of buffers. |
|
|
// Length is the combined lengths of all the buffers in the list. |
|
|
// This function is designed to be inlinable, so please take care when making |
|
|
// changes to the function body. |
|
|
function fromList(n,state){// nothing buffered |
|
|
if(state.length===0)return null;var ret;if(state.objectMode)ret=state.buffer.shift();else if(!n||n>=state.length){// read it all, truncate the list |
|
|
if(state.decoder)ret=state.buffer.join('');else if(state.buffer.length===1)ret=state.buffer.head.data;else ret=state.buffer.concat(state.length);state.buffer.clear();}else{// read part of list |
|
|
ret=fromListPartial(n,state.buffer,state.decoder);}return ret;}// Extracts only enough buffered data to satisfy the amount requested. |
|
|
// This function is designed to be inlinable, so please take care when making |
|
|
// changes to the function body. |
|
|
function fromListPartial(n,list,hasStrings){var ret;if(n<list.head.data.length){// slice is the same for buffers and strings |
|
|
ret=list.head.data.slice(0,n);list.head.data=list.head.data.slice(n);}else if(n===list.head.data.length){// first chunk is a perfect match |
|
|
ret=list.shift();}else{// result spans more than one buffer |
|
|
ret=hasStrings?copyFromBufferString(n,list):copyFromBuffer(n,list);}return ret;}// Copies a specified amount of characters from the list of buffered data |
|
|
// chunks. |
|
|
// This function is designed to be inlinable, so please take care when making |
|
|
// changes to the function body. |
|
|
function copyFromBufferString(n,list){var p=list.head;var c=1;var ret=p.data;n-=ret.length;while(p=p.next){var str=p.data;var nb=n>str.length?str.length:n;if(nb===str.length)ret+=str;else ret+=str.slice(0,n);n-=nb;if(n===0){if(nb===str.length){++c;if(p.next)list.head=p.next;else list.head=list.tail=null;}else{list.head=p;p.data=str.slice(nb);}break;}++c;}list.length-=c;return ret;}// Copies a specified amount of bytes from the list of buffered data chunks. |
|
|
// This function is designed to be inlinable, so please take care when making |
|
|
// changes to the function body. |
|
|
function copyFromBuffer(n,list){var ret=Buffer.allocUnsafe(n);var p=list.head;var c=1;p.data.copy(ret);n-=p.data.length;while(p=p.next){var buf=p.data;var nb=n>buf.length?buf.length:n;buf.copy(ret,ret.length-n,0,nb);n-=nb;if(n===0){if(nb===buf.length){++c;if(p.next)list.head=p.next;else list.head=list.tail=null;}else{list.head=p;p.data=buf.slice(nb);}break;}++c;}list.length-=c;return ret;}function endReadable(stream){var state=stream._readableState;// If we get here before consuming all the bytes, then that is a |
|
|
// bug in node. Should never happen. |
|
|
if(state.length>0)throw new Error('"endReadable()" called on non-empty stream');if(!state.endEmitted){state.ended=true;pna.nextTick(endReadableNT,state,stream);}}function endReadableNT(state,stream){// Check that we didn't get one last unshift. |
|
|
if(!state.endEmitted&&state.length===0){state.endEmitted=true;stream.readable=false;stream.emit('end');}}function indexOf(xs,x){for(var i=0,l=xs.length;i<l;i++){if(xs[i]===x)return i;}return-1;}}).call(this,require('_process'),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{"./_stream_duplex":483,"./internal/streams/BufferList":488,"./internal/streams/destroy":489,"./internal/streams/stream":490,"_process":443,"core-util-is":305,"events":344,"inherits":364,"isarray":366,"process-nextick-args":442,"safe-buffer":470,"string_decoder/":495,"util":183}],486:[function(require,module,exports){// Copyright Joyent, Inc. and other Node contributors. |
|
|
// |
|
|
// Permission is hereby granted, free of charge, to any person obtaining a |
|
|
// copy of this software and associated documentation files (the |
|
|
// "Software"), to deal in the Software without restriction, including |
|
|
// without limitation the rights to use, copy, modify, merge, publish, |
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit |
|
|
// persons to whom the Software is furnished to do so, subject to the |
|
|
// following conditions: |
|
|
// |
|
|
// The above copyright notice and this permission notice shall be included |
|
|
// in all copies or substantial portions of the Software. |
|
|
// |
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
|
// a transform stream is a readable/writable stream where you do |
|
|
// something with the data. Sometimes it's called a "filter", |
|
|
// but that's not a great name for it, since that implies a thing where |
|
|
// some bits pass through, and others are simply ignored. (That would |
|
|
// be a valid example of a transform, of course.) |
|
|
// |
|
|
// While the output is causally related to the input, it's not a |
|
|
// necessarily symmetric or synchronous transformation. For example, |
|
|
// a zlib stream might take multiple plain-text writes(), and then |
|
|
// emit a single compressed chunk some time in the future. |
|
|
// |
|
|
// Here's how this works: |
|
|
// |
|
|
// The Transform stream has all the aspects of the readable and writable |
|
|
// stream classes. When you write(chunk), that calls _write(chunk,cb) |
|
|
// internally, and returns false if there's a lot of pending writes |
|
|
// buffered up. When you call read(), that calls _read(n) until |
|
|
// there's enough pending readable data buffered up. |
|
|
// |
|
|
// In a transform stream, the written data is placed in a buffer. When |
|
|
// _read(n) is called, it transforms the queued up data, calling the |
|
|
// buffered _write cb's as it consumes chunks. If consuming a single |
|
|
// written chunk would result in multiple output chunks, then the first |
|
|
// outputted bit calls the readcb, and subsequent chunks just go into |
|
|
// the read buffer, and will cause it to emit 'readable' if necessary. |
|
|
// |
|
|
// This way, back-pressure is actually determined by the reading side, |
|
|
// since _read has to be called to start processing a new chunk. However, |
|
|
// a pathological inflate type of transform can cause excessive buffering |
|
|
// here. For example, imagine a stream where every byte of input is |
|
|
// interpreted as an integer from 0-255, and then results in that many |
|
|
// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in |
|
|
// 1kb of data being output. In this case, you could write a very small |
|
|
// amount of input, and end up with a very large amount of output. In |
|
|
// such a pathological inflating mechanism, there'd be no way to tell |
|
|
// the system to stop doing the transform. A single 4MB write could |
|
|
// cause the system to run out of memory. |
|
|
// |
|
|
// However, even in such a pathological case, only a single written chunk |
|
|
// would be consumed, and then the rest would wait (un-transformed) until |
|
|
// the results of the previous transformed chunk were consumed. |
|
|
'use strict';module.exports=Transform;var Duplex=require('./_stream_duplex');/*<replacement>*/var util=Object.create(require('core-util-is'));util.inherits=require('inherits');/*</replacement>*/util.inherits(Transform,Duplex);function afterTransform(er,data){var ts=this._transformState;ts.transforming=false;var cb=ts.writecb;if(!cb){return this.emit('error',new Error('write callback called multiple times'));}ts.writechunk=null;ts.writecb=null;if(data!=null)// single equals check for both `null` and `undefined` |
|
|
this.push(data);cb(er);var rs=this._readableState;rs.reading=false;if(rs.needReadable||rs.length<rs.highWaterMark){this._read(rs.highWaterMark);}}function Transform(options){if(!(this instanceof Transform))return new Transform(options);Duplex.call(this,options);this._transformState={afterTransform:afterTransform.bind(this),needTransform:false,transforming:false,writecb:null,writechunk:null,writeencoding:null};// start out asking for a readable event once data is transformed. |
|
|
this._readableState.needReadable=true;// we have implemented the _read method, and done the other things |
|
|
// that Readable wants before the first _read call, so unset the |
|
|
// sync guard flag. |
|
|
this._readableState.sync=false;if(options){if(typeof options.transform==='function')this._transform=options.transform;if(typeof options.flush==='function')this._flush=options.flush;}// When the writable side finishes, then flush out anything remaining. |
|
|
this.on('prefinish',prefinish);}function prefinish(){var _this=this;if(typeof this._flush==='function'){this._flush(function(er,data){done(_this,er,data);});}else{done(this,null,null);}}Transform.prototype.push=function(chunk,encoding){this._transformState.needTransform=false;return Duplex.prototype.push.call(this,chunk,encoding);};// This is the part where you do stuff! |
|
|
// override this function in implementation classes. |
|
|
// 'chunk' is an input chunk. |
|
|
// |
|
|
// Call `push(newChunk)` to pass along transformed output |
|
|
// to the readable side. You may call 'push' zero or more times. |
|
|
// |
|
|
// Call `cb(err)` when you are done with this chunk. If you pass |
|
|
// an error, then that'll put the hurt on the whole operation. If you |
|
|
// never call cb(), then you'll never get another chunk. |
|
|
Transform.prototype._transform=function(chunk,encoding,cb){throw new Error('_transform() is not implemented');};Transform.prototype._write=function(chunk,encoding,cb){var ts=this._transformState;ts.writecb=cb;ts.writechunk=chunk;ts.writeencoding=encoding;if(!ts.transforming){var rs=this._readableState;if(ts.needTransform||rs.needReadable||rs.length<rs.highWaterMark)this._read(rs.highWaterMark);}};// Doesn't matter what the args are here. |
|
|
// _transform does all the work. |
|
|
// That we got here means that the readable side wants more data. |
|
|
Transform.prototype._read=function(n){var ts=this._transformState;if(ts.writechunk!==null&&ts.writecb&&!ts.transforming){ts.transforming=true;this._transform(ts.writechunk,ts.writeencoding,ts.afterTransform);}else{// mark that we need a transform, so that any data that comes in |
|
|
// will get processed, now that we've asked for it. |
|
|
ts.needTransform=true;}};Transform.prototype._destroy=function(err,cb){var _this2=this;Duplex.prototype._destroy.call(this,err,function(err2){cb(err2);_this2.emit('close');});};function done(stream,er,data){if(er)return stream.emit('error',er);if(data!=null)// single equals check for both `null` and `undefined` |
|
|
stream.push(data);// if there's nothing in the write buffer, then that means |
|
|
// that nothing more will ever be provided |
|
|
if(stream._writableState.length)throw new Error('Calling transform done when ws.length != 0');if(stream._transformState.transforming)throw new Error('Calling transform done when still transforming');return stream.push(null);}},{"./_stream_duplex":483,"core-util-is":305,"inherits":364}],487:[function(require,module,exports){(function(process,global,setImmediate){// Copyright Joyent, Inc. and other Node contributors. |
|
|
// |
|
|
// Permission is hereby granted, free of charge, to any person obtaining a |
|
|
// copy of this software and associated documentation files (the |
|
|
// "Software"), to deal in the Software without restriction, including |
|
|
// without limitation the rights to use, copy, modify, merge, publish, |
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit |
|
|
// persons to whom the Software is furnished to do so, subject to the |
|
|
// following conditions: |
|
|
// |
|
|
// The above copyright notice and this permission notice shall be included |
|
|
// in all copies or substantial portions of the Software. |
|
|
// |
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
|
// A bit simpler than readable streams. |
|
|
// Implement an async ._write(chunk, encoding, cb), and it'll handle all |
|
|
// the drain event emission and buffering. |
|
|
'use strict';/*<replacement>*/var pna=require('process-nextick-args');/*</replacement>*/module.exports=Writable;/* <replacement> */function WriteReq(chunk,encoding,cb){this.chunk=chunk;this.encoding=encoding;this.callback=cb;this.next=null;}// It seems a linked list but it is not |
|
|
// there will be only 2 of these for each stream |
|
|
function CorkedRequest(state){var _this=this;this.next=null;this.entry=null;this.finish=function(){onCorkedFinish(_this,state);};}/* </replacement> */ /*<replacement>*/var asyncWrite=!process.browser&&['v0.10','v0.9.'].indexOf(process.version.slice(0,5))>-1?setImmediate:pna.nextTick;/*</replacement>*/ /*<replacement>*/var Duplex;/*</replacement>*/Writable.WritableState=WritableState;/*<replacement>*/var util=Object.create(require('core-util-is'));util.inherits=require('inherits');/*</replacement>*/ /*<replacement>*/var internalUtil={deprecate:require('util-deprecate')};/*</replacement>*/ /*<replacement>*/var Stream=require('./internal/streams/stream');/*</replacement>*/ /*<replacement>*/var Buffer=require('safe-buffer').Buffer;var OurUint8Array=global.Uint8Array||function(){};function _uint8ArrayToBuffer(chunk){return Buffer.from(chunk);}function _isUint8Array(obj){return Buffer.isBuffer(obj)||obj instanceof OurUint8Array;}/*</replacement>*/var destroyImpl=require('./internal/streams/destroy');util.inherits(Writable,Stream);function nop(){}function WritableState(options,stream){Duplex=Duplex||require('./_stream_duplex');options=options||{};// Duplex streams are both readable and writable, but share |
|
|
// the same options object. |
|
|
// However, some cases require setting options to different |
|
|
// values for the readable and the writable sides of the duplex stream. |
|
|
// These options can be provided separately as readableXXX and writableXXX. |
|
|
var isDuplex=stream instanceof Duplex;// object stream flag to indicate whether or not this stream |
|
|
// contains buffers or objects. |
|
|
this.objectMode=!!options.objectMode;if(isDuplex)this.objectMode=this.objectMode||!!options.writableObjectMode;// the point at which write() starts returning false |
|
|
// Note: 0 is a valid value, means that we always return false if |
|
|
// the entire buffer is not flushed immediately on write() |
|
|
var hwm=options.highWaterMark;var writableHwm=options.writableHighWaterMark;var defaultHwm=this.objectMode?16:16*1024;if(hwm||hwm===0)this.highWaterMark=hwm;else if(isDuplex&&(writableHwm||writableHwm===0))this.highWaterMark=writableHwm;else this.highWaterMark=defaultHwm;// cast to ints. |
|
|
this.highWaterMark=Math.floor(this.highWaterMark);// if _final has been called |
|
|
this.finalCalled=false;// drain event flag. |
|
|
this.needDrain=false;// at the start of calling end() |
|
|
this.ending=false;// when end() has been called, and returned |
|
|
this.ended=false;// when 'finish' is emitted |
|
|
this.finished=false;// has it been destroyed |
|
|
this.destroyed=false;// should we decode strings into buffers before passing to _write? |
|
|
// this is here so that some node-core streams can optimize string |
|
|
// handling at a lower level. |
|
|
var noDecode=options.decodeStrings===false;this.decodeStrings=!noDecode;// Crypto is kind of old and crusty. Historically, its default string |
|
|
// encoding is 'binary' so we have to make this configurable. |
|
|
// Everything else in the universe uses 'utf8', though. |
|
|
this.defaultEncoding=options.defaultEncoding||'utf8';// not an actual buffer we keep track of, but a measurement |
|
|
// of how much we're waiting to get pushed to some underlying |
|
|
// socket or file. |
|
|
this.length=0;// a flag to see when we're in the middle of a write. |
|
|
this.writing=false;// when true all writes will be buffered until .uncork() call |
|
|
this.corked=0;// a flag to be able to tell if the onwrite cb is called immediately, |
|
|
// or on a later tick. We set this to true at first, because any |
|
|
// actions that shouldn't happen until "later" should generally also |
|
|
// not happen before the first write call. |
|
|
this.sync=true;// a flag to know if we're processing previously buffered items, which |
|
|
// may call the _write() callback in the same tick, so that we don't |
|
|
// end up in an overlapped onwrite situation. |
|
|
this.bufferProcessing=false;// the callback that's passed to _write(chunk,cb) |
|
|
this.onwrite=function(er){onwrite(stream,er);};// the callback that the user supplies to write(chunk,encoding,cb) |
|
|
this.writecb=null;// the amount that is being written when _write is called. |
|
|
this.writelen=0;this.bufferedRequest=null;this.lastBufferedRequest=null;// number of pending user-supplied write callbacks |
|
|
// this must be 0 before 'finish' can be emitted |
|
|
this.pendingcb=0;// emit prefinish if the only thing we're waiting for is _write cbs |
|
|
// This is relevant for synchronous Transform streams |
|
|
this.prefinished=false;// True if the error was already emitted and should not be thrown again |
|
|
this.errorEmitted=false;// count buffered requests |
|
|
this.bufferedRequestCount=0;// allocate the first CorkedRequest, there is always |
|
|
// one allocated and free to use, and we maintain at most two |
|
|
this.corkedRequestsFree=new CorkedRequest(this);}WritableState.prototype.getBuffer=function getBuffer(){var current=this.bufferedRequest;var out=[];while(current){out.push(current);current=current.next;}return out;};(function(){try{Object.defineProperty(WritableState.prototype,'buffer',{get:internalUtil.deprecate(function(){return this.getBuffer();},'_writableState.buffer is deprecated. Use _writableState.getBuffer '+'instead.','DEP0003')});}catch(_){}})();// Test _writableState for inheritance to account for Duplex streams, |
|
|
// whose prototype chain only points to Readable. |
|
|
var realHasInstance;if(typeof Symbol==='function'&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]==='function'){realHasInstance=Function.prototype[Symbol.hasInstance];Object.defineProperty(Writable,Symbol.hasInstance,{value:function value(object){if(realHasInstance.call(this,object))return true;if(this!==Writable)return false;return object&&object._writableState instanceof WritableState;}});}else{realHasInstance=function realHasInstance(object){return object instanceof this;};}function Writable(options){Duplex=Duplex||require('./_stream_duplex');// Writable ctor is applied to Duplexes, too. |
|
|
// `realHasInstance` is necessary because using plain `instanceof` |
|
|
// would return false, as no `_writableState` property is attached. |
|
|
// Trying to use the custom `instanceof` for Writable here will also break the |
|
|
// Node.js LazyTransform implementation, which has a non-trivial getter for |
|
|
// `_writableState` that would lead to infinite recursion. |
|
|
if(!realHasInstance.call(Writable,this)&&!(this instanceof Duplex)){return new Writable(options);}this._writableState=new WritableState(options,this);// legacy. |
|
|
this.writable=true;if(options){if(typeof options.write==='function')this._write=options.write;if(typeof options.writev==='function')this._writev=options.writev;if(typeof options.destroy==='function')this._destroy=options.destroy;if(typeof options.final==='function')this._final=options.final;}Stream.call(this);}// Otherwise people can pipe Writable streams, which is just wrong. |
|
|
Writable.prototype.pipe=function(){this.emit('error',new Error('Cannot pipe, not readable'));};function writeAfterEnd(stream,cb){var er=new Error('write after end');// TODO: defer error events consistently everywhere, not just the cb |
|
|
stream.emit('error',er);pna.nextTick(cb,er);}// Checks that a user-supplied chunk is valid, especially for the particular |
|
|
// mode the stream is in. Currently this means that `null` is never accepted |
|
|
// and undefined/non-string values are only allowed in object mode. |
|
|
function validChunk(stream,state,chunk,cb){var valid=true;var er=false;if(chunk===null){er=new TypeError('May not write null values to stream');}else if(typeof chunk!=='string'&&chunk!==undefined&&!state.objectMode){er=new TypeError('Invalid non-string/buffer chunk');}if(er){stream.emit('error',er);pna.nextTick(cb,er);valid=false;}return valid;}Writable.prototype.write=function(chunk,encoding,cb){var state=this._writableState;var ret=false;var isBuf=!state.objectMode&&_isUint8Array(chunk);if(isBuf&&!Buffer.isBuffer(chunk)){chunk=_uint8ArrayToBuffer(chunk);}if(typeof encoding==='function'){cb=encoding;encoding=null;}if(isBuf)encoding='buffer';else if(!encoding)encoding=state.defaultEncoding;if(typeof cb!=='function')cb=nop;if(state.ended)writeAfterEnd(this,cb);else if(isBuf||validChunk(this,state,chunk,cb)){state.pendingcb++;ret=writeOrBuffer(this,state,isBuf,chunk,encoding,cb);}return ret;};Writable.prototype.cork=function(){var state=this._writableState;state.corked++;};Writable.prototype.uncork=function(){var state=this._writableState;if(state.corked){state.corked--;if(!state.writing&&!state.corked&&!state.finished&&!state.bufferProcessing&&state.bufferedRequest)clearBuffer(this,state);}};Writable.prototype.setDefaultEncoding=function setDefaultEncoding(encoding){// node::ParseEncoding() requires lower case. |
|
|
if(typeof encoding==='string')encoding=encoding.toLowerCase();if(!(['hex','utf8','utf-8','ascii','binary','base64','ucs2','ucs-2','utf16le','utf-16le','raw'].indexOf((encoding+'').toLowerCase())>-1))throw new TypeError('Unknown encoding: '+encoding);this._writableState.defaultEncoding=encoding;return this;};function decodeChunk(state,chunk,encoding){if(!state.objectMode&&state.decodeStrings!==false&&typeof chunk==='string'){chunk=Buffer.from(chunk,encoding);}return chunk;}Object.defineProperty(Writable.prototype,'writableHighWaterMark',{// making it explicit this property is not enumerable |
|
|
// because otherwise some prototype manipulation in |
|
|
// userland will fail |
|
|
enumerable:false,get:function get(){return this._writableState.highWaterMark;}});// if we're already writing something, then just put this |
|
|
// in the queue, and wait our turn. Otherwise, call _write |
|
|
// If we return false, then we need a drain event, so set that flag. |
|
|
function writeOrBuffer(stream,state,isBuf,chunk,encoding,cb){if(!isBuf){var newChunk=decodeChunk(state,chunk,encoding);if(chunk!==newChunk){isBuf=true;encoding='buffer';chunk=newChunk;}}var len=state.objectMode?1:chunk.length;state.length+=len;var ret=state.length<state.highWaterMark;// we must ensure that previous needDrain will not be reset to false. |
|
|
if(!ret)state.needDrain=true;if(state.writing||state.corked){var last=state.lastBufferedRequest;state.lastBufferedRequest={chunk:chunk,encoding:encoding,isBuf:isBuf,callback:cb,next:null};if(last){last.next=state.lastBufferedRequest;}else{state.bufferedRequest=state.lastBufferedRequest;}state.bufferedRequestCount+=1;}else{doWrite(stream,state,false,len,chunk,encoding,cb);}return ret;}function doWrite(stream,state,writev,len,chunk,encoding,cb){state.writelen=len;state.writecb=cb;state.writing=true;state.sync=true;if(writev)stream._writev(chunk,state.onwrite);else stream._write(chunk,encoding,state.onwrite);state.sync=false;}function onwriteError(stream,state,sync,er,cb){--state.pendingcb;if(sync){// defer the callback if we are being called synchronously |
|
|
// to avoid piling up things on the stack |
|
|
pna.nextTick(cb,er);// this can emit finish, and it will always happen |
|
|
// after error |
|
|
pna.nextTick(finishMaybe,stream,state);stream._writableState.errorEmitted=true;stream.emit('error',er);}else{// the caller expect this to happen before if |
|
|
// it is async |
|
|
cb(er);stream._writableState.errorEmitted=true;stream.emit('error',er);// this can emit finish, but finish must |
|
|
// always follow error |
|
|
finishMaybe(stream,state);}}function onwriteStateUpdate(state){state.writing=false;state.writecb=null;state.length-=state.writelen;state.writelen=0;}function onwrite(stream,er){var state=stream._writableState;var sync=state.sync;var cb=state.writecb;onwriteStateUpdate(state);if(er)onwriteError(stream,state,sync,er,cb);else{// Check if we're actually ready to finish, but don't emit yet |
|
|
var finished=needFinish(state);if(!finished&&!state.corked&&!state.bufferProcessing&&state.bufferedRequest){clearBuffer(stream,state);}if(sync){/*<replacement>*/asyncWrite(afterWrite,stream,state,finished,cb);/*</replacement>*/}else{afterWrite(stream,state,finished,cb);}}}function afterWrite(stream,state,finished,cb){if(!finished)onwriteDrain(stream,state);state.pendingcb--;cb();finishMaybe(stream,state);}// Must force callback to be called on nextTick, so that we don't |
|
|
// emit 'drain' before the write() consumer gets the 'false' return |
|
|
// value, and has a chance to attach a 'drain' listener. |
|
|
function onwriteDrain(stream,state){if(state.length===0&&state.needDrain){state.needDrain=false;stream.emit('drain');}}// if there's something in the buffer waiting, then process it |
|
|
function clearBuffer(stream,state){state.bufferProcessing=true;var entry=state.bufferedRequest;if(stream._writev&&entry&&entry.next){// Fast case, write everything using _writev() |
|
|
var l=state.bufferedRequestCount;var buffer=new Array(l);var holder=state.corkedRequestsFree;holder.entry=entry;var count=0;var allBuffers=true;while(entry){buffer[count]=entry;if(!entry.isBuf)allBuffers=false;entry=entry.next;count+=1;}buffer.allBuffers=allBuffers;doWrite(stream,state,true,state.length,buffer,'',holder.finish);// doWrite is almost always async, defer these to save a bit of time |
|
|
// as the hot path ends with doWrite |
|
|
state.pendingcb++;state.lastBufferedRequest=null;if(holder.next){state.corkedRequestsFree=holder.next;holder.next=null;}else{state.corkedRequestsFree=new CorkedRequest(state);}state.bufferedRequestCount=0;}else{// Slow case, write chunks one-by-one |
|
|
while(entry){var chunk=entry.chunk;var encoding=entry.encoding;var cb=entry.callback;var len=state.objectMode?1:chunk.length;doWrite(stream,state,false,len,chunk,encoding,cb);entry=entry.next;state.bufferedRequestCount--;// if we didn't call the onwrite immediately, then |
|
|
// it means that we need to wait until it does. |
|
|
// also, that means that the chunk and cb are currently |
|
|
// being processed, so move the buffer counter past them. |
|
|
if(state.writing){break;}}if(entry===null)state.lastBufferedRequest=null;}state.bufferedRequest=entry;state.bufferProcessing=false;}Writable.prototype._write=function(chunk,encoding,cb){cb(new Error('_write() is not implemented'));};Writable.prototype._writev=null;Writable.prototype.end=function(chunk,encoding,cb){var state=this._writableState;if(typeof chunk==='function'){cb=chunk;chunk=null;encoding=null;}else if(typeof encoding==='function'){cb=encoding;encoding=null;}if(chunk!==null&&chunk!==undefined)this.write(chunk,encoding);// .end() fully uncorks |
|
|
if(state.corked){state.corked=1;this.uncork();}// ignore unnecessary end() calls. |
|
|
if(!state.ending&&!state.finished)endWritable(this,state,cb);};function needFinish(state){return state.ending&&state.length===0&&state.bufferedRequest===null&&!state.finished&&!state.writing;}function callFinal(stream,state){stream._final(function(err){state.pendingcb--;if(err){stream.emit('error',err);}state.prefinished=true;stream.emit('prefinish');finishMaybe(stream,state);});}function prefinish(stream,state){if(!state.prefinished&&!state.finalCalled){if(typeof stream._final==='function'){state.pendingcb++;state.finalCalled=true;pna.nextTick(callFinal,stream,state);}else{state.prefinished=true;stream.emit('prefinish');}}}function finishMaybe(stream,state){var need=needFinish(state);if(need){prefinish(stream,state);if(state.pendingcb===0){state.finished=true;stream.emit('finish');}}return need;}function endWritable(stream,state,cb){state.ending=true;finishMaybe(stream,state);if(cb){if(state.finished)pna.nextTick(cb);else stream.once('finish',cb);}state.ended=true;stream.writable=false;}function onCorkedFinish(corkReq,state,err){var entry=corkReq.entry;corkReq.entry=null;while(entry){var cb=entry.callback;state.pendingcb--;cb(err);entry=entry.next;}if(state.corkedRequestsFree){state.corkedRequestsFree.next=corkReq;}else{state.corkedRequestsFree=corkReq;}}Object.defineProperty(Writable.prototype,'destroyed',{get:function get(){if(this._writableState===undefined){return false;}return this._writableState.destroyed;},set:function set(value){// we ignore the value if the stream |
|
|
// has not been initialized yet |
|
|
if(!this._writableState){return;}// backward compatibility, the user is explicitly |
|
|
// managing destroyed |
|
|
this._writableState.destroyed=value;}});Writable.prototype.destroy=destroyImpl.destroy;Writable.prototype._undestroy=destroyImpl.undestroy;Writable.prototype._destroy=function(err,cb){this.end();cb(err);};}).call(this,require('_process'),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{},require("timers").setImmediate);},{"./_stream_duplex":483,"./internal/streams/destroy":489,"./internal/streams/stream":490,"_process":443,"core-util-is":305,"inherits":364,"process-nextick-args":442,"safe-buffer":470,"timers":496,"util-deprecate":497}],488:[function(require,module,exports){'use strict';function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}var Buffer=require('safe-buffer').Buffer;var util=require('util');function copyBuffer(src,target,offset){src.copy(target,offset);}module.exports=function(){function BufferList(){_classCallCheck(this,BufferList);this.head=null;this.tail=null;this.length=0;}BufferList.prototype.push=function push(v){var entry={data:v,next:null};if(this.length>0)this.tail.next=entry;else this.head=entry;this.tail=entry;++this.length;};BufferList.prototype.unshift=function unshift(v){var entry={data:v,next:this.head};if(this.length===0)this.tail=entry;this.head=entry;++this.length;};BufferList.prototype.shift=function shift(){if(this.length===0)return;var ret=this.head.data;if(this.length===1)this.head=this.tail=null;else this.head=this.head.next;--this.length;return ret;};BufferList.prototype.clear=function clear(){this.head=this.tail=null;this.length=0;};BufferList.prototype.join=function join(s){if(this.length===0)return'';var p=this.head;var ret=''+p.data;while(p=p.next){ret+=s+p.data;}return ret;};BufferList.prototype.concat=function concat(n){if(this.length===0)return Buffer.alloc(0);if(this.length===1)return this.head.data;var ret=Buffer.allocUnsafe(n>>>0);var p=this.head;var i=0;while(p){copyBuffer(p.data,ret,i);i+=p.data.length;p=p.next;}return ret;};return BufferList;}();if(util&&util.inspect&&util.inspect.custom){module.exports.prototype[util.inspect.custom]=function(){var obj=util.inspect({length:this.length});return this.constructor.name+' '+obj;};}},{"safe-buffer":470,"util":183}],489:[function(require,module,exports){'use strict';/*<replacement>*/var pna=require('process-nextick-args');/*</replacement>*/ // undocumented cb() API, needed for core, not for public API |
|
|
function destroy(err,cb){var _this=this;var readableDestroyed=this._readableState&&this._readableState.destroyed;var writableDestroyed=this._writableState&&this._writableState.destroyed;if(readableDestroyed||writableDestroyed){if(cb){cb(err);}else if(err&&(!this._writableState||!this._writableState.errorEmitted)){pna.nextTick(emitErrorNT,this,err);}return this;}// we set destroyed to true before firing error callbacks in order |
|
|
// to make it re-entrance safe in case destroy() is called within callbacks |
|
|
if(this._readableState){this._readableState.destroyed=true;}// if this is a duplex stream mark the writable part as destroyed as well |
|
|
if(this._writableState){this._writableState.destroyed=true;}this._destroy(err||null,function(err){if(!cb&&err){pna.nextTick(emitErrorNT,_this,err);if(_this._writableState){_this._writableState.errorEmitted=true;}}else if(cb){cb(err);}});return this;}function undestroy(){if(this._readableState){this._readableState.destroyed=false;this._readableState.reading=false;this._readableState.ended=false;this._readableState.endEmitted=false;}if(this._writableState){this._writableState.destroyed=false;this._writableState.ended=false;this._writableState.ending=false;this._writableState.finished=false;this._writableState.errorEmitted=false;}}function emitErrorNT(self,err){self.emit('error',err);}module.exports={destroy:destroy,undestroy:undestroy};},{"process-nextick-args":442}],490:[function(require,module,exports){arguments[4][466][0].apply(exports,arguments);},{"dup":466,"events":344}],491:[function(require,module,exports){module.exports=require('./readable').PassThrough;},{"./readable":492}],492:[function(require,module,exports){exports=module.exports=require('./lib/_stream_readable.js');exports.Stream=exports;exports.Readable=exports;exports.Writable=require('./lib/_stream_writable.js');exports.Duplex=require('./lib/_stream_duplex.js');exports.Transform=require('./lib/_stream_transform.js');exports.PassThrough=require('./lib/_stream_passthrough.js');},{"./lib/_stream_duplex.js":483,"./lib/_stream_passthrough.js":484,"./lib/_stream_readable.js":485,"./lib/_stream_transform.js":486,"./lib/_stream_writable.js":487}],493:[function(require,module,exports){module.exports=require('./readable').Transform;},{"./readable":492}],494:[function(require,module,exports){module.exports=require('./lib/_stream_writable.js');},{"./lib/_stream_writable.js":487}],495:[function(require,module,exports){// Copyright Joyent, Inc. and other Node contributors. |
|
|
// |
|
|
// Permission is hereby granted, free of charge, to any person obtaining a |
|
|
// copy of this software and associated documentation files (the |
|
|
// "Software"), to deal in the Software without restriction, including |
|
|
// without limitation the rights to use, copy, modify, merge, publish, |
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit |
|
|
// persons to whom the Software is furnished to do so, subject to the |
|
|
// following conditions: |
|
|
// |
|
|
// The above copyright notice and this permission notice shall be included |
|
|
// in all copies or substantial portions of the Software. |
|
|
// |
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
|
'use strict';/*<replacement>*/var Buffer=require('safe-buffer').Buffer;/*</replacement>*/var isEncoding=Buffer.isEncoding||function(encoding){encoding=''+encoding;switch(encoding&&encoding.toLowerCase()){case'hex':case'utf8':case'utf-8':case'ascii':case'binary':case'base64':case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':case'raw':return true;default:return false;}};function _normalizeEncoding(enc){if(!enc)return'utf8';var retried;while(true){switch(enc){case'utf8':case'utf-8':return'utf8';case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return'utf16le';case'latin1':case'binary':return'latin1';case'base64':case'ascii':case'hex':return enc;default:if(retried)return;// undefined |
|
|
enc=(''+enc).toLowerCase();retried=true;}}};// Do not cache `Buffer.isEncoding` when checking encoding names as some |
|
|
// modules monkey-patch it to support additional encodings |
|
|
function normalizeEncoding(enc){var nenc=_normalizeEncoding(enc);if(typeof nenc!=='string'&&(Buffer.isEncoding===isEncoding||!isEncoding(enc)))throw new Error('Unknown encoding: '+enc);return nenc||enc;}// StringDecoder provides an interface for efficiently splitting a series of |
|
|
// buffers into a series of JS strings without breaking apart multi-byte |
|
|
// characters. |
|
|
exports.StringDecoder=StringDecoder;function StringDecoder(encoding){this.encoding=normalizeEncoding(encoding);var nb;switch(this.encoding){case'utf16le':this.text=utf16Text;this.end=utf16End;nb=4;break;case'utf8':this.fillLast=utf8FillLast;nb=4;break;case'base64':this.text=base64Text;this.end=base64End;nb=3;break;default:this.write=simpleWrite;this.end=simpleEnd;return;}this.lastNeed=0;this.lastTotal=0;this.lastChar=Buffer.allocUnsafe(nb);}StringDecoder.prototype.write=function(buf){if(buf.length===0)return'';var r;var i;if(this.lastNeed){r=this.fillLast(buf);if(r===undefined)return'';i=this.lastNeed;this.lastNeed=0;}else{i=0;}if(i<buf.length)return r?r+this.text(buf,i):this.text(buf,i);return r||'';};StringDecoder.prototype.end=utf8End;// Returns only complete characters in a Buffer |
|
|
StringDecoder.prototype.text=utf8Text;// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer |
|
|
StringDecoder.prototype.fillLast=function(buf){if(this.lastNeed<=buf.length){buf.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed);return this.lastChar.toString(this.encoding,0,this.lastTotal);}buf.copy(this.lastChar,this.lastTotal-this.lastNeed,0,buf.length);this.lastNeed-=buf.length;};// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a |
|
|
// continuation byte. If an invalid byte is detected, -2 is returned. |
|
|
function utf8CheckByte(byte){if(byte<=0x7F)return 0;else if(byte>>5===0x06)return 2;else if(byte>>4===0x0E)return 3;else if(byte>>3===0x1E)return 4;return byte>>6===0x02?-1:-2;}// Checks at most 3 bytes at the end of a Buffer in order to detect an |
|
|
// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) |
|
|
// needed to complete the UTF-8 character (if applicable) are returned. |
|
|
function utf8CheckIncomplete(self,buf,i){var j=buf.length-1;if(j<i)return 0;var nb=utf8CheckByte(buf[j]);if(nb>=0){if(nb>0)self.lastNeed=nb-1;return nb;}if(--j<i||nb===-2)return 0;nb=utf8CheckByte(buf[j]);if(nb>=0){if(nb>0)self.lastNeed=nb-2;return nb;}if(--j<i||nb===-2)return 0;nb=utf8CheckByte(buf[j]);if(nb>=0){if(nb>0){if(nb===2)nb=0;else self.lastNeed=nb-3;}return nb;}return 0;}// Validates as many continuation bytes for a multi-byte UTF-8 character as |
|
|
// needed or are available. If we see a non-continuation byte where we expect |
|
|
// one, we "replace" the validated continuation bytes we've seen so far with |
|
|
// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding |
|
|
// behavior. The continuation byte check is included three times in the case |
|
|
// where all of the continuation bytes for a character exist in the same buffer. |
|
|
// It is also done this way as a slight performance increase instead of using a |
|
|
// loop. |
|
|
function utf8CheckExtraBytes(self,buf,p){if((buf[0]&0xC0)!==0x80){self.lastNeed=0;return"\uFFFD";}if(self.lastNeed>1&&buf.length>1){if((buf[1]&0xC0)!==0x80){self.lastNeed=1;return"\uFFFD";}if(self.lastNeed>2&&buf.length>2){if((buf[2]&0xC0)!==0x80){self.lastNeed=2;return"\uFFFD";}}}}// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. |
|
|
function utf8FillLast(buf){var p=this.lastTotal-this.lastNeed;var r=utf8CheckExtraBytes(this,buf,p);if(r!==undefined)return r;if(this.lastNeed<=buf.length){buf.copy(this.lastChar,p,0,this.lastNeed);return this.lastChar.toString(this.encoding,0,this.lastTotal);}buf.copy(this.lastChar,p,0,buf.length);this.lastNeed-=buf.length;}// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a |
|
|
// partial character, the character's bytes are buffered until the required |
|
|
// number of bytes are available. |
|
|
function utf8Text(buf,i){var total=utf8CheckIncomplete(this,buf,i);if(!this.lastNeed)return buf.toString('utf8',i);this.lastTotal=total;var end=buf.length-(total-this.lastNeed);buf.copy(this.lastChar,0,end);return buf.toString('utf8',i,end);}// For UTF-8, a replacement character is added when ending on a partial |
|
|
// character. |
|
|
function utf8End(buf){var r=buf&&buf.length?this.write(buf):'';if(this.lastNeed)return r+"\uFFFD";return r;}// UTF-16LE typically needs two bytes per character, but even if we have an even |
|
|
// number of bytes available, we need to check if we end on a leading/high |
|
|
// surrogate. In that case, we need to wait for the next two bytes in order to |
|
|
// decode the last character properly. |
|
|
function utf16Text(buf,i){if((buf.length-i)%2===0){var r=buf.toString('utf16le',i);if(r){var c=r.charCodeAt(r.length-1);if(c>=0xD800&&c<=0xDBFF){this.lastNeed=2;this.lastTotal=4;this.lastChar[0]=buf[buf.length-2];this.lastChar[1]=buf[buf.length-1];return r.slice(0,-1);}}return r;}this.lastNeed=1;this.lastTotal=2;this.lastChar[0]=buf[buf.length-1];return buf.toString('utf16le',i,buf.length-1);}// For UTF-16LE we do not explicitly append special replacement characters if we |
|
|
// end on a partial character, we simply let v8 handle that. |
|
|
function utf16End(buf){var r=buf&&buf.length?this.write(buf):'';if(this.lastNeed){var end=this.lastTotal-this.lastNeed;return r+this.lastChar.toString('utf16le',0,end);}return r;}function base64Text(buf,i){var n=(buf.length-i)%3;if(n===0)return buf.toString('base64',i);this.lastNeed=3-n;this.lastTotal=3;if(n===1){this.lastChar[0]=buf[buf.length-1];}else{this.lastChar[0]=buf[buf.length-2];this.lastChar[1]=buf[buf.length-1];}return buf.toString('base64',i,buf.length-n);}function base64End(buf){var r=buf&&buf.length?this.write(buf):'';if(this.lastNeed)return r+this.lastChar.toString('base64',0,3-this.lastNeed);return r;}// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) |
|
|
function simpleWrite(buf){return buf.toString(this.encoding);}function simpleEnd(buf){return buf&&buf.length?this.write(buf):'';}},{"safe-buffer":470}],496:[function(require,module,exports){(function(setImmediate,clearImmediate){var nextTick=require('process/browser.js').nextTick;var apply=Function.prototype.apply;var slice=Array.prototype.slice;var immediateIds={};var nextImmediateId=0;// DOM APIs, for completeness |
|
|
exports.setTimeout=function(){return new Timeout(apply.call(setTimeout,window,arguments),clearTimeout);};exports.setInterval=function(){return new Timeout(apply.call(setInterval,window,arguments),clearInterval);};exports.clearTimeout=exports.clearInterval=function(timeout){timeout.close();};function Timeout(id,clearFn){this._id=id;this._clearFn=clearFn;}Timeout.prototype.unref=Timeout.prototype.ref=function(){};Timeout.prototype.close=function(){this._clearFn.call(window,this._id);};// Does not start the time, just sets up the members needed. |
|
|
exports.enroll=function(item,msecs){clearTimeout(item._idleTimeoutId);item._idleTimeout=msecs;};exports.unenroll=function(item){clearTimeout(item._idleTimeoutId);item._idleTimeout=-1;};exports._unrefActive=exports.active=function(item){clearTimeout(item._idleTimeoutId);var msecs=item._idleTimeout;if(msecs>=0){item._idleTimeoutId=setTimeout(function onTimeout(){if(item._onTimeout)item._onTimeout();},msecs);}};// That's not how node.js implements it but the exposed api is the same. |
|
|
exports.setImmediate=typeof setImmediate==="function"?setImmediate:function(fn){var id=nextImmediateId++;var args=arguments.length<2?false:slice.call(arguments,1);immediateIds[id]=true;nextTick(function onNextTick(){if(immediateIds[id]){// fn.call() is faster so we optimize for the common use-case |
|
|
// @see http://jsperf.com/call-apply-segu |
|
|
if(args){fn.apply(null,args);}else{fn.call(null);}// Prevent ids from leaking |
|
|
exports.clearImmediate(id);}});return id;};exports.clearImmediate=typeof clearImmediate==="function"?clearImmediate:function(id){delete immediateIds[id];};}).call(this,require("timers").setImmediate,require("timers").clearImmediate);},{"process/browser.js":443,"timers":496}],497:[function(require,module,exports){(function(global){/** |
|
|
* Module exports. |
|
|
*/module.exports=deprecate;/** |
|
|
* Mark that a method should not be used. |
|
|
* Returns a modified function which warns once by default. |
|
|
* |
|
|
* If `localStorage.noDeprecation = true` is set, then it is a no-op. |
|
|
* |
|
|
* If `localStorage.throwDeprecation = true` is set, then deprecated functions |
|
|
* will throw an Error when invoked. |
|
|
* |
|
|
* If `localStorage.traceDeprecation = true` is set, then deprecated functions |
|
|
* will invoke `console.trace()` instead of `console.error()`. |
|
|
* |
|
|
* @param {Function} fn - the function to deprecate |
|
|
* @param {String} msg - the string to print to the console when `fn` is invoked |
|
|
* @returns {Function} a new "deprecated" version of `fn` |
|
|
* @api public |
|
|
*/function deprecate(fn,msg){if(config('noDeprecation')){return fn;}var warned=false;function deprecated(){if(!warned){if(config('throwDeprecation')){throw new Error(msg);}else if(config('traceDeprecation')){console.trace(msg);}else{console.warn(msg);}warned=true;}return fn.apply(this,arguments);}return deprecated;}/** |
|
|
* Checks `localStorage` for boolean values for the given `name`. |
|
|
* |
|
|
* @param {String} name |
|
|
* @returns {Boolean} |
|
|
* @api private |
|
|
*/function config(name){// accessing global.localStorage can trigger a DOMException in sandboxed iframes |
|
|
try{if(!global.localStorage)return false;}catch(_){return false;}var val=global.localStorage[name];if(null==val)return false;return String(val).toLowerCase()==='true';}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{}],498:[function(require,module,exports){if(typeof Object.create==='function'){// implementation from standard node.js 'util' module |
|
|
module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:false,writable:true,configurable:true}});};}else{// old school shim for old browsers |
|
|
module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;var TempCtor=function TempCtor(){};TempCtor.prototype=superCtor.prototype;ctor.prototype=new TempCtor();ctor.prototype.constructor=ctor;};}},{}],499:[function(require,module,exports){module.exports=function isBuffer(arg){return arg&&_typeof2(arg)==='object'&&typeof arg.copy==='function'&&typeof arg.fill==='function'&&typeof arg.readUInt8==='function';};},{}],500:[function(require,module,exports){(function(process,global){// Copyright Joyent, Inc. and other Node contributors. |
|
|
// |
|
|
// Permission is hereby granted, free of charge, to any person obtaining a |
|
|
// copy of this software and associated documentation files (the |
|
|
// "Software"), to deal in the Software without restriction, including |
|
|
// without limitation the rights to use, copy, modify, merge, publish, |
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit |
|
|
// persons to whom the Software is furnished to do so, subject to the |
|
|
// following conditions: |
|
|
// |
|
|
// The above copyright notice and this permission notice shall be included |
|
|
// in all copies or substantial portions of the Software. |
|
|
// |
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
|
var formatRegExp=/%[sdj%]/g;exports.format=function(f){if(!isString(f)){var objects=[];for(var i=0;i<arguments.length;i++){objects.push(inspect(arguments[i]));}return objects.join(' ');}var i=1;var args=arguments;var len=args.length;var str=String(f).replace(formatRegExp,function(x){if(x==='%%')return'%';if(i>=len)return x;switch(x){case'%s':return String(args[i++]);case'%d':return Number(args[i++]);case'%j':try{return JSON.stringify(args[i++]);}catch(_){return'[Circular]';}default:return x;}});for(var x=args[i];i<len;x=args[++i]){if(isNull(x)||!isObject(x)){str+=' '+x;}else{str+=' '+inspect(x);}}return str;};// Mark that a method should not be used. |
|
|
// Returns a modified function which warns once by default. |
|
|
// If --no-deprecation is set, then it is a no-op. |
|
|
exports.deprecate=function(fn,msg){// Allow for deprecating things in the process of starting up. |
|
|
if(isUndefined(global.process)){return function(){return exports.deprecate(fn,msg).apply(this,arguments);};}if(process.noDeprecation===true){return fn;}var warned=false;function deprecated(){if(!warned){if(process.throwDeprecation){throw new Error(msg);}else if(process.traceDeprecation){console.trace(msg);}else{console.error(msg);}warned=true;}return fn.apply(this,arguments);}return deprecated;};var debugs={};var debugEnviron;exports.debuglog=function(set){if(isUndefined(debugEnviron))debugEnviron=process.env.NODE_DEBUG||'';set=set.toUpperCase();if(!debugs[set]){if(new RegExp('\\b'+set+'\\b','i').test(debugEnviron)){var pid=process.pid;debugs[set]=function(){var msg=exports.format.apply(exports,arguments);console.error('%s %d: %s',set,pid,msg);};}else{debugs[set]=function(){};}}return debugs[set];};/** |
|
|
* Echos the value of a value. Trys to print the value out |
|
|
* in the best way possible given the different types. |
|
|
* |
|
|
* @param {Object} obj The object to print out. |
|
|
* @param {Object} opts Optional options object that alters the output. |
|
|
*/ /* legacy: obj, showHidden, depth, colors*/function inspect(obj,opts){// default options |
|
|
var ctx={seen:[],stylize:stylizeNoColor};// legacy... |
|
|
if(arguments.length>=3)ctx.depth=arguments[2];if(arguments.length>=4)ctx.colors=arguments[3];if(isBoolean(opts)){// legacy... |
|
|
ctx.showHidden=opts;}else if(opts){// got an "options" object |
|
|
exports._extend(ctx,opts);}// set default options |
|
|
if(isUndefined(ctx.showHidden))ctx.showHidden=false;if(isUndefined(ctx.depth))ctx.depth=2;if(isUndefined(ctx.colors))ctx.colors=false;if(isUndefined(ctx.customInspect))ctx.customInspect=true;if(ctx.colors)ctx.stylize=stylizeWithColor;return formatValue(ctx,obj,ctx.depth);}exports.inspect=inspect;// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics |
|
|
inspect.colors={'bold':[1,22],'italic':[3,23],'underline':[4,24],'inverse':[7,27],'white':[37,39],'grey':[90,39],'black':[30,39],'blue':[34,39],'cyan':[36,39],'green':[32,39],'magenta':[35,39],'red':[31,39],'yellow':[33,39]};// Don't use 'blue' not visible on cmd.exe |
|
|
inspect.styles={'special':'cyan','number':'yellow','boolean':'yellow','undefined':'grey','null':'bold','string':'green','date':'magenta',// "name": intentionally not styling |
|
|
'regexp':'red'};function stylizeWithColor(str,styleType){var style=inspect.styles[styleType];if(style){return"\x1B["+inspect.colors[style][0]+'m'+str+"\x1B["+inspect.colors[style][1]+'m';}else{return str;}}function stylizeNoColor(str,styleType){return str;}function arrayToHash(array){var hash={};array.forEach(function(val,idx){hash[val]=true;});return hash;}function formatValue(ctx,value,recurseTimes){// Provide a hook for user-specified inspect functions. |
|
|
// Check that value is an object with an inspect function on it |
|
|
if(ctx.customInspect&&value&&isFunction(value.inspect)&&// Filter out the util module, it's inspect function is special |
|
|
value.inspect!==exports.inspect&&// Also filter out any prototype objects using the circular check. |
|
|
!(value.constructor&&value.constructor.prototype===value)){var ret=value.inspect(recurseTimes,ctx);if(!isString(ret)){ret=formatValue(ctx,ret,recurseTimes);}return ret;}// Primitive types cannot have properties |
|
|
var primitive=formatPrimitive(ctx,value);if(primitive){return primitive;}// Look up the keys of the object. |
|
|
var keys=Object.keys(value);var visibleKeys=arrayToHash(keys);if(ctx.showHidden){keys=Object.getOwnPropertyNames(value);}// IE doesn't make error fields non-enumerable |
|
|
// http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx |
|
|
if(isError(value)&&(keys.indexOf('message')>=0||keys.indexOf('description')>=0)){return formatError(value);}// Some type of object without properties can be shortcutted. |
|
|
if(keys.length===0){if(isFunction(value)){var name=value.name?': '+value.name:'';return ctx.stylize('[Function'+name+']','special');}if(isRegExp(value)){return ctx.stylize(RegExp.prototype.toString.call(value),'regexp');}if(isDate(value)){return ctx.stylize(Date.prototype.toString.call(value),'date');}if(isError(value)){return formatError(value);}}var base='',array=false,braces=['{','}'];// Make Array say that they are Array |
|
|
if(isArray(value)){array=true;braces=['[',']'];}// Make functions say that they are functions |
|
|
if(isFunction(value)){var n=value.name?': '+value.name:'';base=' [Function'+n+']';}// Make RegExps say that they are RegExps |
|
|
if(isRegExp(value)){base=' '+RegExp.prototype.toString.call(value);}// Make dates with properties first say the date |
|
|
if(isDate(value)){base=' '+Date.prototype.toUTCString.call(value);}// Make error with message first say the error |
|
|
if(isError(value)){base=' '+formatError(value);}if(keys.length===0&&(!array||value.length==0)){return braces[0]+base+braces[1];}if(recurseTimes<0){if(isRegExp(value)){return ctx.stylize(RegExp.prototype.toString.call(value),'regexp');}else{return ctx.stylize('[Object]','special');}}ctx.seen.push(value);var output;if(array){output=formatArray(ctx,value,recurseTimes,visibleKeys,keys);}else{output=keys.map(function(key){return formatProperty(ctx,value,recurseTimes,visibleKeys,key,array);});}ctx.seen.pop();return reduceToSingleString(output,base,braces);}function formatPrimitive(ctx,value){if(isUndefined(value))return ctx.stylize('undefined','undefined');if(isString(value)){var simple='\''+JSON.stringify(value).replace(/^"|"$/g,'').replace(/'/g,"\\'").replace(/\\"/g,'"')+'\'';return ctx.stylize(simple,'string');}if(isNumber(value))return ctx.stylize(''+value,'number');if(isBoolean(value))return ctx.stylize(''+value,'boolean');// For some reason typeof null is "object", so special case here. |
|
|
if(isNull(value))return ctx.stylize('null','null');}function formatError(value){return'['+Error.prototype.toString.call(value)+']';}function formatArray(ctx,value,recurseTimes,visibleKeys,keys){var output=[];for(var i=0,l=value.length;i<l;++i){if(hasOwnProperty(value,String(i))){output.push(formatProperty(ctx,value,recurseTimes,visibleKeys,String(i),true));}else{output.push('');}}keys.forEach(function(key){if(!key.match(/^\d+$/)){output.push(formatProperty(ctx,value,recurseTimes,visibleKeys,key,true));}});return output;}function formatProperty(ctx,value,recurseTimes,visibleKeys,key,array){var name,str,desc;desc=Object.getOwnPropertyDescriptor(value,key)||{value:value[key]};if(desc.get){if(desc.set){str=ctx.stylize('[Getter/Setter]','special');}else{str=ctx.stylize('[Getter]','special');}}else{if(desc.set){str=ctx.stylize('[Setter]','special');}}if(!hasOwnProperty(visibleKeys,key)){name='['+key+']';}if(!str){if(ctx.seen.indexOf(desc.value)<0){if(isNull(recurseTimes)){str=formatValue(ctx,desc.value,null);}else{str=formatValue(ctx,desc.value,recurseTimes-1);}if(str.indexOf('\n')>-1){if(array){str=str.split('\n').map(function(line){return' '+line;}).join('\n').substr(2);}else{str='\n'+str.split('\n').map(function(line){return' '+line;}).join('\n');}}}else{str=ctx.stylize('[Circular]','special');}}if(isUndefined(name)){if(array&&key.match(/^\d+$/)){return str;}name=JSON.stringify(''+key);if(name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)){name=name.substr(1,name.length-2);name=ctx.stylize(name,'name');}else{name=name.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'");name=ctx.stylize(name,'string');}}return name+': '+str;}function reduceToSingleString(output,base,braces){var numLinesEst=0;var length=output.reduce(function(prev,cur){numLinesEst++;if(cur.indexOf('\n')>=0)numLinesEst++;return prev+cur.replace(/\u001b\[\d\d?m/g,'').length+1;},0);if(length>60){return braces[0]+(base===''?'':base+'\n ')+' '+output.join(',\n ')+' '+braces[1];}return braces[0]+base+' '+output.join(', ')+' '+braces[1];}// NOTE: These type checking functions intentionally don't use `instanceof` |
|
|
// because it is fragile and can be easily faked with `Object.create()`. |
|
|
function isArray(ar){return Array.isArray(ar);}exports.isArray=isArray;function isBoolean(arg){return typeof arg==='boolean';}exports.isBoolean=isBoolean;function isNull(arg){return arg===null;}exports.isNull=isNull;function isNullOrUndefined(arg){return arg==null;}exports.isNullOrUndefined=isNullOrUndefined;function isNumber(arg){return typeof arg==='number';}exports.isNumber=isNumber;function isString(arg){return typeof arg==='string';}exports.isString=isString;function isSymbol(arg){return _typeof2(arg)==='symbol';}exports.isSymbol=isSymbol;function isUndefined(arg){return arg===void 0;}exports.isUndefined=isUndefined;function isRegExp(re){return isObject(re)&&objectToString(re)==='[object RegExp]';}exports.isRegExp=isRegExp;function isObject(arg){return _typeof2(arg)==='object'&&arg!==null;}exports.isObject=isObject;function isDate(d){return isObject(d)&&objectToString(d)==='[object Date]';}exports.isDate=isDate;function isError(e){return isObject(e)&&(objectToString(e)==='[object Error]'||e instanceof Error);}exports.isError=isError;function isFunction(arg){return typeof arg==='function';}exports.isFunction=isFunction;function isPrimitive(arg){return arg===null||typeof arg==='boolean'||typeof arg==='number'||typeof arg==='string'||_typeof2(arg)==='symbol'||// ES6 symbol |
|
|
typeof arg==='undefined';}exports.isPrimitive=isPrimitive;exports.isBuffer=require('./support/isBuffer');function objectToString(o){return Object.prototype.toString.call(o);}function pad(n){return n<10?'0'+n.toString(10):n.toString(10);}var months=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];// 26 Feb 16:19:34 |
|
|
function timestamp(){var d=new Date();var time=[pad(d.getHours()),pad(d.getMinutes()),pad(d.getSeconds())].join(':');return[d.getDate(),months[d.getMonth()],time].join(' ');}// log is just a thin wrapper to console.log that prepends a timestamp |
|
|
exports.log=function(){console.log('%s - %s',timestamp(),exports.format.apply(exports,arguments));};/** |
|
|
* Inherit the prototype methods from one constructor into another. |
|
|
* |
|
|
* The Function.prototype.inherits from lang.js rewritten as a standalone |
|
|
* function (not on Function.prototype). NOTE: If this file is to be loaded |
|
|
* during bootstrapping this function needs to be rewritten using some native |
|
|
* functions as prototype setup using normal JavaScript does not work as |
|
|
* expected during bootstrapping (see mirror.js in r114903). |
|
|
* |
|
|
* @param {function} ctor Constructor function which needs to inherit the |
|
|
* prototype. |
|
|
* @param {function} superCtor Constructor function to inherit prototype from. |
|
|
*/exports.inherits=require('inherits');exports._extend=function(origin,add){// Don't do anything if add isn't an object |
|
|
if(!add||!isObject(add))return origin;var keys=Object.keys(add);var i=keys.length;while(i--){origin[keys[i]]=add[keys[i]];}return origin;};function hasOwnProperty(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop);}}).call(this,require('_process'),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{"./support/isBuffer":499,"_process":443,"inherits":498}],501:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;/** |
|
|
* Convert array of 16 byte values to UUID string format of the form: |
|
|
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX |
|
|
*/var byteToHex=[];for(var i=0;i<256;++i){byteToHex[i]=(i+0x100).toString(16).substr(1);}function bytesToUuid(buf,offset){var i=offset||0;var bth=byteToHex;// join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4 |
|
|
return[bth[buf[i++]],bth[buf[i++]],bth[buf[i++]],bth[buf[i++]],'-',bth[buf[i++]],bth[buf[i++]],'-',bth[buf[i++]],bth[buf[i++]],'-',bth[buf[i++]],bth[buf[i++]],'-',bth[buf[i++]],bth[buf[i++]],bth[buf[i++]],bth[buf[i++]],bth[buf[i++]],bth[buf[i++]]].join('');}var _default=bytesToUuid;exports.default=_default;module.exports=exports.default;},{}],502:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"v1",{enumerable:true,get:function get(){return _v.default;}});Object.defineProperty(exports,"v3",{enumerable:true,get:function get(){return _v2.default;}});Object.defineProperty(exports,"v4",{enumerable:true,get:function get(){return _v3.default;}});Object.defineProperty(exports,"v5",{enumerable:true,get:function get(){return _v4.default;}});var _v=_interopRequireDefault(require("./v1.js"));var _v2=_interopRequireDefault(require("./v3.js"));var _v3=_interopRequireDefault(require("./v4.js"));var _v4=_interopRequireDefault(require("./v5.js"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}},{"./v1.js":506,"./v3.js":507,"./v4.js":509,"./v5.js":510}],503:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;/* |
|
|
* Browser-compatible JavaScript MD5 |
|
|
* |
|
|
* Modification of JavaScript MD5 |
|
|
* https://github.com/blueimp/JavaScript-MD5 |
|
|
* |
|
|
* Copyright 2011, Sebastian Tschan |
|
|
* https://blueimp.net |
|
|
* |
|
|
* Licensed under the MIT license: |
|
|
* https://opensource.org/licenses/MIT |
|
|
* |
|
|
* Based on |
|
|
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message |
|
|
* Digest Algorithm, as defined in RFC 1321. |
|
|
* Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 |
|
|
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet |
|
|
* Distributed under the BSD License |
|
|
* See http://pajhome.org.uk/crypt/md5 for more info. |
|
|
*/function md5(bytes){if(typeof bytes=='string'){var msg=unescape(encodeURIComponent(bytes));// UTF8 escape |
|
|
bytes=new Array(msg.length);for(var i=0;i<msg.length;i++){bytes[i]=msg.charCodeAt(i);}}return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes),bytes.length*8));}/* |
|
|
* Convert an array of little-endian words to an array of bytes |
|
|
*/function md5ToHexEncodedArray(input){var i;var x;var output=[];var length32=input.length*32;var hexTab='0123456789abcdef';var hex;for(i=0;i<length32;i+=8){x=input[i>>5]>>>i%32&0xff;hex=parseInt(hexTab.charAt(x>>>4&0x0f)+hexTab.charAt(x&0x0f),16);output.push(hex);}return output;}/* |
|
|
* Calculate the MD5 of an array of little-endian words, and a bit length. |
|
|
*/function wordsToMd5(x,len){/* append padding */x[len>>5]|=0x80<<len%32;x[(len+64>>>9<<4)+14]=len;var i;var olda;var oldb;var oldc;var oldd;var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;for(i=0;i<x.length;i+=16){olda=a;oldb=b;oldc=c;oldd=d;a=md5ff(a,b,c,d,x[i],7,-680876936);d=md5ff(d,a,b,c,x[i+1],12,-389564586);c=md5ff(c,d,a,b,x[i+2],17,606105819);b=md5ff(b,c,d,a,x[i+3],22,-1044525330);a=md5ff(a,b,c,d,x[i+4],7,-176418897);d=md5ff(d,a,b,c,x[i+5],12,1200080426);c=md5ff(c,d,a,b,x[i+6],17,-1473231341);b=md5ff(b,c,d,a,x[i+7],22,-45705983);a=md5ff(a,b,c,d,x[i+8],7,1770035416);d=md5ff(d,a,b,c,x[i+9],12,-1958414417);c=md5ff(c,d,a,b,x[i+10],17,-42063);b=md5ff(b,c,d,a,x[i+11],22,-1990404162);a=md5ff(a,b,c,d,x[i+12],7,1804603682);d=md5ff(d,a,b,c,x[i+13],12,-40341101);c=md5ff(c,d,a,b,x[i+14],17,-1502002290);b=md5ff(b,c,d,a,x[i+15],22,1236535329);a=md5gg(a,b,c,d,x[i+1],5,-165796510);d=md5gg(d,a,b,c,x[i+6],9,-1069501632);c=md5gg(c,d,a,b,x[i+11],14,643717713);b=md5gg(b,c,d,a,x[i],20,-373897302);a=md5gg(a,b,c,d,x[i+5],5,-701558691);d=md5gg(d,a,b,c,x[i+10],9,38016083);c=md5gg(c,d,a,b,x[i+15],14,-660478335);b=md5gg(b,c,d,a,x[i+4],20,-405537848);a=md5gg(a,b,c,d,x[i+9],5,568446438);d=md5gg(d,a,b,c,x[i+14],9,-1019803690);c=md5gg(c,d,a,b,x[i+3],14,-187363961);b=md5gg(b,c,d,a,x[i+8],20,1163531501);a=md5gg(a,b,c,d,x[i+13],5,-1444681467);d=md5gg(d,a,b,c,x[i+2],9,-51403784);c=md5gg(c,d,a,b,x[i+7],14,1735328473);b=md5gg(b,c,d,a,x[i+12],20,-1926607734);a=md5hh(a,b,c,d,x[i+5],4,-378558);d=md5hh(d,a,b,c,x[i+8],11,-2022574463);c=md5hh(c,d,a,b,x[i+11],16,1839030562);b=md5hh(b,c,d,a,x[i+14],23,-35309556);a=md5hh(a,b,c,d,x[i+1],4,-1530992060);d=md5hh(d,a,b,c,x[i+4],11,1272893353);c=md5hh(c,d,a,b,x[i+7],16,-155497632);b=md5hh(b,c,d,a,x[i+10],23,-1094730640);a=md5hh(a,b,c,d,x[i+13],4,681279174);d=md5hh(d,a,b,c,x[i],11,-358537222);c=md5hh(c,d,a,b,x[i+3],16,-722521979);b=md5hh(b,c,d,a,x[i+6],23,76029189);a=md5hh(a,b,c,d,x[i+9],4,-640364487);d=md5hh(d,a,b,c,x[i+12],11,-421815835);c=md5hh(c,d,a,b,x[i+15],16,530742520);b=md5hh(b,c,d,a,x[i+2],23,-995338651);a=md5ii(a,b,c,d,x[i],6,-198630844);d=md5ii(d,a,b,c,x[i+7],10,1126891415);c=md5ii(c,d,a,b,x[i+14],15,-1416354905);b=md5ii(b,c,d,a,x[i+5],21,-57434055);a=md5ii(a,b,c,d,x[i+12],6,1700485571);d=md5ii(d,a,b,c,x[i+3],10,-1894986606);c=md5ii(c,d,a,b,x[i+10],15,-1051523);b=md5ii(b,c,d,a,x[i+1],21,-2054922799);a=md5ii(a,b,c,d,x[i+8],6,1873313359);d=md5ii(d,a,b,c,x[i+15],10,-30611744);c=md5ii(c,d,a,b,x[i+6],15,-1560198380);b=md5ii(b,c,d,a,x[i+13],21,1309151649);a=md5ii(a,b,c,d,x[i+4],6,-145523070);d=md5ii(d,a,b,c,x[i+11],10,-1120210379);c=md5ii(c,d,a,b,x[i+2],15,718787259);b=md5ii(b,c,d,a,x[i+9],21,-343485551);a=safeAdd(a,olda);b=safeAdd(b,oldb);c=safeAdd(c,oldc);d=safeAdd(d,oldd);}return[a,b,c,d];}/* |
|
|
* Convert an array bytes to an array of little-endian words |
|
|
* Characters >255 have their high-byte silently ignored. |
|
|
*/function bytesToWords(input){var i;var output=[];output[(input.length>>2)-1]=undefined;for(i=0;i<output.length;i+=1){output[i]=0;}var length8=input.length*8;for(i=0;i<length8;i+=8){output[i>>5]|=(input[i/8]&0xff)<<i%32;}return output;}/* |
|
|
* Add integers, wrapping at 2^32. This uses 16-bit operations internally |
|
|
* to work around bugs in some JS interpreters. |
|
|
*/function safeAdd(x,y){var lsw=(x&0xffff)+(y&0xffff);var msw=(x>>16)+(y>>16)+(lsw>>16);return msw<<16|lsw&0xffff;}/* |
|
|
* Bitwise rotate a 32-bit number to the left. |
|
|
*/function bitRotateLeft(num,cnt){return num<<cnt|num>>>32-cnt;}/* |
|
|
* These functions implement the four basic operations the algorithm uses. |
|
|
*/function md5cmn(q,a,b,x,s,t){return safeAdd(bitRotateLeft(safeAdd(safeAdd(a,q),safeAdd(x,t)),s),b);}function md5ff(a,b,c,d,x,s,t){return md5cmn(b&c|~b&d,a,b,x,s,t);}function md5gg(a,b,c,d,x,s,t){return md5cmn(b&d|c&~d,a,b,x,s,t);}function md5hh(a,b,c,d,x,s,t){return md5cmn(b^c^d,a,b,x,s,t);}function md5ii(a,b,c,d,x,s,t){return md5cmn(c^(b|~d),a,b,x,s,t);}var _default=md5;exports.default=_default;module.exports=exports.default;},{}],504:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=rng;// Unique ID creation requires a high quality random # generator. In the browser we therefore |
|
|
// require the crypto API and do not support built-in fallback to lower quality random number |
|
|
// generators (like Math.random()). |
|
|
// getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, |
|
|
// find the complete implementation of crypto (msCrypto) on IE11. |
|
|
var getRandomValues=typeof crypto!='undefined'&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto!='undefined'&&typeof msCrypto.getRandomValues=='function'&&msCrypto.getRandomValues.bind(msCrypto);var rnds8=new Uint8Array(16);// eslint-disable-line no-undef |
|
|
function rng(){if(!getRandomValues){throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');}return getRandomValues(rnds8);}module.exports=exports.default;},{}],505:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;// Adapted from Chris Veness' SHA1 code at |
|
|
// http://www.movable-type.co.uk/scripts/sha1.html |
|
|
function f(s,x,y,z){switch(s){case 0:return x&y^~x&z;case 1:return x^y^z;case 2:return x&y^x&z^y&z;case 3:return x^y^z;}}function ROTL(x,n){return x<<n|x>>>32-n;}function sha1(bytes){var K=[0x5a827999,0x6ed9eba1,0x8f1bbcdc,0xca62c1d6];var H=[0x67452301,0xefcdab89,0x98badcfe,0x10325476,0xc3d2e1f0];if(typeof bytes=='string'){var msg=unescape(encodeURIComponent(bytes));// UTF8 escape |
|
|
bytes=new Array(msg.length);for(var i=0;i<msg.length;i++){bytes[i]=msg.charCodeAt(i);}}bytes.push(0x80);var l=bytes.length/4+2;var N=Math.ceil(l/16);var M=new Array(N);for(var i=0;i<N;i++){M[i]=new Array(16);for(var j=0;j<16;j++){M[i][j]=bytes[i*64+j*4]<<24|bytes[i*64+j*4+1]<<16|bytes[i*64+j*4+2]<<8|bytes[i*64+j*4+3];}}M[N-1][14]=(bytes.length-1)*8/Math.pow(2,32);M[N-1][14]=Math.floor(M[N-1][14]);M[N-1][15]=(bytes.length-1)*8&0xffffffff;for(var i=0;i<N;i++){var W=new Array(80);for(var t=0;t<16;t++){W[t]=M[i][t];}for(var t=16;t<80;t++){W[t]=ROTL(W[t-3]^W[t-8]^W[t-14]^W[t-16],1);}var a=H[0];var b=H[1];var c=H[2];var d=H[3];var e=H[4];for(var t=0;t<80;t++){var s=Math.floor(t/20);var T=ROTL(a,5)+f(s,b,c,d)+e+K[s]+W[t]>>>0;e=d;d=c;c=ROTL(b,30)>>>0;b=a;a=T;}H[0]=H[0]+a>>>0;H[1]=H[1]+b>>>0;H[2]=H[2]+c>>>0;H[3]=H[3]+d>>>0;H[4]=H[4]+e>>>0;}return[H[0]>>24&0xff,H[0]>>16&0xff,H[0]>>8&0xff,H[0]&0xff,H[1]>>24&0xff,H[1]>>16&0xff,H[1]>>8&0xff,H[1]&0xff,H[2]>>24&0xff,H[2]>>16&0xff,H[2]>>8&0xff,H[2]&0xff,H[3]>>24&0xff,H[3]>>16&0xff,H[3]>>8&0xff,H[3]&0xff,H[4]>>24&0xff,H[4]>>16&0xff,H[4]>>8&0xff,H[4]&0xff];}var _default=sha1;exports.default=_default;module.exports=exports.default;},{}],506:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _rng=_interopRequireDefault(require("./rng.js"));var _bytesToUuid=_interopRequireDefault(require("./bytesToUuid.js"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}// **`v1()` - Generate time-based UUID** |
|
|
// |
|
|
// Inspired by https://github.com/LiosK/UUID.js |
|
|
// and http://docs.python.org/library/uuid.html |
|
|
var _nodeId;var _clockseq;// Previous uuid creation time |
|
|
var _lastMSecs=0;var _lastNSecs=0;// See https://github.com/uuidjs/uuid for API details |
|
|
function v1(options,buf,offset){var i=buf&&offset||0;var b=buf||[];options=options||{};var node=options.node||_nodeId;var clockseq=options.clockseq!==undefined?options.clockseq:_clockseq;// node and clockseq need to be initialized to random values if they're not |
|
|
// specified. We do this lazily to minimize issues related to insufficient |
|
|
// system entropy. See #189 |
|
|
if(node==null||clockseq==null){var seedBytes=options.random||(options.rng||_rng.default)();if(node==null){// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) |
|
|
node=_nodeId=[seedBytes[0]|0x01,seedBytes[1],seedBytes[2],seedBytes[3],seedBytes[4],seedBytes[5]];}if(clockseq==null){// Per 4.2.2, randomize (14 bit) clockseq |
|
|
clockseq=_clockseq=(seedBytes[6]<<8|seedBytes[7])&0x3fff;}}// UUID timestamps are 100 nano-second units since the Gregorian epoch, |
|
|
// (1582-10-15 00:00). JSNumbers aren't precise enough for this, so |
|
|
// time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' |
|
|
// (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. |
|
|
var msecs=options.msecs!==undefined?options.msecs:new Date().getTime();// Per 4.2.1.2, use count of uuid's generated during the current clock |
|
|
// cycle to simulate higher resolution clock |
|
|
var nsecs=options.nsecs!==undefined?options.nsecs:_lastNSecs+1;// Time since last uuid creation (in msecs) |
|
|
var dt=msecs-_lastMSecs+(nsecs-_lastNSecs)/10000;// Per 4.2.1.2, Bump clockseq on clock regression |
|
|
if(dt<0&&options.clockseq===undefined){clockseq=clockseq+1&0x3fff;}// Reset nsecs if clock regresses (new clockseq) or we've moved onto a new |
|
|
// time interval |
|
|
if((dt<0||msecs>_lastMSecs)&&options.nsecs===undefined){nsecs=0;}// Per 4.2.1.2 Throw error if too many uuids are requested |
|
|
if(nsecs>=10000){throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");}_lastMSecs=msecs;_lastNSecs=nsecs;_clockseq=clockseq;// Per 4.1.4 - Convert from unix epoch to Gregorian epoch |
|
|
msecs+=12219292800000;// `time_low` |
|
|
var tl=((msecs&0xfffffff)*10000+nsecs)%0x100000000;b[i++]=tl>>>24&0xff;b[i++]=tl>>>16&0xff;b[i++]=tl>>>8&0xff;b[i++]=tl&0xff;// `time_mid` |
|
|
var tmh=msecs/0x100000000*10000&0xfffffff;b[i++]=tmh>>>8&0xff;b[i++]=tmh&0xff;// `time_high_and_version` |
|
|
b[i++]=tmh>>>24&0xf|0x10;// include version |
|
|
b[i++]=tmh>>>16&0xff;// `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) |
|
|
b[i++]=clockseq>>>8|0x80;// `clock_seq_low` |
|
|
b[i++]=clockseq&0xff;// `node` |
|
|
for(var n=0;n<6;++n){b[i+n]=node[n];}return buf?buf:(0,_bytesToUuid.default)(b);}var _default=v1;exports.default=_default;module.exports=exports.default;},{"./bytesToUuid.js":501,"./rng.js":504}],507:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _v=_interopRequireDefault(require("./v35.js"));var _md=_interopRequireDefault(require("./md5.js"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var v3=(0,_v.default)('v3',0x30,_md.default);var _default=v3;exports.default=_default;module.exports=exports.default;},{"./md5.js":503,"./v35.js":508}],508:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=_default;exports.URL=exports.DNS=void 0;var _bytesToUuid=_interopRequireDefault(require("./bytesToUuid.js"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function uuidToBytes(uuid){// Note: We assume we're being passed a valid uuid string |
|
|
var bytes=[];uuid.replace(/[a-fA-F0-9]{2}/g,function(hex){bytes.push(parseInt(hex,16));});return bytes;}function stringToBytes(str){str=unescape(encodeURIComponent(str));// UTF8 escape |
|
|
var bytes=new Array(str.length);for(var i=0;i<str.length;i++){bytes[i]=str.charCodeAt(i);}return bytes;}var DNS='6ba7b810-9dad-11d1-80b4-00c04fd430c8';exports.DNS=DNS;var URL='6ba7b811-9dad-11d1-80b4-00c04fd430c8';exports.URL=URL;function _default(name,version,hashfunc){var generateUUID=function generateUUID(value,namespace,buf,offset){var off=buf&&offset||0;if(typeof value=='string')value=stringToBytes(value);if(typeof namespace=='string')namespace=uuidToBytes(namespace);if(!Array.isArray(value))throw TypeError('value must be an array of bytes');if(!Array.isArray(namespace)||namespace.length!==16)throw TypeError('namespace must be uuid string or an Array of 16 byte values');// Per 4.3 |
|
|
var bytes=hashfunc(namespace.concat(value));bytes[6]=bytes[6]&0x0f|version;bytes[8]=bytes[8]&0x3f|0x80;if(buf){for(var idx=0;idx<16;++idx){buf[off+idx]=bytes[idx];}}return buf||(0,_bytesToUuid.default)(bytes);};// Function#name is not settable on some platforms (#270) |
|
|
try{generateUUID.name=name;}catch(err){}// For CommonJS default export support |
|
|
generateUUID.DNS=DNS;generateUUID.URL=URL;return generateUUID;}},{"./bytesToUuid.js":501}],509:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _rng=_interopRequireDefault(require("./rng.js"));var _bytesToUuid=_interopRequireDefault(require("./bytesToUuid.js"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function v4(options,buf,offset){var i=buf&&offset||0;if(typeof options=='string'){buf=options==='binary'?new Array(16):null;options=null;}options=options||{};var rnds=options.random||(options.rng||_rng.default)();// Per 4.4, set bits for version and `clock_seq_hi_and_reserved` |
|
|
rnds[6]=rnds[6]&0x0f|0x40;rnds[8]=rnds[8]&0x3f|0x80;// Copy bytes to buffer, if provided |
|
|
if(buf){for(var ii=0;ii<16;++ii){buf[i+ii]=rnds[ii];}}return buf||(0,_bytesToUuid.default)(rnds);}var _default=v4;exports.default=_default;module.exports=exports.default;},{"./bytesToUuid.js":501,"./rng.js":504}],510:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _v=_interopRequireDefault(require("./v35.js"));var _sha=_interopRequireDefault(require("./sha1.js"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var v5=(0,_v.default)('v5',0x50,_sha.default);var _default=v5;exports.default=_default;module.exports=exports.default;},{"./sha1.js":505,"./v35.js":508}],511:[function(require,module,exports){var indexOf=function indexOf(xs,item){if(xs.indexOf)return xs.indexOf(item);else for(var i=0;i<xs.length;i++){if(xs[i]===item)return i;}return-1;};var Object_keys=function Object_keys(obj){if(Object.keys)return Object.keys(obj);else{var res=[];for(var key in obj){res.push(key);}return res;}};var forEach=function forEach(xs,fn){if(xs.forEach)return xs.forEach(fn);else for(var i=0;i<xs.length;i++){fn(xs[i],i,xs);}};var defineProp=function(){try{Object.defineProperty({},'_',{});return function(obj,name,value){Object.defineProperty(obj,name,{writable:true,enumerable:false,configurable:true,value:value});};}catch(e){return function(obj,name,value){obj[name]=value;};}}();var globals=['Array','Boolean','Date','Error','EvalError','Function','Infinity','JSON','Math','NaN','Number','Object','RangeError','ReferenceError','RegExp','String','SyntaxError','TypeError','URIError','decodeURI','decodeURIComponent','encodeURI','encodeURIComponent','escape','eval','isFinite','isNaN','parseFloat','parseInt','undefined','unescape'];function Context(){}Context.prototype={};var Script=exports.Script=function NodeScript(code){if(!(this instanceof Script))return new Script(code);this.code=code;};Script.prototype.runInContext=function(context){if(!(context instanceof Context)){throw new TypeError("needs a 'context' argument.");}var iframe=document.createElement('iframe');if(!iframe.style)iframe.style={};iframe.style.display='none';document.body.appendChild(iframe);var win=iframe.contentWindow;var wEval=win.eval,wExecScript=win.execScript;if(!wEval&&wExecScript){// win.eval() magically appears when this is called in IE: |
|
|
wExecScript.call(win,'null');wEval=win.eval;}forEach(Object_keys(context),function(key){win[key]=context[key];});forEach(globals,function(key){if(context[key]){win[key]=context[key];}});var winKeys=Object_keys(win);var res=wEval.call(win,this.code);forEach(Object_keys(win),function(key){// Avoid copying circular objects like `top` and `window` by only |
|
|
// updating existing context properties or new properties in the `win` |
|
|
// that was only introduced after the eval. |
|
|
if(key in context||indexOf(winKeys,key)===-1){context[key]=win[key];}});forEach(globals,function(key){if(!(key in context)){defineProp(context,key,win[key]);}});document.body.removeChild(iframe);return res;};Script.prototype.runInThisContext=function(){return eval(this.code);// maybe... |
|
|
};Script.prototype.runInNewContext=function(context){var ctx=Script.createContext(context);var res=this.runInContext(ctx);if(context){forEach(Object_keys(ctx),function(key){context[key]=ctx[key];});}return res;};forEach(Object_keys(Script.prototype),function(name){exports[name]=Script[name]=function(code){var s=Script(code);return s[name].apply(s,[].slice.call(arguments,1));};});exports.isContext=function(context){return context instanceof Context;};exports.createScript=function(code){return exports.Script(code);};exports.createContext=Script.createContext=function(context){var copy=new Context();if(_typeof2(context)==='object'){forEach(Object_keys(context),function(key){copy[key]=context[key];});}return copy;};},{}],512:[function(require,module,exports){"use strict";/** |
|
|
* Character classes and associated utilities for the 5th edition of XML 1.0. |
|
|
* |
|
|
* @author Louis-Dominique Dubeau |
|
|
* @license MIT |
|
|
* @copyright Louis-Dominique Dubeau |
|
|
*/Object.defineProperty(exports,"__esModule",{value:true});// |
|
|
// Fragments. |
|
|
// |
|
|
exports.CHAR="\t\n\r -\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF";exports.S=" \t\r\n";// tslint:disable-next-line:max-line-length |
|
|
exports.NAME_START_CHAR=":A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\uD800\uDC00-\uDB7F\uDFFF";exports.NAME_CHAR="-"+exports.NAME_START_CHAR+".0-9\xB7\u0300-\u036F\u203F-\u2040";// |
|
|
// Regular expressions. |
|
|
// |
|
|
exports.CHAR_RE=new RegExp("^["+exports.CHAR+"]$","u");exports.S_RE=new RegExp("^["+exports.S+"]+$","u");exports.NAME_START_CHAR_RE=new RegExp("^["+exports.NAME_START_CHAR+"]$","u");exports.NAME_CHAR_RE=new RegExp("^["+exports.NAME_CHAR+"]$","u");exports.NAME_RE=new RegExp("^["+exports.NAME_START_CHAR+"]["+exports.NAME_CHAR+"]*$","u");exports.NMTOKEN_RE=new RegExp("^["+exports.NAME_CHAR+"]+$","u");var TAB=9;var NL=0xA;var CR=0xD;var SPACE=0x20;// |
|
|
// Lists. |
|
|
// |
|
|
/** All characters in the ``S`` production. */exports.S_LIST=[SPACE,NL,CR,TAB];/** |
|
|
* Determines whether a codepoint matches the ``CHAR`` production. |
|
|
* |
|
|
* @param c The code point. |
|
|
* |
|
|
* @returns ``true`` if the codepoint matches ``CHAR``. |
|
|
*/function isChar(c){return c>=SPACE&&c<=0xD7FF||c===NL||c===CR||c===TAB||c>=0xE000&&c<=0xFFFD||c>=0x10000&&c<=0x10FFFF;}exports.isChar=isChar;/** |
|
|
* Determines whether a codepoint matches the ``S`` (space) production. |
|
|
* |
|
|
* @param c The code point. |
|
|
* |
|
|
* @returns ``true`` if the codepoint matches ``S``. |
|
|
*/function isS(c){return c===SPACE||c===NL||c===CR||c===TAB;}exports.isS=isS;/** |
|
|
* Determines whether a codepoint matches the ``NAME_START_CHAR`` production. |
|
|
* |
|
|
* @param c The code point. |
|
|
* |
|
|
* @returns ``true`` if the codepoint matches ``NAME_START_CHAR``. |
|
|
*/function isNameStartChar(c){return c>=0x41&&c<=0x5A||c>=0x61&&c<=0x7A||c===0x3A||c===0x5F||c===0x200C||c===0x200D||c>=0xC0&&c<=0xD6||c>=0xD8&&c<=0xF6||c>=0x00F8&&c<=0x02FF||c>=0x0370&&c<=0x037D||c>=0x037F&&c<=0x1FFF||c>=0x2070&&c<=0x218F||c>=0x2C00&&c<=0x2FEF||c>=0x3001&&c<=0xD7FF||c>=0xF900&&c<=0xFDCF||c>=0xFDF0&&c<=0xFFFD||c>=0x10000&&c<=0xEFFFF;}exports.isNameStartChar=isNameStartChar;/** |
|
|
* Determines whether a codepoint matches the ``NAME_CHAR`` production. |
|
|
* |
|
|
* @param c The code point. |
|
|
* |
|
|
* @returns ``true`` if the codepoint matches ``NAME_CHAR``. |
|
|
*/function isNameChar(c){return isNameStartChar(c)||c>=0x30&&c<=0x39||c===0x2D||c===0x2E||c===0xB7||c>=0x0300&&c<=0x036F||c>=0x203F&&c<=0x2040;}exports.isNameChar=isNameChar;},{}],513:[function(require,module,exports){"use strict";/** |
|
|
* Character classes and associated utilities for the 2nd edition of XML 1.1. |
|
|
* |
|
|
* @author Louis-Dominique Dubeau |
|
|
* @license MIT |
|
|
* @copyright Louis-Dominique Dubeau |
|
|
*/Object.defineProperty(exports,"__esModule",{value:true});// |
|
|
// Fragments. |
|
|
// |
|
|
exports.CHAR="\x01-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF";exports.RESTRICTED_CHAR="\x01-\b\x0B\f\x0E-\x1F\x7F-\x84\x86-\x9F";exports.S=" \t\r\n";// tslint:disable-next-line:max-line-length |
|
|
exports.NAME_START_CHAR=":A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\uD800\uDC00-\uDB7F\uDFFF";exports.NAME_CHAR="-"+exports.NAME_START_CHAR+".0-9\xB7\u0300-\u036F\u203F-\u2040";// |
|
|
// Regular expressions. |
|
|
// |
|
|
exports.CHAR_RE=new RegExp("^["+exports.CHAR+"]$","u");exports.RESTRICTED_CHAR_RE=new RegExp("^["+exports.RESTRICTED_CHAR+"]$","u");exports.S_RE=new RegExp("^["+exports.S+"]+$","u");exports.NAME_START_CHAR_RE=new RegExp("^["+exports.NAME_START_CHAR+"]$","u");exports.NAME_CHAR_RE=new RegExp("^["+exports.NAME_CHAR+"]$","u");exports.NAME_RE=new RegExp("^["+exports.NAME_START_CHAR+"]["+exports.NAME_CHAR+"]*$","u");exports.NMTOKEN_RE=new RegExp("^["+exports.NAME_CHAR+"]+$","u");var TAB=9;var NL=0xA;var CR=0xD;var SPACE=0x20;// |
|
|
// Lists. |
|
|
// |
|
|
/** All characters in the ``S`` production. */exports.S_LIST=[SPACE,NL,CR,TAB];/** |
|
|
* Determines whether a codepoint matches the ``CHAR`` production. |
|
|
* |
|
|
* @param c The code point. |
|
|
* |
|
|
* @returns ``true`` if the codepoint matches ``CHAR``. |
|
|
*/function isChar(c){return c>=0x0001&&c<=0xD7FF||c>=0xE000&&c<=0xFFFD||c>=0x10000&&c<=0x10FFFF;}exports.isChar=isChar;/** |
|
|
* Determines whether a codepoint matches the ``RESTRICTED_CHAR`` production. |
|
|
* |
|
|
* @param c The code point. |
|
|
* |
|
|
* @returns ``true`` if the codepoint matches ``RESTRICTED_CHAR``. |
|
|
*/function isRestrictedChar(c){return c>=0x1&&c<=0x8||c===0xB||c===0xC||c>=0xE&&c<=0x1F||c>=0x7F&&c<=0x84||c>=0x86&&c<=0x9F;}exports.isRestrictedChar=isRestrictedChar;/** |
|
|
* Determines whether a codepoint matches the ``CHAR`` production and does not |
|
|
* match the ``RESTRICTED_CHAR`` production. ``isCharAndNotRestricted(x)`` is |
|
|
* equivalent to ``isChar(x) && !isRestrictedChar(x)``. This function is faster |
|
|
* than running the two-call equivalent. |
|
|
* |
|
|
* @param c The code point. |
|
|
* |
|
|
* @returns ``true`` if the codepoint matches ``CHAR`` and does not match |
|
|
* ``RESTRICTED_CHAR``. |
|
|
*/function isCharAndNotRestricted(c){return c===0x9||c===0xA||c===0xD||c>0x1F&&c<0x7F||c===0x85||c>0x9F&&c<=0xD7FF||c>=0xE000&&c<=0xFFFD||c>=0x10000&&c<=0x10FFFF;}exports.isCharAndNotRestricted=isCharAndNotRestricted;/** |
|
|
* Determines whether a codepoint matches the ``S`` (space) production. |
|
|
* |
|
|
* @param c The code point. |
|
|
* |
|
|
* @returns ``true`` if the codepoint matches ``S``. |
|
|
*/function isS(c){return c===SPACE||c===NL||c===CR||c===TAB;}exports.isS=isS;/** |
|
|
* Determines whether a codepoint matches the ``NAME_START_CHAR`` production. |
|
|
* |
|
|
* @param c The code point. |
|
|
* |
|
|
* @returns ``true`` if the codepoint matches ``NAME_START_CHAR``. |
|
|
*/ // tslint:disable-next-line:cyclomatic-complexity |
|
|
function isNameStartChar(c){return c>=0x41&&c<=0x5A||c>=0x61&&c<=0x7A||c===0x3A||c===0x5F||c===0x200C||c===0x200D||c>=0xC0&&c<=0xD6||c>=0xD8&&c<=0xF6||c>=0x00F8&&c<=0x02FF||c>=0x0370&&c<=0x037D||c>=0x037F&&c<=0x1FFF||c>=0x2070&&c<=0x218F||c>=0x2C00&&c<=0x2FEF||c>=0x3001&&c<=0xD7FF||c>=0xF900&&c<=0xFDCF||c>=0xFDF0&&c<=0xFFFD||c>=0x10000&&c<=0xEFFFF;}exports.isNameStartChar=isNameStartChar;/** |
|
|
* Determines whether a codepoint matches the ``NAME_CHAR`` production. |
|
|
* |
|
|
* @param c The code point. |
|
|
* |
|
|
* @returns ``true`` if the codepoint matches ``NAME_CHAR``. |
|
|
*/function isNameChar(c){return isNameStartChar(c)||c>=0x30&&c<=0x39||c===0x2D||c===0x2E||c===0xB7||c>=0x0300&&c<=0x036F||c>=0x203F&&c<=0x2040;}exports.isNameChar=isNameChar;},{}],514:[function(require,module,exports){"use strict";/** |
|
|
* Character class utilities for XML NS 1.0 edition 3. |
|
|
* |
|
|
* @author Louis-Dominique Dubeau |
|
|
* @license MIT |
|
|
* @copyright Louis-Dominique Dubeau |
|
|
*/Object.defineProperty(exports,"__esModule",{value:true});// |
|
|
// Fragments. |
|
|
// |
|
|
// tslint:disable-next-line:max-line-length |
|
|
exports.NC_NAME_START_CHAR="A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\uD800\uDC00-\uDB7F\uDFFF";exports.NC_NAME_CHAR="-"+exports.NC_NAME_START_CHAR+".0-9\xB7\u0300-\u036F\u203F-\u2040";// |
|
|
// Regular expressions. |
|
|
// |
|
|
exports.NC_NAME_START_CHAR_RE=new RegExp("^["+exports.NC_NAME_START_CHAR+"]$","u");exports.NC_NAME_CHAR_RE=new RegExp("^["+exports.NC_NAME_CHAR+"]$","u");exports.NC_NAME_RE=new RegExp("^["+exports.NC_NAME_START_CHAR+"]["+exports.NC_NAME_CHAR+"]*$","u");/** |
|
|
* Determines whether a codepoint matches [[NC_NAME_START_CHAR]]. |
|
|
* |
|
|
* @param c The code point. |
|
|
* |
|
|
* @returns ``true`` if the codepoint matches. |
|
|
*/ // tslint:disable-next-line:cyclomatic-complexity |
|
|
function isNCNameStartChar(c){return c>=0x41&&c<=0x5A||c===0x5F||c>=0x61&&c<=0x7A||c>=0xC0&&c<=0xD6||c>=0xD8&&c<=0xF6||c>=0x00F8&&c<=0x02FF||c>=0x0370&&c<=0x037D||c>=0x037F&&c<=0x1FFF||c>=0x200C&&c<=0x200D||c>=0x2070&&c<=0x218F||c>=0x2C00&&c<=0x2FEF||c>=0x3001&&c<=0xD7FF||c>=0xF900&&c<=0xFDCF||c>=0xFDF0&&c<=0xFFFD||c>=0x10000&&c<=0xEFFFF;}exports.isNCNameStartChar=isNCNameStartChar;/** |
|
|
* Determines whether a codepoint matches [[NC_NAME_CHAR]]. |
|
|
* |
|
|
* @param c The code point. |
|
|
* |
|
|
* @returns ``true`` if the codepoint matches. |
|
|
*/function isNCNameChar(c){return isNCNameStartChar(c)||c===0x2D||c===0x2E||c>=0x30&&c<=0x39||c===0x00B7||c>=0x0300&&c<=0x036F||c>=0x203F&&c<=0x2040;}exports.isNCNameChar=isNCNameChar;},{}]},{},[15])(15);}); |
|
|
//# sourceMappingURL=exceljs.js.map
|