@libs-ui/utils 0.2.91 → 0.2.92
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/esm2022/cache.mjs
CHANGED
|
@@ -46,7 +46,7 @@ export class UtilsCache {
|
|
|
46
46
|
throw Error('Language support vi | en');
|
|
47
47
|
}
|
|
48
48
|
UtilsCache.language.set(lang);
|
|
49
|
-
UtilsCache.Set(UtilsCache.languageKeyCache, lang);
|
|
49
|
+
UtilsCache.Set(UtilsCache.languageKeyCache, lang, UtilsCache.CACHE_EXPIRE_NONE);
|
|
50
50
|
}
|
|
51
51
|
static getLang() {
|
|
52
52
|
return UtilsCache.language();
|
|
@@ -377,4 +377,4 @@ export class UtilsCache {
|
|
|
377
377
|
});
|
|
378
378
|
}
|
|
379
379
|
}
|
|
380
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4Q0FBOEM7QUFDOUMsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUU5QixNQUFNLE9BQU8sVUFBVTtJQUNkLE1BQU0sQ0FBVSx5QkFBeUIsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ25ELE1BQU0sQ0FBVSxpQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2QyxNQUFNLENBQVUsU0FBUyxHQUFHLElBQUksRUFBRSxDQUFDO0lBQ25DLE1BQU0sQ0FBQyx3QkFBd0IsR0FBRyxtQ0FBbUMsQ0FBQztJQUVyRSxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUM7SUFDbkQsTUFBTSxDQUFDLHdCQUF3QixHQUFHLEtBQUssRUFBVSxDQUFDO0lBQ2xELE1BQU0sQ0FBQyxVQUFVLENBQVc7SUFDNUIsTUFBTSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQVMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckUsTUFBTSxDQUFDLE9BQU8sQ0FBNkI7SUFD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T0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hCLENBQUMsQ0FBQztZQUVGLE9BQU8sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFZLEVBQUUsRUFBRTtnQkFDakMsT0FBTyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRyxLQUFLLENBQUMsTUFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUUsTUFBTSxDQUFFLEtBQUssQ0FBQyxNQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdDLENBQUMsQ0FBQztZQUVGLE9BQU8sQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFO2dCQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDNUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvciAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5pbXBvcnQgeyBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFV0aWxzQ29tbXVuaWNhdGVNaWNybyB9IGZyb20gJy4vY29tbXVuaWNhdGUtbWljcm8nO1xuaW1wb3J0IHsgZGVjcnlwdCwgZW5jcnlwdCwgbWQ1IH0gZnJvbSAnLi9jcnlwdG8nO1xuaW1wb3J0IHsgZ2V0UGxhdEZyb21Ccm93c2VyIH0gZnJvbSAnLi9kb20nO1xuaW1wb3J0IHsgaXNFbWJlZEZyYW1lIH0gZnJvbSAnLi9mdW5jdGlvbi1jaGVjay1lbWJlZC1mcmFtZSc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzIH0gZnJvbSAnLi9sYW5ndWFnZSc7XG5pbXBvcnQgeyB1dWlkIH0gZnJvbSAnLi91dWlkJztcblxuZXhwb3J0IGNsYXNzIFV0aWxzQ2FjaGUge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENBQ0hFX0VYUElSRV9USU1FX0RFRkFVTFQgPSA1ICogNjA7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ0FDSEVfRVhQSVJFX05PTkUgPSAtMTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBpZFNlcnZpY2UgPSB1dWlkKCk7XG4gIHB1YmxpYyBzdGF0aWMgdHlwZUtleUNsZWFyTG9jYWxTdG9yYWdlID0gJ0xJQlNfVUlfQ0xFQVJfTE9DQUxfU1RPUkFHRV9FVkVOVCc7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbGFuZ3VhZ2VLZXlDYWNoZSA9ICdTUjN4UUt4SGdmZmlDZXZQUVJyYWxnJztcbiAgcHJpdmF0ZSBzdGF0aWMgbGlzdEtleUtlZXBXaGVuQ2xlYXJBTGxsID0gQXJyYXk8c3RyaW5nPigpO1xuICBwcml2YXRlIHN0YXRpYyBpbml0ZEV2ZW50PzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBzdGF0aWMgbGFuZ3VhZ2UgPSBzaWduYWw8c3RyaW5nPihVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLmRlZmF1bHRMYW5nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgc3RvcmFnZTogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH07XG4gIHByaXZhdGUgc3RhdGljIGRiTmFtZSA9ICdsaWJzLXVpLWNhY2hlJztcbiAgcHJpdmF0ZSBzdGF0aWMgaXRlbUluZGV4QnlLZXkgPSAna2V5JztcbiAgcHJpdmF0ZSBzdGF0aWMgZGJWZXJzaW9uID0gMTtcbiAgcHJpdmF0ZSBzdGF0aWMgZGI6IElEQkRhdGFiYXNlIHwgbnVsbCA9IG51bGw7XG5cbiAgcHVibGljIHN0YXRpYyBpbml0KGNvbmZpZzogeyBpbmRleGVkREJOYW1lPzogc3RyaW5nLCBsYW5ndWFnZUtleUNhY2hlPzogc3RyaW5nLCB0eXBlS2V5Q2xlYXJMb2NhbFN0b3JhZ2U/OiBzdHJpbmcsIGxpc3RLZXlLZWVwV2hlbkNsZWFyQWxsPzogQXJyYXk8c3RyaW5nPiB9KSB7XG4gICAgaWYgKFV0aWxzQ2FjaGUuaW5pdGRFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBVdGlsc0NhY2hlLmluaXRkRXZlbnQgPSB0cnVlO1xuICAgIGlmIChjb25maWcuaW5kZXhlZERCTmFtZSkge1xuICAgICAgVXRpbHNDYWNoZS5kYk5hbWUgPSBjb25maWcuaW5kZXhlZERCTmFtZTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy50eXBlS2V5Q2xlYXJMb2NhbFN0b3JhZ2UpIHtcbiAgICAgIFV0aWxzQ2FjaGUudHlwZUtleUNsZWFyTG9jYWxTdG9yYWdlID0gY29uZmlnLnR5cGVLZXlDbGVhckxvY2FsU3RvcmFnZTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5saXN0S2V5S2VlcFdoZW5DbGVhckFsbCkge1xuICAgICAgVXRpbHNDYWNoZS5saXN0S2V5S2VlcFdoZW5DbGVhckFMbGwgPSBjb25maWcubGlzdEtleUtlZXBXaGVuQ2xlYXJBbGw7XG4gICAgfVxuICAgIGlmIChjb25maWcubGFuZ3VhZ2VLZXlDYWNoZSkge1xuICAgICAgVXRpbHNDYWNoZS5sYW5ndWFnZUtleUNhY2hlID0gY29uZmlnLmxhbmd1YWdlS2V5Q2FjaGU7XG4gICAgfVxuICAgIHRoaXMubGFuZ3VhZ2Uuc2V0KFV0aWxzQ2FjaGUuR2V0KFV0aWxzQ2FjaGUubGFuZ3VhZ2VLZXlDYWNoZSwgVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5kZWZhdWx0TGFuZykpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBzZXRMYW5nKGxhbmc6IHN0cmluZykge1xuICAgIGlmIChsYW5nICE9PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlZJICYmIGxhbmcgIT09IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuRU4pIHtcbiAgICAgIHRocm93IEVycm9yKCdMYW5ndWFnZSBzdXBwb3J0IHZpIHwgZW4nKTtcbiAgICB9XG4gICAgVXRpbHNDYWNoZS5sYW5ndWFnZS5zZXQobGFuZyk7XG4gICAgVXRpbHNDYWNoZS5TZXQoVXRpbHNDYWNoZS5sYW5ndWFnZUtleUNhY2hlLCBsYW5nKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0TGFuZygpIHtcbiAgICByZXR1cm4gVXRpbHNDYWNoZS5sYW5ndWFnZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgb3BlbkRCKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIub3BlbihVdGlsc0NhY2hlLmRiTmFtZSwgVXRpbHNDYWNoZS5kYlZlcnNpb24pO1xuXG4gICAgICByZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IChldmVudDogSURCVmVyc2lvbkNoYW5nZUV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGRiID0gKGV2ZW50LnRhcmdldCBhcyBJREJPcGVuREJSZXF1ZXN0KS5yZXN1bHQ7XG5cbiAgICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKFV0aWxzQ2FjaGUuZGJOYW1lKSkge1xuICAgICAgICAgIGNvbnN0IG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoVXRpbHNDYWNoZS5kYk5hbWUsIHsga2V5UGF0aDogVXRpbHNDYWNoZS5pdGVtSW5kZXhCeUtleSwgYXV0b0luY3JlbWVudDogdHJ1ZSB9KTtcblxuICAgICAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KFV0aWxzQ2FjaGUuaXRlbUluZGV4QnlLZXksIFV0aWxzQ2FjaGUuaXRlbUluZGV4QnlLZXksIHsgdW5pcXVlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgVXRpbHNDYWNoZS5kYiA9IHJlcXVlc3QucmVzdWx0O1xuICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgfTtcblxuICAgICAgcmVxdWVzdC5vbmVycm9yID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9wZW5pbmcgSW5kZXhlZERCOicsIGV2ZW50KTtcbiAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgZ2V0T2JqZWN0U3RvcmUoKSB7XG4gICAgaWYgKCFVdGlsc0NhY2hlLmRiKSB7XG4gICAgICBhd2FpdCBVdGlsc0NhY2hlLm9wZW5EQigpO1xuICAgIH1cbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IFV0aWxzQ2FjaGUuZGI/LnRyYW5zYWN0aW9uKFtVdGlsc0NhY2hlLmRiTmFtZV0sICdyZWFkd3JpdGUnKTtcbiAgICBpZiAoIXRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoVXRpbHNDYWNoZS5kYk5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0IExvY2FsU3RvcmFnZSgpOiBhbnkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdy5sb2NhbFN0b3JhZ2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnN0IE9TID0gZ2V0UGxhdEZyb21Ccm93c2VyKCk7XG5cbiAgICAgICAgaWYgKE9TLmluY2x1ZGVzKCdTYWZhcmknKSAmJiBwYXJzZUZsb2F0KE9TLnNwbGl0KCcgJykucG9wKCkgfHwgJzAnKSA+PSAxNikge1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxTdG9yYWdlRmFrZU9uU2FmYXJpKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbFN0b3JhZ2VGYWtlKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgIHJldHVybiB0aGlzLmdldExvY2FsU3RvcmFnZUZha2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRMb2NhbFN0b3JhZ2VGYWtlT25TYWZhcmkoKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cubG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyAmJiAhVXRpbHNDYWNoZS5zdG9yYWdlICYmIE9iamVjdC5rZXlzKGxvY2FsU3RvcmFnZSkubGVuZ3RoKSB7XG4gICAgICB0aGlzLnN0b3JhZ2UgPSB7IC4uLmxvY2FsU3RvcmFnZSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzZXRJdGVtOiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuc3RvcmFnZVtrZXldID0gdmFsdWU7XG4gICAgICB9LFxuICAgICAgZ2V0SXRlbTogKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcblxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc3RvcmFnZSB8fCBpc05pbCh0aGlzLnN0b3JhZ2Vba2V5XSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdGhpcy5zdG9yYWdlW2tleV0gYXMgc3RyaW5nKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlPy5ba2V5XTtcbiAgICAgIH0sXG4gICAgICByZW1vdmVJdGVtOiAoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc3RvcmFnZT8uW2tleV07XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgICB9LFxuICAgICAgY2xlYXI6ICgpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yYWdlID0ge307XG4gICAgICAgIGxvY2FsU3RvcmFnZS5jbGVhcigpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRMb2NhbFN0b3JhZ2VGYWtlKCkge1xuICAgIGlmICghVXRpbHNDYWNoZS5zdG9yYWdlKSB7XG4gICAgICB0aGlzLnN0b3JhZ2UgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2V0SXRlbTogKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgICAgICB0aGlzLnN0b3JhZ2Vba2V5XSA9IHZhbHVlO1xuICAgICAgfSxcbiAgICAgIGdldEl0ZW06IChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlPy5ba2V5XTtcbiAgICAgIH0sXG4gICAgICByZW1vdmVJdGVtOiAoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc3RvcmFnZT8uW2tleV07XG4gICAgICB9LFxuICAgICAgY2xlYXI6ICgpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yYWdlID0ge307XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgR2V0QXN5bmM8VCA9IGFueT4oa2V5OiBzdHJpbmcsIGRlZmF1bHRfdmFsdWU/OiBhbnksIGlzS2V5TUQ1ID0gZmFsc2UpOiBQcm9taXNlPFQ+IHtcbiAgICBrZXkgPSBpc0tleU1ENSA/IGtleSA6IG1kNShrZXkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IG9iamVjdFN0b3JlID0gYXdhaXQgVXRpbHNDYWNoZS5nZXRPYmplY3RTdG9yZSgpO1xuXG4gICAgICBpZiAoIW9iamVjdFN0b3JlKSB7XG5cbiAgICAgICAgcmV0dXJuIHJlc29sdmUoZGVmYXVsdF92YWx1ZSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXF1ZXN0ID0gb2JqZWN0U3RvcmUuZ2V0KGtleSk7XG5cbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXJlcXVlc3QucmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoZGVmYXVsdF92YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGVjcnlwdChyZXF1ZXN0LnJlc3VsdC52YWx1ZSkpO1xuXG4gICAgICAgIGlmIChkYXRhLmV4cGlyZSA9PT0gVXRpbHNDYWNoZS5DQUNIRV9FWFBJUkVfTk9ORSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKGRhdGEuanNvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudE1pbGxpc2Vjb25kID0gKG5ldyBEYXRlKCkudmFsdWVPZigpIC8gMTAwMCk7XG5cbiAgICAgICAgaWYgKGRhdGEuZXhwaXJlIDwgY3VycmVudE1pbGxpc2Vjb25kKSB7XG5cbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZShkZWZhdWx0X3ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNvbHZlKGRhdGEuanNvbik7XG4gICAgICB9O1xuXG4gICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgIHJlamVjdChyZXF1ZXN0LmVycm9yKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIEdldDxUID0gYW55PihrZXk6IHN0cmluZywgZGVmYXVsdF92YWx1ZT86IGFueSk6IFQgeyAvLyBzdXBwb3J0IGNobyBuaOG7r25nIGZpbGUga2jDtG5nIHRo4buDIGluamVjdCBVdGlsc0NhY2hlXG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLkdldERlZmF1bHRWYWx1ZUJ5U3BlY2lmaWNLZXkoa2V5LCBkZWZhdWx0X3ZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgY2FjaGVkRGF0YSA9IHRoaXMuTG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcblxuICAgIGlmICghY2FjaGVkRGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMuR2V0RGVmYXVsdFZhbHVlQnlTcGVjaWZpY0tleShrZXksIGRlZmF1bHRfdmFsdWUpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGVjcnlwdChjYWNoZWREYXRhKSk7XG5cbiAgICAgIGlmIChkYXRhLmV4cGlyZSA9PT0gVXRpbHNDYWNoZS5DQUNIRV9FWFBJUkVfTk9ORSkge1xuICAgICAgICByZXR1cm4gZGF0YS52YWx1ZSA/PyBkZWZhdWx0X3ZhbHVlO1xuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudE1pbGxpc2Vjb25kID0gKG5ldyBEYXRlKCkudmFsdWVPZigpIC8gMTAwMCk7XG5cbiAgICAgIGlmIChkYXRhLmV4cGlyZSA8IGN1cnJlbnRNaWxsaXNlY29uZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5HZXREZWZhdWx0VmFsdWVCeVNwZWNpZmljS2V5KGtleSwgZGVmYXVsdF92YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhLnZhbHVlO1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcblxuICAgICAgcmV0dXJuIHRoaXMuR2V0RGVmYXVsdFZhbHVlQnlTcGVjaWZpY0tleShrZXksIGRlZmF1bHRfdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgR2V0RGVmYXVsdFZhbHVlQnlTcGVjaWZpY0tleShrZXk6IHN0cmluZywgZGVmYXVsdF92YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIGRlZmF1bHRfdmFsdWU7XG5cbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgU2V0QXN5bmM8VCA9IGFueT4oa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGV4cGlyZVRpbWVCeVNlY29uZCA9IFV0aWxzQ2FjaGUuQ0FDSEVfRVhQSVJFX1RJTUVfREVGQVVMVCwgaXNLZXlNRDUgPSBmYWxzZSk6IFByb21pc2U8VD4geyAvLyBzdXBwb3J0IGluamVjdCBVdGlsc0NhY2hlXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IG9iamVjdFN0b3JlID0gYXdhaXQgVXRpbHNDYWNoZS5nZXRPYmplY3RTdG9yZSgpO1xuXG4gICAgICBrZXkgPSBpc0tleU1ENSA/IGtleSA6IG1kNShrZXkpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY3VycmVudE1pbGxpc2Vjb25kID0gZXhwaXJlVGltZUJ5U2Vjb25kID09PSBVdGlsc0NhY2hlLkNBQ0hFX0VYUElSRV9OT05FID8gVXRpbHNDYWNoZS5DQUNIRV9FWFBJUkVfTk9ORSA6IChuZXcgRGF0ZSgpLnZhbHVlT2YoKSAvIDEwMDApICsgZXhwaXJlVGltZUJ5U2Vjb25kO1xuICAgICAgICBjb25zdCBkYXRhOiBhbnkgPSB7XG4gICAgICAgICAgdmFsdWU6IGVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoeyBqc29uOiB2YWx1ZSwgZXhwaXJlOiBjdXJyZW50TWlsbGlzZWNvbmQgfSkpLFxuICAgICAgICB9O1xuICAgICAgICBkYXRhW1V0aWxzQ2FjaGUuaXRlbUluZGV4QnlLZXldID0ga2V5O1xuXG4gICAgICAgIGlmICghb2JqZWN0U3RvcmUpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignQ2FuIG5vdCBvcGVuIG9iamVjdCBzdG9yZScpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXF1ZXN0ID0gb2JqZWN0U3RvcmU/LnB1dChkYXRhKTtcbiAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShyZXF1ZXN0LnJlc3VsdCBhcyBhbnkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICByZWplY3QocmVxdWVzdC5lcnJvcik7XG4gICAgICAgIH07XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIHN0YXRpYyBTZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGV4cGlyZVRpbWVCeVNlY29uZCA9IFV0aWxzQ2FjaGUuQ0FDSEVfRVhQSVJFX1RJTUVfREVGQVVMVCk6IGJvb2xlYW4geyAvLyBzdXBwb3J0IGNobyBuaOG7r25nIGZpbGUga2jDtG5nIGluamVjdCBVdGlsc0NhY2hlXG4gICAgY29uc3QgY3VycmVudE1pbGxpc2Vjb25kID0gZXhwaXJlVGltZUJ5U2Vjb25kID09PSBVdGlsc0NhY2hlLkNBQ0hFX0VYUElSRV9OT05FID8gVXRpbHNDYWNoZS5DQUNIRV9FWFBJUkVfTk9ORSA6IChuZXcgRGF0ZSgpLnZhbHVlT2YoKSAvIDEwMDApICsgZXhwaXJlVGltZUJ5U2Vjb25kO1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBleHBpcmU6IGN1cnJlbnRNaWxsaXNlY29uZFxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5Mb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIGVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhc3luYyBDbGVhckFzeW5jKGtleTogc3RyaW5nLCBpc01ENSA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBvYmplY3RTdG9yZSA9IGF3YWl0IFV0aWxzQ2FjaGUuZ2V0T2JqZWN0U3RvcmUoKTtcblxuICAgICAgaWYgKCFvYmplY3RTdG9yZSkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVxdWVzdCA9IG9iamVjdFN0b3JlLmRlbGV0ZShpc01ENSA/IGtleSA6IG1kNShrZXkpKTtcblxuICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH07XG4gICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuXG4gIHN0YXRpYyBDbGVhcihrZXk6IHN0cmluZykge1xuICAgIGlmIChrZXkuaW5jbHVkZXMoJ2tjLWNhbGxiYWNrLScpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuTG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgQ2xlYXJBbGxBc3luYygpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgb2JqZWN0U3RvcmUgPSBhd2FpdCBVdGlsc0NhY2hlLmdldE9iamVjdFN0b3JlKCk7XG5cbiAgICAgIGlmICghb2JqZWN0U3RvcmUpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdCA9IG9iamVjdFN0b3JlLmNsZWFyKCk7XG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ0RhdGFiYXNlIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH07XG5cbiAgICAgIHJlcXVlc3Qub25lcnJvciA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZGVsZXRpbmcgZGF0YWJhc2U6JywgKGV2ZW50LnRhcmdldCBhcyBJREJSZXF1ZXN0KS5lcnJvcik7XG4gICAgICAgIHJlamVjdCgoZXZlbnQudGFyZ2V0IGFzIElEQlJlcXVlc3QpLmVycm9yKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgQ2xlYXJBbGwoKSB7XG4gICAgaWYgKGlzRW1iZWRGcmFtZSgpKSB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICB0eXBlOiBVdGlsc0NhY2hlLnR5cGVLZXlDbGVhckxvY2FsU3RvcmFnZSxcbiAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICBpZEV2ZW50OiB0aGlzLmlkU2VydmljZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgVXRpbHNDb21tdW5pY2F0ZU1pY3JvLlBvc3RNZXNzYWdlVG9QYXJlbnQoZGF0YSk7XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBbLi4uVXRpbHNDYWNoZS5saXN0S2V5S2VlcFdoZW5DbGVhckFMbGxdO1xuICAgIE9iamVjdC5rZXlzKHRoaXMuTG9jYWxTdG9yYWdlKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoa2V5LmluY2x1ZGVzKCdrYy1jYWxsYmFjay0nKSkge1xuICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHN0b3JlcyA9IFV0aWxzQ2FjaGUuR2V0RGF0YUJ5S2V5cyhBcnJheS5mcm9tKGtleXMpKTtcblxuICAgIHRoaXMuTG9jYWxTdG9yYWdlLmNsZWFyKCk7XG5cbiAgICBVdGlsc0NhY2hlLlNldERhdGFCeUtleShzdG9yZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgR2V0RGF0YUJ5S2V5cyhrZXlzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgY29uc3Qgc3RvcmVzID0gbmV3IE1hcCgpO1xuXG4gICAga2V5cy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGtleS5pbmNsdWRlcygna2MtY2FsbGJhY2stJykpIHtcbiAgICAgICAgc3RvcmVzLnNldChrZXksIHRoaXMuTG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3RvcmVzLnNldChrZXksIFV0aWxzQ2FjaGUuR2V0KGtleSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0b3JlcztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIFNldERhdGFCeUtleShzdG9yZXM6IE1hcDxzdHJpbmcsIGFueT4pIHtcbiAgICBzdG9yZXMuZm9yRWFjaCgodmFsdWU6IGFueSwga2V5OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ2tjLWNhbGxiYWNrLScpKSB7XG4gICAgICAgIHRoaXMuTG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PT0gVXRpbHNDYWNoZS5sYW5ndWFnZUtleUNhY2hlKSB7XG4gICAgICAgIHJldHVybiBVdGlsc0NhY2hlLnNldExhbmcodmFsdWUpO1xuICAgICAgfVxuICAgICAgVXRpbHNDYWNoZS5TZXQoa2V5LCB2YWx1ZSwgVXRpbHNDYWNoZS5DQUNIRV9FWFBJUkVfTk9ORSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIERlbGV0ZUtleVN0YXJ0V2l0aEFzeW5jKGtleUNhY2hlU3RhcnRXaXRoOiBzdHJpbmcsIGlzS2V5TUQ1ID0gZmFsc2UpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IG9iamVjdFN0b3JlID0gYXdhaXQgVXRpbHNDYWNoZS5nZXRPYmplY3RTdG9yZSgpO1xuXG4gICAgICBpZiAoIW9iamVjdFN0b3JlKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHt9KTtcbiAgICAgIH1cblxuICAgICAgLy8gTOG6pXkgdOG6pXQgY+G6oyBjw6FjIGtleXMgdOG7qyBpbmRleFxuICAgICAgY29uc3QgcmVxdWVzdCA9IG9iamVjdFN0b3JlLmdldEFsbCgpO1xuXG4gICAgICBrZXlDYWNoZVN0YXJ0V2l0aCA9IGlzS2V5TUQ1ID8ga2V5Q2FjaGVTdGFydFdpdGggOiBtZDUoa2V5Q2FjaGVTdGFydFdpdGgpO1xuXG5cbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKGU6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gZS50YXJnZXQucmVzdWx0IGFzIEFycmF5PGFueT47XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoe30pO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS5mb3JFYWNoKG9iaiA9PiB7XG4gICAgICAgICAgaWYgKG9ialtVdGlsc0NhY2hlLml0ZW1JbmRleEJ5S2V5XS5zdGFydHNXaXRoKGtleUNhY2hlU3RhcnRXaXRoKSkge1xuICAgICAgICAgICAgVXRpbHNDYWNoZS5DbGVhckFzeW5jKG9ialtVdGlsc0NhY2hlLml0ZW1JbmRleEJ5S2V5XSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzb2x2ZSh7fSk7XG4gICAgICB9O1xuXG4gICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHt9KTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIERlbGV0ZUtleVN0YXJ0V2l0aChrZXlDYWNoZTogc3RyaW5nLCBpc01ENSA9IGZhbHNlKSB7XG4gICAga2V5Q2FjaGUgPSBpc01ENSA/IG1kNShrZXlDYWNoZSkgOiBrZXlDYWNoZTtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoVXRpbHNDYWNoZS5Mb2NhbFN0b3JhZ2UpO1xuXG4gICAgaWYgKCFrZXlzIHx8ICFrZXlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKGtleS5zdGFydHNXaXRoKGtleUNhY2hlKSkge1xuICAgICAgICB0aGlzLkNsZWFyKGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIERlbGV0ZURhdGFiYXNlSW5kZXhEQihkYk5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRiTmFtZSk7XG5cbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnRGF0YWJhc2UgZGVsZXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH07XG5cbiAgICAgIHJlcXVlc3Qub25lcnJvciA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZGVsZXRpbmcgZGF0YWJhc2U6JywgKGV2ZW50LnRhcmdldCBhcyBJREJSZXF1ZXN0KS5lcnJvcik7XG4gICAgICAgIHJlamVjdCgoZXZlbnQudGFyZ2V0IGFzIElEQlJlcXVlc3QpLmVycm9yKTtcbiAgICAgIH07XG5cbiAgICAgIHJlcXVlc3Qub25ibG9ja2VkID0gKCkgPT4ge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0RlbGV0ZSByZXF1ZXN0IGlzIGJsb2NrZWQnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
380
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4Q0FBOEM7QUFDOUMsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUU5QixNQUFNLE9BQU8sVUFBVTtJQUNkLE1BQU0sQ0FBVSx5QkFBeUIsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ25ELE1BQU0sQ0FBVSxpQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2QyxNQUFNLENBQVUsU0FBUyxHQUFHLElBQUksRUFBRSxDQUFDO0lBQ25DLE1BQU0sQ0FBQyx3QkFBd0IsR0FBRyxtQ0FBbUMsQ0FBQztJQUVyRSxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUM7SUFDbkQsTUFBTSxDQUFDLHdCQUF3QixHQUFHLEtBQUssRUFBVSxDQUFDO0lBQ2xELE1BQU0sQ0FBQyxVQUFVLENBQVc7SUFDNUIsTUFBTSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQVMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckUsTUFBTSxDQUFDLE9BQU8sQ0FBNkI7SUFD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QUErQixDQUFDLENBQUM7Z0JBQzdDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQixDQUFDLENBQUM7WUFFRixPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7Z0JBQ2pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzlFLE1BQU0sQ0FBRSxLQUFLLENBQUMsTUFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxDQUFDLENBQUM7WUFFRixPQUFPLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRTtnQkFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQzVDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWFzeW5jLXByb21pc2UtZXhlY3V0b3IgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cblxuaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVdGlsc0NvbW11bmljYXRlTWljcm8gfSBmcm9tICcuL2NvbW11bmljYXRlLW1pY3JvJztcbmltcG9ydCB7IGRlY3J5cHQsIGVuY3J5cHQsIG1kNSB9IGZyb20gJy4vY3J5cHRvJztcbmltcG9ydCB7IGdldFBsYXRGcm9tQnJvd3NlciB9IGZyb20gJy4vZG9tJztcbmltcG9ydCB7IGlzRW1iZWRGcmFtZSB9IGZyb20gJy4vZnVuY3Rpb24tY2hlY2stZW1iZWQtZnJhbWUnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgVXRpbHNMYW5ndWFnZUNvbnN0YW50cyB9IGZyb20gJy4vbGFuZ3VhZ2UnO1xuaW1wb3J0IHsgdXVpZCB9IGZyb20gJy4vdXVpZCc7XG5cbmV4cG9ydCBjbGFzcyBVdGlsc0NhY2hlIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDQUNIRV9FWFBJUkVfVElNRV9ERUZBVUxUID0gNSAqIDYwO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENBQ0hFX0VYUElSRV9OT05FID0gLTE7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgaWRTZXJ2aWNlID0gdXVpZCgpO1xuICBwdWJsaWMgc3RhdGljIHR5cGVLZXlDbGVhckxvY2FsU3RvcmFnZSA9ICdMSUJTX1VJX0NMRUFSX0xPQ0FMX1NUT1JBR0VfRVZFTlQnO1xuXG4gIHByaXZhdGUgc3RhdGljIGxhbmd1YWdlS2V5Q2FjaGUgPSAnU1IzeFFLeEhnZmZpQ2V2UFFScmFsZyc7XG4gIHByaXZhdGUgc3RhdGljIGxpc3RLZXlLZWVwV2hlbkNsZWFyQUxsbCA9IEFycmF5PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgaW5pdGRFdmVudD86IGJvb2xlYW47XG4gIHByaXZhdGUgc3RhdGljIGxhbmd1YWdlID0gc2lnbmFsPHN0cmluZz4oVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5kZWZhdWx0TGFuZyk7XG4gIHByaXZhdGUgc3RhdGljIHN0b3JhZ2U6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9O1xuICBwcml2YXRlIHN0YXRpYyBkYk5hbWUgPSAnbGlicy11aS1jYWNoZSc7XG4gIHByaXZhdGUgc3RhdGljIGl0ZW1JbmRleEJ5S2V5ID0gJ2tleSc7XG4gIHByaXZhdGUgc3RhdGljIGRiVmVyc2lvbiA9IDE7XG4gIHByaXZhdGUgc3RhdGljIGRiOiBJREJEYXRhYmFzZSB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyBzdGF0aWMgaW5pdChjb25maWc6IHsgaW5kZXhlZERCTmFtZT86IHN0cmluZywgbGFuZ3VhZ2VLZXlDYWNoZT86IHN0cmluZywgdHlwZUtleUNsZWFyTG9jYWxTdG9yYWdlPzogc3RyaW5nLCBsaXN0S2V5S2VlcFdoZW5DbGVhckFsbD86IEFycmF5PHN0cmluZz4gfSkge1xuICAgIGlmIChVdGlsc0NhY2hlLmluaXRkRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgVXRpbHNDYWNoZS5pbml0ZEV2ZW50ID0gdHJ1ZTtcbiAgICBpZiAoY29uZmlnLmluZGV4ZWREQk5hbWUpIHtcbiAgICAgIFV0aWxzQ2FjaGUuZGJOYW1lID0gY29uZmlnLmluZGV4ZWREQk5hbWU7XG4gICAgfVxuICAgIGlmIChjb25maWcudHlwZUtleUNsZWFyTG9jYWxTdG9yYWdlKSB7XG4gICAgICBVdGlsc0NhY2hlLnR5cGVLZXlDbGVhckxvY2FsU3RvcmFnZSA9IGNvbmZpZy50eXBlS2V5Q2xlYXJMb2NhbFN0b3JhZ2U7XG4gICAgfVxuICAgIGlmIChjb25maWcubGlzdEtleUtlZXBXaGVuQ2xlYXJBbGwpIHtcbiAgICAgIFV0aWxzQ2FjaGUubGlzdEtleUtlZXBXaGVuQ2xlYXJBTGxsID0gY29uZmlnLmxpc3RLZXlLZWVwV2hlbkNsZWFyQWxsO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmxhbmd1YWdlS2V5Q2FjaGUpIHtcbiAgICAgIFV0aWxzQ2FjaGUubGFuZ3VhZ2VLZXlDYWNoZSA9IGNvbmZpZy5sYW5ndWFnZUtleUNhY2hlO1xuICAgIH1cbiAgICB0aGlzLmxhbmd1YWdlLnNldChVdGlsc0NhY2hlLkdldChVdGlsc0NhY2hlLmxhbmd1YWdlS2V5Q2FjaGUsIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuZGVmYXVsdExhbmcpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgc2V0TGFuZyhsYW5nOiBzdHJpbmcpIHtcbiAgICBpZiAobGFuZyAhPT0gVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5WSSAmJiBsYW5nICE9PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLkVOKSB7XG4gICAgICB0aHJvdyBFcnJvcignTGFuZ3VhZ2Ugc3VwcG9ydCB2aSB8IGVuJyk7XG4gICAgfVxuICAgIFV0aWxzQ2FjaGUubGFuZ3VhZ2Uuc2V0KGxhbmcpO1xuICAgIFV0aWxzQ2FjaGUuU2V0KFV0aWxzQ2FjaGUubGFuZ3VhZ2VLZXlDYWNoZSwgbGFuZywgVXRpbHNDYWNoZS5DQUNIRV9FWFBJUkVfTk9ORSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldExhbmcoKSB7XG4gICAgcmV0dXJuIFV0aWxzQ2FjaGUubGFuZ3VhZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG9wZW5EQigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oVXRpbHNDYWNoZS5kYk5hbWUsIFV0aWxzQ2FjaGUuZGJWZXJzaW9uKTtcblxuICAgICAgcmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoZXZlbnQ6IElEQlZlcnNpb25DaGFuZ2VFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBkYiA9IChldmVudC50YXJnZXQgYXMgSURCT3BlbkRCUmVxdWVzdCkucmVzdWx0O1xuXG4gICAgICAgIGlmICghZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhVdGlsc0NhY2hlLmRiTmFtZSkpIHtcbiAgICAgICAgICBjb25zdCBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKFV0aWxzQ2FjaGUuZGJOYW1lLCB7IGtleVBhdGg6IFV0aWxzQ2FjaGUuaXRlbUluZGV4QnlLZXksIGF1dG9JbmNyZW1lbnQ6IHRydWUgfSk7XG5cbiAgICAgICAgICBvYmplY3RTdG9yZS5jcmVhdGVJbmRleChVdGlsc0NhY2hlLml0ZW1JbmRleEJ5S2V5LCBVdGlsc0NhY2hlLml0ZW1JbmRleEJ5S2V5LCB7IHVuaXF1ZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgIFV0aWxzQ2FjaGUuZGIgPSByZXF1ZXN0LnJlc3VsdDtcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH07XG5cbiAgICAgIHJlcXVlc3Qub25lcnJvciA9IChldmVudCkgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBvcGVuaW5nIEluZGV4ZWREQjonLCBldmVudCk7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIGdldE9iamVjdFN0b3JlKCkge1xuICAgIGlmICghVXRpbHNDYWNoZS5kYikge1xuICAgICAgYXdhaXQgVXRpbHNDYWNoZS5vcGVuREIoKTtcbiAgICB9XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBVdGlsc0NhY2hlLmRiPy50cmFuc2FjdGlvbihbVXRpbHNDYWNoZS5kYk5hbWVdLCAncmVhZHdyaXRlJyk7XG4gICAgaWYgKCF0cmFuc2FjdGlvbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKFV0aWxzQ2FjaGUuZGJOYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldCBMb2NhbFN0b3JhZ2UoKTogYW55IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cubG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb25zdCBPUyA9IGdldFBsYXRGcm9tQnJvd3NlcigpO1xuXG4gICAgICAgIGlmIChPUy5pbmNsdWRlcygnU2FmYXJpJykgJiYgcGFyc2VGbG9hdChPUy5zcGxpdCgnICcpLnBvcCgpIHx8ICcwJykgPj0gMTYpIHtcblxuICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsU3RvcmFnZUZha2VPblNhZmFyaSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxTdG9yYWdlRmFrZSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbFN0b3JhZ2VGYWtlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0TG9jYWxTdG9yYWdlRmFrZU9uU2FmYXJpKCkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93LmxvY2FsU3RvcmFnZSAhPT0gJ3VuZGVmaW5lZCcgJiYgIVV0aWxzQ2FjaGUuc3RvcmFnZSAmJiBPYmplY3Qua2V5cyhsb2NhbFN0b3JhZ2UpLmxlbmd0aCkge1xuICAgICAgdGhpcy5zdG9yYWdlID0geyAuLi5sb2NhbFN0b3JhZ2UgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2V0SXRlbTogKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xuICAgICAgICB0aGlzLnN0b3JhZ2Vba2V5XSA9IHZhbHVlO1xuICAgICAgfSxcbiAgICAgIGdldEl0ZW06IChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG5cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnN0b3JhZ2UgfHwgaXNOaWwodGhpcy5zdG9yYWdlW2tleV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHRoaXMuc3RvcmFnZVtrZXldIGFzIHN0cmluZyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZT8uW2tleV07XG4gICAgICB9LFxuICAgICAgcmVtb3ZlSXRlbTogKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnN0b3JhZ2U/LltrZXldO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgfSxcbiAgICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmFnZSA9IHt9O1xuICAgICAgICBsb2NhbFN0b3JhZ2UuY2xlYXIoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0TG9jYWxTdG9yYWdlRmFrZSgpIHtcbiAgICBpZiAoIVV0aWxzQ2FjaGUuc3RvcmFnZSkge1xuICAgICAgdGhpcy5zdG9yYWdlID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNldEl0ZW06IChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHtcbiAgICAgICAgdGhpcy5zdG9yYWdlW2tleV0gPSB2YWx1ZTtcbiAgICAgIH0sXG4gICAgICBnZXRJdGVtOiAoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZT8uW2tleV07XG4gICAgICB9LFxuICAgICAgcmVtb3ZlSXRlbTogKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnN0b3JhZ2U/LltrZXldO1xuICAgICAgfSxcbiAgICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmFnZSA9IHt9O1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFzeW5jIEdldEFzeW5jPFQgPSBhbnk+KGtleTogc3RyaW5nLCBkZWZhdWx0X3ZhbHVlPzogYW55LCBpc0tleU1ENSA9IGZhbHNlKTogUHJvbWlzZTxUPiB7XG4gICAga2V5ID0gaXNLZXlNRDUgPyBrZXkgOiBtZDUoa2V5KTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUPihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBvYmplY3RTdG9yZSA9IGF3YWl0IFV0aWxzQ2FjaGUuZ2V0T2JqZWN0U3RvcmUoKTtcblxuICAgICAgaWYgKCFvYmplY3RTdG9yZSkge1xuXG4gICAgICAgIHJldHVybiByZXNvbHZlKGRlZmF1bHRfdmFsdWUpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVxdWVzdCA9IG9iamVjdFN0b3JlLmdldChrZXkpO1xuXG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0LnJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKGRlZmF1bHRfdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRlY3J5cHQocmVxdWVzdC5yZXN1bHQudmFsdWUpKTtcblxuICAgICAgICBpZiAoZGF0YS5leHBpcmUgPT09IFV0aWxzQ2FjaGUuQ0FDSEVfRVhQSVJFX05PTkUpIHtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZShkYXRhLmpzb24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRNaWxsaXNlY29uZCA9IChuZXcgRGF0ZSgpLnZhbHVlT2YoKSAvIDEwMDApO1xuXG4gICAgICAgIGlmIChkYXRhLmV4cGlyZSA8IGN1cnJlbnRNaWxsaXNlY29uZCkge1xuXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoZGVmYXVsdF92YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzb2x2ZShkYXRhLmpzb24pO1xuICAgICAgfTtcblxuICAgICAgcmVxdWVzdC5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICByZWplY3QocmVxdWVzdC5lcnJvcik7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBHZXQ8VCA9IGFueT4oa2V5OiBzdHJpbmcsIGRlZmF1bHRfdmFsdWU/OiBhbnkpOiBUIHsgLy8gc3VwcG9ydCBjaG8gbmjhu69uZyBmaWxlIGtow7RuZyB0aOG7gyBpbmplY3QgVXRpbHNDYWNoZVxuICAgIGlmICgha2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5HZXREZWZhdWx0VmFsdWVCeVNwZWNpZmljS2V5KGtleSwgZGVmYXVsdF92YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IGNhY2hlZERhdGEgPSB0aGlzLkxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG5cbiAgICBpZiAoIWNhY2hlZERhdGEpIHtcbiAgICAgIHJldHVybiB0aGlzLkdldERlZmF1bHRWYWx1ZUJ5U3BlY2lmaWNLZXkoa2V5LCBkZWZhdWx0X3ZhbHVlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRlY3J5cHQoY2FjaGVkRGF0YSkpO1xuXG4gICAgICBpZiAoZGF0YS5leHBpcmUgPT09IFV0aWxzQ2FjaGUuQ0FDSEVfRVhQSVJFX05PTkUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGEudmFsdWUgPz8gZGVmYXVsdF92YWx1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRNaWxsaXNlY29uZCA9IChuZXcgRGF0ZSgpLnZhbHVlT2YoKSAvIDEwMDApO1xuXG4gICAgICBpZiAoZGF0YS5leHBpcmUgPCBjdXJyZW50TWlsbGlzZWNvbmQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuR2V0RGVmYXVsdFZhbHVlQnlTcGVjaWZpY0tleShrZXksIGRlZmF1bHRfdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YS52YWx1ZTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG5cbiAgICAgIHJldHVybiB0aGlzLkdldERlZmF1bHRWYWx1ZUJ5U3BlY2lmaWNLZXkoa2V5LCBkZWZhdWx0X3ZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIEdldERlZmF1bHRWYWx1ZUJ5U3BlY2lmaWNLZXkoa2V5OiBzdHJpbmcsIGRlZmF1bHRfdmFsdWU6IGFueSkge1xuICAgIHJldHVybiBkZWZhdWx0X3ZhbHVlO1xuXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFzeW5jIFNldEFzeW5jPFQgPSBhbnk+KGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBleHBpcmVUaW1lQnlTZWNvbmQgPSBVdGlsc0NhY2hlLkNBQ0hFX0VYUElSRV9USU1FX0RFRkFVTFQsIGlzS2V5TUQ1ID0gZmFsc2UpOiBQcm9taXNlPFQ+IHsgLy8gc3VwcG9ydCBpbmplY3QgVXRpbHNDYWNoZVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUPihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBvYmplY3RTdG9yZSA9IGF3YWl0IFV0aWxzQ2FjaGUuZ2V0T2JqZWN0U3RvcmUoKTtcblxuICAgICAga2V5ID0gaXNLZXlNRDUgPyBrZXkgOiBtZDUoa2V5KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRNaWxsaXNlY29uZCA9IGV4cGlyZVRpbWVCeVNlY29uZCA9PT0gVXRpbHNDYWNoZS5DQUNIRV9FWFBJUkVfTk9ORSA/IFV0aWxzQ2FjaGUuQ0FDSEVfRVhQSVJFX05PTkUgOiAobmV3IERhdGUoKS52YWx1ZU9mKCkgLyAxMDAwKSArIGV4cGlyZVRpbWVCeVNlY29uZDtcbiAgICAgICAgY29uc3QgZGF0YTogYW55ID0ge1xuICAgICAgICAgIHZhbHVlOiBlbmNyeXB0KEpTT04uc3RyaW5naWZ5KHsganNvbjogdmFsdWUsIGV4cGlyZTogY3VycmVudE1pbGxpc2Vjb25kIH0pKSxcbiAgICAgICAgfTtcbiAgICAgICAgZGF0YVtVdGlsc0NhY2hlLml0ZW1JbmRleEJ5S2V5XSA9IGtleTtcblxuICAgICAgICBpZiAoIW9iamVjdFN0b3JlKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ0NhbiBub3Qgb3BlbiBvYmplY3Qgc3RvcmUnKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IG9iamVjdFN0b3JlPy5wdXQoZGF0YSk7XG4gICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUocmVxdWVzdC5yZXN1bHQgYXMgYW55KTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KHJlcXVlc3QuZXJyb3IpO1xuICAgICAgICB9O1xuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICBzdGF0aWMgU2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBleHBpcmVUaW1lQnlTZWNvbmQgPSBVdGlsc0NhY2hlLkNBQ0hFX0VYUElSRV9USU1FX0RFRkFVTFQpOiBib29sZWFuIHsgLy8gc3VwcG9ydCBjaG8gbmjhu69uZyBmaWxlIGtow7RuZyBpbmplY3QgVXRpbHNDYWNoZVxuICAgIGNvbnN0IGN1cnJlbnRNaWxsaXNlY29uZCA9IGV4cGlyZVRpbWVCeVNlY29uZCA9PT0gVXRpbHNDYWNoZS5DQUNIRV9FWFBJUkVfTk9ORSA/IFV0aWxzQ2FjaGUuQ0FDSEVfRVhQSVJFX05PTkUgOiAobmV3IERhdGUoKS52YWx1ZU9mKCkgLyAxMDAwKSArIGV4cGlyZVRpbWVCeVNlY29uZDtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZXhwaXJlOiBjdXJyZW50TWlsbGlzZWNvbmRcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuTG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBlbmNyeXB0KEpTT04uc3RyaW5naWZ5KGRhdGEpKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgQ2xlYXJBc3luYyhrZXk6IHN0cmluZywgaXNNRDUgPSBmYWxzZSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3Qgb2JqZWN0U3RvcmUgPSBhd2FpdCBVdGlsc0NhY2hlLmdldE9iamVjdFN0b3JlKCk7XG5cbiAgICAgIGlmICghb2JqZWN0U3RvcmUpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBvYmplY3RTdG9yZS5kZWxldGUoaXNNRDUgPyBrZXkgOiBtZDUoa2V5KSk7XG5cbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9O1xuICAgICAgcmVxdWVzdC5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cblxuICBzdGF0aWMgQ2xlYXIoa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoa2V5LmluY2x1ZGVzKCdrYy1jYWxsYmFjay0nKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLkxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIENsZWFyQWxsQXN5bmMoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IG9iamVjdFN0b3JlID0gYXdhaXQgVXRpbHNDYWNoZS5nZXRPYmplY3RTdG9yZSgpO1xuXG4gICAgICBpZiAoIW9iamVjdFN0b3JlKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBvYmplY3RTdG9yZS5jbGVhcigpO1xuICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdEYXRhYmFzZSBkZWxldGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9O1xuXG4gICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRlbGV0aW5nIGRhdGFiYXNlOicsIChldmVudC50YXJnZXQgYXMgSURCUmVxdWVzdCkuZXJyb3IpO1xuICAgICAgICByZWplY3QoKGV2ZW50LnRhcmdldCBhcyBJREJSZXF1ZXN0KS5lcnJvcik7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIENsZWFyQWxsKCkge1xuICAgIGlmIChpc0VtYmVkRnJhbWUoKSkge1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgdHlwZTogVXRpbHNDYWNoZS50eXBlS2V5Q2xlYXJMb2NhbFN0b3JhZ2UsXG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgaWRFdmVudDogdGhpcy5pZFNlcnZpY2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIFV0aWxzQ29tbXVuaWNhdGVNaWNyby5Qb3N0TWVzc2FnZVRvUGFyZW50KGRhdGEpO1xuICAgIH1cbiAgICBjb25zdCBrZXlzID0gWy4uLlV0aWxzQ2FjaGUubGlzdEtleUtlZXBXaGVuQ2xlYXJBTGxsXTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLkxvY2FsU3RvcmFnZSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKGtleS5pbmNsdWRlcygna2MtY2FsbGJhY2stJykpIHtcbiAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzdG9yZXMgPSBVdGlsc0NhY2hlLkdldERhdGFCeUtleXMoQXJyYXkuZnJvbShrZXlzKSk7XG5cbiAgICB0aGlzLkxvY2FsU3RvcmFnZS5jbGVhcigpO1xuXG4gICAgVXRpbHNDYWNoZS5TZXREYXRhQnlLZXkoc3RvcmVzKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIEdldERhdGFCeUtleXMoa2V5czogQXJyYXk8c3RyaW5nPikge1xuICAgIGNvbnN0IHN0b3JlcyA9IG5ldyBNYXAoKTtcblxuICAgIGtleXMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ2tjLWNhbGxiYWNrLScpKSB7XG4gICAgICAgIHN0b3Jlcy5zZXQoa2V5LCB0aGlzLkxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN0b3Jlcy5zZXQoa2V5LCBVdGlsc0NhY2hlLkdldChrZXkpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzdG9yZXM7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBTZXREYXRhQnlLZXkoc3RvcmVzOiBNYXA8c3RyaW5nLCBhbnk+KSB7XG4gICAgc3RvcmVzLmZvckVhY2goKHZhbHVlOiBhbnksIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoa2V5LmluY2x1ZGVzKCdrYy1jYWxsYmFjay0nKSkge1xuICAgICAgICB0aGlzLkxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09IFV0aWxzQ2FjaGUubGFuZ3VhZ2VLZXlDYWNoZSkge1xuICAgICAgICByZXR1cm4gVXRpbHNDYWNoZS5zZXRMYW5nKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIFV0aWxzQ2FjaGUuU2V0KGtleSwgdmFsdWUsIFV0aWxzQ2FjaGUuQ0FDSEVfRVhQSVJFX05PTkUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBEZWxldGVLZXlTdGFydFdpdGhBc3luYyhrZXlDYWNoZVN0YXJ0V2l0aDogc3RyaW5nLCBpc0tleU1ENSA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBvYmplY3RTdG9yZSA9IGF3YWl0IFV0aWxzQ2FjaGUuZ2V0T2JqZWN0U3RvcmUoKTtcblxuICAgICAgaWYgKCFvYmplY3RTdG9yZSkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSh7fSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEzhuqV5IHThuqV0IGPhuqMgY8OhYyBrZXlzIHThu6sgaW5kZXhcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBvYmplY3RTdG9yZS5nZXRBbGwoKTtcblxuICAgICAga2V5Q2FjaGVTdGFydFdpdGggPSBpc0tleU1ENSA/IGtleUNhY2hlU3RhcnRXaXRoIDogbWQ1KGtleUNhY2hlU3RhcnRXaXRoKTtcblxuXG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGUudGFyZ2V0LnJlc3VsdCBhcyBBcnJheTxhbnk+O1xuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKHt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGEuZm9yRWFjaChvYmogPT4ge1xuICAgICAgICAgIGlmIChvYmpbVXRpbHNDYWNoZS5pdGVtSW5kZXhCeUtleV0uc3RhcnRzV2l0aChrZXlDYWNoZVN0YXJ0V2l0aCkpIHtcbiAgICAgICAgICAgIFV0aWxzQ2FjaGUuQ2xlYXJBc3luYyhvYmpbVXRpbHNDYWNoZS5pdGVtSW5kZXhCeUtleV0sIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc29sdmUoe30pO1xuICAgICAgfTtcblxuICAgICAgcmVxdWVzdC5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSh7fSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBEZWxldGVLZXlTdGFydFdpdGgoa2V5Q2FjaGU6IHN0cmluZywgaXNNRDUgPSBmYWxzZSkge1xuICAgIGtleUNhY2hlID0gaXNNRDUgPyBtZDUoa2V5Q2FjaGUpIDoga2V5Q2FjaGU7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKFV0aWxzQ2FjaGUuTG9jYWxTdG9yYWdlKTtcblxuICAgIGlmICgha2V5cyB8fCAha2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChrZXlDYWNoZSkpIHtcbiAgICAgICAgdGhpcy5DbGVhcihrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBEZWxldGVEYXRhYmFzZUluZGV4REIoZGJOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYk5hbWUpO1xuXG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ0RhdGFiYXNlIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRlbGV0aW5nIGRhdGFiYXNlOicsIChldmVudC50YXJnZXQgYXMgSURCUmVxdWVzdCkuZXJyb3IpO1xuICAgICAgICByZWplY3QoKGV2ZW50LnRhcmdldCBhcyBJREJSZXF1ZXN0KS5lcnJvcik7XG4gICAgICB9O1xuXG4gICAgICByZXF1ZXN0Lm9uYmxvY2tlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKCdEZWxldGUgcmVxdWVzdCBpcyBibG9ja2VkJyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -122,6 +122,9 @@ export class UtilsCommunicateMicro {
|
|
|
122
122
|
if (!Array.isArray(messageType) || !messageType.length) {
|
|
123
123
|
throw new Error('message type empty');
|
|
124
124
|
}
|
|
125
|
+
if (messageType.length === 1) {
|
|
126
|
+
return this.GetMessage(messageType[0]);
|
|
127
|
+
}
|
|
125
128
|
const types = messageType.sort().join(';');
|
|
126
129
|
let sub = this.subs.get(types);
|
|
127
130
|
if (sub) {
|
|
@@ -140,4 +143,4 @@ export class UtilsCommunicateMicro {
|
|
|
140
143
|
});
|
|
141
144
|
}
|
|
142
145
|
}
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbXVuaWNhdGUtbWljcm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9jb21tdW5pY2F0ZS1taWNyby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNyQyxNQUFNLE9BQU8sOEJBQThCO0lBQ2xDLE1BQU0sQ0FBQyxpQkFBaUIsR0FBRyxxQkFBcUIsQ0FBQzs7QUFHMUQsTUFBTSxPQUFPLHFCQUFxQjtJQUN6QixNQUFNLENBQVUsV0FBVyxHQUFHLDJCQUEyQixDQUFDO0lBQ3pELE1BQU0sQ0FBVSxtQkFBbUIsR0FBRyx5QkFBeUIsQ0FBQztJQUNoRSxNQUFNLENBQUMsVUFBVSxDQUFXO0lBQzVCLE1BQU0sQ0FBQyxJQUFJLEdBQXVDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDNUQsTUFBTSxDQUFDLGFBQWEsR0FBMEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUU3RCxNQUFNLENBQUMsU0FBUyxDQUFDLGFBQXFCLEVBQUUsU0FBd0I7UUFDckUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsbUJBQW1C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LWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgU3ViamVjdCwgZmlsdGVyLCBmcm9tRXZlbnQsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBkZWNyeXB0LCBlbmNyeXB0IH0gZnJvbSBcIi4vY3J5cHRvXCI7XG5pbXBvcnQgeyBkZWNyeXB0M3JkLCBlbmNyeXB0M3JkIH0gZnJvbSBcIi4vY3J5cHRvLTNyZFwiO1xuaW1wb3J0IHsgaXNFbWJlZEZyYW1lIH0gZnJvbSBcIi4vZnVuY3Rpb24tY2hlY2stZW1iZWQtZnJhbWVcIjtcbmltcG9ydCB7IFV0aWxzQ2FjaGUgfSBmcm9tIFwiLi9jYWNoZVwiO1xuZXhwb3J0IGNsYXNzIFV0aWxzQ29tbXVuaWNhdGVNaWNyb0tleUdsb2JhbCB7XG4gIHB1YmxpYyBzdGF0aWMgS0VZX01FU1NBR0VfTU9EQUwgPSAnTElCU19VSV9NT0RFTF9FVkVOVCc7XG59XG5cbmV4cG9ydCBjbGFzcyBVdGlsc0NvbW11bmljYXRlTWljcm8ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBSRUZJWF9UWVBFID0gJzNSRF9JTlRFR1JBVEVfTUlDUk9fU0lURV8nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBLRVlfR0VUX0FMTF9NRVNTQUdFID0gJ01JQ1JPX1NJVEVTX0FMTF9NRVNTQUdFJztcbiAgcHJpdmF0ZSBzdGF0aWMgaW5pdGRFdmVudD86IGJvb2xlYW47XG4gIHByaXZhdGUgc3RhdGljIHN1YnM6IE1hcDxzdHJpbmcsIFN1YmplY3Q8TWVzc2FnZUV2ZW50Pj4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgc3RhdGljIGFsbE1lc3NhZ2VTdWI6IFN1YmplY3Q8TWVzc2FnZUV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHVibGljIHN0YXRpYyBpbml0RXZlbnQoY3VycmVudFdpbmRvdzogV2luZG93LCBvbkRlc3Ryb3k6IFN1YmplY3Q8dm9pZD4pIHtcbiAgICBpZiAodGhpcy5pbml0ZEV2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaW5pdGRFdmVudCA9IHRydWU7XG4gICAgaWYgKCF0aGlzLnN1YnMuZ2V0KFV0aWxzQ29tbXVuaWNhdGVNaWNyby5LRVlfR0VUX0FMTF9NRVNTQUdFKSkge1xuICAgICAgdGhpcy5zdWJzLnNldChVdGlsc0NvbW11bmljYXRlTWljcm8uS0VZX0dFVF9BTExfTUVTU0FHRSwgVXRpbHNDb21tdW5pY2F0ZU1pY3JvLmFsbE1lc3NhZ2VTdWIpO1xuICAgIH1cblxuICAgIGZyb21FdmVudDxNZXNzYWdlRXZlbnQ+KGN1cnJlbnRXaW5kb3csICdtZXNzYWdlJykucGlwZSh0YWtlVW50aWwob25EZXN0cm95KSkuc3Vic2NyaWJlKGUgPT4ge1xuICAgICAgY29uc3QgZXZlbnQgPSB7IGRhdGE6IHsgLi4uZS5kYXRhIH0gfSBhcyBNZXNzYWdlRXZlbnQ7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBldmVudC5kYXRhO1xuICAgICAgY29uc3QgdHlwZSA9IGRhdGEudHlwZTtcblxuICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbE1lc3NhZ2VTdWIubmV4dChldmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWIgPSBVdGlsc0NvbW11bmljYXRlTWljcm8uR2V0TWVzc2FnZSh0eXBlKTtcblxuICAgICAgaWYgKCF0eXBlIHx8ICFkYXRhLnJlc3BvbnNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlLmluY2x1ZGVzKFV0aWxzQ29tbXVuaWNhdGVNaWNyby5QUkVGSVhfVFlQRSkpIHtcblxuICAgICAgICAgIGRhdGEucmVzcG9uc2UgPSBKU09OLnBhcnNlKGRlY3J5cHQzcmQoZGF0YS5yZXNwb25zZSkpO1xuICAgICAgICAgIHN1Yi5uZXh0KGV2ZW50KTtcbiAgICAgICAgICB0aGlzLmFsbE1lc3NhZ2VTdWIubmV4dChldmVudCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5yZXNwb25zZSA9IEpTT04ucGFyc2UoZGVjcnlwdChkYXRhLnJlc3BvbnNlKSk7XG4gICAgICAgIHN1Yi5uZXh0KGV2ZW50KTtcbiAgICAgICAgdGhpcy5hbGxNZXNzYWdlU3ViLm5leHQoZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgICBzdWIubmV4dChldmVudCk7XG4gICAgICAgIHRoaXMuYWxsTWVzc2FnZVN1Yi5uZXh0KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFV0aWxzQ29tbXVuaWNhdGVNaWNyby5HZXRNZXNzYWdlKFV0aWxzQ2FjaGUudHlwZUtleUNsZWFyTG9jYWxTdG9yYWdlKS5waXBlKGZpbHRlcihlID0+IGUuZGF0YS5yZXNwb25zZSAhPT0gVXRpbHNDYWNoZS5pZFNlcnZpY2UpLCB0YWtlVW50aWwob25EZXN0cm95KSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdjbGVhciBhbGwgY2FjaGUgYnkgZXZlbnQnKTtcbiAgICAgIFV0aWxzQ2FjaGUuQ2xlYXJBbGwoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBQb3N0TWVzc2FnZVRvUGFyZW50KGRhdGE6IGFueSkge1xuICAgIGRhdGEgPSB0aGlzLmNvbnZlcnREYXRhKGRhdGEpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaXNFbWJlZEZyYW1lKCkpIHtcbiAgICAgICAgd2luZG93Py5wYXJlbnQ/LnBvc3RNZXNzYWdlKGRhdGEsIFwiKlwiKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdz8udG9wPy5wb3N0TWVzc2FnZShkYXRhLCBcIipcIik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgUG9zdE1lc3NhZ2VUb0NoaWxkcmVuKGRhdGE6IGFueSkge1xuICAgIGRhdGEgPSB0aGlzLmNvbnZlcnREYXRhKGRhdGEpO1xuICAgIGNvbnN0IGlmcmFtZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiaWZyYW1lXCIpO1xuXG4gICAgQXJyYXkuZnJvbShpZnJhbWVzKS5mb3JFYWNoKGlmcmFtZSA9PiB7XG4gICAgICBpZnJhbWU/LmNvbnRlbnRXaW5kb3c/LnBvc3RNZXNzYWdlKGRhdGEsICcqJyk7XG4gICAgfSk7XG5cbiAgfVxuXG4gIHN0YXRpYyBQb3N0TWVzc2FnZVRvT3BlbmVyKGRhdGE6IGFueSkge1xuICAgIGlmICghd2luZG93Lm9wZW5lcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5jb252ZXJ0RGF0YShkYXRhKTtcblxuICAgIHdpbmRvdy5vcGVuZXIucG9zdE1lc3NhZ2UoZGF0YSwgJyonKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNvbnZlcnREYXRhKGRhdGE6IGFueSkge1xuICAgIGlmICghZGF0YSB8fCAhZGF0YS50eXBlIHx8ICFkYXRhLnJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgZGF0YSA9IHsgLi4uZGF0YSB9O1xuICAgIGNvbnN0IHR5cGUgPSBkYXRhLnR5cGU7XG5cbiAgICBpZiAodHlwZS5pbmNsdWRlcyh0aGlzLlBSRUZJWF9UWVBFKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgSlNPTi5wYXJzZShkZWNyeXB0M3JkKGRhdGEucmVzcG9uc2UpKTtcblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgZGF0YS5yZXNwb25zZSA9IGVuY3J5cHQzcmQoSlNPTi5zdHJpbmdpZnkoZGF0YS5yZXNwb25zZSkpO1xuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBKU09OLnBhcnNlKGRlY3J5cHQoZGF0YS5yZXNwb25zZSkpO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICBkYXRhLnJlc3BvbnNlID0gZW5jcnlwdChKU09OLnN0cmluZ2lmeShkYXRhLnJlc3BvbnNlKSk7XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBHZXRNZXNzYWdlKG1lc3NhZ2VUeXBlOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+KTogU3ViamVjdDxNZXNzYWdlRXZlbnQ+IHtcbiAgICBpZiAoIXRoaXMuaW5pdGRFdmVudCkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJjaMawYSBraMahaSB04bqhbyBow6BtIGzhuq9uZyBuZ2hlIHPhu7Ega2nhu4duLCBn4buNaSBVdGlsc0NvbW11bmljYXRlTWljcm8uaW5pdEV2ZW50KHdpbmRvdykgdOG6oWkgcm9vdCBjb21wb25lbnRcIilcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlVHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGxldCBzdWIgPSB0aGlzLnN1YnMuZ2V0KG1lc3NhZ2VUeXBlKTtcblxuICAgICAgaWYgKCFzdWIpIHtcbiAgICAgICAgc3ViID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgdGhpcy5zdWJzLnNldChtZXNzYWdlVHlwZSwgc3ViKTtcblxuICAgICAgICByZXR1cm4gc3ViO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3ViO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZVR5cGUpIHx8ICFtZXNzYWdlVHlwZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWVzc2FnZSB0eXBlIGVtcHR5Jyk7XG4gICAgfVxuICAgIGNvbnN0IHR5cGVzID0gbWVzc2FnZVR5cGUuc29ydCgpLmpvaW4oJzsnKTtcblxuICAgIGxldCBzdWIgPSB0aGlzLnN1YnMuZ2V0KHR5cGVzKTtcblxuICAgIGlmIChzdWIpIHtcbiAgICAgIHJldHVybiBzdWI7XG4gICAgfVxuXG4gICAgc3ViID0gbmV3IFN1YmplY3QoKTtcbiAgICB0aGlzLnN1YnMuc2V0KHR5cGVzLCBzdWIpO1xuICAgIHRoaXMuaW5pdFN1YmplY3Qoc3ViLCBtZXNzYWdlVHlwZSk7XG5cbiAgICByZXR1cm4gc3ViO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaW5pdFN1YmplY3Qoc3ViUm9vdDogU3ViamVjdDxNZXNzYWdlRXZlbnQ+LCBtZXNzYWdlVHlwZTogQXJyYXk8c3RyaW5nPikge1xuICAgIG1lc3NhZ2VUeXBlLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIHRoaXMuR2V0TWVzc2FnZShrZXkpLnN1YnNjcmliZShlID0+IHtcbiAgICAgICAgc3ViUm9vdC5uZXh0KGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbXVuaWNhdGUtbWljcm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9jb21tdW5pY2F0ZS1taWNyby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNyQyxNQUFNLE9BQU8sOEJBQThCO0lBQ2xDLE1BQU0sQ0FBQyxpQkFBaUIsR0FBRyxxQkFBcUIsQ0FBQzs7QUFHMUQsTUFBTSxPQUFPLHFCQUFxQjtJQUN6QixNQUFNLENBQVUsV0FBVyxHQUFHLDJCQUEyQixDQUFDO0lBQ3pELE1BQU0sQ0FBVSxtQkFBbUIsR0FBRyx5QkFBeUIsQ0FBQztJQUNoRSxNQUFNLENBQUMsVUFBVSxDQUFXO0lBQzVCLE1BQU0sQ0FBQyxJQUFJLEdBQXVDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDNUQsTUFBTSxDQUFDLGFBQWEsR0FBMEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUU3RCxNQUFNLENBQUMsU0FBUyxDQUFDLGFBQXFCLEVBQUUsU0FBd0I7UUFDckUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1lBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixFQUFFLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7UUFFRCxTQUFTLENBQWUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDekYsTUFBTSxLQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBa0IsQ0FBQztZQUV0RCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFFdkIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUNELE1BQU0sR0FBRyxHQUFHLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVuRCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM1QixPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQztnQkFDSCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztvQkFFckQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDdEQsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBRS9CLE9BQU87Z0JBQ1QsQ0FBQztnQkFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNuRCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuQixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3JLLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUN4QyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQVM7UUFDbEMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDO1lBQ0gsSUFBSSxZQUFZLEVBQUUsRUFBRSxDQUFDO2dCQUNuQixNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBRXZDLE9BQU87WUFDVCxDQUFDO1lBRUQsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFTO1FBQ3BDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVwRCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNuQyxNQUFNLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFFTCxDQUFDO0lBRUQsTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQVM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFTO1FBQ2xDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDbkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUV2QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDO2dCQUNILElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUV0QyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBRTFELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztRQUVILENBQUM7UUFDRCxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUVuQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUV2RCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUFtQztRQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sS0FBSyxDQUFDLHFHQUFxRyxDQUFDLENBQUE7UUFDcEgsQ0FBQztRQUNELElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDcEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFckMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNULEdBQUcsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBRWhDLE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQztZQUVELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZELE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUvQixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDO1FBRUQsR0FBRyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRW5DLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVPLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBOEIsRUFBRSxXQUEwQjtRQUNuRixXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNqQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgU3ViamVjdCwgZmlsdGVyLCBmcm9tRXZlbnQsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBkZWNyeXB0LCBlbmNyeXB0IH0gZnJvbSBcIi4vY3J5cHRvXCI7XG5pbXBvcnQgeyBkZWNyeXB0M3JkLCBlbmNyeXB0M3JkIH0gZnJvbSBcIi4vY3J5cHRvLTNyZFwiO1xuaW1wb3J0IHsgaXNFbWJlZEZyYW1lIH0gZnJvbSBcIi4vZnVuY3Rpb24tY2hlY2stZW1iZWQtZnJhbWVcIjtcbmltcG9ydCB7IFV0aWxzQ2FjaGUgfSBmcm9tIFwiLi9jYWNoZVwiO1xuZXhwb3J0IGNsYXNzIFV0aWxzQ29tbXVuaWNhdGVNaWNyb0tleUdsb2JhbCB7XG4gIHB1YmxpYyBzdGF0aWMgS0VZX01FU1NBR0VfTU9EQUwgPSAnTElCU19VSV9NT0RFTF9FVkVOVCc7XG59XG5cbmV4cG9ydCBjbGFzcyBVdGlsc0NvbW11bmljYXRlTWljcm8ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBSRUZJWF9UWVBFID0gJzNSRF9JTlRFR1JBVEVfTUlDUk9fU0lURV8nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBLRVlfR0VUX0FMTF9NRVNTQUdFID0gJ01JQ1JPX1NJVEVTX0FMTF9NRVNTQUdFJztcbiAgcHJpdmF0ZSBzdGF0aWMgaW5pdGRFdmVudD86IGJvb2xlYW47XG4gIHByaXZhdGUgc3RhdGljIHN1YnM6IE1hcDxzdHJpbmcsIFN1YmplY3Q8TWVzc2FnZUV2ZW50Pj4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgc3RhdGljIGFsbE1lc3NhZ2VTdWI6IFN1YmplY3Q8TWVzc2FnZUV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHVibGljIHN0YXRpYyBpbml0RXZlbnQoY3VycmVudFdpbmRvdzogV2luZG93LCBvbkRlc3Ryb3k6IFN1YmplY3Q8dm9pZD4pIHtcbiAgICBpZiAodGhpcy5pbml0ZEV2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaW5pdGRFdmVudCA9IHRydWU7XG4gICAgaWYgKCF0aGlzLnN1YnMuZ2V0KFV0aWxzQ29tbXVuaWNhdGVNaWNyby5LRVlfR0VUX0FMTF9NRVNTQUdFKSkge1xuICAgICAgdGhpcy5zdWJzLnNldChVdGlsc0NvbW11bmljYXRlTWljcm8uS0VZX0dFVF9BTExfTUVTU0FHRSwgVXRpbHNDb21tdW5pY2F0ZU1pY3JvLmFsbE1lc3NhZ2VTdWIpO1xuICAgIH1cblxuICAgIGZyb21FdmVudDxNZXNzYWdlRXZlbnQ+KGN1cnJlbnRXaW5kb3csICdtZXNzYWdlJykucGlwZSh0YWtlVW50aWwob25EZXN0cm95KSkuc3Vic2NyaWJlKGUgPT4ge1xuICAgICAgY29uc3QgZXZlbnQgPSB7IGRhdGE6IHsgLi4uZS5kYXRhIH0gfSBhcyBNZXNzYWdlRXZlbnQ7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBldmVudC5kYXRhO1xuICAgICAgY29uc3QgdHlwZSA9IGRhdGEudHlwZTtcblxuICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbE1lc3NhZ2VTdWIubmV4dChldmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWIgPSBVdGlsc0NvbW11bmljYXRlTWljcm8uR2V0TWVzc2FnZSh0eXBlKTtcblxuICAgICAgaWYgKCF0eXBlIHx8ICFkYXRhLnJlc3BvbnNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlLmluY2x1ZGVzKFV0aWxzQ29tbXVuaWNhdGVNaWNyby5QUkVGSVhfVFlQRSkpIHtcblxuICAgICAgICAgIGRhdGEucmVzcG9uc2UgPSBKU09OLnBhcnNlKGRlY3J5cHQzcmQoZGF0YS5yZXNwb25zZSkpO1xuICAgICAgICAgIHN1Yi5uZXh0KGV2ZW50KTtcbiAgICAgICAgICB0aGlzLmFsbE1lc3NhZ2VTdWIubmV4dChldmVudCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5yZXNwb25zZSA9IEpTT04ucGFyc2UoZGVjcnlwdChkYXRhLnJlc3BvbnNlKSk7XG4gICAgICAgIHN1Yi5uZXh0KGV2ZW50KTtcbiAgICAgICAgdGhpcy5hbGxNZXNzYWdlU3ViLm5leHQoZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgICBzdWIubmV4dChldmVudCk7XG4gICAgICAgIHRoaXMuYWxsTWVzc2FnZVN1Yi5uZXh0KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFV0aWxzQ29tbXVuaWNhdGVNaWNyby5HZXRNZXNzYWdlKFV0aWxzQ2FjaGUudHlwZUtleUNsZWFyTG9jYWxTdG9yYWdlKS5waXBlKGZpbHRlcihlID0+IGUuZGF0YS5yZXNwb25zZSAhPT0gVXRpbHNDYWNoZS5pZFNlcnZpY2UpLCB0YWtlVW50aWwob25EZXN0cm95KSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdjbGVhciBhbGwgY2FjaGUgYnkgZXZlbnQnKTtcbiAgICAgIFV0aWxzQ2FjaGUuQ2xlYXJBbGwoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBQb3N0TWVzc2FnZVRvUGFyZW50KGRhdGE6IGFueSkge1xuICAgIGRhdGEgPSB0aGlzLmNvbnZlcnREYXRhKGRhdGEpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaXNFbWJlZEZyYW1lKCkpIHtcbiAgICAgICAgd2luZG93Py5wYXJlbnQ/LnBvc3RNZXNzYWdlKGRhdGEsIFwiKlwiKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdz8udG9wPy5wb3N0TWVzc2FnZShkYXRhLCBcIipcIik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgUG9zdE1lc3NhZ2VUb0NoaWxkcmVuKGRhdGE6IGFueSkge1xuICAgIGRhdGEgPSB0aGlzLmNvbnZlcnREYXRhKGRhdGEpO1xuICAgIGNvbnN0IGlmcmFtZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiaWZyYW1lXCIpO1xuXG4gICAgQXJyYXkuZnJvbShpZnJhbWVzKS5mb3JFYWNoKGlmcmFtZSA9PiB7XG4gICAgICBpZnJhbWU/LmNvbnRlbnRXaW5kb3c/LnBvc3RNZXNzYWdlKGRhdGEsICcqJyk7XG4gICAgfSk7XG5cbiAgfVxuXG4gIHN0YXRpYyBQb3N0TWVzc2FnZVRvT3BlbmVyKGRhdGE6IGFueSkge1xuICAgIGlmICghd2luZG93Lm9wZW5lcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5jb252ZXJ0RGF0YShkYXRhKTtcblxuICAgIHdpbmRvdy5vcGVuZXIucG9zdE1lc3NhZ2UoZGF0YSwgJyonKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNvbnZlcnREYXRhKGRhdGE6IGFueSkge1xuICAgIGlmICghZGF0YSB8fCAhZGF0YS50eXBlIHx8ICFkYXRhLnJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgZGF0YSA9IHsgLi4uZGF0YSB9O1xuICAgIGNvbnN0IHR5cGUgPSBkYXRhLnR5cGU7XG5cbiAgICBpZiAodHlwZS5pbmNsdWRlcyh0aGlzLlBSRUZJWF9UWVBFKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgSlNPTi5wYXJzZShkZWNyeXB0M3JkKGRhdGEucmVzcG9uc2UpKTtcblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgZGF0YS5yZXNwb25zZSA9IGVuY3J5cHQzcmQoSlNPTi5zdHJpbmdpZnkoZGF0YS5yZXNwb25zZSkpO1xuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBKU09OLnBhcnNlKGRlY3J5cHQoZGF0YS5yZXNwb25zZSkpO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICBkYXRhLnJlc3BvbnNlID0gZW5jcnlwdChKU09OLnN0cmluZ2lmeShkYXRhLnJlc3BvbnNlKSk7XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBHZXRNZXNzYWdlKG1lc3NhZ2VUeXBlOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+KTogU3ViamVjdDxNZXNzYWdlRXZlbnQ+IHtcbiAgICBpZiAoIXRoaXMuaW5pdGRFdmVudCkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJjaMawYSBraMahaSB04bqhbyBow6BtIGzhuq9uZyBuZ2hlIHPhu7Ega2nhu4duLCBn4buNaSBVdGlsc0NvbW11bmljYXRlTWljcm8uaW5pdEV2ZW50KHdpbmRvdykgdOG6oWkgcm9vdCBjb21wb25lbnRcIilcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlVHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGxldCBzdWIgPSB0aGlzLnN1YnMuZ2V0KG1lc3NhZ2VUeXBlKTtcblxuICAgICAgaWYgKCFzdWIpIHtcbiAgICAgICAgc3ViID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgdGhpcy5zdWJzLnNldChtZXNzYWdlVHlwZSwgc3ViKTtcblxuICAgICAgICByZXR1cm4gc3ViO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3ViO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZVR5cGUpIHx8ICFtZXNzYWdlVHlwZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWVzc2FnZSB0eXBlIGVtcHR5Jyk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlVHlwZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiB0aGlzLkdldE1lc3NhZ2UobWVzc2FnZVR5cGVbMF0pO1xuICAgIH1cbiAgICBjb25zdCB0eXBlcyA9IG1lc3NhZ2VUeXBlLnNvcnQoKS5qb2luKCc7Jyk7XG5cbiAgICBsZXQgc3ViID0gdGhpcy5zdWJzLmdldCh0eXBlcyk7XG5cbiAgICBpZiAoc3ViKSB7XG4gICAgICByZXR1cm4gc3ViO1xuICAgIH1cblxuICAgIHN1YiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgdGhpcy5zdWJzLnNldCh0eXBlcywgc3ViKTtcbiAgICB0aGlzLmluaXRTdWJqZWN0KHN1YiwgbWVzc2FnZVR5cGUpO1xuXG4gICAgcmV0dXJuIHN1YjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGluaXRTdWJqZWN0KHN1YlJvb3Q6IFN1YmplY3Q8TWVzc2FnZUV2ZW50PiwgbWVzc2FnZVR5cGU6IEFycmF5PHN0cmluZz4pIHtcbiAgICBtZXNzYWdlVHlwZS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICB0aGlzLkdldE1lc3NhZ2Uoa2V5KS5zdWJzY3JpYmUoZSA9PiB7XG4gICAgICAgIHN1YlJvb3QubmV4dChlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -941,6 +941,9 @@ class UtilsCommunicateMicro {
|
|
|
941
941
|
if (!Array.isArray(messageType) || !messageType.length) {
|
|
942
942
|
throw new Error('message type empty');
|
|
943
943
|
}
|
|
944
|
+
if (messageType.length === 1) {
|
|
945
|
+
return this.GetMessage(messageType[0]);
|
|
946
|
+
}
|
|
944
947
|
const types = messageType.sort().join(';');
|
|
945
948
|
let sub = this.subs.get(types);
|
|
946
949
|
if (sub) {
|
|
@@ -1000,7 +1003,7 @@ class UtilsCache {
|
|
|
1000
1003
|
throw Error('Language support vi | en');
|
|
1001
1004
|
}
|
|
1002
1005
|
UtilsCache.language.set(lang);
|
|
1003
|
-
UtilsCache.Set(UtilsCache.languageKeyCache, lang);
|
|
1006
|
+
UtilsCache.Set(UtilsCache.languageKeyCache, lang, UtilsCache.CACHE_EXPIRE_NONE);
|
|
1004
1007
|
}
|
|
1005
1008
|
static getLang() {
|
|
1006
1009
|
return UtilsCache.language();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libs-ui-utils.mjs","sources":["../../../../libs-ui/utils/src/dom.ts","../../../../libs-ui/utils/src/url-search-params.ts","../../../../libs-ui/utils/src/crypto.ts","../../../../libs-ui/utils/src/uuid.ts","../../../../libs-ui/utils/src/helpers.ts","../../../../libs-ui/utils/src/color.ts","../../../../libs-ui/utils/src/crypto-3rd.ts","../../../../libs-ui/utils/src/key-code.ts","../../../../libs-ui/utils/src/http-params.ts","../../../../libs-ui/utils/src/language.ts","../../../../libs-ui/utils/src/key-cache.ts","../../../../libs-ui/utils/src/function-check-embed-frame.ts","../../../../libs-ui/utils/src/communicate-micro.ts","../../../../libs-ui/utils/src/cache.ts","../../../../libs-ui/utils/src/format-number.ts","../../../../libs-ui/utils/src/remove-emoji.ts","../../../../libs-ui/utils/src/escape-html.ts","../../../../libs-ui/utils/src/delete-unicode.ts","../../../../libs-ui/utils/src/get-color-by-id.ts","../../../../libs-ui/utils/src/constants.ts","../../../../libs-ui/utils/src/pattern.ts","../../../../libs-ui/utils/src/xss-filter.ts","../../../../libs-ui/utils/src/two-way-signal-object.ts","../../../../libs-ui/utils/src/format-date.ts","../../../../libs-ui/utils/src/encode-url.define.ts","../../../../libs-ui/utils/src/file.ts","../../../../libs-ui/utils/src/libs-ui-utils.ts"],"sourcesContent":["import { Renderer2 } from \"@angular/core\";\nimport { IBoundingClientRect } from \"@libs-ui/interfaces-types\";\n\nexport const getPlatFromBrowser = ()=> {\n const userAgent = navigator.userAgent;\n let tem;\n let match = userAgent.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n\n if (/trident/i.test(match[1])) {\n tem = /\\brv[ :]+(\\d+)/g.exec(userAgent) || [];\n\n return 'IE ' + (tem[1] || '');\n }\n if (match[1] === 'Chrome') {\n tem = userAgent.match(/\\b(OPR|Edge)\\/(\\d+)/);\n if (tem !== null) {\n return tem.slice(1).join(' ').replace('OPR', 'Opera');\n }\n\n }\n match = match[2] ? [match[1], match[2]] : [navigator.appName, navigator.appVersion, '-?'];\n if ((tem = userAgent.match(/version\\/(\\d+)/i)) !== null) {\n match.splice(1, 1, tem[1]);\n }\n\n return match.join(' ');\n}\n\nexport const cloneIBoundingClientRect = (rect: IBoundingClientRect): IBoundingClientRect => {\n return {\n top: rect['top'],\n left: rect['left'],\n width: rect['width'],\n height: rect['height'],\n bottom: rect['bottom']\n };\n}\n\nexport const setStyles = (el: HTMLElement, styles: Record<string, string>, render2: Renderer2): void => {\n Object.keys(styles).forEach((key: string) => render2.setStyle(el, key, styles[key]));\n}\n\nexport const getViewport = (win: Window = window): { width: number; height: number } => {\n const doc = win.document.documentElement,\n body = win.document.getElementsByTagName('body')[0],\n w = win.innerWidth || doc.clientWidth || body.clientWidth,\n h = win.innerHeight || doc.clientHeight || body.clientHeight;\n\n return { width: w, height: h };\n}\n\nexport const setCaretPosition = (element: HTMLTextAreaElement | HTMLInputElement, position: number): void => {\n if (!element || !element.setSelectionRange) {\n return;\n }\n element.focus();\n element.setSelectionRange(position, position);\n}\n\nexport const checkViewInScreen = (container: HTMLElement, element: HTMLElement, elementScroll?: HTMLElement, maxTopLeft?: { top?: number, left?: number }): boolean => {\n if (!container || !element) {\n return false;\n }\n\n const rectContainer = cloneIBoundingClientRect(container.getBoundingClientRect());\n\n if (elementScroll) {\n const rectElementScroll = elementScroll.getBoundingClientRect();\n\n rectContainer['left'] = rectElementScroll.left;\n rectContainer['top'] = rectElementScroll.top;\n\n }\n\n const rectElement = element.getBoundingClientRect();\n const { left, top } = rectElement;\n const topContainer = rectContainer['top'];\n const leftContainer = rectContainer['left'];\n const widthContainer = rectContainer['width'];\n const heightContainer = rectContainer['height'];\n const scrollTopContainer = container.scrollTop;\n const scrollLeftContainer = container.scrollLeft;\n const limitTop = topContainer + scrollTopContainer + heightContainer;\n const limitLeft = leftContainer + scrollLeftContainer + widthContainer;\n\n const maxTopItem = top + (maxTopLeft?.top || 0);\n const maxLeftItem = left + (maxTopLeft?.left || 0);\n\n if (topContainer <= maxTopItem && maxTopItem <= limitTop && leftContainer <= maxLeftItem && maxLeftItem <= limitLeft) {\n return true;\n }\n\n return false;\n};\n\nexport const checkMouseOverInContainer = (mousePosition: { clientX: number; clientY: number }, element?: HTMLElement, rect?: DOMRect): boolean => {\n if (!element && !rect) {\n return false;\n }\n const rectElement = rect || element?.getBoundingClientRect() || {} as DOMRect;\n const { left, top, width, height } = rectElement;\n const limitLeft = left + width;\n const limitTop = top + height;\n const { clientX, clientY } = mousePosition;\n\n if (left <= clientX && clientX <= limitLeft && top <= clientY && clientY <= limitTop) {\n return true;\n }\n\n return false;\n};","export class UtilsUrlSearchParams {\n private static instance: UtilsUrlSearchParams;\n private params: Array<{ key: string, value: string }>;\n constructor(paramString: string) {\n this.params = new Array<{ key: string, value: string }>();\n this.params.length = 0;\n this.params.push(...this.buildParams(paramString));\n }\n\n static getInstance() {\n if (!this.instance) {\n this.instance = new UtilsUrlSearchParams('');\n }\n\n return this.instance;\n }\n\n public static toStringParamObject(params: { [key in string]: string }) {\n const paramsArr: Array<{ key: string, value: string }> = Object.keys(params).map(key => {\n return {\n key,\n value: params[key]\n };\n });\n\n return UtilsUrlSearchParams.ToString(paramsArr);\n }\n\n public static ToString(params: Array<{ key: string, value: string }>) {\n let paramsStr = '';\n\n params.sort((item1, item2) => item1.key.localeCompare(item2.key)).forEach((item) => {\n const { key, value } = item;\n\n paramsStr = `${paramsStr}${paramsStr ? '&' : ''}${key}=${value}`;\n });\n\n return paramsStr;\n }\n\n private buildParams(paramString: string): Array<{ key: string, value: string }> {\n const paramsBuild = new Array<{ key: string, value: string }>();\n\n if (!paramString) {\n return paramsBuild;\n }\n\n const paramsError = paramString.split('?');\n\n if (paramsError.length > 2) {\n paramString = `${paramsError[0]}?${paramsError[1]}&${paramsError.slice(2).join('&')}`;\n }\n\n const params = paramString.replace(/\\S+[?]/g, '').split('&');\n\n if (params) {\n params.forEach(param => {\n if (param.indexOf('=') < 0) {\n return;\n }\n let [key, value] = param.split('=');\n\n key = key.replace(/[?&]+/g, '');\n value = decodeURIComponent(value.replace(/\\+/g, ' '));\n if (!paramsBuild.some(param => param.key === key)) {\n paramsBuild.push({ key, value });\n }\n });\n }\n\n return paramsBuild;\n }\n\n public set(key: string, value: string) {\n const paramByKey = this.params.find(param => param.key === key) as Record<string, string>;\n\n if (!paramByKey) {\n this.params.push({ key, value: decodeURIComponent(value.replace(/\\+/g, ' ')) });\n\n return;\n }\n\n paramByKey['value'] = value;\n }\n\n public get(key: string) {\n return this.params.find(param => param.key === key)?.value;\n }\n\n public has(key: string) {\n return this.params.some(param => param.key === key);\n }\n\n public delete(key: string) {\n const index = this.params.findIndex(param => param.key === key);\n\n if (index >= 0) {\n this.params.splice(index, 1);\n }\n }\n\n public length() {\n return this.params.length;\n }\n\n public toString(params?: Array<{ key: string, value: string }>) {\n params = params || this.params;\n\n return UtilsUrlSearchParams.ToString(params);\n }\n\n public getParamObject() {\n const params = {} as Record<string, string>;\n\n this.params.forEach(item => {\n params[item.key] = item.value;\n });\n\n return params;\n }\n\n public compareParams(param1: string, param2: string) {\n const params1 = this.toString(this.buildParams(param1));\n const params2 = this.toString(this.buildParams(param2));\n\n return params1 === params2;\n }\n\n}\n","\nimport CryptoES from 'crypto-es';\n\nlet key = '12~@#loqwsxacva(3rdhaq12';\n\nexport const setKeyCrypto = (value: string) => {\n if (value.length !== 24 && value.length !== 32) {\n throw Error(`key.length = ${value.length}; Key phải là 1 chuỗi dài 24 hoặc 32 ký tự`);\n }\n key = value;\n};\n\nconst keyStore = () => {\n return key;\n}\n\nexport const encrypt = (plainData: string): string => {\n if (!keyStore()) {\n throw Error(\"lỗi chưa setup key mã hóa\");\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.encrypt(plainData, key, options).toString();\n};\n\nexport const decrypt = (encryptedData: string): string => {\n if (!keyStore()) {\n throw Error(\"lỗi chưa setup key mã hóa\");\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.decrypt(encryptedData, key, options).toString(CryptoES.enc.Utf8);\n};\n\nexport const md5 = (plainData: string) => {\n return CryptoES.MD5(plainData).toString();\n};\n\n","import { md5 } from \"./crypto\";\n\nexport const uuid = (): string => {\n const timestamp = performance.now() * 1000;\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+-=[]{}|;:,.<>?/~';\n let randomString = '';\n\n for (let i = 0; i < 5; i++) {\n randomString += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n const baseString = `${Math.floor(timestamp)}-${randomString}`;\n const charArray = baseString.split('');\n\n for (let i = charArray.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n\n [charArray[i], charArray[j]] = [charArray[j], charArray[i]];\n }\n\n const shuffledString = charArray.join('');\n\n return md5(shuffledString);\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ElementRef, TemplateRef, isSignal } from \"@angular/core\";\nimport { TYPE_OBJECT } from \"@libs-ui/interfaces-types\";\n\n/**Các hàm tương tự thư viện lodash */\nexport const isNil = (value: unknown): value is null | undefined => {\n return value === null || value === undefined;\n};\n\nexport const isEmpty = (value: unknown) => {\n return value === null || value === '' || value === undefined || (typeof value === 'object' && (JSON.stringify(value) === '{}' || JSON.stringify(value) === '[]'));\n};\n\nexport const omitBy = <T>(objData: Record<string, any>, predicate: (val: any) => boolean): T => {\n if (!objData || typeof objData !== 'object' || Array.isArray(objData)) {\n return objData as T;\n }\n const newObj = {} as T;\n\n Object.keys(objData).forEach(key => {\n const valueOfKey = get(objData, key);\n if (!predicate(valueOfKey)) {\n set(newObj, key, valueOfKey)\n }\n })\n return newObj;\n};\n\nexport const get = <T = any>(obj: any, path: string | string[], defaultValue: any = undefined): T => {\n if (obj == null) {\n return defaultValue;\n }\n if (isSignal(obj)) {\n obj = obj();\n }\n const paths = Array.isArray(path) ? path : path.replace(/\\[(\\d+)]/g, '.$1').split('.').filter(key => key);\n for (let i = 0; i < paths.length; i++) {\n if (obj == null || !Object.prototype.hasOwnProperty.call(obj, paths[i])) {\n return defaultValue;\n }\n const val = isSignal(obj[paths[i]]) ? obj[paths[i]]() : obj[paths[i]];\n\n obj = val;\n }\n\n return obj;\n};\n\nexport const set = <T = any>(obj: any, path: string | string[], value: any): T => {\n if (!obj || (typeof obj !== \"object\" && !isSignal(obj)) || (isSignal(obj) && typeof obj() !== \"object\")) {\n throw new Error(\"The first argument must be an object\");\n }\n\n const pathArray = Array.isArray(path) ? path : path.replace(/\\[(\\d+)]/g, '.[$1]').split('.').filter(key => key);\n\n let current: any = isSignal(obj) ? obj() : obj;\n\n let lastIsSignal = false;\n pathArray.forEach((key, index) => {\n if (index < pathArray.length - 1) {\n if (!(key in current) || typeof current[key] !== \"object\") {\n const nextKey = pathArray[index + 1];\n\n key = key.replace(/\\[(\\d+)]/g, '$1');\n current[key] = /\\[(\\d+)]/g.test(nextKey) ? [] : {};\n }\n current = key ? current[key] : current;\n lastIsSignal = isSignal(current);\n current = lastIsSignal ? current() : current;\n return;\n }\n\n // Gán giá trị ở cuối đường dẫn\n key = key.replace(/\\[(\\d+)]/g, '$1');\n if (lastIsSignal) {\n current.update((data: any) => {\n data[key] = value;\n return { ...data };\n });\n return;\n }\n current[key] = value;\n });\n\n return obj;\n};\n\nexport const cloneDeep = <T = any>(data: any): T => {\n if (data === null || typeof data !== 'object') {\n return data;\n }\n\n if (data instanceof Date) {\n return new Date(data.getTime()) as T;\n }\n\n if (data instanceof RegExp) {\n return new RegExp(data.source, data.flags) as T;\n }\n\n if (data instanceof Map) {\n const mapCopy = new Map();\n data.forEach((val, key) => {\n mapCopy.set(cloneDeep(key), cloneDeep(val));\n });\n return mapCopy as T;\n }\n\n if (data instanceof Set) {\n const setCopy = new Set();\n data.forEach(val => {\n setCopy.add(cloneDeep(val));\n });\n return setCopy as T;\n }\n\n if (Array.isArray(data)) {\n return data.map(item => cloneDeep(item)) as T;\n }\n\n if (isSignal(data)) {\n return cloneDeep(data());\n }\n\n const result: Record<string, any> = {};\n for (const key in data) {\n const value = data[key];\n if (value instanceof TemplateRef || value instanceof ElementRef || value instanceof Element) {\n result[key] = value;\n continue;\n }\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n result[key] = cloneDeep(value);\n }\n }\n\n return result as T;\n};\n\nexport const keyBy = (data: Array<TYPE_OBJECT>, key: string): TYPE_OBJECT => {\n if (!data || !data.length || !key) {\n return {};\n }\n return data.reduce((dir, nextItem) => {\n const valueOfKey = nextItem[key];\n if (typeof valueOfKey !== 'string' && typeof valueOfKey !== 'number') {\n return dir;\n }\n dir[valueOfKey] = nextItem;\n return dir;\n }, {});\n};\n\nexport const groupBy = (data: Array<TYPE_OBJECT>, key: string): TYPE_OBJECT => {\n if (!data || !Object.keys(data).length || !key) {\n return {};\n }\n return data.reduce((dir, nextItem) => {\n const valueOfKey = nextItem[key];\n if (typeof valueOfKey !== 'string' && typeof valueOfKey !== 'number') {\n return dir;\n }\n if (!dir[valueOfKey]) {\n dir[valueOfKey] = [];\n }\n dir[valueOfKey].push(nextItem);\n return dir;\n }, {});\n};\n\nexport const range = (start: number, end?: number, step?: number): Array<number> => {\n if (end === undefined || end === null) {\n end = start;\n start = 0;\n }\n\n if (!step) {\n step = end < 0 ? -1 : 1;\n }\n\n if (end < start && step > 0) {\n step *= -1;\n }\n\n const valueStartByStep = step + start;\n const direction = start < end ? 'asc' : 'desc';\n if ((direction === 'asc' && (valueStartByStep < start || valueStartByStep > end)) || (direction === 'desc' && (valueStartByStep > start || valueStartByStep < end))) {\n return [start];\n }\n\n const arr = new Array<number>();\n\n for (let index = 0; index < Math.abs(end - start); index++) {\n let value = start + index * step;\n if (index === 0) {\n value = start;\n }\n\n if ((direction === 'asc' && (value < start || value > end)) || (direction === 'desc' && (value > start || value < end))) {\n return arr;\n }\n\n arr.push(value);\n }\n\n return arr;\n}\n\nexport const isEqual = (value1: any, value2: any): boolean => {\n if (value1 === value2 || (value1 === null && value2 === null) || (value1 === undefined && value2 === undefined)) {\n return true;\n }\n if (typeof value1 !== 'object' || typeof value2 !== 'object' || (Array.isArray(value1) && !Array.isArray(value2))) {\n return false;\n }\n\n if (Array.isArray(value1)) {\n if (value1.length !== value2.length) {\n return false\n }\n\n return !value1.some((item, index) => !isEqual(item, value2[index]));\n }\n\n if (Object.keys(value1).length !== Object.keys(value2).length) {\n return false;\n }\n return !Object.keys(value1).some((key) => !isEqual(value1[key], value2[key]));\n}\n\nexport const uniqBy = <T>(data: Array<T>, key?: string): Array<T> => {\n if (!key || !data || !data.length || typeof data[0] !== 'object') {\n return Array.from(new Set(data));\n }\n\n const dataUnique = keyBy(data as Array<Record<string, any>>, key);\n\n return Object.keys(dataUnique).map(key => dataUnique[key]);\n}\n\nexport const generateInterface = (obj: any, interfaceName: string): string => {\n const generateType = (value: any): string => {\n if (value === null) {\n return 'null';\n }\n const type = typeof value;\n\n if (type === 'string') {\n return 'string';\n }\n if (type === 'number') {\n return 'number';\n }\n if (type === 'boolean') {\n return 'boolean';\n }\n if (type === 'undefined') {\n return 'any';\n }\n\n if (value instanceof Date) {\n return 'Date';\n }\n\n if (value instanceof RegExp) {\n return 'RegExp';\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return 'Array<any>';\n }\n return `Array<${generateType(value[0])}>`;\n }\n\n if (type === 'object') {\n let interfaceStr = '{\\n';\n for (const key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n const valueType = generateType(value[key]);\n interfaceStr += ` ${key}: ${valueType};\\n`;\n }\n }\n interfaceStr += '}';\n return interfaceStr;\n }\n\n return 'any';\n };\n\n const interfaceStr = `interface ${interfaceName} ${generateType(obj)}`;\n return interfaceStr;\n};","\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport interface IColorContrastFromOrigin {\n step: number;\n label: string,\n light: string;\n dark: string\n};\nconst step = 20;\nconst percent = 0.05;\n\nexport const colorStepContrastFromOrigin = (color: string, stepNumber: number) => {\n return colorContrastFromOrigin(color).find(item => item.step === stepNumber);\n};\n\nexport const colorContrastFromOrigin = (color: string): Array<IColorContrastFromOrigin> => {\n const parsedColorsArray = parseColorValues(color);\n const colors: any = [];\n let calculatedShades: Array<string> = [];\n let calculatedTints: Array<string> = [];\n\n if (parsedColorsArray !== null) {\n for (let i = 0; i < parsedColorsArray.length; i++) {\n calculatedShades = calculateShades(parsedColorsArray[i]);\n calculatedTints = calculateTints(parsedColorsArray[i]);\n }\n\n for (let i = 0; i <= step; i++) {\n colors.push({ step: i * 5, label: `${i * 5}%`, dark: `#${calculatedShades[i]}`, light: `#${calculatedTints[i]}` });\n }\n }\n\n return colors;\n};\n\nconst parseColorValues = (colorValues: any) => {\n let colorValuesArray = colorValues.match(/\\b[0-9A-Fa-f]{3}\\b|[0-9A-Fa-f]{6}\\b/g);\n\n if (colorValuesArray) {\n colorValuesArray = colorValuesArray.map((item: any) => {\n if (item.length === 3) {\n let newItem = item.toString().split('');\n\n newItem = newItem.reduce((acc: any, it: any) => {\n return acc + it + it;\n }, '');\n\n return newItem;\n }\n\n return item;\n });\n }\n\n return colorValuesArray;\n};\n\nconst calculateShades = (colorValue: any) => {\n return calculate(colorValue, rgbShade).concat(\"000000\");\n};\n\nconst calculateTints = (colorValue: any) => {\n return calculate(colorValue, rgbTint).concat(\"ffffff\");\n};\n\nconst calculate = (colorValue: any, shadeOrTint: any) => {\n const color = hexToRGB(colorValue);\n const shadeValues: Array<string> = [];\n\n for (let i = 0; i < step; i++) {\n shadeValues[i] = rgbToHex(shadeOrTint(color, i));\n }\n\n return shadeValues;\n};\n\nconst rgbShade = (rgb: any, i: any) => { return { red: rgb.red * (1 - percent * i), green: rgb.green * (1 - percent * i), blue: rgb.blue * (1 - percent * i) } };\nconst rgbTint = (rgb: any, i: any) => { return { red: rgb.red + (255 - rgb.red) * i * percent, green: rgb.green + (255 - rgb.green) * i * percent, blue: rgb.blue + (255 - rgb.blue) * i * percent } };\n\n\nexport const rgbToHex = (rgb: any) => { return intToHex(rgb.red) + intToHex(rgb.green) + intToHex(rgb.blue) };\nconst hexToRGB = (colorValue: any) => { return { red: parseInt(colorValue.substr(0, 2), 16), green: parseInt(colorValue.substr(2, 2), 16), blue: parseInt(colorValue.substr(4, 2), 16) } };\nconst intToHex = (rgbint: any) => { return pad(Math.min(Math.max(Math.round(rgbint), 0), 255).toString(16), 2) };\n\nconst pad = (number: any, length: any) => {\n let str = '' + number;\n\n while (str.length < length) { str = '0' + str }\n\n return str;\n};\n\nexport const listColorDefine: Array<string> = ['#E62222', '#B81B1B', '#EB4E4E', '#F97316', '#C75C12', '#FA8F45', '#FFB700', '#CC9200', '#FFC533', '#84CC16', '#6AA312', '#9dd645', '#00BC62', '#00A757', '#33DA8A', '#06B6D4', '#1B59C4', '#4E8CF7', '#0EA5E9',\n '#1B59C4', '#4E8CF7', '#226FF5', '#1B59C4', '#4E8CF7', '#6366F1', '#4F52C1', '#8285F4', '#5B04B3', '#49038F', '#7C36C2', '#D946EF', '#AE38BF', '#E16BF2', '#EC4899', '#BD3A7A', '#F06DAD', '#F43F5E', '#C3324B', '#F6657E', '#757380', '#5E5C66', '#918F99',\n '#202020', '#1A1A1A', '#4D4D4D'\n];\n\nexport const GetColorById = (str: string): string => {\n let hashString = 0;\n\n if (!str) {\n return '';\n }\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n\n hashString = ((hashString << 5) - hashString) + char;\n hashString = hashString & hashString;\n }\n\n return listColorDefine[Math.abs(hashString) % listColorDefine.length];\n};\n\n\n","\nimport CryptoES from 'crypto-es';\n\nlet key = '12~@#loqwsxacva(3rdhaq12';\n\nexport const setKeyCrypto3rd = (value: string) => {\n if (value.length !== 24 && value.length !== 32) {\n throw Error(`key.length = ${value.length}; Key phải là 1 chuỗi dài 24 hoặc 32 ký tự`);\n }\n key = value;\n};\n\n\nconst keyStore = () => {\n return key;\n}\n\nexport const encrypt3rd = (plainData: string): string => {\n if (!keyStore()) {\n throw Error(\"lỗi chưa setup key mã hóa\");\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.encrypt(plainData, key, options).toString();\n};\n\nexport const decrypt3rd = (encryptedData: string): string => {\n if (!keyStore()) {\n throw Error(\"lỗi chưa setup key mã hóa\");\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.decrypt(encryptedData, key, options).toString(CryptoES.enc.Utf8);\n};","export abstract class UtilsKeyCodeConstant {\n static readonly MAC_ENTER = 3;\n static readonly BACKSPACE = 8;\n static readonly TAB = 9;\n static readonly NUM_CENTER = 12;\n static readonly ENTER = 13;\n static readonly SHIFT = 16;\n static readonly CONTROL = 17;\n static readonly ALT = 18;\n static readonly PAUSE = 19;\n static readonly CAPS_LOCK = 20;\n static readonly ESCAPE = 27;\n static readonly SPACE = 32;\n static readonly PAGE_UP = 33;\n static readonly PAGE_DOWN = 34;\n static readonly END = 35;\n static readonly HOME = 36;\n static readonly LEFT_ARROW = 37;\n static readonly UP_ARROW = 38;\n static readonly RIGHT_ARROW = 39;\n static readonly DOWN_ARROW = 40;\n static readonly PLUS_SIGN = 43;\n static readonly PRINT_SCREEN = 44;\n static readonly INSERT = 45;\n static readonly DELETE = 46;\n static readonly ZERO = 48;\n static readonly ONE = 49;\n static readonly TWO = 50;\n static readonly THREE = 51;\n static readonly FOUR = 52;\n static readonly FIVE = 53;\n static readonly SIX = 54;\n static readonly SEVEN = 55;\n static readonly EIGHT = 56;\n static readonly NINE = 57;\n static readonly FF_SEMICOLON = 59; // Firefox (Gecko) fires this for semicolon instead of 186\n static readonly FF_EQUALS = 61; // Firefox (Gecko) fires this for equals instead of 187\n static readonly QUESTION_MARK = 63;\n static readonly AT_SIGN = 64;\n static readonly A = 65;\n static readonly B = 66;\n static readonly C = 67;\n static readonly D = 68;\n static readonly E = 69;\n static readonly F = 70;\n static readonly G = 71;\n static readonly H = 72;\n static readonly I = 73;\n static readonly J = 74;\n static readonly K = 75;\n static readonly L = 76;\n static readonly M = 77;\n static readonly N = 78;\n static readonly O = 79;\n static readonly P = 80;\n static readonly Q = 81;\n static readonly R = 82;\n static readonly S = 83;\n static readonly T = 84;\n static readonly U = 85;\n static readonly V = 86;\n static readonly W = 87;\n static readonly X = 88;\n static readonly Y = 89;\n static readonly Z = 90;\n static readonly META = 91; // WIN_KEY_LEFT\n static readonly MAC_WK_CMD_LEFT = 91;\n static readonly MAC_WK_CMD_RIGHT = 93;\n static readonly CONTEXT_MENU = 93;\n static readonly NUMPAD_ZERO = 96;\n static readonly NUMPAD_ONE = 97;\n static readonly NUMPAD_TWO = 98;\n static readonly NUMPAD_THREE = 99;\n static readonly NUMPAD_FOUR = 100;\n static readonly NUMPAD_FIVE = 101;\n static readonly NUMPAD_SIX = 102;\n static readonly NUMPAD_SEVEN = 103;\n static readonly NUMPAD_EIGHT = 104;\n static readonly NUMPAD_NINE = 105;\n static readonly NUMPAD_MULTIPLY = 106;\n static readonly NUMPAD_PLUS = 107;\n static readonly NUMPAD_MINUS = 109;\n static readonly NUMPAD_PERIOD = 110;\n static readonly NUMPAD_DIVIDE = 111;\n static readonly F1 = 112;\n static readonly F2 = 113;\n static readonly F3 = 114;\n static readonly F4 = 115;\n static readonly F5 = 116;\n static readonly F6 = 117;\n static readonly F7 = 118;\n static readonly F8 = 119;\n static readonly F9 = 120;\n static readonly F10 = 121;\n static readonly F11 = 122;\n static readonly F12 = 123;\n static readonly NUM_LOCK = 144;\n static readonly SCROLL_LOCK = 145;\n static readonly FIRST_MEDIA = 166;\n static readonly FF_MINUS = 173;\n static readonly MUTE = 173; // Firefox (Gecko) fires 181 for MUTE\n static readonly VOLUME_DOWN = 174; // Firefox (Gecko) fires 182 for VOLUME_DOWN\n static readonly VOLUME_UP = 175; // Firefox (Gecko) fires 183 for VOLUME_UP\n static readonly FF_MUTE = 181;\n static readonly FF_VOLUME_DOWN = 182;\n static readonly LAST_MEDIA = 183;\n static readonly FF_VOLUME_UP = 183;\n static readonly SEMICOLON = 186; // Firefox (Gecko) fires 59 for SEMICOLON\n static readonly EQUALS = 187; // Firefox (Gecko) fires 61 for EQUALS\n static readonly COMMA = 188;\n static readonly DASH = 189; // Firefox (Gecko) fires 173 for DASH/MINUS\n static readonly PERIOD = 190;\n static readonly SLASH = 191;\n static readonly APOSTROPHE = 192;\n static readonly TILDE = 192;\n static readonly OPEN_SQUARE_BRACKET = 219;\n static readonly BACKSLASH = 220;\n static readonly CLOSE_SQUARE_BRACKET = 221;\n static readonly SINGLE_QUOTE = 222;\n static readonly MAC_META = 224;\n }\n ","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpParameterCodec, HttpParams } from \"@angular/common/http\";\n\nexport const UtilsHttpParamsRequestInstance = <Type>(options?: HttpParamsOptions<Type>, instance?: HttpParams): UtilsHttpParamsRequest<Type> => {\n return new UtilsHttpParamsRequest<Type>(options, instance);\n};\n\nexport class UtilsHttpParamsRequest<Type = { pem: string }> extends HttpParams {\n private params!: HttpParams;\n\n constructor(options?: HttpParamsOptions<Type>, instance?: HttpParams) {\n super(options as any);\n\n if (!instance) {\n this.params = new HttpParams(options);\n\n return;\n }\n\n if (instance instanceof UtilsHttpParamsRequest) {\n this.params = instance.getInstance();\n\n return;\n }\n\n if (instance instanceof HttpParams) {\n this.params = instance;\n\n return;\n }\n }\n\n getInstance(): HttpParams {\n return this.params;\n }\n\n setInstance(instance: HttpParams) {\n if (instance instanceof UtilsHttpParamsRequest) {\n this.params = instance.getInstance();\n\n return;\n }\n\n if (instance instanceof HttpParams) {\n this.params = instance;\n\n return;\n }\n }\n\n override set(param: string, value: string | number | boolean): UtilsHttpParamsRequest {\n this.params = this.params.set(param, value);\n\n return this as UtilsHttpParamsRequest;\n }\n\n override has(param: string): boolean {\n return this.params.has(param);\n }\n\n override get(param: string): string | null {\n return this.params.get(param);\n }\n\n override getAll(param: string): string[] | null {\n return this.params.getAll(param);\n }\n\n override keys(): string[] {\n return this.params.keys();\n }\n\n override append(param: string, value: string | number | boolean): HttpParams {\n this.params = this.params.append(param, value);\n\n return this as HttpParams;\n }\n\n override appendAll(params: { [param: string]: string | number | boolean | ReadonlyArray<string | number | boolean> }): HttpParams {\n this.params = this.params.appendAll(params);\n\n return this as HttpParams;\n }\n\n override delete(param: string, value?: string | number | boolean): UtilsHttpParamsRequest {\n this.params = this.params.delete(param, value);\n\n return this as UtilsHttpParamsRequest;\n }\n\n override toString(): string {\n return this.params.toString();\n }\n}\n\nexport declare interface HttpParamsOptions<Type> {\n fromString?: string;\n fromObject?: TYPE_FROM_OBJECT<Type>;\n encoder?: HttpParameterCodec;\n}\nexport type GET_PATH_VARIABLE<TypePath, TypeOther = unknown> = {\n [Property in keyof TypePath as `pathVariable-${Lowercase<string & Property>}`]: TypePath[Property];\n} & TypeOther;\n\ntype TYPE_FROM_OBJECT<Type> = Type extends undefined | null ? { pem: string } : { pem?: string } & {\n [Property in keyof Type]?: Type[Property];\n};","\nexport class UtilsLanguageConstants {\n public static VI = 'vi';\n public static EN = 'en';\n public static defaultLang = UtilsLanguageConstants.VI;\n};","import { HttpParams } from \"@angular/common/http\";\nimport { md5 } from \"./crypto\";\n\nexport const getKeyCacheByArrayObject = (keyCache: string, argumentsValue?: Array<unknown>): string =>{\n if (!keyCache || !argumentsValue) {\n return '';\n }\n let keyBuild = `${JSON.stringify(argumentsValue.slice(1))}-key-cache-plus`;\n\n if (argumentsValue && argumentsValue[0] instanceof HttpParams) {\n const httpParams = argumentsValue[0];\n const keys = argumentsValue[0].keys().sort((str1, str2) => str1.localeCompare(str2));\n\t\t\tkeys.forEach(key => {\n\t\t\t\t\tkeyBuild = `${keyBuild}${JSON.stringify(httpParams.get(key))}`;\n\t\t\t});\n }\n const keyCachePlus = md5(keyBuild);\n const keyCacheMD5 = md5(keyCache);\n\n return `${keyCacheMD5}-${md5(`${keyCacheMD5}-${keyCachePlus}`)}`;\n}\n\n ","let functionCheck = () => {\n return window.parent !== window.top;\n}\nexport const updateFunctionCheckEmbedFrame = (functionCustom: () => boolean) => {\n functionCheck = functionCustom;\n}\n\nexport const isEmbedFrame = (): boolean => {\n return functionCheck();\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Subject, filter, fromEvent, takeUntil } from \"rxjs\";\nimport { decrypt, encrypt } from \"./crypto\";\nimport { decrypt3rd, encrypt3rd } from \"./crypto-3rd\";\nimport { isEmbedFrame } from \"./function-check-embed-frame\";\nimport { UtilsCache } from \"./cache\";\nexport class UtilsCommunicateMicroKeyGlobal {\n public static KEY_MESSAGE_MODAL = 'LIBS_UI_MODEL_EVENT';\n}\n\nexport class UtilsCommunicateMicro {\n public static readonly PREFIX_TYPE = '3RD_INTEGRATE_MICRO_SITE_';\n private static readonly KEY_GET_ALL_MESSAGE = 'MICRO_SITES_ALL_MESSAGE';\n private static initdEvent?: boolean;\n private static subs: Map<string, Subject<MessageEvent>> = new Map();\n private static allMessageSub: Subject<MessageEvent> = new Subject();\n\n public static initEvent(currentWindow: Window, onDestroy: Subject<void>) {\n if (this.initdEvent) {\n return;\n }\n this.initdEvent = true;\n if (!this.subs.get(UtilsCommunicateMicro.KEY_GET_ALL_MESSAGE)) {\n this.subs.set(UtilsCommunicateMicro.KEY_GET_ALL_MESSAGE, UtilsCommunicateMicro.allMessageSub);\n }\n\n fromEvent<MessageEvent>(currentWindow, 'message').pipe(takeUntil(onDestroy)).subscribe(e => {\n const event = { data: { ...e.data } } as MessageEvent;\n\n const data = event.data;\n const type = data.type;\n\n if (!type) {\n return this.allMessageSub.next(event);\n }\n const sub = UtilsCommunicateMicro.GetMessage(type);\n\n if (!type || !data.response) {\n return;\n }\n try {\n if (type.includes(UtilsCommunicateMicro.PREFIX_TYPE)) {\n\n data.response = JSON.parse(decrypt3rd(data.response));\n sub.next(event);\n this.allMessageSub.next(event);\n\n return;\n }\n data.response = JSON.parse(decrypt(data.response));\n sub.next(event);\n this.allMessageSub.next(event);\n } catch (error) {\n console.log(error);\n sub.next(event);\n this.allMessageSub.next(event);\n }\n });\n\n UtilsCommunicateMicro.GetMessage(UtilsCache.typeKeyClearLocalStorage).pipe(filter(e => e.data.response !== UtilsCache.idService), takeUntil(onDestroy)).subscribe(() => {\n console.log('clear all cache by event');\n UtilsCache.ClearAll();\n });\n }\n\n static PostMessageToParent(data: any) {\n data = this.convertData(data);\n try {\n if (isEmbedFrame()) {\n window?.parent?.postMessage(data, \"*\");\n\n return;\n }\n\n window?.top?.postMessage(data, \"*\");\n } catch (error) {\n console.log(error);\n }\n }\n\n static PostMessageToChildren(data: any) {\n data = this.convertData(data);\n const iframes = document.querySelectorAll(\"iframe\");\n\n Array.from(iframes).forEach(iframe => {\n iframe?.contentWindow?.postMessage(data, '*');\n });\n\n }\n\n static PostMessageToOpener(data: any) {\n if (!window.opener) {\n return;\n }\n data = this.convertData(data);\n\n window.opener.postMessage(data, '*');\n }\n\n private static convertData(data: any) {\n if (!data || !data.type || !data.response) {\n return data;\n }\n data = { ...data };\n const type = data.type;\n\n if (type.includes(this.PREFIX_TYPE)) {\n try {\n JSON.parse(decrypt3rd(data.response));\n\n return data;\n } catch (_) {\n data.response = encrypt3rd(JSON.stringify(data.response));\n\n return data;\n }\n\n }\n try {\n JSON.parse(decrypt(data.response));\n\n return data;\n } catch (_) {\n data.response = encrypt(JSON.stringify(data.response));\n\n return data;\n }\n }\n\n static GetMessage(messageType: string | Array<string>): Subject<MessageEvent> {\n if (!this.initdEvent) {\n throw Error(\"chưa khơi tạo hàm lắng nghe sự kiện, gọi UtilsCommunicateMicro.initEvent(window) tại root component\")\n }\n if (typeof messageType === 'string') {\n let sub = this.subs.get(messageType);\n\n if (!sub) {\n sub = new Subject();\n this.subs.set(messageType, sub);\n\n return sub;\n }\n\n return sub;\n }\n if (!Array.isArray(messageType) || !messageType.length) {\n throw new Error('message type empty');\n }\n const types = messageType.sort().join(';');\n\n let sub = this.subs.get(types);\n\n if (sub) {\n return sub;\n }\n\n sub = new Subject();\n this.subs.set(types, sub);\n this.initSubject(sub, messageType);\n\n return sub;\n }\n\n private static initSubject(subRoot: Subject<MessageEvent>, messageType: Array<string>) {\n messageType.forEach(key => {\n this.GetMessage(key).subscribe(e => {\n subRoot.next(e);\n });\n });\n }\n}\n","/* eslint-disable no-async-promise-executor */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { signal } from '@angular/core';\nimport { UtilsCommunicateMicro } from './communicate-micro';\nimport { decrypt, encrypt, md5 } from './crypto';\nimport { getPlatFromBrowser } from './dom';\nimport { isEmbedFrame } from './function-check-embed-frame';\nimport { isNil } from './helpers';\nimport { UtilsLanguageConstants } from './language';\nimport { uuid } from './uuid';\n\nexport class UtilsCache {\n public static readonly CACHE_EXPIRE_TIME_DEFAULT = 5 * 60;\n public static readonly CACHE_EXPIRE_NONE = -1;\n public static readonly idService = uuid();\n public static typeKeyClearLocalStorage = 'LIBS_UI_CLEAR_LOCAL_STORAGE_EVENT';\n\n private static languageKeyCache = 'SR3xQKxHgffiCevPQRralg';\n private static listKeyKeepWhenClearALll = Array<string>();\n private static initdEvent?: boolean;\n private static language = signal<string>(UtilsLanguageConstants.defaultLang);\n private static storage: { [key: string]: unknown };\n private static dbName = 'libs-ui-cache';\n private static itemIndexByKey = 'key';\n private static dbVersion = 1;\n private static db: IDBDatabase | null = null;\n\n public static init(config: { indexedDBName?: string, languageKeyCache?: string, typeKeyClearLocalStorage?: string, listKeyKeepWhenClearAll?: Array<string> }) {\n if (UtilsCache.initdEvent) {\n return;\n }\n UtilsCache.initdEvent = true;\n if (config.indexedDBName) {\n UtilsCache.dbName = config.indexedDBName;\n }\n if (config.typeKeyClearLocalStorage) {\n UtilsCache.typeKeyClearLocalStorage = config.typeKeyClearLocalStorage;\n }\n if (config.listKeyKeepWhenClearAll) {\n UtilsCache.listKeyKeepWhenClearALll = config.listKeyKeepWhenClearAll;\n }\n if (config.languageKeyCache) {\n UtilsCache.languageKeyCache = config.languageKeyCache;\n }\n this.language.set(UtilsCache.Get(UtilsCache.languageKeyCache, UtilsLanguageConstants.defaultLang));\n }\n\n public static setLang(lang: string) {\n if (lang !== UtilsLanguageConstants.VI && lang !== UtilsLanguageConstants.EN) {\n throw Error('Language support vi | en');\n }\n UtilsCache.language.set(lang);\n UtilsCache.Set(UtilsCache.languageKeyCache, lang);\n }\n\n public static getLang() {\n return UtilsCache.language();\n }\n\n private static openDB() {\n return new Promise(resolve => {\n const request = indexedDB.open(UtilsCache.dbName, UtilsCache.dbVersion);\n\n request.onupgradeneeded = (event: IDBVersionChangeEvent) => {\n const db = (event.target as IDBOpenDBRequest).result;\n\n if (!db.objectStoreNames.contains(UtilsCache.dbName)) {\n const objectStore = db.createObjectStore(UtilsCache.dbName, { keyPath: UtilsCache.itemIndexByKey, autoIncrement: true });\n\n objectStore.createIndex(UtilsCache.itemIndexByKey, UtilsCache.itemIndexByKey, { unique: true });\n }\n };\n\n request.onsuccess = () => {\n UtilsCache.db = request.result;\n resolve(true);\n };\n\n request.onerror = (event) => {\n console.error('Error opening IndexedDB:', event);\n resolve(false);\n };\n });\n }\n\n private static async getObjectStore() {\n if (!UtilsCache.db) {\n await UtilsCache.openDB();\n }\n const transaction = UtilsCache.db?.transaction([UtilsCache.dbName], 'readwrite');\n if (!transaction) {\n return null;\n }\n\n return transaction.objectStore(UtilsCache.dbName);\n }\n\n private static get LocalStorage(): any {\n try {\n if (typeof window.localStorage !== 'undefined') {\n const OS = getPlatFromBrowser();\n\n if (OS.includes('Safari') && parseFloat(OS.split(' ').pop() || '0') >= 16) {\n\n return this.getLocalStorageFakeOnSafari();\n }\n\n return localStorage;\n }\n\n return this.getLocalStorageFake();\n } catch (error) {\n console.log(error);\n return this.getLocalStorageFake();\n }\n }\n\n private static getLocalStorageFakeOnSafari() {\n if (typeof window.localStorage !== 'undefined' && !UtilsCache.storage && Object.keys(localStorage).length) {\n this.storage = { ...localStorage };\n }\n\n return {\n setItem: (key: string, value: string) => {\n localStorage.setItem(key, value);\n this.storage[key] = value;\n },\n getItem: (key: string) => {\n const value = localStorage.getItem(key);\n\n if (value) {\n return value;\n }\n\n if (!this.storage || isNil(this.storage[key])) {\n return null;\n }\n\n localStorage.setItem(key, this.storage[key] as string);\n\n return this.storage?.[key];\n },\n removeItem: (key: string) => {\n delete this.storage?.[key];\n localStorage.removeItem(key);\n },\n clear: () => {\n this.storage = {};\n localStorage.clear();\n }\n };\n }\n\n private static getLocalStorageFake() {\n if (!UtilsCache.storage) {\n this.storage = {};\n }\n\n return {\n setItem: (key: string, value: unknown) => {\n this.storage[key] = value;\n },\n getItem: (key: string) => {\n return this.storage?.[key];\n },\n removeItem: (key: string) => {\n delete this.storage?.[key];\n },\n clear: () => {\n this.storage = {};\n }\n };\n }\n\n public static async GetAsync<T = any>(key: string, default_value?: any, isKeyMD5 = false): Promise<T> {\n key = isKeyMD5 ? key : md5(key);\n\n return new Promise<T>(async (resolve, reject) => {\n const objectStore = await UtilsCache.getObjectStore();\n\n if (!objectStore) {\n\n return resolve(default_value);\n }\n const request = objectStore.get(key);\n\n request.onsuccess = () => {\n if (!request.result) {\n return resolve(default_value);\n }\n const data = JSON.parse(decrypt(request.result.value));\n\n if (data.expire === UtilsCache.CACHE_EXPIRE_NONE) {\n return resolve(data.json);\n }\n const currentMillisecond = (new Date().valueOf() / 1000);\n\n if (data.expire < currentMillisecond) {\n\n return resolve(default_value);\n }\n\n return resolve(data.json);\n };\n\n request.onerror = () => {\n reject(request.error);\n };\n });\n }\n\n public static Get<T = any>(key: string, default_value?: any): T { // support cho những file không thể inject UtilsCache\n if (!key) {\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n const cachedData = this.LocalStorage.getItem(key);\n\n if (!cachedData) {\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n try {\n const data = JSON.parse(decrypt(cachedData));\n\n if (data.expire === UtilsCache.CACHE_EXPIRE_NONE) {\n return data.value ?? default_value;\n }\n const currentMillisecond = (new Date().valueOf() / 1000);\n\n if (data.expire < currentMillisecond) {\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n\n return data.value;\n\n } catch (error) {\n console.log(error);\n\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n }\n\n public static GetDefaultValueBySpecificKey(key: string, default_value: any) {\n return default_value;\n\n }\n\n public static async SetAsync<T = any>(key: string, value: any, expireTimeBySecond = UtilsCache.CACHE_EXPIRE_TIME_DEFAULT, isKeyMD5 = false): Promise<T> { // support inject UtilsCache\n return new Promise<T>(async (resolve, reject) => {\n const objectStore = await UtilsCache.getObjectStore();\n\n key = isKeyMD5 ? key : md5(key);\n try {\n const currentMillisecond = expireTimeBySecond === UtilsCache.CACHE_EXPIRE_NONE ? UtilsCache.CACHE_EXPIRE_NONE : (new Date().valueOf() / 1000) + expireTimeBySecond;\n const data: any = {\n value: encrypt(JSON.stringify({ json: value, expire: currentMillisecond })),\n };\n data[UtilsCache.itemIndexByKey] = key;\n\n if (!objectStore) {\n return reject(new Error('Can not open object store'));\n }\n const request = objectStore?.put(data);\n request.onsuccess = () => {\n resolve(request.result as any);\n };\n\n request.onerror = () => {\n reject(request.error);\n };\n\n } catch (error) {\n reject(error);\n }\n });\n }\n\n\n static Set(key: string, value: any, expireTimeBySecond = UtilsCache.CACHE_EXPIRE_TIME_DEFAULT): boolean { // support cho những file không inject UtilsCache\n const currentMillisecond = expireTimeBySecond === UtilsCache.CACHE_EXPIRE_NONE ? UtilsCache.CACHE_EXPIRE_NONE : (new Date().valueOf() / 1000) + expireTimeBySecond;\n const data = {\n value: value,\n expire: currentMillisecond\n };\n\n try {\n this.LocalStorage.setItem(key, encrypt(JSON.stringify(data)));\n return true;\n } catch (error) {\n console.log(error);\n return false;\n }\n }\n\n public static async ClearAsync(key: string, isMD5 = false) {\n return new Promise<void>(async (resolve) => {\n const objectStore = await UtilsCache.getObjectStore();\n\n if (!objectStore) {\n return resolve();\n }\n const request = objectStore.delete(isMD5 ? key : md5(key));\n\n request.onsuccess = () => {\n resolve();\n };\n request.onerror = () => {\n resolve();\n };\n });\n }\n\n\n static Clear(key: string) {\n if (key.includes('kc-callback-')) {\n return;\n }\n this.LocalStorage.removeItem(key);\n }\n\n public static ClearAllAsync() {\n return new Promise<void>(async (resolve, reject) => {\n const objectStore = await UtilsCache.getObjectStore();\n\n if (!objectStore) {\n return resolve();\n }\n\n const request = objectStore.clear();\n request.onsuccess = () => {\n console.log('Database deleted successfully');\n resolve();\n };\n\n request.onerror = (event: Event) => {\n console.error('Error deleting database:', (event.target as IDBRequest).error);\n reject((event.target as IDBRequest).error);\n };\n });\n }\n\n static ClearAll() {\n if (isEmbedFrame()) {\n const data = {\n type: UtilsCache.typeKeyClearLocalStorage,\n response: {\n idEvent: this.idService\n }\n };\n UtilsCommunicateMicro.PostMessageToParent(data);\n }\n const keys = [...UtilsCache.listKeyKeepWhenClearALll];\n Object.keys(this.LocalStorage).forEach(key => {\n if (key.includes('kc-callback-')) {\n keys.push(key);\n }\n });\n\n const stores = UtilsCache.GetDataByKeys(Array.from(keys));\n\n this.LocalStorage.clear();\n\n UtilsCache.SetDataByKey(stores);\n }\n\n private static GetDataByKeys(keys: Array<string>) {\n const stores = new Map();\n\n keys.forEach((key: string) => {\n if (key.includes('kc-callback-')) {\n stores.set(key, this.LocalStorage.getItem(key));\n\n return;\n }\n stores.set(key, UtilsCache.Get(key));\n });\n\n return stores;\n }\n\n private static SetDataByKey(stores: Map<string, any>) {\n stores.forEach((value: any, key: string) => {\n if (key.includes('kc-callback-')) {\n this.LocalStorage.setItem(key, value);\n\n return;\n }\n if (key === UtilsCache.languageKeyCache) {\n return UtilsCache.setLang(value);\n }\n UtilsCache.Set(key, value, UtilsCache.CACHE_EXPIRE_NONE);\n });\n }\n\n public static DeleteKeyStartWithAsync(keyCacheStartWith: string, isKeyMD5 = false) {\n return new Promise(async (resolve) => {\n const objectStore = await UtilsCache.getObjectStore();\n\n if (!objectStore) {\n return resolve({});\n }\n\n // Lấy tất cả các keys từ index\n const request = objectStore.getAll();\n\n keyCacheStartWith = isKeyMD5 ? keyCacheStartWith : md5(keyCacheStartWith);\n\n\n request.onsuccess = (e: any) => {\n const data = e.target.result as Array<any>;\n\n if (!Array.isArray(data)) {\n return resolve({});\n }\n\n data.forEach(obj => {\n if (obj[UtilsCache.itemIndexByKey].startsWith(keyCacheStartWith)) {\n UtilsCache.ClearAsync(obj[UtilsCache.itemIndexByKey], true);\n }\n });\n\n return resolve({});\n };\n\n request.onerror = () => {\n return resolve({});\n };\n });\n }\n\n public static DeleteKeyStartWith(keyCache: string, isMD5 = false) {\n keyCache = isMD5 ? md5(keyCache) : keyCache;\n const keys = Object.keys(UtilsCache.LocalStorage);\n\n if (!keys || !keys.length) {\n return;\n }\n\n keys.forEach(key => {\n if (key.startsWith(keyCache)) {\n this.Clear(key);\n }\n });\n }\n\n public static DeleteDatabaseIndexDB(dbName: string) {\n return new Promise((resolve, reject) => {\n const request = indexedDB.deleteDatabase(dbName);\n\n request.onsuccess = () => {\n console.log('Database deleted successfully');\n resolve(true);\n };\n\n request.onerror = (event: Event) => {\n console.error('Error deleting database:', (event.target as IDBRequest).error);\n reject((event.target as IDBRequest).error);\n };\n\n request.onblocked = () => {\n console.warn('Delete request is blocked');\n };\n });\n }\n}\n","import { UtilsCache } from \"./cache\";\nimport { isNil } from \"./helpers\";\nimport { UtilsLanguageConstants } from \"./language\";\n\n\nexport const formatNumber = (value: string | number): string => {\n const lang = UtilsCache.getLang();\n\n if (lang === UtilsLanguageConstants.EN) {\n return `${value}`.replace(/[,]/g, '');\n }\n\n return `${value}`.replace(/[.]/g, '').replace(/[,]/g, '.');\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const viewDataNumberByLanguage = (value: string | number, acceptNegativeValue: boolean | undefined, parseFixed = 1, ignoreFormatSeparator = false, ignoreParseFloat = false): any => {\n const lang = UtilsCache.getLang()\n\n if (!`${value}`.trim()) {\n return '';\n }\n if (isNil(value) || (!acceptNegativeValue && +value <= 0)) {\n return 0;\n }\n if (typeof value === 'string' && !ignoreFormatSeparator) {\n value = formatNumber(value);\n }\n\n const isFloat = value.toString().includes('.');\n const [intStr, floatStr] = value.toString().split('.');\n\n if (!floatStr?.length) {\n parseFixed = 0;\n }\n const round = (value: number, parseFixed: number) => {\n const fixed = Math.pow(10, parseFixed);\n\n return Math.round(value * fixed) / fixed;\n };\n\n if (parseFixed > (floatStr?.length || 0)) {\n const maxParseFixed = (acceptNegativeValue && +value < 0) ? 17 : 16;\n const fixed = maxParseFixed - (intStr?.length || 0);\n\n parseFixed = parseFixed < fixed ? parseFixed : fixed;\n }\n\n if (isFloat && !ignoreParseFloat) {\n value = parseFloat(round(+value, parseFixed).toFixed(parseFixed));\n }\n\n // Xử lý không format dữ liệu phần thập phân\n const valueString = value.toString();\n const index = valueString.indexOf('.');\n\n if (index !== -1 && (parseFixed > 3 || ignoreParseFloat)) {\n let decimalPart = valueString.substring(index + 1, valueString.length);\n let int = valueString.substring(0, index + 1);\n\n if (ignoreParseFloat) {\n decimalPart = decimalPart.substring(0, parseFixed);\n }\n if (lang === UtilsLanguageConstants.EN) {\n int = int.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n\n return `${int}${decimalPart}`;\n }\n int = int.replace('.', ',').replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n\n return `${int}${decimalPart}`;\n }\n if (index === -1 || parseFixed <= 3) {\n if (lang === UtilsLanguageConstants.EN) {\n return value.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n\n return value.toString().replace('.', ',').replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n }\n};","export const emojiPattern = ()=> {\n return /(\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff])/g;\n}\nexport const removeEmoji = (text: string) => {\n if (!text || !text.trim()) {\n return text;\n }\n \n return text.replace(emojiPattern(), '');\n};","export const escapeHtml = (data: string): string => {\n if (!data || typeof data !== 'string') {\n return data;\n }\n\n return data\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n};\n","export const deleteUnicode = (str: string) => {\n str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a');\n str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ|ễ/g, 'e');\n str = str.replace(/ì|í|ị|ỉ|ĩ/g, 'i');\n str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o');\n str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u');\n str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, 'y');\n str = str.replace(/đ/g, 'd');\n str = str.replace(/À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ/g, 'A');\n str = str.replace(/È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ/g, 'E');\n str = str.replace(/Ì|Í|Ị|Ỉ|Ĩ/g, 'I');\n str = str.replace(/Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ/g, 'O');\n str = str.replace(/Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ/g, 'U');\n str = str.replace(/Ỳ|Ý|Ỵ|Ỷ|Ỹ/g, 'Y');\n str = str.replace(/Đ/g, 'D');\n\n str = str.replace(/\\u0300|\\u0301|\\u0303|\\u0309|\\u0323/g, \"\"); // ̀ ́ ̃ ̉ ̣ huyền, sắc, ngã, hỏi, nặng\n str = str.replace(/\\u02C6|\\u0306|\\u031B/g, \"\"); // ˆ ̆ ̛ Â, Ê, Ă, Ơ, Ư\n\n return str.normalize();\n};","const listColorDefine: Array<string> = ['#E62222', '#B81B1B', '#EB4E4E', '#F97316', '#C75C12', '#FA8F45', '#FFB700', '#CC9200', '#FFC533', '#84CC16', '#6AA312', '#9dd645', '#00BC62', '#00A757', '#33DA8A', '#06B6D4', '#1B59C4', '#4E8CF7', '#0EA5E9',\n '#1B59C4', '#4E8CF7', '#226FF5', '#1B59C4', '#4E8CF7', '#6366F1', '#4F52C1', '#8285F4', '#5B04B3', '#49038F', '#7C36C2', '#D946EF', '#AE38BF', '#E16BF2', '#EC4899', '#BD3A7A', '#F06DAD', '#F43F5E', '#C3324B', '#F6657E', '#757380', '#5E5C66', '#918F99',\n '#202020', '#1A1A1A', '#4D4D4D'\n];\n\nexport const getColorById = (str: string): string => {\n let hashString = 0;\n\n if (!str) {\n return '';\n }\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n\n hashString = ((hashString << 5) - hashString) + char;\n hashString = hashString & hashString;\n }\n\n return listColorDefine[Math.abs(hashString) % listColorDefine.length];\n};\n\n","export const ERROR_MESSAGE_EMPTY_VALID = 'i18n_valid_empty_message';\nexport const ERROR_MESSAGE_PATTEN_VALID = 'i18n_valid_pattern_message';\nexport const ERROR_MESSAGE_MIN_VALID = 'i18n_message_error_input_min_value';\nexport const ERROR_MESSAGE_MAX_VALID = 'i18n_message_error_input_max_value';\nexport const ERROR_MESSAGE_MIN_LENGTH = 'i18n_message_error_input_min_length';\nexport const ERROR_MESSAGE_MAX_LENGTH = 'i18n_message_error_input_max_length';\nexport const CHARACTER_DATA_EMPTY = '__';\nexport const DEFAULT_START_PAGE_0 = 'defaultStartPage0';","/* eslint-disable no-useless-escape */\nexport const patternEmail = () => {\n return /^[A-z0-9]+[A-z0-9\\_\\.\\+\\-]*[A-z0-9]@[A-z0-9]+[A-z0-9\\_\\.\\+\\-]*[A-z0-9]\\.[A-z0-9]+[A-z0-9\\_\\.\\+\\-]*[A-z0-9]$/;\n}\nexport const patternUrl = () => {\n return /^(http|https|ftp):(\\/){2}[^\\s]+[.]{1}[^\\s]+$/;\n}\n\nexport const patternHostUrl = () => {\n return /^((https|http|ftp):[/]{2}[^/\\s]+)/;\n}\n\nexport const patternDomain = () => {\n return /^([a-zA-Z0-9])(([a-z0-9-]{1,61})?[a-z0-9]{1})?(\\.[a-z0-9](([a-z0-9-]{1,61})?[a-z0-9]{1})?)?(\\.[a-zA-Z]{2,4})+$/;\n}\n\nexport const patternMobilePhone = () => {\n return /^(\\+?84|0|84)([0-9]{9})$/;\n}\n\nexport const patternPhone = () => {\n return /^(\\+?84|[0-9]|84)([0-9]{2,9})$/;\n}\n\nexport const patternPhoneNormal = () => {\n return /^(\\+?84|[0-9]|84)([0-9]{9,10})$/;\n}\n\nexport const patternNumber = () => {\n return /\\d+/g;\n}\nexport const patternEncodeUri = () => {\n return /%([0-9A-F]{2})/g;\n}\nexport const patternName = () => {\n return /^\\w+[A-Za-z\\s\\d]+$/;\n}\nexport const patternNameUtf8 = () => {\n return /^[ àáảãạăắằẵặẳâầấậẫẩđèéẻẽẹêềếểễệìíỉĩịòóỏõọôồốổỗộơờớởỡợùúủũụưừứửữựỳýỷỹÀÁẢÃẠĂẮẰẴẶẲÂẦẤẬẪẨĐÈÉẺẼẸÊỀẾỂỄỆÌÍỈĨỊÒÓỎÕỌÔỒỐỔỖỘƠỜỚỞỠỢÙÚỦŨỤƯỪỨỬỮỰỲÝỶỸA-Za-z0-9]+$/;\n}\nexport const patternNameSpecial = () => {\n return /[~!@#$%^&*()-+=<>,?\\/\\\\:;\"']/;\n}\nexport const patternNameProfile = () => {\n return /([\\w\\W\\d\\s]+)+/;\n}\nexport const patternEmoji = () => {\n return /(\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff])/g;\n}\nexport const patternRuleFieldReplace = () => {\n return /[{]{2}[a-zA-Z_-]+[}]{2}/g;\n}\nexport const patternGetFieldByRuleFieldReplace = () => {\n return /[a-zA-Z_-]+/g;\n}\n\nexport const patternPem = () => {\n return /^(0|1):([0-9]{1,2}):(\\{\\{path-api\\}\\}):([a-zA-Z0-9\\/]+)$/g;\n}\n\nexport const patternTax = () => {\n return /^([0-9]){10}(-[0-9]{3})?$/;\n}\n\nexport const patternKey = () => {\n return /^([0-9]){10}(-[0-9]{3})?$/;\n}\n\nexport const patternAccount = () => {\n return /^(?=.*@)[a-z0-9@._-]{2,63}$/;\n}\n","export type TYPE_FUNCTION_XSS = (data: string) => Promise<string>;\nlet functionXssFilter: TYPE_FUNCTION_XSS = async (value: string): Promise<string> => {\n return value;\n}\n\nexport const updateFunctionXssFilter = (functionCustom: TYPE_FUNCTION_XSS) => {\n functionXssFilter = functionCustom;\n}\n\nexport const xssFilter: TYPE_FUNCTION_XSS = async (data: string) => {\n return await functionXssFilter(data);\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { signal, TemplateRef, ElementRef, WritableSignal, isSignal } from \"@angular/core\";\nimport { cloneDeep } from \"./helpers\";\n\nexport const convertObjectToSignal = <T = any>(data: any, isCloneDeep = true): T => {\n if (data === null || typeof data !== 'object' || isSignal(data)) {\n return data;\n }\n if (Array.isArray(data)) {\n return signal(data.map(item => convertObjectToSignal(item, isCloneDeep))) as T;\n }\n\n if (data instanceof Map) {\n const mapCopy = new Map();\n Array.from(data.keys()).forEach(key => {\n mapCopy.set(key, convertObjectToSignal(data.get(key), isCloneDeep));\n });\n return signal(mapCopy) as T;\n }\n\n data = signal(isCloneDeep ? { ...data } : data);\n\n for (const key in data()) {\n const value = data()[key];\n if (value instanceof TemplateRef || value instanceof ElementRef || value instanceof Element || value instanceof Date || value instanceof RegExp || value instanceof Set || value instanceof Map) {\n continue;\n }\n if (Object.prototype.hasOwnProperty.call(data(), key)) {\n data()[key] = convertObjectToSignal(value, isCloneDeep);\n }\n }\n\n return data as T;\n};\n\nexport const convertSignalToObject = <T = any>(data: any, isCloneDeep = true): T => {\n if (data === null || (typeof data !== 'function' && typeof data !== 'object')) {\n return data;\n }\n if (isSignal(data)) {\n data = (data as WritableSignal<unknown>)();\n }\n\n\n if (Array.isArray(data)) {\n if (!isSignal(data[0])) {\n return data as T;\n }\n return data.map(item => convertSignalToObject(isCloneDeep ? cloneDeep(item) : item, isCloneDeep)) as T;\n }\n\n\n if (data instanceof Map) {\n const mapCopy = new Map();\n Array.from(data.keys()).forEach(key => {\n mapCopy.set(key, convertSignalToObject(isCloneDeep ? cloneDeep(data.get(key)) : data.get(key), isCloneDeep));\n });\n return mapCopy as T;\n }\n const result: Record<string, any> = isCloneDeep ? {} : data;\n for (const key in data) {\n const value = data[key];\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n result[key] = convertSignalToObject(isCloneDeep ? cloneDeep(value) : value, isCloneDeep);\n }\n }\n\n return result as T;\n};\n","import dayjs from 'dayjs';\n\nimport * as en from 'dayjs/locale/en';\nimport * as vi from 'dayjs/locale/vi';\nimport updateLocale from 'dayjs/plugin/updateLocale';\nimport { UtilsCache } from './cache';\ndayjs.extend(updateLocale);\n\nexport type TYPE_FUNCTION_FORMAT_DATE = (time: string | number | dayjs.Dayjs | undefined | null, format: string, lang?: string) => string;\nlet functionFormatDate: TYPE_FUNCTION_FORMAT_DATE | undefined = undefined;\n\n\nexport const updateFunctionFormatDate = (functionCustom: TYPE_FUNCTION_FORMAT_DATE) => {\n functionFormatDate = functionCustom;\n}\n\nexport const formatDate = (time: string | number | dayjs.Dayjs | undefined | null, format = 'YYYY/MM/DD HH:mm', lang?: string): string => {\n if (!time) {\n return '';\n }\n lang = lang || UtilsCache.getLang();\n if (functionFormatDate) {\n return functionFormatDate(time, format, lang);\n }\n\n time = typeof time === 'number' ? dayjs.unix(time).locale(lang) : dayjs(time).locale(lang);\n updateLocaleDate(lang);\n if (typeof time === 'number') {\n return dayjs.unix(time).format(getFormatData(getTypeByFormat(format), lang));\n }\n\n return dayjs(time).format(getFormatData(getTypeByFormat(format), lang));\n}\n\nconst updateLocaleDate = (lang: string) => {\n if (lang === 'vi') {\n dayjs.locale(vi);\n dayjs.updateLocale('vi', {\n monthsShort: 'Thg 1_Thg 2_Thg 3_Thg 4_Thg 5_Thg 6_Thg 7_Thg 8_Thg 9_Thg 10_Thg 11_Thg 12'.split('_')\n });\n\n return;\n }\n dayjs.locale(en);\n};\n\nconst getTypeByFormat = (format: string): 'dm' | 'dmy' | 'dmy hm' | 'my' | 'dmy hms' => {\n if (format === 'dm' || format === 'dmy' || format === 'dmy hm' || format === 'my') {\n return format;\n }\n\n if (format === 'DD/MM/YYYY' || format === 'YYYY-MM-DD' || format === 'dd/MM/yyyy' || format === 'dd-MM-yyyy' || format === 'dd/mm/yyyy') {\n return 'dmy';\n }\n\n if (format === 'MM-DD' || format === 'dd/MM' || format === 'dd/mm') {\n return 'dm';\n }\n\n if (format === 'M/YYYY' || format === 'YYYY-MM' || format === 'MM/yyyy') {\n return 'my';\n }\n\n if (format === 'YYYY/MM/DD hh:mm:ss' || format === 'dmy hms' || format === 'dd/mm/yyyy hh:mm:ss') {\n return 'dmy hms';\n }\n\n return 'dmy hm';\n};\n\nconst getFormatData = (type: 'dm' | 'dmy' | 'dmy hm' | 'my' | 'dmy hms', lang: string) => {\n switch (type) {\n case 'dm':\n if (lang === 'vi') {\n return 'D MMM';\n }\n\n return 'MMM D';\n\n case 'dmy':\n if (lang === 'vi') {\n return 'D MMM, YYYY';\n }\n\n return 'MMM D, YYYY';\n\n case 'dmy hm':\n if (lang === 'vi') {\n return 'D MMM, YYYY HH:mm';\n }\n\n return 'MMM D, YYYY HH:mm';\n\n case 'my':\n if (lang === 'vi') {\n return 'MMM, YYYY';\n }\n\n return 'MMM YYYY ';\n\n case 'dmy hms':\n if (lang === 'vi') {\n return 'D MMM, YYYY HH:mm:ss';\n }\n\n return 'MMM D, YYYY HH:mm:ss';\n }\n};\n","import { isNil, omitBy } from './helpers';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const endCodeUrl = (objectData: any, isBody: boolean): string => {\n objectData = omitBy(objectData, param => param === '' || isNil(param));\n let res = '';\n\n for (const p in objectData) {\n res += `&${p}=${encodeURIComponent(objectData[p])}`;\n }\n\n return res === '' ? '' : `${isBody ? '' : '?'}${res.substring(1)}`;\n};","export const convertFileToBase64 = (file: File): Promise<string | ArrayBuffer> => {\n return new Promise((resolve) => {\n const reader = new FileReader();\n\n reader.readAsDataURL(file);\n reader.onload = (event) => {\n resolve(event.target?.result ?? '');\n };\n });\n};","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["key","keyStore","listColorDefine"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"libs-ui-utils.mjs","sources":["../../../../libs-ui/utils/src/dom.ts","../../../../libs-ui/utils/src/url-search-params.ts","../../../../libs-ui/utils/src/crypto.ts","../../../../libs-ui/utils/src/uuid.ts","../../../../libs-ui/utils/src/helpers.ts","../../../../libs-ui/utils/src/color.ts","../../../../libs-ui/utils/src/crypto-3rd.ts","../../../../libs-ui/utils/src/key-code.ts","../../../../libs-ui/utils/src/http-params.ts","../../../../libs-ui/utils/src/language.ts","../../../../libs-ui/utils/src/key-cache.ts","../../../../libs-ui/utils/src/function-check-embed-frame.ts","../../../../libs-ui/utils/src/communicate-micro.ts","../../../../libs-ui/utils/src/cache.ts","../../../../libs-ui/utils/src/format-number.ts","../../../../libs-ui/utils/src/remove-emoji.ts","../../../../libs-ui/utils/src/escape-html.ts","../../../../libs-ui/utils/src/delete-unicode.ts","../../../../libs-ui/utils/src/get-color-by-id.ts","../../../../libs-ui/utils/src/constants.ts","../../../../libs-ui/utils/src/pattern.ts","../../../../libs-ui/utils/src/xss-filter.ts","../../../../libs-ui/utils/src/two-way-signal-object.ts","../../../../libs-ui/utils/src/format-date.ts","../../../../libs-ui/utils/src/encode-url.define.ts","../../../../libs-ui/utils/src/file.ts","../../../../libs-ui/utils/src/libs-ui-utils.ts"],"sourcesContent":["import { Renderer2 } from \"@angular/core\";\nimport { IBoundingClientRect } from \"@libs-ui/interfaces-types\";\n\nexport const getPlatFromBrowser = ()=> {\n const userAgent = navigator.userAgent;\n let tem;\n let match = userAgent.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n\n if (/trident/i.test(match[1])) {\n tem = /\\brv[ :]+(\\d+)/g.exec(userAgent) || [];\n\n return 'IE ' + (tem[1] || '');\n }\n if (match[1] === 'Chrome') {\n tem = userAgent.match(/\\b(OPR|Edge)\\/(\\d+)/);\n if (tem !== null) {\n return tem.slice(1).join(' ').replace('OPR', 'Opera');\n }\n\n }\n match = match[2] ? [match[1], match[2]] : [navigator.appName, navigator.appVersion, '-?'];\n if ((tem = userAgent.match(/version\\/(\\d+)/i)) !== null) {\n match.splice(1, 1, tem[1]);\n }\n\n return match.join(' ');\n}\n\nexport const cloneIBoundingClientRect = (rect: IBoundingClientRect): IBoundingClientRect => {\n return {\n top: rect['top'],\n left: rect['left'],\n width: rect['width'],\n height: rect['height'],\n bottom: rect['bottom']\n };\n}\n\nexport const setStyles = (el: HTMLElement, styles: Record<string, string>, render2: Renderer2): void => {\n Object.keys(styles).forEach((key: string) => render2.setStyle(el, key, styles[key]));\n}\n\nexport const getViewport = (win: Window = window): { width: number; height: number } => {\n const doc = win.document.documentElement,\n body = win.document.getElementsByTagName('body')[0],\n w = win.innerWidth || doc.clientWidth || body.clientWidth,\n h = win.innerHeight || doc.clientHeight || body.clientHeight;\n\n return { width: w, height: h };\n}\n\nexport const setCaretPosition = (element: HTMLTextAreaElement | HTMLInputElement, position: number): void => {\n if (!element || !element.setSelectionRange) {\n return;\n }\n element.focus();\n element.setSelectionRange(position, position);\n}\n\nexport const checkViewInScreen = (container: HTMLElement, element: HTMLElement, elementScroll?: HTMLElement, maxTopLeft?: { top?: number, left?: number }): boolean => {\n if (!container || !element) {\n return false;\n }\n\n const rectContainer = cloneIBoundingClientRect(container.getBoundingClientRect());\n\n if (elementScroll) {\n const rectElementScroll = elementScroll.getBoundingClientRect();\n\n rectContainer['left'] = rectElementScroll.left;\n rectContainer['top'] = rectElementScroll.top;\n\n }\n\n const rectElement = element.getBoundingClientRect();\n const { left, top } = rectElement;\n const topContainer = rectContainer['top'];\n const leftContainer = rectContainer['left'];\n const widthContainer = rectContainer['width'];\n const heightContainer = rectContainer['height'];\n const scrollTopContainer = container.scrollTop;\n const scrollLeftContainer = container.scrollLeft;\n const limitTop = topContainer + scrollTopContainer + heightContainer;\n const limitLeft = leftContainer + scrollLeftContainer + widthContainer;\n\n const maxTopItem = top + (maxTopLeft?.top || 0);\n const maxLeftItem = left + (maxTopLeft?.left || 0);\n\n if (topContainer <= maxTopItem && maxTopItem <= limitTop && leftContainer <= maxLeftItem && maxLeftItem <= limitLeft) {\n return true;\n }\n\n return false;\n};\n\nexport const checkMouseOverInContainer = (mousePosition: { clientX: number; clientY: number }, element?: HTMLElement, rect?: DOMRect): boolean => {\n if (!element && !rect) {\n return false;\n }\n const rectElement = rect || element?.getBoundingClientRect() || {} as DOMRect;\n const { left, top, width, height } = rectElement;\n const limitLeft = left + width;\n const limitTop = top + height;\n const { clientX, clientY } = mousePosition;\n\n if (left <= clientX && clientX <= limitLeft && top <= clientY && clientY <= limitTop) {\n return true;\n }\n\n return false;\n};","export class UtilsUrlSearchParams {\n private static instance: UtilsUrlSearchParams;\n private params: Array<{ key: string, value: string }>;\n constructor(paramString: string) {\n this.params = new Array<{ key: string, value: string }>();\n this.params.length = 0;\n this.params.push(...this.buildParams(paramString));\n }\n\n static getInstance() {\n if (!this.instance) {\n this.instance = new UtilsUrlSearchParams('');\n }\n\n return this.instance;\n }\n\n public static toStringParamObject(params: { [key in string]: string }) {\n const paramsArr: Array<{ key: string, value: string }> = Object.keys(params).map(key => {\n return {\n key,\n value: params[key]\n };\n });\n\n return UtilsUrlSearchParams.ToString(paramsArr);\n }\n\n public static ToString(params: Array<{ key: string, value: string }>) {\n let paramsStr = '';\n\n params.sort((item1, item2) => item1.key.localeCompare(item2.key)).forEach((item) => {\n const { key, value } = item;\n\n paramsStr = `${paramsStr}${paramsStr ? '&' : ''}${key}=${value}`;\n });\n\n return paramsStr;\n }\n\n private buildParams(paramString: string): Array<{ key: string, value: string }> {\n const paramsBuild = new Array<{ key: string, value: string }>();\n\n if (!paramString) {\n return paramsBuild;\n }\n\n const paramsError = paramString.split('?');\n\n if (paramsError.length > 2) {\n paramString = `${paramsError[0]}?${paramsError[1]}&${paramsError.slice(2).join('&')}`;\n }\n\n const params = paramString.replace(/\\S+[?]/g, '').split('&');\n\n if (params) {\n params.forEach(param => {\n if (param.indexOf('=') < 0) {\n return;\n }\n let [key, value] = param.split('=');\n\n key = key.replace(/[?&]+/g, '');\n value = decodeURIComponent(value.replace(/\\+/g, ' '));\n if (!paramsBuild.some(param => param.key === key)) {\n paramsBuild.push({ key, value });\n }\n });\n }\n\n return paramsBuild;\n }\n\n public set(key: string, value: string) {\n const paramByKey = this.params.find(param => param.key === key) as Record<string, string>;\n\n if (!paramByKey) {\n this.params.push({ key, value: decodeURIComponent(value.replace(/\\+/g, ' ')) });\n\n return;\n }\n\n paramByKey['value'] = value;\n }\n\n public get(key: string) {\n return this.params.find(param => param.key === key)?.value;\n }\n\n public has(key: string) {\n return this.params.some(param => param.key === key);\n }\n\n public delete(key: string) {\n const index = this.params.findIndex(param => param.key === key);\n\n if (index >= 0) {\n this.params.splice(index, 1);\n }\n }\n\n public length() {\n return this.params.length;\n }\n\n public toString(params?: Array<{ key: string, value: string }>) {\n params = params || this.params;\n\n return UtilsUrlSearchParams.ToString(params);\n }\n\n public getParamObject() {\n const params = {} as Record<string, string>;\n\n this.params.forEach(item => {\n params[item.key] = item.value;\n });\n\n return params;\n }\n\n public compareParams(param1: string, param2: string) {\n const params1 = this.toString(this.buildParams(param1));\n const params2 = this.toString(this.buildParams(param2));\n\n return params1 === params2;\n }\n\n}\n","\nimport CryptoES from 'crypto-es';\n\nlet key = '12~@#loqwsxacva(3rdhaq12';\n\nexport const setKeyCrypto = (value: string) => {\n if (value.length !== 24 && value.length !== 32) {\n throw Error(`key.length = ${value.length}; Key phải là 1 chuỗi dài 24 hoặc 32 ký tự`);\n }\n key = value;\n};\n\nconst keyStore = () => {\n return key;\n}\n\nexport const encrypt = (plainData: string): string => {\n if (!keyStore()) {\n throw Error(\"lỗi chưa setup key mã hóa\");\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.encrypt(plainData, key, options).toString();\n};\n\nexport const decrypt = (encryptedData: string): string => {\n if (!keyStore()) {\n throw Error(\"lỗi chưa setup key mã hóa\");\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.decrypt(encryptedData, key, options).toString(CryptoES.enc.Utf8);\n};\n\nexport const md5 = (plainData: string) => {\n return CryptoES.MD5(plainData).toString();\n};\n\n","import { md5 } from \"./crypto\";\n\nexport const uuid = (): string => {\n const timestamp = performance.now() * 1000;\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+-=[]{}|;:,.<>?/~';\n let randomString = '';\n\n for (let i = 0; i < 5; i++) {\n randomString += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n const baseString = `${Math.floor(timestamp)}-${randomString}`;\n const charArray = baseString.split('');\n\n for (let i = charArray.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n\n [charArray[i], charArray[j]] = [charArray[j], charArray[i]];\n }\n\n const shuffledString = charArray.join('');\n\n return md5(shuffledString);\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ElementRef, TemplateRef, isSignal } from \"@angular/core\";\nimport { TYPE_OBJECT } from \"@libs-ui/interfaces-types\";\n\n/**Các hàm tương tự thư viện lodash */\nexport const isNil = (value: unknown): value is null | undefined => {\n return value === null || value === undefined;\n};\n\nexport const isEmpty = (value: unknown) => {\n return value === null || value === '' || value === undefined || (typeof value === 'object' && (JSON.stringify(value) === '{}' || JSON.stringify(value) === '[]'));\n};\n\nexport const omitBy = <T>(objData: Record<string, any>, predicate: (val: any) => boolean): T => {\n if (!objData || typeof objData !== 'object' || Array.isArray(objData)) {\n return objData as T;\n }\n const newObj = {} as T;\n\n Object.keys(objData).forEach(key => {\n const valueOfKey = get(objData, key);\n if (!predicate(valueOfKey)) {\n set(newObj, key, valueOfKey)\n }\n })\n return newObj;\n};\n\nexport const get = <T = any>(obj: any, path: string | string[], defaultValue: any = undefined): T => {\n if (obj == null) {\n return defaultValue;\n }\n if (isSignal(obj)) {\n obj = obj();\n }\n const paths = Array.isArray(path) ? path : path.replace(/\\[(\\d+)]/g, '.$1').split('.').filter(key => key);\n for (let i = 0; i < paths.length; i++) {\n if (obj == null || !Object.prototype.hasOwnProperty.call(obj, paths[i])) {\n return defaultValue;\n }\n const val = isSignal(obj[paths[i]]) ? obj[paths[i]]() : obj[paths[i]];\n\n obj = val;\n }\n\n return obj;\n};\n\nexport const set = <T = any>(obj: any, path: string | string[], value: any): T => {\n if (!obj || (typeof obj !== \"object\" && !isSignal(obj)) || (isSignal(obj) && typeof obj() !== \"object\")) {\n throw new Error(\"The first argument must be an object\");\n }\n\n const pathArray = Array.isArray(path) ? path : path.replace(/\\[(\\d+)]/g, '.[$1]').split('.').filter(key => key);\n\n let current: any = isSignal(obj) ? obj() : obj;\n\n let lastIsSignal = false;\n pathArray.forEach((key, index) => {\n if (index < pathArray.length - 1) {\n if (!(key in current) || typeof current[key] !== \"object\") {\n const nextKey = pathArray[index + 1];\n\n key = key.replace(/\\[(\\d+)]/g, '$1');\n current[key] = /\\[(\\d+)]/g.test(nextKey) ? [] : {};\n }\n current = key ? current[key] : current;\n lastIsSignal = isSignal(current);\n current = lastIsSignal ? current() : current;\n return;\n }\n\n // Gán giá trị ở cuối đường dẫn\n key = key.replace(/\\[(\\d+)]/g, '$1');\n if (lastIsSignal) {\n current.update((data: any) => {\n data[key] = value;\n return { ...data };\n });\n return;\n }\n current[key] = value;\n });\n\n return obj;\n};\n\nexport const cloneDeep = <T = any>(data: any): T => {\n if (data === null || typeof data !== 'object') {\n return data;\n }\n\n if (data instanceof Date) {\n return new Date(data.getTime()) as T;\n }\n\n if (data instanceof RegExp) {\n return new RegExp(data.source, data.flags) as T;\n }\n\n if (data instanceof Map) {\n const mapCopy = new Map();\n data.forEach((val, key) => {\n mapCopy.set(cloneDeep(key), cloneDeep(val));\n });\n return mapCopy as T;\n }\n\n if (data instanceof Set) {\n const setCopy = new Set();\n data.forEach(val => {\n setCopy.add(cloneDeep(val));\n });\n return setCopy as T;\n }\n\n if (Array.isArray(data)) {\n return data.map(item => cloneDeep(item)) as T;\n }\n\n if (isSignal(data)) {\n return cloneDeep(data());\n }\n\n const result: Record<string, any> = {};\n for (const key in data) {\n const value = data[key];\n if (value instanceof TemplateRef || value instanceof ElementRef || value instanceof Element) {\n result[key] = value;\n continue;\n }\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n result[key] = cloneDeep(value);\n }\n }\n\n return result as T;\n};\n\nexport const keyBy = (data: Array<TYPE_OBJECT>, key: string): TYPE_OBJECT => {\n if (!data || !data.length || !key) {\n return {};\n }\n return data.reduce((dir, nextItem) => {\n const valueOfKey = nextItem[key];\n if (typeof valueOfKey !== 'string' && typeof valueOfKey !== 'number') {\n return dir;\n }\n dir[valueOfKey] = nextItem;\n return dir;\n }, {});\n};\n\nexport const groupBy = (data: Array<TYPE_OBJECT>, key: string): TYPE_OBJECT => {\n if (!data || !Object.keys(data).length || !key) {\n return {};\n }\n return data.reduce((dir, nextItem) => {\n const valueOfKey = nextItem[key];\n if (typeof valueOfKey !== 'string' && typeof valueOfKey !== 'number') {\n return dir;\n }\n if (!dir[valueOfKey]) {\n dir[valueOfKey] = [];\n }\n dir[valueOfKey].push(nextItem);\n return dir;\n }, {});\n};\n\nexport const range = (start: number, end?: number, step?: number): Array<number> => {\n if (end === undefined || end === null) {\n end = start;\n start = 0;\n }\n\n if (!step) {\n step = end < 0 ? -1 : 1;\n }\n\n if (end < start && step > 0) {\n step *= -1;\n }\n\n const valueStartByStep = step + start;\n const direction = start < end ? 'asc' : 'desc';\n if ((direction === 'asc' && (valueStartByStep < start || valueStartByStep > end)) || (direction === 'desc' && (valueStartByStep > start || valueStartByStep < end))) {\n return [start];\n }\n\n const arr = new Array<number>();\n\n for (let index = 0; index < Math.abs(end - start); index++) {\n let value = start + index * step;\n if (index === 0) {\n value = start;\n }\n\n if ((direction === 'asc' && (value < start || value > end)) || (direction === 'desc' && (value > start || value < end))) {\n return arr;\n }\n\n arr.push(value);\n }\n\n return arr;\n}\n\nexport const isEqual = (value1: any, value2: any): boolean => {\n if (value1 === value2 || (value1 === null && value2 === null) || (value1 === undefined && value2 === undefined)) {\n return true;\n }\n if (typeof value1 !== 'object' || typeof value2 !== 'object' || (Array.isArray(value1) && !Array.isArray(value2))) {\n return false;\n }\n\n if (Array.isArray(value1)) {\n if (value1.length !== value2.length) {\n return false\n }\n\n return !value1.some((item, index) => !isEqual(item, value2[index]));\n }\n\n if (Object.keys(value1).length !== Object.keys(value2).length) {\n return false;\n }\n return !Object.keys(value1).some((key) => !isEqual(value1[key], value2[key]));\n}\n\nexport const uniqBy = <T>(data: Array<T>, key?: string): Array<T> => {\n if (!key || !data || !data.length || typeof data[0] !== 'object') {\n return Array.from(new Set(data));\n }\n\n const dataUnique = keyBy(data as Array<Record<string, any>>, key);\n\n return Object.keys(dataUnique).map(key => dataUnique[key]);\n}\n\nexport const generateInterface = (obj: any, interfaceName: string): string => {\n const generateType = (value: any): string => {\n if (value === null) {\n return 'null';\n }\n const type = typeof value;\n\n if (type === 'string') {\n return 'string';\n }\n if (type === 'number') {\n return 'number';\n }\n if (type === 'boolean') {\n return 'boolean';\n }\n if (type === 'undefined') {\n return 'any';\n }\n\n if (value instanceof Date) {\n return 'Date';\n }\n\n if (value instanceof RegExp) {\n return 'RegExp';\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return 'Array<any>';\n }\n return `Array<${generateType(value[0])}>`;\n }\n\n if (type === 'object') {\n let interfaceStr = '{\\n';\n for (const key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n const valueType = generateType(value[key]);\n interfaceStr += ` ${key}: ${valueType};\\n`;\n }\n }\n interfaceStr += '}';\n return interfaceStr;\n }\n\n return 'any';\n };\n\n const interfaceStr = `interface ${interfaceName} ${generateType(obj)}`;\n return interfaceStr;\n};","\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport interface IColorContrastFromOrigin {\n step: number;\n label: string,\n light: string;\n dark: string\n};\nconst step = 20;\nconst percent = 0.05;\n\nexport const colorStepContrastFromOrigin = (color: string, stepNumber: number) => {\n return colorContrastFromOrigin(color).find(item => item.step === stepNumber);\n};\n\nexport const colorContrastFromOrigin = (color: string): Array<IColorContrastFromOrigin> => {\n const parsedColorsArray = parseColorValues(color);\n const colors: any = [];\n let calculatedShades: Array<string> = [];\n let calculatedTints: Array<string> = [];\n\n if (parsedColorsArray !== null) {\n for (let i = 0; i < parsedColorsArray.length; i++) {\n calculatedShades = calculateShades(parsedColorsArray[i]);\n calculatedTints = calculateTints(parsedColorsArray[i]);\n }\n\n for (let i = 0; i <= step; i++) {\n colors.push({ step: i * 5, label: `${i * 5}%`, dark: `#${calculatedShades[i]}`, light: `#${calculatedTints[i]}` });\n }\n }\n\n return colors;\n};\n\nconst parseColorValues = (colorValues: any) => {\n let colorValuesArray = colorValues.match(/\\b[0-9A-Fa-f]{3}\\b|[0-9A-Fa-f]{6}\\b/g);\n\n if (colorValuesArray) {\n colorValuesArray = colorValuesArray.map((item: any) => {\n if (item.length === 3) {\n let newItem = item.toString().split('');\n\n newItem = newItem.reduce((acc: any, it: any) => {\n return acc + it + it;\n }, '');\n\n return newItem;\n }\n\n return item;\n });\n }\n\n return colorValuesArray;\n};\n\nconst calculateShades = (colorValue: any) => {\n return calculate(colorValue, rgbShade).concat(\"000000\");\n};\n\nconst calculateTints = (colorValue: any) => {\n return calculate(colorValue, rgbTint).concat(\"ffffff\");\n};\n\nconst calculate = (colorValue: any, shadeOrTint: any) => {\n const color = hexToRGB(colorValue);\n const shadeValues: Array<string> = [];\n\n for (let i = 0; i < step; i++) {\n shadeValues[i] = rgbToHex(shadeOrTint(color, i));\n }\n\n return shadeValues;\n};\n\nconst rgbShade = (rgb: any, i: any) => { return { red: rgb.red * (1 - percent * i), green: rgb.green * (1 - percent * i), blue: rgb.blue * (1 - percent * i) } };\nconst rgbTint = (rgb: any, i: any) => { return { red: rgb.red + (255 - rgb.red) * i * percent, green: rgb.green + (255 - rgb.green) * i * percent, blue: rgb.blue + (255 - rgb.blue) * i * percent } };\n\n\nexport const rgbToHex = (rgb: any) => { return intToHex(rgb.red) + intToHex(rgb.green) + intToHex(rgb.blue) };\nconst hexToRGB = (colorValue: any) => { return { red: parseInt(colorValue.substr(0, 2), 16), green: parseInt(colorValue.substr(2, 2), 16), blue: parseInt(colorValue.substr(4, 2), 16) } };\nconst intToHex = (rgbint: any) => { return pad(Math.min(Math.max(Math.round(rgbint), 0), 255).toString(16), 2) };\n\nconst pad = (number: any, length: any) => {\n let str = '' + number;\n\n while (str.length < length) { str = '0' + str }\n\n return str;\n};\n\nexport const listColorDefine: Array<string> = ['#E62222', '#B81B1B', '#EB4E4E', '#F97316', '#C75C12', '#FA8F45', '#FFB700', '#CC9200', '#FFC533', '#84CC16', '#6AA312', '#9dd645', '#00BC62', '#00A757', '#33DA8A', '#06B6D4', '#1B59C4', '#4E8CF7', '#0EA5E9',\n '#1B59C4', '#4E8CF7', '#226FF5', '#1B59C4', '#4E8CF7', '#6366F1', '#4F52C1', '#8285F4', '#5B04B3', '#49038F', '#7C36C2', '#D946EF', '#AE38BF', '#E16BF2', '#EC4899', '#BD3A7A', '#F06DAD', '#F43F5E', '#C3324B', '#F6657E', '#757380', '#5E5C66', '#918F99',\n '#202020', '#1A1A1A', '#4D4D4D'\n];\n\nexport const GetColorById = (str: string): string => {\n let hashString = 0;\n\n if (!str) {\n return '';\n }\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n\n hashString = ((hashString << 5) - hashString) + char;\n hashString = hashString & hashString;\n }\n\n return listColorDefine[Math.abs(hashString) % listColorDefine.length];\n};\n\n\n","\nimport CryptoES from 'crypto-es';\n\nlet key = '12~@#loqwsxacva(3rdhaq12';\n\nexport const setKeyCrypto3rd = (value: string) => {\n if (value.length !== 24 && value.length !== 32) {\n throw Error(`key.length = ${value.length}; Key phải là 1 chuỗi dài 24 hoặc 32 ký tự`);\n }\n key = value;\n};\n\n\nconst keyStore = () => {\n return key;\n}\n\nexport const encrypt3rd = (plainData: string): string => {\n if (!keyStore()) {\n throw Error(\"lỗi chưa setup key mã hóa\");\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.encrypt(plainData, key, options).toString();\n};\n\nexport const decrypt3rd = (encryptedData: string): string => {\n if (!keyStore()) {\n throw Error(\"lỗi chưa setup key mã hóa\");\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.decrypt(encryptedData, key, options).toString(CryptoES.enc.Utf8);\n};","export abstract class UtilsKeyCodeConstant {\n static readonly MAC_ENTER = 3;\n static readonly BACKSPACE = 8;\n static readonly TAB = 9;\n static readonly NUM_CENTER = 12;\n static readonly ENTER = 13;\n static readonly SHIFT = 16;\n static readonly CONTROL = 17;\n static readonly ALT = 18;\n static readonly PAUSE = 19;\n static readonly CAPS_LOCK = 20;\n static readonly ESCAPE = 27;\n static readonly SPACE = 32;\n static readonly PAGE_UP = 33;\n static readonly PAGE_DOWN = 34;\n static readonly END = 35;\n static readonly HOME = 36;\n static readonly LEFT_ARROW = 37;\n static readonly UP_ARROW = 38;\n static readonly RIGHT_ARROW = 39;\n static readonly DOWN_ARROW = 40;\n static readonly PLUS_SIGN = 43;\n static readonly PRINT_SCREEN = 44;\n static readonly INSERT = 45;\n static readonly DELETE = 46;\n static readonly ZERO = 48;\n static readonly ONE = 49;\n static readonly TWO = 50;\n static readonly THREE = 51;\n static readonly FOUR = 52;\n static readonly FIVE = 53;\n static readonly SIX = 54;\n static readonly SEVEN = 55;\n static readonly EIGHT = 56;\n static readonly NINE = 57;\n static readonly FF_SEMICOLON = 59; // Firefox (Gecko) fires this for semicolon instead of 186\n static readonly FF_EQUALS = 61; // Firefox (Gecko) fires this for equals instead of 187\n static readonly QUESTION_MARK = 63;\n static readonly AT_SIGN = 64;\n static readonly A = 65;\n static readonly B = 66;\n static readonly C = 67;\n static readonly D = 68;\n static readonly E = 69;\n static readonly F = 70;\n static readonly G = 71;\n static readonly H = 72;\n static readonly I = 73;\n static readonly J = 74;\n static readonly K = 75;\n static readonly L = 76;\n static readonly M = 77;\n static readonly N = 78;\n static readonly O = 79;\n static readonly P = 80;\n static readonly Q = 81;\n static readonly R = 82;\n static readonly S = 83;\n static readonly T = 84;\n static readonly U = 85;\n static readonly V = 86;\n static readonly W = 87;\n static readonly X = 88;\n static readonly Y = 89;\n static readonly Z = 90;\n static readonly META = 91; // WIN_KEY_LEFT\n static readonly MAC_WK_CMD_LEFT = 91;\n static readonly MAC_WK_CMD_RIGHT = 93;\n static readonly CONTEXT_MENU = 93;\n static readonly NUMPAD_ZERO = 96;\n static readonly NUMPAD_ONE = 97;\n static readonly NUMPAD_TWO = 98;\n static readonly NUMPAD_THREE = 99;\n static readonly NUMPAD_FOUR = 100;\n static readonly NUMPAD_FIVE = 101;\n static readonly NUMPAD_SIX = 102;\n static readonly NUMPAD_SEVEN = 103;\n static readonly NUMPAD_EIGHT = 104;\n static readonly NUMPAD_NINE = 105;\n static readonly NUMPAD_MULTIPLY = 106;\n static readonly NUMPAD_PLUS = 107;\n static readonly NUMPAD_MINUS = 109;\n static readonly NUMPAD_PERIOD = 110;\n static readonly NUMPAD_DIVIDE = 111;\n static readonly F1 = 112;\n static readonly F2 = 113;\n static readonly F3 = 114;\n static readonly F4 = 115;\n static readonly F5 = 116;\n static readonly F6 = 117;\n static readonly F7 = 118;\n static readonly F8 = 119;\n static readonly F9 = 120;\n static readonly F10 = 121;\n static readonly F11 = 122;\n static readonly F12 = 123;\n static readonly NUM_LOCK = 144;\n static readonly SCROLL_LOCK = 145;\n static readonly FIRST_MEDIA = 166;\n static readonly FF_MINUS = 173;\n static readonly MUTE = 173; // Firefox (Gecko) fires 181 for MUTE\n static readonly VOLUME_DOWN = 174; // Firefox (Gecko) fires 182 for VOLUME_DOWN\n static readonly VOLUME_UP = 175; // Firefox (Gecko) fires 183 for VOLUME_UP\n static readonly FF_MUTE = 181;\n static readonly FF_VOLUME_DOWN = 182;\n static readonly LAST_MEDIA = 183;\n static readonly FF_VOLUME_UP = 183;\n static readonly SEMICOLON = 186; // Firefox (Gecko) fires 59 for SEMICOLON\n static readonly EQUALS = 187; // Firefox (Gecko) fires 61 for EQUALS\n static readonly COMMA = 188;\n static readonly DASH = 189; // Firefox (Gecko) fires 173 for DASH/MINUS\n static readonly PERIOD = 190;\n static readonly SLASH = 191;\n static readonly APOSTROPHE = 192;\n static readonly TILDE = 192;\n static readonly OPEN_SQUARE_BRACKET = 219;\n static readonly BACKSLASH = 220;\n static readonly CLOSE_SQUARE_BRACKET = 221;\n static readonly SINGLE_QUOTE = 222;\n static readonly MAC_META = 224;\n }\n ","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpParameterCodec, HttpParams } from \"@angular/common/http\";\n\nexport const UtilsHttpParamsRequestInstance = <Type>(options?: HttpParamsOptions<Type>, instance?: HttpParams): UtilsHttpParamsRequest<Type> => {\n return new UtilsHttpParamsRequest<Type>(options, instance);\n};\n\nexport class UtilsHttpParamsRequest<Type = { pem: string }> extends HttpParams {\n private params!: HttpParams;\n\n constructor(options?: HttpParamsOptions<Type>, instance?: HttpParams) {\n super(options as any);\n\n if (!instance) {\n this.params = new HttpParams(options);\n\n return;\n }\n\n if (instance instanceof UtilsHttpParamsRequest) {\n this.params = instance.getInstance();\n\n return;\n }\n\n if (instance instanceof HttpParams) {\n this.params = instance;\n\n return;\n }\n }\n\n getInstance(): HttpParams {\n return this.params;\n }\n\n setInstance(instance: HttpParams) {\n if (instance instanceof UtilsHttpParamsRequest) {\n this.params = instance.getInstance();\n\n return;\n }\n\n if (instance instanceof HttpParams) {\n this.params = instance;\n\n return;\n }\n }\n\n override set(param: string, value: string | number | boolean): UtilsHttpParamsRequest {\n this.params = this.params.set(param, value);\n\n return this as UtilsHttpParamsRequest;\n }\n\n override has(param: string): boolean {\n return this.params.has(param);\n }\n\n override get(param: string): string | null {\n return this.params.get(param);\n }\n\n override getAll(param: string): string[] | null {\n return this.params.getAll(param);\n }\n\n override keys(): string[] {\n return this.params.keys();\n }\n\n override append(param: string, value: string | number | boolean): HttpParams {\n this.params = this.params.append(param, value);\n\n return this as HttpParams;\n }\n\n override appendAll(params: { [param: string]: string | number | boolean | ReadonlyArray<string | number | boolean> }): HttpParams {\n this.params = this.params.appendAll(params);\n\n return this as HttpParams;\n }\n\n override delete(param: string, value?: string | number | boolean): UtilsHttpParamsRequest {\n this.params = this.params.delete(param, value);\n\n return this as UtilsHttpParamsRequest;\n }\n\n override toString(): string {\n return this.params.toString();\n }\n}\n\nexport declare interface HttpParamsOptions<Type> {\n fromString?: string;\n fromObject?: TYPE_FROM_OBJECT<Type>;\n encoder?: HttpParameterCodec;\n}\nexport type GET_PATH_VARIABLE<TypePath, TypeOther = unknown> = {\n [Property in keyof TypePath as `pathVariable-${Lowercase<string & Property>}`]: TypePath[Property];\n} & TypeOther;\n\ntype TYPE_FROM_OBJECT<Type> = Type extends undefined | null ? { pem: string } : { pem?: string } & {\n [Property in keyof Type]?: Type[Property];\n};","\nexport class UtilsLanguageConstants {\n public static VI = 'vi';\n public static EN = 'en';\n public static defaultLang = UtilsLanguageConstants.VI;\n};","import { HttpParams } from \"@angular/common/http\";\nimport { md5 } from \"./crypto\";\n\nexport const getKeyCacheByArrayObject = (keyCache: string, argumentsValue?: Array<unknown>): string =>{\n if (!keyCache || !argumentsValue) {\n return '';\n }\n let keyBuild = `${JSON.stringify(argumentsValue.slice(1))}-key-cache-plus`;\n\n if (argumentsValue && argumentsValue[0] instanceof HttpParams) {\n const httpParams = argumentsValue[0];\n const keys = argumentsValue[0].keys().sort((str1, str2) => str1.localeCompare(str2));\n\t\t\tkeys.forEach(key => {\n\t\t\t\t\tkeyBuild = `${keyBuild}${JSON.stringify(httpParams.get(key))}`;\n\t\t\t});\n }\n const keyCachePlus = md5(keyBuild);\n const keyCacheMD5 = md5(keyCache);\n\n return `${keyCacheMD5}-${md5(`${keyCacheMD5}-${keyCachePlus}`)}`;\n}\n\n ","let functionCheck = () => {\n return window.parent !== window.top;\n}\nexport const updateFunctionCheckEmbedFrame = (functionCustom: () => boolean) => {\n functionCheck = functionCustom;\n}\n\nexport const isEmbedFrame = (): boolean => {\n return functionCheck();\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Subject, filter, fromEvent, takeUntil } from \"rxjs\";\nimport { decrypt, encrypt } from \"./crypto\";\nimport { decrypt3rd, encrypt3rd } from \"./crypto-3rd\";\nimport { isEmbedFrame } from \"./function-check-embed-frame\";\nimport { UtilsCache } from \"./cache\";\nexport class UtilsCommunicateMicroKeyGlobal {\n public static KEY_MESSAGE_MODAL = 'LIBS_UI_MODEL_EVENT';\n}\n\nexport class UtilsCommunicateMicro {\n public static readonly PREFIX_TYPE = '3RD_INTEGRATE_MICRO_SITE_';\n private static readonly KEY_GET_ALL_MESSAGE = 'MICRO_SITES_ALL_MESSAGE';\n private static initdEvent?: boolean;\n private static subs: Map<string, Subject<MessageEvent>> = new Map();\n private static allMessageSub: Subject<MessageEvent> = new Subject();\n\n public static initEvent(currentWindow: Window, onDestroy: Subject<void>) {\n if (this.initdEvent) {\n return;\n }\n this.initdEvent = true;\n if (!this.subs.get(UtilsCommunicateMicro.KEY_GET_ALL_MESSAGE)) {\n this.subs.set(UtilsCommunicateMicro.KEY_GET_ALL_MESSAGE, UtilsCommunicateMicro.allMessageSub);\n }\n\n fromEvent<MessageEvent>(currentWindow, 'message').pipe(takeUntil(onDestroy)).subscribe(e => {\n const event = { data: { ...e.data } } as MessageEvent;\n\n const data = event.data;\n const type = data.type;\n\n if (!type) {\n return this.allMessageSub.next(event);\n }\n const sub = UtilsCommunicateMicro.GetMessage(type);\n\n if (!type || !data.response) {\n return;\n }\n try {\n if (type.includes(UtilsCommunicateMicro.PREFIX_TYPE)) {\n\n data.response = JSON.parse(decrypt3rd(data.response));\n sub.next(event);\n this.allMessageSub.next(event);\n\n return;\n }\n data.response = JSON.parse(decrypt(data.response));\n sub.next(event);\n this.allMessageSub.next(event);\n } catch (error) {\n console.log(error);\n sub.next(event);\n this.allMessageSub.next(event);\n }\n });\n\n UtilsCommunicateMicro.GetMessage(UtilsCache.typeKeyClearLocalStorage).pipe(filter(e => e.data.response !== UtilsCache.idService), takeUntil(onDestroy)).subscribe(() => {\n console.log('clear all cache by event');\n UtilsCache.ClearAll();\n });\n }\n\n static PostMessageToParent(data: any) {\n data = this.convertData(data);\n try {\n if (isEmbedFrame()) {\n window?.parent?.postMessage(data, \"*\");\n\n return;\n }\n\n window?.top?.postMessage(data, \"*\");\n } catch (error) {\n console.log(error);\n }\n }\n\n static PostMessageToChildren(data: any) {\n data = this.convertData(data);\n const iframes = document.querySelectorAll(\"iframe\");\n\n Array.from(iframes).forEach(iframe => {\n iframe?.contentWindow?.postMessage(data, '*');\n });\n\n }\n\n static PostMessageToOpener(data: any) {\n if (!window.opener) {\n return;\n }\n data = this.convertData(data);\n\n window.opener.postMessage(data, '*');\n }\n\n private static convertData(data: any) {\n if (!data || !data.type || !data.response) {\n return data;\n }\n data = { ...data };\n const type = data.type;\n\n if (type.includes(this.PREFIX_TYPE)) {\n try {\n JSON.parse(decrypt3rd(data.response));\n\n return data;\n } catch (_) {\n data.response = encrypt3rd(JSON.stringify(data.response));\n\n return data;\n }\n\n }\n try {\n JSON.parse(decrypt(data.response));\n\n return data;\n } catch (_) {\n data.response = encrypt(JSON.stringify(data.response));\n\n return data;\n }\n }\n\n static GetMessage(messageType: string | Array<string>): Subject<MessageEvent> {\n if (!this.initdEvent) {\n throw Error(\"chưa khơi tạo hàm lắng nghe sự kiện, gọi UtilsCommunicateMicro.initEvent(window) tại root component\")\n }\n if (typeof messageType === 'string') {\n let sub = this.subs.get(messageType);\n\n if (!sub) {\n sub = new Subject();\n this.subs.set(messageType, sub);\n\n return sub;\n }\n\n return sub;\n }\n if (!Array.isArray(messageType) || !messageType.length) {\n throw new Error('message type empty');\n }\n if (messageType.length === 1) {\n return this.GetMessage(messageType[0]);\n }\n const types = messageType.sort().join(';');\n\n let sub = this.subs.get(types);\n\n if (sub) {\n return sub;\n }\n\n sub = new Subject();\n this.subs.set(types, sub);\n this.initSubject(sub, messageType);\n\n return sub;\n }\n\n private static initSubject(subRoot: Subject<MessageEvent>, messageType: Array<string>) {\n messageType.forEach(key => {\n this.GetMessage(key).subscribe(e => {\n subRoot.next(e);\n });\n });\n }\n}\n","/* eslint-disable no-async-promise-executor */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { signal } from '@angular/core';\nimport { UtilsCommunicateMicro } from './communicate-micro';\nimport { decrypt, encrypt, md5 } from './crypto';\nimport { getPlatFromBrowser } from './dom';\nimport { isEmbedFrame } from './function-check-embed-frame';\nimport { isNil } from './helpers';\nimport { UtilsLanguageConstants } from './language';\nimport { uuid } from './uuid';\n\nexport class UtilsCache {\n public static readonly CACHE_EXPIRE_TIME_DEFAULT = 5 * 60;\n public static readonly CACHE_EXPIRE_NONE = -1;\n public static readonly idService = uuid();\n public static typeKeyClearLocalStorage = 'LIBS_UI_CLEAR_LOCAL_STORAGE_EVENT';\n\n private static languageKeyCache = 'SR3xQKxHgffiCevPQRralg';\n private static listKeyKeepWhenClearALll = Array<string>();\n private static initdEvent?: boolean;\n private static language = signal<string>(UtilsLanguageConstants.defaultLang);\n private static storage: { [key: string]: unknown };\n private static dbName = 'libs-ui-cache';\n private static itemIndexByKey = 'key';\n private static dbVersion = 1;\n private static db: IDBDatabase | null = null;\n\n public static init(config: { indexedDBName?: string, languageKeyCache?: string, typeKeyClearLocalStorage?: string, listKeyKeepWhenClearAll?: Array<string> }) {\n if (UtilsCache.initdEvent) {\n return;\n }\n UtilsCache.initdEvent = true;\n if (config.indexedDBName) {\n UtilsCache.dbName = config.indexedDBName;\n }\n if (config.typeKeyClearLocalStorage) {\n UtilsCache.typeKeyClearLocalStorage = config.typeKeyClearLocalStorage;\n }\n if (config.listKeyKeepWhenClearAll) {\n UtilsCache.listKeyKeepWhenClearALll = config.listKeyKeepWhenClearAll;\n }\n if (config.languageKeyCache) {\n UtilsCache.languageKeyCache = config.languageKeyCache;\n }\n this.language.set(UtilsCache.Get(UtilsCache.languageKeyCache, UtilsLanguageConstants.defaultLang));\n }\n\n public static setLang(lang: string) {\n if (lang !== UtilsLanguageConstants.VI && lang !== UtilsLanguageConstants.EN) {\n throw Error('Language support vi | en');\n }\n UtilsCache.language.set(lang);\n UtilsCache.Set(UtilsCache.languageKeyCache, lang, UtilsCache.CACHE_EXPIRE_NONE);\n }\n\n public static getLang() {\n return UtilsCache.language();\n }\n\n private static openDB() {\n return new Promise(resolve => {\n const request = indexedDB.open(UtilsCache.dbName, UtilsCache.dbVersion);\n\n request.onupgradeneeded = (event: IDBVersionChangeEvent) => {\n const db = (event.target as IDBOpenDBRequest).result;\n\n if (!db.objectStoreNames.contains(UtilsCache.dbName)) {\n const objectStore = db.createObjectStore(UtilsCache.dbName, { keyPath: UtilsCache.itemIndexByKey, autoIncrement: true });\n\n objectStore.createIndex(UtilsCache.itemIndexByKey, UtilsCache.itemIndexByKey, { unique: true });\n }\n };\n\n request.onsuccess = () => {\n UtilsCache.db = request.result;\n resolve(true);\n };\n\n request.onerror = (event) => {\n console.error('Error opening IndexedDB:', event);\n resolve(false);\n };\n });\n }\n\n private static async getObjectStore() {\n if (!UtilsCache.db) {\n await UtilsCache.openDB();\n }\n const transaction = UtilsCache.db?.transaction([UtilsCache.dbName], 'readwrite');\n if (!transaction) {\n return null;\n }\n\n return transaction.objectStore(UtilsCache.dbName);\n }\n\n private static get LocalStorage(): any {\n try {\n if (typeof window.localStorage !== 'undefined') {\n const OS = getPlatFromBrowser();\n\n if (OS.includes('Safari') && parseFloat(OS.split(' ').pop() || '0') >= 16) {\n\n return this.getLocalStorageFakeOnSafari();\n }\n\n return localStorage;\n }\n\n return this.getLocalStorageFake();\n } catch (error) {\n console.log(error);\n return this.getLocalStorageFake();\n }\n }\n\n private static getLocalStorageFakeOnSafari() {\n if (typeof window.localStorage !== 'undefined' && !UtilsCache.storage && Object.keys(localStorage).length) {\n this.storage = { ...localStorage };\n }\n\n return {\n setItem: (key: string, value: string) => {\n localStorage.setItem(key, value);\n this.storage[key] = value;\n },\n getItem: (key: string) => {\n const value = localStorage.getItem(key);\n\n if (value) {\n return value;\n }\n\n if (!this.storage || isNil(this.storage[key])) {\n return null;\n }\n\n localStorage.setItem(key, this.storage[key] as string);\n\n return this.storage?.[key];\n },\n removeItem: (key: string) => {\n delete this.storage?.[key];\n localStorage.removeItem(key);\n },\n clear: () => {\n this.storage = {};\n localStorage.clear();\n }\n };\n }\n\n private static getLocalStorageFake() {\n if (!UtilsCache.storage) {\n this.storage = {};\n }\n\n return {\n setItem: (key: string, value: unknown) => {\n this.storage[key] = value;\n },\n getItem: (key: string) => {\n return this.storage?.[key];\n },\n removeItem: (key: string) => {\n delete this.storage?.[key];\n },\n clear: () => {\n this.storage = {};\n }\n };\n }\n\n public static async GetAsync<T = any>(key: string, default_value?: any, isKeyMD5 = false): Promise<T> {\n key = isKeyMD5 ? key : md5(key);\n\n return new Promise<T>(async (resolve, reject) => {\n const objectStore = await UtilsCache.getObjectStore();\n\n if (!objectStore) {\n\n return resolve(default_value);\n }\n const request = objectStore.get(key);\n\n request.onsuccess = () => {\n if (!request.result) {\n return resolve(default_value);\n }\n const data = JSON.parse(decrypt(request.result.value));\n\n if (data.expire === UtilsCache.CACHE_EXPIRE_NONE) {\n return resolve(data.json);\n }\n const currentMillisecond = (new Date().valueOf() / 1000);\n\n if (data.expire < currentMillisecond) {\n\n return resolve(default_value);\n }\n\n return resolve(data.json);\n };\n\n request.onerror = () => {\n reject(request.error);\n };\n });\n }\n\n public static Get<T = any>(key: string, default_value?: any): T { // support cho những file không thể inject UtilsCache\n if (!key) {\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n const cachedData = this.LocalStorage.getItem(key);\n\n if (!cachedData) {\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n try {\n const data = JSON.parse(decrypt(cachedData));\n\n if (data.expire === UtilsCache.CACHE_EXPIRE_NONE) {\n return data.value ?? default_value;\n }\n const currentMillisecond = (new Date().valueOf() / 1000);\n\n if (data.expire < currentMillisecond) {\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n\n return data.value;\n\n } catch (error) {\n console.log(error);\n\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n }\n\n public static GetDefaultValueBySpecificKey(key: string, default_value: any) {\n return default_value;\n\n }\n\n public static async SetAsync<T = any>(key: string, value: any, expireTimeBySecond = UtilsCache.CACHE_EXPIRE_TIME_DEFAULT, isKeyMD5 = false): Promise<T> { // support inject UtilsCache\n return new Promise<T>(async (resolve, reject) => {\n const objectStore = await UtilsCache.getObjectStore();\n\n key = isKeyMD5 ? key : md5(key);\n try {\n const currentMillisecond = expireTimeBySecond === UtilsCache.CACHE_EXPIRE_NONE ? UtilsCache.CACHE_EXPIRE_NONE : (new Date().valueOf() / 1000) + expireTimeBySecond;\n const data: any = {\n value: encrypt(JSON.stringify({ json: value, expire: currentMillisecond })),\n };\n data[UtilsCache.itemIndexByKey] = key;\n\n if (!objectStore) {\n return reject(new Error('Can not open object store'));\n }\n const request = objectStore?.put(data);\n request.onsuccess = () => {\n resolve(request.result as any);\n };\n\n request.onerror = () => {\n reject(request.error);\n };\n\n } catch (error) {\n reject(error);\n }\n });\n }\n\n\n static Set(key: string, value: any, expireTimeBySecond = UtilsCache.CACHE_EXPIRE_TIME_DEFAULT): boolean { // support cho những file không inject UtilsCache\n const currentMillisecond = expireTimeBySecond === UtilsCache.CACHE_EXPIRE_NONE ? UtilsCache.CACHE_EXPIRE_NONE : (new Date().valueOf() / 1000) + expireTimeBySecond;\n const data = {\n value: value,\n expire: currentMillisecond\n };\n\n try {\n this.LocalStorage.setItem(key, encrypt(JSON.stringify(data)));\n return true;\n } catch (error) {\n console.log(error);\n return false;\n }\n }\n\n public static async ClearAsync(key: string, isMD5 = false) {\n return new Promise<void>(async (resolve) => {\n const objectStore = await UtilsCache.getObjectStore();\n\n if (!objectStore) {\n return resolve();\n }\n const request = objectStore.delete(isMD5 ? key : md5(key));\n\n request.onsuccess = () => {\n resolve();\n };\n request.onerror = () => {\n resolve();\n };\n });\n }\n\n\n static Clear(key: string) {\n if (key.includes('kc-callback-')) {\n return;\n }\n this.LocalStorage.removeItem(key);\n }\n\n public static ClearAllAsync() {\n return new Promise<void>(async (resolve, reject) => {\n const objectStore = await UtilsCache.getObjectStore();\n\n if (!objectStore) {\n return resolve();\n }\n\n const request = objectStore.clear();\n request.onsuccess = () => {\n console.log('Database deleted successfully');\n resolve();\n };\n\n request.onerror = (event: Event) => {\n console.error('Error deleting database:', (event.target as IDBRequest).error);\n reject((event.target as IDBRequest).error);\n };\n });\n }\n\n static ClearAll() {\n if (isEmbedFrame()) {\n const data = {\n type: UtilsCache.typeKeyClearLocalStorage,\n response: {\n idEvent: this.idService\n }\n };\n UtilsCommunicateMicro.PostMessageToParent(data);\n }\n const keys = [...UtilsCache.listKeyKeepWhenClearALll];\n Object.keys(this.LocalStorage).forEach(key => {\n if (key.includes('kc-callback-')) {\n keys.push(key);\n }\n });\n\n const stores = UtilsCache.GetDataByKeys(Array.from(keys));\n\n this.LocalStorage.clear();\n\n UtilsCache.SetDataByKey(stores);\n }\n\n private static GetDataByKeys(keys: Array<string>) {\n const stores = new Map();\n\n keys.forEach((key: string) => {\n if (key.includes('kc-callback-')) {\n stores.set(key, this.LocalStorage.getItem(key));\n\n return;\n }\n stores.set(key, UtilsCache.Get(key));\n });\n\n return stores;\n }\n\n private static SetDataByKey(stores: Map<string, any>) {\n stores.forEach((value: any, key: string) => {\n if (key.includes('kc-callback-')) {\n this.LocalStorage.setItem(key, value);\n\n return;\n }\n if (key === UtilsCache.languageKeyCache) {\n return UtilsCache.setLang(value);\n }\n UtilsCache.Set(key, value, UtilsCache.CACHE_EXPIRE_NONE);\n });\n }\n\n public static DeleteKeyStartWithAsync(keyCacheStartWith: string, isKeyMD5 = false) {\n return new Promise(async (resolve) => {\n const objectStore = await UtilsCache.getObjectStore();\n\n if (!objectStore) {\n return resolve({});\n }\n\n // Lấy tất cả các keys từ index\n const request = objectStore.getAll();\n\n keyCacheStartWith = isKeyMD5 ? keyCacheStartWith : md5(keyCacheStartWith);\n\n\n request.onsuccess = (e: any) => {\n const data = e.target.result as Array<any>;\n\n if (!Array.isArray(data)) {\n return resolve({});\n }\n\n data.forEach(obj => {\n if (obj[UtilsCache.itemIndexByKey].startsWith(keyCacheStartWith)) {\n UtilsCache.ClearAsync(obj[UtilsCache.itemIndexByKey], true);\n }\n });\n\n return resolve({});\n };\n\n request.onerror = () => {\n return resolve({});\n };\n });\n }\n\n public static DeleteKeyStartWith(keyCache: string, isMD5 = false) {\n keyCache = isMD5 ? md5(keyCache) : keyCache;\n const keys = Object.keys(UtilsCache.LocalStorage);\n\n if (!keys || !keys.length) {\n return;\n }\n\n keys.forEach(key => {\n if (key.startsWith(keyCache)) {\n this.Clear(key);\n }\n });\n }\n\n public static DeleteDatabaseIndexDB(dbName: string) {\n return new Promise((resolve, reject) => {\n const request = indexedDB.deleteDatabase(dbName);\n\n request.onsuccess = () => {\n console.log('Database deleted successfully');\n resolve(true);\n };\n\n request.onerror = (event: Event) => {\n console.error('Error deleting database:', (event.target as IDBRequest).error);\n reject((event.target as IDBRequest).error);\n };\n\n request.onblocked = () => {\n console.warn('Delete request is blocked');\n };\n });\n }\n}\n","import { UtilsCache } from \"./cache\";\nimport { isNil } from \"./helpers\";\nimport { UtilsLanguageConstants } from \"./language\";\n\n\nexport const formatNumber = (value: string | number): string => {\n const lang = UtilsCache.getLang();\n\n if (lang === UtilsLanguageConstants.EN) {\n return `${value}`.replace(/[,]/g, '');\n }\n\n return `${value}`.replace(/[.]/g, '').replace(/[,]/g, '.');\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const viewDataNumberByLanguage = (value: string | number, acceptNegativeValue: boolean | undefined, parseFixed = 1, ignoreFormatSeparator = false, ignoreParseFloat = false): any => {\n const lang = UtilsCache.getLang()\n\n if (!`${value}`.trim()) {\n return '';\n }\n if (isNil(value) || (!acceptNegativeValue && +value <= 0)) {\n return 0;\n }\n if (typeof value === 'string' && !ignoreFormatSeparator) {\n value = formatNumber(value);\n }\n\n const isFloat = value.toString().includes('.');\n const [intStr, floatStr] = value.toString().split('.');\n\n if (!floatStr?.length) {\n parseFixed = 0;\n }\n const round = (value: number, parseFixed: number) => {\n const fixed = Math.pow(10, parseFixed);\n\n return Math.round(value * fixed) / fixed;\n };\n\n if (parseFixed > (floatStr?.length || 0)) {\n const maxParseFixed = (acceptNegativeValue && +value < 0) ? 17 : 16;\n const fixed = maxParseFixed - (intStr?.length || 0);\n\n parseFixed = parseFixed < fixed ? parseFixed : fixed;\n }\n\n if (isFloat && !ignoreParseFloat) {\n value = parseFloat(round(+value, parseFixed).toFixed(parseFixed));\n }\n\n // Xử lý không format dữ liệu phần thập phân\n const valueString = value.toString();\n const index = valueString.indexOf('.');\n\n if (index !== -1 && (parseFixed > 3 || ignoreParseFloat)) {\n let decimalPart = valueString.substring(index + 1, valueString.length);\n let int = valueString.substring(0, index + 1);\n\n if (ignoreParseFloat) {\n decimalPart = decimalPart.substring(0, parseFixed);\n }\n if (lang === UtilsLanguageConstants.EN) {\n int = int.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n\n return `${int}${decimalPart}`;\n }\n int = int.replace('.', ',').replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n\n return `${int}${decimalPart}`;\n }\n if (index === -1 || parseFixed <= 3) {\n if (lang === UtilsLanguageConstants.EN) {\n return value.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n\n return value.toString().replace('.', ',').replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n }\n};","export const emojiPattern = ()=> {\n return /(\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff])/g;\n}\nexport const removeEmoji = (text: string) => {\n if (!text || !text.trim()) {\n return text;\n }\n \n return text.replace(emojiPattern(), '');\n};","export const escapeHtml = (data: string): string => {\n if (!data || typeof data !== 'string') {\n return data;\n }\n\n return data\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n};\n","export const deleteUnicode = (str: string) => {\n str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a');\n str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ|ễ/g, 'e');\n str = str.replace(/ì|í|ị|ỉ|ĩ/g, 'i');\n str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o');\n str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u');\n str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, 'y');\n str = str.replace(/đ/g, 'd');\n str = str.replace(/À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ/g, 'A');\n str = str.replace(/È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ/g, 'E');\n str = str.replace(/Ì|Í|Ị|Ỉ|Ĩ/g, 'I');\n str = str.replace(/Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ/g, 'O');\n str = str.replace(/Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ/g, 'U');\n str = str.replace(/Ỳ|Ý|Ỵ|Ỷ|Ỹ/g, 'Y');\n str = str.replace(/Đ/g, 'D');\n\n str = str.replace(/\\u0300|\\u0301|\\u0303|\\u0309|\\u0323/g, \"\"); // ̀ ́ ̃ ̉ ̣ huyền, sắc, ngã, hỏi, nặng\n str = str.replace(/\\u02C6|\\u0306|\\u031B/g, \"\"); // ˆ ̆ ̛ Â, Ê, Ă, Ơ, Ư\n\n return str.normalize();\n};","const listColorDefine: Array<string> = ['#E62222', '#B81B1B', '#EB4E4E', '#F97316', '#C75C12', '#FA8F45', '#FFB700', '#CC9200', '#FFC533', '#84CC16', '#6AA312', '#9dd645', '#00BC62', '#00A757', '#33DA8A', '#06B6D4', '#1B59C4', '#4E8CF7', '#0EA5E9',\n '#1B59C4', '#4E8CF7', '#226FF5', '#1B59C4', '#4E8CF7', '#6366F1', '#4F52C1', '#8285F4', '#5B04B3', '#49038F', '#7C36C2', '#D946EF', '#AE38BF', '#E16BF2', '#EC4899', '#BD3A7A', '#F06DAD', '#F43F5E', '#C3324B', '#F6657E', '#757380', '#5E5C66', '#918F99',\n '#202020', '#1A1A1A', '#4D4D4D'\n];\n\nexport const getColorById = (str: string): string => {\n let hashString = 0;\n\n if (!str) {\n return '';\n }\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n\n hashString = ((hashString << 5) - hashString) + char;\n hashString = hashString & hashString;\n }\n\n return listColorDefine[Math.abs(hashString) % listColorDefine.length];\n};\n\n","export const ERROR_MESSAGE_EMPTY_VALID = 'i18n_valid_empty_message';\nexport const ERROR_MESSAGE_PATTEN_VALID = 'i18n_valid_pattern_message';\nexport const ERROR_MESSAGE_MIN_VALID = 'i18n_message_error_input_min_value';\nexport const ERROR_MESSAGE_MAX_VALID = 'i18n_message_error_input_max_value';\nexport const ERROR_MESSAGE_MIN_LENGTH = 'i18n_message_error_input_min_length';\nexport const ERROR_MESSAGE_MAX_LENGTH = 'i18n_message_error_input_max_length';\nexport const CHARACTER_DATA_EMPTY = '__';\nexport const DEFAULT_START_PAGE_0 = 'defaultStartPage0';","/* eslint-disable no-useless-escape */\nexport const patternEmail = () => {\n return /^[A-z0-9]+[A-z0-9\\_\\.\\+\\-]*[A-z0-9]@[A-z0-9]+[A-z0-9\\_\\.\\+\\-]*[A-z0-9]\\.[A-z0-9]+[A-z0-9\\_\\.\\+\\-]*[A-z0-9]$/;\n}\nexport const patternUrl = () => {\n return /^(http|https|ftp):(\\/){2}[^\\s]+[.]{1}[^\\s]+$/;\n}\n\nexport const patternHostUrl = () => {\n return /^((https|http|ftp):[/]{2}[^/\\s]+)/;\n}\n\nexport const patternDomain = () => {\n return /^([a-zA-Z0-9])(([a-z0-9-]{1,61})?[a-z0-9]{1})?(\\.[a-z0-9](([a-z0-9-]{1,61})?[a-z0-9]{1})?)?(\\.[a-zA-Z]{2,4})+$/;\n}\n\nexport const patternMobilePhone = () => {\n return /^(\\+?84|0|84)([0-9]{9})$/;\n}\n\nexport const patternPhone = () => {\n return /^(\\+?84|[0-9]|84)([0-9]{2,9})$/;\n}\n\nexport const patternPhoneNormal = () => {\n return /^(\\+?84|[0-9]|84)([0-9]{9,10})$/;\n}\n\nexport const patternNumber = () => {\n return /\\d+/g;\n}\nexport const patternEncodeUri = () => {\n return /%([0-9A-F]{2})/g;\n}\nexport const patternName = () => {\n return /^\\w+[A-Za-z\\s\\d]+$/;\n}\nexport const patternNameUtf8 = () => {\n return /^[ àáảãạăắằẵặẳâầấậẫẩđèéẻẽẹêềếểễệìíỉĩịòóỏõọôồốổỗộơờớởỡợùúủũụưừứửữựỳýỷỹÀÁẢÃẠĂẮẰẴẶẲÂẦẤẬẪẨĐÈÉẺẼẸÊỀẾỂỄỆÌÍỈĨỊÒÓỎÕỌÔỒỐỔỖỘƠỜỚỞỠỢÙÚỦŨỤƯỪỨỬỮỰỲÝỶỸA-Za-z0-9]+$/;\n}\nexport const patternNameSpecial = () => {\n return /[~!@#$%^&*()-+=<>,?\\/\\\\:;\"']/;\n}\nexport const patternNameProfile = () => {\n return /([\\w\\W\\d\\s]+)+/;\n}\nexport const patternEmoji = () => {\n return /(\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff])/g;\n}\nexport const patternRuleFieldReplace = () => {\n return /[{]{2}[a-zA-Z_-]+[}]{2}/g;\n}\nexport const patternGetFieldByRuleFieldReplace = () => {\n return /[a-zA-Z_-]+/g;\n}\n\nexport const patternPem = () => {\n return /^(0|1):([0-9]{1,2}):(\\{\\{path-api\\}\\}):([a-zA-Z0-9\\/]+)$/g;\n}\n\nexport const patternTax = () => {\n return /^([0-9]){10}(-[0-9]{3})?$/;\n}\n\nexport const patternKey = () => {\n return /^([0-9]){10}(-[0-9]{3})?$/;\n}\n\nexport const patternAccount = () => {\n return /^(?=.*@)[a-z0-9@._-]{2,63}$/;\n}\n","export type TYPE_FUNCTION_XSS = (data: string) => Promise<string>;\nlet functionXssFilter: TYPE_FUNCTION_XSS = async (value: string): Promise<string> => {\n return value;\n}\n\nexport const updateFunctionXssFilter = (functionCustom: TYPE_FUNCTION_XSS) => {\n functionXssFilter = functionCustom;\n}\n\nexport const xssFilter: TYPE_FUNCTION_XSS = async (data: string) => {\n return await functionXssFilter(data);\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { signal, TemplateRef, ElementRef, WritableSignal, isSignal } from \"@angular/core\";\nimport { cloneDeep } from \"./helpers\";\n\nexport const convertObjectToSignal = <T = any>(data: any, isCloneDeep = true): T => {\n if (data === null || typeof data !== 'object' || isSignal(data)) {\n return data;\n }\n if (Array.isArray(data)) {\n return signal(data.map(item => convertObjectToSignal(item, isCloneDeep))) as T;\n }\n\n if (data instanceof Map) {\n const mapCopy = new Map();\n Array.from(data.keys()).forEach(key => {\n mapCopy.set(key, convertObjectToSignal(data.get(key), isCloneDeep));\n });\n return signal(mapCopy) as T;\n }\n\n data = signal(isCloneDeep ? { ...data } : data);\n\n for (const key in data()) {\n const value = data()[key];\n if (value instanceof TemplateRef || value instanceof ElementRef || value instanceof Element || value instanceof Date || value instanceof RegExp || value instanceof Set || value instanceof Map) {\n continue;\n }\n if (Object.prototype.hasOwnProperty.call(data(), key)) {\n data()[key] = convertObjectToSignal(value, isCloneDeep);\n }\n }\n\n return data as T;\n};\n\nexport const convertSignalToObject = <T = any>(data: any, isCloneDeep = true): T => {\n if (data === null || (typeof data !== 'function' && typeof data !== 'object')) {\n return data;\n }\n if (isSignal(data)) {\n data = (data as WritableSignal<unknown>)();\n }\n\n\n if (Array.isArray(data)) {\n if (!isSignal(data[0])) {\n return data as T;\n }\n return data.map(item => convertSignalToObject(isCloneDeep ? cloneDeep(item) : item, isCloneDeep)) as T;\n }\n\n\n if (data instanceof Map) {\n const mapCopy = new Map();\n Array.from(data.keys()).forEach(key => {\n mapCopy.set(key, convertSignalToObject(isCloneDeep ? cloneDeep(data.get(key)) : data.get(key), isCloneDeep));\n });\n return mapCopy as T;\n }\n const result: Record<string, any> = isCloneDeep ? {} : data;\n for (const key in data) {\n const value = data[key];\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n result[key] = convertSignalToObject(isCloneDeep ? cloneDeep(value) : value, isCloneDeep);\n }\n }\n\n return result as T;\n};\n","import dayjs from 'dayjs';\n\nimport * as en from 'dayjs/locale/en';\nimport * as vi from 'dayjs/locale/vi';\nimport updateLocale from 'dayjs/plugin/updateLocale';\nimport { UtilsCache } from './cache';\ndayjs.extend(updateLocale);\n\nexport type TYPE_FUNCTION_FORMAT_DATE = (time: string | number | dayjs.Dayjs | undefined | null, format: string, lang?: string) => string;\nlet functionFormatDate: TYPE_FUNCTION_FORMAT_DATE | undefined = undefined;\n\n\nexport const updateFunctionFormatDate = (functionCustom: TYPE_FUNCTION_FORMAT_DATE) => {\n functionFormatDate = functionCustom;\n}\n\nexport const formatDate = (time: string | number | dayjs.Dayjs | undefined | null, format = 'YYYY/MM/DD HH:mm', lang?: string): string => {\n if (!time) {\n return '';\n }\n lang = lang || UtilsCache.getLang();\n if (functionFormatDate) {\n return functionFormatDate(time, format, lang);\n }\n\n time = typeof time === 'number' ? dayjs.unix(time).locale(lang) : dayjs(time).locale(lang);\n updateLocaleDate(lang);\n if (typeof time === 'number') {\n return dayjs.unix(time).format(getFormatData(getTypeByFormat(format), lang));\n }\n\n return dayjs(time).format(getFormatData(getTypeByFormat(format), lang));\n}\n\nconst updateLocaleDate = (lang: string) => {\n if (lang === 'vi') {\n dayjs.locale(vi);\n dayjs.updateLocale('vi', {\n monthsShort: 'Thg 1_Thg 2_Thg 3_Thg 4_Thg 5_Thg 6_Thg 7_Thg 8_Thg 9_Thg 10_Thg 11_Thg 12'.split('_')\n });\n\n return;\n }\n dayjs.locale(en);\n};\n\nconst getTypeByFormat = (format: string): 'dm' | 'dmy' | 'dmy hm' | 'my' | 'dmy hms' => {\n if (format === 'dm' || format === 'dmy' || format === 'dmy hm' || format === 'my') {\n return format;\n }\n\n if (format === 'DD/MM/YYYY' || format === 'YYYY-MM-DD' || format === 'dd/MM/yyyy' || format === 'dd-MM-yyyy' || format === 'dd/mm/yyyy') {\n return 'dmy';\n }\n\n if (format === 'MM-DD' || format === 'dd/MM' || format === 'dd/mm') {\n return 'dm';\n }\n\n if (format === 'M/YYYY' || format === 'YYYY-MM' || format === 'MM/yyyy') {\n return 'my';\n }\n\n if (format === 'YYYY/MM/DD hh:mm:ss' || format === 'dmy hms' || format === 'dd/mm/yyyy hh:mm:ss') {\n return 'dmy hms';\n }\n\n return 'dmy hm';\n};\n\nconst getFormatData = (type: 'dm' | 'dmy' | 'dmy hm' | 'my' | 'dmy hms', lang: string) => {\n switch (type) {\n case 'dm':\n if (lang === 'vi') {\n return 'D MMM';\n }\n\n return 'MMM D';\n\n case 'dmy':\n if (lang === 'vi') {\n return 'D MMM, YYYY';\n }\n\n return 'MMM D, YYYY';\n\n case 'dmy hm':\n if (lang === 'vi') {\n return 'D MMM, YYYY HH:mm';\n }\n\n return 'MMM D, YYYY HH:mm';\n\n case 'my':\n if (lang === 'vi') {\n return 'MMM, YYYY';\n }\n\n return 'MMM YYYY ';\n\n case 'dmy hms':\n if (lang === 'vi') {\n return 'D MMM, YYYY HH:mm:ss';\n }\n\n return 'MMM D, YYYY HH:mm:ss';\n }\n};\n","import { isNil, omitBy } from './helpers';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const endCodeUrl = (objectData: any, isBody: boolean): string => {\n objectData = omitBy(objectData, param => param === '' || isNil(param));\n let res = '';\n\n for (const p in objectData) {\n res += `&${p}=${encodeURIComponent(objectData[p])}`;\n }\n\n return res === '' ? '' : `${isBody ? '' : '?'}${res.substring(1)}`;\n};","export const convertFileToBase64 = (file: File): Promise<string | ArrayBuffer> => {\n return new Promise((resolve) => {\n const reader = new FileReader();\n\n reader.readAsDataURL(file);\n reader.onload = (event) => {\n resolve(event.target?.result ?? '');\n };\n });\n};","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["key","keyStore","listColorDefine"],"mappings":"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"}
|