@pepperi-addons/ngx-lib 0.4.0-angular14.54 → 0.4.0-angular14.57
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/esm2020/core/common/services/utilities.service.mjs +4 -2
- package/esm2020/remote-loader/remote-loader-element.component.mjs +40 -23
- package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs +44 -25
- package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib.mjs +3 -1
- package/fesm2015/pepperi-addons-ngx-lib.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs +40 -24
- package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib.mjs +3 -1
- package/fesm2020/pepperi-addons-ngx-lib.mjs.map +1 -1
- package/package.json +1 -1
- package/remote-loader/remote-loader-element.component.d.ts +5 -2
|
@@ -124,7 +124,9 @@ export class PepUtilitiesService {
|
|
|
124
124
|
const div = document.createElement('DIV');
|
|
125
125
|
// div.className = 'svg-icon';
|
|
126
126
|
// Add class svg-icon
|
|
127
|
-
|
|
127
|
+
if (svgContent.length > 0) {
|
|
128
|
+
div.innerHTML = svgContent.replace('<svg ', '<svg class="svg-icon" ');
|
|
129
|
+
}
|
|
128
130
|
return (div.querySelector('svg') ||
|
|
129
131
|
document.createElementNS('http://www.w3.org/2000/svg', 'path'));
|
|
130
132
|
}
|
|
@@ -258,4 +260,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
258
260
|
}], ctorParameters: function () { return [{ type: i1.TranslateService, decorators: [{
|
|
259
261
|
type: Optional
|
|
260
262
|
}] }]; } });
|
|
261
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3NyYy9jb3JlL2NvbW1vbi9zZXJ2aWNlcy91dGlsaXRpZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU1yRCxNQUFNLE9BQU8sbUJBQW1CO0lBRzVCLFlBQWdDLFlBQThCLElBQUk7UUFBbEMsY0FBUyxHQUFULFNBQVMsQ0FBeUI7UUFGMUQsWUFBTyxHQUFHLE9BQU8sQ0FBQztRQUd0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxPQUFPLENBQUM7UUFFbEUsUUFBUTtRQUNSLGdFQUFnRTtRQUNoRSxhQUFhO0lBQ2pCLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxLQUFhLEVBQUUsT0FBTyxHQUFHLEtBQUs7UUFDekQsa0NBQWtDO1FBQ2xDLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLEtBQUssR0FBRyxFQUFFO1lBQ3BDLHFFQUFxRTtZQUNyRSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDdkU7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU8sbUJBQW1CO1FBQ3ZCLE1BQU0sMEJBQTBCLEdBQUcsR0FBRyxDQUFDO1FBRXZDLE9BQU8sMEJBQTBCO2FBQzVCLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQzVCLFNBQVMs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QUMsUUFBUSxFQUFFLEVBQzFCLElBQUksQ0FDUCxDQUFDO1FBRUYsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFVO1FBQ3RCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQ3pDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFDMUIsSUFBSSxDQUNQLENBQUM7UUFFRixPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRUQsb0JBQW9CLENBQUMsS0FBVSxFQUFFLGFBQWEsR0FBRyxDQUFDO1FBQzlDLG1EQUFtRDtRQUNuRCxJQUFJLEtBQUssRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25CLEtBQUssR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDOUM7UUFFRCxPQUFPLG9CQUFvQixDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN0RCxDQUFDOztnSEE1U1EsbUJBQW1CO29IQUFuQixtQkFBbUIsY0FGaEIsTUFBTTsyRkFFVCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFJZ0IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5LCBfaXNOdW1iZXJWYWx1ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBmb3JtYXRDdXJyZW5jeSwgZm9ybWF0TnVtYmVyLCBmb3JtYXRQZXJjZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFBlcFV0aWxpdGllc1NlcnZpY2Uge1xuICAgIHByaXZhdGUgY3VsdHVyZSA9ICdlbi1VUyc7XG5cbiAgICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSA9IG51bGwpIHtcbiAgICAgICAgdGhpcy5jdWx0dXJlID0gdGhpcy50cmFuc2xhdGU/LmdldEJyb3dzZXJDdWx0dXJlTGFuZygpIHx8ICdlbi1VUyc7XG5cbiAgICAgICAgLy8gdHJ5IHtcbiAgICAgICAgLy8gICAgIGltcG9ydChgQGFuZ3VsYXIvY29tbW9uL2xvY2FsZXMvZ2xvYmFsLyR7dGhpcy5jdWx0dXJlfWApO1xuICAgICAgICAvLyB9IGNhdGNoIHt9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZWNpbWFsU2VwZXJhdG9yKHZhbHVlOiBzdHJpbmcsIHJldmVyc2UgPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgICAgIC8vIElmIHRoZSBkZWNpbWFsIHNlcGFyYXRvciBpcyAnLCdcbiAgICAgICAgaWYgKHRoaXMuZ2V0RGVjaW1hbFNlcGFyYXRvcigpID09PSAnLCcpIHtcbiAgICAgICAgICAgIC8vIElmIHJldmVyc2UgY2hhbmdlIHRoZSBudW1iZXIgZnJvbSAnLicgdG8gJywnIGVsc2UgZG8gdGhlIG9wcG9zaXRlLlxuICAgICAgICAgICAgdmFsdWUgPSByZXZlcnNlID8gdmFsdWUucmVwbGFjZSgnLicsICcsJykgOiB2YWx1ZS5yZXBsYWNlKCcsJywgJy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERlY2ltYWxTZXBhcmF0b3IoKSB7XG4gICAgICAgIGNvbnN0IG51bWJlcldpdGhEZWNpbWFsU2VwYXJhdG9yID0gMS4xO1xuXG4gICAgICAgIHJldHVybiBudW1iZXJXaXRoRGVjaW1hbFNlcGFyYXRvclxuICAgICAgICAgICAgLnRvTG9jYWxlU3RyaW5nKHRoaXMuY3VsdHVyZSlcbiAgICAgICAgICAgIC5zdWJzdHJpbmcoMSwgMik7XG4gICAgfVxuXG4gICAgLy8gYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcGFyc2UtbXMuXG4gICAgLy8gbW92ZWQgdG8gaW50ZXJuYWwgZnVuY3Rpb24gYmVjYXVzZSBwYXJzZS1tcyBpcyBub3cgcHVyZSBFU00uXG4gICAgcHJpdmF0ZSBwYXJzZU1zKG1pbGxpc2Vjb25kczogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbWlsbGlzZWNvbmRzICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBudW1iZXInKVxuICAgICAgICB9XG4gICAgXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXlzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kcyAvIDg2NDAwMDAwKSxcbiAgICAgICAgICAgIGhvdXJzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kcyAvIDM2MDAwMDApICUgMjQsXG4gICAgICAgICAgICBtaW51dGVzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kcyAvIDYwMDAwKSAlIDYwLFxuICAgICAgICAgICAgc2Vjb25kczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMgLyAxMDAwKSAlIDYwLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kcykgJSAxMDAwXG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9yYWZhZWxyaW5hbGRpL2FkZC16ZXJvLlxuICAgIC8vIG1vdmVkIHRvIGludGVybmFsIGZ1bmN0aW9uIGIvYyBhZGRaZXJvIGlzIHVubWFpbnRhaW5lZCAoNysgeWVhcnMpLlxuICAgIC8vIHN0cmlwcGVkIG91dCBuZWdhdGl2ZSBzaWduIGxvZ2ljIHNpbmNlIHdlJ3JlIGFscmVhZHkgZG9pbmcgaXQgZWxzZXdoZXJlLlxuICAgIHByaXZhdGUgYWRkWmVybyh2YWx1ZTogbnVtYmVyLCBkaWdpdHMgPSAyKSB7XG4gICAgICAgIGRpZ2l0cyA9IGRpZ2l0cyB8fCAyXG4gICAgXG4gICAgICAgIGxldCBzdHIgPSB2YWx1ZS50b1N0cmluZygpXG4gICAgICAgIGxldCBzaXplID0gMFxuICAgIFxuICAgICAgICBzaXplID0gZGlnaXRzIC0gc3RyLmxlbmd0aCArIDFcbiAgICAgICAgc3RyID0gbmV3IEFycmF5KHNpemUpLmpvaW4oJzAnKS5jb25jYXQoc3RyKVxuICAgIFxuICAgICAgICByZXR1cm4gc3RyXG4gICAgfVxuICAgIFxuICAgIHByaXZhdGUgaXNDdXJyZW5jeVNob3VsZEJlT25SaWdodChjdXJyZW5jeVN5bWJvbDogc3RyaW5nKSB7XG4gICAgICAgIGxldCByZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAoY3VycmVuY3lTeW1ib2wgPT0gXCLigqxcIiB8fFxuICAgICAgICAgICAgY3VycmVuY3lTeW1ib2wgPT0gXCLigqpcIiB8fFxuICAgICAgICAgICAgY3VycmVuY3lTeW1ib2wgPT0gXCJGdFwiIHx8XG4gICAgICAgICAgICBjdXJyZW5jeVN5bWJvbCA9PSBcIkvEjVwiIHx8XG4gICAgICAgICAgICBjdXJyZW5jeVN5bWJvbCA9PSBcItGA0YPQsVwiIHx8XG4gICAgICAgICAgICBjdXJyZW5jeVN5bWJvbCA9PSBcInrFglwiIHx8XG4gICAgICAgICAgICBjdXJyZW5jeVN5bWJvbCA9PSBcImtyLlwiKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXMgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwYXJzZURhdGUoZGF0ZVN0cjogc3RyaW5nLCBzaG93VGltZSA9IGZhbHNlKTogRGF0ZSB7XG4gICAgICAgIGxldCByZXRWYWw6IERhdGUgPSBudWxsO1xuICAgICAgICBpZiAoZGF0ZVN0ciAhPT0gJycpIHtcbiAgICAgICAgICAgIHJldFZhbCA9IG5ldyBEYXRlKGRhdGVTdHIpO1xuXG4gICAgICAgICAgICAvLyBDb252ZXJ0IHRvIGRhdGUgd2l0aCBubyBvZmZzZXQuXG4gICAgICAgICAgICBpZiAoIXNob3dUaW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBkYXRlU3RyLmluZGV4T2YoJ1QnKTtcblxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVN0ciA9IGRhdGVTdHIuc3Vic3RyaW5nKDAsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlVGV4dCA9IGRhdGVTdHIuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZVRleHQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSBOdW1iZXIoZGF0ZVRleHRbMF0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb250aCA9IE51bWJlcihkYXRlVGV4dFsxXSkgLSAxO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSBOdW1iZXIoZGF0ZVRleHRbMl0pO1xuICAgICAgICAgICAgICAgICAgICByZXRWYWwgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5LCAwLCByZXRWYWwuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIC0xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldFZhbCA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICByZXRWYWwuZ2V0RnVsbFllYXIoKSwgcmV0VmFsLmdldE1vbnRoKCksIHJldFZhbC5nZXREYXRlKCksIHJldFZhbC5nZXRIb3VycygpLFxuICAgICAgICAgICAgICAgICAgICByZXRWYWwuZ2V0TWludXRlcygpICsgcmV0VmFsLmdldFRpbWV6b25lT2Zmc2V0KCkgKiAtMSwgcmV0VmFsLmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJldFZhbCAmJiBpc05hTihyZXRWYWwuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgcmV0VmFsID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0VmFsO1xuICAgIH1cblxuICAgIHN0cmluZ2lmeURhdGUoZGF0ZTogRGF0ZSwgc2hvd1RpbWUgPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpOyAvLyBpbmNsdWRlIC0gb2Zmc2V0XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVUZXh0ID0gW107XG4gICAgICAgICAgICAgICAgZGF0ZVRleHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAnLScsXG4gICAgICAgICAgICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICctJyxcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5nZXREYXRlKClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRlVGV4dC5qb2luKCcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzVmFsdWVIdG1sKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHJlcyA9IGZhbHNlO1xuICAgICAgICBjb25zdCBSRUdFWFAgPSAvPFxcLz9bYS16XVtcXHNcXFNdKj4vaTtcbiAgICAgICAgcmVzID0gUkVHRVhQLnRlc3QodmFsdWUpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgaXNKc29uU3RyaW5nKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBKU09OLnBhcnNlKHN0cik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRTdmdFbGVtZW50RnJvbVN0cmluZyhkb2N1bWVudCwgc3ZnQ29udGVudDogc3RyaW5nKTogU1ZHRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICAgICAgICAvLyBkaXYuY2xhc3NOYW1lID0gJ3N2Zy1pY29uJztcbiAgICAgICAgLy8gQWRkIGNsYXNzIHN2Zy1pY29uXG4gICAgICAgIGRpdi5pbm5lckhUTUwgPSBzdmdDb250ZW50LnJlcGxhY2UoJzxzdmcgJywgJzxzdmcgY2xhc3M9XCJzdmctaWNvblwiICcpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZGl2LnF1ZXJ5U2VsZWN0b3IoJ3N2ZycpIHx8XG4gICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3BhdGgnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIGZvcm1hdFBlcmNlbnQodmFsdWU6IGFueSwgZGlnaXRzSW5mbyA9ICcxLjAtMicpIHtcbiAgICBmb3JtYXRQZXJjZW50KHZhbHVlOiBhbnksIG1pbkZyYWN0aW9uRGlnaXRzID0gMCwgbWF4RnJhY3Rpb25EaWdpdHMgPSAyKSB7XG4gICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gdGhpcy5jb2VyY2VOdW1iZXJQcm9wZXJ0eShtaW5GcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG4gICAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gdGhpcy5jb2VyY2VOdW1iZXJQcm9wZXJ0eShtYXhGcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG5cbiAgICAgICAgY29uc3QgbnVtYmVyID0gdGhpcy5jb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICcwJSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gZm9ybWF0UGVyY2VudChudW1iZXIgLyAxMDAsIHRoaXMuY3VsdHVyZSwgZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KHRoaXMuY3VsdHVyZSwgeyBcbiAgICAgICAgICAgICAgICBzdHlsZTogJ3BlcmNlbnQnLFxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbWluRnJhY3Rpb25EaWdpdHMgfHwgMCxcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IG1heEZyYWN0aW9uRGlnaXRzIHx8IE1hdGgubWF4KDIsIG1pbkZyYWN0aW9uRGlnaXRzKSxcbiAgICAgICAgICAgIH0pLmZvcm1hdChudW1iZXIgLyAxMDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0Q3VycmVuY3kodmFsdWU6IGFueSwgY3VycmVuY3lTaWduID0gJycsIGRpZ2l0c0luZm8gPSAnMS4yLTInKSB7XG4gICAgZm9ybWF0Q3VycmVuY3kodmFsdWU6IGFueSwgY3VycmVuY3lTaWduID0gJycsIG1pbkZyYWN0aW9uRGlnaXRzID0gMCwgbWF4RnJhY3Rpb25EaWdpdHMgPSAyKSB7XG4gICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gdGhpcy5jb2VyY2VOdW1iZXJQcm9wZXJ0eShtaW5GcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG4gICAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gdGhpcy5jb2VyY2VOdW1iZXJQcm9wZXJ0eShtYXhGcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG5cbiAgICAgICAgbGV0IHJlcyA9ICcnO1xuICAgICAgICBjb25zdCBudW1iZXIgPSB0aGlzLmNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgY29uc3Qgc3R5bGVPcHRpb25zID0geyBcbiAgICAgICAgICAgIC8vIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgICAgICAgLy8gY3VycmVuY3lTaWduOiBjdXJyZW5jeVNpZ24sXG4gICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IG1pbkZyYWN0aW9uRGlnaXRzIHx8IDAsXG4gICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IG1heEZyYWN0aW9uRGlnaXRzIHx8IE1hdGgubWF4KDIsIG1pbkZyYWN0aW9uRGlnaXRzKSxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gZm9ybWF0Q3VycmVuY3koMCwgdGhpcy5jdWx0dXJlLCBjdXJyZW5jeVNpZ24sIHVuZGVmaW5lZCwgZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICByZXMgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQodGhpcy5jdWx0dXJlLCBzdHlsZU9wdGlvbnMpLmZvcm1hdCgwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBmb3JtYXRDdXJyZW5jeSh2YWx1ZSwgdGhpcy5jdWx0dXJlLCBjdXJyZW5jeVNpZ24sIHVuZGVmaW5lZCwgZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICByZXMgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQodGhpcy5jdWx0dXJlLCBzdHlsZU9wdGlvbnMpLmZvcm1hdChudW1iZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzID0gdGhpcy5pc0N1cnJlbmN5U2hvdWxkQmVPblJpZ2h0KGN1cnJlbmN5U2lnbikgPyBgJHtyZXN9ICR7Y3VycmVuY3lTaWdufWAgOiBgJHtjdXJyZW5jeVNpZ259ICR7cmVzfWBcbiAgICAgICAgXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIFxuICAgIC8vIGZvcm1hdERlY2ltYWwodmFsdWU6IGFueSwgZGlnaXRzSW5mbyA9ICcxLjItMicpIHtcbiAgICBmb3JtYXREZWNpbWFsKHZhbHVlOiBhbnksIG1pbkZyYWN0aW9uRGlnaXRzID0gMiwgbWF4RnJhY3Rpb25EaWdpdHMgPSAyKSB7XG4gICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gdGhpcy5jb2VyY2VOdW1iZXJQcm9wZXJ0eShtaW5GcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG4gICAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gdGhpcy5jb2VyY2VOdW1iZXJQcm9wZXJ0eShtYXhGcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG4gICAgICAgIGNvbnN0IG51bWJlciA9IHRoaXMuY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuXG4gICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnMCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gZm9ybWF0TnVtYmVyKHZhbHVlLCB0aGlzLmN1bHR1cmUsIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmN1bHR1cmUsIHsgXG4gICAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBtaW5GcmFjdGlvbkRpZ2l0cyB8fCBNYXRoLm1pbigyLCBtYXhGcmFjdGlvbkRpZ2l0cyksXG4gICAgICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBtYXhGcmFjdGlvbkRpZ2l0cyB8fCBNYXRoLm1heCgyLCBtaW5GcmFjdGlvbkRpZ2l0cyksXG4gICAgICAgICAgICB9KS5mb3JtYXQobnVtYmVyKVxuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIGZvcm1hdE51bWJlcih2YWx1ZTogYW55LCBkaWdpdHNJbmZvID0gJzEuMC0wJyk6IHN0cmluZyB7XG4gICAgZm9ybWF0TnVtYmVyKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBudW1iZXIgPSB0aGlzLmNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcblxuICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJzAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGZvcm1hdE51bWJlcih2YWx1ZSwgdGhpcy5jdWx0dXJlLCBkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQodGhpcy5jdWx0dXJlLCB7IFxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCxcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDAsXG4gICAgICAgICAgICB9KS5mb3JtYXQobnVtYmVyKVxuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYSBudW1iZXIgaW4gbWlsbGlzZWNvbmRzIHRvIGEgc3RhbmRhcmQgZHVyYXRpb24gc3RyaW5nLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kc1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gZm9ybWF0RHVyYXRpb24gb3B0aW9ucyBvYmplY3RcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9ZmFsc2VdIC0gYWRkIGxlYWRpbmcgemVyb1xuICAgICAqIEByZXR1cm5zIHN0cmluZyAtIGZvcm1hdHRlZCBkdXJhdGlvbiBzdHJpbmdcbiAgICAqL1xuICAgIGZvcm1hdER1cmF0aW9uKHZhbHVlLCBvcHRpb25zOiB7IGxlYWRpbmc/OiBib29sZWFuLCBkdXJhdGlvbj86ICdtaWxsaXNlY29uZHMnIHwgJ3NlY29uZHMnIH0gPSB7fSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGlzTnVtYmVyID0gX2lzTnVtYmVyVmFsdWUodmFsdWUpO1xuXG4gICAgICAgIGlmICghaXNOdW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBudW1iZXIgPSB0aGlzLmNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICBcbiAgICAgICAgICAgIGNvbnN0IGxlYWRpbmcgPSBvcHRpb25zPy5sZWFkaW5nIHx8IHRydWU7XG4gICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IG9wdGlvbnM/LmR1cmF0aW9uIHx8ICdtaWxsaXNlY29uZHMnO1xuICAgICAgICAgICAgaWYgKGR1cmF0aW9uID09PSAnc2Vjb25kcycpIHtcbiAgICAgICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgKiAxMDAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB1bnNpZ25lZE1zID0gbnVtYmVyIDwgMCA/IC1udW1iZXIgOiBudW1iZXI7XG4gICAgICAgICAgICBjb25zdCBzaWduID0gbnVtYmVyIDw9IC0xMDAwID8gJy0nIDogJyc7XG4gICAgICAgICAgICBjb25zdCB0ID0gdGhpcy5wYXJzZU1zKHVuc2lnbmVkTXMpO1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kcyA9IHRoaXMuYWRkWmVybyh0LnNlY29uZHMpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodC5kYXlzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ24gKyB0LmRheXMgKyAnOicgKyB0aGlzLmFkZFplcm8odC5ob3VycykgKyAnOicgKyB0aGlzLmFkZFplcm8odC5taW51dGVzKSArICc6JyArIHNlY29uZHNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHQuaG91cnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2lnbiArIChsZWFkaW5nID8gdGhpcy5hZGRaZXJvKHQuaG91cnMpIDogdC5ob3VycykgKyAnOicgKyB0aGlzLmFkZFplcm8odC5taW51dGVzKSArICc6JyArIHNlY29uZHNcbiAgICAgICAgICAgIH0gXG5cbiAgICAgICAgICAgIHJldHVybiBzaWduICsgKGxlYWRpbmcgPyB0aGlzLmFkZFplcm8odC5taW51dGVzKSA6IHQubWludXRlcykgKyAnOicgKyBzZWNvbmRzXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbmNyZW1lbnROdW1iZXIodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBudW1iZXJWYWx1ZSA9IHRoaXMuY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgICAgICBjb25zdCBuZXdOdW1iZXIgPSB0aGlzLmNoYW5nZURlY2ltYWxTZXBlcmF0b3IoXG4gICAgICAgICAgICAoKytudW1iZXJWYWx1ZSkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gbmV3TnVtYmVyO1xuICAgIH1cblxuICAgIGRlY3JlbWVudE51bWJlcih2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IG51bWJlclZhbHVlID0gdGhpcy5jb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IG5ld051bWJlciA9IHRoaXMuY2hhbmdlRGVjaW1hbFNlcGVyYXRvcihcbiAgICAgICAgICAgICgtLW51bWJlclZhbHVlKS50b1N0cmluZygpLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBuZXdOdW1iZXI7XG4gICAgfVxuXG4gICAgY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWU6IGFueSwgZmFsbGJhY2tWYWx1ZSA9IDApOiBudW1iZXIge1xuICAgICAgICAvLyBJZiB0aGUgZGVjaW1hbCBzZXBhcmF0b3IgaXMgJywnIGNoYW5nZSBpdCB0byAnLidcbiAgICAgICAgaWYgKHZhbHVlPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuY2hhbmdlRGVjaW1hbFNlcGVyYXRvcih2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIGZhbGxiYWNrVmFsdWUpO1xuICAgIH1cbn1cbiJdfQ==
|
|
263
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3NyYy9jb3JlL2NvbW1vbi9zZXJ2aWNlcy91dGlsaXRpZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU1yRCxNQUFNLE9BQU8sbUJBQW1CO0lBRzVCLFlBQWdDLFlBQThCLElBQUk7UUFBbEMsY0FBUyxHQUFULFNBQVMsQ0FBeUI7UUFGMUQsWUFBTyxHQUFHLE9BQU8sQ0FBQztRQUd0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxPQUFPLENBQUM7UUFFbEUsUUFBUTtRQUNSLGdFQUFnRTtRQUNoRSxhQUFhO0lBQ2pCLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxLQUFhLEVBQUUsT0FBTyxHQUFHLEtBQUs7UUFDekQsa0NBQWtDO1FBQ2xDLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLEtBQUssR0FBRyxFQUFFO1lBQ3BDLHFFQUFxRTtZQUNyRSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDdkU7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU8sbUJBQW1CO1FBQ3ZCLE1BQU0sMEJBQTBCLEdBQUcsR0FBRyxDQUFDO1FBRXZDLE9BQU8sMEJBQTBCO2FBQzVCLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQzVCLFNBQVMs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LElBQUksQ0FBQyxzQkFBc0IsQ0FDekMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUMxQixJQUFJLENBQ1AsQ0FBQztRQUVGLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBVTtRQUN0QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUN6QyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQzFCLElBQUksQ0FDUCxDQUFDO1FBRUYsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQVUsRUFBRSxhQUFhLEdBQUcsQ0FBQztRQUM5QyxtREFBbUQ7UUFDbkQsSUFBSSxLQUFLLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuQixLQUFLLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlDO1FBRUQsT0FBTyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDdEQsQ0FBQzs7Z0hBOVNRLG1CQUFtQjtvSEFBbkIsbUJBQW1CLGNBRmhCLE1BQU07MkZBRVQsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBSWdCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSwgX2lzTnVtYmVyVmFsdWUgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgZm9ybWF0Q3VycmVuY3ksIGZvcm1hdE51bWJlciwgZm9ybWF0UGVyY2VudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQZXBVdGlsaXRpZXNTZXJ2aWNlIHtcbiAgICBwcml2YXRlIGN1bHR1cmUgPSAnZW4tVVMnO1xuXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UgPSBudWxsKSB7XG4gICAgICAgIHRoaXMuY3VsdHVyZSA9IHRoaXMudHJhbnNsYXRlPy5nZXRCcm93c2VyQ3VsdHVyZUxhbmcoKSB8fCAnZW4tVVMnO1xuXG4gICAgICAgIC8vIHRyeSB7XG4gICAgICAgIC8vICAgICBpbXBvcnQoYEBhbmd1bGFyL2NvbW1vbi9sb2NhbGVzL2dsb2JhbC8ke3RoaXMuY3VsdHVyZX1gKTtcbiAgICAgICAgLy8gfSBjYXRjaCB7fVxuICAgIH1cblxuICAgIHByaXZhdGUgY2hhbmdlRGVjaW1hbFNlcGVyYXRvcih2YWx1ZTogc3RyaW5nLCByZXZlcnNlID0gZmFsc2UpOiBzdHJpbmcge1xuICAgICAgICAvLyBJZiB0aGUgZGVjaW1hbCBzZXBhcmF0b3IgaXMgJywnXG4gICAgICAgIGlmICh0aGlzLmdldERlY2ltYWxTZXBhcmF0b3IoKSA9PT0gJywnKSB7XG4gICAgICAgICAgICAvLyBJZiByZXZlcnNlIGNoYW5nZSB0aGUgbnVtYmVyIGZyb20gJy4nIHRvICcsJyBlbHNlIGRvIHRoZSBvcHBvc2l0ZS5cbiAgICAgICAgICAgIHZhbHVlID0gcmV2ZXJzZSA/IHZhbHVlLnJlcGxhY2UoJy4nLCAnLCcpIDogdmFsdWUucmVwbGFjZSgnLCcsICcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREZWNpbWFsU2VwYXJhdG9yKCkge1xuICAgICAgICBjb25zdCBudW1iZXJXaXRoRGVjaW1hbFNlcGFyYXRvciA9IDEuMTtcblxuICAgICAgICByZXR1cm4gbnVtYmVyV2l0aERlY2ltYWxTZXBhcmF0b3JcbiAgICAgICAgICAgIC50b0xvY2FsZVN0cmluZyh0aGlzLmN1bHR1cmUpXG4gICAgICAgICAgICAuc3Vic3RyaW5nKDEsIDIpO1xuICAgIH1cblxuICAgIC8vIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3BhcnNlLW1zLlxuICAgIC8vIG1vdmVkIHRvIGludGVybmFsIGZ1bmN0aW9uIGJlY2F1c2UgcGFyc2UtbXMgaXMgbm93IHB1cmUgRVNNLlxuICAgIHByaXZhdGUgcGFyc2VNcyhtaWxsaXNlY29uZHM6IG51bWJlcikge1xuICAgICAgICBpZiAodHlwZW9mIG1pbGxpc2Vjb25kcyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgbnVtYmVyJylcbiAgICAgICAgfVxuICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF5czogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMgLyA4NjQwMDAwMCksXG4gICAgICAgICAgICBob3VyczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMgLyAzNjAwMDAwKSAlIDI0LFxuICAgICAgICAgICAgbWludXRlczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMgLyA2MDAwMCkgJSA2MCxcbiAgICAgICAgICAgIHNlY29uZHM6IE1hdGgudHJ1bmMobWlsbGlzZWNvbmRzIC8gMTAwMCkgJSA2MCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMpICUgMTAwMFxuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vcmFmYWVscmluYWxkaS9hZGQtemVyby5cbiAgICAvLyBtb3ZlZCB0byBpbnRlcm5hbCBmdW5jdGlvbiBiL2MgYWRkWmVybyBpcyB1bm1haW50YWluZWQgKDcrIHllYXJzKS5cbiAgICAvLyBzdHJpcHBlZCBvdXQgbmVnYXRpdmUgc2lnbiBsb2dpYyBzaW5jZSB3ZSdyZSBhbHJlYWR5IGRvaW5nIGl0IGVsc2V3aGVyZS5cbiAgICBwcml2YXRlIGFkZFplcm8odmFsdWU6IG51bWJlciwgZGlnaXRzID0gMikge1xuICAgICAgICBkaWdpdHMgPSBkaWdpdHMgfHwgMlxuICAgIFxuICAgICAgICBsZXQgc3RyID0gdmFsdWUudG9TdHJpbmcoKVxuICAgICAgICBsZXQgc2l6ZSA9IDBcbiAgICBcbiAgICAgICAgc2l6ZSA9IGRpZ2l0cyAtIHN0ci5sZW5ndGggKyAxXG4gICAgICAgIHN0ciA9IG5ldyBBcnJheShzaXplKS5qb2luKCcwJykuY29uY2F0KHN0cilcbiAgICBcbiAgICAgICAgcmV0dXJuIHN0clxuICAgIH1cbiAgICBcbiAgICBwcml2YXRlIGlzQ3VycmVuY3lTaG91bGRCZU9uUmlnaHQoY3VycmVuY3lTeW1ib2w6IHN0cmluZykge1xuICAgICAgICBsZXQgcmVzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGN1cnJlbmN5U3ltYm9sID09IFwi4oKsXCIgfHxcbiAgICAgICAgICAgIGN1cnJlbmN5U3ltYm9sID09IFwi4oKqXCIgfHxcbiAgICAgICAgICAgIGN1cnJlbmN5U3ltYm9sID09IFwiRnRcIiB8fFxuICAgICAgICAgICAgY3VycmVuY3lTeW1ib2wgPT0gXCJLxI1cIiB8fFxuICAgICAgICAgICAgY3VycmVuY3lTeW1ib2wgPT0gXCLRgNGD0LFcIiB8fFxuICAgICAgICAgICAgY3VycmVuY3lTeW1ib2wgPT0gXCJ6xYJcIiB8fFxuICAgICAgICAgICAgY3VycmVuY3lTeW1ib2wgPT0gXCJrci5cIilcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcGFyc2VEYXRlKGRhdGVTdHI6IHN0cmluZywgc2hvd1RpbWUgPSBmYWxzZSk6IERhdGUge1xuICAgICAgICBsZXQgcmV0VmFsOiBEYXRlID0gbnVsbDtcbiAgICAgICAgaWYgKGRhdGVTdHIgIT09ICcnKSB7XG4gICAgICAgICAgICByZXRWYWwgPSBuZXcgRGF0ZShkYXRlU3RyKTtcblxuICAgICAgICAgICAgLy8gQ29udmVydCB0byBkYXRlIHdpdGggbm8gb2Zmc2V0LlxuICAgICAgICAgICAgaWYgKCFzaG93VGltZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZGF0ZVN0ci5pbmRleE9mKCdUJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVTdHIgPSBkYXRlU3RyLnN1YnN0cmluZygwLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVRleHQgPSBkYXRlU3RyLnNwbGl0KCctJyk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGVUZXh0Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ZWFyID0gTnVtYmVyKGRhdGVUZXh0WzBdKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9udGggPSBOdW1iZXIoZGF0ZVRleHRbMV0pIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gTnVtYmVyKGRhdGVUZXh0WzJdKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0VmFsID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSwgMCwgcmV0VmFsLmdldFRpbWV6b25lT2Zmc2V0KCkgKiAtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXRWYWwgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmdldEZ1bGxZZWFyKCksIHJldFZhbC5nZXRNb250aCgpLCByZXRWYWwuZ2V0RGF0ZSgpLCByZXRWYWwuZ2V0SG91cnMoKSxcbiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmdldE1pbnV0ZXMoKSArIHJldFZhbC5nZXRUaW1lem9uZU9mZnNldCgpICogLTEsIHJldFZhbC5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXRWYWwgJiYgaXNOYU4ocmV0VmFsLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgIHJldFZhbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldFZhbDtcbiAgICB9XG5cbiAgICBzdHJpbmdpZnlEYXRlKGRhdGU6IERhdGUsIHNob3dUaW1lID0gZmFsc2UpOiBzdHJpbmcge1xuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTsgLy8gaW5jbHVkZSAtIG9mZnNldFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlVGV4dCA9IFtdO1xuICAgICAgICAgICAgICAgIGRhdGVUZXh0LnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgJy0nLFxuICAgICAgICAgICAgICAgICAgICBkYXRlLmdldE1vbnRoKCkgKyAxLFxuICAgICAgICAgICAgICAgICAgICAnLScsXG4gICAgICAgICAgICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZVRleHQuam9pbignJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc1ZhbHVlSHRtbCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCByZXMgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgUkVHRVhQID0gLzxcXC8/W2Etel1bXFxzXFxTXSo+L2k7XG4gICAgICAgIHJlcyA9IFJFR0VYUC50ZXN0KHZhbHVlKTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGlzSnNvblN0cmluZyhzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgSlNPTi5wYXJzZShzdHIpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0U3ZnRWxlbWVudEZyb21TdHJpbmcoZG9jdW1lbnQsIHN2Z0NvbnRlbnQ6IHN0cmluZyk6IFNWR0VsZW1lbnQge1xuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcbiAgICAgICAgLy8gZGl2LmNsYXNzTmFtZSA9ICdzdmctaWNvbic7XG4gICAgICAgIC8vIEFkZCBjbGFzcyBzdmctaWNvblxuICAgICAgICBpZiAoc3ZnQ29udGVudC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gc3ZnQ29udGVudC5yZXBsYWNlKCc8c3ZnICcsICc8c3ZnIGNsYXNzPVwic3ZnLWljb25cIiAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZGl2LnF1ZXJ5U2VsZWN0b3IoJ3N2ZycpIHx8XG4gICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3BhdGgnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIGZvcm1hdFBlcmNlbnQodmFsdWU6IGFueSwgZGlnaXRzSW5mbyA9ICcxLjAtMicpIHtcbiAgICBmb3JtYXRQZXJjZW50KHZhbHVlOiBhbnksIG1pbkZyYWN0aW9uRGlnaXRzID0gMCwgbWF4RnJhY3Rpb25EaWdpdHMgPSAyKSB7XG4gICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gdGhpcy5jb2VyY2VOdW1iZXJQcm9wZXJ0eShtaW5GcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG4gICAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gdGhpcy5jb2VyY2VOdW1iZXJQcm9wZXJ0eShtYXhGcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG5cbiAgICAgICAgY29uc3QgbnVtYmVyID0gdGhpcy5jb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICcwJSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gZm9ybWF0UGVyY2VudChudW1iZXIgLyAxMDAsIHRoaXMuY3VsdHVyZSwgZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KHRoaXMuY3VsdHVyZSwgeyBcbiAgICAgICAgICAgICAgICBzdHlsZTogJ3BlcmNlbnQnLFxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbWluRnJhY3Rpb25EaWdpdHMgfHwgMCxcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IG1heEZyYWN0aW9uRGlnaXRzIHx8IE1hdGgubWF4KDIsIG1pbkZyYWN0aW9uRGlnaXRzKSxcbiAgICAgICAgICAgIH0pLmZvcm1hdChudW1iZXIgLyAxMDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0Q3VycmVuY3kodmFsdWU6IGFueSwgY3VycmVuY3lTaWduID0gJycsIGRpZ2l0c0luZm8gPSAnMS4yLTInKSB7XG4gICAgZm9ybWF0Q3VycmVuY3kodmFsdWU6IGFueSwgY3VycmVuY3lTaWduID0gJycsIG1pbkZyYWN0aW9uRGlnaXRzID0gMCwgbWF4RnJhY3Rpb25EaWdpdHMgPSAyKSB7XG4gICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gdGhpcy5jb2VyY2VOdW1iZXJQcm9wZXJ0eShtaW5GcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG4gICAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gdGhpcy5jb2VyY2VOdW1iZXJQcm9wZXJ0eShtYXhGcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG5cbiAgICAgICAgbGV0IHJlcyA9ICcnO1xuICAgICAgICBjb25zdCBudW1iZXIgPSB0aGlzLmNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgY29uc3Qgc3R5bGVPcHRpb25zID0geyBcbiAgICAgICAgICAgIC8vIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgICAgICAgLy8gY3VycmVuY3lTaWduOiBjdXJyZW5jeVNpZ24sXG4gICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IG1pbkZyYWN0aW9uRGlnaXRzIHx8IDAsXG4gICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IG1heEZyYWN0aW9uRGlnaXRzIHx8IE1hdGgubWF4KDIsIG1pbkZyYWN0aW9uRGlnaXRzKSxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gZm9ybWF0Q3VycmVuY3koMCwgdGhpcy5jdWx0dXJlLCBjdXJyZW5jeVNpZ24sIHVuZGVmaW5lZCwgZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICByZXMgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQodGhpcy5jdWx0dXJlLCBzdHlsZU9wdGlvbnMpLmZvcm1hdCgwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBmb3JtYXRDdXJyZW5jeSh2YWx1ZSwgdGhpcy5jdWx0dXJlLCBjdXJyZW5jeVNpZ24sIHVuZGVmaW5lZCwgZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICByZXMgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQodGhpcy5jdWx0dXJlLCBzdHlsZU9wdGlvbnMpLmZvcm1hdChudW1iZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzID0gdGhpcy5pc0N1cnJlbmN5U2hvdWxkQmVPblJpZ2h0KGN1cnJlbmN5U2lnbikgPyBgJHtyZXN9ICR7Y3VycmVuY3lTaWdufWAgOiBgJHtjdXJyZW5jeVNpZ259ICR7cmVzfWBcbiAgICAgICAgXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIFxuICAgIC8vIGZvcm1hdERlY2ltYWwodmFsdWU6IGFueSwgZGlnaXRzSW5mbyA9ICcxLjItMicpIHtcbiAgICBmb3JtYXREZWNpbWFsKHZhbHVlOiBhbnksIG1pbkZyYWN0aW9uRGlnaXRzID0gMiwgbWF4RnJhY3Rpb25EaWdpdHMgPSAyKSB7XG4gICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gdGhpcy5jb2VyY2VOdW1iZXJQcm9wZXJ0eShtaW5GcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG4gICAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gdGhpcy5jb2VyY2VOdW1iZXJQcm9wZXJ0eShtYXhGcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG4gICAgICAgIGNvbnN0IG51bWJlciA9IHRoaXMuY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuXG4gICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnMCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gZm9ybWF0TnVtYmVyKHZhbHVlLCB0aGlzLmN1bHR1cmUsIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmN1bHR1cmUsIHsgXG4gICAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBtaW5GcmFjdGlvbkRpZ2l0cyB8fCBNYXRoLm1pbigyLCBtYXhGcmFjdGlvbkRpZ2l0cyksXG4gICAgICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBtYXhGcmFjdGlvbkRpZ2l0cyB8fCBNYXRoLm1heCgyLCBtaW5GcmFjdGlvbkRpZ2l0cyksXG4gICAgICAgICAgICB9KS5mb3JtYXQobnVtYmVyKVxuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIGZvcm1hdE51bWJlcih2YWx1ZTogYW55LCBkaWdpdHNJbmZvID0gJzEuMC0wJyk6IHN0cmluZyB7XG4gICAgZm9ybWF0TnVtYmVyKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBudW1iZXIgPSB0aGlzLmNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcblxuICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJzAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGZvcm1hdE51bWJlcih2YWx1ZSwgdGhpcy5jdWx0dXJlLCBkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQodGhpcy5jdWx0dXJlLCB7IFxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCxcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDAsXG4gICAgICAgICAgICB9KS5mb3JtYXQobnVtYmVyKVxuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYSBudW1iZXIgaW4gbWlsbGlzZWNvbmRzIHRvIGEgc3RhbmRhcmQgZHVyYXRpb24gc3RyaW5nLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kc1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gZm9ybWF0RHVyYXRpb24gb3B0aW9ucyBvYmplY3RcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9ZmFsc2VdIC0gYWRkIGxlYWRpbmcgemVyb1xuICAgICAqIEByZXR1cm5zIHN0cmluZyAtIGZvcm1hdHRlZCBkdXJhdGlvbiBzdHJpbmdcbiAgICAqL1xuICAgIGZvcm1hdER1cmF0aW9uKHZhbHVlLCBvcHRpb25zOiB7IGxlYWRpbmc/OiBib29sZWFuLCBkdXJhdGlvbj86ICdtaWxsaXNlY29uZHMnIHwgJ3NlY29uZHMnIH0gPSB7fSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGlzTnVtYmVyID0gX2lzTnVtYmVyVmFsdWUodmFsdWUpO1xuXG4gICAgICAgIGlmICghaXNOdW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBudW1iZXIgPSB0aGlzLmNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICBcbiAgICAgICAgICAgIGNvbnN0IGxlYWRpbmcgPSBvcHRpb25zPy5sZWFkaW5nIHx8IHRydWU7XG4gICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IG9wdGlvbnM/LmR1cmF0aW9uIHx8ICdtaWxsaXNlY29uZHMnO1xuICAgICAgICAgICAgaWYgKGR1cmF0aW9uID09PSAnc2Vjb25kcycpIHtcbiAgICAgICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgKiAxMDAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB1bnNpZ25lZE1zID0gbnVtYmVyIDwgMCA/IC1udW1iZXIgOiBudW1iZXI7XG4gICAgICAgICAgICBjb25zdCBzaWduID0gbnVtYmVyIDw9IC0xMDAwID8gJy0nIDogJyc7XG4gICAgICAgICAgICBjb25zdCB0ID0gdGhpcy5wYXJzZU1zKHVuc2lnbmVkTXMpO1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kcyA9IHRoaXMuYWRkWmVybyh0LnNlY29uZHMpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodC5kYXlzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ24gKyB0LmRheXMgKyAnOicgKyB0aGlzLmFkZFplcm8odC5ob3VycykgKyAnOicgKyB0aGlzLmFkZFplcm8odC5taW51dGVzKSArICc6JyArIHNlY29uZHNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHQuaG91cnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2lnbiArIChsZWFkaW5nID8gdGhpcy5hZGRaZXJvKHQuaG91cnMpIDogdC5ob3VycykgKyAnOicgKyB0aGlzLmFkZFplcm8odC5taW51dGVzKSArICc6JyArIHNlY29uZHNcbiAgICAgICAgICAgIH0gXG5cbiAgICAgICAgICAgIHJldHVybiBzaWduICsgKGxlYWRpbmcgPyB0aGlzLmFkZFplcm8odC5taW51dGVzKSA6IHQubWludXRlcykgKyAnOicgKyBzZWNvbmRzXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbmNyZW1lbnROdW1iZXIodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBudW1iZXJWYWx1ZSA9IHRoaXMuY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgICAgICBjb25zdCBuZXdOdW1iZXIgPSB0aGlzLmNoYW5nZURlY2ltYWxTZXBlcmF0b3IoXG4gICAgICAgICAgICAoKytudW1iZXJWYWx1ZSkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gbmV3TnVtYmVyO1xuICAgIH1cblxuICAgIGRlY3JlbWVudE51bWJlcih2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IG51bWJlclZhbHVlID0gdGhpcy5jb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IG5ld051bWJlciA9IHRoaXMuY2hhbmdlRGVjaW1hbFNlcGVyYXRvcihcbiAgICAgICAgICAgICgtLW51bWJlclZhbHVlKS50b1N0cmluZygpLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBuZXdOdW1iZXI7XG4gICAgfVxuXG4gICAgY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWU6IGFueSwgZmFsbGJhY2tWYWx1ZSA9IDApOiBudW1iZXIge1xuICAgICAgICAvLyBJZiB0aGUgZGVjaW1hbCBzZXBhcmF0b3IgaXMgJywnIGNoYW5nZSBpdCB0byAnLidcbiAgICAgICAgaWYgKHZhbHVlPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuY2hhbmdlRGVjaW1hbFNlcGVyYXRvcih2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIGZhbGxiYWNrVmFsdWUpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -2,12 +2,14 @@ import { Component, EventEmitter, Input, Optional, Output } from '@angular/core'
|
|
|
2
2
|
import { loadRemoteModule } from '@angular-architects/module-federation';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import * as i1 from "@pepperi-addons/ngx-lib";
|
|
5
|
-
import * as i2 from "
|
|
5
|
+
import * as i2 from "./remote-loader.service";
|
|
6
|
+
import * as i3 from "@angular/router";
|
|
6
7
|
export class PepRemoteLoaderElementComponent {
|
|
7
|
-
constructor(renderer, el, pepAddonService, route) {
|
|
8
|
+
constructor(renderer, el, pepAddonService, remoteLoaderService, route) {
|
|
8
9
|
this.renderer = renderer;
|
|
9
10
|
this.el = el;
|
|
10
11
|
this.pepAddonService = pepAddonService;
|
|
12
|
+
this.remoteLoaderService = remoteLoaderService;
|
|
11
13
|
this.route = route;
|
|
12
14
|
this.load = new EventEmitter();
|
|
13
15
|
this.element = null;
|
|
@@ -27,36 +29,51 @@ export class PepRemoteLoaderElementComponent {
|
|
|
27
29
|
this.element.addEventListener(event, this.events[event]);
|
|
28
30
|
}
|
|
29
31
|
}
|
|
32
|
+
async loadOptionsFromRoute() {
|
|
33
|
+
const params = this.route?.snapshot.params;
|
|
34
|
+
const data = this.route?.snapshot.data;
|
|
35
|
+
const blockName = params?.blockName || data?.blockName;
|
|
36
|
+
if (blockName?.length > 0) {
|
|
37
|
+
const addonUUID = params?.addonUUID || data?.addonUUID || '';
|
|
38
|
+
const blockType = data?.blockType || 'SettingsBlock';
|
|
39
|
+
const blockRemoteEntry = data?.blockRemoteEntry || '';
|
|
40
|
+
this.options = await this.remoteLoaderService.getBlockRemoteLoaderOptions(blockName, blockType, addonUUID, blockRemoteEntry);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
30
43
|
async ngAfterContentInit() {
|
|
31
44
|
try {
|
|
32
45
|
const t0 = performance.now();
|
|
33
|
-
//
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
46
|
+
// If the options is not supplied then we need to get it from the route.
|
|
47
|
+
if (!this.options) {
|
|
48
|
+
await this.loadOptionsFromRoute();
|
|
49
|
+
}
|
|
50
|
+
if (!this.options) {
|
|
51
|
+
throw new Error('No options supplied to the component.');
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
if (this.options?.addonId && (this.options.type === 'module' || this.options.type === 'script')) {
|
|
55
|
+
const lastSlashIndex = this.options.remoteEntry?.lastIndexOf('/') || -1;
|
|
56
|
+
if (lastSlashIndex > 0) {
|
|
57
|
+
const publicPath = this.options.remoteEntry.substring(0, lastSlashIndex + 1);
|
|
58
|
+
this.pepAddonService.setAddonStaticFolder(publicPath, this.options.addonId);
|
|
59
|
+
}
|
|
43
60
|
}
|
|
61
|
+
await loadRemoteModule(this.options);
|
|
62
|
+
this.element = this.renderer.createElement(this.options.elementName);
|
|
63
|
+
this.populateProps();
|
|
64
|
+
this.setupEvents();
|
|
65
|
+
this.renderer.appendChild(this.el.nativeElement, this.element);
|
|
66
|
+
const t1 = performance.now();
|
|
67
|
+
console.log('remote module wc load performance: ' + (t1 - t0) / 1000);
|
|
68
|
+
this.load.emit();
|
|
44
69
|
}
|
|
45
|
-
await loadRemoteModule(options);
|
|
46
|
-
this.element = this.renderer.createElement(options.elementName);
|
|
47
|
-
this.populateProps();
|
|
48
|
-
this.setupEvents();
|
|
49
|
-
this.renderer.appendChild(this.el.nativeElement, this.element);
|
|
50
|
-
const t1 = performance.now();
|
|
51
|
-
console.log('remote module wc load performance: ' + (t1 - t0) / 1000);
|
|
52
|
-
this.load.emit();
|
|
53
70
|
}
|
|
54
71
|
catch (error) {
|
|
55
72
|
console.error(error);
|
|
56
73
|
}
|
|
57
74
|
}
|
|
58
75
|
}
|
|
59
|
-
PepRemoteLoaderElementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepRemoteLoaderElementComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.PepAddonService }, { token: i2.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
76
|
+
PepRemoteLoaderElementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepRemoteLoaderElementComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.PepAddonService }, { token: i2.PepRemoteLoaderService }, { token: i3.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
60
77
|
PepRemoteLoaderElementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepRemoteLoaderElementComponent, selector: "pep-remote-loader-element", inputs: { options: "options", props: "props", events: "events" }, outputs: { load: "load" }, usesOnChanges: true, ngImport: i0, template: `
|
|
61
78
|
<!--<div #vc style="height: inherit;"></div>-->
|
|
62
79
|
`, isInline: true, styles: [":host{width:100%;height:inherit}:host::ng-deep>*{height:inherit}\n"] });
|
|
@@ -65,7 +82,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
65
82
|
args: [{ selector: 'pep-remote-loader-element', template: `
|
|
66
83
|
<!--<div #vc style="height: inherit;"></div>-->
|
|
67
84
|
`, styles: [":host{width:100%;height:inherit}:host::ng-deep>*{height:inherit}\n"] }]
|
|
68
|
-
}], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.PepAddonService }, { type: i2.ActivatedRoute, decorators: [{
|
|
85
|
+
}], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.PepAddonService }, { type: i2.PepRemoteLoaderService }, { type: i3.ActivatedRoute, decorators: [{
|
|
69
86
|
type: Optional
|
|
70
87
|
}] }]; }, propDecorators: { options: [{
|
|
71
88
|
type: Input
|
|
@@ -76,4 +93,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
76
93
|
}], load: [{
|
|
77
94
|
type: Output
|
|
78
95
|
}] } });
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWxvYWRlci1lbGVtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvcmVtb3RlLWxvYWRlci9yZW1vdGUtbG9hZGVyLWVsZW1lbnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQWEsUUFBUSxFQUFFLE1BQU0sRUFBMEMsTUFBTSxlQUFlLENBQUM7QUFFbEssT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7O0FBaUJ6RSxNQUFNLE9BQU8sK0JBQStCO0lBU3hDLFlBQ1ksUUFBbUIsRUFDbkIsRUFBYSxFQUNiLGVBQWdDLEVBQ2hDLG1CQUEyQyxFQUMvQixLQUFxQjtRQUpqQyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLE9BQUUsR0FBRixFQUFFLENBQVc7UUFDYixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUF3QjtRQUMvQixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQVRuQyxTQUFJLEdBQXVCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFeEQsWUFBTyxHQUFnQixJQUFJLENBQUM7SUFVNUIsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRTFCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sYUFBYTtRQUNqQixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pDO0lBQ0wsQ0FBQztJQUVPLFdBQVc7UUFDZixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQzVEO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyxvQkFBb0I7UUFDOUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzNDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QyxNQUFNLFNBQVMsR0FBRyxNQUFNLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxTQUFTLENBQUM7UUFFdkQsSUFBSSxTQUFTLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QixNQUFNLFNBQVMsR0FBRyxNQUFNLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDO1lBQzdELE1BQU0sU0FBUyxHQUFHLElBQUksRUFBRSxTQUFTLElBQUksZUFBZSxDQUFDO1lBQ3JELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxFQUFFLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztZQUV0RCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLDJCQUEyQixDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7U0FDaEk7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQjtRQUNwQixJQUFJO1lBQ0EsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRTdCLHdFQUF3RTtZQUN4RSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDZixNQUFNLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2FBQ3JDO1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO2FBQzVEO2lCQUFNO2dCQUNILElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLEVBQUU7b0JBQzdGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFFeEUsSUFBSSxjQUFjLEdBQUcsQ0FBQyxFQUFFO3dCQUNwQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDN0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztxQkFDL0U7aUJBQ0o7Z0JBRUQsTUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRXJDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDckUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBRW5CLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFL0QsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLHFDQUFxQyxHQUFHLENBQUMsRUFBRSxHQUFDLEVBQUUsQ0FBQyxHQUFDLElBQUksQ0FBQyxDQUFDO2dCQUVsRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3BCO1NBQ0o7UUFDRCxPQUFNLEtBQUssRUFBRTtZQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEI7SUFDTCxDQUFDOzs0SEF6RlEsK0JBQStCO2dIQUEvQiwrQkFBK0IsbUxBVjlCOztLQUVUOzJGQVFRLCtCQUErQjtrQkFaM0MsU0FBUzsrQkFDSSwyQkFBMkIsWUFDM0I7O0tBRVQ7OzBCQXNCSSxRQUFROzRDQWJKLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUVJLElBQUk7c0JBQWIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPcHRpb25hbCwgT3V0cHV0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgbG9hZFJlbW90ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyLWFyY2hpdGVjdHMvbW9kdWxlLWZlZGVyYXRpb24nO1xuaW1wb3J0IHsgUGVwQWRkb25TZXJ2aWNlIH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWInO1xuaW1wb3J0IHsgUGVwUmVtb3RlTG9hZGVyT3B0aW9ucyB9IGZyb20gJy4vcmVtb3RlLWxvYWRlci5tb2RlbCc7XG5pbXBvcnQgeyBQZXBSZW1vdGVMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi9yZW1vdGUtbG9hZGVyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1yZW1vdGUtbG9hZGVyLWVsZW1lbnQnLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDwhLS08ZGl2ICN2YyBzdHlsZT1cImhlaWdodDogaW5oZXJpdDtcIj48L2Rpdj4tLT5cbiAgICBgLFxuICAgIHN0eWxlczogW2BcbiAgICAgICAgOmhvc3QgeyB3aWR0aDoxMDAlOyBoZWlnaHQ6IGluaGVyaXQgfVxuICAgICAgICA6aG9zdDo6bmctZGVlcCA+ICoge1xuICAgICAgICAgICAgaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgICB9XG4gICAgYF0sXG59KVxuZXhwb3J0IGNsYXNzIFBlcFJlbW90ZUxvYWRlckVsZW1lbnRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpIG9wdGlvbnM6IFBlcFJlbW90ZUxvYWRlck9wdGlvbnM7XG4gICAgQElucHV0KCkgcHJvcHM6IHsgW3Byb3A6IHN0cmluZ106IHVua25vd24gfTtcbiAgICBASW5wdXQoKSBldmVudHM6IHsgW2V2ZW50OiBzdHJpbmddOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkIH07XG5cbiAgICBAT3V0cHV0KCkgbG9hZDogRXZlbnRFbWl0dGVyPGFueT4gPSAgbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnQgPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBlbDpFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHBlcEFkZG9uU2VydmljZTogUGVwQWRkb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlbW90ZUxvYWRlclNlcnZpY2U6IFBlcFJlbW90ZUxvYWRlclNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlXG4gICAgKSB7IFxuXG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50KSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5wb3B1bGF0ZVByb3BzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwb3B1bGF0ZVByb3BzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gdGhpcy5wcm9wcykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50W3Byb3BdID0gdGhpcy5wcm9wc1twcm9wXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBFdmVudHMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXZlbnQgaW4gdGhpcy5ldmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCB0aGlzLmV2ZW50c1tldmVudF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkT3B0aW9uc0Zyb21Sb3V0ZSgpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5yb3V0ZT8uc25hcHNob3QucGFyYW1zO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5yb3V0ZT8uc25hcHNob3QuZGF0YTtcbiAgICAgICAgY29uc3QgYmxvY2tOYW1lID0gcGFyYW1zPy5ibG9ja05hbWUgfHwgZGF0YT8uYmxvY2tOYW1lO1xuICAgICAgICBcbiAgICAgICAgaWYgKGJsb2NrTmFtZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgYWRkb25VVUlEID0gcGFyYW1zPy5hZGRvblVVSUQgfHwgZGF0YT8uYWRkb25VVUlEIHx8ICcnO1xuICAgICAgICAgICAgY29uc3QgYmxvY2tUeXBlID0gZGF0YT8uYmxvY2tUeXBlIHx8ICdTZXR0aW5nc0Jsb2NrJztcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrUmVtb3RlRW50cnkgPSBkYXRhPy5ibG9ja1JlbW90ZUVudHJ5IHx8ICcnO1xuXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBhd2FpdCB0aGlzLnJlbW90ZUxvYWRlclNlcnZpY2UuZ2V0QmxvY2tSZW1vdGVMb2FkZXJPcHRpb25zKGJsb2NrTmFtZSwgYmxvY2tUeXBlLCBhZGRvblVVSUQsIGJsb2NrUmVtb3RlRW50cnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdDAgPSBwZXJmb3JtYW5jZS5ub3coKTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIG9wdGlvbnMgaXMgbm90IHN1cHBsaWVkIHRoZW4gd2UgbmVlZCB0byBnZXQgaXQgZnJvbSB0aGUgcm91dGUuXG4gICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE9wdGlvbnNGcm9tUm91dGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG9wdGlvbnMgc3VwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC4nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucz8uYWRkb25JZCAmJiAodGhpcy5vcHRpb25zLnR5cGUgPT09ICdtb2R1bGUnIHx8IHRoaXMub3B0aW9ucy50eXBlID09PSAnc2NyaXB0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdFNsYXNoSW5kZXggPSB0aGlzLm9wdGlvbnMucmVtb3RlRW50cnk/Lmxhc3RJbmRleE9mKCcvJykgfHwgLTE7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiAobGFzdFNsYXNoSW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwdWJsaWNQYXRoID0gdGhpcy5vcHRpb25zLnJlbW90ZUVudHJ5LnN1YnN0cmluZygwLCBsYXN0U2xhc2hJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXBBZGRvblNlcnZpY2Uuc2V0QWRkb25TdGF0aWNGb2xkZXIocHVibGljUGF0aCwgdGhpcy5vcHRpb25zLmFkZG9uSWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgICAgIGF3YWl0IGxvYWRSZW1vdGVNb2R1bGUodGhpcy5vcHRpb25zKTtcbiAgICBcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQodGhpcy5vcHRpb25zLmVsZW1lbnROYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVsYXRlUHJvcHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHVwRXZlbnRzKCk7XG4gICAgXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHRoaXMuZWxlbWVudCk7XG4gICAgXG4gICAgICAgICAgICAgICAgY29uc3QgdDEgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygncmVtb3RlIG1vZHVsZSB3YyBsb2FkIHBlcmZvcm1hbmNlOiAnICsgKHQxLXQwKS8xMDAwKTtcbiAgICBcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWQuZW1pdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cbn0iXX0=
|
|
@@ -3,12 +3,12 @@ import { Injectable, EventEmitter, createNgModuleRef, ViewContainerRef, Componen
|
|
|
3
3
|
import { __awaiter } from 'tslib';
|
|
4
4
|
import * as i1 from '@pepperi-addons/ngx-lib';
|
|
5
5
|
import { PepNgxLibModule } from '@pepperi-addons/ngx-lib';
|
|
6
|
-
import * as i2
|
|
6
|
+
import * as i2 from '@angular/common';
|
|
7
7
|
import { CommonModule } from '@angular/common';
|
|
8
8
|
import * as i1$1 from '@pepperi-addons/ngx-lib/dialog';
|
|
9
9
|
import { PepDialogModule } from '@pepperi-addons/ngx-lib/dialog';
|
|
10
10
|
import { loadRemoteModule } from '@angular-architects/module-federation';
|
|
11
|
-
import * as
|
|
11
|
+
import * as i3 from '@angular/router';
|
|
12
12
|
import { HttpClientModule } from '@angular/common/http';
|
|
13
13
|
import { MatDialogModule } from '@angular/material/dialog';
|
|
14
14
|
import { ModuleFederationToolsModule } from '@angular-architects/module-federation-tools';
|
|
@@ -193,10 +193,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
193
193
|
}] } });
|
|
194
194
|
|
|
195
195
|
class PepRemoteLoaderElementComponent {
|
|
196
|
-
constructor(renderer, el, pepAddonService, route) {
|
|
196
|
+
constructor(renderer, el, pepAddonService, remoteLoaderService, route) {
|
|
197
197
|
this.renderer = renderer;
|
|
198
198
|
this.el = el;
|
|
199
199
|
this.pepAddonService = pepAddonService;
|
|
200
|
+
this.remoteLoaderService = remoteLoaderService;
|
|
200
201
|
this.route = route;
|
|
201
202
|
this.load = new EventEmitter();
|
|
202
203
|
this.element = null;
|
|
@@ -216,31 +217,49 @@ class PepRemoteLoaderElementComponent {
|
|
|
216
217
|
this.element.addEventListener(event, this.events[event]);
|
|
217
218
|
}
|
|
218
219
|
}
|
|
220
|
+
loadOptionsFromRoute() {
|
|
221
|
+
var _a, _b;
|
|
222
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
223
|
+
const params = (_a = this.route) === null || _a === void 0 ? void 0 : _a.snapshot.params;
|
|
224
|
+
const data = (_b = this.route) === null || _b === void 0 ? void 0 : _b.snapshot.data;
|
|
225
|
+
const blockName = (params === null || params === void 0 ? void 0 : params.blockName) || (data === null || data === void 0 ? void 0 : data.blockName);
|
|
226
|
+
if ((blockName === null || blockName === void 0 ? void 0 : blockName.length) > 0) {
|
|
227
|
+
const addonUUID = (params === null || params === void 0 ? void 0 : params.addonUUID) || (data === null || data === void 0 ? void 0 : data.addonUUID) || '';
|
|
228
|
+
const blockType = (data === null || data === void 0 ? void 0 : data.blockType) || 'SettingsBlock';
|
|
229
|
+
const blockRemoteEntry = (data === null || data === void 0 ? void 0 : data.blockRemoteEntry) || '';
|
|
230
|
+
this.options = yield this.remoteLoaderService.getBlockRemoteLoaderOptions(blockName, blockType, addonUUID, blockRemoteEntry);
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
}
|
|
219
234
|
ngAfterContentInit() {
|
|
220
|
-
var _a, _b
|
|
235
|
+
var _a, _b;
|
|
221
236
|
return __awaiter(this, void 0, void 0, function* () {
|
|
222
237
|
try {
|
|
223
238
|
const t0 = performance.now();
|
|
224
|
-
//
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
239
|
+
// If the options is not supplied then we need to get it from the route.
|
|
240
|
+
if (!this.options) {
|
|
241
|
+
yield this.loadOptionsFromRoute();
|
|
242
|
+
}
|
|
243
|
+
if (!this.options) {
|
|
244
|
+
throw new Error('No options supplied to the component.');
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.addonId) && (this.options.type === 'module' || this.options.type === 'script')) {
|
|
248
|
+
const lastSlashIndex = ((_b = this.options.remoteEntry) === null || _b === void 0 ? void 0 : _b.lastIndexOf('/')) || -1;
|
|
249
|
+
if (lastSlashIndex > 0) {
|
|
250
|
+
const publicPath = this.options.remoteEntry.substring(0, lastSlashIndex + 1);
|
|
251
|
+
this.pepAddonService.setAddonStaticFolder(publicPath, this.options.addonId);
|
|
252
|
+
}
|
|
234
253
|
}
|
|
254
|
+
yield loadRemoteModule(this.options);
|
|
255
|
+
this.element = this.renderer.createElement(this.options.elementName);
|
|
256
|
+
this.populateProps();
|
|
257
|
+
this.setupEvents();
|
|
258
|
+
this.renderer.appendChild(this.el.nativeElement, this.element);
|
|
259
|
+
const t1 = performance.now();
|
|
260
|
+
console.log('remote module wc load performance: ' + (t1 - t0) / 1000);
|
|
261
|
+
this.load.emit();
|
|
235
262
|
}
|
|
236
|
-
yield loadRemoteModule(options);
|
|
237
|
-
this.element = this.renderer.createElement(options.elementName);
|
|
238
|
-
this.populateProps();
|
|
239
|
-
this.setupEvents();
|
|
240
|
-
this.renderer.appendChild(this.el.nativeElement, this.element);
|
|
241
|
-
const t1 = performance.now();
|
|
242
|
-
console.log('remote module wc load performance: ' + (t1 - t0) / 1000);
|
|
243
|
-
this.load.emit();
|
|
244
263
|
}
|
|
245
264
|
catch (error) {
|
|
246
265
|
console.error(error);
|
|
@@ -248,7 +267,7 @@ class PepRemoteLoaderElementComponent {
|
|
|
248
267
|
});
|
|
249
268
|
}
|
|
250
269
|
}
|
|
251
|
-
PepRemoteLoaderElementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepRemoteLoaderElementComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.PepAddonService }, { token:
|
|
270
|
+
PepRemoteLoaderElementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepRemoteLoaderElementComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.PepAddonService }, { token: PepRemoteLoaderService }, { token: i3.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
252
271
|
PepRemoteLoaderElementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepRemoteLoaderElementComponent, selector: "pep-remote-loader-element", inputs: { options: "options", props: "props", events: "events" }, outputs: { load: "load" }, usesOnChanges: true, ngImport: i0, template: `
|
|
253
272
|
<!--<div #vc style="height: inherit;"></div>-->
|
|
254
273
|
`, isInline: true, styles: [":host{width:100%;height:inherit}:host::ng-deep>*{height:inherit}\n"] });
|
|
@@ -258,7 +277,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
258
277
|
<!--<div #vc style="height: inherit;"></div>-->
|
|
259
278
|
`, styles: [":host{width:100%;height:inherit}:host::ng-deep>*{height:inherit}\n"] }]
|
|
260
279
|
}], ctorParameters: function () {
|
|
261
|
-
return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.PepAddonService }, { type:
|
|
280
|
+
return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.PepAddonService }, { type: PepRemoteLoaderService }, { type: i3.ActivatedRoute, decorators: [{
|
|
262
281
|
type: Optional
|
|
263
282
|
}] }];
|
|
264
283
|
}, propDecorators: { options: [{
|
|
@@ -333,7 +352,7 @@ class PepAddonBlockLoaderComponent {
|
|
|
333
352
|
}
|
|
334
353
|
}
|
|
335
354
|
PepAddonBlockLoaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepAddonBlockLoaderComponent, deps: [{ token: PepRemoteLoaderService }], target: i0.ɵɵFactoryTarget.Component });
|
|
336
|
-
PepAddonBlockLoaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepAddonBlockLoaderComponent, selector: "pep-addon-block-loader", inputs: { addonId: "addonId", remoteEntry: "remoteEntry", blockType: "blockType", name: "name", hostObject: "hostObject", dialogRef: "dialogRef" }, outputs: { hostEvents: "hostEvents", blockLoad: "blockLoad" }, viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<ng-container *ngIf=\"!inDialog\">\n <ng-container *ngTemplateOutlet=\"remoteLoaderTemplate\"></ng-container>\n</ng-container>\n\n<ng-template #dialogTemplate let-data>\n <pep-dialog [showClose]=\"data?.showClose\" [showHeader]=\"data?.showHeader\" [showFooter]=\"data?.showFooter\" [title]=\"data?.title\" (close)=\"closeDialog($event)\">\n <ng-container pep-dialog-content>\n <ng-container *ngTemplateOutlet=\"remoteLoaderTemplate\"></ng-container>\n </ng-container>\n </pep-dialog>\n</ng-template>\n\n<ng-template #remoteLoaderTemplate>\n <pep-remote-loader *ngIf=\"remotePathOptions && !loadElement\"\n [options]=\"remotePathOptions\"\n [hostObject]=\"hostObject\"\n (hostEvents)=\"onHostEvents($event);\"\n (load)=\"onBlockLoad()\">\n </pep-remote-loader>\n\n <pep-remote-loader-element *ngIf=\"remotePathOptions && loadElement\" \n [options]=\"remotePathOptions\"\n [props]=\"{ hostObject: hostObject }\"\n [events]=\"{ hostEvents: onHostEventsCallback }\"\n (load)=\"onBlockLoad()\">\n </pep-remote-loader-element>\n\n</ng-template>", styles: [""], dependencies: [{ kind: "directive", type: i2
|
|
355
|
+
PepAddonBlockLoaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepAddonBlockLoaderComponent, selector: "pep-addon-block-loader", inputs: { addonId: "addonId", remoteEntry: "remoteEntry", blockType: "blockType", name: "name", hostObject: "hostObject", dialogRef: "dialogRef" }, outputs: { hostEvents: "hostEvents", blockLoad: "blockLoad" }, viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<ng-container *ngIf=\"!inDialog\">\n <ng-container *ngTemplateOutlet=\"remoteLoaderTemplate\"></ng-container>\n</ng-container>\n\n<ng-template #dialogTemplate let-data>\n <pep-dialog [showClose]=\"data?.showClose\" [showHeader]=\"data?.showHeader\" [showFooter]=\"data?.showFooter\" [title]=\"data?.title\" (close)=\"closeDialog($event)\">\n <ng-container pep-dialog-content>\n <ng-container *ngTemplateOutlet=\"remoteLoaderTemplate\"></ng-container>\n </ng-container>\n </pep-dialog>\n</ng-template>\n\n<ng-template #remoteLoaderTemplate>\n <pep-remote-loader *ngIf=\"remotePathOptions && !loadElement\"\n [options]=\"remotePathOptions\"\n [hostObject]=\"hostObject\"\n (hostEvents)=\"onHostEvents($event);\"\n (load)=\"onBlockLoad()\">\n </pep-remote-loader>\n\n <pep-remote-loader-element *ngIf=\"remotePathOptions && loadElement\" \n [options]=\"remotePathOptions\"\n [props]=\"{ hostObject: hostObject }\"\n [events]=\"{ hostEvents: onHostEventsCallback }\"\n (load)=\"onBlockLoad()\">\n </pep-remote-loader-element>\n\n</ng-template>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1$1.PepDialogComponent, selector: "pep-dialog", inputs: ["title", "showClose", "showHeader", "showFooter"], outputs: ["close"] }, { kind: "component", type: PepRemoteLoaderComponent, selector: "pep-remote-loader", inputs: ["options", "hostObject"], outputs: ["hostEvents", "load"] }, { kind: "component", type: PepRemoteLoaderElementComponent, selector: "pep-remote-loader-element", inputs: ["options", "props", "events"], outputs: ["load"] }] });
|
|
337
356
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepAddonBlockLoaderComponent, decorators: [{
|
|
338
357
|
type: Component,
|
|
339
358
|
args: [{ selector: 'pep-addon-block-loader', template: "<ng-container *ngIf=\"!inDialog\">\n <ng-container *ngTemplateOutlet=\"remoteLoaderTemplate\"></ng-container>\n</ng-container>\n\n<ng-template #dialogTemplate let-data>\n <pep-dialog [showClose]=\"data?.showClose\" [showHeader]=\"data?.showHeader\" [showFooter]=\"data?.showFooter\" [title]=\"data?.title\" (close)=\"closeDialog($event)\">\n <ng-container pep-dialog-content>\n <ng-container *ngTemplateOutlet=\"remoteLoaderTemplate\"></ng-container>\n </ng-container>\n </pep-dialog>\n</ng-template>\n\n<ng-template #remoteLoaderTemplate>\n <pep-remote-loader *ngIf=\"remotePathOptions && !loadElement\"\n [options]=\"remotePathOptions\"\n [hostObject]=\"hostObject\"\n (hostEvents)=\"onHostEvents($event);\"\n (load)=\"onBlockLoad()\">\n </pep-remote-loader>\n\n <pep-remote-loader-element *ngIf=\"remotePathOptions && loadElement\" \n [options]=\"remotePathOptions\"\n [props]=\"{ hostObject: hostObject }\"\n [events]=\"{ hostEvents: onHostEventsCallback }\"\n (load)=\"onBlockLoad()\">\n </pep-remote-loader-element>\n\n</ng-template>" }]
|