@wavemaker/angular-codegen 11.15.5-rc.647638 → 11.15.5-rc.647813

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -131194,11 +131194,22 @@ function requireConventions$1 () {
131194
131194
  XMLNS: 'http://www.w3.org/2000/xmlns/',
131195
131195
  });
131196
131196
 
131197
+ //[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
131198
+ //[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
131199
+ //[5] Name ::= NameStartChar (NameChar)*
131200
+ var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;//\u10000-\uEFFFF
131201
+ var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]");
131202
+ var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');
131203
+ //var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/
131204
+
131197
131205
  conventions$1.assign = assign;
131198
131206
  conventions$1.find = find;
131199
131207
  conventions$1.freeze = freeze;
131200
131208
  conventions$1.MIME_TYPE = MIME_TYPE;
131201
131209
  conventions$1.NAMESPACE = NAMESPACE;
131210
+ conventions$1.nameStartChar = nameStartChar;
131211
+ conventions$1.nameChar = nameChar;
131212
+ conventions$1.tagNamePattern = tagNamePattern;
131202
131213
  return conventions$1;
131203
131214
  }
131204
131215
 
@@ -131211,6 +131222,7 @@ function requireDom$1 () {
131211
131222
 
131212
131223
  var find = conventions.find;
131213
131224
  var NAMESPACE = conventions.NAMESPACE;
131225
+ var tagNamePattern = conventions.tagNamePattern;
131214
131226
 
131215
131227
  /**
131216
131228
  * A prerequisite for `[].filter`, to drop elements that are empty
@@ -131442,6 +131454,13 @@ function requireDom$1 () {
131442
131454
  * used for attributes or DocumentType entities
131443
131455
  */
131444
131456
  function NamedNodeMap() {
131457
+ // nodeName -> Attr membership index; lets the parse-time de-duplication in
131458
+ // setNamedItem resolve an existing attribute in O(1) instead of scanning the
131459
+ // list, so building an element with M attributes costs O(M) rather than O(M^2).
131460
+ // The numbered entries and length remain the sole authority for attribute order.
131461
+ // Object.create(null) so an attribute named __proto__ or constructor is an
131462
+ // ordinary key.
131463
+ this._nameIndex = Object.create(null);
131445
131464
  }
131446
131465
  function _findNodeIndex(list,node){
131447
131466
  var i = list.length;
@@ -131450,12 +131469,27 @@ function requireDom$1 () {
131450
131469
  }
131451
131470
  }
131452
131471
 
131472
+ function _nnmIndexAdd(list, attr) {
131473
+ list._nameIndex[attr.nodeName] = attr;
131474
+ }
131475
+ function _nnmIndexRemove(list, attr) {
131476
+ // Only drop the entry if it still points at this attribute; a replacement with
131477
+ // a different nodeName may already have re-keyed it.
131478
+ if (list._nameIndex[attr.nodeName] === attr) {
131479
+ delete list._nameIndex[attr.nodeName];
131480
+ }
131481
+ }
131482
+
131453
131483
  function _addNamedNode(el,list,newAttr,oldAttr){
131454
131484
  if(oldAttr){
131455
131485
  list[_findNodeIndex(list,oldAttr)] = newAttr;
131486
+ // oldAttr leaves the list; drop its index entry (its nodeName may differ
131487
+ // from newAttr's when the replacement came via setNamedItemNS).
131488
+ _nnmIndexRemove(list, oldAttr);
131456
131489
  }else {
131457
131490
  list[list.length++] = newAttr;
131458
131491
  }
131492
+ _nnmIndexAdd(list, newAttr);
131459
131493
  if(el){
131460
131494
  newAttr.ownerElement = el;
131461
131495
  var doc = el.ownerDocument;
@@ -131474,6 +131508,7 @@ function requireDom$1 () {
131474
131508
  list[i] = list[++i];
131475
131509
  }
131476
131510
  list.length = lastIndex;
131511
+ _nnmIndexRemove(list, attr);
131477
131512
  if(el){
131478
131513
  var doc = el.ownerDocument;
131479
131514
  if(doc){
@@ -131507,7 +131542,11 @@ function requireDom$1 () {
131507
131542
  if(el && el!=this._ownerElement){
131508
131543
  throw new DOMException(INUSE_ATTRIBUTE_ERR);
131509
131544
  }
131510
- var oldAttr = this.getNamedItem(attr.nodeName);
131545
+ // Resolve any existing attribute with the same nodeName through the O(1)
131546
+ // membership index rather than an O(M) scan — this is the parse-dedup hot
131547
+ // path (setAttributeNode per attribute during parse). Absent -> undefined,
131548
+ // matching getNamedItem's contract.
131549
+ var oldAttr = this._nameIndex[attr.nodeName];
131511
131550
  _addNamedNode(this._ownerElement,this,attr,oldAttr);
131512
131551
  return oldAttr;
131513
131552
  },
@@ -131740,9 +131779,38 @@ function requireDom$1 () {
131740
131779
  while (child) {
131741
131780
  var next = child.nextSibling;
131742
131781
  if (next !== null && next.nodeType === TEXT_NODE && child.nodeType === TEXT_NODE) {
131743
- node.removeChild(next);
131744
- child.appendData(next.data);
131745
- // Do not advance child: re-check new nextSibling for another text run
131782
+ // Merge the whole run of adjacent text nodes at once: gather the
131783
+ // following text siblings' data, unlink them in a single pass, and
131784
+ // re-index the child list a single time. Per-sibling `removeChild`
131785
+ // (each an O(K) re-index) plus per-sibling `appendData` (each an O(K)
131786
+ // string rebuild) is O(K^2) over a long run of single-character text
131787
+ // nodes; this keeps it O(K). The first text node of the run survives
131788
+ // and carries the concatenated data, preserving node identity and
131789
+ // locator semantics.
131790
+ var tail = [];
131791
+ var sibling = next;
131792
+ while (sibling !== null && sibling.nodeType === TEXT_NODE) {
131793
+ tail.push(sibling.data);
131794
+ sibling = sibling.nextSibling;
131795
+ }
131796
+ // `sibling` is now the first non-text node after the run, or null.
131797
+ var removed = child.nextSibling;
131798
+ while (removed !== sibling) {
131799
+ var following = removed.nextSibling;
131800
+ removed.parentNode = null;
131801
+ removed.previousSibling = null;
131802
+ removed.nextSibling = null;
131803
+ removed = following;
131804
+ }
131805
+ child.nextSibling = sibling;
131806
+ if (sibling !== null) {
131807
+ sibling.previousSibling = child;
131808
+ } else {
131809
+ node.lastChild = child;
131810
+ }
131811
+ child.appendData(tail.join('')); // single O(K) string rebuild
131812
+ _onUpdateChild(node.ownerDocument, node); // single O(K) re-index
131813
+ child = sibling;
131746
131814
  } else {
131747
131815
  child = next;
131748
131816
  }
@@ -132553,8 +132621,10 @@ function requireDom$1 () {
132553
132621
  * - it does not do any input validation on the arguments and doesn't throw "InvalidCharacterError".
132554
132622
  *
132555
132623
  * Note: When the resulting document is serialized with `requireWellFormed: true`, the
132556
- * serializer throws with code `INVALID_STATE_ERR` if `.data` contains `?>` (W3C DOM Parsing
132557
- * §3.2.1.7). Without that option the data is emitted verbatim.
132624
+ * serializer throws with code `INVALID_STATE_ERR` if `.target` is not a valid XML `NCName`
132625
+ * (a `Name` with no colon) or is an ASCII case-insensitive match for `"xml"`, or if `.data`
132626
+ * contains `?>` (W3C DOM Parsing §3.2.1.7). Without that option the target and data are
132627
+ * emitted verbatim.
132558
132628
  *
132559
132629
  * @param {string} target
132560
132630
  * @param {string} data
@@ -132579,7 +132649,27 @@ function requireDom$1 () {
132579
132649
  node.specified = true;
132580
132650
  return node;
132581
132651
  },
132652
+ /**
132653
+ * Creates an EntityReference object, serialized as `&name;`.
132654
+ *
132655
+ * The `name` is validated against the XML `Name` production at creation time; an invalid name
132656
+ * throws a `DOMException` with code `INVALID_CHARACTER_ERR`. When the resulting node is
132657
+ * serialized with `requireWellFormed: true`, the serializer re-validates `nodeName` and throws
132658
+ * a `DOMException` with code `INVALID_STATE_ERR` if a later `nodeName` mutation made it invalid;
132659
+ * without that option the name is emitted verbatim.
132660
+ *
132661
+ * Note: xmldom does not expand entities — the parser resolves entity references inline and never
132662
+ * constructs `EntityReference` nodes, so this method is the only producer.
132663
+ *
132664
+ * @param {string} name The name of the entity to reference.
132665
+ * @returns {EntityReference}
132666
+ * @throws {DOMException} With code `INVALID_CHARACTER_ERR` when `name` is not a valid XML `Name`.
132667
+ * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-392B75AE
132668
+ */
132582
132669
  createEntityReference : function(name){
132670
+ if (!tagNamePattern.test(name)) {
132671
+ throw new DOMException(INVALID_CHARACTER_ERR, 'not a valid xml name "' + name + '"');
132672
+ }
132583
132673
  var node = new EntityReference();
132584
132674
  node.ownerDocument = this;
132585
132675
  node.nodeName = name;
@@ -132791,15 +132881,16 @@ function requireDom$1 () {
132791
132881
  /**
132792
132882
  * Represents a DocumentType node (the `<!DOCTYPE ...>` declaration).
132793
132883
  *
132794
- * `publicId`, `systemId`, and `internalSubset` are plain own-property assignments.
132884
+ * `name`, `publicId`, `systemId`, and `internalSubset` are plain own-property assignments.
132795
132885
  * xmldom does not enforce the `readonly` constraint declared by the WHATWG DOM spec —
132796
132886
  * direct property writes succeed silently. Values are serialized verbatim when
132797
132887
  * `requireWellFormed` is false (the default). When the serializer is invoked with
132798
132888
  * `requireWellFormed: true` (via the 4th-parameter options object), it validates each
132799
- * field and throws `DOMException` with code `INVALID_STATE_ERR` on invalid values.
132889
+ * field — including `name`, which is checked against the XML `Name` production — and throws
132890
+ * `DOMException` with code `INVALID_STATE_ERR` on invalid values.
132800
132891
  *
132801
132892
  * @class
132802
- * @see https://developer.mozilla.org/en-US/docs/Web/API/DocumentType MDN
132893
+ * @see https://developer.mozilla.org/docs/Web/API/DocumentType MDN
132803
132894
  */
132804
132895
  function DocumentType() {
132805
132896
  } DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;
@@ -132813,6 +132904,20 @@ function requireDom$1 () {
132813
132904
  } Entity.prototype.nodeType = ENTITY_NODE;
132814
132905
  _extends(Entity,Node);
132815
132906
 
132907
+ /**
132908
+ * Represents an EntityReference node, serialized as `&nodeName;`.
132909
+ *
132910
+ * `nodeName` is the referenced entity's name, stored verbatim. When serialized with
132911
+ * `requireWellFormed: true`, the serializer validates `nodeName` against the XML `Name` production
132912
+ * and throws a `DOMException` with code `INVALID_STATE_ERR` if it does not match; without that
132913
+ * option the name is emitted verbatim between `&` and `;`.
132914
+ *
132915
+ * Note: xmldom does not expand entities — the parser resolves entity references inline and never
132916
+ * constructs `EntityReference` nodes, so the only producer is `Document.createEntityReference`.
132917
+ *
132918
+ * @class
132919
+ * @see https://www.w3.org/TR/xml/#NT-Name
132920
+ */
132816
132921
  function EntityReference() {
132817
132922
  } EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;
132818
132923
  _extends(EntityReference,Node);
@@ -132850,14 +132955,20 @@ function requireDom$1 () {
132850
132955
  * @returns {string}
132851
132956
  * @throws {DOMException}
132852
132957
  * With code `INVALID_STATE_ERR` when `requireWellFormed` is `true` and:
132958
+ * - an Element's qualified name (including any namespace prefix) is not a valid XML QName,
132959
+ * - an attribute's qualified name (including a synthesized `xmlns:` namespace declaration) is
132960
+ * not a valid XML QName,
132853
132961
  * - a CDATASection node's data contains `"]]>"`,
132854
132962
  * - a Comment node's data contains `"-->"` (bare `"--"` does not throw on this branch),
132855
- * - a ProcessingInstruction's data contains `"?>"`,
132963
+ * - a ProcessingInstruction's target is not a valid XML `NCName` (a `Name` with no colon) or is
132964
+ * an ASCII case-insensitive match for `"xml"`, or its data contains `"?>"`,
132965
+ * - a DocumentType's `name` is not a valid XML `Name` (XML 1.0 production [5]),
132856
132966
  * - a DocumentType's `publicId` is non-empty and does not match the XML `PubidLiteral`
132857
132967
  * production,
132858
132968
  * - a DocumentType's `systemId` is non-empty and does not match the XML `SystemLiteral`
132859
- * production, or
132860
- * - a DocumentType's `internalSubset` contains `"]>"`.
132969
+ * production,
132970
+ * - a DocumentType's `internalSubset` contains `"]>"`, or
132971
+ * - an EntityReference's `nodeName` is not a valid XML `Name` (XML 1.0 production [5]).
132861
132972
  * Note: xmldom does not enforce `readonly` on DocumentType fields — direct property
132862
132973
  * writes succeed and are covered by the serializer-level checks above.
132863
132974
  * @see https://html.spec.whatwg.org/#dom-xmlserializer-serializetostring
@@ -132931,7 +133042,10 @@ function requireDom$1 () {
132931
133042
  * @see https://www.w3.org/TR/xml11/#AVNormalize
132932
133043
  * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes
132933
133044
  */
132934
- function addSerializedAttribute(buf, qualifiedName, value) {
133045
+ function addSerializedAttribute(buf, qualifiedName, value, requireWellFormed) {
133046
+ if (requireWellFormed && !tagNamePattern.test(qualifiedName)) {
133047
+ throw new DOMException(INVALID_STATE_ERR, 'The attribute name "' + qualifiedName + '" is not a valid XML QName');
133048
+ }
132935
133049
  buf.push(' ', qualifiedName, '="', value.replace(/[<>&"\t\n\r]/g, _xmlEncoder), '"');
132936
133050
  }
132937
133051
 
@@ -132997,6 +133111,9 @@ function requireDom$1 () {
132997
133111
  }
132998
133112
  }
132999
133113
 
133114
+ if (requireWellFormed && !tagNamePattern.test(prefixedNodeName)) {
133115
+ throw new DOMException(INVALID_STATE_ERR, 'The element name "' + prefixedNodeName + '" is not a valid XML QName');
133116
+ }
133000
133117
  buf.push('<', prefixedNodeName);
133001
133118
 
133002
133119
  // Build a fresh namespace snapshot for this element's children.
@@ -133016,7 +133133,7 @@ function requireDom$1 () {
133016
133133
  if (needNamespaceDefine(attr, html, childNs)) {
133017
133134
  var attrPrefix = attr.prefix || '';
133018
133135
  var uri = attr.namespaceURI;
133019
- addSerializedAttribute(buf, attrPrefix ? 'xmlns:' + attrPrefix : 'xmlns', uri);
133136
+ addSerializedAttribute(buf, attrPrefix ? 'xmlns:' + attrPrefix : 'xmlns', uri, requireWellFormed);
133020
133137
  childNs.push({ prefix: attrPrefix, namespace: uri });
133021
133138
  }
133022
133139
  // Apply nodeFilter and serialize the attribute.
@@ -133025,7 +133142,7 @@ function requireDom$1 () {
133025
133142
  if (typeof filteredAttr === 'string') {
133026
133143
  buf.push(filteredAttr);
133027
133144
  } else {
133028
- addSerializedAttribute(buf, filteredAttr.name, filteredAttr.value);
133145
+ addSerializedAttribute(buf, filteredAttr.name, filteredAttr.value, requireWellFormed);
133029
133146
  }
133030
133147
  }
133031
133148
  }
@@ -133034,7 +133151,7 @@ function requireDom$1 () {
133034
133151
  if (nodeName === prefixedNodeName && needNamespaceDefine(n, html, childNs)) {
133035
133152
  var nodePrefix = n.prefix || '';
133036
133153
  var uri = n.namespaceURI;
133037
- addSerializedAttribute(buf, nodePrefix ? 'xmlns:' + nodePrefix : 'xmlns', uri);
133154
+ addSerializedAttribute(buf, nodePrefix ? 'xmlns:' + nodePrefix : 'xmlns', uri, requireWellFormed);
133038
133155
  childNs.push({ prefix: nodePrefix, namespace: uri });
133039
133156
  }
133040
133157
 
@@ -133067,7 +133184,7 @@ function requireDom$1 () {
133067
133184
  return { ns: ns.slice(), isHTML: html, tag: null };
133068
133185
 
133069
133186
  case ATTRIBUTE_NODE:
133070
- addSerializedAttribute(buf, n.name, n.value);
133187
+ addSerializedAttribute(buf, n.name, n.value, requireWellFormed);
133071
133188
  return null;
133072
133189
 
133073
133190
  case TEXT_NODE:
@@ -133106,6 +133223,9 @@ function requireDom$1 () {
133106
133223
 
133107
133224
  case DOCUMENT_TYPE_NODE:
133108
133225
  if (requireWellFormed) {
133226
+ if (!tagNamePattern.test(n.name)) {
133227
+ throw new DOMException(INVALID_STATE_ERR, 'The doctype name "' + n.name + '" is not a valid XML Name');
133228
+ }
133109
133229
  if (n.publicId && !/^("[\x20\r\na-zA-Z0-9\-()+,.\/:=?;!*#@$_%']*"|'[\x20\r\na-zA-Z0-9\-()+,.\/:=?;!*#@$_%'"]*')$/.test(n.publicId)) {
133110
133230
  throw new DOMException(INVALID_STATE_ERR, 'DocumentType publicId is not a valid PubidLiteral');
133111
133231
  }
@@ -133137,13 +133257,27 @@ function requireDom$1 () {
133137
133257
  return null;
133138
133258
 
133139
133259
  case PROCESSING_INSTRUCTION_NODE:
133140
- if (requireWellFormed && n.data.indexOf('?>') !== -1) {
133141
- throw new DOMException(INVALID_STATE_ERR, 'The ProcessingInstruction data contains "?>"');
133260
+ if (requireWellFormed) {
133261
+ if (!tagNamePattern.test(n.target) || n.target.indexOf(':') !== -1 || n.target.toLowerCase() === 'xml') {
133262
+ throw new DOMException(
133263
+ INVALID_STATE_ERR,
133264
+ 'The processing instruction target "' + n.target + '" is not a valid XML NCName or is reserved'
133265
+ );
133266
+ }
133267
+ if (n.data.indexOf('?>') !== -1) {
133268
+ throw new DOMException(INVALID_STATE_ERR, 'The ProcessingInstruction data contains "?>"');
133269
+ }
133142
133270
  }
133143
133271
  buf.push('<?', n.target, ' ', n.data, '?>');
133144
133272
  return null;
133145
133273
 
133146
133274
  case ENTITY_REFERENCE_NODE:
133275
+ if (requireWellFormed && !tagNamePattern.test(n.nodeName)) {
133276
+ throw new DOMException(
133277
+ INVALID_STATE_ERR,
133278
+ 'The entity reference name "' + n.nodeName + '" is not a valid XML Name'
133279
+ );
133280
+ }
133147
133281
  buf.push('&', n.nodeName, ';');
133148
133282
  return null;
133149
133283
 
@@ -135524,14 +135658,8 @@ function requireSax$1 () {
135524
135658
  if (hasRequiredSax$1) return sax$1;
135525
135659
  hasRequiredSax$1 = 1;
135526
135660
  var NAMESPACE = requireConventions$1().NAMESPACE;
135661
+ var tagNamePattern = requireConventions$1().tagNamePattern;
135527
135662
 
135528
- //[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
135529
- //[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
135530
- //[5] Name ::= NameStartChar (NameChar)*
135531
- var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;//\u10000-\uEFFFF
135532
- var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]");
135533
- var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');
135534
- //var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/
135535
135663
  //var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')
135536
135664
 
135537
135665
  //S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE
@@ -135642,7 +135770,13 @@ function requireSax$1 () {
135642
135770
  switch(source.charAt(tagStart+1)){
135643
135771
  case '/':
135644
135772
  var end = source.indexOf('>',tagStart+3);
135645
- var tagName = source.substring(tagStart + 2, end).replace(/[ \t\n\r]+$/g, '');
135773
+ // Anchored trailing-whitespace trim. The former `/[ \t\n\r]+$/g` backtracked
135774
+ // quadratically on a name shaped `whitespace-run + non-whitespace char`
135775
+ // (an end tag `</ … x>`): from every start position it extended `[ws]+`
135776
+ // to the end and then failed the `$` anchor. This anchored form matches the
135777
+ // whole string once and captures everything up to the last non-whitespace
135778
+ // character, so it trims in linear time with byte-identical output.
135779
+ var tagName = source.substring(tagStart + 2, end).replace(/^([\s\S]*?[^ \t\n\r])?[ \t\n\r]*$/, '$1');
135646
135780
  var config = parseStack.pop();
135647
135781
  if(end<0){
135648
135782
 
@@ -135653,6 +135787,14 @@ function requireSax$1 () {
135653
135787
  tagName = tagName.replace(/[\s<].*/,'');
135654
135788
  errorHandler.error("end tag name: "+tagName+' maybe not complete');
135655
135789
  end = tagStart+1+tagName.length;
135790
+ }else if(/[ \t\n\r]/.test(tagName) && tagNamePattern.test(tagName.split(/[ \t\n\r]/)[0])){
135791
+ // The XML `ETag` production is `'</' Name S? '>'`: only optional whitespace may follow
135792
+ // the `Name`. A valid `Name` followed by whitespace and non-whitespace residue (e.g.
135793
+ // `</a\nbogus>` or `</a bogus>`) is not well-formed, but historically it was silently
135794
+ // accepted (the malformed end tag ignored, the residue dropped, the element left on the
135795
+ // stack). Report it as a recoverable `error` (which a custom errorHandler may escalate to
135796
+ // fatal) while keeping the existing recovery so the parsed DOM stays byte-identical.
135797
+ errorHandler.error('end tag name is followed by whitespace and trailing content: "'+tagName+'"');
135656
135798
  }
135657
135799
  var localNSMap = config.localNSMap;
135658
135800
  var endMatch = config.tagName == tagName;
@@ -135776,6 +135918,15 @@ function requireSax$1 () {
135776
135918
  var s = S_TAG;//status
135777
135919
  while(true){
135778
135920
  var c = source.charAt(p);
135921
+ if (s === S_TAG && c === '<') {
135922
+ // A `<` can never occur inside a tag name. Without this guard the scan runs
135923
+ // on to the next `>` (or EOF) before the tag name is rejected, so a document
135924
+ // with many `<` inside a malformed tag makes each one-character recovery step
135925
+ // re-scan to the distant `>` — O(n^2). Stopping at the `<` keeps each recovery
135926
+ // step bounded. The candidate scanned so far is reported raw, consistent with
135927
+ // the sibling invalid-tag-name throw below.
135928
+ throw new Error('unexpected < in tag name: ' + source.slice(start, p));
135929
+ }
135779
135930
  switch(c){
135780
135931
  case '=':
135781
135932
  if(s === S_ATTR){//attrName
@@ -135968,9 +136119,13 @@ function requireSax$1 () {
135968
136119
  if(nsPrefix !== false){//hack!!
135969
136120
  if(localNSMap == null){
135970
136121
  localNSMap = {};
135971
- //console.log(currentNSMap,0)
135972
- _copy(currentNSMap,currentNSMap={});
135973
- //console.log(currentNSMap,1)
136122
+ // Derive the child scope's namespace map by prototype-chain inheritance
136123
+ // instead of a flat copy: lookups inherit ancestor prefixes transparently,
136124
+ // so a document nesting N scopes retains O(N) map entries rather than
136125
+ // sum(1..N) = O(N^2). localNSMap stays a flat own-only record of the
136126
+ // prefixes declared at THIS element, so own-property enumeration
136127
+ // (endPrefixMapping below) still reports only local declarations.
136128
+ currentNSMap = Object.create(currentNSMap);
135974
136129
  }
135975
136130
  currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;
135976
136131
  a.uri = NAMESPACE.XMLNS;
@@ -143009,7 +143164,7 @@ function requireMomentTimezone$1 () {
143009
143164
  hasRequiredMomentTimezone$1 = 1;
143010
143165
  (function (module) {
143011
143166
  //! moment-timezone.js
143012
- //! version : 0.6.2
143167
+ //! version : 0.6.5
143013
143168
  //! Copyright (c) JS Foundation and other contributors
143014
143169
  //! license : MIT
143015
143170
  //! github.com/moment/moment-timezone
@@ -143035,12 +143190,18 @@ function requireMomentTimezone$1 () {
143035
143190
  // return moment;
143036
143191
  // }
143037
143192
 
143038
- var VERSION = "0.6.2",
143193
+ var VERSION = "0.6.5",
143039
143194
  zones = {},
143040
143195
  links = {},
143041
143196
  countries = {},
143042
143197
  names = {},
143043
143198
  guesses = {},
143199
+ parsingInZone = false,
143200
+ parsingNow,
143201
+ parsingNowFunction,
143202
+ hasParsingNow = false,
143203
+ ignoreDefaultZoneForInput,
143204
+ hasIgnoredDefaultZoneInput = false,
143044
143205
  cachedGuess;
143045
143206
 
143046
143207
  if (!moment || typeof moment.version !== 'string') {
@@ -143212,17 +143373,16 @@ function requireMomentTimezone$1 () {
143212
143373
  offsets = this.offsets,
143213
143374
  untils = this.untils,
143214
143375
  max = untils.length - 1,
143215
- offset, offsetNext, offsetPrev, i;
143376
+ offset, offsetNext, i;
143216
143377
 
143217
143378
  for (i = 0; i < max; i++) {
143218
143379
  offset = offsets[i];
143219
143380
  offsetNext = offsets[i + 1];
143220
- offsetPrev = offsets[i ? i - 1 : i];
143221
143381
 
143222
143382
  if (offset < offsetNext && tz.moveAmbiguousForward) {
143223
143383
  offset = offsetNext;
143224
- } else if (offset > offsetPrev && tz.moveInvalidForward) {
143225
- offset = offsetPrev;
143384
+ } else if (offset > offsetNext && tz.moveInvalidForward) {
143385
+ offset = offsetNext;
143226
143386
  }
143227
143387
 
143228
143388
  if (target < untils[i] - (offset * 60000)) {
@@ -143247,6 +143407,15 @@ function requireMomentTimezone$1 () {
143247
143407
  }
143248
143408
  };
143249
143409
 
143410
+ var utcDefaultZone = new Zone();
143411
+ utcDefaultZone._set({
143412
+ name : 'UTC',
143413
+ abbrs : ['UTC'],
143414
+ untils : [Infinity],
143415
+ offsets : [0],
143416
+ population : 0
143417
+ });
143418
+
143250
143419
  /************************************
143251
143420
  Country object
143252
143421
  ************************************/
@@ -143584,6 +143753,85 @@ function requireMomentTimezone$1 () {
143584
143753
  return !!(m._a && (m._tzm === undefined) && !isUnixTimestamp);
143585
143754
  }
143586
143755
 
143756
+ function isObjectInput (input) {
143757
+ var prop;
143758
+
143759
+ if (moment.isMoment(input) || input === null || Object.prototype.toString.call(input) !== '[object Object]') {
143760
+ return false;
143761
+ }
143762
+ if (Object.getOwnPropertyNames) {
143763
+ return Object.getOwnPropertyNames(input).length > 0;
143764
+ }
143765
+ for (prop in input) {
143766
+ if (Object.prototype.hasOwnProperty.call(input, prop)) {
143767
+ return true;
143768
+ }
143769
+ }
143770
+ return false;
143771
+ }
143772
+
143773
+ function parseWithZoneNow (args, name, stringInput) {
143774
+ var savedNow = moment.now,
143775
+ savedDefaultZone = moment.defaultZone,
143776
+ savedParsingInZone = parsingInZone,
143777
+ savedParsingNow = parsingNow,
143778
+ savedParsingNowFunction = parsingNowFunction,
143779
+ savedHasParsingNow = hasParsingNow,
143780
+ now,
143781
+ hasNow = false,
143782
+ zonedNow,
143783
+ wallNow,
143784
+ parsedDateParts,
143785
+ out;
143786
+
143787
+ if (!parsingInZone) {
143788
+ parsingNow = undefined;
143789
+ parsingNowFunction = savedNow;
143790
+ hasParsingNow = false;
143791
+ }
143792
+ parsingInZone = true;
143793
+ moment.now = function () {
143794
+ if (!hasNow) {
143795
+ if (!hasParsingNow) {
143796
+ parsingNow = parsingNowFunction.call(moment);
143797
+ hasParsingNow = true;
143798
+ }
143799
+ now = parsingNow;
143800
+ hasNow = true;
143801
+ zonedNow = moment.tz(now, name);
143802
+ wallNow = zonedNow.valueOf() + zonedNow.utcOffset() * 60000;
143803
+ }
143804
+ return wallNow;
143805
+ };
143806
+ if (stringInput) {
143807
+ moment.defaultZone = utcDefaultZone;
143808
+ }
143809
+ try {
143810
+ out = moment.utc.apply(null, args);
143811
+ if (stringInput && hasNow && out._a && out._tzm !== undefined) {
143812
+ parsedDateParts = out.parsingFlags().parsedDateParts;
143813
+ if (!parsedDateParts || parsedDateParts[0] == null || parsedDateParts[1] == null || parsedDateParts[2] == null) {
143814
+ moment.now = function () {
143815
+ return now;
143816
+ };
143817
+ moment.defaultZone = savedDefaultZone;
143818
+ out = moment.utc.apply(null, args);
143819
+ }
143820
+ }
143821
+ } finally {
143822
+ moment.now = savedNow;
143823
+ moment.defaultZone = savedDefaultZone;
143824
+ parsingInZone = savedParsingInZone;
143825
+ if (!savedParsingInZone) {
143826
+ parsingNow = savedParsingNow;
143827
+ parsingNowFunction = savedParsingNowFunction;
143828
+ hasParsingNow = savedHasParsingNow;
143829
+ }
143830
+ }
143831
+
143832
+ return out;
143833
+ }
143834
+
143587
143835
  function logError (message) {
143588
143836
  if (typeof console !== 'undefined' && typeof console.error === 'function') {
143589
143837
  console.error(message);
@@ -143597,10 +143845,13 @@ function requireMomentTimezone$1 () {
143597
143845
  function tz (input) {
143598
143846
  var args = Array.prototype.slice.call(arguments, 0, -1),
143599
143847
  name = arguments[arguments.length - 1],
143600
- out = moment.utc.apply(null, args),
143601
- zone;
143848
+ objectInput = isObjectInput(input),
143849
+ stringInput = args.length > 0 && typeof input === 'string',
143850
+ zone = objectInput || stringInput ? getZone(name) : null,
143851
+ out = objectInput && zone ? parseWithZoneNow(args, name) :
143852
+ stringInput && zone ? parseWithZoneNow(args, name, true) : moment.utc.apply(null, args);
143602
143853
 
143603
- if (!moment.isMoment(input) && needsOffset(out) && (zone = getZone(name))) {
143854
+ if (!moment.isMoment(input) && needsOffset(out) && (zone || (!objectInput && (zone = getZone(name))))) {
143604
143855
  out.add(zone.parse(out), 'minutes');
143605
143856
  }
143606
143857
 
@@ -143640,10 +143891,49 @@ function requireMomentTimezone$1 () {
143640
143891
  moment.tz = tz;
143641
143892
 
143642
143893
  moment.defaultZone = null;
143894
+ var momentGetDefaultDateParts = moment._getDefaultDateParts;
143895
+ if (momentGetDefaultDateParts) {
143896
+ moment._getDefaultDateParts = function (config, now, forWeek) {
143897
+ var zone = moment.defaultZone,
143898
+ zonedNow,
143899
+ dateParts,
143900
+ savedIgnoredInput,
143901
+ savedHasIgnoredInput;
143902
+ forWeek = forWeek || config._isDefaultDatePartsForWeek;
143903
+
143904
+ if (parsingInZone && config._tzm === undefined) {
143905
+ zonedNow = new Date(now);
143906
+ return [zonedNow.getUTCFullYear(), zonedNow.getUTCMonth(), zonedNow.getUTCDate()];
143907
+ }
143908
+
143909
+ if (zone && !config._useUTC && config._tzm === undefined) {
143910
+ zonedNow = new Date(now - zone.utcOffset(now) * 60000);
143911
+ return [zonedNow.getUTCFullYear(), zonedNow.getUTCMonth(), zonedNow.getUTCDate()];
143912
+ }
143913
+
143914
+ if (forWeek && (config._useUTC || config._tzm !== undefined)) {
143915
+ savedIgnoredInput = ignoreDefaultZoneForInput;
143916
+ savedHasIgnoredInput = hasIgnoredDefaultZoneInput;
143917
+ ignoreDefaultZoneForInput = now;
143918
+ hasIgnoredDefaultZoneInput = true;
143919
+ try {
143920
+ dateParts = momentGetDefaultDateParts.call(this, config, now, forWeek);
143921
+ } finally {
143922
+ ignoreDefaultZoneForInput = savedIgnoredInput;
143923
+ hasIgnoredDefaultZoneInput = savedHasIgnoredInput;
143924
+ }
143925
+ return dateParts;
143926
+ }
143927
+
143928
+ return momentGetDefaultDateParts.call(this, config, now, forWeek);
143929
+ };
143930
+ }
143643
143931
 
143644
143932
  moment.updateOffset = function (mom, keepTime) {
143645
- var zone = moment.defaultZone,
143646
- offset;
143933
+ var zone = hasIgnoredDefaultZoneInput && ignoreDefaultZoneForInput === mom._i ? null : moment.defaultZone,
143934
+ offset,
143935
+ localTimestamp,
143936
+ normalizedTimestamp;
143647
143937
 
143648
143938
  if (mom._z === undefined) {
143649
143939
  if (zone && needsOffset(mom) && !mom._isUTC && mom.isValid()) {
@@ -143654,6 +143944,20 @@ function requireMomentTimezone$1 () {
143654
143944
  }
143655
143945
  if (mom._z) {
143656
143946
  offset = mom._z.utcOffset(mom);
143947
+ if (keepTime) {
143948
+ // Resolve local times inside a forward gap using the configured
143949
+ // invalid-input policy before applying the new offset.
143950
+ localTimestamp = mom._d.valueOf();
143951
+ if (!mom._isUTC) {
143952
+ localTimestamp -= mom._d.getTimezoneOffset() * 60000;
143953
+ }
143954
+ if (mom._z.utcOffset(localTimestamp + offset * 60000) !== offset) {
143955
+ offset = mom._z.parse(localTimestamp);
143956
+ localTimestamp += offset * 60000;
143957
+ offset = mom._z.utcOffset(localTimestamp);
143958
+ normalizedTimestamp = localTimestamp - offset * 60000;
143959
+ }
143960
+ }
143657
143961
  if (Math.abs(offset) < 16) {
143658
143962
  offset = offset / 60;
143659
143963
  }
@@ -143664,6 +143968,9 @@ function requireMomentTimezone$1 () {
143664
143968
  } else {
143665
143969
  mom.zone(offset, keepTime);
143666
143970
  }
143971
+ if (normalizedTimestamp != null) {
143972
+ mom._d.setTime(normalizedTimestamp);
143973
+ }
143667
143974
  }
143668
143975
  };
143669
143976
 
@@ -188246,11 +188553,22 @@ function requireConventions () {
188246
188553
  XMLNS: 'http://www.w3.org/2000/xmlns/',
188247
188554
  });
188248
188555
 
188556
+ //[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
188557
+ //[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
188558
+ //[5] Name ::= NameStartChar (NameChar)*
188559
+ var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;//\u10000-\uEFFFF
188560
+ var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]");
188561
+ var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');
188562
+ //var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/
188563
+
188249
188564
  conventions.assign = assign;
188250
188565
  conventions.find = find;
188251
188566
  conventions.freeze = freeze;
188252
188567
  conventions.MIME_TYPE = MIME_TYPE;
188253
188568
  conventions.NAMESPACE = NAMESPACE;
188569
+ conventions.nameStartChar = nameStartChar;
188570
+ conventions.nameChar = nameChar;
188571
+ conventions.tagNamePattern = tagNamePattern;
188254
188572
  return conventions;
188255
188573
  }
188256
188574
 
@@ -188263,6 +188581,7 @@ function requireDom () {
188263
188581
 
188264
188582
  var find = conventions.find;
188265
188583
  var NAMESPACE = conventions.NAMESPACE;
188584
+ var tagNamePattern = conventions.tagNamePattern;
188266
188585
 
188267
188586
  /**
188268
188587
  * A prerequisite for `[].filter`, to drop elements that are empty
@@ -188494,6 +188813,13 @@ function requireDom () {
188494
188813
  * used for attributes or DocumentType entities
188495
188814
  */
188496
188815
  function NamedNodeMap() {
188816
+ // nodeName -> Attr membership index; lets the parse-time de-duplication in
188817
+ // setNamedItem resolve an existing attribute in O(1) instead of scanning the
188818
+ // list, so building an element with M attributes costs O(M) rather than O(M^2).
188819
+ // The numbered entries and length remain the sole authority for attribute order.
188820
+ // Object.create(null) so an attribute named __proto__ or constructor is an
188821
+ // ordinary key.
188822
+ this._nameIndex = Object.create(null);
188497
188823
  }
188498
188824
  function _findNodeIndex(list,node){
188499
188825
  var i = list.length;
@@ -188502,12 +188828,27 @@ function requireDom () {
188502
188828
  }
188503
188829
  }
188504
188830
 
188831
+ function _nnmIndexAdd(list, attr) {
188832
+ list._nameIndex[attr.nodeName] = attr;
188833
+ }
188834
+ function _nnmIndexRemove(list, attr) {
188835
+ // Only drop the entry if it still points at this attribute; a replacement with
188836
+ // a different nodeName may already have re-keyed it.
188837
+ if (list._nameIndex[attr.nodeName] === attr) {
188838
+ delete list._nameIndex[attr.nodeName];
188839
+ }
188840
+ }
188841
+
188505
188842
  function _addNamedNode(el,list,newAttr,oldAttr){
188506
188843
  if(oldAttr){
188507
188844
  list[_findNodeIndex(list,oldAttr)] = newAttr;
188845
+ // oldAttr leaves the list; drop its index entry (its nodeName may differ
188846
+ // from newAttr's when the replacement came via setNamedItemNS).
188847
+ _nnmIndexRemove(list, oldAttr);
188508
188848
  }else {
188509
188849
  list[list.length++] = newAttr;
188510
188850
  }
188851
+ _nnmIndexAdd(list, newAttr);
188511
188852
  if(el){
188512
188853
  newAttr.ownerElement = el;
188513
188854
  var doc = el.ownerDocument;
@@ -188526,6 +188867,7 @@ function requireDom () {
188526
188867
  list[i] = list[++i];
188527
188868
  }
188528
188869
  list.length = lastIndex;
188870
+ _nnmIndexRemove(list, attr);
188529
188871
  if(el){
188530
188872
  var doc = el.ownerDocument;
188531
188873
  if(doc){
@@ -188559,7 +188901,11 @@ function requireDom () {
188559
188901
  if(el && el!=this._ownerElement){
188560
188902
  throw new DOMException(INUSE_ATTRIBUTE_ERR);
188561
188903
  }
188562
- var oldAttr = this.getNamedItem(attr.nodeName);
188904
+ // Resolve any existing attribute with the same nodeName through the O(1)
188905
+ // membership index rather than an O(M) scan — this is the parse-dedup hot
188906
+ // path (setAttributeNode per attribute during parse). Absent -> undefined,
188907
+ // matching getNamedItem's contract.
188908
+ var oldAttr = this._nameIndex[attr.nodeName];
188563
188909
  _addNamedNode(this._ownerElement,this,attr,oldAttr);
188564
188910
  return oldAttr;
188565
188911
  },
@@ -188792,9 +189138,38 @@ function requireDom () {
188792
189138
  while (child) {
188793
189139
  var next = child.nextSibling;
188794
189140
  if (next !== null && next.nodeType === TEXT_NODE && child.nodeType === TEXT_NODE) {
188795
- node.removeChild(next);
188796
- child.appendData(next.data);
188797
- // Do not advance child: re-check new nextSibling for another text run
189141
+ // Merge the whole run of adjacent text nodes at once: gather the
189142
+ // following text siblings' data, unlink them in a single pass, and
189143
+ // re-index the child list a single time. Per-sibling `removeChild`
189144
+ // (each an O(K) re-index) plus per-sibling `appendData` (each an O(K)
189145
+ // string rebuild) is O(K^2) over a long run of single-character text
189146
+ // nodes; this keeps it O(K). The first text node of the run survives
189147
+ // and carries the concatenated data, preserving node identity and
189148
+ // locator semantics.
189149
+ var tail = [];
189150
+ var sibling = next;
189151
+ while (sibling !== null && sibling.nodeType === TEXT_NODE) {
189152
+ tail.push(sibling.data);
189153
+ sibling = sibling.nextSibling;
189154
+ }
189155
+ // `sibling` is now the first non-text node after the run, or null.
189156
+ var removed = child.nextSibling;
189157
+ while (removed !== sibling) {
189158
+ var following = removed.nextSibling;
189159
+ removed.parentNode = null;
189160
+ removed.previousSibling = null;
189161
+ removed.nextSibling = null;
189162
+ removed = following;
189163
+ }
189164
+ child.nextSibling = sibling;
189165
+ if (sibling !== null) {
189166
+ sibling.previousSibling = child;
189167
+ } else {
189168
+ node.lastChild = child;
189169
+ }
189170
+ child.appendData(tail.join('')); // single O(K) string rebuild
189171
+ _onUpdateChild(node.ownerDocument, node); // single O(K) re-index
189172
+ child = sibling;
188798
189173
  } else {
188799
189174
  child = next;
188800
189175
  }
@@ -189605,8 +189980,10 @@ function requireDom () {
189605
189980
  * - it does not do any input validation on the arguments and doesn't throw "InvalidCharacterError".
189606
189981
  *
189607
189982
  * Note: When the resulting document is serialized with `requireWellFormed: true`, the
189608
- * serializer throws with code `INVALID_STATE_ERR` if `.data` contains `?>` (W3C DOM Parsing
189609
- * §3.2.1.7). Without that option the data is emitted verbatim.
189983
+ * serializer throws with code `INVALID_STATE_ERR` if `.target` is not a valid XML `NCName`
189984
+ * (a `Name` with no colon) or is an ASCII case-insensitive match for `"xml"`, or if `.data`
189985
+ * contains `?>` (W3C DOM Parsing §3.2.1.7). Without that option the target and data are
189986
+ * emitted verbatim.
189610
189987
  *
189611
189988
  * @param {string} target
189612
189989
  * @param {string} data
@@ -189631,7 +190008,27 @@ function requireDom () {
189631
190008
  node.specified = true;
189632
190009
  return node;
189633
190010
  },
190011
+ /**
190012
+ * Creates an EntityReference object, serialized as `&name;`.
190013
+ *
190014
+ * The `name` is validated against the XML `Name` production at creation time; an invalid name
190015
+ * throws a `DOMException` with code `INVALID_CHARACTER_ERR`. When the resulting node is
190016
+ * serialized with `requireWellFormed: true`, the serializer re-validates `nodeName` and throws
190017
+ * a `DOMException` with code `INVALID_STATE_ERR` if a later `nodeName` mutation made it invalid;
190018
+ * without that option the name is emitted verbatim.
190019
+ *
190020
+ * Note: xmldom does not expand entities — the parser resolves entity references inline and never
190021
+ * constructs `EntityReference` nodes, so this method is the only producer.
190022
+ *
190023
+ * @param {string} name The name of the entity to reference.
190024
+ * @returns {EntityReference}
190025
+ * @throws {DOMException} With code `INVALID_CHARACTER_ERR` when `name` is not a valid XML `Name`.
190026
+ * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-392B75AE
190027
+ */
189634
190028
  createEntityReference : function(name){
190029
+ if (!tagNamePattern.test(name)) {
190030
+ throw new DOMException(INVALID_CHARACTER_ERR, 'not a valid xml name "' + name + '"');
190031
+ }
189635
190032
  var node = new EntityReference();
189636
190033
  node.ownerDocument = this;
189637
190034
  node.nodeName = name;
@@ -189843,15 +190240,16 @@ function requireDom () {
189843
190240
  /**
189844
190241
  * Represents a DocumentType node (the `<!DOCTYPE ...>` declaration).
189845
190242
  *
189846
- * `publicId`, `systemId`, and `internalSubset` are plain own-property assignments.
190243
+ * `name`, `publicId`, `systemId`, and `internalSubset` are plain own-property assignments.
189847
190244
  * xmldom does not enforce the `readonly` constraint declared by the WHATWG DOM spec —
189848
190245
  * direct property writes succeed silently. Values are serialized verbatim when
189849
190246
  * `requireWellFormed` is false (the default). When the serializer is invoked with
189850
190247
  * `requireWellFormed: true` (via the 4th-parameter options object), it validates each
189851
- * field and throws `DOMException` with code `INVALID_STATE_ERR` on invalid values.
190248
+ * field — including `name`, which is checked against the XML `Name` production — and throws
190249
+ * `DOMException` with code `INVALID_STATE_ERR` on invalid values.
189852
190250
  *
189853
190251
  * @class
189854
- * @see https://developer.mozilla.org/en-US/docs/Web/API/DocumentType MDN
190252
+ * @see https://developer.mozilla.org/docs/Web/API/DocumentType MDN
189855
190253
  */
189856
190254
  function DocumentType() {
189857
190255
  } DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;
@@ -189865,6 +190263,20 @@ function requireDom () {
189865
190263
  } Entity.prototype.nodeType = ENTITY_NODE;
189866
190264
  _extends(Entity,Node);
189867
190265
 
190266
+ /**
190267
+ * Represents an EntityReference node, serialized as `&nodeName;`.
190268
+ *
190269
+ * `nodeName` is the referenced entity's name, stored verbatim. When serialized with
190270
+ * `requireWellFormed: true`, the serializer validates `nodeName` against the XML `Name` production
190271
+ * and throws a `DOMException` with code `INVALID_STATE_ERR` if it does not match; without that
190272
+ * option the name is emitted verbatim between `&` and `;`.
190273
+ *
190274
+ * Note: xmldom does not expand entities — the parser resolves entity references inline and never
190275
+ * constructs `EntityReference` nodes, so the only producer is `Document.createEntityReference`.
190276
+ *
190277
+ * @class
190278
+ * @see https://www.w3.org/TR/xml/#NT-Name
190279
+ */
189868
190280
  function EntityReference() {
189869
190281
  } EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;
189870
190282
  _extends(EntityReference,Node);
@@ -189902,14 +190314,20 @@ function requireDom () {
189902
190314
  * @returns {string}
189903
190315
  * @throws {DOMException}
189904
190316
  * With code `INVALID_STATE_ERR` when `requireWellFormed` is `true` and:
190317
+ * - an Element's qualified name (including any namespace prefix) is not a valid XML QName,
190318
+ * - an attribute's qualified name (including a synthesized `xmlns:` namespace declaration) is
190319
+ * not a valid XML QName,
189905
190320
  * - a CDATASection node's data contains `"]]>"`,
189906
190321
  * - a Comment node's data contains `"-->"` (bare `"--"` does not throw on this branch),
189907
- * - a ProcessingInstruction's data contains `"?>"`,
190322
+ * - a ProcessingInstruction's target is not a valid XML `NCName` (a `Name` with no colon) or is
190323
+ * an ASCII case-insensitive match for `"xml"`, or its data contains `"?>"`,
190324
+ * - a DocumentType's `name` is not a valid XML `Name` (XML 1.0 production [5]),
189908
190325
  * - a DocumentType's `publicId` is non-empty and does not match the XML `PubidLiteral`
189909
190326
  * production,
189910
190327
  * - a DocumentType's `systemId` is non-empty and does not match the XML `SystemLiteral`
189911
- * production, or
189912
- * - a DocumentType's `internalSubset` contains `"]>"`.
190328
+ * production,
190329
+ * - a DocumentType's `internalSubset` contains `"]>"`, or
190330
+ * - an EntityReference's `nodeName` is not a valid XML `Name` (XML 1.0 production [5]).
189913
190331
  * Note: xmldom does not enforce `readonly` on DocumentType fields — direct property
189914
190332
  * writes succeed and are covered by the serializer-level checks above.
189915
190333
  * @see https://html.spec.whatwg.org/#dom-xmlserializer-serializetostring
@@ -189983,7 +190401,10 @@ function requireDom () {
189983
190401
  * @see https://www.w3.org/TR/xml11/#AVNormalize
189984
190402
  * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes
189985
190403
  */
189986
- function addSerializedAttribute(buf, qualifiedName, value) {
190404
+ function addSerializedAttribute(buf, qualifiedName, value, requireWellFormed) {
190405
+ if (requireWellFormed && !tagNamePattern.test(qualifiedName)) {
190406
+ throw new DOMException(INVALID_STATE_ERR, 'The attribute name "' + qualifiedName + '" is not a valid XML QName');
190407
+ }
189987
190408
  buf.push(' ', qualifiedName, '="', value.replace(/[<>&"\t\n\r]/g, _xmlEncoder), '"');
189988
190409
  }
189989
190410
 
@@ -190049,6 +190470,9 @@ function requireDom () {
190049
190470
  }
190050
190471
  }
190051
190472
 
190473
+ if (requireWellFormed && !tagNamePattern.test(prefixedNodeName)) {
190474
+ throw new DOMException(INVALID_STATE_ERR, 'The element name "' + prefixedNodeName + '" is not a valid XML QName');
190475
+ }
190052
190476
  buf.push('<', prefixedNodeName);
190053
190477
 
190054
190478
  // Build a fresh namespace snapshot for this element's children.
@@ -190068,7 +190492,7 @@ function requireDom () {
190068
190492
  if (needNamespaceDefine(attr, html, childNs)) {
190069
190493
  var attrPrefix = attr.prefix || '';
190070
190494
  var uri = attr.namespaceURI;
190071
- addSerializedAttribute(buf, attrPrefix ? 'xmlns:' + attrPrefix : 'xmlns', uri);
190495
+ addSerializedAttribute(buf, attrPrefix ? 'xmlns:' + attrPrefix : 'xmlns', uri, requireWellFormed);
190072
190496
  childNs.push({ prefix: attrPrefix, namespace: uri });
190073
190497
  }
190074
190498
  // Apply nodeFilter and serialize the attribute.
@@ -190077,7 +190501,7 @@ function requireDom () {
190077
190501
  if (typeof filteredAttr === 'string') {
190078
190502
  buf.push(filteredAttr);
190079
190503
  } else {
190080
- addSerializedAttribute(buf, filteredAttr.name, filteredAttr.value);
190504
+ addSerializedAttribute(buf, filteredAttr.name, filteredAttr.value, requireWellFormed);
190081
190505
  }
190082
190506
  }
190083
190507
  }
@@ -190086,7 +190510,7 @@ function requireDom () {
190086
190510
  if (nodeName === prefixedNodeName && needNamespaceDefine(n, html, childNs)) {
190087
190511
  var nodePrefix = n.prefix || '';
190088
190512
  var uri = n.namespaceURI;
190089
- addSerializedAttribute(buf, nodePrefix ? 'xmlns:' + nodePrefix : 'xmlns', uri);
190513
+ addSerializedAttribute(buf, nodePrefix ? 'xmlns:' + nodePrefix : 'xmlns', uri, requireWellFormed);
190090
190514
  childNs.push({ prefix: nodePrefix, namespace: uri });
190091
190515
  }
190092
190516
 
@@ -190119,7 +190543,7 @@ function requireDom () {
190119
190543
  return { ns: ns.slice(), isHTML: html, tag: null };
190120
190544
 
190121
190545
  case ATTRIBUTE_NODE:
190122
- addSerializedAttribute(buf, n.name, n.value);
190546
+ addSerializedAttribute(buf, n.name, n.value, requireWellFormed);
190123
190547
  return null;
190124
190548
 
190125
190549
  case TEXT_NODE:
@@ -190158,6 +190582,9 @@ function requireDom () {
190158
190582
 
190159
190583
  case DOCUMENT_TYPE_NODE:
190160
190584
  if (requireWellFormed) {
190585
+ if (!tagNamePattern.test(n.name)) {
190586
+ throw new DOMException(INVALID_STATE_ERR, 'The doctype name "' + n.name + '" is not a valid XML Name');
190587
+ }
190161
190588
  if (n.publicId && !/^("[\x20\r\na-zA-Z0-9\-()+,.\/:=?;!*#@$_%']*"|'[\x20\r\na-zA-Z0-9\-()+,.\/:=?;!*#@$_%'"]*')$/.test(n.publicId)) {
190162
190589
  throw new DOMException(INVALID_STATE_ERR, 'DocumentType publicId is not a valid PubidLiteral');
190163
190590
  }
@@ -190189,13 +190616,27 @@ function requireDom () {
190189
190616
  return null;
190190
190617
 
190191
190618
  case PROCESSING_INSTRUCTION_NODE:
190192
- if (requireWellFormed && n.data.indexOf('?>') !== -1) {
190193
- throw new DOMException(INVALID_STATE_ERR, 'The ProcessingInstruction data contains "?>"');
190619
+ if (requireWellFormed) {
190620
+ if (!tagNamePattern.test(n.target) || n.target.indexOf(':') !== -1 || n.target.toLowerCase() === 'xml') {
190621
+ throw new DOMException(
190622
+ INVALID_STATE_ERR,
190623
+ 'The processing instruction target "' + n.target + '" is not a valid XML NCName or is reserved'
190624
+ );
190625
+ }
190626
+ if (n.data.indexOf('?>') !== -1) {
190627
+ throw new DOMException(INVALID_STATE_ERR, 'The ProcessingInstruction data contains "?>"');
190628
+ }
190194
190629
  }
190195
190630
  buf.push('<?', n.target, ' ', n.data, '?>');
190196
190631
  return null;
190197
190632
 
190198
190633
  case ENTITY_REFERENCE_NODE:
190634
+ if (requireWellFormed && !tagNamePattern.test(n.nodeName)) {
190635
+ throw new DOMException(
190636
+ INVALID_STATE_ERR,
190637
+ 'The entity reference name "' + n.nodeName + '" is not a valid XML Name'
190638
+ );
190639
+ }
190199
190640
  buf.push('&', n.nodeName, ';');
190200
190641
  return null;
190201
190642
 
@@ -192576,14 +193017,8 @@ function requireSax () {
192576
193017
  if (hasRequiredSax) return sax;
192577
193018
  hasRequiredSax = 1;
192578
193019
  var NAMESPACE = requireConventions().NAMESPACE;
193020
+ var tagNamePattern = requireConventions().tagNamePattern;
192579
193021
 
192580
- //[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
192581
- //[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
192582
- //[5] Name ::= NameStartChar (NameChar)*
192583
- var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;//\u10000-\uEFFFF
192584
- var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]");
192585
- var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');
192586
- //var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/
192587
193022
  //var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')
192588
193023
 
192589
193024
  //S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE
@@ -192694,7 +193129,13 @@ function requireSax () {
192694
193129
  switch(source.charAt(tagStart+1)){
192695
193130
  case '/':
192696
193131
  var end = source.indexOf('>',tagStart+3);
192697
- var tagName = source.substring(tagStart + 2, end).replace(/[ \t\n\r]+$/g, '');
193132
+ // Anchored trailing-whitespace trim. The former `/[ \t\n\r]+$/g` backtracked
193133
+ // quadratically on a name shaped `whitespace-run + non-whitespace char`
193134
+ // (an end tag `</ … x>`): from every start position it extended `[ws]+`
193135
+ // to the end and then failed the `$` anchor. This anchored form matches the
193136
+ // whole string once and captures everything up to the last non-whitespace
193137
+ // character, so it trims in linear time with byte-identical output.
193138
+ var tagName = source.substring(tagStart + 2, end).replace(/^([\s\S]*?[^ \t\n\r])?[ \t\n\r]*$/, '$1');
192698
193139
  var config = parseStack.pop();
192699
193140
  if(end<0){
192700
193141
 
@@ -192705,6 +193146,14 @@ function requireSax () {
192705
193146
  tagName = tagName.replace(/[\s<].*/,'');
192706
193147
  errorHandler.error("end tag name: "+tagName+' maybe not complete');
192707
193148
  end = tagStart+1+tagName.length;
193149
+ }else if(/[ \t\n\r]/.test(tagName) && tagNamePattern.test(tagName.split(/[ \t\n\r]/)[0])){
193150
+ // The XML `ETag` production is `'</' Name S? '>'`: only optional whitespace may follow
193151
+ // the `Name`. A valid `Name` followed by whitespace and non-whitespace residue (e.g.
193152
+ // `</a\nbogus>` or `</a bogus>`) is not well-formed, but historically it was silently
193153
+ // accepted (the malformed end tag ignored, the residue dropped, the element left on the
193154
+ // stack). Report it as a recoverable `error` (which a custom errorHandler may escalate to
193155
+ // fatal) while keeping the existing recovery so the parsed DOM stays byte-identical.
193156
+ errorHandler.error('end tag name is followed by whitespace and trailing content: "'+tagName+'"');
192708
193157
  }
192709
193158
  var localNSMap = config.localNSMap;
192710
193159
  var endMatch = config.tagName == tagName;
@@ -192828,6 +193277,15 @@ function requireSax () {
192828
193277
  var s = S_TAG;//status
192829
193278
  while(true){
192830
193279
  var c = source.charAt(p);
193280
+ if (s === S_TAG && c === '<') {
193281
+ // A `<` can never occur inside a tag name. Without this guard the scan runs
193282
+ // on to the next `>` (or EOF) before the tag name is rejected, so a document
193283
+ // with many `<` inside a malformed tag makes each one-character recovery step
193284
+ // re-scan to the distant `>` — O(n^2). Stopping at the `<` keeps each recovery
193285
+ // step bounded. The candidate scanned so far is reported raw, consistent with
193286
+ // the sibling invalid-tag-name throw below.
193287
+ throw new Error('unexpected < in tag name: ' + source.slice(start, p));
193288
+ }
192831
193289
  switch(c){
192832
193290
  case '=':
192833
193291
  if(s === S_ATTR){//attrName
@@ -193020,9 +193478,13 @@ function requireSax () {
193020
193478
  if(nsPrefix !== false){//hack!!
193021
193479
  if(localNSMap == null){
193022
193480
  localNSMap = {};
193023
- //console.log(currentNSMap,0)
193024
- _copy(currentNSMap,currentNSMap={});
193025
- //console.log(currentNSMap,1)
193481
+ // Derive the child scope's namespace map by prototype-chain inheritance
193482
+ // instead of a flat copy: lookups inherit ancestor prefixes transparently,
193483
+ // so a document nesting N scopes retains O(N) map entries rather than
193484
+ // sum(1..N) = O(N^2). localNSMap stays a flat own-only record of the
193485
+ // prefixes declared at THIS element, so own-property enumeration
193486
+ // (endPrefixMapping below) still reports only local declarations.
193487
+ currentNSMap = Object.create(currentNSMap);
193026
193488
  }
193027
193489
  currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;
193028
193490
  a.uri = NAMESPACE.XMLNS;
@@ -200061,7 +200523,7 @@ function requireMomentTimezone () {
200061
200523
  hasRequiredMomentTimezone = 1;
200062
200524
  (function (module) {
200063
200525
  //! moment-timezone.js
200064
- //! version : 0.6.2
200526
+ //! version : 0.6.5
200065
200527
  //! Copyright (c) JS Foundation and other contributors
200066
200528
  //! license : MIT
200067
200529
  //! github.com/moment/moment-timezone
@@ -200087,12 +200549,18 @@ function requireMomentTimezone () {
200087
200549
  // return moment;
200088
200550
  // }
200089
200551
 
200090
- var VERSION = "0.6.2",
200552
+ var VERSION = "0.6.5",
200091
200553
  zones = {},
200092
200554
  links = {},
200093
200555
  countries = {},
200094
200556
  names = {},
200095
200557
  guesses = {},
200558
+ parsingInZone = false,
200559
+ parsingNow,
200560
+ parsingNowFunction,
200561
+ hasParsingNow = false,
200562
+ ignoreDefaultZoneForInput,
200563
+ hasIgnoredDefaultZoneInput = false,
200096
200564
  cachedGuess;
200097
200565
 
200098
200566
  if (!moment || typeof moment.version !== 'string') {
@@ -200264,17 +200732,16 @@ function requireMomentTimezone () {
200264
200732
  offsets = this.offsets,
200265
200733
  untils = this.untils,
200266
200734
  max = untils.length - 1,
200267
- offset, offsetNext, offsetPrev, i;
200735
+ offset, offsetNext, i;
200268
200736
 
200269
200737
  for (i = 0; i < max; i++) {
200270
200738
  offset = offsets[i];
200271
200739
  offsetNext = offsets[i + 1];
200272
- offsetPrev = offsets[i ? i - 1 : i];
200273
200740
 
200274
200741
  if (offset < offsetNext && tz.moveAmbiguousForward) {
200275
200742
  offset = offsetNext;
200276
- } else if (offset > offsetPrev && tz.moveInvalidForward) {
200277
- offset = offsetPrev;
200743
+ } else if (offset > offsetNext && tz.moveInvalidForward) {
200744
+ offset = offsetNext;
200278
200745
  }
200279
200746
 
200280
200747
  if (target < untils[i] - (offset * 60000)) {
@@ -200299,6 +200766,15 @@ function requireMomentTimezone () {
200299
200766
  }
200300
200767
  };
200301
200768
 
200769
+ var utcDefaultZone = new Zone();
200770
+ utcDefaultZone._set({
200771
+ name : 'UTC',
200772
+ abbrs : ['UTC'],
200773
+ untils : [Infinity],
200774
+ offsets : [0],
200775
+ population : 0
200776
+ });
200777
+
200302
200778
  /************************************
200303
200779
  Country object
200304
200780
  ************************************/
@@ -200636,6 +201112,85 @@ function requireMomentTimezone () {
200636
201112
  return !!(m._a && (m._tzm === undefined) && !isUnixTimestamp);
200637
201113
  }
200638
201114
 
201115
+ function isObjectInput (input) {
201116
+ var prop;
201117
+
201118
+ if (moment.isMoment(input) || input === null || Object.prototype.toString.call(input) !== '[object Object]') {
201119
+ return false;
201120
+ }
201121
+ if (Object.getOwnPropertyNames) {
201122
+ return Object.getOwnPropertyNames(input).length > 0;
201123
+ }
201124
+ for (prop in input) {
201125
+ if (Object.prototype.hasOwnProperty.call(input, prop)) {
201126
+ return true;
201127
+ }
201128
+ }
201129
+ return false;
201130
+ }
201131
+
201132
+ function parseWithZoneNow (args, name, stringInput) {
201133
+ var savedNow = moment.now,
201134
+ savedDefaultZone = moment.defaultZone,
201135
+ savedParsingInZone = parsingInZone,
201136
+ savedParsingNow = parsingNow,
201137
+ savedParsingNowFunction = parsingNowFunction,
201138
+ savedHasParsingNow = hasParsingNow,
201139
+ now,
201140
+ hasNow = false,
201141
+ zonedNow,
201142
+ wallNow,
201143
+ parsedDateParts,
201144
+ out;
201145
+
201146
+ if (!parsingInZone) {
201147
+ parsingNow = undefined;
201148
+ parsingNowFunction = savedNow;
201149
+ hasParsingNow = false;
201150
+ }
201151
+ parsingInZone = true;
201152
+ moment.now = function () {
201153
+ if (!hasNow) {
201154
+ if (!hasParsingNow) {
201155
+ parsingNow = parsingNowFunction.call(moment);
201156
+ hasParsingNow = true;
201157
+ }
201158
+ now = parsingNow;
201159
+ hasNow = true;
201160
+ zonedNow = moment.tz(now, name);
201161
+ wallNow = zonedNow.valueOf() + zonedNow.utcOffset() * 60000;
201162
+ }
201163
+ return wallNow;
201164
+ };
201165
+ if (stringInput) {
201166
+ moment.defaultZone = utcDefaultZone;
201167
+ }
201168
+ try {
201169
+ out = moment.utc.apply(null, args);
201170
+ if (stringInput && hasNow && out._a && out._tzm !== undefined) {
201171
+ parsedDateParts = out.parsingFlags().parsedDateParts;
201172
+ if (!parsedDateParts || parsedDateParts[0] == null || parsedDateParts[1] == null || parsedDateParts[2] == null) {
201173
+ moment.now = function () {
201174
+ return now;
201175
+ };
201176
+ moment.defaultZone = savedDefaultZone;
201177
+ out = moment.utc.apply(null, args);
201178
+ }
201179
+ }
201180
+ } finally {
201181
+ moment.now = savedNow;
201182
+ moment.defaultZone = savedDefaultZone;
201183
+ parsingInZone = savedParsingInZone;
201184
+ if (!savedParsingInZone) {
201185
+ parsingNow = savedParsingNow;
201186
+ parsingNowFunction = savedParsingNowFunction;
201187
+ hasParsingNow = savedHasParsingNow;
201188
+ }
201189
+ }
201190
+
201191
+ return out;
201192
+ }
201193
+
200639
201194
  function logError (message) {
200640
201195
  if (typeof console !== 'undefined' && typeof console.error === 'function') {
200641
201196
  console.error(message);
@@ -200649,10 +201204,13 @@ function requireMomentTimezone () {
200649
201204
  function tz (input) {
200650
201205
  var args = Array.prototype.slice.call(arguments, 0, -1),
200651
201206
  name = arguments[arguments.length - 1],
200652
- out = moment.utc.apply(null, args),
200653
- zone;
201207
+ objectInput = isObjectInput(input),
201208
+ stringInput = args.length > 0 && typeof input === 'string',
201209
+ zone = objectInput || stringInput ? getZone(name) : null,
201210
+ out = objectInput && zone ? parseWithZoneNow(args, name) :
201211
+ stringInput && zone ? parseWithZoneNow(args, name, true) : moment.utc.apply(null, args);
200654
201212
 
200655
- if (!moment.isMoment(input) && needsOffset(out) && (zone = getZone(name))) {
201213
+ if (!moment.isMoment(input) && needsOffset(out) && (zone || (!objectInput && (zone = getZone(name))))) {
200656
201214
  out.add(zone.parse(out), 'minutes');
200657
201215
  }
200658
201216
 
@@ -200692,10 +201250,49 @@ function requireMomentTimezone () {
200692
201250
  moment.tz = tz;
200693
201251
 
200694
201252
  moment.defaultZone = null;
201253
+ var momentGetDefaultDateParts = moment._getDefaultDateParts;
201254
+ if (momentGetDefaultDateParts) {
201255
+ moment._getDefaultDateParts = function (config, now, forWeek) {
201256
+ var zone = moment.defaultZone,
201257
+ zonedNow,
201258
+ dateParts,
201259
+ savedIgnoredInput,
201260
+ savedHasIgnoredInput;
201261
+ forWeek = forWeek || config._isDefaultDatePartsForWeek;
201262
+
201263
+ if (parsingInZone && config._tzm === undefined) {
201264
+ zonedNow = new Date(now);
201265
+ return [zonedNow.getUTCFullYear(), zonedNow.getUTCMonth(), zonedNow.getUTCDate()];
201266
+ }
201267
+
201268
+ if (zone && !config._useUTC && config._tzm === undefined) {
201269
+ zonedNow = new Date(now - zone.utcOffset(now) * 60000);
201270
+ return [zonedNow.getUTCFullYear(), zonedNow.getUTCMonth(), zonedNow.getUTCDate()];
201271
+ }
201272
+
201273
+ if (forWeek && (config._useUTC || config._tzm !== undefined)) {
201274
+ savedIgnoredInput = ignoreDefaultZoneForInput;
201275
+ savedHasIgnoredInput = hasIgnoredDefaultZoneInput;
201276
+ ignoreDefaultZoneForInput = now;
201277
+ hasIgnoredDefaultZoneInput = true;
201278
+ try {
201279
+ dateParts = momentGetDefaultDateParts.call(this, config, now, forWeek);
201280
+ } finally {
201281
+ ignoreDefaultZoneForInput = savedIgnoredInput;
201282
+ hasIgnoredDefaultZoneInput = savedHasIgnoredInput;
201283
+ }
201284
+ return dateParts;
201285
+ }
201286
+
201287
+ return momentGetDefaultDateParts.call(this, config, now, forWeek);
201288
+ };
201289
+ }
200695
201290
 
200696
201291
  moment.updateOffset = function (mom, keepTime) {
200697
- var zone = moment.defaultZone,
200698
- offset;
201292
+ var zone = hasIgnoredDefaultZoneInput && ignoreDefaultZoneForInput === mom._i ? null : moment.defaultZone,
201293
+ offset,
201294
+ localTimestamp,
201295
+ normalizedTimestamp;
200699
201296
 
200700
201297
  if (mom._z === undefined) {
200701
201298
  if (zone && needsOffset(mom) && !mom._isUTC && mom.isValid()) {
@@ -200706,6 +201303,20 @@ function requireMomentTimezone () {
200706
201303
  }
200707
201304
  if (mom._z) {
200708
201305
  offset = mom._z.utcOffset(mom);
201306
+ if (keepTime) {
201307
+ // Resolve local times inside a forward gap using the configured
201308
+ // invalid-input policy before applying the new offset.
201309
+ localTimestamp = mom._d.valueOf();
201310
+ if (!mom._isUTC) {
201311
+ localTimestamp -= mom._d.getTimezoneOffset() * 60000;
201312
+ }
201313
+ if (mom._z.utcOffset(localTimestamp + offset * 60000) !== offset) {
201314
+ offset = mom._z.parse(localTimestamp);
201315
+ localTimestamp += offset * 60000;
201316
+ offset = mom._z.utcOffset(localTimestamp);
201317
+ normalizedTimestamp = localTimestamp - offset * 60000;
201318
+ }
201319
+ }
200709
201320
  if (Math.abs(offset) < 16) {
200710
201321
  offset = offset / 60;
200711
201322
  }
@@ -200716,6 +201327,9 @@ function requireMomentTimezone () {
200716
201327
  } else {
200717
201328
  mom.zone(offset, keepTime);
200718
201329
  }
201330
+ if (normalizedTimestamp != null) {
201331
+ mom._d.setTime(normalizedTimestamp);
201332
+ }
200719
201333
  }
200720
201334
  };
200721
201335