@sapui5/sap.ui.export 1.96.2 → 1.97.0

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.ui.export",
3
- "version": "1.96.2",
3
+ "version": "1.97.0",
4
4
  "description": "SAPUI5 Library sap.ui.export",
5
5
  "homepage": "https://sap.github.io/ui5-tooling/pages/SAPUI5/",
6
6
  "author": "SAP SE (https://www.sap.com)",
@@ -5,7 +5,7 @@
5
5
  <vendor>SAP SE</vendor>
6
6
  <copyright>SAPUI5
7
7
  * (c) Copyright 2009-2021 SAP SE. All rights reserved.</copyright>
8
- <version>1.96.2</version>
8
+ <version>1.97.0</version>
9
9
 
10
10
  <documentation>UI5 library: sap.ui.export</documentation>
11
11
 
@@ -15,7 +15,7 @@ sap.ui.define([
15
15
  * @constructor The <code>sap.ui.export.ExportBase</code> class allows you to export table data from a UI5 application to a Portable Document Format (*.PDF) file.
16
16
  *
17
17
  * @author SAP SE
18
- * @version 1.96.2
18
+ * @version 1.97.0
19
19
  *
20
20
  * @since 1.96
21
21
  * @name sap.ui.export.ExportBase
@@ -25,7 +25,8 @@ sap.ui.define([
25
25
  ], function(coreLibrary, mLibrary, library, Core, Log, uid, Item, syncStyleClass, JSONModel, Button, CheckBox, Dialog, Input, Label, Select, Text, VBox, VersionInfo, openWindow) {
26
26
  'use strict';
27
27
 
28
- /*global Blob, MouseEvent, FileReader, URL */
28
+ // eslint-disable-next-line
29
+ /* global Blob, MouseEvent, FileReader, URL */
29
30
 
30
31
  // Shortcuts
31
32
  var ButtonType = mLibrary.ButtonType;
@@ -93,7 +94,7 @@ sap.ui.define([
93
94
  * Utilities related to export to enable reuse in integration scenarios (e.g. tables).
94
95
  *
95
96
  * @author SAP SE
96
- * @version 1.96.2
97
+ * @version 1.97.0
97
98
  *
98
99
  * @since 1.59
99
100
  * @name sap.ui.export.ExportUtils
@@ -130,6 +131,17 @@ sap.ui.define([
130
131
  return sUrl;
131
132
  },
132
133
 
134
+ /**
135
+ * Ensures that the URL is absolute, so that it can
136
+ * be used within a Web Worker.
137
+ *
138
+ * @param {string} url Relative URL that needs to be processed for Web Worker usage
139
+ * @returns {string|any} Returns the absolute URL or the original value in case there is no URL provided
140
+ */
141
+ normalizeUrl: function(url) {
142
+ return url ? new URL(url, document.baseURI).toString() : url;
143
+ },
144
+
133
145
  /**
134
146
  * Creates the Export settings dialog that can be used for configuring the spreadsheet before exporting.
135
147
  *
@@ -198,6 +210,8 @@ sap.ui.define([
198
210
  labelFor: sDialogId + '-fileType',
199
211
  visible: !!bDevMode
200
212
  }),
213
+ // sap.m.Select control disabled as there is only 1 option for now
214
+ // control must be enabled when more file types are supported
201
215
  new Select({
202
216
  id: sDialogId + '-fileType',
203
217
  width: '100%',
@@ -276,7 +290,7 @@ sap.ui.define([
276
290
  * Combines the filter operator with the value and
277
291
  * creates a textual representation.
278
292
  *
279
- * @param oFilter {Object} A single filter object according to ListBinding#getFilterInfo
293
+ * @param {Object} oFilter A single filter object according to ListBinding#getFilterInfo
280
294
  * @returns {string} Textual representation of the filter operation and value
281
295
  * @private
282
296
  */
@@ -306,7 +320,7 @@ sap.ui.define([
306
320
  /**
307
321
  * Parse filter tree recursively.
308
322
  *
309
- * @param oFilter {Object} Filter configuration according to ListBinding#getFilterInfo
323
+ * @param {Object} oFilter Filter configuration according to ListBinding#getFilterInfo
310
324
  * @returns {Array} Array of filter entries
311
325
  * @private
312
326
  */
@@ -329,7 +343,7 @@ sap.ui.define([
329
343
  * Parses a logical filter and concatenates all
330
344
  * subsequent filters.
331
345
  *
332
- * @param oLogicalFilter {Object} Filter object according to ListBinding#getFilterInfo
346
+ * @param {Object} oLogicalFilter Filter object according to ListBinding#getFilterInfo
333
347
  * @returns {Array} Array containing all filter settings
334
348
  * @private
335
349
  */
@@ -370,7 +384,7 @@ sap.ui.define([
370
384
  * Parses a binary filter and returns an Array that
371
385
  * contains this explicit filter item.
372
386
  *
373
- * @param oBinaryFilter {Object} Filter object according to ListBinding#getFilterInfo
387
+ * @param {Object} oBinaryFilter Filter object according to ListBinding#getFilterInfo
374
388
  * @returns {Array} Array containing this explicit filter setting
375
389
  * @private
376
390
  */
@@ -390,7 +404,7 @@ sap.ui.define([
390
404
  * Parses an unary filter and returns a modified
391
405
  * subsequent filter.
392
406
  *
393
- * @param oUnaryFilter {Object} Filter object according to ListBinding#getFilterInfo
407
+ * @param {Object} oUnaryFilter Filter object according to ListBinding#getFilterInfo
394
408
  * @returns {Array} Array containing the modified subsequent filter
395
409
  * @private
396
410
  */
@@ -411,7 +425,7 @@ sap.ui.define([
411
425
  * Parses an call filter and returns an Array containing
412
426
  * this particular filter configuration.
413
427
  *
414
- * @param oCallFilter {Object} Filter object according to ListBinding#getFilterInfo
428
+ * @param {Object} oCallFilter Filter object according to ListBinding#getFilterInfo
415
429
  * @returns {Array} Array containing this explicit filter setting
416
430
  * @private
417
431
  */
@@ -432,11 +446,8 @@ sap.ui.define([
432
446
  * configuration in a format that can be attached to
433
447
  * a sap.ui.export.Spreadsheet instance.
434
448
  *
435
- * @param oBinding {sap.ui.model.ListBinding | sap.ui.model.TreeBinding}
436
- * ListBinding or TreeBinding instance
437
- *
438
- * @param fnCallback {function}
439
- * Callback function that is used to resolve the columns names according to their property.
449
+ * @param {sap.ui.model.ListBinding | sap.ui.model.TreeBinding} oBinding ListBinding or TreeBinding instance
450
+ * @param {function} fnCallback Callback function that is used to resolve the columns names according to their property
440
451
  *
441
452
  * @returns {Promise}
442
453
  * Promise, which resolves with an object containing a name
@@ -653,8 +664,19 @@ sap.ui.define([
653
664
  mDataSource.count = mDataSource.data.length;
654
665
  }
655
666
 
656
- if (mDataSource.type === 'odata' && (typeof mDataSource.dataUrl !== 'string' || mDataSource.dataUrl.length === 0)) {
657
- throw new Error(CLASS_NAME + ': Unable to export data. No dataUrl provided.');
667
+ if (mDataSource.type === 'odata') {
668
+ if (typeof mDataSource.dataUrl !== 'string' || mDataSource.dataUrl.length === 0) {
669
+ throw new Error(CLASS_NAME + ': Unable to export data. No dataUrl provided.');
670
+ }
671
+
672
+ // Ensure absolute URLs for dataUrl and serviceUrl
673
+ if (mDataSource.dataUrl) {
674
+ mDataSource.dataUrl = Utils.normalizeUrl(mDataSource.dataUrl);
675
+ }
676
+
677
+ if (mDataSource.serviceUrl) {
678
+ mDataSource.serviceUrl = Utils.normalizeUrl(mDataSource.serviceUrl);
679
+ }
658
680
  }
659
681
 
660
682
  if (typeof mDataSource.count !== 'number' || mDataSource.count < 0 || isNaN(mDataSource.count) || mDataSource.count % 1 !== 0) {
@@ -889,7 +911,7 @@ sap.ui.define([
889
911
  *
890
912
  * @param {Object} oContext Context object
891
913
  * @param {string} [oContext.application] Name of the application (default: "SAP UI5")
892
- * @param {string} [oContext.version] Application version (default: "1.96.2")
914
+ * @param {string} [oContext.version] Application version (default: "1.97.0")
893
915
  * @param {string} [oContext.title] Title that will be written to the file (NOT the filename)
894
916
  * @param {string} [oContext.modifiedBy] Optional user context that will be written to the file
895
917
  * @param {string} [oContext.sheetName] Name of the data sheet - Maximum length of 31 characters
@@ -993,7 +1015,7 @@ sap.ui.define([
993
1015
  * @param {Object} oCustomizing General export customizing
994
1016
  * @param {Object} oCustomizing.currency Currency specific customizing
995
1017
  * @param {Object} oCustomizing.unit Unit of measure specific customizing
996
- * @param {string} sProperty Name of the property
1018
+ * @param {string} sProperty Key property of the specific customizing setting
997
1019
  * @private
998
1020
  */
999
1021
  _validateScaleCustomizing: function(oCustomizing, sProperty) {
@@ -16,7 +16,7 @@ sap.ui.define([
16
16
  * @constructor The <code>sap.ui.export.PortableDocument</code> class allows you to export table data from a UI5 application to a Portable Document Format (*.PDF) file.
17
17
  *
18
18
  * @author SAP SE
19
- * @version 1.96.2
19
+ * @version 1.97.0
20
20
  *
21
21
  * @since 1.96
22
22
  * @name sap.ui.export.PortableDocument
@@ -96,19 +96,27 @@ sap.ui.define([
96
96
  */
97
97
  if (typeof oBinding.getDownloadUrl === 'function') {
98
98
  var oModel = oBinding.getModel(),
99
- sDataUrl = ExportUtils.interceptUrl(oBinding.getDownloadUrl('json')),
99
+ sDataUrl = ExportUtils.interceptUrl(oBinding.getDownloadUrl('pdf')),
100
100
  sServiceUrl = ExportUtils.interceptUrl(oModel.sServiceUrl),
101
101
  bV4ODataModel = oModel.isA('sap.ui.model.odata.v4.ODataModel');
102
102
 
103
103
  var oDataUrl = new URL(sDataUrl, document.baseURI);
104
104
  oDataUrl.hash = '';
105
- oDataUrl.search = '';
105
+
106
+ // Reference the Model for later use
107
+ this._oModel = oModel;
108
+ this._oModel.setUseBatch(false);
109
+
110
+ /* Remove $format system query option because it would overwrite the "Accept" header */
111
+ oDataUrl.search = oDataUrl.search.split('&').filter(function(val) {
112
+ return val.indexOf('$format') == -1;
113
+ }).join('&');
106
114
 
107
115
  oDataSource = {
108
116
  type: 'odata',
109
117
  version: bV4ODataModel ? 4 : 2,
110
118
  dataUrl: oDataUrl.toString(),
111
- serviceUrl: sServiceUrl.split('/').slice(0, -4).join("/") + "/iwbep/common/0001/", // Requires the serviceUrl to end with a /
119
+ serviceUrl: sServiceUrl.split('/').slice(0, -5).join('/') + '/default/iwbep/common/0001/', // Requires the serviceUrl to end with a /
112
120
  headers: bV4ODataModel ? oModel.getHttpHeaders(true) : oModel.getHeaders()
113
121
  };
114
122
  }
@@ -134,6 +142,10 @@ sap.ui.define([
134
142
  "Orientation": "LANDSCAPE",
135
143
  "FontSize": 12
136
144
  },
145
+ "Signature": {
146
+ "DoSign": true,
147
+ "Reason": ""
148
+ },
137
149
  "CoverPage": [],
138
150
  "TableColumns": []
139
151
  };
@@ -161,7 +173,7 @@ sap.ui.define([
161
173
  /* Add columns */
162
174
  oWorkbook.columns.forEach(function(oColumn){
163
175
  oDocumentDescription["TableColumns"].push({
164
- "Name": oColumn.property,
176
+ "Name": Array.isArray(oColumn.property) ? oColumn.property[0] : oColumn.property,
165
177
  "Header": oColumn.label
166
178
  });
167
179
  });
@@ -169,6 +181,33 @@ sap.ui.define([
169
181
  return oDocumentDescription;
170
182
  };
171
183
 
184
+ /**
185
+ * Returns the name of the EntitySet that is being used with the given OData version.
186
+ *
187
+ * @param {Object} mDataSource DataSource object containing information about OData version
188
+ * @returns {string} Name of the EntitySet according to the OData version
189
+ */
190
+ PortableDocument.prototype._getEntitySetName = function(mDataSource) {
191
+ var version = mDataSource && mDataSource.version || 2; // Use OData V2 by default
192
+
193
+ return version == 4 ? 'MyDocumentDescriptions' : 'SAP__MyDocumentDescriptions';
194
+ };
195
+
196
+ /**
197
+ * Returns the specific ODataModel that is being used for binding to the DocumentDescription EntitySet
198
+ *
199
+ * @param {Object} oDataSource DataSource settings of the export configuration
200
+ * @returns {ODataModel} ODataModel, either V2 or V4.
201
+ */
202
+ PortableDocument.prototype._getModel = function(oDataSource) {
203
+ var version = oDataSource.version || 2;
204
+
205
+ return version === 4 ? new ODataModel({
206
+ serviceUrl: oDataSource.serviceUrl,
207
+ synchronizationMode: 'None'
208
+ }) : this._oModel;
209
+ };
210
+
172
211
  /**
173
212
  * Applies default settings to the export configuration.
174
213
  *
@@ -191,31 +230,65 @@ sap.ui.define([
191
230
  });
192
231
  };
193
232
 
194
- PortableDocument.prototype.createBuildPromise = function(mSettings) {
195
- var that = this;
196
- return new Promise(function(fnResolve, fnReject) {
197
- var oBinding, oDocumentDescription, oModel;
233
+ /**
234
+ * Sends a POST request to the GW service which creates the
235
+ * DocumentDescription. The corresponding Id is assigned by
236
+ * the backend and passed to the event handler functions.
237
+ *
238
+ * @param {Object} oDocumentDescription DocumentDescription instance that is being created
239
+ * @param {Object} oDataSource DataSource settings of the export configuration
240
+ * @param {function} fnSuccess Success handler function
241
+ * @param {function} fnError Error handler function
242
+ */
243
+ PortableDocument.prototype.postDocumentDescription = function(oDocumentDescription, oDataSource, fnSuccess, fnError) {
244
+ var oBinding, oModel, sPath;
198
245
 
199
- oDocumentDescription = that._createDocumentDescription(mSettings.workbook);
246
+ oModel = this._getModel(oDataSource);
247
+ sPath = '/' + this._getEntitySetName(oDataSource);
200
248
 
201
- /* Create COMMON service model and bind to MyDocumentDescription entity */
202
- oModel = new ODataModel({
203
- serviceUrl: mSettings.dataSource.serviceUrl,
204
- synchronizationMode: 'None'
205
- });
249
+ if (!oModel || !oModel.isA(['sap.ui.model.odata.v4.ODataModel', 'sap.ui.model.odata.v2.ODataModel'])) {
250
+ fnError('Unsupported Model');
251
+ }
252
+
253
+ if (oModel.isA('sap.ui.model.odata.v4.ODataModel')) {
254
+ oBinding = oModel.bindList(sPath);
206
255
 
207
- oBinding = oModel.bindList('/MyDocumentDescriptions');
208
256
  oBinding.attachCreateCompleted(function(oEvent) {
209
257
  var success = oEvent.getParameter('success');
210
258
 
211
259
  if (success) {
212
- fnResolve(oEvent.getParameter('context').getObject()['Id']);
260
+ fnSuccess(oEvent.getParameter('context').getObject()['Id']);
213
261
  } else {
214
- fnReject();
262
+ fnError();
215
263
  }
216
264
  });
217
265
 
218
266
  oBinding.create(oDocumentDescription);
267
+ } else {
268
+ oModel.create(sPath, oDocumentDescription, {
269
+ success: function(oData) {
270
+ fnSuccess(oData['Id']);
271
+ },
272
+ error: fnError
273
+ });
274
+ }
275
+ };
276
+
277
+ /**
278
+ * Triggers the export process and returns a Promise the
279
+ * gets resolved as soon as the export is finished.
280
+ *
281
+ * @param {Object} mSettings Export settings
282
+ * @returns {Promise} Promise that is being resolved as soon as the PDF export is finished
283
+ */
284
+ PortableDocument.prototype.createBuildPromise = function(mSettings) {
285
+ var that = this;
286
+
287
+ return new Promise(function(fnResolve, fnReject) {
288
+ var oDocumentDescription;
289
+
290
+ oDocumentDescription = that._createDocumentDescription(mSettings.workbook);
291
+ that.postDocumentDescription(oDocumentDescription, mSettings.dataSource, fnResolve, fnReject);
219
292
 
220
293
  }).then(function(sDocumentDescriptionId) {
221
294
  return that.sendRequest(mSettings.dataSource.dataUrl, sDocumentDescriptionId).then(function(response) {
@@ -280,5 +353,19 @@ sap.ui.define([
280
353
  }
281
354
  };
282
355
 
356
+ /**
357
+ * Cleans up the internal structures and removes all event handlers.
358
+ *
359
+ * The object must not be used anymore after destroy was called.
360
+ *
361
+ * @see sap.ui.export.ExportBase#destroy
362
+ * @public
363
+ */
364
+ PortableDocument.prototype.destroy = function() {
365
+ ExportBase.prototype.destroy.apply(this, arguments);
366
+
367
+ this._oModel = null;
368
+ };
369
+
283
370
  return PortableDocument;
284
371
  });
@@ -15,6 +15,7 @@ sap.ui.define([
15
15
  function(Core, ExportDialog, ExportBase, Device, SpreadsheetExport, Log, ExportUtils) {
16
16
  'use strict';
17
17
 
18
+ // eslint-disable-next-line
18
19
  /* global Blob */
19
20
 
20
21
  var CLASS_NAME = 'sap.ui.export.Spreadsheet';
@@ -82,7 +83,7 @@ sap.ui.define([
82
83
  * <li><code>workbook.context</code> - Context object that will be applied to the generated file. It may contain the following fields:</li>
83
84
  * <ul>
84
85
  * <li><code>application</code> (string) - The application that creates the XLSX document (default: "SAP UI5")</li>
85
- * <li><code>version</code> (string) - Application version that creates the XLSX document (default: "1.96.2")</li>
86
+ * <li><code>version</code> (string) - Application version that creates the XLSX document (default: "1.97.0")</li>
86
87
  * <li><code>title</code> (string) - Title of the XLSX document (NOT the filename)</li>
87
88
  * <li><code>modifiedBy</code> (string) - User context for the XLSX document</li>
88
89
  * <li><code>sheetName</code> (string) - The label of the data sheet</li>
@@ -165,7 +166,7 @@ sap.ui.define([
165
166
  * columns: aColumns,
166
167
  * context: {
167
168
  * application: 'Debug Test Application',
168
- * version: '1.96.2',
169
+ * version: '1.97.0',
169
170
  * title: 'Some random title',
170
171
  * modifiedBy: 'John Doe',
171
172
  * metaSheetName: 'Custom metadata',
@@ -277,7 +278,7 @@ sap.ui.define([
277
278
  * @constructor The <code>sap.ui.export.Spreadsheet</code> class allows you to export table data from a UI5 application to a spreadsheet file.
278
279
  *
279
280
  * @author SAP SE
280
- * @version 1.96.2
281
+ * @version 1.97.0
281
282
  *
282
283
  * @since 1.50
283
284
  * @name sap.ui.export.Spreadsheet
@@ -7,8 +7,10 @@
7
7
  * Spreadsheet export utility
8
8
  * @private
9
9
  */
10
- sap.ui.define(['jquery.sap.global', 'sap/base/Log', 'sap/ui/Device'], function(jQuery, Log, Device) {
10
+ sap.ui.define(['sap/base/Log', 'sap/ui/export/ExportUtils'], function(Log, ExportUtils) {
11
11
  'use strict';
12
+
13
+ // eslint-disable-next-line
12
14
  /* global Blob, URL, Worker, MessageEvent */
13
15
 
14
16
  var LIB_PROVIDER = 'sap/ui/export/provider/DataProviderBase',
@@ -20,204 +22,190 @@ sap.ui.define(['jquery.sap.global', 'sap/base/Log', 'sap/ui/Device'], function(j
20
22
  *
21
23
  * @class Utility class to perform spreadsheet export
22
24
  * @author SAP SE
23
- * @version 1.96.2
25
+ * @version 1.97.0
24
26
  * @static
25
27
  *
26
28
  * @private
27
29
  * @since 1.50.0
28
30
  */
31
+ var SpreadsheetExport = {
29
32
 
30
- function doExport(mParams, fnCallback) {
33
+ execute: function(mParams, fnCallback) {
31
34
 
32
- function postMessage(oMessage) {
35
+ function postMessage(oMessage) {
33
36
 
34
- // Harmonize message handling between worker and in process export
35
- if (oMessage instanceof MessageEvent && oMessage.data) {
36
- oMessage = oMessage.data;
37
- }
38
- return fnCallback && fnCallback(oMessage);
39
- }
37
+ // Harmonize message handling between worker and in process export
38
+ if (oMessage instanceof MessageEvent && oMessage.data) {
39
+ oMessage = oMessage.data;
40
+ }
40
41
 
41
- function onProgress(iFetched, iTotal) {
42
- postMessage({
43
- progress: true,
44
- fetched: iFetched || 0,
45
- total: iTotal || 0
46
- });
47
- }
42
+ if (typeof fnCallback === 'function') {
43
+ fnCallback(oMessage);
44
+ }
45
+ }
48
46
 
49
- function onError(error) {
50
- postMessage({ error: error.message || error });
51
- }
47
+ function onProgress(iFetched, iTotal) {
48
+ postMessage({
49
+ progress: true,
50
+ fetched: iFetched || 0,
51
+ total: iTotal || 0
52
+ });
53
+ }
52
54
 
53
- function onFinish(oArrayBuffer) {
54
- postMessage({ finished: true, spreadsheet: oArrayBuffer });
55
- }
55
+ function onError(error) {
56
+ postMessage({ error: error.message || error });
57
+ }
56
58
 
57
- // Export directly from an array in memory.
58
- // TBD: convert dates as in exportUtils
59
- function exportArray() {
60
- var oSpreadsheet;
61
- var fnConvertData;
62
-
63
- function start(DataProvider, XLSXBuilder) {
64
- fnConvertData = DataProvider.getDataConverter(mParams);
65
- oSpreadsheet =
66
- new XLSXBuilder(mParams.workbook.columns, mParams.workbook.context, mParams.workbook.hierarchyLevel, mParams.customizing);
67
-
68
- var aData = mParams.dataSource.data || [];
69
- var iCount = aData.length;
70
- var aRows = fnConvertData(aData.slice());
71
- oSpreadsheet.append(aRows);
72
- onProgress(iCount, iCount);
73
- oSpreadsheet.build().then(onFinish);
59
+ function onFinish(oArrayBuffer) {
60
+ postMessage({ finished: true, spreadsheet: oArrayBuffer });
74
61
  }
75
62
 
76
- // Load libraries and start export
77
- sap.ui.require([LIB_PROVIDER, LIB_BUILDER, LIB_JSZIP3], start);
63
+ // Export directly from an array in memory.
64
+ // TBD: convert dates as in exportUtils
65
+ function exportArray() {
66
+ var oSpreadsheet;
67
+ var fnConvertData;
68
+
69
+ function start(DataProvider, XLSXBuilder) {
70
+ fnConvertData = DataProvider.getDataConverter(mParams);
71
+ oSpreadsheet =
72
+ new XLSXBuilder(mParams.workbook.columns, mParams.workbook.context, mParams.workbook.hierarchyLevel, mParams.customizing);
73
+
74
+ var aData = mParams.dataSource.data || [];
75
+ var iCount = aData.length;
76
+ var aRows = fnConvertData(aData.slice());
77
+ oSpreadsheet.append(aRows);
78
+ onProgress(iCount, iCount);
79
+ oSpreadsheet.build().then(onFinish);
80
+ }
78
81
 
79
- return {cancel: onFinish};
80
- }
82
+ // Load libraries and start export
83
+ sap.ui.require([LIB_PROVIDER, LIB_BUILDER, LIB_JSZIP3], start);
81
84
 
82
- // make URL absolute
83
- function normalizeUrl(url) {
84
- if (!url) {
85
- return url;
85
+ return {cancel: onFinish};
86
86
  }
87
87
 
88
- try {
89
- return new URL(url, document.baseURI).toString();
90
- } catch (error) {
91
- // Fallback solution if native URL class is not supported
92
- return window.URI(url).absoluteTo(document.baseURI).toString();
93
- }
94
- }
88
+ function exportInProcess() {
89
+ var oSpreadsheet, oRequest;
95
90
 
96
- function exportInProcess() {
97
- var oSpreadsheet, oRequest;
91
+ function start(DataProvider, XLSXBuilder) {
92
+ var provider = new DataProvider(mParams);
98
93
 
99
- function start(DataProvider, XLSXBuilder) {
100
- var provider = new DataProvider(mParams);
94
+ oSpreadsheet =
95
+ new XLSXBuilder(mParams.workbook.columns, mParams.workbook.context, mParams.workbook.hierarchyLevel, mParams.customizing);
96
+ oRequest = provider.requestData(processCallback);
97
+ }
101
98
 
102
- oSpreadsheet =
103
- new XLSXBuilder(mParams.workbook.columns, mParams.workbook.context, mParams.workbook.hierarchyLevel, mParams.customizing);
104
- oRequest = provider.requestData(processCallback);
105
- }
99
+ function processCallback(oMessage) {
106
100
 
107
- function processCallback(oMessage) {
101
+ if (oMessage.error || typeof oMessage.error === 'string') {
102
+ onError(oMessage.error);
103
+ return;
104
+ }
108
105
 
109
- if (oMessage.error || typeof oMessage.error === 'string') {
110
- return onError(oMessage.error);
111
- }
106
+ oSpreadsheet.append(oMessage.rows);
107
+ onProgress(oMessage.fetched, oMessage.total);
112
108
 
113
- oSpreadsheet.append(oMessage.rows);
114
- onProgress(oMessage.fetched, oMessage.total);
109
+ if (oMessage.finished) {
110
+ oSpreadsheet.build().then(onFinish);
111
+ }
112
+ }
115
113
 
116
- if (oMessage.finished) {
117
- oSpreadsheet.build().then(onFinish);
114
+ function cancel() {
115
+ oRequest.cancel();
116
+ onFinish();
118
117
  }
119
- }
120
118
 
121
- function cancel() {
122
- oRequest.cancel();
123
- onFinish();
119
+ // Load libraries and start export
120
+ sap.ui.require([LIB_PROVIDER, LIB_BUILDER, LIB_JSZIP3], start);
121
+
122
+ return {cancel: cancel};
124
123
  }
125
124
 
126
- // Load libraries and start export
127
- sap.ui.require([LIB_PROVIDER, LIB_BUILDER, LIB_JSZIP3], start);
125
+ function exportInWorker() {
126
+ var spreadsheetWorker;
127
+ var workerParams = {};
128
128
 
129
- return {cancel: cancel};
130
- }
129
+ var fnCancel = function() {
130
+ spreadsheetWorker.postMessage({ cancel: true });
131
+ onFinish();
132
+ };
131
133
 
132
- function exportInWorker() {
133
- var spreadsheetWorker;
134
- var params = jQuery.extend(true, {}, mParams);
135
- var workerParams = typeof params.worker === 'object' ? params.worker : {};
134
+ function createWorker(url) {
135
+ var worker = new Worker(url);
136
+ worker.onmessage = postMessage;
136
137
 
137
- var fnCancel = function() {
138
- spreadsheetWorker.postMessage({ cancel: true });
139
- onFinish();
140
- };
138
+ // Skips error handling if fired in Firefox with cross origin
139
+ if (navigator.userAgent.indexOf("Firefox") === -1 || isSameOrigin(url)) {
140
+ worker.onerror = onError;
141
+ }
141
142
 
142
- function createWorker(url) {
143
- var worker = new Worker(url);
144
- worker.onmessage = postMessage;
143
+ worker.postMessage(mParams);
145
144
 
146
- // Skips error handling if fired in Firefox with cross origin
147
- if (navigator.userAgent.indexOf("Firefox") === -1 || isSameOrigin(url)) {
148
- worker.onerror = onError;
145
+ return worker;
149
146
  }
150
147
 
151
- worker.postMessage(params);
148
+ function isSameOrigin(url) {
149
+ return url.indexOf(window.location.host) > 0
150
+ || /^[^/]+\/[^/].*$|^\/[^/].*$/i.test(url); //check for relative address
151
+ }
152
152
 
153
- return worker;
154
- }
153
+ function blobWorker() {
154
+ var sBlobCode, oBlobURL;
155
155
 
156
- function isSameOrigin(url) {
157
- return url.indexOf(window.location.host) > 0
158
- || /^[^/]+\/[^/].*$|^\/[^/].*$/i.test(url); //check for relative address
159
- }
156
+ Log.warning('Direct worker is not allowed. Load the worker via blob.');
160
157
 
161
- function blobWorker() {
162
- Log.warning('Direct worker is not allowed. Load the worker via blob.');
163
- var baseUrl = window.URI(workerParams.base).absoluteTo("").search("").hash("").toString();
164
- workerParams.src = baseUrl + workerParams.ref;
165
- var blobCode = 'self.origin = "' + baseUrl + '"; ' + 'importScripts("' + workerParams.src + '")';
166
- var blob = new Blob([blobCode]);
167
- var blobUrl = window.URL.createObjectURL(blob);
158
+ sBlobCode = 'self.origin = "' + workerParams.base + '"; ' + 'importScripts("' + workerParams.src + '")';
159
+ oBlobURL = window.URL.createObjectURL(new Blob([sBlobCode]));
168
160
 
169
- return createWorker(blobUrl);
170
- }
161
+ return createWorker(oBlobURL);
162
+ }
171
163
 
172
- function noWorker() {
173
- Log.warning('Blob worker is not allowed. Use in-process export.');
174
- fnCancel = exportInProcess(params).cancel;
175
- }
164
+ function noWorker() {
165
+ Log.warning('Blob worker is not allowed. Use in-process export.');
166
+ fnCancel = exportInProcess(mParams).cancel;
167
+ }
176
168
 
177
- function start() {
178
- try {
179
- spreadsheetWorker = createWorker(workerParams.src);
180
- spreadsheetWorker.addEventListener('error', function (e) { // Firefox fires an error event instead of a security exception
181
- spreadsheetWorker = blobWorker();
182
- spreadsheetWorker.addEventListener('error', function (e) {
183
- noWorker();
169
+ function start() {
170
+ try {
171
+ spreadsheetWorker = createWorker(workerParams.src);
172
+ spreadsheetWorker.addEventListener('error', function (e) { // Firefox fires an error event instead of a security exception
173
+ spreadsheetWorker = blobWorker();
174
+ spreadsheetWorker.addEventListener('error', function (e) {
175
+ noWorker();
176
+ e.preventDefault();
177
+ });
184
178
  e.preventDefault();
185
179
  });
186
- e.preventDefault();
187
- });
188
- } catch (err1) {
189
- try {
190
- spreadsheetWorker = blobWorker();
191
- } catch (err2) {
192
- noWorker();
180
+ } catch (err1) {
181
+ try {
182
+ spreadsheetWorker = blobWorker();
183
+ } catch (err2) {
184
+ noWorker();
185
+ }
193
186
  }
194
187
  }
195
- }
196
-
197
- // with workers, the download url must be absolute
198
- params.dataSource.dataUrl = normalizeUrl(params.dataSource.dataUrl);
199
- params.dataSource.serviceUrl = normalizeUrl(params.dataSource.serviceUrl);
200
188
 
201
- // worker settings
202
- workerParams.base = workerParams.base || sap.ui.require.toUrl('sap/ui/export/js/', '');
203
- workerParams.ref = workerParams.ref || 'SpreadsheetWorker.js';
204
- workerParams.src = workerParams.base + workerParams.ref;
189
+ // worker settings
190
+ workerParams.base = ExportUtils.normalizeUrl(sap.ui.require.toUrl('sap/ui/export/js/'));
191
+ workerParams.src = workerParams.base + 'SpreadsheetWorker.js';
205
192
 
206
- start();
193
+ start();
207
194
 
208
- // fnCancel may be overwritten asynchronously after return, therefore it should be wrapped into a closure
209
- return {cancel: function() {fnCancel();}};
210
- }
195
+ // fnCancel may be overwritten asynchronously after return, therefore it should be wrapped into a closure
196
+ return {cancel: function() {fnCancel();}};
197
+ }
211
198
 
212
- if (mParams.dataSource.type === 'array') {
213
- return exportArray();
214
- } else if (mParams.worker === false || sap.ui.disableExportWorkers === true) {
215
- return exportInProcess();
216
- } else {
217
- return exportInWorker();
199
+ if (mParams.dataSource.type === 'array') {
200
+ return exportArray();
201
+ } else if (mParams.worker === false || sap.ui.disableExportWorkers === true) {
202
+ return exportInProcess();
203
+ } else {
204
+ return exportInWorker();
205
+ }
218
206
  }
219
- }
207
+ };
220
208
 
221
- return {execute: doExport};
209
+ return SpreadsheetExport;
222
210
 
223
211
  }, /* bExport= */ true);
@@ -8,7 +8,6 @@ var origin = self.origin || "";
8
8
 
9
9
  /* global XLSXBuilder, importScripts, DataProviderBase */
10
10
 
11
- importScripts(origin + 'libs/uri.all.min.js');
12
11
  importScripts(origin + 'XLSXBuilder.js');
13
12
  importScripts(origin + '../provider/DataProviderBase.js');
14
13
  importScripts(origin + 'libs/JSZip3.js');
@@ -17,7 +17,7 @@ sap.ui.define([
17
17
  * @namespace
18
18
  * @name sap.ui.export
19
19
  * @author SAP SE
20
- * @version 1.96.2
20
+ * @version 1.97.0
21
21
  * @public
22
22
  */
23
23
 
@@ -33,7 +33,7 @@ sap.ui.define([
33
33
  interfaces: [],
34
34
  controls: [],
35
35
  elements: [],
36
- version: "1.96.2"
36
+ version: "1.97.0"
37
37
  });
38
38
 
39
39
 
@@ -46,5 +46,3 @@ NO_COUNT_WARNING_MSG=\u206A\u206A\u206A\u200C\u200B\u200B\u200C\u200C\u200D\u200
46
46
  XLSX_DEFAULT_TITLE=\u206A\u206A\u206A\u200D\u200C\u200D\u200D\u200B\u200D\u200B\u200C\u200B\u200C\u200B\u200D\u200C\u200C\u200B\u200C\u200C\u200D\u200B\u200B\u200B\u200D\u200B\u200D\u200D\u200D\u200B\u200B\u200C\u200B\u200B\u200D\u200B\u200B\u200D\u200C\u200D\u200B\u200B\u200C\u206ASAPUI5 Export\u206A\u206A
47
47
 
48
48
  XLSX_DEFAULT_SHEETNAME=\u206A\u206A\u206A\u200C\u200D\u200B\u200D\u200D\u200C\u200C\u200D\u200D\u200B\u200D\u200C\u200C\u200D\u200B\u200D\u200B\u200B\u200C\u200D\u200B\u200B\u200D\u200B\u200C\u200B\u200D\u200B\u200C\u200C\u200B\u200C\u200D\u200B\u200B\u200C\u200C\u200D\u200D\u200D\u206ASAPUI5 Export\u206A\u206A
49
-
50
- PDF_FILETYPE=\u206A\u206A\u206A\u200C\u200C\u200C\u200C\u200B\u200D\u200B\u200D\u200B\u200D\u200B\u200D\u200D\u200D\u200D\u200B\u200B\u200D\u200D\u200B\u200C\u200D\u200D\u200B\u200D\u200D\u200C\u200C\u200B\u200B\u200C\u200B\u200C\u200B\u200B\u200C\u200D\u200C\u200C\u200B\u200B\u206APortable Document Format (*.pdf)\u206A\u206A
@@ -16,19 +16,22 @@
16
16
  } else if (typeof self !== "undefined") {
17
17
  oContext = self;
18
18
  } else {
19
+ // eslint-disable-next-line consistent-this
19
20
  oContext = this;
20
21
  }
21
22
  oContext.DataProviderBase = fClass();
22
23
  }
23
24
  })(function() {
24
25
  'use strict';
25
- /* global URI, XMLHttpRequest */
26
+
27
+ // eslint-disable-next-line
28
+ /* global URL, XMLHttpRequest */
26
29
 
27
30
  /**
28
31
  * Default DataProviderBase implementation that is capable to handle
29
32
  * OData V2 as well as OData V4.
30
33
  *
31
- * @param mSettings
34
+ * @param {Object} mSettings Data service related part of the export configuration
32
35
  * @constructor
33
36
  * @class DataProviderBase
34
37
  * @since 1.77
@@ -105,7 +108,7 @@
105
108
  /**
106
109
  * The function returns a conversion function for raw data.
107
110
  *
108
- * @param mSettings Export settings that are used to create the the converter function
111
+ * @param {Object} mSettings Export settings that are used to create the the converter function
109
112
  * @returns {function} Conversion function
110
113
  *
111
114
  * @public
@@ -259,29 +262,24 @@
259
262
  /**
260
263
  * Nested function to remove not used information from the URL
261
264
  *
262
- * @param {string} url - A URL that may contain a path, hash and request parameters
265
+ * @param {string} sUrl - A URL that may contain a path, hash and request parameters
263
266
  * @returns {string} - A clean URL
264
267
  *
265
268
  * @private
266
269
  */
267
- DataProviderBase.prototype._cleanUrl = function(url) {
268
- var mUri;
270
+ DataProviderBase.prototype._cleanUrl = function(sUrl) {
271
+ var oURL;
269
272
 
270
- if (!url) {
273
+ if (!sUrl) {
271
274
  return '';
272
275
  }
273
276
 
274
- mUri = URI.parse(url);
277
+ oURL = new URL(sUrl);
275
278
 
276
- mUri.path = mUri.path || '';
277
- if (mUri.path.slice(-1) !== '/') {
278
- mUri.path = mUri.path + '/';
279
- }
280
- delete mUri.query;
281
- delete mUri.hash;
282
- delete mUri.fragment;
279
+ oURL.hash = oURL.search = '';
280
+ oURL.pathname += oURL.pathname.endsWith('/') ? '' : '/';
283
281
 
284
- return (URI.serialize || URI.build)(mUri);
282
+ return oURL.toString();
285
283
  };
286
284
 
287
285
  /**
@@ -294,24 +292,24 @@
294
292
  var mDataUrl, reSkip = /\$skip\=[0-9]+/, reTop = /\$top\=[0-9]+/;
295
293
 
296
294
  if (!mDataSource.dataUrl) {
297
- return '';
295
+ throw 'Unable to load data - no URL provided.';
298
296
  }
299
297
 
300
- mDataUrl = URI.parse(mDataSource.dataUrl);
301
- mDataUrl.query = mDataUrl.query || '';
298
+ mDataUrl = new URL(mDataSource.dataUrl);
299
+ mDataUrl.search = mDataUrl.search || '';
302
300
 
303
301
  // Add missing $skip if needed
304
- if (!reSkip.test(mDataUrl.query)) {
302
+ if (!reSkip.test(mDataUrl.search)) {
305
303
  // Apply $skip with some numeric dummy value that matches the regexp in DataProviderBase#_getUrl
306
- mDataUrl.query += (mDataUrl.query.length ? '&' : '') + '$skip=' + 0;
304
+ mDataUrl.search += (mDataUrl.search.length ? '&$skip=' : '$skip=') + 0;
307
305
  }
308
306
  // Add missing $top if needed
309
- if (!reTop.test(mDataUrl.query)) {
307
+ if (!reTop.test(mDataUrl.search)) {
310
308
  // Apply $top with some numeric dummy value that matches the regexp in DataProviderBase#_getUrl
311
- mDataUrl.query += '&$top=' + 0;
309
+ mDataUrl.search += '&$top=' + 0;
312
310
  }
313
311
 
314
- this.mSettings.dataSource.dataUrl = (URI.serialize || URI.build)(mDataUrl);
312
+ this.mSettings.dataSource.dataUrl = mDataUrl.toString();
315
313
  };
316
314
 
317
315
  /**
@@ -323,9 +321,9 @@
323
321
  * @returns {string} - The URL for the next query
324
322
  */
325
323
  DataProviderBase.prototype._getUrl = function(iSkip, iTop, sNextUrl) {
326
- var mDataUrl, mNextUrl;
324
+ var oDataUrl, oNextUrl;
327
325
 
328
- mDataUrl = URI.parse(this.mSettings.dataSource.dataUrl);
326
+ oDataUrl = new URL(this.mSettings.dataSource.dataUrl);
329
327
 
330
328
  /*
331
329
  * Use $skiptoken from response to query the next items.
@@ -335,15 +333,16 @@
335
333
  * between OData V4 and V2
336
334
  */
337
335
  if (sNextUrl) {
338
- mNextUrl = URI.parse(sNextUrl);
339
- mDataUrl.query = mNextUrl.query;
336
+ // sNextUrl can be relative, therefore we need to apply a base even though it is not used
337
+ oNextUrl = new URL(sNextUrl, oDataUrl.origin);
338
+ oDataUrl.search = oNextUrl.search;
340
339
  } else { // Use $skip and $top
341
- mDataUrl.query = (mDataUrl.query || '')
340
+ oDataUrl.search = (oDataUrl.search || '')
342
341
  .replace(/\$skip\=[0-9]+/g, '$skip=' + iSkip)
343
342
  .replace(/\$top\=[0-9]+/g, '$top=' + iTop);
344
343
  }
345
344
 
346
- return (URI.serialize || URI.build)(mDataUrl);
345
+ return oDataUrl.toString();
347
346
  };
348
347
 
349
348
  /**
package/ui5.yaml CHANGED
@@ -1,4 +1,4 @@
1
- specVersion: '1.0'
1
+ specVersion: '2.6'
2
2
  type: library
3
3
  metadata:
4
4
  name: sap.ui.export
@@ -18,3 +18,6 @@ builder:
18
18
  jsdoc:
19
19
  excludes:
20
20
  - "sap/ui/export/js/**"
21
+ minification:
22
+ excludes:
23
+ - "sap/ui/export/js/**/*.js"
@@ -1,3 +0,0 @@
1
- /** @license URI.js v3.0.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */
2
- !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r(e.URI=e.URI||{})}(this,function(e){"use strict";function r(){for(var e=arguments.length,r=Array(e),t=0;t<e;t++)r[t]=arguments[t];if(r.length>1){r[0]=r[0].slice(0,-1);for(var n=r.length-1,o=1;o<n;++o)r[o]=r[o].slice(1,-1);return r[n]=r[n].slice(1),r.join("")}return r[0]}function t(e){return"(?:"+e+")"}function n(e){return e===undefined?"undefined":null===e?"null":Object.prototype.toString.call(e).split(" ").pop().split("]").shift().toLowerCase()}function o(e){return e.toUpperCase()}function a(e){return e!==undefined&&null!==e?e instanceof Array?e:"number"!=typeof e.length||e.split||e.setInterval||e.call?[e]:Array.prototype.slice.call(e):[]}function i(e){var n=r("[0-9]","[A-Fa-f]"),o=t(t("%[EFef]"+n+"%"+n+n+"%"+n+n)+"|"+t("%[89A-Fa-f]"+n+"%"+n+n)+"|"+t("%"+n+n)),a="[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]",i=r("[\\:\\/\\?\\#\\[\\]\\@]",a),u=e?"[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]":"[]",s=e?"[\\uE000-\\uF8FF]":"[]",p=r("[A-Za-z]","[0-9]","[\\-\\.\\_\\~]",u),f=t(t("25[0-5]")+"|"+t("2[0-4][0-9]")+"|"+t("1[0-9][0-9]")+"|"+t("[1-9][0-9]")+"|[0-9]"),c=t(f+"\\."+f+"\\."+f+"\\."+f),h=t(n+"{1,4}"),d=t(t(h+"\\:"+h)+"|"+c),l=t(t(h+"\\:")+"{6}"+d),g=t("\\:\\:"+t(h+"\\:")+"{5}"+d),m=t(t(h)+"?\\:\\:"+t(h+"\\:")+"{4}"+d),v=t(t(t(h+"\\:")+"{0,1}"+h)+"?\\:\\:"+t(h+"\\:")+"{3}"+d),E=t(t(t(h+"\\:")+"{0,2}"+h)+"?\\:\\:"+t(h+"\\:")+"{2}"+d),C=t(t(t(h+"\\:")+"{0,3}"+h)+"?\\:\\:"+h+"\\:"+d),y=t(t(t(h+"\\:")+"{0,4}"+h)+"?\\:\\:"+d),S=t(t(t(h+"\\:")+"{0,5}"+h)+"?\\:\\:"+h),A=t(t(t(h+"\\:")+"{0,6}"+h)+"?\\:\\:"),D=t([l,g,m,v,E,C,y,S,A].join("|"));return{NOT_SCHEME:new RegExp(r("[^]","[A-Za-z]","[0-9]","[\\+\\-\\.]"),"g"),NOT_USERINFO:new RegExp(r("[^\\%\\:]",p,a),"g"),NOT_HOST:new RegExp(r("[^\\%\\[\\]\\:]",p,a),"g"),NOT_PATH:new RegExp(r("[^\\%\\/\\:\\@]",p,a),"g"),NOT_PATH_NOSCHEME:new RegExp(r("[^\\%\\/\\@]",p,a),"g"),NOT_QUERY:new RegExp(r("[^\\%]",p,a,"[\\:\\@\\/\\?]",s),"g"),NOT_FRAGMENT:new RegExp(r("[^\\%]",p,a,"[\\:\\@\\/\\?]"),"g"),ESCAPE:new RegExp(r("[^]",p,a),"g"),UNRESERVED:new RegExp(p,"g"),OTHER_CHARS:new RegExp(r("[^\\%]",p,i),"g"),PCT_ENCODED:new RegExp(o,"g"),IPV6ADDRESS:new RegExp("\\[?("+D+")\\]?","g")}}function u(e){throw new RangeError(R[e])}function s(e,r){for(var t=[],n=e.length;n--;)t[n]=r(e[n]);return t}function p(e,r){var t=e.split("@"),n="";return t.length>1&&(n=t[0]+"@",e=t[1]),e=e.replace(T,"."),n+s(e.split("."),r).join(".")}function f(e){for(var r=[],t=0,n=e.length;t<n;){var o=e.charCodeAt(t++);if(o>=55296&&o<=56319&&t<n){var a=e.charCodeAt(t++);56320==(64512&a)?r.push(((1023&o)<<10)+(1023&a)+65536):(r.push(o),t--)}else r.push(o)}return r}function c(e){var r=e.charCodeAt(0);return r<16?"%0"+r.toString(16).toUpperCase():r<128?"%"+r.toString(16).toUpperCase():r<2048?"%"+(r>>6|192).toString(16).toUpperCase()+"%"+(63&r|128).toString(16).toUpperCase():"%"+(r>>12|224).toString(16).toUpperCase()+"%"+(r>>6&63|128).toString(16).toUpperCase()+"%"+(63&r|128).toString(16).toUpperCase()}function h(e){for(var r="",t=0,n=e.length;t<n;){var o=parseInt(e.substr(t+1,2),16);if(o<128)r+=String.fromCharCode(o),t+=3;else if(o>=194&&o<224){if(n-t>=6){var a=parseInt(e.substr(t+4,2),16);r+=String.fromCharCode((31&o)<<6|63&a)}else r+=e.substr(t,6);t+=6}else if(o>=224){if(n-t>=9){var i=parseInt(e.substr(t+4,2),16),u=parseInt(e.substr(t+7,2),16);r+=String.fromCharCode((15&o)<<12|(63&i)<<6|63&u)}else r+=e.substr(t,9);t+=9}else r+=e.substr(t,3),t+=3}return r}function d(e,r){function t(e){var t=h(e);return t.match(r.UNRESERVED)?t:e}return e.scheme&&(e.scheme=String(e.scheme).replace(r.PCT_ENCODED,t).toLowerCase().replace(r.NOT_SCHEME,"")),e.userinfo!==undefined&&(e.userinfo=String(e.userinfo).replace(r.PCT_ENCODED,t).replace(r.NOT_USERINFO,c).replace(r.PCT_ENCODED,o)),e.host!==undefined&&(e.host=String(e.host).replace(r.PCT_ENCODED,t).toLowerCase().replace(r.NOT_HOST,c).replace(r.PCT_ENCODED,o)),e.path!==undefined&&(e.path=String(e.path).replace(r.PCT_ENCODED,t).replace(e.scheme?r.NOT_PATH:r.NOT_PATH_NOSCHEME,c).replace(r.PCT_ENCODED,o)),e.query!==undefined&&(e.query=String(e.query).replace(r.PCT_ENCODED,t).replace(r.NOT_QUERY,c).replace(r.PCT_ENCODED,o)),e.fragment!==undefined&&(e.fragment=String(e.fragment).replace(r.PCT_ENCODED,t).replace(r.NOT_FRAGMENT,c).replace(r.PCT_ENCODED,o)),e}function l(e){var r=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{},t={},n=r.iri!==!1?w:x;"suffix"===r.reference&&(e=(r.scheme?r.scheme+":":"")+"//"+e);var o=e.match(k);if(o){G?(t.scheme=o[1],t.userinfo=o[3],t.host=o[4],t.port=parseInt(o[5],10),t.path=o[6]||"",t.query=o[7],t.fragment=o[8],isNaN(t.port)&&(t.port=o[5])):(t.scheme=o[1]||undefined,t.userinfo=e.indexOf("@")!==-1?o[3]:undefined,t.host=e.indexOf("//")!==-1?o[4]:undefined,t.port=parseInt(o[5],10),t.path=o[6]||"",t.query=e.indexOf("?")!==-1?o[7]:undefined,t.fragment=e.indexOf("#")!==-1?o[8]:undefined,isNaN(t.port)&&(t.port=e.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?o[4]:undefined)),t.host&&(t.host=t.host.replace(n.IPV6ADDRESS,"$1")),t.scheme!==undefined||t.userinfo!==undefined||t.host!==undefined||t.port!==undefined||t.path||t.query!==undefined?t.scheme===undefined?t.reference="relative":t.fragment===undefined?t.reference="absolute":t.reference="uri":t.reference="same-document",r.reference&&"suffix"!==r.reference&&r.reference!==t.reference&&(t.error=t.error||"URI is not a "+r.reference+" reference.");var a=V[(r.scheme||t.scheme||"").toLowerCase()];if(r.unicodeSupport||a&&a.unicodeSupport)d(t,n);else{if(t.host&&(r.domainHost||a&&a.domainHost))try{t.host=Z.toASCII(t.host.replace(n.PCT_ENCODED,h).toLowerCase())}catch(i){t.error=t.error||"Host's domain name can not be converted to ASCII via punycode: "+i}d(t,x)}a&&a.parse&&a.parse(t,r)}else t.error=t.error||"URI can not be parsed.";return t}function g(e,r){var t=r.iri!==!1?w:x,n=[];return e.userinfo!==undefined&&(n.push(e.userinfo),n.push("@")),e.host!==undefined&&n.push(String(e.host).replace(t.IPV6ADDRESS,"[$1]")),"number"==typeof e.port&&(n.push(":"),n.push(e.port.toString(10))),n.length?n.join(""):undefined}function m(e){for(var r=[];e.length;)if(e.match(Q))e=e.replace(Q,"");else if(e.match(Y))e=e.replace(Y,"/");else if(e.match(B))e=e.replace(B,"/"),r.pop();else if("."===e||".."===e)e="";else{var t=e.match(J);if(!t)throw new Error("Unexpected dot segment condition");var n=t[0];e=e.slice(n.length),r.push(n)}return r.join("")}function v(e){var r=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{},t=r.iri?w:x,n=[],o=V[(r.scheme||e.scheme||"").toLowerCase()];if(o&&o.serialize&&o.serialize(e,r),e.host)if(t.IPV6ADDRESS.test(e.host));else if(r.domainHost||o&&o.domainHost)try{e.host=r.iri?Z.toUnicode(e.host):Z.toASCII(e.host.replace(t.PCT_ENCODED,h).toLowerCase())}catch(u){e.error=e.error||"Host's domain name can not be converted to "+(r.iri?"Unicode":"ASCII")+" via punycode: "+u}d(e,t),"suffix"!==r.reference&&e.scheme&&(n.push(e.scheme),n.push(":"));var a=g(e,r);if(a!==undefined&&("suffix"!==r.reference&&n.push("//"),n.push(a),e.path&&"/"!==e.path.charAt(0)&&n.push("/")),e.path!==undefined){var i=e.path;r.absolutePath||o&&o.absolutePath||(i=m(i)),a===undefined&&(i=i.replace(/^\/\//,"/%2F")),n.push(i)}return e.query!==undefined&&(n.push("?"),n.push(e.query)),e.fragment!==undefined&&(n.push("#"),n.push(e.fragment)),n.join("")}function E(e,r){var t=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{},n=arguments[3],o={};return n||(e=l(v(e,t),t),r=l(v(r,t),t)),t=t||{},!t.tolerant&&r.scheme?(o.scheme=r.scheme,o.userinfo=r.userinfo,o.host=r.host,o.port=r.port,o.path=m(r.path||""),o.query=r.query):(r.userinfo!==undefined||r.host!==undefined||r.port!==undefined?(o.userinfo=r.userinfo,o.host=r.host,o.port=r.port,o.path=m(r.path||""),o.query=r.query):(r.path?("/"===r.path.charAt(0)?o.path=m(r.path):(e.userinfo===undefined&&e.host===undefined&&e.port===undefined||e.path?e.path?o.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+r.path:o.path=r.path:o.path="/"+r.path,o.path=m(o.path)),o.query=r.query):(o.path=e.path,r.query!==undefined?o.query=r.query:o.query=e.query),o.userinfo=e.userinfo,o.host=e.host,o.port=e.port),o.scheme=e.scheme),o.fragment=r.fragment,o}function C(e,r,t){return v(E(l(e,t),l(r,t),t,!0),t)}function y(e,r){return"string"==typeof e?e=v(l(e,r),r):"object"===n(e)&&(e=l(v(e,r),r)),e}function S(e,r,t){return"string"==typeof e?e=v(l(e,t),t):"object"===n(e)&&(e=v(e,t)),"string"==typeof r?r=v(l(r,t),t):"object"===n(r)&&(r=v(r,t)),e===r}function A(e,r){return e&&e.toString().replace(r&&r.iri?w.ESCAPE:x.ESCAPE,c)}function D(e,r){return e&&e.toString().replace(r&&r.iri?w.PCT_ENCODED:x.PCT_ENCODED,h)}function F(e){var r=h(e);return r.match(oe)?r:e}var x=i(!1),w=i(!0),O=function(e){if(Array.isArray(e)){for(var r=0,t=Array(e.length);r<e.length;r++)t[r]=e[r];return t}return Array.from(e)},b=2147483647,N=/^xn--/,I=/[^\0-\x7E]/,T=/[\x2E\u3002\uFF0E\uFF61]/g,R={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},_=Math.floor,P=String.fromCharCode,U=function(e){return String.fromCodePoint.apply(String,O(e))},q=function(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:36},H=function(e,r){return e+22+75*(e<26)-((0!=r)<<5)},j=function(e,r,t){var n=0;for(e=t?_(e/700):e>>1,e+=_(e/r);e>455;n+=36)e=_(e/35);return _(n+36*e/(e+38))},z=function(e){var r=[],t=e.length,n=0,o=128,a=72,i=e.lastIndexOf("-");i<0&&(i=0);for(var s=0;s<i;++s)e.charCodeAt(s)>=128&&u("not-basic"),r.push(e.charCodeAt(s));for(var p=i>0?i+1:0;p<t;){for(var f=n,c=1,h=36;;h+=36){p>=t&&u("invalid-input");var d=q(e.charCodeAt(p++));(d>=36||d>_((b-n)/c))&&u("overflow"),n+=d*c;var l=h<=a?1:h>=a+26?26:h-a;if(d<l)break;var g=36-l;c>_(b/g)&&u("overflow"),c*=g}var m=r.length+1;a=j(n-f,m,0==f),_(n/m)>b-o&&u("overflow"),o+=_(n/m),n%=m,r.splice(n++,0,o)}return String.fromCodePoint.apply(String,r)},L=function(e){var r=[];e=f(e);var t=e.length,n=128,o=0,a=72,i=!0,s=!1,p=undefined;try{for(var c,h=e[Symbol.iterator]();!(i=(c=h.next()).done);i=!0){var d=c.value;d<128&&r.push(P(d))}}catch(L){s=!0,p=L}finally{try{!i&&h["return"]&&h["return"]()}finally{if(s)throw p}}var l=r.length,g=l;for(l&&r.push("-");g<t;){var m=b,v=!0,E=!1,C=undefined;try{for(var y,S=e[Symbol.iterator]();!(v=(y=S.next()).done);v=!0){var A=y.value;A>=n&&A<m&&(m=A)}}catch(L){E=!0,C=L}finally{try{!v&&S["return"]&&S["return"]()}finally{if(E)throw C}}var D=g+1;m-n>_((b-o)/D)&&u("overflow"),o+=(m-n)*D,n=m;var F=!0,x=!1,w=undefined;try{for(var O,N=e[Symbol.iterator]();!(F=(O=N.next()).done);F=!0){var I=O.value;if(I<n&&++o>b&&u("overflow"),I==n){for(var T=o,R=36;;R+=36){var U=R<=a?1:R>=a+26?26:R-a;if(T<U)break;var q=T-U,z=36-U;r.push(P(H(U+q%z,0))),T=_(q/z)}r.push(P(H(T,0))),a=j(o,D,g==l),o=0,++g}}}catch(L){x=!0,w=L}finally{try{!F&&N["return"]&&N["return"]()}finally{if(x)throw w}}++o,++n}return r.join("")},$=function(e){return p(e,function(e){return N.test(e)?z(e.slice(4).toLowerCase()):e})},M=function(e){return p(e,function(e){return I.test(e)?"xn--"+L(e):e})},Z={version:"2.1.0",ucs2:{decode:f,encode:U},decode:z,encode:L,toASCII:M,toUnicode:$},V={},k=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[\dA-F:.]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,G="".match(/(){0}/)[1]===undefined,Q=/^\.\.?\//,Y=/^\/\.(\/|$)/,B=/^\/\.\.(\/|$)/,J=/^\/?(?:.|\n)*?(?=\/|$)/,K={scheme:"http",domainHost:!0,parse:function(e,r){return e.host||(e.error=e.error||"HTTP URIs must have a host."),e},serialize:function(e,r){return e.port!==("https"!==String(e.scheme).toLowerCase()?80:443)&&""!==e.port||(e.port=undefined),e.path||(e.path="/"),e}},W={scheme:"https",domainHost:K.domainHost,parse:K.parse,serialize:K.serialize},X={},ee="[A-Za-z0-9\\-\\.\\_\\~\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]",re="[0-9A-Fa-f]",te=t(t("%[EFef][0-9A-Fa-f]%"+re+re+"%"+re+re)+"|"+t("%[89A-Fa-f][0-9A-Fa-f]%"+re+re)+"|"+t("%"+re+re)),ne=r("[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",'[\\"\\\\]'),oe=new RegExp(ee,"g"),ae=new RegExp(te,"g"),ie=new RegExp(r("[^]","[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]","[\\.]",'[\\"]',ne),"g"),ue=new RegExp(r("[^]",ee,"[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"),"g"),se=ue,pe={scheme:"mailto",parse:function(e,r){var t=e.to=e.path?e.path.split(","):[];if(e.path=undefined,e.query){for(var n=!1,o={},a=e.query.split("&"),i=0,u=a.length;i<u;++i){var s=a[i].split("=");switch(s[0]){case"to":for(var p=s[1].split(","),f=0,c=p.length;f<c;++f)t.push(p[f]);break;case"subject":e.subject=D(s[1],r);break;case"body":e.body=D(s[1],r);break;default:n=!0,o[D(s[0],r)]=D(s[1],r)}}n&&(e.headers=o)}e.query=undefined;for(var h=0,d=t.length;h<d;++h){var l=t[h].split("@");if(l[0]=D(l[0]),r.unicodeSupport)l[1]=D(l[1],r).toLowerCase();else try{l[1]=Z.toASCII(D(l[1],r).toLowerCase())}catch(g){e.error=e.error||"Email address's domain name can not be converted to ASCII via punycode: "+g}t[h]=l.join("@")}return e},serialize:function(e,r){var t=a(e.to);if(t){for(var n=0,i=t.length;n<i;++n){var u=String(t[n]),s=u.lastIndexOf("@"),p=u.slice(0,s).replace(ae,F).replace(ae,o).replace(ie,c),f=u.slice(s+1);try{f=r.iri?Z.toUnicode(f):Z.toASCII(D(f,r).toLowerCase())}catch(g){e.error=e.error||"Email address's domain name can not be converted to "+(r.iri?"Unicode":"ASCII")+" via punycode: "+g}t[n]=p+"@"+f}e.path=t.join(",")}var h=e.headers=e.headers||{};e.subject&&(h.subject=e.subject),e.body&&(h.body=e.body);var d=[];for(var l in h)h[l]!==X[l]&&d.push(l.replace(ae,F).replace(ae,o).replace(ue,c)+"="+h[l].replace(ae,F).replace(ae,o).replace(se,c));return d.length&&(e.query=d.join("&")),e}},fe=new RegExp("^urn\\:((?:[0-9A-Za-z][0-9A-Za-z\\-]{1,31}))$"),ce={scheme:"urn",parse:function(e,r){var t=e.path&&e.path.match(/^([^\:]+)\:(.*)/);if(t){var n="urn:"+t[1].toLowerCase(),o=V[n];o||(o=V[n]={scheme:n,parse:function(e,r){return e},serialize:V.urn.serialize}),e.scheme=n,e.path=t[2],e=o.parse(e,r)}else e.error=e.error||"URN can not be parsed.";return e},serialize:function(e,r){var t=e.scheme||r.scheme;if(t&&"urn"!==t){var n=t.match(fe)||["urn:"+t,t];e.scheme="urn",e.path=n[1]+":"+(e.path?e.path.replace(/[\x00-\x20\\\"\&\<\>\[\]\^\`\{\|\}\~\x7F-\xFF]/g,c):"")}return e}},he=/^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/,de={scheme:"urn:uuid",parse:function(e,r){return r.tolerant||e.path&&e.path.match(he)||(e.error=e.error||"UUID is not valid."),e},serialize:function(e,r){return r.tolerant||e.path&&e.path.match(he)?e.path=(e.path||"").toLowerCase():e.scheme=undefined,V.urn.serialize(e,r)}};V.http=K,V.https=W,V.mailto=pe,V.urn=ce,V["urn:uuid"]=de,e.SCHEMES=V,e.pctEncChar=c,e.pctDecChars=h,e.parse=l,e.removeDotSegments=m,e.serialize=v,e.resolveComponents=E,e.resolve=C,e.normalize=y,e.equal=S,e.escapeComponent=A,e.unescapeComponent=D,Object.defineProperty(e,"__esModule",{value:!0})});
3
- //# sourceMappingURL=uri.all.min.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/util.ts","../../src/regexps-uri.ts","../../node_modules/punycode/punycode.es6.js","../../src/uri.ts","../../src/schemes/mailto.ts","../../src/regexps-iri.ts","../../src/schemes/http.ts","../../src/schemes/https.ts","../../src/schemes/urn.ts","../../src/schemes/urn-uuid.ts","../../src/index.ts"],"names":["merge","sets","Array","_len","_key","arguments","length","slice","xl","x","join","subexp","str","typeOf","o","undefined","Object","prototype","toString","call","split","pop","shift","toLowerCase","toUpperCase","toArray","obj","setInterval","buildExps","isIRI","HEXDIG$$","PCT_ENCODED$","SUB_DELIMS$$","RESERVED$$","UCSCHAR$$","DEC_OCTET$","IPV4ADDRESS$","H16$","LS32$","IPV6ADDRESS1$","IPV6ADDRESS2$","IPV6ADDRESS3$","IPV6ADDRESS4$","IPV6ADDRESS5$","IPV6ADDRESS6$","IPV6ADDRESS7$","IPV6ADDRESS8$","IPV6ADDRESS9$","RegExp","UNRESERVED$$","IPRIVATE$$","IPV6ADDRESS$","error","type","RangeError","errors","map","array","fn","result","mapDomain","string","parts","replace","regexSeparators","ucs2decode","output","counter","value","charCodeAt","extra","push","pctEncChar","chr","c","pctDecChars","newStr","i","il","parseInt","substr","String","fromCharCode","c2","c3","_normalizeComponentEncoding","components","protocol","decodeUnreserved","decStr","match","UNRESERVED","scheme","PCT_ENCODED","NOT_SCHEME","userinfo","NOT_USERINFO","host","NOT_HOST","path","NOT_PATH","NOT_PATH_NOSCHEME","query","NOT_QUERY","fragment","NOT_FRAGMENT","parse","uriString","options","iri","IRI_PROTOCOL","URI_PROTOCOL","reference","matches","URI_PARSE","NO_MATCH_IS_UNDEFINED","port","isNaN","indexOf","IPV6ADDRESS","schemeHandler","SCHEMES","unicodeSupport","domainHost","punycode","toASCII","e","_recomposeAuthority","uriTokens","removeDotSegments","input","RDS1","RDS2","RDS3","im","RDS5","Error","s","serialize","test","toUnicode","authority","charAt","absolutePath","resolveComponents","base","relative","skipNormalization","target","tolerant","lastIndexOf","resolve","baseURI","relativeURI","normalize","uri","equal","uriA","uriB","escapeComponent","ESCAPE","unescapeComponent","maxInt","regexPunycode","regexNonASCII","floor","Math","stringFromCharCode","ucs2encode","fromCodePoint","apply","toConsumableArray","basicToDigit","codePoint","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","k","baseMinusTMin","decode","inputLength","n","bias","basic","j","index","oldi","w","t","baseMinusT","out","splice","encode","_step","Symbol","iterator","_iteratorNormalCompletion","_iterator","next","done","currentValue","basicLength","handledCPCount","m","_step2","_iteratorNormalCompletion2","_iterator2","handledCPCountPlusOne","_step3","_iteratorNormalCompletion3","_iterator3","q","qMinusT","http","https","O","VCHAR$$","NOT_LOCAL_PART","NOT_HFNAME","NOT_HFVALUE","mailto","to","unknownHeaders","headers","hfields","hfield","toAddrs","subject","body","addr","toAddr","atIdx","localPart","domain","fields","name","URN_SCHEME","urn","UUID","uuid"],"mappings":"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","file":"dist/es5/uri.all.min.js","sourcesContent":["export function merge(...sets:Array<string>):string {\n\tif (sets.length > 1) {\n\t\tsets[0] = sets[0].slice(0, -1);\n\t\tconst xl = sets.length - 1;\n\t\tfor (let x = 1; x < xl; ++x) {\n\t\t\tsets[x] = sets[x].slice(1, -1);\n\t\t}\n\t\tsets[xl] = sets[xl].slice(1);\n\t\treturn sets.join('');\n\t} else {\n\t\treturn sets[0];\n\t}\n}\n\nexport function subexp(str:string):string {\n\treturn \"(?:\" + str + \")\";\n}\n\nexport function typeOf(o:any):string {\n\treturn o === undefined ? \"undefined\" : (o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase());\n}\n\nexport function toUpperCase(str:string):string {\n\treturn str.toUpperCase();\n}\n\nexport function toArray(obj:any):Array<any> {\n\treturn obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : [];\n}\n","import { URIRegExps } from \"./uri\";\nimport { merge, subexp } from \"./util\";\n\nexport function buildExps(isIRI:boolean):URIRegExps {\n\tconst\n\t\tALPHA$$ = \"[A-Za-z]\",\n\t\tCR$ = \"[\\\\x0D]\",\n\t\tDIGIT$$ = \"[0-9]\",\n\t\tDQUOTE$$ = \"[\\\\x22]\",\n\t\tHEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"), //case-insensitive\n\t\tLF$$ = \"[\\\\x0A]\",\n\t\tSP$$ = \"[\\\\x20]\",\n\t\tPCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)), //expanded\n\t\tGEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n\t\tSUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n\t\tRESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n\t\tUCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\", //subset, excludes bidi control characters\n\t\tIPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\", //subset\n\t\tUNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n\t\tSCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n\t\tUSERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n\t\tDEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n\t\tIPV4ADDRESS$ = subexp(DEC_OCTET$ + \"\\\\.\" + DEC_OCTET$ + \"\\\\.\" + DEC_OCTET$ + \"\\\\.\" + DEC_OCTET$),\n\t\tH16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n\t\tLS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n\t\tIPV6ADDRESS1$ = subexp( subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$), // 6( h16 \":\" ) ls32\n\t\tIPV6ADDRESS2$ = subexp( \"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$), // \"::\" 5( h16 \":\" ) ls32\n\t\tIPV6ADDRESS3$ = subexp(subexp( H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$), //[ h16 ] \"::\" 4( h16 \":\" ) ls32\n\t\tIPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$), //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n\t\tIPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$), //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n\t\tIPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" + H16$ + \"\\\\:\" + LS32$), //[ *3( h16 \":\" ) h16 ] \"::\" h16 \":\" ls32\n\t\tIPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\" + LS32$), //[ *4( h16 \":\" ) h16 ] \"::\" ls32\n\t\tIPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\" + H16$ ), //[ *5( h16 \":\" ) h16 ] \"::\" h16\n\t\tIPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\" ), //[ *6( h16 \":\" ) h16 ] \"::\"\n\t\tIPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n\t\tIPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n\t\tIP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"),\n\t\tREG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n\t\tHOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n\t\tPORT$ = subexp(DIGIT$$ + \"*\"),\n\t\tAUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n\t\tPCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n\t\tSEGMENT$ = subexp(PCHAR$ + \"*\"),\n\t\tSEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n\t\tSEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n\t\tPATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n\t\tPATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"), //simplified\n\t\tPATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n\t\tPATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tQUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n\t\tFRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n\t\tHIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tURI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tRELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n\t\tRELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tURI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n\t\tABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n\n\t\tGENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tRELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n\t\tSAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tAUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\"\n\t;\n\n\treturn {\n\t\tNOT_SCHEME : new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n\t\tNOT_USERINFO : new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_HOST : new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH : new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH_NOSCHEME : new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_QUERY : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n\t\tNOT_FRAGMENT : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n\t\tESCAPE : new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tUNRESERVED : new RegExp(UNRESERVED$$, \"g\"),\n\t\tOTHER_CHARS : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n\t\tPCT_ENCODED : new RegExp(PCT_ENCODED$, \"g\"),\n\t\tIPV6ADDRESS : new RegExp(\"\\\\[?(\" + IPV6ADDRESS$ + \")\\\\]?\", \"g\")\n\t};\n}\n\nexport default buildExps(false);\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport default punycode;\n","/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/uri-js\n */\n\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this list of\n * conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice, this list\n * of conditions and the following disclaimer in the documentation and/or other materials\n * provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\n\nimport URI_PROTOCOL from \"./regexps-uri\";\nimport IRI_PROTOCOL from \"./regexps-iri\";\nimport punycode from \"punycode\";\nimport { toUpperCase, typeOf } from \"./util\";\n\nexport interface URIComponents {\n\tscheme?:string,\n\tuserinfo?:string,\n\thost?:string,\n\tport?:number|string,\n\tpath?:string,\n\tquery?:string,\n\tfragment?:string,\n\treference?:string,\n\terror?:string\n}\n\nexport interface URIOptions {\n\tscheme?:string,\n\treference?:string,\n\ttolerant?:boolean,\n\tabsolutePath?:boolean,\n\tiri?:boolean,\n\tunicodeSupport?:boolean,\n\tdomainHost?:boolean\n}\n\nexport interface URISchemeHandler {\n\tscheme:string,\n\tparse(components:URIComponents, options:URIOptions):URIComponents,\n\tserialize(components:URIComponents, options:URIOptions):URIComponents,\n\tunicodeSupport?:boolean,\n\tdomainHost?:boolean,\n\tabsolutePath?:boolean\n}\n\nexport interface URIRegExps {\n\tNOT_SCHEME : RegExp,\n\tNOT_USERINFO : RegExp,\n\tNOT_HOST : RegExp,\n\tNOT_PATH : RegExp,\n\tNOT_PATH_NOSCHEME : RegExp,\n\tNOT_QUERY : RegExp,\n\tNOT_FRAGMENT : RegExp,\n\tESCAPE : RegExp,\n\tUNRESERVED : RegExp,\n\tOTHER_CHARS : RegExp,\n\tPCT_ENCODED : RegExp,\n\tIPV6ADDRESS : RegExp\n}\n\nexport const SCHEMES:{[scheme:string]:URISchemeHandler} = {};\n\nexport function pctEncChar(chr:string):string {\n\tconst c = chr.charCodeAt(0);\n\tlet e:string;\n\n\tif (c < 16) e = \"%0\" + c.toString(16).toUpperCase();\n\telse if (c < 128) e = \"%\" + c.toString(16).toUpperCase();\n\telse if (c < 2048) e = \"%\" + ((c >> 6) | 192).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\telse e = \"%\" + ((c >> 12) | 224).toString(16).toUpperCase() + \"%\" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\n\treturn e;\n}\n\nexport function pctDecChars(str:string):string {\n\tlet newStr = \"\";\n\tlet i = 0;\n\tconst il = str.length;\n\n\twhile (i < il) {\n\t\tconst c = parseInt(str.substr(i + 1, 2), 16);\n\n\t\tif (c < 128) {\n\t\t\tnewStr += String.fromCharCode(c);\n\t\t\ti += 3;\n\t\t}\n\t\telse if (c >= 194 && c < 224) {\n\t\t\tif ((il - i) >= 6) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 6);\n\t\t\t}\n\t\t\ti += 6;\n\t\t}\n\t\telse if (c >= 224) {\n\t\t\tif ((il - i) >= 9) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tconst c3 = parseInt(str.substr(i + 7, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 9);\n\t\t\t}\n\t\t\ti += 9;\n\t\t}\n\t\telse {\n\t\t\tnewStr += str.substr(i, 3);\n\t\t\ti += 3;\n\t\t}\n\t}\n\n\treturn newStr;\n}\n\nfunction _normalizeComponentEncoding(components:URIComponents, protocol:URIRegExps) {\n\tfunction decodeUnreserved(str:string):string {\n\t\tconst decStr = pctDecChars(str);\n\t\treturn (!decStr.match(protocol.UNRESERVED) ? str : decStr);\n\t}\n\n\tif (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n\tif (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\n\treturn components;\n};\n\nconst URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[\\dA-F:.]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nconst NO_MATCH_IS_UNDEFINED = (<RegExpMatchArray>(\"\").match(/(){0}/))[1] === undefined;\n\nexport function parse(uriString:string, options:URIOptions = {}):URIComponents {\n\tconst components:URIComponents = {};\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\n\tif (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n\n\tconst matches = uriString.match(URI_PARSE);\n\n\tif (matches) {\n\t\tif (NO_MATCH_IS_UNDEFINED) {\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1];\n\t\t\tcomponents.userinfo = matches[3];\n\t\t\tcomponents.host = matches[4];\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = matches[7];\n\t\t\tcomponents.fragment = matches[8];\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = matches[5];\n\t\t\t}\n\t\t} else { //IE FIX for improper RegExp matching\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1] || undefined;\n\t\t\tcomponents.userinfo = (uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined);\n\t\t\tcomponents.host = (uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined);\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = (uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined);\n\t\t\tcomponents.fragment = (uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined);\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = (uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined);\n\t\t\t}\n\t\t}\n\n\t\t//strip brackets from IPv6 hosts\n\t\tif (components.host) {\n\t\t\tcomponents.host = components.host.replace(protocol.IPV6ADDRESS, \"$1\");\n\t\t}\n\n\t\t//determine reference type\n\t\tif (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n\t\t\tcomponents.reference = \"same-document\";\n\t\t} else if (components.scheme === undefined) {\n\t\t\tcomponents.reference = \"relative\";\n\t\t} else if (components.fragment === undefined) {\n\t\t\tcomponents.reference = \"absolute\";\n\t\t} else {\n\t\t\tcomponents.reference = \"uri\";\n\t\t}\n\n\t\t//check for reference errors\n\t\tif (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n\t\t\tcomponents.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n\t\t}\n\n\t\t//find scheme handler\n\t\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t\t//check if scheme can't handle IRIs\n\t\tif (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n\t\t\t//if host component is a domain name\n\t\t\tif (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\tcomponents.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//convert IRI -> URI\n\t\t\t_normalizeComponentEncoding(components, URI_PROTOCOL);\n\t\t} else {\n\t\t\t//normalize encodings\n\t\t\t_normalizeComponentEncoding(components, protocol);\n\t\t}\n\n\t\t//perform scheme specific parsing\n\t\tif (schemeHandler && schemeHandler.parse) {\n\t\t\tschemeHandler.parse(components, options);\n\t\t}\n\t} else {\n\t\tcomponents.error = components.error || \"URI can not be parsed.\";\n\t}\n\n\treturn components;\n};\n\nfunction _recomposeAuthority(components:URIComponents, options:URIOptions):string|undefined {\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array<string> = [];\n\n\tif (components.userinfo !== undefined) {\n\t\turiTokens.push(components.userinfo);\n\t\turiTokens.push(\"@\");\n\t}\n\n\tif (components.host !== undefined) {\n\t\t//ensure IPv6 addresses are bracketed\n\t\turiTokens.push(String(components.host).replace(protocol.IPV6ADDRESS, \"[$1]\"));\n\t}\n\n\tif (typeof components.port === \"number\") {\n\t\turiTokens.push(\":\");\n\t\turiTokens.push(components.port.toString(10));\n\t}\n\n\treturn uriTokens.length ? uriTokens.join(\"\") : undefined;\n};\n\nconst RDS1 = /^\\.\\.?\\//;\nconst RDS2 = /^\\/\\.(\\/|$)/;\nconst RDS3 = /^\\/\\.\\.(\\/|$)/;\nconst RDS4 = /^\\.\\.?$/;\nconst RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\n\nexport function removeDotSegments(input:string):string {\n\tconst output:Array<string> = [];\n\n\twhile (input.length) {\n\t\tif (input.match(RDS1)) {\n\t\t\tinput = input.replace(RDS1, \"\");\n\t\t} else if (input.match(RDS2)) {\n\t\t\tinput = input.replace(RDS2, \"/\");\n\t\t} else if (input.match(RDS3)) {\n\t\t\tinput = input.replace(RDS3, \"/\");\n\t\t\toutput.pop();\n\t\t} else if (input === \".\" || input === \"..\") {\n\t\t\tinput = \"\";\n\t\t} else {\n\t\t\tconst im = input.match(RDS5);\n\t\t\tif (im) {\n\t\t\t\tconst s = im[0];\n\t\t\t\tinput = input.slice(s.length);\n\t\t\t\toutput.push(s);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Unexpected dot segment condition\");\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output.join(\"\");\n};\n\nexport function serialize(components:URIComponents, options:URIOptions = {}):string {\n\tconst protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array<string> = [];\n\n\t//find scheme handler\n\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t//perform scheme specific serialization\n\tif (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n\n\tif (components.host) {\n\t\t//if host component is an IPv6 address\n\t\tif (protocol.IPV6ADDRESS.test(components.host)) {\n\t\t\t//TODO: normalize IPv6 address as per RFC 5952\n\t\t}\n\n\t\t//if host component is a domain name\n\t\telse if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) {\n\t\t\t//convert IDN via punycode\n\t\t\ttry {\n\t\t\t\tcomponents.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host));\n\t\t\t} catch (e) {\n\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t}\n\t\t}\n\t}\n\n\t//normalize encoding\n\t_normalizeComponentEncoding(components, protocol);\n\n\tif (options.reference !== \"suffix\" && components.scheme) {\n\t\turiTokens.push(components.scheme);\n\t\turiTokens.push(\":\");\n\t}\n\n\tconst authority = _recomposeAuthority(components, options);\n\tif (authority !== undefined) {\n\t\tif (options.reference !== \"suffix\") {\n\t\t\turiTokens.push(\"//\");\n\t\t}\n\n\t\turiTokens.push(authority);\n\n\t\tif (components.path && components.path.charAt(0) !== \"/\") {\n\t\t\turiTokens.push(\"/\");\n\t\t}\n\t}\n\n\tif (components.path !== undefined) {\n\t\tlet s = components.path;\n\n\t\tif (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n\t\t\ts = removeDotSegments(s);\n\t\t}\n\n\t\tif (authority === undefined) {\n\t\t\ts = s.replace(/^\\/\\//, \"/%2F\"); //don't allow the path to start with \"//\"\n\t\t}\n\n\t\turiTokens.push(s);\n\t}\n\n\tif (components.query !== undefined) {\n\t\turiTokens.push(\"?\");\n\t\turiTokens.push(components.query);\n\t}\n\n\tif (components.fragment !== undefined) {\n\t\turiTokens.push(\"#\");\n\t\turiTokens.push(components.fragment);\n\t}\n\n\treturn uriTokens.join(\"\"); //merge tokens into a string\n};\n\nexport function resolveComponents(base:URIComponents, relative:URIComponents, options:URIOptions = {}, skipNormalization?:boolean):URIComponents {\n\tconst target:URIComponents = {};\n\n\tif (!skipNormalization) {\n\t\tbase = parse(serialize(base, options), options); //normalize base components\n\t\trelative = parse(serialize(relative, options), options); //normalize relative components\n\t}\n\toptions = options || {};\n\n\tif (!options.tolerant && relative.scheme) {\n\t\ttarget.scheme = relative.scheme;\n\t\t//target.authority = relative.authority;\n\t\ttarget.userinfo = relative.userinfo;\n\t\ttarget.host = relative.host;\n\t\ttarget.port = relative.port;\n\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\ttarget.query = relative.query;\n\t} else {\n\t\tif (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n\t\t\t//target.authority = relative.authority;\n\t\t\ttarget.userinfo = relative.userinfo;\n\t\t\ttarget.host = relative.host;\n\t\t\ttarget.port = relative.port;\n\t\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\t\ttarget.query = relative.query;\n\t\t} else {\n\t\t\tif (!relative.path) {\n\t\t\t\ttarget.path = base.path;\n\t\t\t\tif (relative.query !== undefined) {\n\t\t\t\t\ttarget.query = relative.query;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.query = base.query;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (relative.path.charAt(0) === \"/\") {\n\t\t\t\t\ttarget.path = removeDotSegments(relative.path);\n\t\t\t\t} else {\n\t\t\t\t\tif ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n\t\t\t\t\t\ttarget.path = \"/\" + relative.path;\n\t\t\t\t\t} else if (!base.path) {\n\t\t\t\t\t\ttarget.path = relative.path;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n\t\t\t\t\t}\n\t\t\t\t\ttarget.path = removeDotSegments(target.path);\n\t\t\t\t}\n\t\t\t\ttarget.query = relative.query;\n\t\t\t}\n\t\t\t//target.authority = base.authority;\n\t\t\ttarget.userinfo = base.userinfo;\n\t\t\ttarget.host = base.host;\n\t\t\ttarget.port = base.port;\n\t\t}\n\t\ttarget.scheme = base.scheme;\n\t}\n\n\ttarget.fragment = relative.fragment;\n\n\treturn target;\n};\n\nexport function resolve(baseURI:string, relativeURI:string, options?:URIOptions):string {\n\treturn serialize(resolveComponents(parse(baseURI, options), parse(relativeURI, options), options, true), options);\n};\n\nexport function normalize(uri:string, options?:URIOptions):string;\nexport function normalize(uri:URIComponents, options?:URIOptions):URIComponents;\nexport function normalize(uri:any, options?:URIOptions):any {\n\tif (typeof uri === \"string\") {\n\t\turi = serialize(parse(uri, options), options);\n\t} else if (typeOf(uri) === \"object\") {\n\t\turi = parse(serialize(<URIComponents>uri, options), options);\n\t}\n\n\treturn uri;\n};\n\nexport function equal(uriA:string, uriB:string, options?: URIOptions):boolean;\nexport function equal(uriA:URIComponents, uriB:URIComponents, options?:URIOptions):boolean;\nexport function equal(uriA:any, uriB:any, options?:URIOptions):boolean {\n\tif (typeof uriA === \"string\") {\n\t\turiA = serialize(parse(uriA, options), options);\n\t} else if (typeOf(uriA) === \"object\") {\n\t\turiA = serialize(<URIComponents>uriA, options);\n\t}\n\n\tif (typeof uriB === \"string\") {\n\t\turiB = serialize(parse(uriB, options), options);\n\t} else if (typeOf(uriB) === \"object\") {\n\t\turiB = serialize(<URIComponents>uriB, options);\n\t}\n\n\treturn uriA === uriB;\n};\n\nexport function escapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar);\n};\n\nexport function unescapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars);\n};\n","import { URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, pctDecChars, unescapeComponent } from \"../uri\";\nimport punycode from \"punycode\";\nimport { merge, subexp, toUpperCase, toArray } from \"../util\";\n\nexport interface MailtoHeaders {\n\t[hfname:string]:string\n}\n\nexport interface MailtoComponents extends URIComponents {\n\tto:Array<string>,\n\theaders?:MailtoHeaders,\n\tsubject?:string,\n\tbody?:string\n}\n\nconst O:MailtoHeaders = {};\nconst isIRI = true;\n\n//RFC 3986\nconst UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nconst HEXDIG$$ = \"[0-9A-Fa-f]\"; //case-insensitive\nconst PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)); //expanded\n\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\"; //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nconst ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nconst QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nconst VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nconst DOT_ATOM_TEXT$ = subexp(ATEXT$$ + \"+\" + subexp(\"\\\\.\" + ATEXT$$ + \"+\") + \"*\");\nconst QUOTED_PAIR$ = subexp(\"\\\\\\\\\" + VCHAR$$);\nconst QCONTENT$ = subexp(QTEXT$$ + \"|\" + QUOTED_PAIR$);\nconst QUOTED_STRING$ = subexp('\\\\\"' + QCONTENT$ + \"*\" + '\\\\\"');\n\n//RFC 6068\nconst DTEXT_NO_OBS$$ = \"[\\\\x21-\\\\x5A\\\\x5E-\\\\x7E]\"; //%d33-90 / %d94-126\nconst SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nconst QCHAR$ = subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$ + \"|\" + SOME_DELIMS$$);\nconst DOMAIN$ = subexp(DOT_ATOM_TEXT$ + \"|\" + \"\\\\[\" + DTEXT_NO_OBS$$ + \"*\" + \"\\\\]\");\nconst LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + \"|\" + QUOTED_STRING$);\nconst ADDR_SPEC$ = subexp(LOCAL_PART$ + \"\\\\@\" + DOMAIN$);\nconst TO$ = subexp(ADDR_SPEC$ + subexp(\"\\\\,\" + ADDR_SPEC$) + \"*\");\nconst HFNAME$ = subexp(QCHAR$ + \"*\");\nconst HFVALUE$ = HFNAME$;\nconst HFIELD$ = subexp(HFNAME$ + \"\\\\=\" + HFVALUE$);\nconst HFIELDS2$ = subexp(HFIELD$ + subexp(\"\\\\&\" + HFIELD$) + \"*\");\nconst HFIELDS$ = subexp(\"\\\\?\" + HFIELDS2$);\nconst MAILTO_URI = new RegExp(\"^mailto\\\\:\" + TO$ + \"?\" + HFIELDS$ + \"?$\");\n\nconst UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nconst PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nconst NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nconst NOT_DOMAIN = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", \"[\\\\[]\", DTEXT_NO_OBS$$, \"[\\\\]]\"), \"g\");\nconst NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nconst NOT_HFVALUE = NOT_HFNAME;\nconst TO = new RegExp(\"^\" + TO$ + \"$\");\nconst HFIELDS = new RegExp(\"^\" + HFIELDS2$ + \"$\");\n\nfunction decodeUnreserved(str:string):string {\n\tconst decStr = pctDecChars(str);\n\treturn (!decStr.match(UNRESERVED) ? str : decStr);\n}\n\nexport default {\n\tscheme : \"mailto\",\n\n\tparse : function (components:MailtoComponents, options:URIOptions):MailtoComponents {\n\t\tconst to = components.to = (components.path ? components.path.split(\",\") : []);\n\t\tcomponents.path = undefined;\n\n\t\tif (components.query) {\n\t\t\tlet unknownHeaders = false\n\t\t\tconst headers:MailtoHeaders = {};\n\t\t\tconst hfields = components.query.split(\"&\");\n\n\t\t\tfor (let x = 0, xl = hfields.length; x < xl; ++x) {\n\t\t\t\tconst hfield = hfields[x].split(\"=\");\n\n\t\t\t\tswitch (hfield[0]) {\n\t\t\t\t\tcase \"to\":\n\t\t\t\t\t\tconst toAddrs = hfield[1].split(\",\");\n\t\t\t\t\t\tfor (let x = 0, xl = toAddrs.length; x < xl; ++x) {\n\t\t\t\t\t\t\tto.push(toAddrs[x]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subject\":\n\t\t\t\t\t\tcomponents.subject = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"body\":\n\t\t\t\t\t\tcomponents.body = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tunknownHeaders = true;\n\t\t\t\t\t\theaders[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (unknownHeaders) components.headers = headers;\n\t\t}\n\n\t\tcomponents.query = undefined;\n\n\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\tconst addr = to[x].split(\"@\");\n\n\t\t\taddr[0] = unescapeComponent(addr[0]);\n\n\t\t\tif (!options.unicodeSupport) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\taddr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\taddr[1] = unescapeComponent(addr[1], options).toLowerCase();\n\t\t\t}\n\n\t\t\tto[x] = addr.join(\"@\");\n\t\t}\n\n\t\treturn components;\n\t},\n\n\tserialize : function (components:MailtoComponents, options:URIOptions):URIComponents {\n\t\tconst to = toArray(components.to);\n\t\tif (to) {\n\t\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\t\tconst toAddr = String(to[x]);\n\t\t\t\tconst atIdx = toAddr.lastIndexOf(\"@\");\n\t\t\t\tconst localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n\t\t\t\tlet domain = toAddr.slice(atIdx + 1);\n\n\t\t\t\t//convert IDN via punycode\n\t\t\t\ttry {\n\t\t\t\t\tdomain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t\t}\n\n\t\t\t\tto[x] = localPart + \"@\" + domain;\n\t\t\t}\n\n\t\t\tcomponents.path = to.join(\",\");\n\t\t}\n\n\t\tconst headers = components.headers = components.headers || {};\n\n\t\tif (components.subject) headers[\"subject\"] = components.subject;\n\t\tif (components.body) headers[\"body\"] = components.body;\n\n\t\tconst fields = [];\n\t\tfor (const name in headers) {\n\t\t\tif (headers[name] !== O[name]) {\n\t\t\t\tfields.push(\n\t\t\t\t\tname.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) +\n\t\t\t\t\t\"=\" +\n\t\t\t\t\theaders[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (fields.length) {\n\t\t\tcomponents.query = fields.join(\"&\");\n\t\t}\n\n\t\treturn components;\n\t}\n}\n","import { URIRegExps } from \"./uri\";\nimport { buildExps } from \"./regexps-uri\";\n\nexport default buildExps(true);\n","import { URIComponents, URIOptions } from \"../uri\";\n\nexport default {\n\tscheme : \"http\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//report missing host\n\t\tif (!components.host) {\n\t\t\tcomponents.error = components.error || \"HTTP URIs must have a host.\";\n\t\t}\n\n\t\treturn components;\n\t},\n\n\tserialize : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//normalize the default port\n\t\tif (components.port === (String(components.scheme).toLowerCase() !== \"https\" ? 80 : 443) || components.port === \"\") {\n\t\t\tcomponents.port = undefined;\n\t\t}\n\t\t\n\t\t//normalize the empty path\n\t\tif (!components.path) {\n\t\t\tcomponents.path = \"/\";\n\t\t}\n\n\t\t//NOTE: We do not parse query strings for HTTP URIs\n\t\t//as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n\t\t//and not the HTTP spec.\n\n\t\treturn components;\n\t}\n};\n","import { URIComponents, URIOptions } from \"../uri\";\nimport http from \"./http\";\n\nexport default {\n\tscheme : \"https\",\n\tdomainHost : http.domainHost,\n\tparse : http.parse,\n\tserialize : http.serialize\n}\n","import { URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, SCHEMES } from \"../uri\";\n\nconst NID$ = \"(?:[0-9A-Za-z][0-9A-Za-z\\\\-]{1,31})\";\nconst PCT_ENCODED$ = \"(?:\\\\%[0-9A-Fa-f]{2})\";\nconst TRANS$$ = \"[0-9A-Za-z\\\\(\\\\)\\\\+\\\\,\\\\-\\\\.\\\\:\\\\=\\\\@\\\\;\\\\$\\\\_\\\\!\\\\*\\\\'\\\\/\\\\?\\\\#]\";\nconst NSS$ = \"(?:(?:\" + PCT_ENCODED$ + \"|\" + TRANS$$ + \")+)\";\nconst URN_SCHEME = new RegExp(\"^urn\\\\:(\" + NID$ + \")$\");\nconst URN_PATH = new RegExp(\"^(\" + NID$ + \")\\\\:(\" + NSS$ + \")$\");\nconst URN_PARSE = /^([^\\:]+)\\:(.*)/;\nconst URN_EXCLUDED = /[\\x00-\\x20\\\\\\\"\\&\\<\\>\\[\\]\\^\\`\\{\\|\\}\\~\\x7F-\\xFF]/g;\n\n//RFC 2141\nexport default {\n\tscheme : \"urn\",\n\n\tparse : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\tconst matches = components.path && components.path.match(URN_PARSE);\n\n\t\tif (matches) {\n\t\t\tconst scheme = \"urn:\" + matches[1].toLowerCase();\n\t\t\tlet schemeHandler = SCHEMES[scheme];\n\n\t\t\t//in order to serialize properly,\n\t\t\t//every URN must have a serializer that calls the URN serializer\n\t\t\tif (!schemeHandler) {\n\t\t\t\t//create fake scheme handler\n\t\t\t\tschemeHandler = SCHEMES[scheme] = {\n\t\t\t\t\tscheme : scheme,\n\t\t\t\t\tparse : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t\t\t\t\treturn components;\n\t\t\t\t\t},\n\t\t\t\t\tserialize : SCHEMES[\"urn\"].serialize\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tcomponents.scheme = scheme;\n\t\t\tcomponents.path = matches[2];\n\n\t\t\tcomponents = schemeHandler.parse(components, options);\n\t\t} else {\n\t\t\tcomponents.error = components.error || \"URN can not be parsed.\";\n\t\t}\n\n\t\treturn components;\n\t},\n\n\tserialize : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\tconst scheme = components.scheme || options.scheme;\n\n\t\tif (scheme && scheme !== \"urn\") {\n\t\t\tconst matches = scheme.match(URN_SCHEME) || [\"urn:\" + scheme, scheme];\n\t\t\tcomponents.scheme = \"urn\";\n\t\t\tcomponents.path = matches[1] + \":\" + (components.path ? components.path.replace(URN_EXCLUDED, pctEncChar) : \"\");\n\t\t}\n\n\t\treturn components;\n\t}\n};\n","import { URIComponents, URIOptions } from \"../uri\";\nimport { SCHEMES } from \"../uri\";\n\nconst UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\n\n//RFC 4122\nexport default {\n\tscheme : \"urn:uuid\",\n\n\tparse : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\tif (!options.tolerant && (!components.path || !components.path.match(UUID))) {\n\t\t\tcomponents.error = components.error || \"UUID is not valid.\";\n\t\t}\n\t\treturn components;\n\t},\n\n\tserialize : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//ensure UUID is valid\n\t\tif (!options.tolerant && (!components.path || !components.path.match(UUID))) {\n\t\t\t//invalid UUIDs can not have this scheme\n\t\t\tcomponents.scheme = undefined;\n\t\t} else {\n\t\t\t//normalize UUID\n\t\t\tcomponents.path = (components.path || \"\").toLowerCase();\n\t\t}\n\n\t\treturn SCHEMES[\"urn\"].serialize(components, options);\n\t}\n};\n","import { SCHEMES } from \"./uri\";\n\nimport http from \"./schemes/http\";\nSCHEMES[\"http\"] = http;\n\nimport https from \"./schemes/https\";\nSCHEMES[\"https\"] = https;\n\nimport mailto from \"./schemes/mailto\";\nSCHEMES[\"mailto\"] = mailto;\n\nimport urn from \"./schemes/urn\";\nSCHEMES[\"urn\"] = urn;\n\nimport uuid from \"./schemes/urn-uuid\";\nSCHEMES[\"urn:uuid\"] = uuid;\n\nexport * from \"./uri\";\n"]}