@sumaris-net/ngx-components 18.23.20 → 18.23.21
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/doc/changelog.md +3 -0
- package/esm2022/src/app/core/services/model/peer.model.mjs +6 -5
- package/esm2022/src/app/core/services/platform.service.mjs +47 -2
- package/esm2022/src/app/shared/file/uri.utils.mjs +1 -1
- package/esm2022/src/app/shared/file/url.utils.mjs +18 -2
- package/fesm2022/sumaris-net.ngx-components.mjs +63 -4
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/core/services/model/peer.model.d.ts +1 -1
- package/src/app/core/services/platform.service.d.ts +8 -1
- package/src/app/shared/file/url.utils.d.ts +9 -0
- package/src/assets/manifest.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isNilOrBlank, isNotNil } from '../functions';
|
|
1
|
+
import { isNilOrBlank, isNotNil, noTrailingSlash } from '../functions';
|
|
2
2
|
export class UrlUtils {
|
|
3
3
|
/**
|
|
4
4
|
* Determines if a given URL is a relative URL.
|
|
@@ -178,12 +178,18 @@ export class UrlUtils {
|
|
|
178
178
|
return href;
|
|
179
179
|
}
|
|
180
180
|
static addTrailingSlash(url) {
|
|
181
|
+
if (!url)
|
|
182
|
+
return '/';
|
|
181
183
|
return url.endsWith('/') ? url : url + '/';
|
|
182
184
|
}
|
|
183
185
|
static addStartingSlash(url) {
|
|
186
|
+
if (!url)
|
|
187
|
+
return '/';
|
|
184
188
|
return url.startsWith('/') ? url : '/' + url;
|
|
185
189
|
}
|
|
186
190
|
static removeStartingSlash(url) {
|
|
191
|
+
if (!url)
|
|
192
|
+
return '';
|
|
187
193
|
return url.startsWith('/') ? url.substring(1) : url;
|
|
188
194
|
}
|
|
189
195
|
static concat(basePath, relativePath) {
|
|
@@ -193,5 +199,15 @@ export class UrlUtils {
|
|
|
193
199
|
return basePath;
|
|
194
200
|
return this.addTrailingSlash(basePath) + this.removeStartingSlash(relativePath);
|
|
195
201
|
}
|
|
202
|
+
/**
|
|
203
|
+
* Cleans the given pathname by replacing occurrences of multiple consecutive slashes with a single slash.
|
|
204
|
+
*
|
|
205
|
+
* @param {string} pathname - The pathname to be cleaned.
|
|
206
|
+
* @return {string} The cleaned pathname with redundant slashes removed.
|
|
207
|
+
*/
|
|
208
|
+
static cleanPath(pathname) {
|
|
209
|
+
return pathname?.replace(/\/\/+/, '/');
|
|
210
|
+
}
|
|
211
|
+
static noTrailingSlash = noTrailingSlash;
|
|
196
212
|
}
|
|
197
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZmlsZS91cmwudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdEQsTUFBTSxPQUFnQixRQUFRO0lBQzVCOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFtQjtRQUN0QyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBbUI7UUFDdEMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLElBQW1CO1FBQ3RDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFXO1FBQzNCLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxHQUFHLENBQUM7UUFD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QUFXO1FBQ2pDLE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQy9DLENBQUM7SUFFRCxNQUFNLENBQUMsbUJBQW1CLENBQUMsR0FBVztRQUNwQyxPQUFPLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUN0RCxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFnQixFQUFFLFlBQW9CO1FBQ2xELElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxZQUFZLENBQUM7UUFDbkMsSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEYsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNOaWxPckJsYW5rLCBpc05vdE5pbCB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBVcmxVdGlscyB7XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gVVJMIGlzIGEgcmVsYXRpdmUgVVJMLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IGhyZWYgLSBUaGUgVVJMIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBVUkwgaXMgcmVsYXRpdmUsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHN0YXRpYyBpc1JlbGF0aXZlVXJsKGhyZWY6IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHtcbiAgICBpZiAoIWhyZWYpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gIWhyZWYuc3RhcnRzV2l0aCgnaHR0cDonKSAmJiAhaHJlZi5zdGFydHNXaXRoKCdodHRwczonKSAmJiAhaHJlZi5zdGFydHNXaXRoKCdtYWlsdG86JykgJiYgIWhyZWYuc3RhcnRzV2l0aCgndGVsOicpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgYSBnaXZlbiBVUkwgaXMgYW4gaW50ZXJuYWwgVVJMLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IGhyZWYgLSBUaGUgVVJMIHRvIGJlIGNoZWNrZWQuIENhbiBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIFVSTCBvciBudWxsLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIFVSTCBpcyBpbnRlcm5hbCwgb3RoZXJ3aXNlIGZhbHNlLlxuICAgKi9cbiAgc3RhdGljIGlzSW50ZXJuYWxVcmwoaHJlZjogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIGlmICghaHJlZikgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBocmVmLnN0YXJ0c1dpdGgod2luZG93LmxvY2F0aW9uLm9yaWdpbikgfHwgdGhpcy5pc1JlbGF0aXZlVXJsKGhyZWYpO1xuICB9XG5cbiAgc3RhdGljIGlzRXh0ZXJuYWxVcmwoaHJlZjogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIGlmICghaHJlZikgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhdGhpcy5pc0ludGVybmFsVXJsKGhyZWYpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIHF1ZXJ5IHN0cmluZyBmcm9tIHRoZSBnaXZlbiBVUkwsIHJldHVybmluZyBvbmx5IHRoZSBiYXNlIFVSTC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIFRoZSBVUkwgZnJvbSB3aGljaCB0aGUgcXVlcnkgc3RyaW5nIHdpbGwgYmUgc3RyaXBwZWQuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVSTCB3aXRob3V0IHRoZSBxdWVyeSBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgc3RyaXBRdWVyeSh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF1cmwpIHJldHVybiB1cmw7XG4gICAgcmV0dXJuIC9bXj9dKi8uZXhlYyh1cmwpWzBdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGZyYWdtZW50IGFuZCBxdWVyeSBjb21wb25lbnRzIGZyb20gYSBnaXZlbiBVUkwgc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gVGhlIFVSTCBzdHJpbmcgdG8gcHJvY2Vzcy5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgVVJMIHdpdGhvdXQgaXRzIGZyYWdtZW50IGFuZCBxdWVyeSBjb21wb25lbnRzLlxuICAgKi9cbiAgc3RhdGljIHN0cmlwRnJhZ21lbnRBbmRRdWVyeSh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF1cmwpIHJldHVybiB1cmw7XG4gICAgcmV0dXJuIHRoaXMuc3RyaXBRdWVyeSgvW14jXSovLmV4ZWModXJsKVswXSk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIGZyYWdtZW50IGlkZW50aWZpZXIgZnJvbSB0aGUgZ2l2ZW4gVVJMLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gVGhlIFVSTCBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGZyYWdtZW50LlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBmcmFnbWVudCBpZGVudGlmaWVyIG9mIHRoZSBVUkwsIGV4Y2x1ZGluZyB0aGUgJyMnIHN5bWJvbC5cbiAgICovXG4gIHN0YXRpYyBnZXRGcmFnbWVudCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGlzTmlsT3JCbGFuayh1cmwpKSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCBtYXRjaCA9IHVybC5tYXRjaCgvIyguKikkLyk7XG4gICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiAnJztcbiAgfVxuXG4gIHN0YXRpYyByZXNvbHZlUmVsYXRpdmVVcmwoYmFzZVVybDogc3RyaW5nLCByZWxhdGl2ZVBhdGg6IHN0cmluZywgb3B0cz86IHsgYWJzb2x1dGVCeURlZmF1bHQ6IGJvb2xlYW4gfSk6IHN0cmluZyB7XG4gICAgaWYgKCFiYXNlVXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nICdiYXNlVXJsJyBhcmd1bWVudFwiKTtcbiAgICBpZiAoIXJlbGF0aXZlUGF0aCkgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyAncmVsYXRpdmVQYXRoJyBhcmd1bWVudFwiKTtcbiAgICBpZiAoIXRoaXMuaXNSZWxhdGl2ZVVybChyZWxhdGl2ZVBhdGgpKSB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBiZSBhIHJlbGF0aXZlIHBhdGgnKTtcblxuICAgIC8vIERldGVjdCBhYnNvbHV0ZSBVUkxcbiAgICBpZiAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy8nKSB8fCAob3B0cz8uYWJzb2x1dGVCeURlZmF1bHQgJiYgIXJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCcuJykpKSB7XG4gICAgICBiYXNlVXJsID0gdGhpcy5nZXRSb290VXJsKGJhc2VVcmwpO1xuICAgIH1cblxuICAgIHJldHVybiBVcmxVdGlscy5ub3JtYWxpemVVcmwoVXJsVXRpbHMuY29uY2F0KGJhc2VVcmwsIHJlbGF0aXZlUGF0aCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGEgZ2l2ZW4gVVJMIGJ5IG5vcm1hbGl6aW5nIGl0cyBwYXJ0cywgcmVtb3ZpbmcgdW5uZWNlc3NhcnkgcGF0aCBzZWdtZW50cyBsaWtlIFwiLlwiIGFuZCBcIi4uXCIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSBUaGUgVVJMIHRvIGJlIHJlc29sdmVkLiBNdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgcmVzb2x2ZWQgYW5kIGNsZWFuZWQgVVJMIHN0cmluZy5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwcm92aWRlZCBVUkwgaXMgbWlzc2luZyBvciB1bmRlZmluZWQuXG4gICAqL1xuICBzdGF0aWMgbm9ybWFsaXplVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXVybCkgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyAndXJsJyBhcmd1bWVudFwiKTtcbiAgICByZXR1cm4gdGhpcy5jbGVhblVybCh1cmwpXG4gICAgICAuc3BsaXQoJy8nKVxuICAgICAgLnJlZHVjZSgocmVzLCBwYXJ0KSA9PiB7XG4gICAgICAgIGlmIChwYXJ0ID09PSAnLicpIHJldHVybiByZXM7XG4gICAgICAgIGlmIChwYXJ0ID09PSAnLi4nICYmIHJlcy5sZW5ndGggPiAwKSByZXR1cm4gcmVzLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgcmV0dXJuIHJlcy5jb25jYXQocGFydCk7XG4gICAgICB9LCBbXSlcbiAgICAgIC5qb2luKCcvJyk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjb21wbGV0ZXMgYSBiYXNlIFVSTCB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIGtleS12YWx1ZSBwYWlyc1xuICAgKiByZXByZXNlbnRpbmcgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gYWRkLiBJdCBwcm9wZXJseSBlbmNvZGVzIHRoZVxuICAgKiBwYXJhbWV0ZXJzIGFuZCBlbnN1cmVzIHRoZXkgYXJlIGFkZGVkIHdpdGggdGhlIGFwcHJvcHJpYXRlIHNlcGFyYXRvciAoJz8nIG9yICcmJykuXG4gICAqIFBhcmFtZXRlcnMgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCB2YWx1ZXMgYXJlIGF1dG9tYXRpY2FsbHkgZmlsdGVyZWQgb3V0LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBJbiBhIHRlbXBsYXRlXG4gICAqIDxhIFtocmVmXT1cIidodHRwczovL2V4YW1wbGUuY29tJyB8IGFwcGVuZFF1ZXJ5UGFyYW1zOntpZDogMTIzLCBuYW1lOiAndGVzdCd9XCI+TGluazwvYT5cbiAgICogLy8gUmVzdWx0OiBodHRwczovL2V4YW1wbGUuY29tP2lkPTEyMyZuYW1lPXRlc3RcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gSWYgdGhlIFVSTCBhbHJlYWR5IGNvbnRhaW5zIHBhcmFtZXRlcnNcbiAgICogPGEgW2hyZWZdPVwiJ2h0dHBzOi8vZXhhbXBsZS5jb20/cGFnZT0xJyB8IGFwcGVuZFF1ZXJ5UGFyYW1zOntzb3J0OiAnYXNjJ31cIj5MaW5rPC9hPlxuICAgKiAvLyBSZXN1bHQ6IGh0dHBzOi8vZXhhbXBsZS5jb20/cGFnZT0xJnNvcnQ9YXNjXG4gICAqXG4gICAqIEBwYXJhbSB1cmxcbiAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zXG4gICAqL1xuICBzdGF0aWMgYXBwZW5kUXVlcnlQYXJhbXModXJsOiBzdHJpbmcgfCBhbnlbXSwgcXVlcnlQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybFN0ciA9IHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnID8gdXJsIDogdGhpcy5hZGRTdGFydGluZ1NsYXNoKHVybC5qb2luKCcvJykpO1xuICAgIGlmIChpc05pbE9yQmxhbmsodXJsU3RyKSB8fCAhcXVlcnlQYXJhbXMpIHJldHVybiB1cmxTdHI7XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBPYmplY3QuZW50cmllcyhxdWVyeVBhcmFtcylcbiAgICAgIC5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IGlzTm90TmlsKHZhbHVlKSlcbiAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX1gKVxuICAgICAgLmpvaW4oJyYnKTtcbiAgICBpZiAoaXNOaWxPckJsYW5rKHF1ZXJ5U3RyaW5nKSkgcmV0dXJuIHVybFN0cjtcbiAgICByZXR1cm4gdXJsU3RyICsgKHVybFN0ci5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nKSArIHF1ZXJ5U3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIGFuZCByZXR1cm5zIHRoZSByb290IFVSTCBmcm9tIHRoZSBnaXZlbiBjb21wbGV0ZSBVUkwgc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gVGhlIGNvbXBsZXRlIFVSTCBzdHJpbmcgZnJvbSB3aGljaCB0aGUgcm9vdCBVUkwgd2lsbCBiZSBleHRyYWN0ZWQuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHJvb3QgVVJMIGluY2x1ZGluZyB0aGUgcHJvdG9jb2wgYW5kIGhvc3QgKGFuZCBwb3J0IGlmIHByZXNlbnQpLlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBwcm92aWRlZCBVUkwgaXMgbWlzc2luZyBvciBpcyBpbiBhbiBpbnZhbGlkIGZvcm1hdC5cbiAgICovXG4gIHN0YXRpYyBnZXRSb290VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXVybCkgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyAndXJsJyBhcmd1bWVudFwiKTtcbiAgICBsZXQgW3Byb3RvY29sLCBwYXRoXSA9IHVybC5zcGxpdCgnLy8nLCAyKTtcbiAgICBpZiAoIXByb3RvY29sIHx8IGlzTmlsT3JCbGFuayhwYXRoKSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFVSTCBmb3JtYXQ6ICR7dXJsfWApO1xuICAgIGNvbnN0IGhvc3RBbmRQb3J0ID0gcGF0aC5zcGxpdCgnLycsIDIpWzBdO1xuICAgIHJldHVybiBgJHtwcm90b2NvbH0vLyR7aG9zdEFuZFBvcnR9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHBhcmVudCBVUkwgb3IgZGlyZWN0b3J5IHBhdGggZnJvbSB0aGUgcHJvdmlkZWQgVVJMLlxuICAgKiBUaGlzIG1ldGhvZCBoYW5kbGVzIGJvdGggcmVsYXRpdmUgYW5kIGFic29sdXRlIFVSTHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSBUaGUgVVJMIGZyb20gd2hpY2ggdG8gZGVyaXZlIHRoZSBwYXJlbnQgcGF0aC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgIE11c3QgYmUgYSB2YWxpZCBVUkwgb3IgcmVsYXRpdmUgcGF0aC5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgcGFyZW50IFVSTCBvciBkaXJlY3RvcnkgcGF0aC4gVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBpbnB1dCBpcyBpbnZhbGlkLlxuICAgKi9cbiAgc3RhdGljIGdldFBhcmVudCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF1cmwpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgJ3VybCcgYXJndW1lbnRcIik7XG4gICAgY29uc3QgY2xlYW5VcmwgPSB0aGlzLnN0cmlwRnJhZ21lbnRBbmRRdWVyeSh1cmwpO1xuICAgIGlmIChjbGVhblVybC5lbmRzV2l0aCgnLycpKSByZXR1cm4gY2xlYW5Vcmw7IC8vIFNraXAgaWYgYWxyZWFkeSBhIHBhcmVudCBkaXJlY3RvcnlcbiAgICBjb25zdCBwYXJlbnRQYXRoID0gY2xlYW5VcmwgKyAnLycgKyAnLi4nO1xuICAgIGlmICh0aGlzLmlzUmVsYXRpdmVVcmwodXJsKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVJlbGF0aXZlVXJsKHdpbmRvdy5sb2NhdGlvbi5ocmVmLCBwYXJlbnRQYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubm9ybWFsaXplVXJsKHBhcmVudFBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFucyB0aGUgcHJvdmlkZWQgVVJMIGJ5IGVuY29kaW5nIGl0IHNhZmVseSBhbmQgcmVwbGFjaW5nIHNwZWNpZmljIHBhdHRlcm5zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaHJlZiAtIFRoZSBVUkwgc3RyaW5nIHRvIGJlIGNsZWFuZWQuXG4gICAqIEByZXR1cm4ge3N0cmluZ3xudWxsfSBUaGUgY2xlYW5lZCBhbmQgZW5jb2RlZCBVUkwgc3RyaW5nLCBvciBudWxsIGlmIGFuIGVycm9yIG9jY3Vycy5cbiAgICovXG4gIHN0YXRpYyBjbGVhblVybChocmVmOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBocmVmID0gZW5jb2RlVVJJKGhyZWYpLnJlcGxhY2UoLyUyNS9nLCAnJScpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gaHJlZjtcbiAgfVxuXG4gIHN0YXRpYyBhZGRUcmFpbGluZ1NsYXNoKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdXJsLmVuZHNXaXRoKCcvJykgPyB1cmwgOiB1cmwgKyAnLyc7XG4gIH1cblxuICBzdGF0aWMgYWRkU3RhcnRpbmdTbGFzaCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybC5zdGFydHNXaXRoKCcvJykgPyB1cmwgOiAnLycgKyB1cmw7XG4gIH1cblxuICBzdGF0aWMgcmVtb3ZlU3RhcnRpbmdTbGFzaCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybC5zdGFydHNXaXRoKCcvJykgPyB1cmwuc3Vic3RyaW5nKDEpIDogdXJsO1xuICB9XG5cbiAgc3RhdGljIGNvbmNhdChiYXNlUGF0aDogc3RyaW5nLCByZWxhdGl2ZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFiYXNlUGF0aCkgcmV0dXJuIHJlbGF0aXZlUGF0aDtcbiAgICBpZiAoIXJlbGF0aXZlUGF0aCkgcmV0dXJuIGJhc2VQYXRoO1xuICAgIHJldHVybiB0aGlzLmFkZFRyYWlsaW5nU2xhc2goYmFzZVBhdGgpICsgdGhpcy5yZW1vdmVTdGFydGluZ1NsYXNoKHJlbGF0aXZlUGF0aCk7XG4gIH1cbn1cbiJdfQ==
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZmlsZS91cmwudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXZFLE1BQU0sT0FBZ0IsUUFBUTtJQUM1Qjs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBbUI7UUFDdEMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1SCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUFDLElBQW1CO1FBQ3RDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFtQjtRQUN0QyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBVztRQUMzQixJQUFJLENBQUMsR0FBRztZQUFFLE9BQU8sR0FB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RyxHQUFHLENBQUM7SUFDN0MsQ0FBQztJQUVELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFXO1FBQ2pDLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxHQUFHLENBQUM7UUFDckIsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDL0MsQ0FBQztJQUVELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFXO1FBQ3BDLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDcEIsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDdEQsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBZ0IsRUFBRSxZQUFvQjtRQUNsRCxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sWUFBWSxDQUFDO1FBQ25DLElBQUksQ0FBQyxZQUFZO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBZ0I7UUFDL0IsT0FBTyxRQUFRLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsTUFBTSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc05pbE9yQmxhbmssIGlzTm90TmlsLCBub1RyYWlsaW5nU2xhc2ggfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVXJsVXRpbHMge1xuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIFVSTCBpcyBhIHJlbGF0aXZlIFVSTC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSBocmVmIC0gVGhlIFVSTCB0byBjaGVjay5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgVVJMIGlzIHJlbGF0aXZlLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBzdGF0aWMgaXNSZWxhdGl2ZVVybChocmVmOiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiB7XG4gICAgaWYgKCFocmVmKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICFocmVmLnN0YXJ0c1dpdGgoJ2h0dHA6JykgJiYgIWhyZWYuc3RhcnRzV2l0aCgnaHR0cHM6JykgJiYgIWhyZWYuc3RhcnRzV2l0aCgnbWFpbHRvOicpICYmICFocmVmLnN0YXJ0c1dpdGgoJ3RlbDonKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gVVJMIGlzIGFuIGludGVybmFsIFVSTC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSBocmVmIC0gVGhlIFVSTCB0byBiZSBjaGVja2VkLiBDYW4gYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBVUkwgb3IgbnVsbC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBVUkwgaXMgaW50ZXJuYWwsIG90aGVyd2lzZSBmYWxzZS5cbiAgICovXG4gIHN0YXRpYyBpc0ludGVybmFsVXJsKGhyZWY6IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHtcbiAgICBpZiAoIWhyZWYpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gaHJlZi5zdGFydHNXaXRoKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pIHx8IHRoaXMuaXNSZWxhdGl2ZVVybChocmVmKTtcbiAgfVxuXG4gIHN0YXRpYyBpc0V4dGVybmFsVXJsKGhyZWY6IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHtcbiAgICBpZiAoIWhyZWYpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gIXRoaXMuaXNJbnRlcm5hbFVybChocmVmKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBxdWVyeSBzdHJpbmcgZnJvbSB0aGUgZ2l2ZW4gVVJMLCByZXR1cm5pbmcgb25seSB0aGUgYmFzZSBVUkwuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSBUaGUgVVJMIGZyb20gd2hpY2ggdGhlIHF1ZXJ5IHN0cmluZyB3aWxsIGJlIHN0cmlwcGVkLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVUkwgd2l0aG91dCB0aGUgcXVlcnkgc3RyaW5nLlxuICAgKi9cbiAgc3RhdGljIHN0cmlwUXVlcnkodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdXJsKSByZXR1cm4gdXJsO1xuICAgIHJldHVybiAvW14/XSovLmV4ZWModXJsKVswXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBmcmFnbWVudCBhbmQgcXVlcnkgY29tcG9uZW50cyBmcm9tIGEgZ2l2ZW4gVVJMIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIFRoZSBVUkwgc3RyaW5nIHRvIHByb2Nlc3MuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVSTCB3aXRob3V0IGl0cyBmcmFnbWVudCBhbmQgcXVlcnkgY29tcG9uZW50cy5cbiAgICovXG4gIHN0YXRpYyBzdHJpcEZyYWdtZW50QW5kUXVlcnkodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdXJsKSByZXR1cm4gdXJsO1xuICAgIHJldHVybiB0aGlzLnN0cmlwUXVlcnkoL1teI10qLy5leGVjKHVybClbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIHRoZSBmcmFnbWVudCBpZGVudGlmaWVyIGZyb20gdGhlIGdpdmVuIFVSTC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIFRoZSBVUkwgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBmcmFnbWVudC5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgZnJhZ21lbnQgaWRlbnRpZmllciBvZiB0aGUgVVJMLCBleGNsdWRpbmcgdGhlICcjJyBzeW1ib2wuXG4gICAqL1xuICBzdGF0aWMgZ2V0RnJhZ21lbnQodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChpc05pbE9yQmxhbmsodXJsKSkgcmV0dXJuICcnO1xuXG4gICAgY29uc3QgbWF0Y2ggPSB1cmwubWF0Y2goLyMoLiopJC8pO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJyc7XG4gIH1cblxuICBzdGF0aWMgcmVzb2x2ZVJlbGF0aXZlVXJsKGJhc2VVcmw6IHN0cmluZywgcmVsYXRpdmVQYXRoOiBzdHJpbmcsIG9wdHM/OiB7IGFic29sdXRlQnlEZWZhdWx0OiBib29sZWFuIH0pOiBzdHJpbmcge1xuICAgIGlmICghYmFzZVVybCkgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyAnYmFzZVVybCcgYXJndW1lbnRcIik7XG4gICAgaWYgKCFyZWxhdGl2ZVBhdGgpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgJ3JlbGF0aXZlUGF0aCcgYXJndW1lbnRcIik7XG4gICAgaWYgKCF0aGlzLmlzUmVsYXRpdmVVcmwocmVsYXRpdmVQYXRoKSkgdGhyb3cgbmV3IEVycm9yKCdTaG91bGQgYmUgYSByZWxhdGl2ZSBwYXRoJyk7XG5cbiAgICAvLyBEZXRlY3QgYWJzb2x1dGUgVVJMXG4gICAgaWYgKHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCcvJykgfHwgKG9wdHM/LmFic29sdXRlQnlEZWZhdWx0ICYmICFyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aCgnLicpKSkge1xuICAgICAgYmFzZVVybCA9IHRoaXMuZ2V0Um9vdFVybChiYXNlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVXJsVXRpbHMubm9ybWFsaXplVXJsKFVybFV0aWxzLmNvbmNhdChiYXNlVXJsLCByZWxhdGl2ZVBhdGgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhIGdpdmVuIFVSTCBieSBub3JtYWxpemluZyBpdHMgcGFydHMsIHJlbW92aW5nIHVubmVjZXNzYXJ5IHBhdGggc2VnbWVudHMgbGlrZSBcIi5cIiBhbmQgXCIuLlwiLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gVGhlIFVSTCB0byBiZSByZXNvbHZlZC4gTXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHJlc29sdmVkIGFuZCBjbGVhbmVkIFVSTCBzdHJpbmcuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcHJvdmlkZWQgVVJMIGlzIG1pc3Npbmcgb3IgdW5kZWZpbmVkLlxuICAgKi9cbiAgc3RhdGljIG5vcm1hbGl6ZVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF1cmwpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgJ3VybCcgYXJndW1lbnRcIik7XG4gICAgcmV0dXJuIHRoaXMuY2xlYW5VcmwodXJsKVxuICAgICAgLnNwbGl0KCcvJylcbiAgICAgIC5yZWR1Y2UoKHJlcywgcGFydCkgPT4ge1xuICAgICAgICBpZiAocGFydCA9PT0gJy4nKSByZXR1cm4gcmVzO1xuICAgICAgICBpZiAocGFydCA9PT0gJy4uJyAmJiByZXMubGVuZ3RoID4gMCkgcmV0dXJuIHJlcy5zbGljZSgwLCAtMSk7XG4gICAgICAgIHJldHVybiByZXMuY29uY2F0KHBhcnQpO1xuICAgICAgfSwgW10pXG4gICAgICAuam9pbignLycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY29tcGxldGVzIGEgYmFzZSBVUkwgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyBrZXktdmFsdWUgcGFpcnNcbiAgICogcmVwcmVzZW50aW5nIHRoZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIGFkZC4gSXQgcHJvcGVybHkgZW5jb2RlcyB0aGVcbiAgICogcGFyYW1ldGVycyBhbmQgZW5zdXJlcyB0aGV5IGFyZSBhZGRlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBzZXBhcmF0b3IgKCc/JyBvciAnJicpLlxuICAgKiBQYXJhbWV0ZXJzIHdpdGggbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzIGFyZSBhdXRvbWF0aWNhbGx5IGZpbHRlcmVkIG91dC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gSW4gYSB0ZW1wbGF0ZVxuICAgKiA8YSBbaHJlZl09XCInaHR0cHM6Ly9leGFtcGxlLmNvbScgfCBhcHBlbmRRdWVyeVBhcmFtczp7aWQ6IDEyMywgbmFtZTogJ3Rlc3QnfVwiPkxpbms8L2E+XG4gICAqIC8vIFJlc3VsdDogaHR0cHM6Ly9leGFtcGxlLmNvbT9pZD0xMjMmbmFtZT10ZXN0XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIElmIHRoZSBVUkwgYWxyZWFkeSBjb250YWlucyBwYXJhbWV0ZXJzXG4gICAqIDxhIFtocmVmXT1cIidodHRwczovL2V4YW1wbGUuY29tP3BhZ2U9MScgfCBhcHBlbmRRdWVyeVBhcmFtczp7c29ydDogJ2FzYyd9XCI+TGluazwvYT5cbiAgICogLy8gUmVzdWx0OiBodHRwczovL2V4YW1wbGUuY29tP3BhZ2U9MSZzb3J0PWFzY1xuICAgKlxuICAgKiBAcGFyYW0gdXJsXG4gICAqIEBwYXJhbSBxdWVyeVBhcmFtc1xuICAgKi9cbiAgc3RhdGljIGFwcGVuZFF1ZXJ5UGFyYW1zKHVybDogc3RyaW5nIHwgYW55W10sIHF1ZXJ5UGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmxTdHIgPSB0eXBlb2YgdXJsID09PSAnc3RyaW5nJyA/IHVybCA6IHRoaXMuYWRkU3RhcnRpbmdTbGFzaCh1cmwuam9pbignLycpKTtcbiAgICBpZiAoaXNOaWxPckJsYW5rKHVybFN0cikgfHwgIXF1ZXJ5UGFyYW1zKSByZXR1cm4gdXJsU3RyO1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gT2JqZWN0LmVudHJpZXMocXVlcnlQYXJhbXMpXG4gICAgICAuZmlsdGVyKChbXywgdmFsdWVdKSA9PiBpc05vdE5pbCh2YWx1ZSkpXG4gICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9YClcbiAgICAgIC5qb2luKCcmJyk7XG4gICAgaWYgKGlzTmlsT3JCbGFuayhxdWVyeVN0cmluZykpIHJldHVybiB1cmxTdHI7XG4gICAgcmV0dXJuIHVybFN0ciArICh1cmxTdHIuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/JykgKyBxdWVyeVN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBhbmQgcmV0dXJucyB0aGUgcm9vdCBVUkwgZnJvbSB0aGUgZ2l2ZW4gY29tcGxldGUgVVJMIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIFRoZSBjb21wbGV0ZSBVUkwgc3RyaW5nIGZyb20gd2hpY2ggdGhlIHJvb3QgVVJMIHdpbGwgYmUgZXh0cmFjdGVkLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSByb290IFVSTCBpbmNsdWRpbmcgdGhlIHByb3RvY29sIGFuZCBob3N0IChhbmQgcG9ydCBpZiBwcmVzZW50KS5cbiAgICogQHRocm93cyB7RXJyb3J9IFRocm93cyBhbiBlcnJvciBpZiB0aGUgcHJvdmlkZWQgVVJMIGlzIG1pc3Npbmcgb3IgaXMgaW4gYW4gaW52YWxpZCBmb3JtYXQuXG4gICAqL1xuICBzdGF0aWMgZ2V0Um9vdFVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF1cmwpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgJ3VybCcgYXJndW1lbnRcIik7XG4gICAgbGV0IFtwcm90b2NvbCwgcGF0aF0gPSB1cmwuc3BsaXQoJy8vJywgMik7XG4gICAgaWYgKCFwcm90b2NvbCB8fCBpc05pbE9yQmxhbmsocGF0aCkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVUkwgZm9ybWF0OiAke3VybH1gKTtcbiAgICBjb25zdCBob3N0QW5kUG9ydCA9IHBhdGguc3BsaXQoJy8nLCAyKVswXTtcbiAgICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2hvc3RBbmRQb3J0fWA7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBwYXJlbnQgVVJMIG9yIGRpcmVjdG9yeSBwYXRoIGZyb20gdGhlIHByb3ZpZGVkIFVSTC5cbiAgICogVGhpcyBtZXRob2QgaGFuZGxlcyBib3RoIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBVUkxzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gVGhlIFVSTCBmcm9tIHdoaWNoIHRvIGRlcml2ZSB0aGUgcGFyZW50IHBhdGguXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBNdXN0IGJlIGEgdmFsaWQgVVJMIG9yIHJlbGF0aXZlIHBhdGguXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHBhcmVudCBVUkwgb3IgZGlyZWN0b3J5IHBhdGguIFRocm93cyBhbiBlcnJvciBpZiB0aGUgaW5wdXQgaXMgaW52YWxpZC5cbiAgICovXG4gIHN0YXRpYyBnZXRQYXJlbnQodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nICd1cmwnIGFyZ3VtZW50XCIpO1xuICAgIGNvbnN0IGNsZWFuVXJsID0gdGhpcy5zdHJpcEZyYWdtZW50QW5kUXVlcnkodXJsKTtcbiAgICBpZiAoY2xlYW5VcmwuZW5kc1dpdGgoJy8nKSkgcmV0dXJuIGNsZWFuVXJsOyAvLyBTa2lwIGlmIGFscmVhZHkgYSBwYXJlbnQgZGlyZWN0b3J5XG4gICAgY29uc3QgcGFyZW50UGF0aCA9IGNsZWFuVXJsICsgJy8nICsgJy4uJztcbiAgICBpZiAodGhpcy5pc1JlbGF0aXZlVXJsKHVybCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVSZWxhdGl2ZVVybCh3aW5kb3cubG9jYXRpb24uaHJlZiwgcGFyZW50UGF0aCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZVVybChwYXJlbnRQYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbnMgdGhlIHByb3ZpZGVkIFVSTCBieSBlbmNvZGluZyBpdCBzYWZlbHkgYW5kIHJlcGxhY2luZyBzcGVjaWZpYyBwYXR0ZXJucy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgLSBUaGUgVVJMIHN0cmluZyB0byBiZSBjbGVhbmVkLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH0gVGhlIGNsZWFuZWQgYW5kIGVuY29kZWQgVVJMIHN0cmluZywgb3IgbnVsbCBpZiBhbiBlcnJvciBvY2N1cnMuXG4gICAqL1xuICBzdGF0aWMgY2xlYW5VcmwoaHJlZjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgaHJlZiA9IGVuY29kZVVSSShocmVmKS5yZXBsYWNlKC8lMjUvZywgJyUnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGhyZWY7XG4gIH1cblxuICBzdGF0aWMgYWRkVHJhaWxpbmdTbGFzaCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF1cmwpIHJldHVybiAnLyc7XG4gICAgcmV0dXJuIHVybC5lbmRzV2l0aCgnLycpID8gdXJsIDogdXJsICsgJy8nO1xuICB9XG5cbiAgc3RhdGljIGFkZFN0YXJ0aW5nU2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdXJsKSByZXR1cm4gJy8nO1xuICAgIHJldHVybiB1cmwuc3RhcnRzV2l0aCgnLycpID8gdXJsIDogJy8nICsgdXJsO1xuICB9XG5cbiAgc3RhdGljIHJlbW92ZVN0YXJ0aW5nU2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdXJsKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIHVybC5zdGFydHNXaXRoKCcvJykgPyB1cmwuc3Vic3RyaW5nKDEpIDogdXJsO1xuICB9XG5cbiAgc3RhdGljIGNvbmNhdChiYXNlUGF0aDogc3RyaW5nLCByZWxhdGl2ZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFiYXNlUGF0aCkgcmV0dXJuIHJlbGF0aXZlUGF0aDtcbiAgICBpZiAoIXJlbGF0aXZlUGF0aCkgcmV0dXJuIGJhc2VQYXRoO1xuICAgIHJldHVybiB0aGlzLmFkZFRyYWlsaW5nU2xhc2goYmFzZVBhdGgpICsgdGhpcy5yZW1vdmVTdGFydGluZ1NsYXNoKHJlbGF0aXZlUGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW5zIHRoZSBnaXZlbiBwYXRobmFtZSBieSByZXBsYWNpbmcgb2NjdXJyZW5jZXMgb2YgbXVsdGlwbGUgY29uc2VjdXRpdmUgc2xhc2hlcyB3aXRoIGEgc2luZ2xlIHNsYXNoLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aG5hbWUgLSBUaGUgcGF0aG5hbWUgdG8gYmUgY2xlYW5lZC5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgY2xlYW5lZCBwYXRobmFtZSB3aXRoIHJlZHVuZGFudCBzbGFzaGVzIHJlbW92ZWQuXG4gICAqL1xuICBzdGF0aWMgY2xlYW5QYXRoKHBhdGhuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXRobmFtZT8ucmVwbGFjZSgvXFwvXFwvKy8sICcvJyk7XG4gIH1cblxuICBzdGF0aWMgbm9UcmFpbGluZ1NsYXNoID0gbm9UcmFpbGluZ1NsYXNoO1xufVxuIl19
|
|
@@ -6134,12 +6134,18 @@ class UrlUtils {
|
|
|
6134
6134
|
return href;
|
|
6135
6135
|
}
|
|
6136
6136
|
static addTrailingSlash(url) {
|
|
6137
|
+
if (!url)
|
|
6138
|
+
return '/';
|
|
6137
6139
|
return url.endsWith('/') ? url : url + '/';
|
|
6138
6140
|
}
|
|
6139
6141
|
static addStartingSlash(url) {
|
|
6142
|
+
if (!url)
|
|
6143
|
+
return '/';
|
|
6140
6144
|
return url.startsWith('/') ? url : '/' + url;
|
|
6141
6145
|
}
|
|
6142
6146
|
static removeStartingSlash(url) {
|
|
6147
|
+
if (!url)
|
|
6148
|
+
return '';
|
|
6143
6149
|
return url.startsWith('/') ? url.substring(1) : url;
|
|
6144
6150
|
}
|
|
6145
6151
|
static concat(basePath, relativePath) {
|
|
@@ -6149,6 +6155,16 @@ class UrlUtils {
|
|
|
6149
6155
|
return basePath;
|
|
6150
6156
|
return this.addTrailingSlash(basePath) + this.removeStartingSlash(relativePath);
|
|
6151
6157
|
}
|
|
6158
|
+
/**
|
|
6159
|
+
* Cleans the given pathname by replacing occurrences of multiple consecutive slashes with a single slash.
|
|
6160
|
+
*
|
|
6161
|
+
* @param {string} pathname - The pathname to be cleaned.
|
|
6162
|
+
* @return {string} The cleaned pathname with redundant slashes removed.
|
|
6163
|
+
*/
|
|
6164
|
+
static cleanPath(pathname) {
|
|
6165
|
+
return pathname?.replace(/\/\/+/, '/');
|
|
6166
|
+
}
|
|
6167
|
+
static noTrailingSlash = noTrailingSlash;
|
|
6152
6168
|
}
|
|
6153
6169
|
|
|
6154
6170
|
/**
|
|
@@ -16746,12 +16762,12 @@ let Peer = class Peer extends Entity {
|
|
|
16746
16762
|
static { Peer_1 = this; }
|
|
16747
16763
|
static fromObject;
|
|
16748
16764
|
static parseUrl(peerUrl) {
|
|
16749
|
-
const url = new URL(peerUrl);
|
|
16750
|
-
return
|
|
16765
|
+
const url = (typeof peerUrl === 'string') ? new URL(peerUrl) : peerUrl;
|
|
16766
|
+
return Peer_1.fromObject({
|
|
16751
16767
|
dns: url.hostname,
|
|
16752
16768
|
port: isNilOrBlank(url.port) ? undefined : url.port,
|
|
16753
16769
|
useSsl: url.protocol && (url.protocol.startsWith('https') || url.protocol.startsWith('wss')),
|
|
16754
|
-
path: noTrailingSlash(url.pathname),
|
|
16770
|
+
path: UrlUtils.noTrailingSlash(UrlUtils.cleanPath(url.pathname)),
|
|
16755
16771
|
});
|
|
16756
16772
|
}
|
|
16757
16773
|
static path(peer, ...paths) {
|
|
@@ -16767,7 +16783,7 @@ let Peer = class Peer extends Entity {
|
|
|
16767
16783
|
return path;
|
|
16768
16784
|
})
|
|
16769
16785
|
.filter(isNotNilOrBlank);
|
|
16770
|
-
return [noTrailingSlash(
|
|
16786
|
+
return [noTrailingSlash(Peer_1.fromObject(peer).url)].concat(...paths).join('/');
|
|
16771
16787
|
}
|
|
16772
16788
|
static equals(p1, p2) {
|
|
16773
16789
|
return p1 && p2 && Peer_1.fromObject(p1).equals(p2);
|
|
@@ -25690,6 +25706,49 @@ class PlatformService extends StartableService {
|
|
|
25690
25706
|
}
|
|
25691
25707
|
document.documentElement.classList.toggle('high-contrast', enable);
|
|
25692
25708
|
}
|
|
25709
|
+
/**
|
|
25710
|
+
* Handle deep links (Android App Links / iOS Universal Links)
|
|
25711
|
+
*/
|
|
25712
|
+
async addDeepLinkListener(listenerFn) {
|
|
25713
|
+
if (!this.isApp() || (typeof listenerFn !== 'function'))
|
|
25714
|
+
return; // Skip
|
|
25715
|
+
// Handle deep links (Android App Links / iOS Universal Links)
|
|
25716
|
+
try {
|
|
25717
|
+
console.info('[platform] Start listen deep links');
|
|
25718
|
+
const { App } = await import('@capacitor/app');
|
|
25719
|
+
const listener = await App.addListener('appUrlOpen', (data) => {
|
|
25720
|
+
try {
|
|
25721
|
+
console.info(`[platform] Processing deep link: ${data?.url}`);
|
|
25722
|
+
const url = new URL(data?.url || '');
|
|
25723
|
+
// Get the peer
|
|
25724
|
+
const peer = Peer.parseUrl(url);
|
|
25725
|
+
peer.path = undefined; // FIXME We clean the path (=baseHref) as we cannot detect it from a deep link
|
|
25726
|
+
// Build an absolute path from the URL pathname and search
|
|
25727
|
+
const path = UrlUtils.addTrailingSlash(UrlUtils.cleanUrl(url.pathname || '/'));
|
|
25728
|
+
const query = url.search || '';
|
|
25729
|
+
const fullPath = `${path}${query}`;
|
|
25730
|
+
console.info(`[platform] Processing deep link [OK] - peer: ${peer.url} path: ${fullPath}`);
|
|
25731
|
+
// Call the given listener
|
|
25732
|
+
listenerFn({ peerUrl: peer.url, path: fullPath });
|
|
25733
|
+
}
|
|
25734
|
+
catch (e) {
|
|
25735
|
+
console.warn('[platform] Failed to handle deep link', e, data);
|
|
25736
|
+
}
|
|
25737
|
+
});
|
|
25738
|
+
let subscription = new Subscription();
|
|
25739
|
+
subscription.add(() => {
|
|
25740
|
+
console.info('[platform] Stop listen deep links');
|
|
25741
|
+
listener.remove();
|
|
25742
|
+
this.unregisterSubscription(subscription);
|
|
25743
|
+
subscription = null; // Forget the subscription
|
|
25744
|
+
});
|
|
25745
|
+
this.registerSubscription(subscription);
|
|
25746
|
+
return subscription;
|
|
25747
|
+
}
|
|
25748
|
+
catch (err) {
|
|
25749
|
+
console.warn('[platform] Capacitor App plugin not available for deep links', err);
|
|
25750
|
+
}
|
|
25751
|
+
}
|
|
25693
25752
|
showToast(opts) {
|
|
25694
25753
|
if (!this.toastController)
|
|
25695
25754
|
throw new Error("Missing toastController in component's constructor");
|