@jsverse/transloco 7.4.0 → 7.4.1

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/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [7.4.1](https://github.com/ngneat/transloco/compare/transloco-7.4.0...transloco-7.4.1) (2024-05-10)
6
+
7
+ ### Bug Fixes
8
+
9
+ - **transloco:** 🐛 selectTranslate lang should support arrays ([a77c79c](https://github.com/ngneat/transloco/commit/a77c79c3f9a44f57a6dd69c3326053fd1624d62f))
10
+
5
11
  # [7.4.0](https://github.com/ngneat/transloco/compare/transloco-7.3.0...transloco-7.4.0) (2024-05-01)
6
12
 
7
13
  ### Features
@@ -89,9 +89,6 @@ export function toNumber(value) {
89
89
  export function isScopeObject(item) {
90
90
  return item && typeof item.scope === 'string';
91
91
  }
92
- export function isScopeArray(item) {
93
- return Array.isArray(item) && item.every(isScopeObject);
94
- }
95
92
  export function hasInlineLoader(item) {
96
93
  return item && isObject(item.loader);
97
94
  }
@@ -101,4 +98,4 @@ export function unflatten(obj) {
101
98
  export function flatten(obj) {
102
99
  return _flatten(obj, { safe: true });
103
100
  }
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdHJhbnNsb2NvL3NyYy9saWIvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxJQUFJLFFBQVEsRUFBRSxTQUFTLElBQUksVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSXBFLE1BQU0sVUFBVSxRQUFRLENBQUksR0FBTSxFQUFFLElBQWE7SUFDL0MsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNSLE9BQU8sR0FBRyxDQUFDO0tBQ1o7SUFFRCxnRUFBZ0U7SUFDaEUsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQ25ELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xCO0lBRUQsT0FBUSxJQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQVUsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQVEsRUFBRSxJQUFZLEVBQUUsR0FBUTtJQUN2RCxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBRWpCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFbkMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDaEMsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxH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QUFJLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUVsQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDaEUsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDdEI7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQVM7SUFDckMsT0FBTyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUNoRCxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFTO0lBQ3BDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLElBQVM7SUFDdkMsT0FBTyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFnQjtJQUN4QyxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUFnQjtJQUN0QyxPQUFPLFFBQVEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmxhdHRlbiBhcyBfZmxhdHRlbiwgdW5mbGF0dGVuIGFzIF91bmZsYXR0ZW4gfSBmcm9tICdmbGF0JztcblxuaW1wb3J0IHsgUHJvdmlkZXJTY29wZSwgVHJhbnNsYXRpb24gfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbHVlPFQ+KG9iajogVCwgcGF0aDoga2V5b2YgVCkge1xuICBpZiAoIW9iaikge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICAvKiBGb3IgY2FzZXMgd2hlcmUgdGhlIGtleSBpcyBsaWtlOiAnZ2VuZXJhbC5zb21ldGhpbmcudGhpbmcnICovXG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwYXRoKSkge1xuICAgIHJldHVybiBvYmpbcGF0aF07XG4gIH1cblxuICByZXR1cm4gKHBhdGggYXMgc3RyaW5nKS5zcGxpdCgnLicpLnJlZHVjZSgocCwgYykgPT4gcD8uW2NdLCBvYmogYXMgYW55KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFZhbHVlKG9iajogYW55LCBwcm9wOiBzdHJpbmcsIHZhbDogYW55KSB7XG4gIG9iaiA9IHsgLi4ub2JqIH07XG5cbiAgY29uc3Qgc3BsaXQgPSBwcm9wLnNwbGl0KCcuJyk7XG4gIGNvbnN0IGxhc3RJbmRleCA9IHNwbGl0Lmxlbmd0aCAtIDE7XG5cbiAgc3BsaXQucmVkdWNlKChhY2MsIHBhcnQsIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4ID09PSBsYXN0SW5kZXgpIHtcbiAgICAgIGFjY1twYXJ0XSA9IHZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjW3BhcnRdID0gQXJyYXkuaXNBcnJheShhY2NbcGFydF0pXG4gICAgICAgID8gYWNjW3BhcnRdLnNsaWNlKClcbiAgICAgICAgOiB7IC4uLmFjY1twYXJ0XSB9O1xuICAgIH1cblxuICAgIHJldHVybiBhY2MgJiYgYWNjW3BhcnRdO1xuICB9LCBvYmopO1xuXG4gIHJldHVybiBvYmo7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaXplKGNvbGxlY3Rpb246IGFueSk6IG51bWJlciB7XG4gIGlmICghY29sbGVjdGlvbikge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoY29sbGVjdGlvbikpIHtcbiAgICByZXR1cm4gY29sbGVjdGlvbi5sZW5ndGg7XG4gIH1cblxuICBpZiAoaXNPYmplY3QoY29sbGVjdGlvbikpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY29sbGVjdGlvbikubGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIGNvbGxlY3Rpb24gPyBjb2xsZWN0aW9uLmxlbmd0aCA6IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KGNvbGxlY3Rpb246IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gc2l6ZShjb2xsZWN0aW9uKSA9PT0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsOiB1bmtub3duKTogdmFsIGlzIENhbGxhYmxlRnVuY3Rpb24ge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nKHZhbDogdW5rbm93bik6IHZhbCBpcyBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlcih2YWw6IHVua25vd24pOiB2YWwgaXMgbnVtYmVyIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QoaXRlbTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gISFpdGVtICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShpdGVtKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvZXJjZUFycmF5PFQ+KHZhbHVlOiBUIHwgVFtdKTogVFtdO1xuZXhwb3J0IGZ1bmN0aW9uIGNvZXJjZUFycmF5PFQ+KHZhbHVlOiBUIHwgcmVhZG9ubHkgVFtdKTogcmVhZG9ubHkgVFtdO1xuZXhwb3J0IGZ1bmN0aW9uIGNvZXJjZUFycmF5PFQ+KHZhbHVlOiBUIHwgVFtdKTogVFtdIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xufVxuXG4vKlxuICogQGV4YW1wbGVcbiAqXG4gKiBnaXZlbjogcGF0aC10by1oYXBwaW5lc3MgPT4gcGF0aFRvSGFwcGluZXNzXG4gKiBnaXZlbjogcGF0aF90b19oYXBwaW5lc3MgPT4gcGF0aFRvSGFwcGluZXNzXG4gKiBnaXZlbjogcGF0aC10b19oYXBwaW5lc3MgPT4gcGF0aFRvSGFwcGluZXNzXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9DYW1lbENhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyXG4gICAgLnJlcGxhY2UoLyg/Ol5cXHd8W0EtWl18XFxiXFx3KS9nLCAod29yZCwgaW5kZXgpID0+XG4gICAgICBpbmRleCA9PSAwID8gd29yZC50b0xvd2VyQ2FzZSgpIDogd29yZC50b1VwcGVyQ2FzZSgpXG4gICAgKVxuICAgIC5yZXBsYWNlKC9cXHMrfF98LXxcXC8vZywgJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCcm93c2VyKCkge1xuICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05pbCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZTogdW5rbm93bikge1xuICByZXR1cm4gaXNOaWwodmFsdWUpID09PSBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgaWYgKGlzTnVtYmVyKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuXG4gIGlmIChpc1N0cmluZyh2YWx1ZSkgJiYgIWlzTmFOKE51bWJlcih2YWx1ZSkgLSBwYXJzZUZsb2F0KHZhbHVlKSkpIHtcbiAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTY29wZU9iamVjdChpdGVtOiBhbnkpOiBpdGVtIGlzIFByb3ZpZGVyU2NvcGUge1xuICByZXR1cm4gaXRlbSAmJiB0eXBlb2YgaXRlbS5zY29wZSA9PT0gJ3N0cmluZyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Njb3BlQXJyYXkoaXRlbTogYW55KTogaXRlbSBpcyBQcm92aWRlclNjb3BlW10ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShpdGVtKSAmJiBpdGVtLmV2ZXJ5KGlzU2NvcGVPYmplY3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzSW5saW5lTG9hZGVyKGl0ZW06IGFueSk6IGl0ZW0gaXMgUHJvdmlkZXJTY29wZSB7XG4gIHJldHVybiBpdGVtICYmIGlzT2JqZWN0KGl0ZW0ubG9hZGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuZmxhdHRlbihvYmo6IFRyYW5zbGF0aW9uKTogVHJhbnNsYXRpb24ge1xuICByZXR1cm4gX3VuZmxhdHRlbihvYmopO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbihvYmo6IFRyYW5zbGF0aW9uKTogVHJhbnNsYXRpb24ge1xuICByZXR1cm4gX2ZsYXR0ZW4ob2JqLCB7IHNhZmU6IHRydWUgfSk7XG59XG4iXX0=
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdHJhbnNsb2NvL3NyYy9saWIvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxJQUFJLFFBQVEsRUFBRSxTQUFTLElBQUksVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSXBFLE1BQU0sVUFBVSxRQUFRLENBQUksR0FBTSxFQUFFLElBQWE7SUFDL0MsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNSLE9BQU8sR0FBRyxDQUFDO0tBQ1o7SUFFRCxnRUFBZ0U7SUFDaEUsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQ25ELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xCO0lBRUQsT0FBUSxJQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQVUsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQVEsRUFBRSxJQUFZLEVBQUUsR0FBUTtJQUN2RCxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBRWpCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFbkMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDaEMsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxH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QUFJLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUVsQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDaEUsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDdEI7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQVM7SUFDckMsT0FBTyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUNoRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxJQUFTO0lBQ3ZDLE9BQU8sSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBZ0I7SUFDeEMsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekIsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsR0FBZ0I7SUFDdEMsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZsYXR0ZW4gYXMgX2ZsYXR0ZW4sIHVuZmxhdHRlbiBhcyBfdW5mbGF0dGVuIH0gZnJvbSAnZmxhdCc7XG5cbmltcG9ydCB7IFByb3ZpZGVyU2NvcGUsIFRyYW5zbGF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZTxUPihvYmo6IFQsIHBhdGg6IGtleW9mIFQpIHtcbiAgaWYgKCFvYmopIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgLyogRm9yIGNhc2VzIHdoZXJlIHRoZSBrZXkgaXMgbGlrZTogJ2dlbmVyYWwuc29tZXRoaW5nLnRoaW5nJyAqL1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcGF0aCkpIHtcbiAgICByZXR1cm4gb2JqW3BhdGhdO1xuICB9XG5cbiAgcmV0dXJuIChwYXRoIGFzIHN0cmluZykuc3BsaXQoJy4nKS5yZWR1Y2UoKHAsIGMpID0+IHA/LltjXSwgb2JqIGFzIGFueSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRWYWx1ZShvYmo6IGFueSwgcHJvcDogc3RyaW5nLCB2YWw6IGFueSkge1xuICBvYmogPSB7IC4uLm9iaiB9O1xuXG4gIGNvbnN0IHNwbGl0ID0gcHJvcC5zcGxpdCgnLicpO1xuICBjb25zdCBsYXN0SW5kZXggPSBzcGxpdC5sZW5ndGggLSAxO1xuXG4gIHNwbGl0LnJlZHVjZSgoYWNjLCBwYXJ0LCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCA9PT0gbGFzdEluZGV4KSB7XG4gICAgICBhY2NbcGFydF0gPSB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjY1twYXJ0XSA9IEFycmF5LmlzQXJyYXkoYWNjW3BhcnRdKVxuICAgICAgICA/IGFjY1twYXJ0XS5zbGljZSgpXG4gICAgICAgIDogeyAuLi5hY2NbcGFydF0gfTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjICYmIGFjY1twYXJ0XTtcbiAgfSwgb2JqKTtcblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2l6ZShjb2xsZWN0aW9uOiBhbnkpOiBudW1iZXIge1xuICBpZiAoIWNvbGxlY3Rpb24pIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGNvbGxlY3Rpb24pKSB7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb24ubGVuZ3RoO1xuICB9XG5cbiAgaWYgKGlzT2JqZWN0KGNvbGxlY3Rpb24pKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbGxlY3Rpb24pLmxlbmd0aDtcbiAgfVxuXG4gIHJldHVybiBjb2xsZWN0aW9uID8gY29sbGVjdGlvbi5sZW5ndGggOiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShjb2xsZWN0aW9uOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNpemUoY29sbGVjdGlvbikgPT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbDogdW5rbm93bik6IHZhbCBpcyBDYWxsYWJsZUZ1bmN0aW9uIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyh2YWw6IHVua25vd24pOiB2YWwgaXMgc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIodmFsOiB1bmtub3duKTogdmFsIGlzIG51bWJlciB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KGl0ZW06IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuICEhaXRlbSAmJiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaXRlbSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb2VyY2VBcnJheTxUPih2YWx1ZTogVCB8IFRbXSk6IFRbXTtcbmV4cG9ydCBmdW5jdGlvbiBjb2VyY2VBcnJheTxUPih2YWx1ZTogVCB8IHJlYWRvbmx5IFRbXSk6IHJlYWRvbmx5IFRbXTtcbmV4cG9ydCBmdW5jdGlvbiBjb2VyY2VBcnJheTxUPih2YWx1ZTogVCB8IFRbXSk6IFRbXSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbn1cblxuLypcbiAqIEBleGFtcGxlXG4gKlxuICogZ2l2ZW46IHBhdGgtdG8taGFwcGluZXNzID0+IHBhdGhUb0hhcHBpbmVzc1xuICogZ2l2ZW46IHBhdGhfdG9faGFwcGluZXNzID0+IHBhdGhUb0hhcHBpbmVzc1xuICogZ2l2ZW46IHBhdGgtdG9faGFwcGluZXNzID0+IHBhdGhUb0hhcHBpbmVzc1xuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ2FtZWxDYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0clxuICAgIC5yZXBsYWNlKC8oPzpeXFx3fFtBLVpdfFxcYlxcdykvZywgKHdvcmQsIGluZGV4KSA9PlxuICAgICAgaW5kZXggPT0gMCA/IHdvcmQudG9Mb3dlckNhc2UoKSA6IHdvcmQudG9VcHBlckNhc2UoKVxuICAgIClcbiAgICAucmVwbGFjZSgvXFxzK3xffC18XFwvL2csICcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQnJvd3NlcigpIHtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOaWwodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudWxsIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluZWQodmFsdWU6IHVua25vd24pIHtcbiAgcmV0dXJuIGlzTmlsKHZhbHVlKSA9PT0gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b051bWJlcih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogbnVtYmVyIHwgbnVsbCB7XG4gIGlmIChpc051bWJlcih2YWx1ZSkpIHJldHVybiB2YWx1ZTtcblxuICBpZiAoaXNTdHJpbmcodmFsdWUpICYmICFpc05hTihOdW1iZXIodmFsdWUpIC0gcGFyc2VGbG9hdCh2YWx1ZSkpKSB7XG4gICAgcmV0dXJuIE51bWJlcih2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2NvcGVPYmplY3QoaXRlbTogYW55KTogaXRlbSBpcyBQcm92aWRlclNjb3BlIHtcbiAgcmV0dXJuIGl0ZW0gJiYgdHlwZW9mIGl0ZW0uc2NvcGUgPT09ICdzdHJpbmcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzSW5saW5lTG9hZGVyKGl0ZW06IGFueSk6IGl0ZW0gaXMgUHJvdmlkZXJTY29wZSB7XG4gIHJldHVybiBpdGVtICYmIGlzT2JqZWN0KGl0ZW0ubG9hZGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuZmxhdHRlbihvYmo6IFRyYW5zbGF0aW9uKTogVHJhbnNsYXRpb24ge1xuICByZXR1cm4gX3VuZmxhdHRlbihvYmopO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbihvYmo6IFRyYW5zbGF0aW9uKTogVHJhbnNsYXRpb24ge1xuICByZXR1cm4gX2ZsYXR0ZW4ob2JqLCB7IHNhZmU6IHRydWUgfSk7XG59XG4iXX0=
@@ -3,7 +3,7 @@ import { BehaviorSubject, catchError, combineLatest, EMPTY, forkJoin, from, map,
3
3
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
4
  import { DefaultLoader, TRANSLOCO_LOADER, } from './transloco.loader';
5
5
  import { TRANSLOCO_TRANSPILER, } from './transloco.transpiler';
6
- import { flatten, isEmpty, isNil, isScopeArray, isScopeObject, isString, size, toCamelCase, unflatten, } from './helpers';
6
+ import { flatten, isEmpty, isNil, isScopeObject, isString, size, toCamelCase, unflatten, } from './helpers';
7
7
  import { TRANSLOCO_CONFIG } from './transloco.config';
8
8
  import { TRANSLOCO_MISSING_HANDLER, } from './transloco-missing-handler';
9
9
  import { TRANSLOCO_INTERCEPTOR, } from './transloco.interceptor';
@@ -198,9 +198,10 @@ export class TranslocoService {
198
198
  if (isNil(lang)) {
199
199
  return this.langChanges$.pipe(switchMap((lang) => load(lang)));
200
200
  }
201
- if (isScopeArray(lang) || isScopeObject(lang)) {
201
+ lang = Array.isArray(lang) ? lang[0] : lang;
202
+ if (isScopeObject(lang)) {
202
203
  // it's a scope object.
203
- const providerScope = Array.isArray(lang) ? lang[0] : lang;
204
+ const providerScope = lang;
204
205
  lang = providerScope.scope;
205
206
  inlineLoader = resolveInlineLoader(providerScope, providerScope.scope);
206
207
  }
@@ -573,4 +574,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
573
574
  type: Inject,
574
575
  args: [TRANSLOCO_FALLBACK_STRATEGY]
575
576
  }] }] });
576
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsb2NvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3RyYW5zbG9jby9zcmMvbGliL3RyYW5zbG9jby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixhQUFhLEVBQ2IsS0FBSyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osR0FBRyxFQUVILEVBQUUsRUFDRixLQUFLLEVBQ0wsV0FBVyxFQUNYLE9BQU8sRUFDUCxTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUNMLGFBQWEsRUFDYixnQkFBZ0IsR0FFakIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsb0JBQW9CLEdBRXJCLE1BQU0sd0JBQXdCLENBQUM7QUFjaEMsT0FBTyxFQUNMLE9BQU8sRUFDUCxPQUFPLEVBQ1AsS0FBSyxFQUNMLFlBQVksRUFDWixhQUFhLEVBQ2IsUUFBUSxFQUNSLElBQUksRUFDSixXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUIsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RSxPQUFPLEVBQ0wseUJBQXlCLEdBRzFCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUNMLHFCQUFxQixHQUV0QixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCwyQkFBMkIsR0FFNUIsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsbUJBQW1CLEdBQ3BCLE1BQU0sVUFB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QW51QlUsZ0JBQWdCLGtCQW1CTCxnQkFBZ0IsNkJBQzVCLG9CQUFvQixhQUNwQix5QkFBeUIsYUFFekIscUJBQXFCLGFBQ3JCLGdCQUFnQixhQUNoQiwyQkFBMkI7MkdBekIxQixnQkFBZ0IsY0FESCxNQUFNOzsyRkFDbkIsZ0JBQWdCO2tCQUQ1QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBb0I3QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGdCQUFnQjs7MEJBQ25DLE1BQU07MkJBQUMsb0JBQW9COzswQkFDM0IsTUFBTTsyQkFBQyx5QkFBeUI7OzBCQUVoQyxNQUFNOzJCQUFDLHFCQUFxQjs7MEJBQzVCLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFDdkIsTUFBTTsyQkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY2F0Y2hFcnJvcixcbiAgY29tYmluZUxhdGVzdCxcbiAgRU1QVFksXG4gIGZvcmtKb2luLFxuICBmcm9tLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICByZXRyeSxcbiAgc2hhcmVSZXBsYXksXG4gIFN1YmplY3QsXG4gIHN3aXRjaE1hcCxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuaW1wb3J0IHtcbiAgRGVmYXVsdExvYWRlcixcbiAgVFJBTlNMT0NPX0xPQURFUixcbiAgVHJhbnNsb2NvTG9hZGVyLFxufSBmcm9tICcuL3RyYW5zbG9jby5sb2FkZXInO1xuaW1wb3J0IHtcbiAgVFJBTlNMT0NPX1RSQU5TUElMRVIsXG4gIFRyYW5zbG9jb1RyYW5zcGlsZXIsXG59IGZyb20gJy4vdHJhbnNsb2NvLnRyYW5zcGlsZXInO1xuaW1wb3J0IHtcbiAgQXZhaWxhYmxlTGFuZ3MsXG4gIEhhc2hNYXAsXG4gIElubGluZUxvYWRlcixcbiAgTGFuZ0RlZmluaXRpb24sXG4gIExvYWRPcHRpb25zLFxuICBTZXRUcmFuc2xhdGlvbk9wdGlvbnMsXG4gIFRyYW5zbGF0ZU9iamVjdFBhcmFtcyxcbiAgVHJhbnNsYXRlUGFyYW1zLFxuICBUcmFuc2xhdGlvbixcbiAgVHJhbnNsb2NvRXZlbnRzLFxuICBUcmFuc2xvY29TY29wZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICBmbGF0dGVuLFxuICBpc0VtcHR5LFxuICBpc05pbCxcbiAgaXNTY29wZUFycmF5LFxuICBpc1Njb3BlT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgc2l6ZSxcbiAgdG9DYW1lbENhc2UsXG4gIHVuZmxhdHRlbixcbn0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IFRSQU5TTE9DT19DT05GSUcsIFRyYW5zbG9jb0NvbmZpZyB9IGZyb20gJy4vdHJhbnNsb2NvLmNvbmZpZyc7XG5pbXBvcnQge1xuICBUUkFOU0xPQ09fTUlTU0lOR19IQU5ETEVSLFxuICBUcmFuc2xvY29NaXNzaW5nSGFuZGxlcixcbiAgVHJhbnNsb2NvTWlzc2luZ0hhbmRsZXJEYXRhLFxufSBmcm9tICcuL3RyYW5zbG9jby1taXNzaW5nLWhhbmRsZXInO1xuaW1wb3J0IHtcbiAgVFJBTlNMT0NPX0lOVEVSQ0VQVE9SLFxuICBUcmFuc2xvY29JbnRlcmNlcHRvcixcbn0gZnJvbSAnLi90cmFuc2xvY28uaW50ZXJjZXB0b3InO1xuaW1wb3J0IHtcbiAgVFJBTlNMT0NPX0ZBTExCQUNLX1NUUkFURUdZLFxuICBUcmFuc2xvY29GYWxsYmFja1N0cmF0ZWd5LFxufSBmcm9tICcuL3RyYW5zbG9jby1mYWxsYmFjay1zdHJhdGVneSc7XG5pbXBvcnQge1xuICBnZXRFdmVudFBheWxvYWQsXG4gIGdldExhbmdGcm9tU2NvcGUsXG4gIGdldFNjb3BlRnJvbUxhbmcsXG4gIHJlc29sdmVJbmxpbmVMb2FkZXIsXG59IGZyb20gJy4vc2hhcmVkJztcbmltcG9ydCB7IGdldEZhbGxiYWNrc0xvYWRlcnMgfSBmcm9tICcuL2dldC1mYWxsYmFja3MtbG9hZGVycyc7XG5pbXBvcnQgeyByZXNvbHZlTG9hZGVyIH0gZnJvbSAnLi9yZXNvbHZlLWxvYWRlcic7XG5cbmxldCBzZXJ2aWNlOiBUcmFuc2xvY29TZXJ2aWNlO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlPFQgPSBzdHJpbmc+KFxuICBrZXk6IFRyYW5zbGF0ZVBhcmFtcyxcbiAgcGFyYW1zOiBIYXNoTWFwID0ge30sXG4gIGxhbmc/OiBzdHJpbmdcbik6IFQge1xuICByZXR1cm4gc2VydmljZS50cmFuc2xhdGU8VD4oa2V5LCBwYXJhbXMsIGxhbmcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlT2JqZWN0PFQ+KFxuICBrZXk6IFRyYW5zbGF0ZVBhcmFtcyxcbiAgcGFyYW1zOiBIYXNoTWFwID0ge30sXG4gIGxhbmc/OiBzdHJpbmdcbik6IFQgfCBUW10ge1xuICByZXR1cm4gc2VydmljZS50cmFuc2xhdGVPYmplY3Q8VD4oa2V5LCBwYXJhbXMsIGxhbmcpO1xufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFRyYW5zbG9jb1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBsYW5nQ2hhbmdlcyQ6IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICBwcml2YXRlIHRyYW5zbGF0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBUcmFuc2xhdGlvbj4oKTtcbiAgcHJpdmF0ZSBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBPYnNlcnZhYmxlPFRyYW5zbGF0aW9uPj4oKTtcbiAgcHJpdmF0ZSBmaXJzdEZhbGxiYWNrTGFuZzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGRlZmF1bHRMYW5nID0gJyc7XG4gIHByaXZhdGUgYXZhaWxhYmxlTGFuZ3M6IEF2YWlsYWJsZUxhbmdzID0gW107XG4gIHByaXZhdGUgaXNSZXNvbHZlZE1pc3NpbmdPbmNlID0gZmFsc2U7XG4gIHByaXZhdGUgbGFuZzogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz47XG4gIHByaXZhdGUgZmFpbGVkTGFuZ3MgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBldmVudHMgPSBuZXcgU3ViamVjdDxUcmFuc2xvY29FdmVudHM+KCk7XG5cbiAgZXZlbnRzJCA9IHRoaXMuZXZlbnRzLmFzT2JzZXJ2YWJsZSgpO1xuICByZWFkb25seSBjb25maWc6IFRyYW5zbG9jb0NvbmZpZyAmIHtcbiAgICBzY29wZU1hcHBpbmc/OiBIYXNoTWFwPHN0cmluZz47XG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChUUkFOU0xPQ09fTE9BREVSKSBwcml2YXRlIGxvYWRlcjogVHJhbnNsb2NvTG9hZGVyLFxuICAgIEBJbmplY3QoVFJBTlNMT0NPX1RSQU5TUElMRVIpIHByaXZhdGUgcGFyc2VyOiBUcmFuc2xvY29UcmFuc3BpbGVyLFxuICAgIEBJbmplY3QoVFJBTlNMT0NPX01JU1NJTkdfSEFORExFUilcbiAgICBwcml2YXRlIG1pc3NpbmdIYW5kbGVyOiBUcmFuc2xvY29NaXNzaW5nSGFuZGxlcixcbiAgICBASW5qZWN0KFRSQU5TTE9DT19JTlRFUkNFUFRPUikgcHJpdmF0ZSBpbnRlcmNlcHRvcjogVHJhbnNsb2NvSW50ZXJjZXB0b3IsXG4gICAgQEluamVjdChUUkFOU0xPQ09fQ09ORklHKSB1c2VyQ29uZmlnOiBUcmFuc2xvY29Db25maWcsXG4gICAgQEluamVjdChUUkFOU0xPQ09fRkFMTEJBQ0tfU1RSQVRFR1kpXG4gICAgcHJpdmF0ZSBmYWxsYmFja1N0cmF0ZWd5OiBUcmFuc2xvY29GYWxsYmFja1N0cmF0ZWd5XG4gICkge1xuICAgIGlmICghdGhpcy5sb2FkZXIpIHtcbiAgICAgIHRoaXMubG9hZGVyID0gbmV3IERlZmF1bHRMb2FkZXIodGhpcy50cmFuc2xhdGlvbnMpO1xuICAgIH1cbiAgICBzZXJ2aWNlID0gdGhpcztcbiAgICB0aGlzLmNvbmZpZyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodXNlckNvbmZpZykpO1xuXG4gICAgdGhpcy5zZXRBdmFpbGFibGVMYW5ncyh0aGlzLmNvbmZpZy5hdmFpbGFibGVMYW5ncyB8fCBbXSk7XG4gICAgdGhpcy5zZXRGYWxsYmFja0xhbmdGb3JNaXNzaW5nVHJhbnNsYXRpb24odGhpcy5jb25maWcpO1xuICAgIHRoaXMuc2V0RGVmYXVsdExhbmcodGhpcy5jb25maWcuZGVmYXVsdExhbmcpO1xuICAgIHRoaXMubGFuZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih0aGlzLmdldERlZmF1bHRMYW5nKCkpO1xuICAgIC8vIERvbid0IHVzZSBkaXN0aW5jdFVudGlsQ2hhbmdlZCBhcyB3ZSBuZWVkIHRoZSBhYmlsaXR5IHRvIHVwZGF0ZVxuICAgIC8vIHRoZSB2YWx1ZSB3aGVuIHVzaW5nIHNldFRyYW5zbGF0aW9uIG9yIHNldFRyYW5zbGF0aW9uS2V5c1xuICAgIHRoaXMubGFuZ0NoYW5nZXMkID0gdGhpcy5sYW5nLmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiB3ZSBoYXZlIGEgZmFpbHVyZSwgd2Ugd2FudCB0byBkZWZpbmUgdGhlIG5leHQgbGFuZ3VhZ2UgdGhhdCBzdWNjZWVkZWQgYXMgdGhlIGFjdGl2ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgIGlmIChlLnR5cGUgPT09ICd0cmFuc2xhdGlvbkxvYWRTdWNjZXNzJyAmJiBlLndhc0ZhaWx1cmUpIHtcbiAgICAgICAgdGhpcy5zZXRBY3RpdmVMYW5nKGUucGF5bG9hZC5sYW5nTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXREZWZhdWx0TGFuZygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0TGFuZztcbiAgfVxuXG4gIHNldERlZmF1bHRMYW5nKGxhbmc6IHN0cmluZykge1xuICAgIHRoaXMuZGVmYXVsdExhbmcgPSBsYW5nO1xuICB9XG5cbiAgZ2V0QWN0aXZlTGFuZygpIHtcbiAgICByZXR1cm4gdGhpcy5sYW5nLmdldFZhbHVlKCk7XG4gIH1cblxuICBzZXRBY3RpdmVMYW5nKGxhbmc6IHN0cmluZykge1xuICAgIHRoaXMucGFyc2VyLm9uTGFuZ0NoYW5nZWQ/LihsYW5nKTtcbiAgICB0aGlzLmxhbmcubmV4dChsYW5nKTtcbiAgICB0aGlzLmV2ZW50cy5uZXh0KHtcbiAgICAgIHR5cGU6ICdsYW5nQ2hhbmdlZCcsXG4gICAgICBwYXlsb2FkOiBnZXRFdmVudFBheWxvYWQobGFuZyksXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRBdmFpbGFibGVMYW5ncyhsYW5nczogQXZhaWxhYmxlTGFuZ3MpIHtcbiAgICB0aGlzLmF2YWlsYWJsZUxhbmdzID0gbGFuZ3M7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYXZhaWxhYmxlIGxhbmd1YWdlcy5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogQW4gYXJyYXkgb2YgdGhlIGF2YWlsYWJsZSBsYW5ndWFnZXMuIENhbiBiZSBlaXRoZXIgYSBgc3RyaW5nW11gIG9yIGEgYHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W11gXG4gICAqIGRlcGVuZGluZyBvbiBob3cgdGhlIGF2YWlsYWJsZSBsYW5ndWFnZXMgYXJlIHNldCBpbiB5b3VyIG1vZHVsZS5cbiAgICovXG4gIGdldEF2YWlsYWJsZUxhbmdzKCkge1xuICAgIHJldHVybiB0aGlzLmF2YWlsYWJsZUxhbmdzO1xuICB9XG5cbiAgbG9hZChwYXRoOiBzdHJpbmcsIG9wdGlvbnM6IExvYWRPcHRpb25zID0ge30pOiBPYnNlcnZhYmxlPFRyYW5zbGF0aW9uPiB7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5jYWNoZS5nZXQocGF0aCk7XG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICB9XG5cbiAgICBsZXQgbG9hZFRyYW5zbGF0aW9uOiBPYnNlcnZhYmxlPFxuICAgICAgVHJhbnNsYXRpb24gfCB7IHRyYW5zbGF0aW9uOiBUcmFuc2xhdGlvbjsgbGFuZzogc3RyaW5nIH1bXVxuICAgID47XG4gICAgY29uc3QgaXNTY29wZSA9IHRoaXMuX2lzTGFuZ1Njb3BlZChwYXRoKTtcbiAgICBsZXQgc2NvcGU6IHN0cmluZztcbiAgICBpZiAoaXNTY29wZSkge1xuICAgICAgc2NvcGUgPSBnZXRTY29wZUZyb21MYW5nKHBhdGgpO1xuICAgIH1cblxuICAgIGNvbnN0IGxvYWRlcnNPcHRpb25zID0ge1xuICAgICAgcGF0aCxcbiAgICAgIG1haW5Mb2FkZXI6IHRoaXMubG9hZGVyLFxuICAgICAgaW5saW5lTG9hZGVyOiBvcHRpb25zLmlubGluZUxvYWRlcixcbiAgICAgIGRhdGE6IGlzU2NvcGUgPyB7IHNjb3BlOiBzY29wZSEgfSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMudXNlRmFsbGJhY2tUcmFuc2xhdGlvbihwYXRoKSkge1xuICAgICAgLy8gaWYgdGhlIHBhdGggaXMgc2NvcGUgdGhlIGZhbGxiYWNrIHNob3VsZCBiZSBgc2NvcGUvZmFsbGJhY2tMYW5nYDtcbiAgICAgIGNvbnN0IGZhbGxiYWNrID0gaXNTY29wZVxuICAgICAgICA/IGAke3Njb3BlIX0vJHt0aGlzLmZpcnN0RmFsbGJhY2tMYW5nfWBcbiAgICAgICAgOiB0aGlzLmZpcnN0RmFsbGJhY2tMYW5nO1xuXG4gICAgICBjb25zdCBsb2FkZXJzID0gZ2V0RmFsbGJhY2tzTG9hZGVycyh7XG4gICAgICAgIC4uLmxvYWRlcnNPcHRpb25zLFxuICAgICAgICBmYWxsYmFja1BhdGg6IGZhbGxiYWNrISxcbiAgICAgIH0pO1xuICAgICAgbG9hZFRyYW5zbGF0aW9uID0gZm9ya0pvaW4obG9hZGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxvYWRlciA9IHJlc29sdmVMb2FkZXIobG9hZGVyc09wdGlvbnMpO1xuICAgICAgbG9hZFRyYW5zbGF0aW9uID0gZnJvbShsb2FkZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IGxvYWQkID0gbG9hZFRyYW5zbGF0aW9uLnBpcGUoXG4gICAgICByZXRyeSh0aGlzLmNvbmZpZy5mYWlsZWRSZXRyaWVzKSxcbiAgICAgIHRhcCgodHJhbnNsYXRpb24pID0+IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodHJhbnNsYXRpb24pKSB7XG4gICAgICAgICAgdHJhbnNsYXRpb24uZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVTdWNjZXNzKHQubGFuZywgdC50cmFuc2xhdGlvbik7XG4gICAgICAgICAgICAvLyBTYXZlIHRoZSBmYWxsYmFjayBpbiBjYWNoZSBzbyB3ZSdsbCBub3QgY3JlYXRlIGEgcmVkdW5kYW50IHJlcXVlc3RcbiAgICAgICAgICAgIGlmICh0LmxhbmcgIT09IHBhdGgpIHtcbiAgICAgICAgICAgICAgdGhpcy5jYWNoZS5zZXQodC5sYW5nLCBvZih7fSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZVN1Y2Nlc3MocGF0aCwgdHJhbnNsYXRpb24pO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLnByb2RNb2RlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGxvYWQgXCIke3BhdGh9XCJgLCBlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVGYWlsdXJlKHBhdGgsIG9wdGlvbnMpO1xuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG5cbiAgICB0aGlzLmNhY2hlLnNldChwYXRoLCBsb2FkJCk7XG5cbiAgICByZXR1cm4gbG9hZCQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaW5zdGFudCB0cmFuc2xhdGVkIHZhbHVlIG9mIGEga2V5XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIHRyYW5zbGF0ZTxzdHJpbmc+KCdoZWxsbycpXG4gICAqIHRyYW5zbGF0ZSgnaGVsbG8nLCB7IHZhbHVlOiAndmFsdWUnIH0pXG4gICAqIHRyYW5zbGF0ZTxzdHJpbmdbXT4oWydoZWxsbycsICdrZXknXSlcbiAgICogdHJhbnNsYXRlKCdoZWxsbycsIHsgfSwgJ2VuJylcbiAgICogdHJhbnNsYXRlKCdzY29wZS5zb21lS2V5JywgeyB9LCAnZW4nKVxuICAgKi9cbiAgdHJhbnNsYXRlPFQgPSBzdHJpbmc+KFxuICAgIGtleTogVHJhbnNsYXRlUGFyYW1zLFxuICAgIHBhcmFtczogSGFzaE1hcCA9IHt9LFxuICAgIGxhbmcgPSB0aGlzLmdldEFjdGl2ZUxhbmcoKVxuICApOiBUIHtcbiAgICBpZiAoIWtleSkgcmV0dXJuIGtleSBhcyBhbnk7XG5cbiAgICBjb25zdCB7IHNjb3BlLCByZXNvbHZlTGFuZyB9ID0gdGhpcy5yZXNvbHZlTGFuZ0FuZFNjb3BlKGxhbmcpO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSkge1xuICAgICAgcmV0dXJuIGtleS5tYXAoKGspID0+XG4gICAgICAgIHRoaXMudHJhbnNsYXRlKHNjb3BlID8gYCR7c2NvcGV9LiR7a31gIDogaywgcGFyYW1zLCByZXNvbHZlTGFuZylcbiAgICAgICkgYXMgYW55O1xuICAgIH1cblxuICAgIGtleSA9IHNjb3BlID8gYCR7c2NvcGV9LiR7a2V5fWAgOiBrZXk7XG5cbiAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHRoaXMuZ2V0VHJhbnNsYXRpb24ocmVzb2x2ZUxhbmcpO1xuICAgIGNvbnN0IHZhbHVlID0gdHJhbnNsYXRpb25ba2V5XTtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVNaXNzaW5nS2V5KGtleSwgdmFsdWUsIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLnRyYW5zcGlsZSh7XG4gICAgICB2YWx1ZSxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHRyYW5zbGF0aW9uLFxuICAgICAga2V5LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHRyYW5zbGF0ZWQgdmFsdWUgb2YgYSBrZXkgYXMgb2JzZXJ2YWJsZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBzZWxlY3RUcmFuc2xhdGU8c3RyaW5nPignaGVsbG8nKS5zdWJzY3JpYmUodmFsdWUgPT4gLi4uKVxuICAgKiBzZWxlY3RUcmFuc2xhdGU8c3RyaW5nPignaGVsbG8nLCB7fSwgJ2VzJykuc3Vic2NyaWJlKHZhbHVlID0+IC4uLilcbiAgICogc2VsZWN0VHJhbnNsYXRlPHN0cmluZz4oJ2hlbGxvJywge30sICd0b2RvcycpLnN1YnNjcmliZSh2YWx1ZSA9PiAuLi4pXG4gICAqIHNlbGVjdFRyYW5zbGF0ZTxzdHJpbmc+KCdoZWxsbycsIHt9LCB7IHNjb3BlOiAndG9kb3MnIH0pLnN1YnNjcmliZSh2YWx1ZSA9PiAuLi4pXG4gICAqXG4gICAqL1xuICBzZWxlY3RUcmFuc2xhdGU8VCA9IGFueT4oXG4gICAga2V5OiBUcmFuc2xhdGVQYXJhbXMsXG4gICAgcGFyYW1zPzogSGFzaE1hcCxcbiAgICBsYW5nPzogc3RyaW5nIHwgVHJhbnNsb2NvU2NvcGUgfCBUcmFuc2xvY29TY29wZVtdLFxuICAgIF9pc09iamVjdCA9IGZhbHNlXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIGxldCBpbmxpbmVMb2FkZXI6IElubGluZUxvYWRlciB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBsb2FkID0gKGxhbmc6IHN0cmluZywgb3B0aW9ucz86IExvYWRPcHRpb25zKSA9PlxuICAgICAgdGhpcy5sb2FkKGxhbmcsIG9wdGlvbnMpLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PlxuICAgICAgICAgIF9pc09iamVjdFxuICAgICAgICAgICAgPyB0aGlzLnRyYW5zbGF0ZU9iamVjdChrZXksIHBhcmFtcywgbGFuZylcbiAgICAgICAgICAgIDogdGhpcy50cmFuc2xhdGUoa2V5LCBwYXJhbXMsIGxhbmcpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgaWYgKGlzTmlsKGxhbmcpKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYW5nQ2hhbmdlcyQucGlwZShzd2l0Y2hNYXAoKGxhbmcpID0+IGxvYWQobGFuZykpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNTY29wZUFycmF5KGxhbmcpIHx8IGlzU2NvcGVPYmplY3QobGFuZykpIHtcbiAgICAgIC8vIGl0J3MgYSBzY29wZSBvYmplY3QuXG4gICAgICBjb25zdCBwcm92aWRlclNjb3BlID0gQXJyYXkuaXNBcnJheShsYW5nKSA/IGxhbmdbMF0gOiBsYW5nO1xuICAgICAgbGFuZyA9IHByb3ZpZGVyU2NvcGUuc2NvcGU7XG4gICAgICBpbmxpbmVMb2FkZXIgPSByZXNvbHZlSW5saW5lTG9hZGVyKHByb3ZpZGVyU2NvcGUsIHByb3ZpZGVyU2NvcGUuc2NvcGUpO1xuICAgIH1cblxuICAgIGxhbmcgPSBsYW5nIGFzIHN0cmluZztcbiAgICBpZiAodGhpcy5pc0xhbmcobGFuZykgfHwgdGhpcy5pc1Njb3BlV2l0aExhbmcobGFuZykpIHtcbiAgICAgIHJldHVybiBsb2FkKGxhbmcpO1xuICAgIH1cbiAgICAvLyBpdCdzIGEgc2NvcGVcbiAgICBjb25zdCBzY29wZSA9IGxhbmc7XG4gICAgcmV0dXJuIHRoaXMubGFuZ0NoYW5nZXMkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGxhbmcpID0+IGxvYWQoYCR7c2NvcGV9LyR7bGFuZ31gLCB7IGlubGluZUxvYWRlciB9KSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNjb3BlIHdpdGggbGFuZ1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiB0b2Rvcy9lbiA9PiB0cnVlXG4gICAqIHRvZG9zID0+IGZhbHNlXG4gICAqL1xuICBwcml2YXRlIGlzU2NvcGVXaXRoTGFuZyhsYW5nOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pc0xhbmcoZ2V0TGFuZ0Zyb21TY29wZShsYW5nKSk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNsYXRlIHRoZSBnaXZlbiBwYXRoIHRoYXQgcmV0dXJucyBhbiBvYmplY3RcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogc2VydmljZS50cmFuc2xhdGVPYmplY3QoJ3BhdGgudG8ub2JqZWN0JywgeydzdWJwYXRoJzogeyB2YWx1ZTogJ3NvbWVWYWx1ZSd9fSkgPT4gcmV0dXJucyB0cmFuc2xhdGVkIG9iamVjdFxuICAgKlxuICAgKi9cbiAgdHJhbnNsYXRlT2JqZWN0PFQgPSBhbnk+KGtleTogc3RyaW5nLCBwYXJhbXM/OiBIYXNoTWFwLCBsYW5nPzogc3RyaW5nKTogVDtcbiAgdHJhbnNsYXRlT2JqZWN0PFQgPSBhbnk+KGtleTogc3RyaW5nW10sIHBhcmFtcz86IEhhc2hNYXAsIGxhbmc/OiBzdHJpbmcpOiBUW107XG4gIHRyYW5zbGF0ZU9iamVjdDxUID0gYW55PihcbiAgICBrZXk6IFRyYW5zbGF0ZVBhcmFtcyxcbiAgICBwYXJhbXM/OiBIYXNoTWFwLFxuICAgIGxhbmc/OiBzdHJpbmdcbiAgKTogVCB8IFRbXTtcbiAgdHJhbnNsYXRlT2JqZWN0PFQgPSBhbnk+KFxuICAgIGtleTogSGFzaE1hcCB8IE1hcDxzdHJpbmcsIEhhc2hNYXA+LFxuICAgIHBhcmFtcz86IG51bGwsXG4gICAgbGFuZz86IHN0cmluZ1xuICApOiBUW107XG4gIHRyYW5zbGF0ZU9iamVjdDxUID0gYW55PihcbiAgICBrZXk6IFRyYW5zbGF0ZU9iamVjdFBhcmFtcyxcbiAgICBwYXJhbXM6IEhhc2hNYXAgfCBudWxsID0ge30sXG4gICAgbGFuZyA9IHRoaXMuZ2V0QWN0aXZlTGFuZygpXG4gICk6IFQgfCBUW10ge1xuICAgIGlmIChpc1N0cmluZyhrZXkpIHx8IEFycmF5LmlzQXJyYXkoa2V5KSkge1xuICAgICAgY29uc3QgeyByZXNvbHZlTGFuZywgc2NvcGUgfSA9IHRoaXMucmVzb2x2ZUxhbmdBbmRTY29wZShsYW5nKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICAgICAgcmV0dXJuIGtleS5tYXAoKGspID0+XG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVPYmplY3QoXG4gICAgICAgICAgICBzY29wZSA/IGAke3Njb3BlfS4ke2t9YCA6IGssXG4gICAgICAgICAgICBwYXJhbXMhLFxuICAgICAgICAgICAgcmVzb2x2ZUxhbmdcbiAgICAgICAgICApXG4gICAgICAgICkgYXMgYW55O1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHRoaXMuZ2V0VHJhbnNsYXRpb24ocmVzb2x2ZUxhbmcpO1xuICAgICAga2V5ID0gc2NvcGUgPyBgJHtzY29wZX0uJHtrZXl9YCA6IGtleTtcblxuICAgICAgY29uc3QgdmFsdWUgPSB1bmZsYXR0ZW4odGhpcy5nZXRPYmplY3RCeUtleSh0cmFuc2xhdGlvbiwga2V5KSk7XG4gICAgICAvKiBJZiBhbiBlbXB0eSBvYmplY3Qgd2FzIHJldHVybmVkIHdlIHdhbnQgdG8gdHJ5IGFuZCB0cmFuc2xhdGUgdGhlIGtleSBhcyBhIHN0cmluZyBhbmQgbm90IGFuIG9iamVjdCAqL1xuICAgICAgcmV0dXJuIGlzRW1wdHkodmFsdWUpXG4gICAgICAgID8gdGhpcy50cmFuc2xhdGUoa2V5LCBwYXJhbXMhLCBsYW5nKVxuICAgICAgICA6IHRoaXMucGFyc2VyLnRyYW5zcGlsZSh7IHZhbHVlLCBwYXJhbXM6IHBhcmFtcyEsIHRyYW5zbGF0aW9uLCBrZXkgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNsYXRpb25zOiBUW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtfa2V5LCBfcGFyYW1zXSBvZiB0aGlzLmdldEVudHJpZXMoa2V5KSkge1xuICAgICAgdHJhbnNsYXRpb25zLnB1c2godGhpcy50cmFuc2xhdGVPYmplY3QoX2tleSwgX3BhcmFtcywgbGFuZykpO1xuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2xhdGlvbnM7XG4gIH1cblxuICBzZWxlY3RUcmFuc2xhdGVPYmplY3Q8VCA9IGFueT4oXG4gICAga2V5OiBzdHJpbmcsXG4gICAgcGFyYW1zPzogSGFzaE1hcCxcbiAgICBsYW5nPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8VD47XG4gIHNlbGVjdFRyYW5zbGF0ZU9iamVjdDxUID0gYW55PihcbiAgICBrZXk6IHN0cmluZ1tdLFxuICAgIHBhcmFtcz86IEhhc2hNYXAsXG4gICAgbGFuZz86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPFRbXT47XG4gIHNlbGVjdFRyYW5zbGF0ZU9iamVjdDxUID0gYW55PihcbiAgICBrZXk6IFRyYW5zbGF0ZVBhcmFtcyxcbiAgICBwYXJhbXM/OiBIYXNoTWFwLFxuICAgIGxhbmc/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxUPiB8IE9ic2VydmFibGU8VFtdPjtcbiAgc2VsZWN0VHJhbnNsYXRlT2JqZWN0PFQgPSBhbnk+KFxuICAgIGtleTogSGFzaE1hcCB8IE1hcDxzdHJpbmcsIEhhc2hNYXA+LFxuICAgIHBhcmFtcz86IG51bGwsXG4gICAgbGFuZz86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPFRbXT47XG4gIHNlbGVjdFRyYW5zbGF0ZU9iamVjdDxUID0gYW55PihcbiAgICBrZXk6IFRyYW5zbGF0ZU9iamVjdFBhcmFtcyxcbiAgICBwYXJhbXM/OiBIYXNoTWFwIHwgbnVsbCxcbiAgICBsYW5nPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8VD4gfCBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIGlmIChpc1N0cmluZyhrZXkpIHx8IEFycmF5LmlzQXJyYXkoa2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0VHJhbnNsYXRlPFQ+KGtleSwgcGFyYW1zISwgbGFuZywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgW1tmaXJzdEtleSwgZmlyc3RQYXJhbXNdLCAuLi5yZXN0XSA9IHRoaXMuZ2V0RW50cmllcyhrZXkpO1xuXG4gICAgLyogSW4gb3JkZXIgdG8gYXZvaWQgc3Vic2NyaWJpbmcgbXVsdGlwbGUgdGltZXMgdG8gdGhlIGxvYWQgbGFuZ3VhZ2UgZXZlbnQgYnkgY2FsbGluZyBzZWxlY3RUcmFuc2xhdGVPYmplY3QgZm9yIGVhY2ggcGFpcixcbiAgICAgKiB3ZSBsaXN0ZW4gdG8gd2hlbiB0aGUgZmlyc3Qga2V5IGhhcyBiZWVuIHRyYW5zbGF0ZWQgKHRoZSBsYW5ndWFnZSBpcyBsb2FkZWQpIGFuZCB0cmFuc2xhdGUgdGhlIHJlc3Qgc3luY2hyb25vdXNseSAqL1xuICAgIHJldHVybiB0aGlzLnNlbGVjdFRyYW5zbGF0ZU9iamVjdDxUPihmaXJzdEtleSwgZmlyc3RQYXJhbXMsIGxhbmcpLnBpcGUoXG4gICAgICBtYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IFt2YWx1ZV07XG4gICAgICAgIGZvciAoY29uc3QgW19rZXksIF9wYXJhbXNdIG9mIHJlc3QpIHtcbiAgICAgICAgICB0cmFuc2xhdGlvbnMucHVzaCh0aGlzLnRyYW5zbGF0ZU9iamVjdDxUPihfa2V5LCBfcGFyYW1zLCBsYW5nKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJhbnNsYXRpb25zO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW4gb2JqZWN0IG9mIHRyYW5zbGF0aW9ucyBmb3IgYSBnaXZlbiBsYW5ndWFnZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBnZXRUcmFuc2xhdGlvbigpXG4gICAqIGdldFRyYW5zbGF0aW9uKCdlbicpXG4gICAqIGdldFRyYW5zbGF0aW9uKCdhZG1pbi1wYWdlL2VuJylcbiAgICovXG4gIGdldFRyYW5zbGF0aW9uKCk6IE1hcDxzdHJpbmcsIFRyYW5zbGF0aW9uPjtcbiAgZ2V0VHJhbnNsYXRpb24obGFuZ09yU2NvcGU6IHN0cmluZyk6IFRyYW5zbGF0aW9uO1xuICBnZXRUcmFuc2xhdGlvbihsYW5nT3JTY29wZT86IHN0cmluZyk6IE1hcDxzdHJpbmcsIFRyYW5zbGF0aW9uPiB8IFRyYW5zbGF0aW9uIHtcbiAgICBpZiAobGFuZ09yU2NvcGUpIHtcbiAgICAgIGlmICh0aGlzLmlzTGFuZyhsYW5nT3JTY29wZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25zLmdldChsYW5nT3JTY29wZSkgfHwge307XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGlzIGEgc2NvcGUsIGJ1aWxkIHRoZSBzY29wZSB2YWx1ZSBmcm9tIHRoZSB0cmFuc2xhdGlvbiBvYmplY3RcbiAgICAgICAgY29uc3QgeyBzY29wZSwgcmVzb2x2ZUxhbmcgfSA9IHRoaXMucmVzb2x2ZUxhbmdBbmRTY29wZShsYW5nT3JTY29wZSk7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdGhpcy50cmFuc2xhdGlvbnMuZ2V0KHJlc29sdmVMYW5nKSB8fCB7fTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RCeUtleSh0cmFuc2xhdGlvbiwgc2NvcGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuIG9iamVjdCBvZiB0cmFuc2xhdGlvbnMgZm9yIGEgZ2l2ZW4gbGFuZ3VhZ2VcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogc2VsZWN0VHJhbnNsYXRpb24oKS5zdWJzY3JpYmUoKSAtIHdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IGxhbmcgdHJhbnNsYXRpb25cbiAgICogc2VsZWN0VHJhbnNsYXRpb24oJ2VzJykuc3Vic2NyaWJlKClcbiAgICogc2VsZWN0VHJhbnNsYXRpb24oJ2FkbWluLXBhZ2UnKS5zdWJzY3JpYmUoKSAtIHdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IGxhbmcgc2NvcGUgdHJhbnNsYXRpb25cbiAgICogc2VsZWN0VHJhbnNsYXRpb24oJ2FkbWluLXBhZ2UvZXMnKS5zdWJzY3JpYmUoKVxuICAgKi9cbiAgc2VsZWN0VHJhbnNsYXRpb24obGFuZz86IHN0cmluZyk6IE9ic2VydmFibGU8VHJhbnNsYXRpb24+IHtcbiAgICBsZXQgbGFuZ3VhZ2UkID0gdGhpcy5sYW5nQ2hhbmdlcyQ7XG4gICAgaWYgKGxhbmcpIHtcbiAgICAgIGNvbnN0IHNjb3BlTGFuZ1NwZWNpZmllZCA9IGdldExhbmdGcm9tU2NvcGUobGFuZykgIT09IGxhbmc7XG4gICAgICBpZiAodGhpcy5pc0xhbmcobGFuZykgfHwgc2NvcGVMYW5nU3BlY2lmaWVkKSB7XG4gICAgICAgIGxhbmd1YWdlJCA9IG9mKGxhbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGFuZ3VhZ2UkID0gdGhpcy5sYW5nQ2hhbmdlcyQucGlwZShcbiAgICAgICAgICBtYXAoKGN1cnJlbnRMYW5nKSA9PiBgJHtsYW5nfS8ke2N1cnJlbnRMYW5nfWApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhbmd1YWdlJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChsYW5ndWFnZSkgPT5cbiAgICAgICAgdGhpcy5sb2FkKGxhbmd1YWdlKS5waXBlKG1hcCgoKSA9PiB0aGlzLmdldFRyYW5zbGF0aW9uKGxhbmd1YWdlKSkpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIG9yIG1lcmdlIGEgZ2l2ZW4gdHJhbnNsYXRpb24gb2JqZWN0IHRvIGN1cnJlbnQgbGFuZ1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBzZXRUcmFuc2xhdGlvbih7IC4uLiB9KVxuICAgKiBzZXRUcmFuc2xhdGlvbih7IC4uLiB9LCAnZW4nKVxuICAgKiBzZXRUcmFuc2xhdGlvbih7IC4uLiB9LCAnZXMnLCB7IG1lcmdlOiBmYWxzZSB9IClcbiAgICogc2V0VHJhbnNsYXRpb24oeyAuLi4gfSwgJ3RvZG9zL2VuJywgeyBtZXJnZTogZmFsc2UgfSApXG4gICAqL1xuICBzZXRUcmFuc2xhdGlvbihcbiAgICB0cmFuc2xhdGlvbjogVHJhbnNsYXRpb24sXG4gICAgbGFuZyA9IHRoaXMuZ2V0QWN0aXZlTGFuZygpLFxuICAgIG9wdGlvbnM6IFNldFRyYW5zbGF0aW9uT3B0aW9ucyA9IHt9XG4gICkge1xuICAgIGNvbnN0IGRlZmF1bHRzID0geyBtZXJnZTogdHJ1ZSwgZW1pdENoYW5nZTogdHJ1ZSB9O1xuICAgIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSB7IC4uLmRlZmF1bHRzLCAuLi5vcHRpb25zIH07XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZUZyb21MYW5nKGxhbmcpO1xuXG4gICAgLyoqXG4gICAgICogSWYgdGhpcyBpc24ndCBhIHNjb3BlIHdlIHVzZSB0aGUgd2hvbGUgdHJhbnNsYXRpb24gYXMgaXNcbiAgICAgKiBvdGhlcndpc2Ugd2UgbmVlZCB0byBmbGF0IHRoZSBzY29wZSBhbmQgdXNlIGl0XG4gICAgICovXG4gICAgbGV0IGZsYXR0ZW5TY29wZU9yVHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbjtcblxuICAgIC8vIE1lcmdlZCB0aGUgc2NvcGVkIGxhbmd1YWdlIGludG8gdGhlIGFjdGl2ZSBsYW5ndWFnZVxuICAgIGlmIChzY29wZSkge1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRNYXBwZWRTY29wZShzY29wZSk7XG4gICAgICBmbGF0dGVuU2NvcGVPclRyYW5zbGF0aW9uID0gZmxhdHRlbih7IFtrZXldOiB0cmFuc2xhdGlvbiB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50TGFuZyA9IHNjb3BlID8gZ2V0TGFuZ0Zyb21TY29wZShsYW5nKSA6IGxhbmc7XG5cbiAgICBjb25zdCBtZXJnZWRUcmFuc2xhdGlvbiA9IHtcbiAgICAgIC4uLihtZXJnZWRPcHRpb25zLm1lcmdlICYmIHRoaXMuZ2V0VHJhbnNsYXRpb24oY3VycmVudExhbmcpKSxcbiAgICAgIC4uLmZsYXR0ZW5TY29wZU9yVHJhbnNsYXRpb24sXG4gICAgfTtcblxuICAgIGNvbnN0IGZsYXR0ZW5UcmFuc2xhdGlvbiA9IHRoaXMuY29uZmlnLmZsYXR0ZW4hLmFvdFxuICAgICAgPyBtZXJnZWRUcmFuc2xhdGlvblxuICAgICAgOiBmbGF0dGVuKG1lcmdlZFRyYW5zbGF0aW9uKTtcbiAgICBjb25zdCB3aXRoSG9vayA9IHRoaXMuaW50ZXJjZXB0b3IucHJlU2F2ZVRyYW5zbGF0aW9uKFxuICAgICAgZmxhdHRlblRyYW5zbGF0aW9uLFxuICAgICAgY3VycmVudExhbmdcbiAgICApO1xuICAgIHRoaXMudHJhbnNsYXRpb25zLnNldChjdXJyZW50TGFuZywgd2l0aEhvb2spO1xuICAgIG1lcmdlZE9wdGlvbnMuZW1pdENoYW5nZSAmJiB0aGlzLnNldEFjdGl2ZUxhbmcodGhpcy5nZXRBY3RpdmVMYW5nKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdHJhbnNsYXRpb24ga2V5IHdpdGggZ2l2ZW4gdmFsdWVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogc2V0VHJhbnNsYXRpb25LZXkoJ2tleScsICd2YWx1ZScpXG4gICAqIHNldFRyYW5zbGF0aW9uS2V5KCdrZXkubmVzdGVkJywgJ3ZhbHVlJylcbiAgICogc2V0VHJhbnNsYXRpb25LZXkoJ2tleS5uZXN0ZWQnLCAndmFsdWUnLCAnZW4nKVxuICAgKiBzZXRUcmFuc2xhdGlvbktleSgna2V5Lm5lc3RlZCcsICd2YWx1ZScsICdlbicsIHsgZW1pdENoYW5nZTogZmFsc2UgfSApXG4gICAqL1xuICBzZXRUcmFuc2xhdGlvbktleShcbiAgICBrZXk6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IE9taXQ8U2V0VHJhbnNsYXRpb25PcHRpb25zLCAnbWVyZ2UnPiA9IHt9XG4gICkge1xuICAgIGNvbnN0IGxhbmcgPSBvcHRpb25zLmxhbmcgfHwgdGhpcy5nZXRBY3RpdmVMYW5nKCk7XG4gICAgY29uc3Qgd2l0aEhvb2sgPSB0aGlzLmludGVyY2VwdG9yLnByZVNhdmVUcmFuc2xhdGlvbktleShrZXksIHZhbHVlLCBsYW5nKTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHtcbiAgICAgIFtrZXldOiB3aXRoSG9vayxcbiAgICB9O1xuXG4gICAgdGhpcy5zZXRUcmFuc2xhdGlvbihuZXdWYWx1ZSwgbGFuZywgeyAuLi5vcHRpb25zLCBtZXJnZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBmYWxsYmFjayBsYW5nIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsYW5ndWFnZVxuICAgKiBAcGFyYW0gZmFsbGJhY2tMYW5nXG4gICAqL1xuICBzZXRGYWxsYmFja0xhbmdGb3JNaXNzaW5nVHJhbnNsYXRpb24oe1xuICAgIGZhbGxiYWNrTGFuZyxcbiAgfTogUGljazxUcmFuc2xvY29Db25maWcsICdmYWxsYmFja0xhbmcnPikge1xuICAgIGNvbnN0IGxhbmcgPSBBcnJheS5pc0FycmF5KGZhbGxiYWNrTGFuZykgPyBmYWxsYmFja0xhbmdbMF0gOiBmYWxsYmFja0xhbmc7XG4gICAgaWYgKGZhbGxiYWNrTGFuZyAmJiB0aGlzLnVzZUZhbGxiYWNrVHJhbnNsYXRpb24obGFuZykpIHtcbiAgICAgIHRoaXMuZmlyc3RGYWxsYmFja0xhbmcgPSBsYW5nITtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfaGFuZGxlTWlzc2luZ0tleShrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgcGFyYW1zPzogSGFzaE1hcCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5taXNzaW5nSGFuZGxlciEuYWxsb3dFbXB0eSAmJiB2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNSZXNvbHZlZE1pc3NpbmdPbmNlICYmIHRoaXMudXNlRmFsbGJhY2tUcmFuc2xhdGlvbigpKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHNldCBpdCB0byB0cnVlIHRvIHByZXZlbnQgYSBsb29wXG4gICAgICB0aGlzLmlzUmVzb2x2ZWRNaXNzaW5nT25jZSA9IHRydWU7XG4gICAgICBjb25zdCBmYWxsYmFja1ZhbHVlID0gdGhpcy50cmFuc2xhdGUoXG4gICAgICAgIGtleSxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICB0aGlzLmZpcnN0RmFsbGJhY2tMYW5nIVxuICAgICAgKTtcbiAgICAgIHRoaXMuaXNSZXNvbHZlZE1pc3NpbmdPbmNlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBmYWxsYmFja1ZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm1pc3NpbmdIYW5kbGVyLmhhbmRsZShcbiAgICAgIGtleSxcbiAgICAgIHRoaXMuZ2V0TWlzc2luZ0hhbmRsZXJEYXRhKCksXG4gICAgICBwYXJhbXNcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX2lzTGFuZ1Njb3BlZChsYW5nOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBdmFpbGFibGVMYW5nc0lkcygpLmluZGV4T2YobGFuZykgPT09IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIHN0cmluZyBpcyBvbmUgb2YgdGhlIHNwZWNpZmllZCBhdmFpbGFibGUgbGFuZ3VhZ2VzLlxuICAgKiBAcmV0dXJuc1xuICAgKiBUcnVlIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgYW4gYXZhaWxhYmxlIGxhbmd1YWdlLlxuICAgKiBGYWxzZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIG5vdCBhbiBhdmFpbGFibGUgbGFuZ3VhZ2UuXG4gICAqL1xuICBpc0xhbmcobGFuZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXZhaWxhYmxlTGFuZ3NJZHMoKS5pbmRleE9mKGxhbmcpICE9PSAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICpcbiAgICogV2UgYWx3YXlzIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBnbG9iYWwgbGFuZyBpcyBsb2FkZWRcbiAgICogYmVmb3JlIGxvYWRpbmcgdGhlIHNjb3BlIHNpbmNlIHlvdSBjYW4gYWNjZXNzIGJvdGggdmlhIHRoZSBwaXBlL2RpcmVjdGl2ZS5cbiAgICovXG4gIF9sb2FkRGVwZW5kZW5jaWVzKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBpbmxpbmVMb2FkZXI/OiBJbmxpbmVMb2FkZXJcbiAgKTogT2JzZXJ2YWJsZTxUcmFuc2xhdGlvbiB8IFRyYW5zbGF0aW9uW10+IHtcbiAgICBjb25zdCBtYWluTGFuZyA9IGdldExhbmdGcm9tU2NvcGUocGF0aCk7XG5cbiAgICBpZiAodGhpcy5faXNMYW5nU2NvcGVkKHBhdGgpICYmICF0aGlzLmlzTG9hZGVkVHJhbnNsYXRpb24obWFpbkxhbmcpKSB7XG4gICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMubG9hZChtYWluTGFuZyksXG4gICAgICAgIHRoaXMubG9hZChwYXRoLCB7IGlubGluZUxvYWRlciB9KSxcbiAgICAgIF0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sb2FkKHBhdGgsIHsgaW5saW5lTG9hZGVyIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX2NvbXBsZXRlU2NvcGVXaXRoTGFuZyhsYW5nT3JTY29wZTogc3RyaW5nKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5faXNMYW5nU2NvcGVkKGxhbmdPclNjb3BlKSAmJlxuICAgICAgIXRoaXMuaXNMYW5nKGdldExhbmdGcm9tU2NvcGUobGFuZ09yU2NvcGUpKVxuICAgICkge1xuICAgICAgcmV0dXJuIGAke2xhbmdPclNjb3BlfS8ke3RoaXMuZ2V0QWN0aXZlTGFuZygpfWA7XG4gICAgfVxuICAgIHJldHVybiBsYW5nT3JTY29wZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9zZXRTY29wZUFsaWFzKHNjb3BlOiBzdHJpbmcsIGFsaWFzOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLnNjb3BlTWFwcGluZykge1xuICAgICAgdGhpcy5jb25maWcuc2NvcGVNYXBwaW5nID0ge307XG4gICAgfVxuICAgIHRoaXMuY29uZmlnLnNjb3BlTWFwcGluZ1tzY29wZV0gPSBhbGlhcztcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIC8vIENhcmV0YWtlciBub3RlOiBzaW5jZSB0aGlzIGlzIHRoZSByb290IHByb3ZpZGVyLCBpdCdsbCBiZSBkZXN0cm95ZWQgd2hlbiB0aGUgYE5nTW9kdWxlUmVmLmRlc3Ryb3koKWAgaXMgcnVuLlxuICAgIC8vIENhY2hlZCB2YWx1ZXMgY2FwdHVyZSBgdGhpc2AsIHRodXMgbGVhZGluZyB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSBhbmQgcHJldmVudGluZyB0aGUgYFRyYW5zbG9jb1NlcnZpY2VgIGZyb21cbiAgICAvLyBiZWluZyBHQydkLiBUaGlzIHdvdWxkIGxlYWQgdG8gYSBtZW1vcnkgbGVhayB3aGVuIHNlcnZlci1zaWRlIHJlbmRlcmluZyBpcyB1c2VkIHNpbmNlIHRoZSBzZXJ2aWNlIGlzIGNyZWF0ZWRcbiAgICAvLyBhbmQgZGVzdHJveWVkIHBlciBlYWNoIEhUVFAgcmVxdWVzdCwgYnV0IGFueSBzZXJ2aWNlIGlzIG5vdCBnZXR0aW5nIEdDJ2QuXG4gICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0xvYWRlZFRyYW5zbGF0aW9uKGxhbmc6IHN0cmluZykge1xuICAgIHJldHVybiBzaXplKHRoaXMuZ2V0VHJhbnNsYXRpb24obGFuZykpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdmFpbGFibGVMYW5nc0lkcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZmlyc3QgPSB0aGlzLmdldEF2YWlsYWJsZUxhbmdzKClbMF07XG5cbiAgICBpZiAoaXNTdHJpbmcoZmlyc3QpKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRBdmFpbGFibGVMYW5ncygpIGFzIHN0cmluZ1tdO1xuICAgIH1cblxuICAgIHJldHVybiAodGhpcy5nZXRBdmFpbGFibGVMYW5ncygpIGFzIExhbmdEZWZpbml0aW9uW10pLm1hcCgobCkgPT4gbC5pZCk7XG4gIH1cblxuICBwcml2YXRlIGdldE1pc3NpbmdIYW5kbGVyRGF0YSgpOiBUcmFuc2xvY29NaXNzaW5nSGFuZGxlckRhdGEge1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgIGFjdGl2ZUxhbmc6IHRoaXMuZ2V0QWN0aXZlTGFuZygpLFxuICAgICAgYXZhaWxhYmxlTGFuZ3M6IHRoaXMuYXZhaWxhYmxlTGFuZ3MsXG4gICAgICBkZWZhdWx0TGFuZzogdGhpcy5kZWZhdWx0TGFuZyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSBhIGZhbGxiYWNrIHRyYW5zbGF0aW9uIHNldCBmb3IgbWlzc2luZyBrZXlzIG9mIHRoZSBwcmltYXJ5IGxhbmd1YWdlXG4gICAqIFRoaXMgaXMgdW5yZWxhdGVkIHRvIHRoZSBmYWxsYmFjayBsYW5ndWFnZSAod2hpY2ggY2hhbmdlcyB0aGUgYWN0aXZlIGxhbmd1YWdlKVxuICAgKi9cbiAgcHJpdmF0ZSB1c2VGYWxsYmFja1RyYW5zbGF0aW9uKGxhbmc/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jb25maWcubWlzc2luZ0hhbmRsZXIhLnVzZUZhbGxiYWNrVHJhbnNsYXRpb24gJiZcbiAgICAgIGxhbmcgIT09IHRoaXMuZmlyc3RGYWxsYmFja0xhbmdcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTdWNjZXNzKGxhbmc6IHN0cmluZywgdHJhbnNsYXRpb246IFRyYW5zbGF0aW9uKSB7XG4gICAgdGhpcy5zZXRUcmFuc2xhdGlvbih0cmFuc2xhdGlvbiwgbGFuZywgeyBlbWl0Q2hhbmdlOiBmYWxzZSB9KTtcbiAgICB0aGlzLmV2ZW50cy5uZXh0KHtcbiAgICAgIHdhc0ZhaWx1cmU6ICEhdGhpcy5mYWlsZWRMYW5ncy5zaXplLFxuICAgICAgdHlwZTogJ3RyYW5zbGF0aW9uTG9hZFN1Y2Nlc3MnLFxuICAgICAgcGF5bG9hZDogZ2V0RXZlbnRQYXlsb2FkKGxhbmcpLFxuICAgIH0pO1xuICAgIHRoaXMuZmFpbGVkTGFuZ3MuZm9yRWFjaCgobCkgPT4gdGhpcy5jYWNoZS5kZWxldGUobCkpO1xuICAgIHRoaXMuZmFpbGVkTGFuZ3MuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRmFpbHVyZShsYW5nOiBzdHJpbmcsIGxvYWRPcHRpb25zOiBMb2FkT3B0aW9ucykge1xuICAgIC8vIFdoZW4gc3RhcnRpbmcgdG8gbG9hZCBhIGZpcnN0IGNob2ljZSBsYW5ndWFnZSwgaW5pdGlhbGl6ZVxuICAgIC8vIHRoZSBmYWlsZWQgY291bnRlciBhbmQgcmVzb2x2ZSB0aGUgZmFsbGJhY2sgbGFuZ3MuXG4gICAgaWYgKGlzTmlsKGxvYWRPcHRpb25zLmZhaWxlZENvdW50ZXIpKSB7XG4gICAgICBsb2FkT3B0aW9ucy5mYWlsZWRDb3VudGVyID0gMDtcblxuICAgICAgaWYgKCFsb2FkT3B0aW9ucy5mYWxsYmFja0xhbmdzKSB7XG4gICAgICAgIGxvYWRPcHRpb25zLmZhbGxiYWNrTGFuZ3MgPSB0aGlzLmZhbGxiYWNrU3RyYXRlZ3kuZ2V0TmV4dExhbmdzKGxhbmcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNwbGl0dGVkID0gbGFuZy5zcGxpdCgnLycpO1xuICAgIGNvbnN0IGZhbGxiYWNrcyA9IGxvYWRPcHRpb25zLmZhbGxiYWNrTGFuZ3M7XG4gICAgY29uc3QgbmV4dExhbmcgPSBmYWxsYmFja3MhW2xvYWRPcHRpb25zLmZhaWxlZENvdW50ZXIhXTtcbiAgICB0aGlzLmZhaWxlZExhbmdzLmFkZChsYW5nKTtcblxuICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBhIGxvYWRlZCBmYWxsYmFjayBsYW5ndWFnZSBpcyByZXF1ZXN0ZWQgYWdhaW5cbiAgICBpZiAodGhpcy5jYWNoZS5oYXMobmV4dExhbmcpKSB7XG4gICAgICB0aGlzLmhhbmRsZVN1Y2Nlc3MobmV4dExhbmcsIHRoaXMuZ2V0VHJhbnNsYXRpb24obmV4dExhbmcpKTtcbiAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0ZhbGxiYWNrTGFuZyA9IG5leHRMYW5nID09PSBzcGxpdHRlZFtzcGxpdHRlZC5sZW5ndGggLSAxXTtcblxuICAgIGlmICghbmV4dExhbmcgfHwgaXNGYWxsYmFja0xhbmcpIHtcbiAgICAgIGxldCBtc2cgPSBgVW5hYmxlIHRvIGxvYWQgdHJhbnNsYXRpb24gYW5kIGFsbCB0aGUgZmFsbGJhY2sgbGFuZ3VhZ2VzYDtcbiAgICAgIGlmIChzcGxpdHRlZC5sZW5ndGggPiAxKSB7XG4gICAgICAgIG1zZyArPSBgLCBkaWQgeW91IG1pc3NwZWxsZWQgdGhlIHNjb3BlIG5hbWU/YDtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVMYW5nID0gbmV4dExhbmc7XG4gICAgLy8gaWYgaXQncyBzY29wZWQgbGFuZ1xuICAgIGlmIChzcGxpdHRlZC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHJlc29sdmUgaXQgdG86XG4gICAgICAvLyB0b2Rvcy9sYW5nTm90RXhpc3RzID0+IHRvZG9zL25leHRMYW5nXG4gICAgICBzcGxpdHRlZFtzcGxpdHRlZC5sZW5ndGggLSAxXSA9IG5leHRMYW5nO1xuICAgICAgcmVzb2x2ZUxhbmcgPSBzcGxpdHRlZC5qb2luKCcvJyk7XG4gICAgfVxuXG4gICAgbG9hZE9wdGlvbnMuZmFpbGVkQ291bnRlciErKztcbiAgICB0aGlzLmV2ZW50cy5uZXh0KHtcbiAgICAgIHR5cGU6ICd0cmFuc2xhdGlvbkxvYWRGYWlsdXJlJyxcbiAgICAgIHBheWxvYWQ6IGdldEV2ZW50UGF5bG9hZChsYW5nKSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmxvYWQocmVzb2x2ZUxhbmcsIGxvYWRPcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWFwcGVkU2NvcGUoc2NvcGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBzY29wZU1hcHBpbmcgPSB7fSB9ID0gdGhpcy5jb25maWc7XG4gICAgcmV0dXJuIHNjb3BlTWFwcGluZ1tzY29wZV0gfHwgdG9DYW1lbENhc2Uoc2NvcGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGxhbmcgaXMgc2NvcGUgd2UgbmVlZCB0byBjaGVjayB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICAgKiB0b2Rvcy9lcyA9PiBpbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIHRha2UgYGVzYCBhcyBsYW5nXG4gICAqIHRvZG9zID0+IGluIHRoaXMgY2FzZSB3ZSBzaG91bGQgc2V0IHRoZSBhY3RpdmUgbGFuZyBhcyBsYW5nXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVMYW5nQW5kU2NvcGUobGFuZzogc3RyaW5nKSB7XG4gICAgbGV0IHJlc29sdmVMYW5nID0gbGFuZztcbiAgICBsZXQgc2NvcGU7XG5cbiAgICBpZiAodGhpcy5faXNMYW5nU2NvcGVkKGxhbmcpKSB7XG4gICAgICAvLyBlbiBmb3IgZXhhbXBsZVxuICAgICAgY29uc3QgbGFuZ0Zyb21TY29wZSA9IGdldExhbmdGcm9tU2NvcGUobGFuZyk7XG4gICAgICAvLyBlbiBpcyBsYW5nXG4gICAgICBjb25zdCBoYXNMYW5nID0gdGhpcy5pc0xhbmcobGFuZ0Zyb21TY29wZSk7XG4gICAgICAvLyB0YWtlIGVuXG4gICAgICByZXNvbHZlTGFuZyA9IGhhc0xhbmcgPyBsYW5nRnJvbVNjb3BlIDogdGhpcy5nZXRBY3RpdmVMYW5nKCk7XG4gICAgICAvLyBmaW5kIHRoZSBzY29wZVxuICAgICAgc2NvcGUgPSB0aGlzLmdldE1hcHBlZFNjb3BlKGhhc0xhbmcgPyBnZXRTY29wZUZyb21MYW5nKGxhbmcpIDogbGFuZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc2NvcGUsIHJlc29sdmVMYW5nIH07XG4gIH1cblxuICBwcml2YXRlIGdldE9iamVjdEJ5S2V5KHRyYW5zbGF0aW9uOiBUcmFuc2xhdGlvbiwga2V5Pzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0OiBUcmFuc2xhdGlvbiA9IHt9O1xuICAgIGNvbnN0IHByZWZpeCA9IGAke2tleX0uYDtcblxuICAgIGZvciAoY29uc3QgY3VycmVudEtleSBpbiB0cmFuc2xhdGlvbikge1xuICAgICAgaWYgKGN1cnJlbnRLZXkuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgIHJlc3VsdFtjdXJyZW50S2V5LnJlcGxhY2UocHJlZml4LCAnJyldID0gdHJhbnNsYXRpb25bY3VycmVudEtleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RW50cmllcyhrZXk6IEhhc2hNYXAgfCBNYXA8c3RyaW5nLCBIYXNoTWFwPikge1xuICAgIHJldHVybiBrZXkgaW5zdGFuY2VvZiBNYXAgPyBrZXkuZW50cmllcygpIDogT2JqZWN0LmVudHJpZXMoa2V5KTtcbiAgfVxufVxuIl19
577
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsb2NvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3RyYW5zbG9jby9zcmMvbGliL3RyYW5zbG9jby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixhQUFhLEVBQ2IsS0FBSyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osR0FBRyxFQUVILEVBQUUsRUFDRixLQUFLLEVBQ0wsV0FBVyxFQUNYLE9BQU8sRUFDUCxTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUNMLGFBQWEsRUFDYixnQkFBZ0IsR0FFakIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsb0JBQW9CLEdBRXJCLE1BQU0sd0JBQXdCLENBQUM7QUFjaEMsT0FBTyxFQUNMLE9BQU8sRUFDUCxPQUFPLEVBQ1AsS0FBSyxFQUNMLGFBQWEsRUFDYixRQUFRLEVBQ1IsSUFBSSxFQUNKLFdBQVcsRUFDWCxTQUFTLEdBQ1YsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFFLGdCQUFnQixFQUFtQixNQUFNLG9CQUFvQixDQUFDO0FBQ3ZFLE9BQU8sRUFDTCx5QkFBeUIsR0FHMUIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wscUJBQXFCLEdBRXRCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUNMLDJCQUEyQixHQUU1QixNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixtQkFBbUIsR0FDcEIsTUFBTSxVQUFVLENBQUM7QUFD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QWdCLGtCQW1CTCxnQkFBZ0IsNkJBQzVCLG9CQUFvQixhQUNwQix5QkFBeUIsYUFFekIscUJBQXFCLGFBQ3JCLGdCQUFnQixhQUNoQiwyQkFBMkI7MkdBekIxQixnQkFBZ0IsY0FESCxNQUFNOzsyRkFDbkIsZ0JBQWdCO2tCQUQ1QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBb0I3QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGdCQUFnQjs7MEJBQ25DLE1BQU07MkJBQUMsb0JBQW9COzswQkFDM0IsTUFBTTsyQkFBQyx5QkFBeUI7OzBCQUVoQyxNQUFNOzJCQUFDLHFCQUFxQjs7MEJBQzVCLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFDdkIsTUFBTTsyQkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY2F0Y2hFcnJvcixcbiAgY29tYmluZUxhdGVzdCxcbiAgRU1QVFksXG4gIGZvcmtKb2luLFxuICBmcm9tLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICByZXRyeSxcbiAgc2hhcmVSZXBsYXksXG4gIFN1YmplY3QsXG4gIHN3aXRjaE1hcCxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuaW1wb3J0IHtcbiAgRGVmYXVsdExvYWRlcixcbiAgVFJBTlNMT0NPX0xPQURFUixcbiAgVHJhbnNsb2NvTG9hZGVyLFxufSBmcm9tICcuL3RyYW5zbG9jby5sb2FkZXInO1xuaW1wb3J0IHtcbiAgVFJBTlNMT0NPX1RSQU5TUElMRVIsXG4gIFRyYW5zbG9jb1RyYW5zcGlsZXIsXG59IGZyb20gJy4vdHJhbnNsb2NvLnRyYW5zcGlsZXInO1xuaW1wb3J0IHtcbiAgQXZhaWxhYmxlTGFuZ3MsXG4gIEhhc2hNYXAsXG4gIElubGluZUxvYWRlcixcbiAgTGFuZ0RlZmluaXRpb24sXG4gIExvYWRPcHRpb25zLFxuICBTZXRUcmFuc2xhdGlvbk9wdGlvbnMsXG4gIFRyYW5zbGF0ZU9iamVjdFBhcmFtcyxcbiAgVHJhbnNsYXRlUGFyYW1zLFxuICBUcmFuc2xhdGlvbixcbiAgVHJhbnNsb2NvRXZlbnRzLFxuICBUcmFuc2xvY29TY29wZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICBmbGF0dGVuLFxuICBpc0VtcHR5LFxuICBpc05pbCxcbiAgaXNTY29wZU9iamVjdCxcbiAgaXNTdHJpbmcsXG4gIHNpemUsXG4gIHRvQ2FtZWxDYXNlLFxuICB1bmZsYXR0ZW4sXG59IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBUUkFOU0xPQ09fQ09ORklHLCBUcmFuc2xvY29Db25maWcgfSBmcm9tICcuL3RyYW5zbG9jby5jb25maWcnO1xuaW1wb3J0IHtcbiAgVFJBTlNMT0NPX01JU1NJTkdfSEFORExFUixcbiAgVHJhbnNsb2NvTWlzc2luZ0hhbmRsZXIsXG4gIFRyYW5zbG9jb01pc3NpbmdIYW5kbGVyRGF0YSxcbn0gZnJvbSAnLi90cmFuc2xvY28tbWlzc2luZy1oYW5kbGVyJztcbmltcG9ydCB7XG4gIFRSQU5TTE9DT19JTlRFUkNFUFRPUixcbiAgVHJhbnNsb2NvSW50ZXJjZXB0b3IsXG59IGZyb20gJy4vdHJhbnNsb2NvLmludGVyY2VwdG9yJztcbmltcG9ydCB7XG4gIFRSQU5TTE9DT19GQUxMQkFDS19TVFJBVEVHWSxcbiAgVHJhbnNsb2NvRmFsbGJhY2tTdHJhdGVneSxcbn0gZnJvbSAnLi90cmFuc2xvY28tZmFsbGJhY2stc3RyYXRlZ3knO1xuaW1wb3J0IHtcbiAgZ2V0RXZlbnRQYXlsb2FkLFxuICBnZXRMYW5nRnJvbVNjb3BlLFxuICBnZXRTY29wZUZyb21MYW5nLFxuICByZXNvbHZlSW5saW5lTG9hZGVyLFxufSBmcm9tICcuL3NoYXJlZCc7XG5pbXBvcnQgeyBnZXRGYWxsYmFja3NMb2FkZXJzIH0gZnJvbSAnLi9nZXQtZmFsbGJhY2tzLWxvYWRlcnMnO1xuaW1wb3J0IHsgcmVzb2x2ZUxvYWRlciB9IGZyb20gJy4vcmVzb2x2ZS1sb2FkZXInO1xuXG5sZXQgc2VydmljZTogVHJhbnNsb2NvU2VydmljZTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZTxUID0gc3RyaW5nPihcbiAga2V5OiBUcmFuc2xhdGVQYXJhbXMsXG4gIHBhcmFtczogSGFzaE1hcCA9IHt9LFxuICBsYW5nPzogc3RyaW5nXG4pOiBUIHtcbiAgcmV0dXJuIHNlcnZpY2UudHJhbnNsYXRlPFQ+KGtleSwgcGFyYW1zLCBsYW5nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZU9iamVjdDxUPihcbiAga2V5OiBUcmFuc2xhdGVQYXJhbXMsXG4gIHBhcmFtczogSGFzaE1hcCA9IHt9LFxuICBsYW5nPzogc3RyaW5nXG4pOiBUIHwgVFtdIHtcbiAgcmV0dXJuIHNlcnZpY2UudHJhbnNsYXRlT2JqZWN0PFQ+KGtleSwgcGFyYW1zLCBsYW5nKTtcbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xvY29TZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgbGFuZ0NoYW5nZXMkOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgcHJpdmF0ZSB0cmFuc2xhdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgVHJhbnNsYXRpb24+KCk7XG4gIHByaXZhdGUgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgT2JzZXJ2YWJsZTxUcmFuc2xhdGlvbj4+KCk7XG4gIHByaXZhdGUgZmlyc3RGYWxsYmFja0xhbmc6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBkZWZhdWx0TGFuZyA9ICcnO1xuICBwcml2YXRlIGF2YWlsYWJsZUxhbmdzOiBBdmFpbGFibGVMYW5ncyA9IFtdO1xuICBwcml2YXRlIGlzUmVzb2x2ZWRNaXNzaW5nT25jZSA9IGZhbHNlO1xuICBwcml2YXRlIGxhbmc6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+O1xuICBwcml2YXRlIGZhaWxlZExhbmdzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgZXZlbnRzID0gbmV3IFN1YmplY3Q8VHJhbnNsb2NvRXZlbnRzPigpO1xuXG4gIGV2ZW50cyQgPSB0aGlzLmV2ZW50cy5hc09ic2VydmFibGUoKTtcbiAgcmVhZG9ubHkgY29uZmlnOiBUcmFuc2xvY29Db25maWcgJiB7XG4gICAgc2NvcGVNYXBwaW5nPzogSGFzaE1hcDxzdHJpbmc+O1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoVFJBTlNMT0NPX0xPQURFUikgcHJpdmF0ZSBsb2FkZXI6IFRyYW5zbG9jb0xvYWRlcixcbiAgICBASW5qZWN0KFRSQU5TTE9DT19UUkFOU1BJTEVSKSBwcml2YXRlIHBhcnNlcjogVHJhbnNsb2NvVHJhbnNwaWxlcixcbiAgICBASW5qZWN0KFRSQU5TTE9DT19NSVNTSU5HX0hBTkRMRVIpXG4gICAgcHJpdmF0ZSBtaXNzaW5nSGFuZGxlcjogVHJhbnNsb2NvTWlzc2luZ0hhbmRsZXIsXG4gICAgQEluamVjdChUUkFOU0xPQ09fSU5URVJDRVBUT1IpIHByaXZhdGUgaW50ZXJjZXB0b3I6IFRyYW5zbG9jb0ludGVyY2VwdG9yLFxuICAgIEBJbmplY3QoVFJBTlNMT0NPX0NPTkZJRykgdXNlckNvbmZpZzogVHJhbnNsb2NvQ29uZmlnLFxuICAgIEBJbmplY3QoVFJBTlNMT0NPX0ZBTExCQUNLX1NUUkFURUdZKVxuICAgIHByaXZhdGUgZmFsbGJhY2tTdHJhdGVneTogVHJhbnNsb2NvRmFsbGJhY2tTdHJhdGVneVxuICApIHtcbiAgICBpZiAoIXRoaXMubG9hZGVyKSB7XG4gICAgICB0aGlzLmxvYWRlciA9IG5ldyBEZWZhdWx0TG9hZGVyKHRoaXMudHJhbnNsYXRpb25zKTtcbiAgICB9XG4gICAgc2VydmljZSA9IHRoaXM7XG4gICAgdGhpcy5jb25maWcgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHVzZXJDb25maWcpKTtcblxuICAgIHRoaXMuc2V0QXZhaWxhYmxlTGFuZ3ModGhpcy5jb25maWcuYXZhaWxhYmxlTGFuZ3MgfHwgW10pO1xuICAgIHRoaXMuc2V0RmFsbGJhY2tMYW5nRm9yTWlzc2luZ1RyYW5zbGF0aW9uKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLnNldERlZmF1bHRMYW5nKHRoaXMuY29uZmlnLmRlZmF1bHRMYW5nKTtcbiAgICB0aGlzLmxhbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4odGhpcy5nZXREZWZhdWx0TGFuZygpKTtcbiAgICAvLyBEb24ndCB1c2UgZGlzdGluY3RVbnRpbENoYW5nZWQgYXMgd2UgbmVlZCB0aGUgYWJpbGl0eSB0byB1cGRhdGVcbiAgICAvLyB0aGUgdmFsdWUgd2hlbiB1c2luZyBzZXRUcmFuc2xhdGlvbiBvciBzZXRUcmFuc2xhdGlvbktleXNcbiAgICB0aGlzLmxhbmdDaGFuZ2VzJCA9IHRoaXMubGFuZy5hc09ic2VydmFibGUoKTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gd2UgaGF2ZSBhIGZhaWx1cmUsIHdlIHdhbnQgdG8gZGVmaW5lIHRoZSBuZXh0IGxhbmd1YWdlIHRoYXQgc3VjY2VlZGVkIGFzIHRoZSBhY3RpdmVcbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50cyQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICBpZiAoZS50eXBlID09PSAndHJhbnNsYXRpb25Mb2FkU3VjY2VzcycgJiYgZS53YXNGYWlsdXJlKSB7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlTGFuZyhlLnBheWxvYWQubGFuZ05hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0RGVmYXVsdExhbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdExhbmc7XG4gIH1cblxuICBzZXREZWZhdWx0TGFuZyhsYW5nOiBzdHJpbmcpIHtcbiAgICB0aGlzLmRlZmF1bHRMYW5nID0gbGFuZztcbiAgfVxuXG4gIGdldEFjdGl2ZUxhbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubGFuZy5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgc2V0QWN0aXZlTGFuZyhsYW5nOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBhcnNlci5vbkxhbmdDaGFuZ2VkPy4obGFuZyk7XG4gICAgdGhpcy5sYW5nLm5leHQobGFuZyk7XG4gICAgdGhpcy5ldmVudHMubmV4dCh7XG4gICAgICB0eXBlOiAnbGFuZ0NoYW5nZWQnLFxuICAgICAgcGF5bG9hZDogZ2V0RXZlbnRQYXlsb2FkKGxhbmcpLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0QXZhaWxhYmxlTGFuZ3MobGFuZ3M6IEF2YWlsYWJsZUxhbmdzKSB7XG4gICAgdGhpcy5hdmFpbGFibGVMYW5ncyA9IGxhbmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGF2YWlsYWJsZSBsYW5ndWFnZXMuXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIEFuIGFycmF5IG9mIHRoZSBhdmFpbGFibGUgbGFuZ3VhZ2VzLiBDYW4gYmUgZWl0aGVyIGEgYHN0cmluZ1tdYCBvciBhIGB7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdYFxuICAgKiBkZXBlbmRpbmcgb24gaG93IHRoZSBhdmFpbGFibGUgbGFuZ3VhZ2VzIGFyZSBzZXQgaW4geW91ciBtb2R1bGUuXG4gICAqL1xuICBnZXRBdmFpbGFibGVMYW5ncygpIHtcbiAgICByZXR1cm4gdGhpcy5hdmFpbGFibGVMYW5ncztcbiAgfVxuXG4gIGxvYWQocGF0aDogc3RyaW5nLCBvcHRpb25zOiBMb2FkT3B0aW9ucyA9IHt9KTogT2JzZXJ2YWJsZTxUcmFuc2xhdGlvbj4ge1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuY2FjaGUuZ2V0KHBhdGgpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuXG4gICAgbGV0IGxvYWRUcmFuc2xhdGlvbjogT2JzZXJ2YWJsZTxcbiAgICAgIFRyYW5zbGF0aW9uIHwgeyB0cmFuc2xhdGlvbjogVHJhbnNsYXRpb247IGxhbmc6IHN0cmluZyB9W11cbiAgICA+O1xuICAgIGNvbnN0IGlzU2NvcGUgPSB0aGlzLl9pc0xhbmdTY29wZWQocGF0aCk7XG4gICAgbGV0IHNjb3BlOiBzdHJpbmc7XG4gICAgaWYgKGlzU2NvcGUpIHtcbiAgICAgIHNjb3BlID0gZ2V0U2NvcGVGcm9tTGFuZyhwYXRoKTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2FkZXJzT3B0aW9ucyA9IHtcbiAgICAgIHBhdGgsXG4gICAgICBtYWluTG9hZGVyOiB0aGlzLmxvYWRlcixcbiAgICAgIGlubGluZUxvYWRlcjogb3B0aW9ucy5pbmxpbmVMb2FkZXIsXG4gICAgICBkYXRhOiBpc1Njb3BlID8geyBzY29wZTogc2NvcGUhIH0gOiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnVzZUZhbGxiYWNrVHJhbnNsYXRpb24ocGF0aCkpIHtcbiAgICAgIC8vIGlmIHRoZSBwYXRoIGlzIHNjb3BlIHRoZSBmYWxsYmFjayBzaG91bGQgYmUgYHNjb3BlL2ZhbGxiYWNrTGFuZ2A7XG4gICAgICBjb25zdCBmYWxsYmFjayA9IGlzU2NvcGVcbiAgICAgICAgPyBgJHtzY29wZSF9LyR7dGhpcy5maXJzdEZhbGxiYWNrTGFuZ31gXG4gICAgICAgIDogdGhpcy5maXJzdEZhbGxiYWNrTGFuZztcblxuICAgICAgY29uc3QgbG9hZGVycyA9IGdldEZhbGxiYWNrc0xvYWRlcnMoe1xuICAgICAgICAuLi5sb2FkZXJzT3B0aW9ucyxcbiAgICAgICAgZmFsbGJhY2tQYXRoOiBmYWxsYmFjayEsXG4gICAgICB9KTtcbiAgICAgIGxvYWRUcmFuc2xhdGlvbiA9IGZvcmtKb2luKGxvYWRlcnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsb2FkZXIgPSByZXNvbHZlTG9hZGVyKGxvYWRlcnNPcHRpb25zKTtcbiAgICAgIGxvYWRUcmFuc2xhdGlvbiA9IGZyb20obG9hZGVyKTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2FkJCA9IGxvYWRUcmFuc2xhdGlvbi5waXBlKFxuICAgICAgcmV0cnkodGhpcy5jb25maWcuZmFpbGVkUmV0cmllcyksXG4gICAgICB0YXAoKHRyYW5zbGF0aW9uKSA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRyYW5zbGF0aW9uKSkge1xuICAgICAgICAgIHRyYW5zbGF0aW9uLmZvckVhY2goKHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU3VjY2Vzcyh0LmxhbmcsIHQudHJhbnNsYXRpb24pO1xuICAgICAgICAgICAgLy8gU2F2ZSB0aGUgZmFsbGJhY2sgaW4gY2FjaGUgc28gd2UnbGwgbm90IGNyZWF0ZSBhIHJlZHVuZGFudCByZXF1ZXN0XG4gICAgICAgICAgICBpZiAodC5sYW5nICE9PSBwYXRoKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2FjaGUuc2V0KHQubGFuZywgb2Yoe30pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYW5kbGVTdWNjZXNzKHBhdGgsIHRyYW5zbGF0aW9uKTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5wcm9kTW9kZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHdoaWxlIHRyeWluZyB0byBsb2FkIFwiJHtwYXRofVwiYCwgZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRmFpbHVyZShwYXRoLCBvcHRpb25zKTtcbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuXG4gICAgdGhpcy5jYWNoZS5zZXQocGF0aCwgbG9hZCQpO1xuXG4gICAgcmV0dXJuIGxvYWQkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGluc3RhbnQgdHJhbnNsYXRlZCB2YWx1ZSBvZiBhIGtleVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiB0cmFuc2xhdGU8c3RyaW5nPignaGVsbG8nKVxuICAgKiB0cmFuc2xhdGUoJ2hlbGxvJywgeyB2YWx1ZTogJ3ZhbHVlJyB9KVxuICAgKiB0cmFuc2xhdGU8c3RyaW5nW10+KFsnaGVsbG8nLCAna2V5J10pXG4gICAqIHRyYW5zbGF0ZSgnaGVsbG8nLCB7IH0sICdlbicpXG4gICAqIHRyYW5zbGF0ZSgnc2NvcGUuc29tZUtleScsIHsgfSwgJ2VuJylcbiAgICovXG4gIHRyYW5zbGF0ZTxUID0gc3RyaW5nPihcbiAgICBrZXk6IFRyYW5zbGF0ZVBhcmFtcyxcbiAgICBwYXJhbXM6IEhhc2hNYXAgPSB7fSxcbiAgICBsYW5nID0gdGhpcy5nZXRBY3RpdmVMYW5nKClcbiAgKTogVCB7XG4gICAgaWYgKCFrZXkpIHJldHVybiBrZXkgYXMgYW55O1xuXG4gICAgY29uc3QgeyBzY29wZSwgcmVzb2x2ZUxhbmcgfSA9IHRoaXMucmVzb2x2ZUxhbmdBbmRTY29wZShsYW5nKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICAgIHJldHVybiBrZXkubWFwKChrKSA9PlxuICAgICAgICB0aGlzLnRyYW5zbGF0ZShzY29wZSA/IGAke3Njb3BlfS4ke2t9YCA6IGssIHBhcmFtcywgcmVzb2x2ZUxhbmcpXG4gICAgICApIGFzIGFueTtcbiAgICB9XG5cbiAgICBrZXkgPSBzY29wZSA/IGAke3Njb3BlfS4ke2tleX1gIDoga2V5O1xuXG4gICAgY29uc3QgdHJhbnNsYXRpb24gPSB0aGlzLmdldFRyYW5zbGF0aW9uKHJlc29sdmVMYW5nKTtcbiAgICBjb25zdCB2YWx1ZSA9IHRyYW5zbGF0aW9uW2tleV07XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5faGFuZGxlTWlzc2luZ0tleShrZXksIHZhbHVlLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBhcnNlci50cmFuc3BpbGUoe1xuICAgICAgdmFsdWUsXG4gICAgICBwYXJhbXMsXG4gICAgICB0cmFuc2xhdGlvbixcbiAgICAgIGtleSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0cmFuc2xhdGVkIHZhbHVlIG9mIGEga2V5IGFzIG9ic2VydmFibGVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogc2VsZWN0VHJhbnNsYXRlPHN0cmluZz4oJ2hlbGxvJykuc3Vic2NyaWJlKHZhbHVlID0+IC4uLilcbiAgICogc2VsZWN0VHJhbnNsYXRlPHN0cmluZz4oJ2hlbGxvJywge30sICdlcycpLnN1YnNjcmliZSh2YWx1ZSA9PiAuLi4pXG4gICAqIHNlbGVjdFRyYW5zbGF0ZTxzdHJpbmc+KCdoZWxsbycsIHt9LCAndG9kb3MnKS5zdWJzY3JpYmUodmFsdWUgPT4gLi4uKVxuICAgKiBzZWxlY3RUcmFuc2xhdGU8c3RyaW5nPignaGVsbG8nLCB7fSwgeyBzY29wZTogJ3RvZG9zJyB9KS5zdWJzY3JpYmUodmFsdWUgPT4gLi4uKVxuICAgKlxuICAgKi9cbiAgc2VsZWN0VHJhbnNsYXRlPFQgPSBhbnk+KFxuICAgIGtleTogVHJhbnNsYXRlUGFyYW1zLFxuICAgIHBhcmFtcz86IEhhc2hNYXAsXG4gICAgbGFuZz86IHN0cmluZyB8IFRyYW5zbG9jb1Njb3BlIHwgVHJhbnNsb2NvU2NvcGVbXSxcbiAgICBfaXNPYmplY3QgPSBmYWxzZVxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBsZXQgaW5saW5lTG9hZGVyOiBJbmxpbmVMb2FkZXIgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgbG9hZCA9IChsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBMb2FkT3B0aW9ucykgPT5cbiAgICAgIHRoaXMubG9hZChsYW5nLCBvcHRpb25zKS5waXBlKFxuICAgICAgICBtYXAoKCkgPT5cbiAgICAgICAgICBfaXNPYmplY3RcbiAgICAgICAgICAgID8gdGhpcy50cmFuc2xhdGVPYmplY3Qoa2V5LCBwYXJhbXMsIGxhbmcpXG4gICAgICAgICAgICA6IHRoaXMudHJhbnNsYXRlKGtleSwgcGFyYW1zLCBsYW5nKVxuICAgICAgICApXG4gICAgICApO1xuICAgIGlmIChpc05pbChsYW5nKSkge1xuICAgICAgcmV0dXJuIHRoaXMubGFuZ0NoYW5nZXMkLnBpcGUoc3dpdGNoTWFwKChsYW5nKSA9PiBsb2FkKGxhbmcpKSk7XG4gICAgfVxuXG4gICAgbGFuZyA9IEFycmF5LmlzQXJyYXkobGFuZykgPyBsYW5nWzBdIDogbGFuZztcbiAgICBpZiAoaXNTY29wZU9iamVjdChsYW5nKSkge1xuICAgICAgLy8gaXQncyBhIHNjb3BlIG9iamVjdC5cbiAgICAgIGNvbnN0IHByb3ZpZGVyU2NvcGUgPSBsYW5nO1xuICAgICAgbGFuZyA9IHByb3ZpZGVyU2NvcGUuc2NvcGU7XG4gICAgICBpbmxpbmVMb2FkZXIgPSByZXNvbHZlSW5saW5lTG9hZGVyKHByb3ZpZGVyU2NvcGUsIHByb3ZpZGVyU2NvcGUuc2NvcGUpO1xuICAgIH1cblxuICAgIGxhbmcgPSBsYW5nIGFzIHN0cmluZztcbiAgICBpZiAodGhpcy5pc0xhbmcobGFuZykgfHwgdGhpcy5pc1Njb3BlV2l0aExhbmcobGFuZykpIHtcbiAgICAgIHJldHVybiBsb2FkKGxhbmcpO1xuICAgIH1cbiAgICAvLyBpdCdzIGEgc2NvcGVcbiAgICBjb25zdCBzY29wZSA9IGxhbmc7XG4gICAgcmV0dXJuIHRoaXMubGFuZ0NoYW5nZXMkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGxhbmcpID0+IGxvYWQoYCR7c2NvcGV9LyR7bGFuZ31gLCB7IGlubGluZUxvYWRlciB9KSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNjb3BlIHdpdGggbGFuZ1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiB0b2Rvcy9lbiA9PiB0cnVlXG4gICAqIHRvZG9zID0+IGZhbHNlXG4gICAqL1xuICBwcml2YXRlIGlzU2NvcGVXaXRoTGFuZyhsYW5nOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pc0xhbmcoZ2V0TGFuZ0Zyb21TY29wZShsYW5nKSk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNsYXRlIHRoZSBnaXZlbiBwYXRoIHRoYXQgcmV0dXJucyBhbiBvYmplY3RcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogc2VydmljZS50cmFuc2xhdGVPYmplY3QoJ3BhdGgudG8ub2JqZWN0JywgeydzdWJwYXRoJzogeyB2YWx1ZTogJ3NvbWVWYWx1ZSd9fSkgPT4gcmV0dXJucyB0cmFuc2xhdGVkIG9iamVjdFxuICAgKlxuICAgKi9cbiAgdHJhbnNsYXRlT2JqZWN0PFQgPSBhbnk+KGtleTogc3RyaW5nLCBwYXJhbXM/OiBIYXNoTWFwLCBsYW5nPzogc3RyaW5nKTogVDtcbiAgdHJhbnNsYXRlT2JqZWN0PFQgPSBhbnk+KGtleTogc3RyaW5nW10sIHBhcmFtcz86IEhhc2hNYXAsIGxhbmc/OiBzdHJpbmcpOiBUW107XG4gIHRyYW5zbGF0ZU9iamVjdDxUID0gYW55PihcbiAgICBrZXk6IFRyYW5zbGF0ZVBhcmFtcyxcbiAgICBwYXJhbXM/OiBIYXNoTWFwLFxuICAgIGxhbmc/OiBzdHJpbmdcbiAgKTogVCB8IFRbXTtcbiAgdHJhbnNsYXRlT2JqZWN0PFQgPSBhbnk+KFxuICAgIGtleTogSGFzaE1hcCB8IE1hcDxzdHJpbmcsIEhhc2hNYXA+LFxuICAgIHBhcmFtcz86IG51bGwsXG4gICAgbGFuZz86IHN0cmluZ1xuICApOiBUW107XG4gIHRyYW5zbGF0ZU9iamVjdDxUID0gYW55PihcbiAgICBrZXk6IFRyYW5zbGF0ZU9iamVjdFBhcmFtcyxcbiAgICBwYXJhbXM6IEhhc2hNYXAgfCBudWxsID0ge30sXG4gICAgbGFuZyA9IHRoaXMuZ2V0QWN0aXZlTGFuZygpXG4gICk6IFQgfCBUW10ge1xuICAgIGlmIChpc1N0cmluZyhrZXkpIHx8IEFycmF5LmlzQXJyYXkoa2V5KSkge1xuICAgICAgY29uc3QgeyByZXNvbHZlTGFuZywgc2NvcGUgfSA9IHRoaXMucmVzb2x2ZUxhbmdBbmRTY29wZShsYW5nKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICAgICAgcmV0dXJuIGtleS5tYXAoKGspID0+XG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVPYmplY3QoXG4gICAgICAgICAgICBzY29wZSA/IGAke3Njb3BlfS4ke2t9YCA6IGssXG4gICAgICAgICAgICBwYXJhbXMhLFxuICAgICAgICAgICAgcmVzb2x2ZUxhbmdcbiAgICAgICAgICApXG4gICAgICAgICkgYXMgYW55O1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHRoaXMuZ2V0VHJhbnNsYXRpb24ocmVzb2x2ZUxhbmcpO1xuICAgICAga2V5ID0gc2NvcGUgPyBgJHtzY29wZX0uJHtrZXl9YCA6IGtleTtcblxuICAgICAgY29uc3QgdmFsdWUgPSB1bmZsYXR0ZW4odGhpcy5nZXRPYmplY3RCeUtleSh0cmFuc2xhdGlvbiwga2V5KSk7XG4gICAgICAvKiBJZiBhbiBlbXB0eSBvYmplY3Qgd2FzIHJldHVybmVkIHdlIHdhbnQgdG8gdHJ5IGFuZCB0cmFuc2xhdGUgdGhlIGtleSBhcyBhIHN0cmluZyBhbmQgbm90IGFuIG9iamVjdCAqL1xuICAgICAgcmV0dXJuIGlzRW1wdHkodmFsdWUpXG4gICAgICAgID8gdGhpcy50cmFuc2xhdGUoa2V5LCBwYXJhbXMhLCBsYW5nKVxuICAgICAgICA6IHRoaXMucGFyc2VyLnRyYW5zcGlsZSh7IHZhbHVlLCBwYXJhbXM6IHBhcmFtcyEsIHRyYW5zbGF0aW9uLCBrZXkgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNsYXRpb25zOiBUW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtfa2V5LCBfcGFyYW1zXSBvZiB0aGlzLmdldEVudHJpZXMoa2V5KSkge1xuICAgICAgdHJhbnNsYXRpb25zLnB1c2godGhpcy50cmFuc2xhdGVPYmplY3QoX2tleSwgX3BhcmFtcywgbGFuZykpO1xuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2xhdGlvbnM7XG4gIH1cblxuICBzZWxlY3RUcmFuc2xhdGVPYmplY3Q8VCA9IGFueT4oXG4gICAga2V5OiBzdHJpbmcsXG4gICAgcGFyYW1zPzogSGFzaE1hcCxcbiAgICBsYW5nPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8VD47XG4gIHNlbGVjdFRyYW5zbGF0ZU9iamVjdDxUID0gYW55PihcbiAgICBrZXk6IHN0cmluZ1tdLFxuICAgIHBhcmFtcz86IEhhc2hNYXAsXG4gICAgbGFuZz86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPFRbXT47XG4gIHNlbGVjdFRyYW5zbGF0ZU9iamVjdDxUID0gYW55PihcbiAgICBrZXk6IFRyYW5zbGF0ZVBhcmFtcyxcbiAgICBwYXJhbXM/OiBIYXNoTWFwLFxuICAgIGxhbmc/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxUPiB8IE9ic2VydmFibGU8VFtdPjtcbiAgc2VsZWN0VHJhbnNsYXRlT2JqZWN0PFQgPSBhbnk+KFxuICAgIGtleTogSGFzaE1hcCB8IE1hcDxzdHJpbmcsIEhhc2hNYXA+LFxuICAgIHBhcmFtcz86IG51bGwsXG4gICAgbGFuZz86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPFRbXT47XG4gIHNlbGVjdFRyYW5zbGF0ZU9iamVjdDxUID0gYW55PihcbiAgICBrZXk6IFRyYW5zbGF0ZU9iamVjdFBhcmFtcyxcbiAgICBwYXJhbXM/OiBIYXNoTWFwIHwgbnVsbCxcbiAgICBsYW5nPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8VD4gfCBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIGlmIChpc1N0cmluZyhrZXkpIHx8IEFycmF5LmlzQXJyYXkoa2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0VHJhbnNsYXRlPFQ+KGtleSwgcGFyYW1zISwgbGFuZywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgW1tmaXJzdEtleSwgZmlyc3RQYXJhbXNdLCAuLi5yZXN0XSA9IHRoaXMuZ2V0RW50cmllcyhrZXkpO1xuXG4gICAgLyogSW4gb3JkZXIgdG8gYXZvaWQgc3Vic2NyaWJpbmcgbXVsdGlwbGUgdGltZXMgdG8gdGhlIGxvYWQgbGFuZ3VhZ2UgZXZlbnQgYnkgY2FsbGluZyBzZWxlY3RUcmFuc2xhdGVPYmplY3QgZm9yIGVhY2ggcGFpcixcbiAgICAgKiB3ZSBsaXN0ZW4gdG8gd2hlbiB0aGUgZmlyc3Qga2V5IGhhcyBiZWVuIHRyYW5zbGF0ZWQgKHRoZSBsYW5ndWFnZSBpcyBsb2FkZWQpIGFuZCB0cmFuc2xhdGUgdGhlIHJlc3Qgc3luY2hyb25vdXNseSAqL1xuICAgIHJldHVybiB0aGlzLnNlbGVjdFRyYW5zbGF0ZU9iamVjdDxUPihmaXJzdEtleSwgZmlyc3RQYXJhbXMsIGxhbmcpLnBpcGUoXG4gICAgICBtYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IFt2YWx1ZV07XG4gICAgICAgIGZvciAoY29uc3QgW19rZXksIF9wYXJhbXNdIG9mIHJlc3QpIHtcbiAgICAgICAgICB0cmFuc2xhdGlvbnMucHVzaCh0aGlzLnRyYW5zbGF0ZU9iamVjdDxUPihfa2V5LCBfcGFyYW1zLCBsYW5nKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJhbnNsYXRpb25zO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW4gb2JqZWN0IG9mIHRyYW5zbGF0aW9ucyBmb3IgYSBnaXZlbiBsYW5ndWFnZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBnZXRUcmFuc2xhdGlvbigpXG4gICAqIGdldFRyYW5zbGF0aW9uKCdlbicpXG4gICAqIGdldFRyYW5zbGF0aW9uKCdhZG1pbi1wYWdlL2VuJylcbiAgICovXG4gIGdldFRyYW5zbGF0aW9uKCk6IE1hcDxzdHJpbmcsIFRyYW5zbGF0aW9uPjtcbiAgZ2V0VHJhbnNsYXRpb24obGFuZ09yU2NvcGU6IHN0cmluZyk6IFRyYW5zbGF0aW9uO1xuICBnZXRUcmFuc2xhdGlvbihsYW5nT3JTY29wZT86IHN0cmluZyk6IE1hcDxzdHJpbmcsIFRyYW5zbGF0aW9uPiB8IFRyYW5zbGF0aW9uIHtcbiAgICBpZiAobGFuZ09yU2NvcGUpIHtcbiAgICAgIGlmICh0aGlzLmlzTGFuZyhsYW5nT3JTY29wZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25zLmdldChsYW5nT3JTY29wZSkgfHwge307XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGlzIGEgc2NvcGUsIGJ1aWxkIHRoZSBzY29wZSB2YWx1ZSBmcm9tIHRoZSB0cmFuc2xhdGlvbiBvYmplY3RcbiAgICAgICAgY29uc3QgeyBzY29wZSwgcmVzb2x2ZUxhbmcgfSA9IHRoaXMucmVzb2x2ZUxhbmdBbmRTY29wZShsYW5nT3JTY29wZSk7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdGhpcy50cmFuc2xhdGlvbnMuZ2V0KHJlc29sdmVMYW5nKSB8fCB7fTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RCeUtleSh0cmFuc2xhdGlvbiwgc2NvcGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuIG9iamVjdCBvZiB0cmFuc2xhdGlvbnMgZm9yIGEgZ2l2ZW4gbGFuZ3VhZ2VcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogc2VsZWN0VHJhbnNsYXRpb24oKS5zdWJzY3JpYmUoKSAtIHdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IGxhbmcgdHJhbnNsYXRpb25cbiAgICogc2VsZWN0VHJhbnNsYXRpb24oJ2VzJykuc3Vic2NyaWJlKClcbiAgICogc2VsZWN0VHJhbnNsYXRpb24oJ2FkbWluLXBhZ2UnKS5zdWJzY3JpYmUoKSAtIHdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IGxhbmcgc2NvcGUgdHJhbnNsYXRpb25cbiAgICogc2VsZWN0VHJhbnNsYXRpb24oJ2FkbWluLXBhZ2UvZXMnKS5zdWJzY3JpYmUoKVxuICAgKi9cbiAgc2VsZWN0VHJhbnNsYXRpb24obGFuZz86IHN0cmluZyk6IE9ic2VydmFibGU8VHJhbnNsYXRpb24+IHtcbiAgICBsZXQgbGFuZ3VhZ2UkID0gdGhpcy5sYW5nQ2hhbmdlcyQ7XG4gICAgaWYgKGxhbmcpIHtcbiAgICAgIGNvbnN0IHNjb3BlTGFuZ1NwZWNpZmllZCA9IGdldExhbmdGcm9tU2NvcGUobGFuZykgIT09IGxhbmc7XG4gICAgICBpZiAodGhpcy5pc0xhbmcobGFuZykgfHwgc2NvcGVMYW5nU3BlY2lmaWVkKSB7XG4gICAgICAgIGxhbmd1YWdlJCA9IG9mKGxhbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGFuZ3VhZ2UkID0gdGhpcy5sYW5nQ2hhbmdlcyQucGlwZShcbiAgICAgICAgICBtYXAoKGN1cnJlbnRMYW5nKSA9PiBgJHtsYW5nfS8ke2N1cnJlbnRMYW5nfWApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhbmd1YWdlJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChsYW5ndWFnZSkgPT5cbiAgICAgICAgdGhpcy5sb2FkKGxhbmd1YWdlKS5waXBlKG1hcCgoKSA9PiB0aGlzLmdldFRyYW5zbGF0aW9uKGxhbmd1YWdlKSkpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIG9yIG1lcmdlIGEgZ2l2ZW4gdHJhbnNsYXRpb24gb2JqZWN0IHRvIGN1cnJlbnQgbGFuZ1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBzZXRUcmFuc2xhdGlvbih7IC4uLiB9KVxuICAgKiBzZXRUcmFuc2xhdGlvbih7IC4uLiB9LCAnZW4nKVxuICAgKiBzZXRUcmFuc2xhdGlvbih7IC4uLiB9LCAnZXMnLCB7IG1lcmdlOiBmYWxzZSB9IClcbiAgICogc2V0VHJhbnNsYXRpb24oeyAuLi4gfSwgJ3RvZG9zL2VuJywgeyBtZXJnZTogZmFsc2UgfSApXG4gICAqL1xuICBzZXRUcmFuc2xhdGlvbihcbiAgICB0cmFuc2xhdGlvbjogVHJhbnNsYXRpb24sXG4gICAgbGFuZyA9IHRoaXMuZ2V0QWN0aXZlTGFuZygpLFxuICAgIG9wdGlvbnM6IFNldFRyYW5zbGF0aW9uT3B0aW9ucyA9IHt9XG4gICkge1xuICAgIGNvbnN0IGRlZmF1bHRzID0geyBtZXJnZTogdHJ1ZSwgZW1pdENoYW5nZTogdHJ1ZSB9O1xuICAgIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSB7IC4uLmRlZmF1bHRzLCAuLi5vcHRpb25zIH07XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZUZyb21MYW5nKGxhbmcpO1xuXG4gICAgLyoqXG4gICAgICogSWYgdGhpcyBpc24ndCBhIHNjb3BlIHdlIHVzZSB0aGUgd2hvbGUgdHJhbnNsYXRpb24gYXMgaXNcbiAgICAgKiBvdGhlcndpc2Ugd2UgbmVlZCB0byBmbGF0IHRoZSBzY29wZSBhbmQgdXNlIGl0XG4gICAgICovXG4gICAgbGV0IGZsYXR0ZW5TY29wZU9yVHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbjtcblxuICAgIC8vIE1lcmdlZCB0aGUgc2NvcGVkIGxhbmd1YWdlIGludG8gdGhlIGFjdGl2ZSBsYW5ndWFnZVxuICAgIGlmIChzY29wZSkge1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRNYXBwZWRTY29wZShzY29wZSk7XG4gICAgICBmbGF0dGVuU2NvcGVPclRyYW5zbGF0aW9uID0gZmxhdHRlbih7IFtrZXldOiB0cmFuc2xhdGlvbiB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50TGFuZyA9IHNjb3BlID8gZ2V0TGFuZ0Zyb21TY29wZShsYW5nKSA6IGxhbmc7XG5cbiAgICBjb25zdCBtZXJnZWRUcmFuc2xhdGlvbiA9IHtcbiAgICAgIC4uLihtZXJnZWRPcHRpb25zLm1lcmdlICYmIHRoaXMuZ2V0VHJhbnNsYXRpb24oY3VycmVudExhbmcpKSxcbiAgICAgIC4uLmZsYXR0ZW5TY29wZU9yVHJhbnNsYXRpb24sXG4gICAgfTtcblxuICAgIGNvbnN0IGZsYXR0ZW5UcmFuc2xhdGlvbiA9IHRoaXMuY29uZmlnLmZsYXR0ZW4hLmFvdFxuICAgICAgPyBtZXJnZWRUcmFuc2xhdGlvblxuICAgICAgOiBmbGF0dGVuKG1lcmdlZFRyYW5zbGF0aW9uKTtcbiAgICBjb25zdCB3aXRoSG9vayA9IHRoaXMuaW50ZXJjZXB0b3IucHJlU2F2ZVRyYW5zbGF0aW9uKFxuICAgICAgZmxhdHRlblRyYW5zbGF0aW9uLFxuICAgICAgY3VycmVudExhbmdcbiAgICApO1xuICAgIHRoaXMudHJhbnNsYXRpb25zLnNldChjdXJyZW50TGFuZywgd2l0aEhvb2spO1xuICAgIG1lcmdlZE9wdGlvbnMuZW1pdENoYW5nZSAmJiB0aGlzLnNldEFjdGl2ZUxhbmcodGhpcy5nZXRBY3RpdmVMYW5nKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdHJhbnNsYXRpb24ga2V5IHdpdGggZ2l2ZW4gdmFsdWVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogc2V0VHJhbnNsYXRpb25LZXkoJ2tleScsICd2YWx1ZScpXG4gICAqIHNldFRyYW5zbGF0aW9uS2V5KCdrZXkubmVzdGVkJywgJ3ZhbHVlJylcbiAgICogc2V0VHJhbnNsYXRpb25LZXkoJ2tleS5uZXN0ZWQnLCAndmFsdWUnLCAnZW4nKVxuICAgKiBzZXRUcmFuc2xhdGlvbktleSgna2V5Lm5lc3RlZCcsICd2YWx1ZScsICdlbicsIHsgZW1pdENoYW5nZTogZmFsc2UgfSApXG4gICAqL1xuICBzZXRUcmFuc2xhdGlvbktleShcbiAgICBrZXk6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IE9taXQ8U2V0VHJhbnNsYXRpb25PcHRpb25zLCAnbWVyZ2UnPiA9IHt9XG4gICkge1xuICAgIGNvbnN0IGxhbmcgPSBvcHRpb25zLmxhbmcgfHwgdGhpcy5nZXRBY3RpdmVMYW5nKCk7XG4gICAgY29uc3Qgd2l0aEhvb2sgPSB0aGlzLmludGVyY2VwdG9yLnByZVNhdmVUcmFuc2xhdGlvbktleShrZXksIHZhbHVlLCBsYW5nKTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHtcbiAgICAgIFtrZXldOiB3aXRoSG9vayxcbiAgICB9O1xuXG4gICAgdGhpcy5zZXRUcmFuc2xhdGlvbihuZXdWYWx1ZSwgbGFuZywgeyAuLi5vcHRpb25zLCBtZXJnZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBmYWxsYmFjayBsYW5nIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsYW5ndWFnZVxuICAgKiBAcGFyYW0gZmFsbGJhY2tMYW5nXG4gICAqL1xuICBzZXRGYWxsYmFja0xhbmdGb3JNaXNzaW5nVHJhbnNsYXRpb24oe1xuICAgIGZhbGxiYWNrTGFuZyxcbiAgfTogUGljazxUcmFuc2xvY29Db25maWcsICdmYWxsYmFja0xhbmcnPikge1xuICAgIGNvbnN0IGxhbmcgPSBBcnJheS5pc0FycmF5KGZhbGxiYWNrTGFuZykgPyBmYWxsYmFja0xhbmdbMF0gOiBmYWxsYmFja0xhbmc7XG4gICAgaWYgKGZhbGxiYWNrTGFuZyAmJiB0aGlzLnVzZUZhbGxiYWNrVHJhbnNsYXRpb24obGFuZykpIHtcbiAgICAgIHRoaXMuZmlyc3RGYWxsYmFja0xhbmcgPSBsYW5nITtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfaGFuZGxlTWlzc2luZ0tleShrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgcGFyYW1zPzogSGFzaE1hcCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5taXNzaW5nSGFuZGxlciEuYWxsb3dFbXB0eSAmJiB2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNSZXNvbHZlZE1pc3NpbmdPbmNlICYmIHRoaXMudXNlRmFsbGJhY2tUcmFuc2xhdGlvbigpKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHNldCBpdCB0byB0cnVlIHRvIHByZXZlbnQgYSBsb29wXG4gICAgICB0aGlzLmlzUmVzb2x2ZWRNaXNzaW5nT25jZSA9IHRydWU7XG4gICAgICBjb25zdCBmYWxsYmFja1ZhbHVlID0gdGhpcy50cmFuc2xhdGUoXG4gICAgICAgIGtleSxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICB0aGlzLmZpcnN0RmFsbGJhY2tMYW5nIVxuICAgICAgKTtcbiAgICAgIHRoaXMuaXNSZXNvbHZlZE1pc3NpbmdPbmNlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBmYWxsYmFja1ZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm1pc3NpbmdIYW5kbGVyLmhhbmRsZShcbiAgICAgIGtleSxcbiAgICAgIHRoaXMuZ2V0TWlzc2luZ0hhbmRsZXJEYXRhKCksXG4gICAgICBwYXJhbXNcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX2lzTGFuZ1Njb3BlZChsYW5nOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBdmFpbGFibGVMYW5nc0lkcygpLmluZGV4T2YobGFuZykgPT09IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIHN0cmluZyBpcyBvbmUgb2YgdGhlIHNwZWNpZmllZCBhdmFpbGFibGUgbGFuZ3VhZ2VzLlxuICAgKiBAcmV0dXJuc1xuICAgKiBUcnVlIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgYW4gYXZhaWxhYmxlIGxhbmd1YWdlLlxuICAgKiBGYWxzZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIG5vdCBhbiBhdmFpbGFibGUgbGFuZ3VhZ2UuXG4gICAqL1xuICBpc0xhbmcobGFuZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXZhaWxhYmxlTGFuZ3NJZHMoKS5pbmRleE9mKGxhbmcpICE9PSAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICpcbiAgICogV2UgYWx3YXlzIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBnbG9iYWwgbGFuZyBpcyBsb2FkZWRcbiAgICogYmVmb3JlIGxvYWRpbmcgdGhlIHNjb3BlIHNpbmNlIHlvdSBjYW4gYWNjZXNzIGJvdGggdmlhIHRoZSBwaXBlL2RpcmVjdGl2ZS5cbiAgICovXG4gIF9sb2FkRGVwZW5kZW5jaWVzKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBpbmxpbmVMb2FkZXI/OiBJbmxpbmVMb2FkZXJcbiAgKTogT2JzZXJ2YWJsZTxUcmFuc2xhdGlvbiB8IFRyYW5zbGF0aW9uW10+IHtcbiAgICBjb25zdCBtYWluTGFuZyA9IGdldExhbmdGcm9tU2NvcGUocGF0aCk7XG5cbiAgICBpZiAodGhpcy5faXNMYW5nU2NvcGVkKHBhdGgpICYmICF0aGlzLmlzTG9hZGVkVHJhbnNsYXRpb24obWFpbkxhbmcpKSB7XG4gICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMubG9hZChtYWluTGFuZyksXG4gICAgICAgIHRoaXMubG9hZChwYXRoLCB7IGlubGluZUxvYWRlciB9KSxcbiAgICAgIF0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sb2FkKHBhdGgsIHsgaW5saW5lTG9hZGVyIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX2NvbXBsZXRlU2NvcGVXaXRoTGFuZyhsYW5nT3JTY29wZTogc3RyaW5nKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5faXNMYW5nU2NvcGVkKGxhbmdPclNjb3BlKSAmJlxuICAgICAgIXRoaXMuaXNMYW5nKGdldExhbmdGcm9tU2NvcGUobGFuZ09yU2NvcGUpKVxuICAgICkge1xuICAgICAgcmV0dXJuIGAke2xhbmdPclNjb3BlfS8ke3RoaXMuZ2V0QWN0aXZlTGFuZygpfWA7XG4gICAgfVxuICAgIHJldHVybiBsYW5nT3JTY29wZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9zZXRTY29wZUFsaWFzKHNjb3BlOiBzdHJpbmcsIGFsaWFzOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLnNjb3BlTWFwcGluZykge1xuICAgICAgdGhpcy5jb25maWcuc2NvcGVNYXBwaW5nID0ge307XG4gICAgfVxuICAgIHRoaXMuY29uZmlnLnNjb3BlTWFwcGluZ1tzY29wZV0gPSBhbGlhcztcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIC8vIENhcmV0YWtlciBub3RlOiBzaW5jZSB0aGlzIGlzIHRoZSByb290IHByb3ZpZGVyLCBpdCdsbCBiZSBkZXN0cm95ZWQgd2hlbiB0aGUgYE5nTW9kdWxlUmVmLmRlc3Ryb3koKWAgaXMgcnVuLlxuICAgIC8vIENhY2hlZCB2YWx1ZXMgY2FwdHVyZSBgdGhpc2AsIHRodXMgbGVhZGluZyB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSBhbmQgcHJldmVudGluZyB0aGUgYFRyYW5zbG9jb1NlcnZpY2VgIGZyb21cbiAgICAvLyBiZWluZyBHQydkLiBUaGlzIHdvdWxkIGxlYWQgdG8gYSBtZW1vcnkgbGVhayB3aGVuIHNlcnZlci1zaWRlIHJlbmRlcmluZyBpcyB1c2VkIHNpbmNlIHRoZSBzZXJ2aWNlIGlzIGNyZWF0ZWRcbiAgICAvLyBhbmQgZGVzdHJveWVkIHBlciBlYWNoIEhUVFAgcmVxdWVzdCwgYnV0IGFueSBzZXJ2aWNlIGlzIG5vdCBnZXR0aW5nIEdDJ2QuXG4gICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0xvYWRlZFRyYW5zbGF0aW9uKGxhbmc6IHN0cmluZykge1xuICAgIHJldHVybiBzaXplKHRoaXMuZ2V0VHJhbnNsYXRpb24obGFuZykpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdmFpbGFibGVMYW5nc0lkcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZmlyc3QgPSB0aGlzLmdldEF2YWlsYWJsZUxhbmdzKClbMF07XG5cbiAgICBpZiAoaXNTdHJpbmcoZmlyc3QpKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRBdmFpbGFibGVMYW5ncygpIGFzIHN0cmluZ1tdO1xuICAgIH1cblxuICAgIHJldHVybiAodGhpcy5nZXRBdmFpbGFibGVMYW5ncygpIGFzIExhbmdEZWZpbml0aW9uW10pLm1hcCgobCkgPT4gbC5pZCk7XG4gIH1cblxuICBwcml2YXRlIGdldE1pc3NpbmdIYW5kbGVyRGF0YSgpOiBUcmFuc2xvY29NaXNzaW5nSGFuZGxlckRhdGEge1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgIGFjdGl2ZUxhbmc6IHRoaXMuZ2V0QWN0aXZlTGFuZygpLFxuICAgICAgYXZhaWxhYmxlTGFuZ3M6IHRoaXMuYXZhaWxhYmxlTGFuZ3MsXG4gICAgICBkZWZhdWx0TGFuZzogdGhpcy5kZWZhdWx0TGFuZyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSBhIGZhbGxiYWNrIHRyYW5zbGF0aW9uIHNldCBmb3IgbWlzc2luZyBrZXlzIG9mIHRoZSBwcmltYXJ5IGxhbmd1YWdlXG4gICAqIFRoaXMgaXMgdW5yZWxhdGVkIHRvIHRoZSBmYWxsYmFjayBsYW5ndWFnZSAod2hpY2ggY2hhbmdlcyB0aGUgYWN0aXZlIGxhbmd1YWdlKVxuICAgKi9cbiAgcHJpdmF0ZSB1c2VGYWxsYmFja1RyYW5zbGF0aW9uKGxhbmc/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jb25maWcubWlzc2luZ0hhbmRsZXIhLnVzZUZhbGxiYWNrVHJhbnNsYXRpb24gJiZcbiAgICAgIGxhbmcgIT09IHRoaXMuZmlyc3RGYWxsYmFja0xhbmdcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTdWNjZXNzKGxhbmc6IHN0cmluZywgdHJhbnNsYXRpb246IFRyYW5zbGF0aW9uKSB7XG4gICAgdGhpcy5zZXRUcmFuc2xhdGlvbih0cmFuc2xhdGlvbiwgbGFuZywgeyBlbWl0Q2hhbmdlOiBmYWxzZSB9KTtcbiAgICB0aGlzLmV2ZW50cy5uZXh0KHtcbiAgICAgIHdhc0ZhaWx1cmU6ICEhdGhpcy5mYWlsZWRMYW5ncy5zaXplLFxuICAgICAgdHlwZTogJ3RyYW5zbGF0aW9uTG9hZFN1Y2Nlc3MnLFxuICAgICAgcGF5bG9hZDogZ2V0RXZlbnRQYXlsb2FkKGxhbmcpLFxuICAgIH0pO1xuICAgIHRoaXMuZmFpbGVkTGFuZ3MuZm9yRWFjaCgobCkgPT4gdGhpcy5jYWNoZS5kZWxldGUobCkpO1xuICAgIHRoaXMuZmFpbGVkTGFuZ3MuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRmFpbHVyZShsYW5nOiBzdHJpbmcsIGxvYWRPcHRpb25zOiBMb2FkT3B0aW9ucykge1xuICAgIC8vIFdoZW4gc3RhcnRpbmcgdG8gbG9hZCBhIGZpcnN0IGNob2ljZSBsYW5ndWFnZSwgaW5pdGlhbGl6ZVxuICAgIC8vIHRoZSBmYWlsZWQgY291bnRlciBhbmQgcmVzb2x2ZSB0aGUgZmFsbGJhY2sgbGFuZ3MuXG4gICAgaWYgKGlzTmlsKGxvYWRPcHRpb25zLmZhaWxlZENvdW50ZXIpKSB7XG4gICAgICBsb2FkT3B0aW9ucy5mYWlsZWRDb3VudGVyID0gMDtcblxuICAgICAgaWYgKCFsb2FkT3B0aW9ucy5mYWxsYmFja0xhbmdzKSB7XG4gICAgICAgIGxvYWRPcHRpb25zLmZhbGxiYWNrTGFuZ3MgPSB0aGlzLmZhbGxiYWNrU3RyYXRlZ3kuZ2V0TmV4dExhbmdzKGxhbmcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNwbGl0dGVkID0gbGFuZy5zcGxpdCgnLycpO1xuICAgIGNvbnN0IGZhbGxiYWNrcyA9IGxvYWRPcHRpb25zLmZhbGxiYWNrTGFuZ3M7XG4gICAgY29uc3QgbmV4dExhbmcgPSBmYWxsYmFja3MhW2xvYWRPcHRpb25zLmZhaWxlZENvdW50ZXIhXTtcbiAgICB0aGlzLmZhaWxlZExhbmdzLmFkZChsYW5nKTtcblxuICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBhIGxvYWRlZCBmYWxsYmFjayBsYW5ndWFnZSBpcyByZXF1ZXN0ZWQgYWdhaW5cbiAgICBpZiAodGhpcy5jYWNoZS5oYXMobmV4dExhbmcpKSB7XG4gICAgICB0aGlzLmhhbmRsZVN1Y2Nlc3MobmV4dExhbmcsIHRoaXMuZ2V0VHJhbnNsYXRpb24obmV4dExhbmcpKTtcbiAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0ZhbGxiYWNrTGFuZyA9IG5leHRMYW5nID09PSBzcGxpdHRlZFtzcGxpdHRlZC5sZW5ndGggLSAxXTtcblxuICAgIGlmICghbmV4dExhbmcgfHwgaXNGYWxsYmFja0xhbmcpIHtcbiAgICAgIGxldCBtc2cgPSBgVW5hYmxlIHRvIGxvYWQgdHJhbnNsYXRpb24gYW5kIGFsbCB0aGUgZmFsbGJhY2sgbGFuZ3VhZ2VzYDtcbiAgICAgIGlmIChzcGxpdHRlZC5sZW5ndGggPiAxKSB7XG4gICAgICAgIG1zZyArPSBgLCBkaWQgeW91IG1pc3NwZWxsZWQgdGhlIHNjb3BlIG5hbWU/YDtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVMYW5nID0gbmV4dExhbmc7XG4gICAgLy8gaWYgaXQncyBzY29wZWQgbGFuZ1xuICAgIGlmIChzcGxpdHRlZC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHJlc29sdmUgaXQgdG86XG4gICAgICAvLyB0b2Rvcy9sYW5nTm90RXhpc3RzID0+IHRvZG9zL25leHRMYW5nXG4gICAgICBzcGxpdHRlZFtzcGxpdHRlZC5sZW5ndGggLSAxXSA9IG5leHRMYW5nO1xuICAgICAgcmVzb2x2ZUxhbmcgPSBzcGxpdHRlZC5qb2luKCcvJyk7XG4gICAgfVxuXG4gICAgbG9hZE9wdGlvbnMuZmFpbGVkQ291bnRlciErKztcbiAgICB0aGlzLmV2ZW50cy5uZXh0KHtcbiAgICAgIHR5cGU6ICd0cmFuc2xhdGlvbkxvYWRGYWlsdXJlJyxcbiAgICAgIHBheWxvYWQ6IGdldEV2ZW50UGF5bG9hZChsYW5nKSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmxvYWQocmVzb2x2ZUxhbmcsIGxvYWRPcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWFwcGVkU2NvcGUoc2NvcGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBzY29wZU1hcHBpbmcgPSB7fSB9ID0gdGhpcy5jb25maWc7XG4gICAgcmV0dXJuIHNjb3BlTWFwcGluZ1tzY29wZV0gfHwgdG9DYW1lbENhc2Uoc2NvcGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGxhbmcgaXMgc2NvcGUgd2UgbmVlZCB0byBjaGVjayB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICAgKiB0b2Rvcy9lcyA9PiBpbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIHRha2UgYGVzYCBhcyBsYW5nXG4gICAqIHRvZG9zID0+IGluIHRoaXMgY2FzZSB3ZSBzaG91bGQgc2V0IHRoZSBhY3RpdmUgbGFuZyBhcyBsYW5nXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVMYW5nQW5kU2NvcGUobGFuZzogc3RyaW5nKSB7XG4gICAgbGV0IHJlc29sdmVMYW5nID0gbGFuZztcbiAgICBsZXQgc2NvcGU7XG5cbiAgICBpZiAodGhpcy5faXNMYW5nU2NvcGVkKGxhbmcpKSB7XG4gICAgICAvLyBlbiBmb3IgZXhhbXBsZVxuICAgICAgY29uc3QgbGFuZ0Zyb21TY29wZSA9IGdldExhbmdGcm9tU2NvcGUobGFuZyk7XG4gICAgICAvLyBlbiBpcyBsYW5nXG4gICAgICBjb25zdCBoYXNMYW5nID0gdGhpcy5pc0xhbmcobGFuZ0Zyb21TY29wZSk7XG4gICAgICAvLyB0YWtlIGVuXG4gICAgICByZXNvbHZlTGFuZyA9IGhhc0xhbmcgPyBsYW5nRnJvbVNjb3BlIDogdGhpcy5nZXRBY3RpdmVMYW5nKCk7XG4gICAgICAvLyBmaW5kIHRoZSBzY29wZVxuICAgICAgc2NvcGUgPSB0aGlzLmdldE1hcHBlZFNjb3BlKGhhc0xhbmcgPyBnZXRTY29wZUZyb21MYW5nKGxhbmcpIDogbGFuZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc2NvcGUsIHJlc29sdmVMYW5nIH07XG4gIH1cblxuICBwcml2YXRlIGdldE9iamVjdEJ5S2V5KHRyYW5zbGF0aW9uOiBUcmFuc2xhdGlvbiwga2V5Pzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0OiBUcmFuc2xhdGlvbiA9IHt9O1xuICAgIGNvbnN0IHByZWZpeCA9IGAke2tleX0uYDtcblxuICAgIGZvciAoY29uc3QgY3VycmVudEtleSBpbiB0cmFuc2xhdGlvbikge1xuICAgICAgaWYgKGN1cnJlbnRLZXkuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgIHJlc3VsdFtjdXJyZW50S2V5LnJlcGxhY2UocHJlZml4LCAnJyldID0gdHJhbnNsYXRpb25bY3VycmVudEtleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RW50cmllcyhrZXk6IEhhc2hNYXAgfCBNYXA8c3RyaW5nLCBIYXNoTWFwPikge1xuICAgIHJldHVybiBrZXkgaW5zdGFuY2VvZiBNYXAgPyBrZXkuZW50cmllcygpIDogT2JqZWN0LmVudHJpZXMoa2V5KTtcbiAgfVxufVxuIl19
@@ -105,9 +105,6 @@ function toNumber(value) {
105
105
  function isScopeObject(item) {
106
106
  return item && typeof item.scope === 'string';
107
107
  }
108
- function isScopeArray(item) {
109
- return Array.isArray(item) && item.every(isScopeObject);
110
- }
111
108
  function hasInlineLoader(item) {
112
109
  return item && isObject(item.loader);
113
110
  }
@@ -632,9 +629,10 @@ class TranslocoService {
632
629
  if (isNil(lang)) {
633
630
  return this.langChanges$.pipe(switchMap((lang) => load(lang)));
634
631
  }
635
- if (isScopeArray(lang) || isScopeObject(lang)) {
632
+ lang = Array.isArray(lang) ? lang[0] : lang;
633
+ if (isScopeObject(lang)) {
636
634
  // it's a scope object.
637
- const providerScope = Array.isArray(lang) ? lang[0] : lang;
635
+ const providerScope = lang;
638
636
  lang = providerScope.scope;
639
637
  inlineLoader = resolveInlineLoader(providerScope, providerScope.scope);
640
638
  }
@@ -1573,5 +1571,5 @@ function getBrowserCultureLang() {
1573
1571
  * Generated bundle index. Do not edit.
1574
1572
  */
1575
1573
 
1576
- export { DefaultFallbackStrategy, DefaultInterceptor, DefaultMissingHandler, DefaultTranspiler, FunctionalTranspiler, TRANSLOCO_CONFIG, TRANSLOCO_FALLBACK_STRATEGY, TRANSLOCO_INTERCEPTOR, TRANSLOCO_LANG, TRANSLOCO_LOADER, TRANSLOCO_LOADING_TEMPLATE, TRANSLOCO_MISSING_HANDLER, TRANSLOCO_SCOPE, TRANSLOCO_TRANSPILER, TestingLoader, TranslocoDirective, TranslocoModule, TranslocoPipe, TranslocoService, TranslocoTestingModule, coerceArray, defaultConfig, flatten, getBrowserCultureLang, getBrowserLang, getFunctionArgs, getLangFromScope, getPipeValue, getScopeFromLang, getValue, hasInlineLoader, isBrowser, isDefined, isEmpty, isFunction, isNil, isNumber, isObject, isScopeArray, isScopeObject, isString, provideTransloco, provideTranslocoConfig, provideTranslocoFallbackStrategy, provideTranslocoInterceptor, provideTranslocoLang, provideTranslocoLoader, provideTranslocoLoadingTpl, provideTranslocoMissingHandler, provideTranslocoScope, provideTranslocoTranspiler, setValue, size, toCamelCase, toNumber, translate, translateObject, translocoConfig, unflatten };
1574
+ export { DefaultFallbackStrategy, DefaultInterceptor, DefaultMissingHandler, DefaultTranspiler, FunctionalTranspiler, TRANSLOCO_CONFIG, TRANSLOCO_FALLBACK_STRATEGY, TRANSLOCO_INTERCEPTOR, TRANSLOCO_LANG, TRANSLOCO_LOADER, TRANSLOCO_LOADING_TEMPLATE, TRANSLOCO_MISSING_HANDLER, TRANSLOCO_SCOPE, TRANSLOCO_TRANSPILER, TestingLoader, TranslocoDirective, TranslocoModule, TranslocoPipe, TranslocoService, TranslocoTestingModule, coerceArray, defaultConfig, flatten, getBrowserCultureLang, getBrowserLang, getFunctionArgs, getLangFromScope, getPipeValue, getScopeFromLang, getValue, hasInlineLoader, isBrowser, isDefined, isEmpty, isFunction, isNil, isNumber, isObject, isScopeObject, isString, provideTransloco, provideTranslocoConfig, provideTranslocoFallbackStrategy, provideTranslocoInterceptor, provideTranslocoLang, provideTranslocoLoader, provideTranslocoLoadingTpl, provideTranslocoMissingHandler, provideTranslocoScope, provideTranslocoTranspiler, setValue, size, toCamelCase, toNumber, translate, translateObject, translocoConfig, unflatten };
1577
1575
  //# sourceMappingURL=jsverse-transloco.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"jsverse-transloco.mjs","sources":["../../../../libs/transloco/src/lib/transloco.loader.ts","../../../../libs/transloco/src/lib/helpers.ts","../../../../libs/transloco/src/lib/transloco.config.ts","../../../../libs/transloco/src/lib/transloco.transpiler.ts","../../../../libs/transloco/src/lib/transloco-missing-handler.ts","../../../../libs/transloco/src/lib/transloco.interceptor.ts","../../../../libs/transloco/src/lib/transloco-fallback-strategy.ts","../../../../libs/transloco/src/lib/shared.ts","../../../../libs/transloco/src/lib/resolve-loader.ts","../../../../libs/transloco/src/lib/get-fallbacks-loaders.ts","../../../../libs/transloco/src/lib/transloco.service.ts","../../../../libs/transloco/src/lib/loader-component.component.ts","../../../../libs/transloco/src/lib/template-handler.ts","../../../../libs/transloco/src/lib/transloco-lang.ts","../../../../libs/transloco/src/lib/transloco-loading-template.ts","../../../../libs/transloco/src/lib/transloco-scope.ts","../../../../libs/transloco/src/lib/lang-resolver.ts","../../../../libs/transloco/src/lib/scope-resolver.ts","../../../../libs/transloco/src/lib/transloco.directive.ts","../../../../libs/transloco/src/lib/transloco.pipe.ts","../../../../libs/transloco/src/lib/transloco.module.ts","../../../../libs/transloco/src/lib/transloco.providers.ts","../../../../libs/transloco/src/lib/transloco-testing.module.ts","../../../../libs/transloco/src/lib/browser-lang.ts","../../../../libs/transloco/src/jsverse-transloco.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { Observable, of } from 'rxjs';\n\nimport { Translation } from './types';\n\nexport interface TranslocoLoader {\n getTranslation(\n lang: string,\n data?: TranslocoLoaderData\n ): Observable<Translation> | Promise<Translation>;\n}\n\nexport type TranslocoLoaderData = {\n scope: string;\n};\n\nexport class DefaultLoader implements TranslocoLoader {\n constructor(private translations: Map<string, Translation>) {}\n\n getTranslation(lang: string): Observable<Translation> {\n return of(this.translations.get(lang) || {});\n }\n}\n\nexport const TRANSLOCO_LOADER = new InjectionToken<TranslocoLoader>(\n 'TRANSLOCO_LOADER'\n);\n","import { flatten as _flatten, unflatten as _unflatten } from 'flat';\n\nimport { ProviderScope, Translation } from './types';\n\nexport function getValue<T>(obj: T, path: keyof T) {\n if (!obj) {\n return obj;\n }\n\n /* For cases where the key is like: 'general.something.thing' */\n if (Object.prototype.hasOwnProperty.call(obj, path)) {\n return obj[path];\n }\n\n return (path as string).split('.').reduce((p, c) => p?.[c], obj as any);\n}\n\nexport function setValue(obj: any, prop: string, val: any) {\n obj = { ...obj };\n\n const split = prop.split('.');\n const lastIndex = split.length - 1;\n\n split.reduce((acc, part, index) => {\n if (index === lastIndex) {\n acc[part] = val;\n } else {\n acc[part] = Array.isArray(acc[part])\n ? acc[part].slice()\n : { ...acc[part] };\n }\n\n return acc && acc[part];\n }, obj);\n\n return obj;\n}\n\nexport function size(collection: any): number {\n if (!collection) {\n return 0;\n }\n\n if (Array.isArray(collection)) {\n return collection.length;\n }\n\n if (isObject(collection)) {\n return Object.keys(collection).length;\n }\n\n return collection ? collection.length : 0;\n}\n\nexport function isEmpty(collection: any): boolean {\n return size(collection) === 0;\n}\n\nexport function isFunction(val: unknown): val is CallableFunction {\n return typeof val === 'function';\n}\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\n\nexport function isNumber(val: unknown): val is number {\n return typeof val === 'number';\n}\n\nexport function isObject(item: unknown): boolean {\n return !!item && typeof item === 'object' && !Array.isArray(item);\n}\n\nexport function coerceArray<T>(value: T | T[]): T[];\nexport function coerceArray<T>(value: T | readonly T[]): readonly T[];\nexport function coerceArray<T>(value: T | T[]): T[] {\n return Array.isArray(value) ? value : [value];\n}\n\n/*\n * @example\n *\n * given: path-to-happiness => pathToHappiness\n * given: path_to_happiness => pathToHappiness\n * given: path-to_happiness => pathToHappiness\n *\n */\nexport function toCamelCase(str: string): string {\n return str\n .replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) =>\n index == 0 ? word.toLowerCase() : word.toUpperCase()\n )\n .replace(/\\s+|_|-|\\//g, '');\n}\n\nexport function isBrowser() {\n return typeof window !== 'undefined';\n}\n\nexport function isNil(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\nexport function isDefined(value: unknown) {\n return isNil(value) === false;\n}\n\nexport function toNumber(value: number | string): number | null {\n if (isNumber(value)) return value;\n\n if (isString(value) && !isNaN(Number(value) - parseFloat(value))) {\n return Number(value);\n }\n\n return null;\n}\n\nexport function isScopeObject(item: any): item is ProviderScope {\n return item && typeof item.scope === 'string';\n}\n\nexport function isScopeArray(item: any): item is ProviderScope[] {\n return Array.isArray(item) && item.every(isScopeObject);\n}\n\nexport function hasInlineLoader(item: any): item is ProviderScope {\n return item && isObject(item.loader);\n}\n\nexport function unflatten(obj: Translation): Translation {\n return _unflatten(obj);\n}\n\nexport function flatten(obj: Translation): Translation {\n return _flatten(obj, { safe: true });\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { AvailableLangs } from './types';\n\nexport interface TranslocoConfig {\n defaultLang: string;\n reRenderOnLangChange: boolean;\n prodMode: boolean;\n fallbackLang?: string | string[];\n failedRetries: number;\n availableLangs: AvailableLangs;\n flatten: {\n aot: boolean;\n };\n missingHandler: {\n logMissingKey: boolean;\n useFallbackTranslation: boolean;\n allowEmpty: boolean;\n };\n interpolation: [string, string];\n}\n\nexport const TRANSLOCO_CONFIG = new InjectionToken<TranslocoConfig>(\n 'TRANSLOCO_CONFIG',\n {\n providedIn: 'root',\n factory: () => defaultConfig,\n }\n);\n\nexport const defaultConfig: TranslocoConfig = {\n defaultLang: 'en',\n reRenderOnLangChange: false,\n prodMode: false,\n failedRetries: 2,\n fallbackLang: [],\n availableLangs: [],\n missingHandler: {\n logMissingKey: true,\n useFallbackTranslation: false,\n allowEmpty: false,\n },\n flatten: {\n aot: false,\n },\n interpolation: ['{{', '}}'],\n};\n\ntype DeepPartial<T> = T extends Array<any>\n ? T\n : T extends object\n ? { [P in keyof T]?: DeepPartial<T[P]> }\n : T;\n\nexport type PartialTranslocoConfig = DeepPartial<TranslocoConfig>;\n\nexport function translocoConfig(\n config: PartialTranslocoConfig = {}\n): TranslocoConfig {\n return {\n ...defaultConfig,\n ...config,\n missingHandler: {\n ...defaultConfig.missingHandler,\n ...config.missingHandler,\n },\n flatten: {\n ...defaultConfig.flatten,\n ...config.flatten,\n },\n };\n}\n","import { inject, Injectable, InjectionToken, Injector } from '@angular/core';\n\nimport { HashMap, Translation } from './types';\nimport { getValue, isDefined, isObject, isString, setValue } from './helpers';\nimport {\n defaultConfig,\n TRANSLOCO_CONFIG,\n TranslocoConfig,\n} from './transloco.config';\n\nexport const TRANSLOCO_TRANSPILER = new InjectionToken<TranslocoTranspiler>(\n 'TRANSLOCO_TRANSPILER'\n);\n\nexport interface TranslocoTranspiler {\n transpile(params: TranspileParams): any;\n\n onLangChanged?(lang: string): void;\n}\n\nexport interface TranspileParams<V = unknown> {\n value: V;\n params?: HashMap;\n translation: Translation;\n key: string;\n}\n\n@Injectable()\nexport class DefaultTranspiler implements TranslocoTranspiler {\n protected config =\n inject(TRANSLOCO_CONFIG, { optional: true }) ?? defaultConfig;\n\n protected get interpolationMatcher() {\n return resolveMatcher(this.config);\n }\n\n transpile({ value, params = {}, translation, key }: TranspileParams): any {\n if (isString(value)) {\n let paramMatch: RegExpExecArray | null;\n let parsedValue = value;\n\n while (\n (paramMatch = this.interpolationMatcher.exec(parsedValue)) !== null\n ) {\n const [match, paramValue] = paramMatch;\n parsedValue = parsedValue.replace(match, () => {\n const match = paramValue.trim();\n\n const param = getValue(params, match);\n if (isDefined(param)) {\n return param;\n }\n\n return isDefined(translation[match])\n ? this.transpile({\n params,\n translation,\n key,\n value: translation[match],\n })\n : '';\n });\n }\n\n return parsedValue;\n } else if (params) {\n if (isObject(value)) {\n value = this.handleObject({\n value: value as Record<any, any>,\n params,\n translation,\n key,\n });\n } else if (Array.isArray(value)) {\n value = this.handleArray({ value, params, translation, key });\n }\n }\n\n return value;\n }\n\n /**\n *\n * @example\n *\n * const en = {\n * a: {\n * b: {\n * c: \"Hello {{ value }}\"\n * }\n * }\n * }\n *\n * const params = {\n * \"b.c\": { value: \"Transloco \"}\n * }\n *\n * service.selectTranslate('a', params);\n *\n * // the first param will be the result of `en.a`.\n * // the second param will be `params`.\n * parser.transpile(value, params, {});\n *\n *\n */\n protected handleObject({\n value,\n params = {},\n translation,\n key,\n }: TranspileParams<Record<any, any>>) {\n let result = value;\n\n Object.keys(params).forEach((p) => {\n // transpile the value => \"Hello Transloco\"\n const transpiled = this.transpile({\n // get the value of \"b.c\" inside \"a\" => \"Hello {{ value }}\"\n value: getValue(result, p),\n // get the params of \"b.c\" => { value: \"Transloco\" }\n params: getValue(params, p),\n translation,\n key,\n });\n\n // set \"b.c\" to `transpiled`\n result = setValue(result, p, transpiled);\n });\n\n return result;\n }\n\n protected handleArray({ value, ...rest }: TranspileParams<unknown[]>) {\n return value.map((v) =>\n this.transpile({\n value: v,\n ...rest,\n })\n );\n }\n}\n\nfunction resolveMatcher(config: TranslocoConfig): RegExp {\n const [start, end] = config.interpolation;\n\n return new RegExp(`${start}([^${start}${end}]*?)${end}`, 'g');\n}\n\nexport interface TranslocoTranspilerFunction {\n transpile(...args: string[]): any;\n}\n\nexport function getFunctionArgs(argsString: string): string[] {\n const splitted = argsString ? argsString.split(',') : [];\n const args = [];\n for (let i = 0; i < splitted.length; i++) {\n let value = splitted[i].trim();\n while (value[value.length - 1] === '\\\\') {\n i++;\n value = value.replace('\\\\', ',') + splitted[i];\n }\n args.push(value);\n }\n\n return args;\n}\n\n@Injectable()\nexport class FunctionalTranspiler\n extends DefaultTranspiler\n implements TranslocoTranspiler\n{\n protected injector = inject(Injector);\n\n transpile({ value, ...rest }: TranspileParams) {\n let transpiled = value;\n if (isString(value)) {\n transpiled = value.replace(\n /\\[\\[\\s*(\\w+)\\((.*?)\\)\\s*]]/g,\n (match: string, functionName: string, args: string) => {\n try {\n const func: TranslocoTranspilerFunction =\n this.injector.get(functionName);\n\n return func.transpile(...getFunctionArgs(args));\n } catch (e: unknown) {\n let message = `There is an error in: '${value}'. \n Check that the you used the right syntax in your translation and that the implementation of ${functionName} is correct.`;\n if ((e as Error).message.includes('NullInjectorError')) {\n message = `You are using the '${functionName}' function in your translation but no provider was found!`;\n }\n throw new Error(message);\n }\n }\n );\n }\n\n return super.transpile({ value: transpiled, ...rest });\n }\n}\n","import { InjectionToken, Injectable } from '@angular/core';\n\nimport { TranslocoConfig } from './transloco.config';\nimport { HashMap } from './types';\n\nexport const TRANSLOCO_MISSING_HANDLER =\n new InjectionToken<TranslocoMissingHandlerData>('TRANSLOCO_MISSING_HANDLER');\n\nexport interface TranslocoMissingHandlerData extends TranslocoConfig {\n activeLang: string;\n}\n\nexport interface TranslocoMissingHandler {\n handle(key: string, data: TranslocoMissingHandlerData, params?: HashMap): any;\n}\n\n@Injectable()\nexport class DefaultMissingHandler implements TranslocoMissingHandler {\n handle(key: string, config: TranslocoConfig) {\n if (config.missingHandler.logMissingKey && !config.prodMode) {\n const msg = `Missing translation for '${key}'`;\n console.warn(`%c ${msg}`, 'font-size: 12px; color: red');\n }\n\n return key;\n }\n}\n","import { InjectionToken, Injectable } from '@angular/core';\n\nimport { Translation } from './types';\n\nexport const TRANSLOCO_INTERCEPTOR = new InjectionToken<TranslocoInterceptor>(\n 'TRANSLOCO_INTERCEPTOR'\n);\n\nexport interface TranslocoInterceptor {\n preSaveTranslation(translation: Translation, lang: string): Translation;\n\n preSaveTranslationKey(key: string, value: string, lang: string): string;\n}\n\n@Injectable()\nexport class DefaultInterceptor implements TranslocoInterceptor {\n preSaveTranslation(translation: Translation): Translation {\n return translation;\n }\n\n preSaveTranslationKey(_: string, value: string): string {\n return value;\n }\n}\n","import { Inject, Injectable, InjectionToken } from '@angular/core';\n\nimport { TRANSLOCO_CONFIG, TranslocoConfig } from './transloco.config';\n\nexport const TRANSLOCO_FALLBACK_STRATEGY =\n new InjectionToken<TranslocoFallbackStrategy>('TRANSLOCO_FALLBACK_STRATEGY');\n\nexport interface TranslocoFallbackStrategy {\n getNextLangs(failedLang: string): string[];\n}\n\n@Injectable()\nexport class DefaultFallbackStrategy implements TranslocoFallbackStrategy {\n constructor(@Inject(TRANSLOCO_CONFIG) private userConfig: TranslocoConfig) {}\n\n getNextLangs() {\n const fallbackLang = this.userConfig.fallbackLang;\n if (!fallbackLang) {\n throw new Error(\n 'When using the default fallback, a fallback language must be provided in the config!'\n );\n }\n\n return Array.isArray(fallbackLang) ? fallbackLang : [fallbackLang];\n }\n}\n","import { Observable, OperatorFunction, take } from 'rxjs';\n\nimport { TranslocoService } from './transloco.service';\nimport { hasInlineLoader, isString } from './helpers';\nimport { InlineLoader, LoadedEvent, TranslocoScope } from './types';\n\n/*\n * @example\n *\n * given: lazy-page/en => lazy-page\n *\n */\nexport function getScopeFromLang(lang: string): string {\n if (!lang) {\n return '';\n }\n\n const split = lang.split('/');\n split.pop();\n\n return split.join('/');\n}\n\n/*\n * @example\n *\n * given: lazy-page/en => en\n *\n */\nexport function getLangFromScope(lang: string): string {\n if (!lang) {\n return '';\n }\n\n return lang.split('/').pop()!;\n}\n\n/**\n * @example\n *\n * getPipeValue('todos|scoped', 'scoped') [true, 'todos']\n * getPipeValue('en|static', 'static') [true, 'en']\n * getPipeValue('en', 'static') [false, 'en']\n */\nexport function getPipeValue(\n str: string | undefined,\n value: string,\n char = '|'\n): [boolean, string] {\n if (isString(str)) {\n const splitted = str.split(char);\n const lastItem = splitted.pop()!;\n\n return lastItem === value ? [true, splitted.toString()] : [false, lastItem];\n }\n\n return [false, ''];\n}\n\nexport function shouldListenToLangChanges(\n service: TranslocoService,\n lang?: string\n) {\n const [hasStatic] = getPipeValue(lang, 'static');\n if (!hasStatic) {\n // If we didn't get 'lang|static' check if it's set in the global level\n return !!service.config.reRenderOnLangChange;\n }\n\n // We have 'lang|static' so don't listen to lang changes\n return false;\n}\n\nexport function listenOrNotOperator<T>(\n listenToLangChange?: boolean\n): OperatorFunction<T, T> {\n return listenToLangChange ? (source: Observable<T>) => source : take<T>(1);\n}\n\nfunction prependScope(inlineLoader: InlineLoader, scope: string) {\n return Object.keys(inlineLoader).reduce((acc, lang) => {\n acc[`${scope}/${lang}`] = inlineLoader[lang];\n\n return acc;\n }, {} as Record<string, InlineLoader[keyof InlineLoader]>);\n}\n\nexport function resolveInlineLoader(\n providerScope: TranslocoScope | null,\n scope?: string\n): InlineLoader | undefined {\n return hasInlineLoader(providerScope)\n ? prependScope(providerScope.loader!, scope!)\n : undefined;\n}\n\nexport function getEventPayload(lang: string): LoadedEvent['payload'] {\n return {\n scope: getScopeFromLang(lang) || null,\n langName: getLangFromScope(lang),\n };\n}\n","import { TranslocoLoader, TranslocoLoaderData } from './transloco.loader';\nimport { InlineLoader } from './types';\nimport { isFunction } from './helpers';\n\ninterface Options {\n inlineLoader?: InlineLoader;\n path: string;\n mainLoader: TranslocoLoader;\n data?: TranslocoLoaderData;\n}\n\nexport function resolveLoader(options: Options) {\n const { path, inlineLoader, mainLoader, data } = options;\n\n if (inlineLoader) {\n const pathLoader = inlineLoader[path];\n if (isFunction(pathLoader) === false) {\n throw `You're using an inline loader but didn't provide a loader for ${path}`;\n }\n\n return inlineLoader[path]().then((res) =>\n res.default ? res.default : res\n );\n }\n\n return mainLoader.getTranslation(path, data);\n}\n","import { from, map } from 'rxjs';\n\nimport { resolveLoader } from './resolve-loader';\nimport { TranslocoLoader, TranslocoLoaderData } from './transloco.loader';\nimport { InlineLoader } from './types';\n\ninterface Options {\n path: string;\n fallbackPath?: string;\n inlineLoader?: InlineLoader;\n mainLoader: TranslocoLoader;\n data?: TranslocoLoaderData;\n}\n\nexport function getFallbacksLoaders({\n mainLoader,\n path,\n data,\n fallbackPath,\n inlineLoader,\n}: Options) {\n const paths = fallbackPath ? [path, fallbackPath] : [path];\n\n return paths.map((path) => {\n const loader = resolveLoader({ path, mainLoader, inlineLoader, data });\n\n return from(loader).pipe(\n map((translation) => ({\n translation,\n lang: path,\n }))\n );\n });\n}\n","import { Inject, Injectable, OnDestroy, Optional } from '@angular/core';\nimport {\n BehaviorSubject,\n catchError,\n combineLatest,\n EMPTY,\n forkJoin,\n from,\n map,\n Observable,\n of,\n retry,\n shareReplay,\n Subject,\n switchMap,\n tap,\n} from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport {\n DefaultLoader,\n TRANSLOCO_LOADER,\n TranslocoLoader,\n} from './transloco.loader';\nimport {\n TRANSLOCO_TRANSPILER,\n TranslocoTranspiler,\n} from './transloco.transpiler';\nimport {\n AvailableLangs,\n HashMap,\n InlineLoader,\n LangDefinition,\n LoadOptions,\n SetTranslationOptions,\n TranslateObjectParams,\n TranslateParams,\n Translation,\n TranslocoEvents,\n TranslocoScope,\n} from './types';\nimport {\n flatten,\n isEmpty,\n isNil,\n isScopeArray,\n isScopeObject,\n isString,\n size,\n toCamelCase,\n unflatten,\n} from './helpers';\nimport { TRANSLOCO_CONFIG, TranslocoConfig } from './transloco.config';\nimport {\n TRANSLOCO_MISSING_HANDLER,\n TranslocoMissingHandler,\n TranslocoMissingHandlerData,\n} from './transloco-missing-handler';\nimport {\n TRANSLOCO_INTERCEPTOR,\n TranslocoInterceptor,\n} from './transloco.interceptor';\nimport {\n TRANSLOCO_FALLBACK_STRATEGY,\n TranslocoFallbackStrategy,\n} from './transloco-fallback-strategy';\nimport {\n getEventPayload,\n getLangFromScope,\n getScopeFromLang,\n resolveInlineLoader,\n} from './shared';\nimport { getFallbacksLoaders } from './get-fallbacks-loaders';\nimport { resolveLoader } from './resolve-loader';\n\nlet service: TranslocoService;\n\nexport function translate<T = string>(\n key: TranslateParams,\n params: HashMap = {},\n lang?: string\n): T {\n return service.translate<T>(key, params, lang);\n}\n\nexport function translateObject<T>(\n key: TranslateParams,\n params: HashMap = {},\n lang?: string\n): T | T[] {\n return service.translateObject<T>(key, params, lang);\n}\n\n@Injectable({ providedIn: 'root' })\nexport class TranslocoService implements OnDestroy {\n langChanges$: Observable<string>;\n\n private translations = new Map<string, Translation>();\n private cache = new Map<string, Observable<Translation>>();\n private firstFallbackLang: string | undefined;\n private defaultLang = '';\n private availableLangs: AvailableLangs = [];\n private isResolvedMissingOnce = false;\n private lang: BehaviorSubject<string>;\n private failedLangs = new Set<string>();\n private events = new Subject<TranslocoEvents>();\n\n events$ = this.events.asObservable();\n readonly config: TranslocoConfig & {\n scopeMapping?: HashMap<string>;\n };\n\n constructor(\n @Optional() @Inject(TRANSLOCO_LOADER) private loader: TranslocoLoader,\n @Inject(TRANSLOCO_TRANSPILER) private parser: TranslocoTranspiler,\n @Inject(TRANSLOCO_MISSING_HANDLER)\n private missingHandler: TranslocoMissingHandler,\n @Inject(TRANSLOCO_INTERCEPTOR) private interceptor: TranslocoInterceptor,\n @Inject(TRANSLOCO_CONFIG) userConfig: TranslocoConfig,\n @Inject(TRANSLOCO_FALLBACK_STRATEGY)\n private fallbackStrategy: TranslocoFallbackStrategy\n ) {\n if (!this.loader) {\n this.loader = new DefaultLoader(this.translations);\n }\n service = this;\n this.config = JSON.parse(JSON.stringify(userConfig));\n\n this.setAvailableLangs(this.config.availableLangs || []);\n this.setFallbackLangForMissingTranslation(this.config);\n this.setDefaultLang(this.config.defaultLang);\n this.lang = new BehaviorSubject<string>(this.getDefaultLang());\n // Don't use distinctUntilChanged as we need the ability to update\n // the value when using setTranslation or setTranslationKeys\n this.langChanges$ = this.lang.asObservable();\n\n /**\n * When we have a failure, we want to define the next language that succeeded as the active\n */\n this.events$.pipe(takeUntilDestroyed()).subscribe((e) => {\n if (e.type === 'translationLoadSuccess' && e.wasFailure) {\n this.setActiveLang(e.payload.langName);\n }\n });\n }\n\n getDefaultLang() {\n return this.defaultLang;\n }\n\n setDefaultLang(lang: string) {\n this.defaultLang = lang;\n }\n\n getActiveLang() {\n return this.lang.getValue();\n }\n\n setActiveLang(lang: string) {\n this.parser.onLangChanged?.(lang);\n this.lang.next(lang);\n this.events.next({\n type: 'langChanged',\n payload: getEventPayload(lang),\n });\n return this;\n }\n\n setAvailableLangs(langs: AvailableLangs) {\n this.availableLangs = langs;\n }\n\n /**\n * Gets the available languages.\n *\n * @returns\n * An array of the available languages. Can be either a `string[]` or a `{ id: string; label: string }[]`\n * depending on how the available languages are set in your module.\n */\n getAvailableLangs() {\n return this.availableLangs;\n }\n\n load(path: string, options: LoadOptions = {}): Observable<Translation> {\n const cached = this.cache.get(path);\n if (cached) {\n return cached;\n }\n\n let loadTranslation: Observable<\n Translation | { translation: Translation; lang: string }[]\n >;\n const isScope = this._isLangScoped(path);\n let scope: string;\n if (isScope) {\n scope = getScopeFromLang(path);\n }\n\n const loadersOptions = {\n path,\n mainLoader: this.loader,\n inlineLoader: options.inlineLoader,\n data: isScope ? { scope: scope! } : undefined,\n };\n\n if (this.useFallbackTranslation(path)) {\n // if the path is scope the fallback should be `scope/fallbackLang`;\n const fallback = isScope\n ? `${scope!}/${this.firstFallbackLang}`\n : this.firstFallbackLang;\n\n const loaders = getFallbacksLoaders({\n ...loadersOptions,\n fallbackPath: fallback!,\n });\n loadTranslation = forkJoin(loaders);\n } else {\n const loader = resolveLoader(loadersOptions);\n loadTranslation = from(loader);\n }\n\n const load$ = loadTranslation.pipe(\n retry(this.config.failedRetries),\n tap((translation) => {\n if (Array.isArray(translation)) {\n translation.forEach((t) => {\n this.handleSuccess(t.lang, t.translation);\n // Save the fallback in cache so we'll not create a redundant request\n if (t.lang !== path) {\n this.cache.set(t.lang, of({}));\n }\n });\n return;\n }\n this.handleSuccess(path, translation);\n }),\n catchError((error) => {\n if (!this.config.prodMode) {\n console.error(`Error while trying to load \"${path}\"`, error);\n }\n\n return this.handleFailure(path, options);\n }),\n shareReplay(1)\n );\n\n this.cache.set(path, load$);\n\n return load$;\n }\n\n /**\n * Gets the instant translated value of a key\n *\n * @example\n *\n * translate<string>('hello')\n * translate('hello', { value: 'value' })\n * translate<string[]>(['hello', 'key'])\n * translate('hello', { }, 'en')\n * translate('scope.someKey', { }, 'en')\n */\n translate<T = string>(\n key: TranslateParams,\n params: HashMap = {},\n lang = this.getActiveLang()\n ): T {\n if (!key) return key as any;\n\n const { scope, resolveLang } = this.resolveLangAndScope(lang);\n\n if (Array.isArray(key)) {\n return key.map((k) =>\n this.translate(scope ? `${scope}.${k}` : k, params, resolveLang)\n ) as any;\n }\n\n key = scope ? `${scope}.${key}` : key;\n\n const translation = this.getTranslation(resolveLang);\n const value = translation[key];\n\n if (!value) {\n return this._handleMissingKey(key, value, params);\n }\n\n return this.parser.transpile({\n value,\n params,\n translation,\n key,\n });\n }\n\n /**\n * Gets the translated value of a key as observable\n *\n * @example\n *\n * selectTranslate<string>('hello').subscribe(value => ...)\n * selectTranslate<string>('hello', {}, 'es').subscribe(value => ...)\n * selectTranslate<string>('hello', {}, 'todos').subscribe(value => ...)\n * selectTranslate<string>('hello', {}, { scope: 'todos' }).subscribe(value => ...)\n *\n */\n selectTranslate<T = any>(\n key: TranslateParams,\n params?: HashMap,\n lang?: string | TranslocoScope | TranslocoScope[],\n _isObject = false\n ): Observable<T> {\n let inlineLoader: InlineLoader | undefined;\n const load = (lang: string, options?: LoadOptions) =>\n this.load(lang, options).pipe(\n map(() =>\n _isObject\n ? this.translateObject(key, params, lang)\n : this.translate(key, params, lang)\n )\n );\n if (isNil(lang)) {\n return this.langChanges$.pipe(switchMap((lang) => load(lang)));\n }\n\n if (isScopeArray(lang) || isScopeObject(lang)) {\n // it's a scope object.\n const providerScope = Array.isArray(lang) ? lang[0] : lang;\n lang = providerScope.scope;\n inlineLoader = resolveInlineLoader(providerScope, providerScope.scope);\n }\n\n lang = lang as string;\n if (this.isLang(lang) || this.isScopeWithLang(lang)) {\n return load(lang);\n }\n // it's a scope\n const scope = lang;\n return this.langChanges$.pipe(\n switchMap((lang) => load(`${scope}/${lang}`, { inlineLoader }))\n );\n }\n\n /**\n * Whether the scope with lang\n *\n * @example\n *\n * todos/en => true\n * todos => false\n */\n private isScopeWithLang(lang: string) {\n return this.isLang(getLangFromScope(lang));\n }\n\n /**\n * Translate the given path that returns an object\n *\n * @example\n *\n * service.translateObject('path.to.object', {'subpath': { value: 'someValue'}}) => returns translated object\n *\n */\n translateObject<T = any>(key: string, params?: HashMap, lang?: string): T;\n translateObject<T = any>(key: string[], params?: HashMap, lang?: string): T[];\n translateObject<T = any>(\n key: TranslateParams,\n params?: HashMap,\n lang?: string\n ): T | T[];\n translateObject<T = any>(\n key: HashMap | Map<string, HashMap>,\n params?: null,\n lang?: string\n ): T[];\n translateObject<T = any>(\n key: TranslateObjectParams,\n params: HashMap | null = {},\n lang = this.getActiveLang()\n ): T | T[] {\n if (isString(key) || Array.isArray(key)) {\n const { resolveLang, scope } = this.resolveLangAndScope(lang);\n if (Array.isArray(key)) {\n return key.map((k) =>\n this.translateObject(\n scope ? `${scope}.${k}` : k,\n params!,\n resolveLang\n )\n ) as any;\n }\n\n const translation = this.getTranslation(resolveLang);\n key = scope ? `${scope}.${key}` : key;\n\n const value = unflatten(this.getObjectByKey(translation, key));\n /* If an empty object was returned we want to try and translate the key as a string and not an object */\n return isEmpty(value)\n ? this.translate(key, params!, lang)\n : this.parser.transpile({ value, params: params!, translation, key });\n }\n\n const translations: T[] = [];\n for (const [_key, _params] of this.getEntries(key)) {\n translations.push(this.translateObject(_key, _params, lang));\n }\n\n return translations;\n }\n\n selectTranslateObject<T = any>(\n key: string,\n params?: HashMap,\n lang?: string\n ): Observable<T>;\n selectTranslateObject<T = any>(\n key: string[],\n params?: HashMap,\n lang?: string\n ): Observable<T[]>;\n selectTranslateObject<T = any>(\n key: TranslateParams,\n params?: HashMap,\n lang?: string\n ): Observable<T> | Observable<T[]>;\n selectTranslateObject<T = any>(\n key: HashMap | Map<string, HashMap>,\n params?: null,\n lang?: string\n ): Observable<T[]>;\n selectTranslateObject<T = any>(\n key: TranslateObjectParams,\n params?: HashMap | null,\n lang?: string\n ): Observable<T> | Observable<T[]> {\n if (isString(key) || Array.isArray(key)) {\n return this.selectTranslate<T>(key, params!, lang, true);\n }\n\n const [[firstKey, firstParams], ...rest] = this.getEntries(key);\n\n /* In order to avoid subscribing multiple times to the load language event by calling selectTranslateObject for each pair,\n * we listen to when the first key has been translated (the language is loaded) and translate the rest synchronously */\n return this.selectTranslateObject<T>(firstKey, firstParams, lang).pipe(\n map((value) => {\n const translations = [value];\n for (const [_key, _params] of rest) {\n translations.push(this.translateObject<T>(_key, _params, lang));\n }\n\n return translations;\n })\n );\n }\n\n /**\n * Gets an object of translations for a given language\n *\n * @example\n *\n * getTranslation()\n * getTranslation('en')\n * getTranslation('admin-page/en')\n */\n getTranslation(): Map<string, Translation>;\n getTranslation(langOrScope: string): Translation;\n getTranslation(langOrScope?: string): Map<string, Translation> | Translation {\n if (langOrScope) {\n if (this.isLang(langOrScope)) {\n return this.translations.get(langOrScope) || {};\n } else {\n // This is a scope, build the scope value from the translation object\n const { scope, resolveLang } = this.resolveLangAndScope(langOrScope);\n const translation = this.translations.get(resolveLang) || {};\n\n return this.getObjectByKey(translation, scope);\n }\n }\n\n return this.translations;\n }\n\n /**\n * Gets an object of translations for a given language\n *\n * @example\n *\n * selectTranslation().subscribe() - will return the current lang translation\n * selectTranslation('es').subscribe()\n * selectTranslation('admin-page').subscribe() - will return the current lang scope translation\n * selectTranslation('admin-page/es').subscribe()\n */\n selectTranslation(lang?: string): Observable<Translation> {\n let language$ = this.langChanges$;\n if (lang) {\n const scopeLangSpecified = getLangFromScope(lang) !== lang;\n if (this.isLang(lang) || scopeLangSpecified) {\n language$ = of(lang);\n } else {\n language$ = this.langChanges$.pipe(\n map((currentLang) => `${lang}/${currentLang}`)\n );\n }\n }\n\n return language$.pipe(\n switchMap((language) =>\n this.load(language).pipe(map(() => this.getTranslation(language)))\n )\n );\n }\n\n /**\n * Sets or merge a given translation object to current lang\n *\n * @example\n *\n * setTranslation({ ... })\n * setTranslation({ ... }, 'en')\n * setTranslation({ ... }, 'es', { merge: false } )\n * setTranslation({ ... }, 'todos/en', { merge: false } )\n */\n setTranslation(\n translation: Translation,\n lang = this.getActiveLang(),\n options: SetTranslationOptions = {}\n ) {\n const defaults = { merge: true, emitChange: true };\n const mergedOptions = { ...defaults, ...options };\n const scope = getScopeFromLang(lang);\n\n /**\n * If this isn't a scope we use the whole translation as is\n * otherwise we need to flat the scope and use it\n */\n let flattenScopeOrTranslation = translation;\n\n // Merged the scoped language into the active language\n if (scope) {\n const key = this.getMappedScope(scope);\n flattenScopeOrTranslation = flatten({ [key]: translation });\n }\n\n const currentLang = scope ? getLangFromScope(lang) : lang;\n\n const mergedTranslation = {\n ...(mergedOptions.merge && this.getTranslation(currentLang)),\n ...flattenScopeOrTranslation,\n };\n\n const flattenTranslation = this.config.flatten!.aot\n ? mergedTranslation\n : flatten(mergedTranslation);\n const withHook = this.interceptor.preSaveTranslation(\n flattenTranslation,\n currentLang\n );\n this.translations.set(currentLang, withHook);\n mergedOptions.emitChange && this.setActiveLang(this.getActiveLang());\n }\n\n /**\n * Sets translation key with given value\n *\n * @example\n *\n * setTranslationKey('key', 'value')\n * setTranslationKey('key.nested', 'value')\n * setTranslationKey('key.nested', 'value', 'en')\n * setTranslationKey('key.nested', 'value', 'en', { emitChange: false } )\n */\n setTranslationKey(\n key: string,\n value: string,\n options: Omit<SetTranslationOptions, 'merge'> = {}\n ) {\n const lang = options.lang || this.getActiveLang();\n const withHook = this.interceptor.preSaveTranslationKey(key, value, lang);\n const newValue = {\n [key]: withHook,\n };\n\n this.setTranslation(newValue, lang, { ...options, merge: true });\n }\n\n /**\n * Sets the fallback lang for the currently active language\n * @param fallbackLang\n */\n setFallbackLangForMissingTranslation({\n fallbackLang,\n }: Pick<TranslocoConfig, 'fallbackLang'>) {\n const lang = Array.isArray(fallbackLang) ? fallbackLang[0] : fallbackLang;\n if (fallbackLang && this.useFallbackTranslation(lang)) {\n this.firstFallbackLang = lang!;\n }\n }\n\n /**\n * @internal\n */\n _handleMissingKey(key: string, value: any, params?: HashMap) {\n if (this.config.missingHandler!.allowEmpty && value === '') {\n return '';\n }\n\n if (!this.isResolvedMissingOnce && this.useFallbackTranslation()) {\n // We need to set it to true to prevent a loop\n this.isResolvedMissingOnce = true;\n const fallbackValue = this.translate(\n key,\n params,\n this.firstFallbackLang!\n );\n this.isResolvedMissingOnce = false;\n\n return fallbackValue;\n }\n\n return this.missingHandler.handle(\n key,\n this.getMissingHandlerData(),\n params\n );\n }\n\n /**\n * @internal\n */\n _isLangScoped(lang: string) {\n return this.getAvailableLangsIds().indexOf(lang) === -1;\n }\n\n /**\n * Checks if a given string is one of the specified available languages.\n * @returns\n * True if the given string is an available language.\n * False if the given string is not an available language.\n */\n isLang(lang: string): boolean {\n return this.getAvailableLangsIds().indexOf(lang) !== -1;\n }\n\n /**\n * @internal\n *\n * We always want to make sure the global lang is loaded\n * before loading the scope since you can access both via the pipe/directive.\n */\n _loadDependencies(\n path: string,\n inlineLoader?: InlineLoader\n ): Observable<Translation | Translation[]> {\n const mainLang = getLangFromScope(path);\n\n if (this._isLangScoped(path) && !this.isLoadedTranslation(mainLang)) {\n return combineLatest([\n this.load(mainLang),\n this.load(path, { inlineLoader }),\n ]);\n }\n return this.load(path, { inlineLoader });\n }\n\n /**\n * @internal\n */\n _completeScopeWithLang(langOrScope: string) {\n if (\n this._isLangScoped(langOrScope) &&\n !this.isLang(getLangFromScope(langOrScope))\n ) {\n return `${langOrScope}/${this.getActiveLang()}`;\n }\n return langOrScope;\n }\n\n /**\n * @internal\n */\n _setScopeAlias(scope: string, alias: string) {\n if (!this.config.scopeMapping) {\n this.config.scopeMapping = {};\n }\n this.config.scopeMapping[scope] = alias;\n }\n\n ngOnDestroy() {\n // Caretaker note: since this is the root provider, it'll be destroyed when the `NgModuleRef.destroy()` is run.\n // Cached values capture `this`, thus leading to a circular reference and preventing the `TranslocoService` from\n // being GC'd. This would lead to a memory leak when server-side rendering is used since the service is created\n // and destroyed per each HTTP request, but any service is not getting GC'd.\n this.cache.clear();\n }\n\n private isLoadedTranslation(lang: string) {\n return size(this.getTranslation(lang));\n }\n\n private getAvailableLangsIds(): string[] {\n const first = this.getAvailableLangs()[0];\n\n if (isString(first)) {\n return this.getAvailableLangs() as string[];\n }\n\n return (this.getAvailableLangs() as LangDefinition[]).map((l) => l.id);\n }\n\n private getMissingHandlerData(): TranslocoMissingHandlerData {\n return {\n ...this.config,\n activeLang: this.getActiveLang(),\n availableLangs: this.availableLangs,\n defaultLang: this.defaultLang,\n };\n }\n\n /**\n * Use a fallback translation set for missing keys of the primary language\n * This is unrelated to the fallback language (which changes the active language)\n */\n private useFallbackTranslation(lang?: string) {\n return (\n this.config.missingHandler!.useFallbackTranslation &&\n lang !== this.firstFallbackLang\n );\n }\n\n private handleSuccess(lang: string, translation: Translation) {\n this.setTranslation(translation, lang, { emitChange: false });\n this.events.next({\n wasFailure: !!this.failedLangs.size,\n type: 'translationLoadSuccess',\n payload: getEventPayload(lang),\n });\n this.failedLangs.forEach((l) => this.cache.delete(l));\n this.failedLangs.clear();\n }\n\n private handleFailure(lang: string, loadOptions: LoadOptions) {\n // When starting to load a first choice language, initialize\n // the failed counter and resolve the fallback langs.\n if (isNil(loadOptions.failedCounter)) {\n loadOptions.failedCounter = 0;\n\n if (!loadOptions.fallbackLangs) {\n loadOptions.fallbackLangs = this.fallbackStrategy.getNextLangs(lang);\n }\n }\n\n const splitted = lang.split('/');\n const fallbacks = loadOptions.fallbackLangs;\n const nextLang = fallbacks![loadOptions.failedCounter!];\n this.failedLangs.add(lang);\n\n // This handles the case where a loaded fallback language is requested again\n if (this.cache.has(nextLang)) {\n this.handleSuccess(nextLang, this.getTranslation(nextLang));\n return EMPTY;\n }\n\n const isFallbackLang = nextLang === splitted[splitted.length - 1];\n\n if (!nextLang || isFallbackLang) {\n let msg = `Unable to load translation and all the fallback languages`;\n if (splitted.length > 1) {\n msg += `, did you misspelled the scope name?`;\n }\n\n throw new Error(msg);\n }\n\n let resolveLang = nextLang;\n // if it's scoped lang\n if (splitted.length > 1) {\n // We need to resolve it to:\n // todos/langNotExists => todos/nextLang\n splitted[splitted.length - 1] = nextLang;\n resolveLang = splitted.join('/');\n }\n\n loadOptions.failedCounter!++;\n this.events.next({\n type: 'translationLoadFailure',\n payload: getEventPayload(lang),\n });\n\n return this.load(resolveLang, loadOptions);\n }\n\n private getMappedScope(scope: string): string {\n const { scopeMapping = {} } = this.config;\n return scopeMapping[scope] || toCamelCase(scope);\n }\n\n /**\n * If lang is scope we need to check the following cases:\n * todos/es => in this case we should take `es` as lang\n * todos => in this case we should set the active lang as lang\n */\n private resolveLangAndScope(lang: string) {\n let resolveLang = lang;\n let scope;\n\n if (this._isLangScoped(lang)) {\n // en for example\n const langFromScope = getLangFromScope(lang);\n // en is lang\n const hasLang = this.isLang(langFromScope);\n // take en\n resolveLang = hasLang ? langFromScope : this.getActiveLang();\n // find the scope\n scope = this.getMappedScope(hasLang ? getScopeFromLang(lang) : lang);\n }\n\n return { scope, resolveLang };\n }\n\n private getObjectByKey(translation: Translation, key?: string) {\n const result: Translation = {};\n const prefix = `${key}.`;\n\n for (const currentKey in translation) {\n if (currentKey.startsWith(prefix)) {\n result[currentKey.replace(prefix, '')] = translation[currentKey];\n }\n }\n\n return result;\n }\n\n private getEntries(key: HashMap | Map<string, HashMap>) {\n return key instanceof Map ? key.entries() : Object.entries(key);\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n template: `\n <div class=\"transloco-loader-template\" [innerHTML]=\"html\"></div>\n `,\n standalone: true,\n})\nexport class TranslocoLoaderComponent {\n @Input() html: string | undefined;\n}\n","import { TemplateRef, Type, ViewContainerRef } from '@angular/core';\n\nimport { isString } from './helpers';\nimport { TranslocoLoaderComponent } from './loader-component.component';\n\nexport type Content = string | TemplateRef<unknown> | Type<unknown>;\n\nexport class TemplateHandler {\n constructor(private view: Content, private vcr: ViewContainerRef) {}\n\n attachView() {\n if (this.view instanceof TemplateRef) {\n this.vcr.createEmbeddedView(this.view);\n } else if (isString(this.view)) {\n const componentRef = this.vcr.createComponent(TranslocoLoaderComponent);\n componentRef.instance.html = this.view;\n componentRef.hostView.detectChanges();\n } else {\n this.vcr.createComponent(this.view);\n }\n }\n\n detachView() {\n this.vcr.clear();\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const TRANSLOCO_LANG = new InjectionToken<string>('TRANSLOCO_LANG');\n","import { InjectionToken } from '@angular/core';\n\nimport { Content } from './template-handler';\n\nexport const TRANSLOCO_LOADING_TEMPLATE = new InjectionToken<Content>(\n 'TRANSLOCO_LOADING_TEMPLATE'\n);\n","import { InjectionToken } from '@angular/core';\n\nimport { TranslocoScope } from './types';\n\nexport const TRANSLOCO_SCOPE = new InjectionToken<TranslocoScope>(\n 'TRANSLOCO_SCOPE'\n);\n","import { getLangFromScope, getPipeValue, getScopeFromLang } from './shared';\n\ninterface LangResolverParams {\n inline?: string;\n provider: string | null | undefined;\n active: string;\n}\n\nexport class LangResolver {\n initialized = false;\n\n // inline => provider => active\n resolve({ inline, provider, active }: LangResolverParams): string {\n let lang = active;\n /**\n * When the user changes the lang we need to update\n * the view. Otherwise, the lang will remain the inline/provided lang\n */\n if (this.initialized) {\n lang = active;\n\n return lang;\n }\n\n if (provider) {\n const [, extracted] = getPipeValue(provider, 'static');\n lang = extracted;\n }\n\n if (inline) {\n const [, extracted] = getPipeValue(inline, 'static');\n lang = extracted;\n }\n\n this.initialized = true;\n\n return lang;\n }\n\n /**\n *\n * Resolve the lang\n *\n * @example\n *\n * resolveLangBasedOnScope('todos/en') => en\n * resolveLangBasedOnScope('en') => en\n *\n */\n resolveLangBasedOnScope(lang: string) {\n const scope = getScopeFromLang(lang);\n\n return scope ? getLangFromScope(lang) : lang;\n }\n\n /**\n *\n * Resolve the lang path for loading\n *\n * @example\n *\n * resolveLangPath('todos', 'en') => todos/en\n * resolveLangPath('en') => en\n *\n */\n resolveLangPath(lang: string, scope?: string) {\n return scope ? `${scope}/${lang}` : lang;\n }\n}\n","import { TranslocoScope, ProviderScope, OrArray } from './types';\nimport { TranslocoService } from './transloco.service';\nimport { isScopeObject, toCamelCase } from './helpers';\n\ntype ScopeResolverParams = {\n inline: string | undefined;\n provider: OrArray<TranslocoScope> | null;\n};\n\nexport class ScopeResolver {\n constructor(private service: TranslocoService) {}\n\n // inline => provider\n resolve(params: ScopeResolverParams): string | undefined {\n const { inline, provider } = params;\n if (inline) {\n return inline;\n }\n\n if (provider) {\n if (isScopeObject(provider)) {\n const { scope, alias = toCamelCase(scope) } = provider as ProviderScope;\n this.service._setScopeAlias(scope, alias);\n\n return scope;\n }\n\n return provider as string;\n }\n\n return undefined;\n }\n}\n","import {\n ChangeDetectorRef,\n DestroyRef,\n Directive,\n ElementRef,\n EmbeddedViewRef,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { forkJoin, Observable, switchMap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { Content, TemplateHandler } from './template-handler';\nimport { TRANSLOCO_LANG } from './transloco-lang';\nimport { TRANSLOCO_LOADING_TEMPLATE } from './transloco-loading-template';\nimport { TRANSLOCO_SCOPE } from './transloco-scope';\nimport { TranslocoService } from './transloco.service';\nimport { HashMap, OrArray, Translation, TranslocoScope } from './types';\nimport {\n listenOrNotOperator,\n resolveInlineLoader,\n shouldListenToLangChanges,\n} from './shared';\nimport { LangResolver } from './lang-resolver';\nimport { ScopeResolver } from './scope-resolver';\n\ntype TranslateFn = (key: string, params?: HashMap) => any;\ninterface ViewContext {\n $implicit: TranslateFn;\n currentLang: string;\n}\n\n@Directive({\n selector: '[transloco]',\n standalone: true,\n})\nexport class TranslocoDirective implements OnInit, OnDestroy, OnChanges {\n private destroyRef = inject(DestroyRef);\n private service = inject(TranslocoService);\n private tpl = inject<TemplateRef<ViewContext>>(TemplateRef, {\n optional: true,\n });\n private providerLang = inject(TRANSLOCO_LANG, { optional: true });\n private providerScope: OrArray<TranslocoScope> | null = inject(\n TRANSLOCO_SCOPE,\n { optional: true }\n );\n private providedLoadingTpl = inject(TRANSLOCO_LOADING_TEMPLATE, {\n optional: true,\n });\n private cdr = inject(ChangeDetectorRef);\n private host = inject(ElementRef);\n private vcr = inject(ViewContainerRef);\n private renderer = inject(Renderer2);\n\n view: EmbeddedViewRef<ViewContext> | undefined;\n\n private memo = new Map<string, any>();\n\n @Input('transloco') key: string | undefined;\n @Input('translocoParams') params: HashMap = {};\n @Input('translocoScope') inlineScope: string | undefined;\n /** @deprecated use prefix instead, will be removed in Transloco v8 */\n @Input('translocoRead') inlineRead: string | undefined;\n @Input('translocoPrefix') prefix: string | undefined;\n @Input('translocoLang') inlineLang: string | undefined;\n @Input('translocoLoadingTpl') inlineTpl: Content | undefined;\n\n private currentLang: string | undefined;\n private loaderTplHandler: TemplateHandler | undefined;\n // Whether we already rendered the view once\n private initialized = false;\n private path: string | undefined;\n private langResolver = new LangResolver();\n private scopeResolver = new ScopeResolver(this.service);\n private readonly strategy = this.tpl === null ? 'attribute' : 'structural';\n\n static ngTemplateContextGuard(\n dir: TranslocoDirective,\n ctx: unknown\n ): ctx is ViewContext {\n return true;\n }\n\n ngOnInit() {\n const listenToLangChange = shouldListenToLangChanges(\n this.service,\n this.providerLang || this.inlineLang\n );\n\n this.service.langChanges$\n .pipe(\n switchMap((activeLang) => {\n const lang = this.langResolver.resolve({\n inline: this.inlineLang,\n provider: this.providerLang,\n active: activeLang,\n });\n\n return Array.isArray(this.providerScope)\n ? forkJoin(\n this.providerScope.map((providerScope) =>\n this.resolveScope(lang, providerScope)\n )\n )\n : this.resolveScope(lang, this.providerScope);\n }),\n listenOrNotOperator(listenToLangChange),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => {\n this.currentLang = this.langResolver.resolveLangBasedOnScope(\n this.path!\n );\n this.strategy === 'attribute'\n ? this.attributeStrategy()\n : this.structuralStrategy(\n this.currentLang,\n this.prefix || this.inlineRead\n );\n this.cdr.markForCheck();\n this.initialized = true;\n });\n\n if (!this.initialized) {\n const loadingContent = this.resolveLoadingContent();\n if (loadingContent) {\n this.loaderTplHandler = new TemplateHandler(loadingContent, this.vcr);\n this.loaderTplHandler.attachView();\n }\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // We need to support dynamic keys/params, so if this is not the first change CD cycle\n // we need to run the function again in order to update the value\n if (this.strategy === 'attribute') {\n const notInit = Object.keys(changes).some((v) => !changes[v].firstChange);\n notInit && this.attributeStrategy();\n }\n }\n\n private attributeStrategy() {\n this.detachLoader();\n this.renderer.setProperty(\n this.host.nativeElement,\n 'innerText',\n this.service.translate(this.key!, this.params, this.currentLang)\n );\n }\n\n private structuralStrategy(lang: string, prefix?: string) {\n this.memo.clear();\n const translateFn = this.getTranslateFn(lang, prefix);\n\n if (this.view) {\n // when the lang changes we need to change the reference so Angular will update the view\n this.view.context['$implicit'] = translateFn;\n this.view.context['currentLang'] = this.currentLang!;\n } else {\n this.detachLoader();\n this.view = this.vcr.createEmbeddedView(this.tpl!, {\n $implicit: translateFn,\n currentLang: this.currentLang!,\n });\n }\n }\n\n protected getTranslateFn(\n lang: string,\n prefix: string | undefined\n ): TranslateFn {\n return (key: string, params?: HashMap) => {\n const withPrefix = prefix ? `${prefix}.${key}` : key;\n const memoKey = params\n ? `${withPrefix}${JSON.stringify(params)}`\n : withPrefix;\n\n if (!this.memo.has(memoKey)) {\n this.memo.set(\n memoKey,\n this.service.translate(withPrefix, params, lang)\n );\n }\n\n return this.memo.get(memoKey);\n };\n }\n\n private resolveLoadingContent() {\n return this.inlineTpl || this.providedLoadingTpl;\n }\n\n ngOnDestroy() {\n this.memo.clear();\n }\n\n private detachLoader() {\n this.loaderTplHandler?.detachView();\n }\n\n private resolveScope(\n lang: string,\n providerScope: TranslocoScope | null\n ): Observable<Translation | Translation[]> {\n const resolvedScope = this.scopeResolver.resolve({\n inline: this.inlineScope,\n provider: providerScope,\n });\n this.path = this.langResolver.resolveLangPath(lang, resolvedScope);\n const inlineLoader = resolveInlineLoader(providerScope, resolvedScope);\n\n return this.service._loadDependencies(this.path, inlineLoader);\n }\n}\n","import {\n ChangeDetectorRef,\n Inject,\n OnDestroy,\n Optional,\n Pipe,\n PipeTransform,\n} from '@angular/core';\nimport { switchMap, forkJoin, Observable, Subscription } from 'rxjs';\n\nimport { TranslocoService } from './transloco.service';\nimport { HashMap, OrArray, Translation, TranslocoScope } from './types';\nimport { TRANSLOCO_SCOPE } from './transloco-scope';\nimport { TRANSLOCO_LANG } from './transloco-lang';\nimport {\n listenOrNotOperator,\n resolveInlineLoader,\n shouldListenToLangChanges,\n} from './shared';\nimport { LangResolver } from './lang-resolver';\nimport { ScopeResolver } from './scope-resolver';\n\n@Pipe({\n name: 'transloco',\n pure: false,\n standalone: true,\n})\nexport class TranslocoPipe implements PipeTransform, OnDestroy {\n private subscription: Subscription | null = null;\n private lastValue = '';\n private lastKey: string | undefined;\n private path: string | undefined;\n private langResolver = new LangResolver();\n private scopeResolver!: ScopeResolver;\n\n constructor(\n private service: TranslocoService,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n private providerScope: OrArray<TranslocoScope> | undefined,\n @Optional()\n @Inject(TRANSLOCO_LANG)\n private providerLang: string | undefined,\n private cdr: ChangeDetectorRef\n ) {\n this.scopeResolver = new ScopeResolver(this.service);\n }\n\n // null is for handling strict mode + async pipe types https://github.com/jsverse/transloco/issues/311\n // null is for handling strict mode + optional chaining types https://github.com/jsverse/transloco/issues/488\n transform(\n key?: string | null,\n params?: HashMap,\n inlineLang?: string\n ): string {\n if (!key) {\n return key as any;\n }\n\n const keyName = params ? `${key}${JSON.stringify(params)}` : key;\n\n if (keyName === this.lastKey) {\n return this.lastValue;\n }\n\n this.lastKey = keyName;\n this.subscription?.unsubscribe();\n\n const listenToLangChange = shouldListenToLangChanges(\n this.service,\n this.providerLang || inlineLang\n );\n\n this.subscription = this.service.langChanges$\n .pipe(\n switchMap((activeLang) => {\n const lang = this.langResolver.resolve({\n inline: inlineLang,\n provider: this.providerLang,\n active: activeLang,\n });\n\n return Array.isArray(this.providerScope)\n ? forkJoin(\n this.providerScope.map((providerScope) =>\n this.resolveScope(lang, providerScope)\n )\n )\n : this.resolveScope(lang, this.providerScope);\n }),\n listenOrNotOperator(listenToLangChange)\n )\n .subscribe(() => this.updateValue(key, params));\n\n return this.lastValue;\n }\n\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n // Caretaker note: it's important to clean up references to subscriptions since they save the `next`\n // callback within its `destination` property, preventing classes from being GC'd.\n this.subscription = null;\n }\n\n private updateValue(key: string, params?: HashMap | undefined) {\n const lang = this.langResolver.resolveLangBasedOnScope(this.path!);\n this.lastValue = this.service.translate(key, params, lang);\n this.cdr.markForCheck();\n }\n\n private resolveScope(\n lang: string,\n providerScope: TranslocoScope | null\n ): Observable<Translation | Translation[]> {\n const resolvedScope = this.scopeResolver.resolve({\n inline: undefined,\n provider: providerScope,\n });\n this.path = this.langResolver.resolveLangPath(lang, resolvedScope);\n const inlineLoader = resolveInlineLoader(providerScope, resolvedScope);\n\n return this.service._loadDependencies(this.path, inlineLoader);\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { TranslocoDirective } from './transloco.directive';\nimport { TranslocoPipe } from './transloco.pipe';\n\nconst decl = [TranslocoDirective, TranslocoPipe];\n\n@NgModule({\n imports: decl,\n exports: decl,\n})\nexport class TranslocoModule {}\n","import {\n EnvironmentProviders,\n makeEnvironmentProviders,\n Provider,\n Type,\n} from '@angular/core';\n\nimport { TRANSLOCO_LOADER, TranslocoLoader } from './transloco.loader';\nimport {\n PartialTranslocoConfig,\n TRANSLOCO_CONFIG,\n translocoConfig,\n} from './transloco.config';\nimport { TRANSLOCO_SCOPE } from './transloco-scope';\nimport { TranslocoScope } from './types';\nimport {\n DefaultTranspiler,\n TRANSLOCO_TRANSPILER,\n TranslocoTranspiler,\n} from './transloco.transpiler';\nimport {\n DefaultMissingHandler,\n TRANSLOCO_MISSING_HANDLER,\n TranslocoMissingHandler,\n} from './transloco-missing-handler';\nimport {\n DefaultInterceptor,\n TRANSLOCO_INTERCEPTOR,\n TranslocoInterceptor,\n} from './transloco.interceptor';\nimport {\n DefaultFallbackStrategy,\n TRANSLOCO_FALLBACK_STRATEGY,\n TranslocoFallbackStrategy,\n} from './transloco-fallback-strategy';\nimport { TRANSLOCO_LOADING_TEMPLATE } from './transloco-loading-template';\nimport { Content } from './template-handler';\nimport { TRANSLOCO_LANG } from './transloco-lang';\n\nexport interface TranslocoOptions {\n config: PartialTranslocoConfig;\n loader?: Type<TranslocoLoader>;\n}\n\nexport function provideTransloco(options: TranslocoOptions) {\n const providers: EnvironmentProviders[] = [\n provideTranslocoTranspiler(DefaultTranspiler),\n provideTranslocoMissingHandler(DefaultMissingHandler),\n provideTranslocoInterceptor(DefaultInterceptor),\n provideTranslocoFallbackStrategy(DefaultFallbackStrategy),\n ];\n\n if (options.config) {\n providers.push(provideTranslocoConfig(options.config));\n }\n\n if (options.loader) {\n providers.push(provideTranslocoLoader(options.loader));\n }\n\n return providers;\n}\n\nexport function provideTranslocoConfig(config: PartialTranslocoConfig) {\n return makeEnvironmentProviders([\n {\n provide: TRANSLOCO_CONFIG,\n useValue: translocoConfig(config),\n },\n ]);\n}\n\nexport function provideTranslocoLoader(loader: Type<TranslocoLoader>) {\n return makeEnvironmentProviders([\n { provide: TRANSLOCO_LOADER, useClass: loader },\n ]);\n}\n\nexport function provideTranslocoScope(...scopes: TranslocoScope[]) {\n return scopes.map((scope) => ({\n provide: TRANSLOCO_SCOPE,\n useValue: scope,\n multi: true,\n }));\n}\n\nexport function provideTranslocoLoadingTpl(content: Content) {\n return {\n provide: TRANSLOCO_LOADING_TEMPLATE,\n useValue: content,\n };\n}\n\nexport function provideTranslocoTranspiler(\n transpiler: Type<TranslocoTranspiler>\n) {\n return makeEnvironmentProviders([\n {\n provide: TRANSLOCO_TRANSPILER,\n useClass: transpiler,\n deps: [TRANSLOCO_CONFIG],\n },\n ]);\n}\n\nexport function provideTranslocoFallbackStrategy(\n strategy: Type<TranslocoFallbackStrategy>\n) {\n return makeEnvironmentProviders([\n {\n provide: TRANSLOCO_FALLBACK_STRATEGY,\n useClass: strategy,\n deps: [TRANSLOCO_CONFIG],\n },\n ]);\n}\n\nexport function provideTranslocoMissingHandler(\n handler: Type<TranslocoMissingHandler>\n) {\n return makeEnvironmentProviders([\n {\n provide: TRANSLOCO_MISSING_HANDLER,\n useClass: handler,\n },\n ]);\n}\n\nexport function provideTranslocoInterceptor(\n interceptor: Type<TranslocoInterceptor>\n) {\n return makeEnvironmentProviders([\n {\n provide: TRANSLOCO_INTERCEPTOR,\n useClass: interceptor,\n },\n ]);\n}\n\nexport function provideTranslocoLang(lang: string): Provider {\n return {\n provide: TRANSLOCO_LANG,\n useValue: lang,\n };\n}\n","import {\n APP_INITIALIZER,\n Inject,\n Injectable,\n InjectionToken,\n ModuleWithProviders,\n NgModule,\n} from '@angular/core';\nimport { Observable, of } from 'rxjs';\n\nimport { TranslocoLoader } from './transloco.loader';\nimport { HashMap, Translation } from './types';\nimport { TranslocoModule } from './transloco.module';\nimport { provideTransloco } from './transloco.providers';\nimport { TranslocoConfig } from './transloco.config';\nimport { TranslocoService } from './transloco.service';\n\nexport interface TranslocoTestingOptions {\n translocoConfig?: Partial<TranslocoConfig>;\n preloadLangs?: boolean;\n langs?: HashMap<Translation>;\n}\n\nconst TRANSLOCO_TEST_LANGS = new InjectionToken<HashMap<Translation>>(\n 'TRANSLOCO_TEST_LANGS - Available testing languages'\n);\nconst TRANSLOCO_TEST_OPTIONS = new InjectionToken<TranslocoTestingOptions>(\n 'TRANSLOCO_TEST_OPTIONS - Testing options'\n);\n\n@Injectable()\nexport class TestingLoader implements TranslocoLoader {\n constructor(\n @Inject(TRANSLOCO_TEST_LANGS) private langs: HashMap<Translation>\n ) {}\n\n getTranslation(lang: string): Observable<Translation> | Promise<Translation> {\n return of(this.langs[lang]);\n }\n}\n\nexport function initTranslocoService(\n service: TranslocoService,\n langs: HashMap<Translation> = {},\n options: TranslocoTestingOptions\n) {\n const preloadAllLangs = () =>\n options.preloadLangs\n ? Promise.all(\n Object.keys(langs).map((lang) => service.load(lang).toPromise())\n )\n : Promise.resolve();\n\n return preloadAllLangs;\n}\n\n@NgModule({\n exports: [TranslocoModule],\n})\nexport class TranslocoTestingModule {\n static forRoot(\n options: TranslocoTestingOptions\n ): ModuleWithProviders<TranslocoTestingModule> {\n return {\n ngModule: TranslocoTestingModule,\n providers: [\n provideTransloco({\n loader: TestingLoader,\n config: {\n prodMode: true,\n missingHandler: { logMissingKey: false },\n ...options.translocoConfig,\n },\n }),\n {\n provide: TRANSLOCO_TEST_LANGS,\n useValue: options.langs,\n },\n {\n provide: TRANSLOCO_TEST_OPTIONS,\n useValue: options,\n },\n {\n provide: APP_INITIALIZER,\n useFactory: initTranslocoService,\n deps: [\n TranslocoService,\n TRANSLOCO_TEST_LANGS,\n TRANSLOCO_TEST_OPTIONS,\n ],\n multi: true,\n },\n ],\n };\n }\n}\n","import { isBrowser } from './helpers';\n\n/**\n * Returns the language code name from the browser, e.g. \"en\"\n */\nexport function getBrowserLang(): string | undefined {\n let browserLang = getBrowserCultureLang();\n if (!browserLang || !isBrowser()) {\n return undefined;\n }\n\n if (browserLang.indexOf('-') !== -1) {\n browserLang = browserLang.split('-')[0];\n }\n\n if (browserLang.indexOf('_') !== -1) {\n browserLang = browserLang.split('_')[0];\n }\n\n return browserLang;\n}\n\n/**\n * Returns the culture language code name from the browser, e.g. \"en-US\"\n */\nexport function getBrowserCultureLang(): string {\n if (!isBrowser()) {\n return '';\n }\n\n const navigator = window.navigator;\n\n return navigator.languages?.[0] ?? navigator.language;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["_unflatten","_flatten","i1.TranslocoService"],"mappings":"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"}
1
+ {"version":3,"file":"jsverse-transloco.mjs","sources":["../../../../libs/transloco/src/lib/transloco.loader.ts","../../../../libs/transloco/src/lib/helpers.ts","../../../../libs/transloco/src/lib/transloco.config.ts","../../../../libs/transloco/src/lib/transloco.transpiler.ts","../../../../libs/transloco/src/lib/transloco-missing-handler.ts","../../../../libs/transloco/src/lib/transloco.interceptor.ts","../../../../libs/transloco/src/lib/transloco-fallback-strategy.ts","../../../../libs/transloco/src/lib/shared.ts","../../../../libs/transloco/src/lib/resolve-loader.ts","../../../../libs/transloco/src/lib/get-fallbacks-loaders.ts","../../../../libs/transloco/src/lib/transloco.service.ts","../../../../libs/transloco/src/lib/loader-component.component.ts","../../../../libs/transloco/src/lib/template-handler.ts","../../../../libs/transloco/src/lib/transloco-lang.ts","../../../../libs/transloco/src/lib/transloco-loading-template.ts","../../../../libs/transloco/src/lib/transloco-scope.ts","../../../../libs/transloco/src/lib/lang-resolver.ts","../../../../libs/transloco/src/lib/scope-resolver.ts","../../../../libs/transloco/src/lib/transloco.directive.ts","../../../../libs/transloco/src/lib/transloco.pipe.ts","../../../../libs/transloco/src/lib/transloco.module.ts","../../../../libs/transloco/src/lib/transloco.providers.ts","../../../../libs/transloco/src/lib/transloco-testing.module.ts","../../../../libs/transloco/src/lib/browser-lang.ts","../../../../libs/transloco/src/jsverse-transloco.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { Observable, of } from 'rxjs';\n\nimport { Translation } from './types';\n\nexport interface TranslocoLoader {\n getTranslation(\n lang: string,\n data?: TranslocoLoaderData\n ): Observable<Translation> | Promise<Translation>;\n}\n\nexport type TranslocoLoaderData = {\n scope: string;\n};\n\nexport class DefaultLoader implements TranslocoLoader {\n constructor(private translations: Map<string, Translation>) {}\n\n getTranslation(lang: string): Observable<Translation> {\n return of(this.translations.get(lang) || {});\n }\n}\n\nexport const TRANSLOCO_LOADER = new InjectionToken<TranslocoLoader>(\n 'TRANSLOCO_LOADER'\n);\n","import { flatten as _flatten, unflatten as _unflatten } from 'flat';\n\nimport { ProviderScope, Translation } from './types';\n\nexport function getValue<T>(obj: T, path: keyof T) {\n if (!obj) {\n return obj;\n }\n\n /* For cases where the key is like: 'general.something.thing' */\n if (Object.prototype.hasOwnProperty.call(obj, path)) {\n return obj[path];\n }\n\n return (path as string).split('.').reduce((p, c) => p?.[c], obj as any);\n}\n\nexport function setValue(obj: any, prop: string, val: any) {\n obj = { ...obj };\n\n const split = prop.split('.');\n const lastIndex = split.length - 1;\n\n split.reduce((acc, part, index) => {\n if (index === lastIndex) {\n acc[part] = val;\n } else {\n acc[part] = Array.isArray(acc[part])\n ? acc[part].slice()\n : { ...acc[part] };\n }\n\n return acc && acc[part];\n }, obj);\n\n return obj;\n}\n\nexport function size(collection: any): number {\n if (!collection) {\n return 0;\n }\n\n if (Array.isArray(collection)) {\n return collection.length;\n }\n\n if (isObject(collection)) {\n return Object.keys(collection).length;\n }\n\n return collection ? collection.length : 0;\n}\n\nexport function isEmpty(collection: any): boolean {\n return size(collection) === 0;\n}\n\nexport function isFunction(val: unknown): val is CallableFunction {\n return typeof val === 'function';\n}\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\n\nexport function isNumber(val: unknown): val is number {\n return typeof val === 'number';\n}\n\nexport function isObject(item: unknown): boolean {\n return !!item && typeof item === 'object' && !Array.isArray(item);\n}\n\nexport function coerceArray<T>(value: T | T[]): T[];\nexport function coerceArray<T>(value: T | readonly T[]): readonly T[];\nexport function coerceArray<T>(value: T | T[]): T[] {\n return Array.isArray(value) ? value : [value];\n}\n\n/*\n * @example\n *\n * given: path-to-happiness => pathToHappiness\n * given: path_to_happiness => pathToHappiness\n * given: path-to_happiness => pathToHappiness\n *\n */\nexport function toCamelCase(str: string): string {\n return str\n .replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) =>\n index == 0 ? word.toLowerCase() : word.toUpperCase()\n )\n .replace(/\\s+|_|-|\\//g, '');\n}\n\nexport function isBrowser() {\n return typeof window !== 'undefined';\n}\n\nexport function isNil(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\nexport function isDefined(value: unknown) {\n return isNil(value) === false;\n}\n\nexport function toNumber(value: number | string): number | null {\n if (isNumber(value)) return value;\n\n if (isString(value) && !isNaN(Number(value) - parseFloat(value))) {\n return Number(value);\n }\n\n return null;\n}\n\nexport function isScopeObject(item: any): item is ProviderScope {\n return item && typeof item.scope === 'string';\n}\n\nexport function hasInlineLoader(item: any): item is ProviderScope {\n return item && isObject(item.loader);\n}\n\nexport function unflatten(obj: Translation): Translation {\n return _unflatten(obj);\n}\n\nexport function flatten(obj: Translation): Translation {\n return _flatten(obj, { safe: true });\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { AvailableLangs } from './types';\n\nexport interface TranslocoConfig {\n defaultLang: string;\n reRenderOnLangChange: boolean;\n prodMode: boolean;\n fallbackLang?: string | string[];\n failedRetries: number;\n availableLangs: AvailableLangs;\n flatten: {\n aot: boolean;\n };\n missingHandler: {\n logMissingKey: boolean;\n useFallbackTranslation: boolean;\n allowEmpty: boolean;\n };\n interpolation: [string, string];\n}\n\nexport const TRANSLOCO_CONFIG = new InjectionToken<TranslocoConfig>(\n 'TRANSLOCO_CONFIG',\n {\n providedIn: 'root',\n factory: () => defaultConfig,\n }\n);\n\nexport const defaultConfig: TranslocoConfig = {\n defaultLang: 'en',\n reRenderOnLangChange: false,\n prodMode: false,\n failedRetries: 2,\n fallbackLang: [],\n availableLangs: [],\n missingHandler: {\n logMissingKey: true,\n useFallbackTranslation: false,\n allowEmpty: false,\n },\n flatten: {\n aot: false,\n },\n interpolation: ['{{', '}}'],\n};\n\ntype DeepPartial<T> = T extends Array<any>\n ? T\n : T extends object\n ? { [P in keyof T]?: DeepPartial<T[P]> }\n : T;\n\nexport type PartialTranslocoConfig = DeepPartial<TranslocoConfig>;\n\nexport function translocoConfig(\n config: PartialTranslocoConfig = {}\n): TranslocoConfig {\n return {\n ...defaultConfig,\n ...config,\n missingHandler: {\n ...defaultConfig.missingHandler,\n ...config.missingHandler,\n },\n flatten: {\n ...defaultConfig.flatten,\n ...config.flatten,\n },\n };\n}\n","import { inject, Injectable, InjectionToken, Injector } from '@angular/core';\n\nimport { HashMap, Translation } from './types';\nimport { getValue, isDefined, isObject, isString, setValue } from './helpers';\nimport {\n defaultConfig,\n TRANSLOCO_CONFIG,\n TranslocoConfig,\n} from './transloco.config';\n\nexport const TRANSLOCO_TRANSPILER = new InjectionToken<TranslocoTranspiler>(\n 'TRANSLOCO_TRANSPILER'\n);\n\nexport interface TranslocoTranspiler {\n transpile(params: TranspileParams): any;\n\n onLangChanged?(lang: string): void;\n}\n\nexport interface TranspileParams<V = unknown> {\n value: V;\n params?: HashMap;\n translation: Translation;\n key: string;\n}\n\n@Injectable()\nexport class DefaultTranspiler implements TranslocoTranspiler {\n protected config =\n inject(TRANSLOCO_CONFIG, { optional: true }) ?? defaultConfig;\n\n protected get interpolationMatcher() {\n return resolveMatcher(this.config);\n }\n\n transpile({ value, params = {}, translation, key }: TranspileParams): any {\n if (isString(value)) {\n let paramMatch: RegExpExecArray | null;\n let parsedValue = value;\n\n while (\n (paramMatch = this.interpolationMatcher.exec(parsedValue)) !== null\n ) {\n const [match, paramValue] = paramMatch;\n parsedValue = parsedValue.replace(match, () => {\n const match = paramValue.trim();\n\n const param = getValue(params, match);\n if (isDefined(param)) {\n return param;\n }\n\n return isDefined(translation[match])\n ? this.transpile({\n params,\n translation,\n key,\n value: translation[match],\n })\n : '';\n });\n }\n\n return parsedValue;\n } else if (params) {\n if (isObject(value)) {\n value = this.handleObject({\n value: value as Record<any, any>,\n params,\n translation,\n key,\n });\n } else if (Array.isArray(value)) {\n value = this.handleArray({ value, params, translation, key });\n }\n }\n\n return value;\n }\n\n /**\n *\n * @example\n *\n * const en = {\n * a: {\n * b: {\n * c: \"Hello {{ value }}\"\n * }\n * }\n * }\n *\n * const params = {\n * \"b.c\": { value: \"Transloco \"}\n * }\n *\n * service.selectTranslate('a', params);\n *\n * // the first param will be the result of `en.a`.\n * // the second param will be `params`.\n * parser.transpile(value, params, {});\n *\n *\n */\n protected handleObject({\n value,\n params = {},\n translation,\n key,\n }: TranspileParams<Record<any, any>>) {\n let result = value;\n\n Object.keys(params).forEach((p) => {\n // transpile the value => \"Hello Transloco\"\n const transpiled = this.transpile({\n // get the value of \"b.c\" inside \"a\" => \"Hello {{ value }}\"\n value: getValue(result, p),\n // get the params of \"b.c\" => { value: \"Transloco\" }\n params: getValue(params, p),\n translation,\n key,\n });\n\n // set \"b.c\" to `transpiled`\n result = setValue(result, p, transpiled);\n });\n\n return result;\n }\n\n protected handleArray({ value, ...rest }: TranspileParams<unknown[]>) {\n return value.map((v) =>\n this.transpile({\n value: v,\n ...rest,\n })\n );\n }\n}\n\nfunction resolveMatcher(config: TranslocoConfig): RegExp {\n const [start, end] = config.interpolation;\n\n return new RegExp(`${start}([^${start}${end}]*?)${end}`, 'g');\n}\n\nexport interface TranslocoTranspilerFunction {\n transpile(...args: string[]): any;\n}\n\nexport function getFunctionArgs(argsString: string): string[] {\n const splitted = argsString ? argsString.split(',') : [];\n const args = [];\n for (let i = 0; i < splitted.length; i++) {\n let value = splitted[i].trim();\n while (value[value.length - 1] === '\\\\') {\n i++;\n value = value.replace('\\\\', ',') + splitted[i];\n }\n args.push(value);\n }\n\n return args;\n}\n\n@Injectable()\nexport class FunctionalTranspiler\n extends DefaultTranspiler\n implements TranslocoTranspiler\n{\n protected injector = inject(Injector);\n\n transpile({ value, ...rest }: TranspileParams) {\n let transpiled = value;\n if (isString(value)) {\n transpiled = value.replace(\n /\\[\\[\\s*(\\w+)\\((.*?)\\)\\s*]]/g,\n (match: string, functionName: string, args: string) => {\n try {\n const func: TranslocoTranspilerFunction =\n this.injector.get(functionName);\n\n return func.transpile(...getFunctionArgs(args));\n } catch (e: unknown) {\n let message = `There is an error in: '${value}'. \n Check that the you used the right syntax in your translation and that the implementation of ${functionName} is correct.`;\n if ((e as Error).message.includes('NullInjectorError')) {\n message = `You are using the '${functionName}' function in your translation but no provider was found!`;\n }\n throw new Error(message);\n }\n }\n );\n }\n\n return super.transpile({ value: transpiled, ...rest });\n }\n}\n","import { InjectionToken, Injectable } from '@angular/core';\n\nimport { TranslocoConfig } from './transloco.config';\nimport { HashMap } from './types';\n\nexport const TRANSLOCO_MISSING_HANDLER =\n new InjectionToken<TranslocoMissingHandlerData>('TRANSLOCO_MISSING_HANDLER');\n\nexport interface TranslocoMissingHandlerData extends TranslocoConfig {\n activeLang: string;\n}\n\nexport interface TranslocoMissingHandler {\n handle(key: string, data: TranslocoMissingHandlerData, params?: HashMap): any;\n}\n\n@Injectable()\nexport class DefaultMissingHandler implements TranslocoMissingHandler {\n handle(key: string, config: TranslocoConfig) {\n if (config.missingHandler.logMissingKey && !config.prodMode) {\n const msg = `Missing translation for '${key}'`;\n console.warn(`%c ${msg}`, 'font-size: 12px; color: red');\n }\n\n return key;\n }\n}\n","import { InjectionToken, Injectable } from '@angular/core';\n\nimport { Translation } from './types';\n\nexport const TRANSLOCO_INTERCEPTOR = new InjectionToken<TranslocoInterceptor>(\n 'TRANSLOCO_INTERCEPTOR'\n);\n\nexport interface TranslocoInterceptor {\n preSaveTranslation(translation: Translation, lang: string): Translation;\n\n preSaveTranslationKey(key: string, value: string, lang: string): string;\n}\n\n@Injectable()\nexport class DefaultInterceptor implements TranslocoInterceptor {\n preSaveTranslation(translation: Translation): Translation {\n return translation;\n }\n\n preSaveTranslationKey(_: string, value: string): string {\n return value;\n }\n}\n","import { Inject, Injectable, InjectionToken } from '@angular/core';\n\nimport { TRANSLOCO_CONFIG, TranslocoConfig } from './transloco.config';\n\nexport const TRANSLOCO_FALLBACK_STRATEGY =\n new InjectionToken<TranslocoFallbackStrategy>('TRANSLOCO_FALLBACK_STRATEGY');\n\nexport interface TranslocoFallbackStrategy {\n getNextLangs(failedLang: string): string[];\n}\n\n@Injectable()\nexport class DefaultFallbackStrategy implements TranslocoFallbackStrategy {\n constructor(@Inject(TRANSLOCO_CONFIG) private userConfig: TranslocoConfig) {}\n\n getNextLangs() {\n const fallbackLang = this.userConfig.fallbackLang;\n if (!fallbackLang) {\n throw new Error(\n 'When using the default fallback, a fallback language must be provided in the config!'\n );\n }\n\n return Array.isArray(fallbackLang) ? fallbackLang : [fallbackLang];\n }\n}\n","import { Observable, OperatorFunction, take } from 'rxjs';\n\nimport { TranslocoService } from './transloco.service';\nimport { hasInlineLoader, isString } from './helpers';\nimport { InlineLoader, LoadedEvent, TranslocoScope } from './types';\n\n/*\n * @example\n *\n * given: lazy-page/en => lazy-page\n *\n */\nexport function getScopeFromLang(lang: string): string {\n if (!lang) {\n return '';\n }\n\n const split = lang.split('/');\n split.pop();\n\n return split.join('/');\n}\n\n/*\n * @example\n *\n * given: lazy-page/en => en\n *\n */\nexport function getLangFromScope(lang: string): string {\n if (!lang) {\n return '';\n }\n\n return lang.split('/').pop()!;\n}\n\n/**\n * @example\n *\n * getPipeValue('todos|scoped', 'scoped') [true, 'todos']\n * getPipeValue('en|static', 'static') [true, 'en']\n * getPipeValue('en', 'static') [false, 'en']\n */\nexport function getPipeValue(\n str: string | undefined,\n value: string,\n char = '|'\n): [boolean, string] {\n if (isString(str)) {\n const splitted = str.split(char);\n const lastItem = splitted.pop()!;\n\n return lastItem === value ? [true, splitted.toString()] : [false, lastItem];\n }\n\n return [false, ''];\n}\n\nexport function shouldListenToLangChanges(\n service: TranslocoService,\n lang?: string\n) {\n const [hasStatic] = getPipeValue(lang, 'static');\n if (!hasStatic) {\n // If we didn't get 'lang|static' check if it's set in the global level\n return !!service.config.reRenderOnLangChange;\n }\n\n // We have 'lang|static' so don't listen to lang changes\n return false;\n}\n\nexport function listenOrNotOperator<T>(\n listenToLangChange?: boolean\n): OperatorFunction<T, T> {\n return listenToLangChange ? (source: Observable<T>) => source : take<T>(1);\n}\n\nfunction prependScope(inlineLoader: InlineLoader, scope: string) {\n return Object.keys(inlineLoader).reduce((acc, lang) => {\n acc[`${scope}/${lang}`] = inlineLoader[lang];\n\n return acc;\n }, {} as Record<string, InlineLoader[keyof InlineLoader]>);\n}\n\nexport function resolveInlineLoader(\n providerScope: TranslocoScope | null,\n scope?: string\n): InlineLoader | undefined {\n return hasInlineLoader(providerScope)\n ? prependScope(providerScope.loader!, scope!)\n : undefined;\n}\n\nexport function getEventPayload(lang: string): LoadedEvent['payload'] {\n return {\n scope: getScopeFromLang(lang) || null,\n langName: getLangFromScope(lang),\n };\n}\n","import { TranslocoLoader, TranslocoLoaderData } from './transloco.loader';\nimport { InlineLoader } from './types';\nimport { isFunction } from './helpers';\n\ninterface Options {\n inlineLoader?: InlineLoader;\n path: string;\n mainLoader: TranslocoLoader;\n data?: TranslocoLoaderData;\n}\n\nexport function resolveLoader(options: Options) {\n const { path, inlineLoader, mainLoader, data } = options;\n\n if (inlineLoader) {\n const pathLoader = inlineLoader[path];\n if (isFunction(pathLoader) === false) {\n throw `You're using an inline loader but didn't provide a loader for ${path}`;\n }\n\n return inlineLoader[path]().then((res) =>\n res.default ? res.default : res\n );\n }\n\n return mainLoader.getTranslation(path, data);\n}\n","import { from, map } from 'rxjs';\n\nimport { resolveLoader } from './resolve-loader';\nimport { TranslocoLoader, TranslocoLoaderData } from './transloco.loader';\nimport { InlineLoader } from './types';\n\ninterface Options {\n path: string;\n fallbackPath?: string;\n inlineLoader?: InlineLoader;\n mainLoader: TranslocoLoader;\n data?: TranslocoLoaderData;\n}\n\nexport function getFallbacksLoaders({\n mainLoader,\n path,\n data,\n fallbackPath,\n inlineLoader,\n}: Options) {\n const paths = fallbackPath ? [path, fallbackPath] : [path];\n\n return paths.map((path) => {\n const loader = resolveLoader({ path, mainLoader, inlineLoader, data });\n\n return from(loader).pipe(\n map((translation) => ({\n translation,\n lang: path,\n }))\n );\n });\n}\n","import { Inject, Injectable, OnDestroy, Optional } from '@angular/core';\nimport {\n BehaviorSubject,\n catchError,\n combineLatest,\n EMPTY,\n forkJoin,\n from,\n map,\n Observable,\n of,\n retry,\n shareReplay,\n Subject,\n switchMap,\n tap,\n} from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport {\n DefaultLoader,\n TRANSLOCO_LOADER,\n TranslocoLoader,\n} from './transloco.loader';\nimport {\n TRANSLOCO_TRANSPILER,\n TranslocoTranspiler,\n} from './transloco.transpiler';\nimport {\n AvailableLangs,\n HashMap,\n InlineLoader,\n LangDefinition,\n LoadOptions,\n SetTranslationOptions,\n TranslateObjectParams,\n TranslateParams,\n Translation,\n TranslocoEvents,\n TranslocoScope,\n} from './types';\nimport {\n flatten,\n isEmpty,\n isNil,\n isScopeObject,\n isString,\n size,\n toCamelCase,\n unflatten,\n} from './helpers';\nimport { TRANSLOCO_CONFIG, TranslocoConfig } from './transloco.config';\nimport {\n TRANSLOCO_MISSING_HANDLER,\n TranslocoMissingHandler,\n TranslocoMissingHandlerData,\n} from './transloco-missing-handler';\nimport {\n TRANSLOCO_INTERCEPTOR,\n TranslocoInterceptor,\n} from './transloco.interceptor';\nimport {\n TRANSLOCO_FALLBACK_STRATEGY,\n TranslocoFallbackStrategy,\n} from './transloco-fallback-strategy';\nimport {\n getEventPayload,\n getLangFromScope,\n getScopeFromLang,\n resolveInlineLoader,\n} from './shared';\nimport { getFallbacksLoaders } from './get-fallbacks-loaders';\nimport { resolveLoader } from './resolve-loader';\n\nlet service: TranslocoService;\n\nexport function translate<T = string>(\n key: TranslateParams,\n params: HashMap = {},\n lang?: string\n): T {\n return service.translate<T>(key, params, lang);\n}\n\nexport function translateObject<T>(\n key: TranslateParams,\n params: HashMap = {},\n lang?: string\n): T | T[] {\n return service.translateObject<T>(key, params, lang);\n}\n\n@Injectable({ providedIn: 'root' })\nexport class TranslocoService implements OnDestroy {\n langChanges$: Observable<string>;\n\n private translations = new Map<string, Translation>();\n private cache = new Map<string, Observable<Translation>>();\n private firstFallbackLang: string | undefined;\n private defaultLang = '';\n private availableLangs: AvailableLangs = [];\n private isResolvedMissingOnce = false;\n private lang: BehaviorSubject<string>;\n private failedLangs = new Set<string>();\n private events = new Subject<TranslocoEvents>();\n\n events$ = this.events.asObservable();\n readonly config: TranslocoConfig & {\n scopeMapping?: HashMap<string>;\n };\n\n constructor(\n @Optional() @Inject(TRANSLOCO_LOADER) private loader: TranslocoLoader,\n @Inject(TRANSLOCO_TRANSPILER) private parser: TranslocoTranspiler,\n @Inject(TRANSLOCO_MISSING_HANDLER)\n private missingHandler: TranslocoMissingHandler,\n @Inject(TRANSLOCO_INTERCEPTOR) private interceptor: TranslocoInterceptor,\n @Inject(TRANSLOCO_CONFIG) userConfig: TranslocoConfig,\n @Inject(TRANSLOCO_FALLBACK_STRATEGY)\n private fallbackStrategy: TranslocoFallbackStrategy\n ) {\n if (!this.loader) {\n this.loader = new DefaultLoader(this.translations);\n }\n service = this;\n this.config = JSON.parse(JSON.stringify(userConfig));\n\n this.setAvailableLangs(this.config.availableLangs || []);\n this.setFallbackLangForMissingTranslation(this.config);\n this.setDefaultLang(this.config.defaultLang);\n this.lang = new BehaviorSubject<string>(this.getDefaultLang());\n // Don't use distinctUntilChanged as we need the ability to update\n // the value when using setTranslation or setTranslationKeys\n this.langChanges$ = this.lang.asObservable();\n\n /**\n * When we have a failure, we want to define the next language that succeeded as the active\n */\n this.events$.pipe(takeUntilDestroyed()).subscribe((e) => {\n if (e.type === 'translationLoadSuccess' && e.wasFailure) {\n this.setActiveLang(e.payload.langName);\n }\n });\n }\n\n getDefaultLang() {\n return this.defaultLang;\n }\n\n setDefaultLang(lang: string) {\n this.defaultLang = lang;\n }\n\n getActiveLang() {\n return this.lang.getValue();\n }\n\n setActiveLang(lang: string) {\n this.parser.onLangChanged?.(lang);\n this.lang.next(lang);\n this.events.next({\n type: 'langChanged',\n payload: getEventPayload(lang),\n });\n return this;\n }\n\n setAvailableLangs(langs: AvailableLangs) {\n this.availableLangs = langs;\n }\n\n /**\n * Gets the available languages.\n *\n * @returns\n * An array of the available languages. Can be either a `string[]` or a `{ id: string; label: string }[]`\n * depending on how the available languages are set in your module.\n */\n getAvailableLangs() {\n return this.availableLangs;\n }\n\n load(path: string, options: LoadOptions = {}): Observable<Translation> {\n const cached = this.cache.get(path);\n if (cached) {\n return cached;\n }\n\n let loadTranslation: Observable<\n Translation | { translation: Translation; lang: string }[]\n >;\n const isScope = this._isLangScoped(path);\n let scope: string;\n if (isScope) {\n scope = getScopeFromLang(path);\n }\n\n const loadersOptions = {\n path,\n mainLoader: this.loader,\n inlineLoader: options.inlineLoader,\n data: isScope ? { scope: scope! } : undefined,\n };\n\n if (this.useFallbackTranslation(path)) {\n // if the path is scope the fallback should be `scope/fallbackLang`;\n const fallback = isScope\n ? `${scope!}/${this.firstFallbackLang}`\n : this.firstFallbackLang;\n\n const loaders = getFallbacksLoaders({\n ...loadersOptions,\n fallbackPath: fallback!,\n });\n loadTranslation = forkJoin(loaders);\n } else {\n const loader = resolveLoader(loadersOptions);\n loadTranslation = from(loader);\n }\n\n const load$ = loadTranslation.pipe(\n retry(this.config.failedRetries),\n tap((translation) => {\n if (Array.isArray(translation)) {\n translation.forEach((t) => {\n this.handleSuccess(t.lang, t.translation);\n // Save the fallback in cache so we'll not create a redundant request\n if (t.lang !== path) {\n this.cache.set(t.lang, of({}));\n }\n });\n return;\n }\n this.handleSuccess(path, translation);\n }),\n catchError((error) => {\n if (!this.config.prodMode) {\n console.error(`Error while trying to load \"${path}\"`, error);\n }\n\n return this.handleFailure(path, options);\n }),\n shareReplay(1)\n );\n\n this.cache.set(path, load$);\n\n return load$;\n }\n\n /**\n * Gets the instant translated value of a key\n *\n * @example\n *\n * translate<string>('hello')\n * translate('hello', { value: 'value' })\n * translate<string[]>(['hello', 'key'])\n * translate('hello', { }, 'en')\n * translate('scope.someKey', { }, 'en')\n */\n translate<T = string>(\n key: TranslateParams,\n params: HashMap = {},\n lang = this.getActiveLang()\n ): T {\n if (!key) return key as any;\n\n const { scope, resolveLang } = this.resolveLangAndScope(lang);\n\n if (Array.isArray(key)) {\n return key.map((k) =>\n this.translate(scope ? `${scope}.${k}` : k, params, resolveLang)\n ) as any;\n }\n\n key = scope ? `${scope}.${key}` : key;\n\n const translation = this.getTranslation(resolveLang);\n const value = translation[key];\n\n if (!value) {\n return this._handleMissingKey(key, value, params);\n }\n\n return this.parser.transpile({\n value,\n params,\n translation,\n key,\n });\n }\n\n /**\n * Gets the translated value of a key as observable\n *\n * @example\n *\n * selectTranslate<string>('hello').subscribe(value => ...)\n * selectTranslate<string>('hello', {}, 'es').subscribe(value => ...)\n * selectTranslate<string>('hello', {}, 'todos').subscribe(value => ...)\n * selectTranslate<string>('hello', {}, { scope: 'todos' }).subscribe(value => ...)\n *\n */\n selectTranslate<T = any>(\n key: TranslateParams,\n params?: HashMap,\n lang?: string | TranslocoScope | TranslocoScope[],\n _isObject = false\n ): Observable<T> {\n let inlineLoader: InlineLoader | undefined;\n const load = (lang: string, options?: LoadOptions) =>\n this.load(lang, options).pipe(\n map(() =>\n _isObject\n ? this.translateObject(key, params, lang)\n : this.translate(key, params, lang)\n )\n );\n if (isNil(lang)) {\n return this.langChanges$.pipe(switchMap((lang) => load(lang)));\n }\n\n lang = Array.isArray(lang) ? lang[0] : lang;\n if (isScopeObject(lang)) {\n // it's a scope object.\n const providerScope = lang;\n lang = providerScope.scope;\n inlineLoader = resolveInlineLoader(providerScope, providerScope.scope);\n }\n\n lang = lang as string;\n if (this.isLang(lang) || this.isScopeWithLang(lang)) {\n return load(lang);\n }\n // it's a scope\n const scope = lang;\n return this.langChanges$.pipe(\n switchMap((lang) => load(`${scope}/${lang}`, { inlineLoader }))\n );\n }\n\n /**\n * Whether the scope with lang\n *\n * @example\n *\n * todos/en => true\n * todos => false\n */\n private isScopeWithLang(lang: string) {\n return this.isLang(getLangFromScope(lang));\n }\n\n /**\n * Translate the given path that returns an object\n *\n * @example\n *\n * service.translateObject('path.to.object', {'subpath': { value: 'someValue'}}) => returns translated object\n *\n */\n translateObject<T = any>(key: string, params?: HashMap, lang?: string): T;\n translateObject<T = any>(key: string[], params?: HashMap, lang?: string): T[];\n translateObject<T = any>(\n key: TranslateParams,\n params?: HashMap,\n lang?: string\n ): T | T[];\n translateObject<T = any>(\n key: HashMap | Map<string, HashMap>,\n params?: null,\n lang?: string\n ): T[];\n translateObject<T = any>(\n key: TranslateObjectParams,\n params: HashMap | null = {},\n lang = this.getActiveLang()\n ): T | T[] {\n if (isString(key) || Array.isArray(key)) {\n const { resolveLang, scope } = this.resolveLangAndScope(lang);\n if (Array.isArray(key)) {\n return key.map((k) =>\n this.translateObject(\n scope ? `${scope}.${k}` : k,\n params!,\n resolveLang\n )\n ) as any;\n }\n\n const translation = this.getTranslation(resolveLang);\n key = scope ? `${scope}.${key}` : key;\n\n const value = unflatten(this.getObjectByKey(translation, key));\n /* If an empty object was returned we want to try and translate the key as a string and not an object */\n return isEmpty(value)\n ? this.translate(key, params!, lang)\n : this.parser.transpile({ value, params: params!, translation, key });\n }\n\n const translations: T[] = [];\n for (const [_key, _params] of this.getEntries(key)) {\n translations.push(this.translateObject(_key, _params, lang));\n }\n\n return translations;\n }\n\n selectTranslateObject<T = any>(\n key: string,\n params?: HashMap,\n lang?: string\n ): Observable<T>;\n selectTranslateObject<T = any>(\n key: string[],\n params?: HashMap,\n lang?: string\n ): Observable<T[]>;\n selectTranslateObject<T = any>(\n key: TranslateParams,\n params?: HashMap,\n lang?: string\n ): Observable<T> | Observable<T[]>;\n selectTranslateObject<T = any>(\n key: HashMap | Map<string, HashMap>,\n params?: null,\n lang?: string\n ): Observable<T[]>;\n selectTranslateObject<T = any>(\n key: TranslateObjectParams,\n params?: HashMap | null,\n lang?: string\n ): Observable<T> | Observable<T[]> {\n if (isString(key) || Array.isArray(key)) {\n return this.selectTranslate<T>(key, params!, lang, true);\n }\n\n const [[firstKey, firstParams], ...rest] = this.getEntries(key);\n\n /* In order to avoid subscribing multiple times to the load language event by calling selectTranslateObject for each pair,\n * we listen to when the first key has been translated (the language is loaded) and translate the rest synchronously */\n return this.selectTranslateObject<T>(firstKey, firstParams, lang).pipe(\n map((value) => {\n const translations = [value];\n for (const [_key, _params] of rest) {\n translations.push(this.translateObject<T>(_key, _params, lang));\n }\n\n return translations;\n })\n );\n }\n\n /**\n * Gets an object of translations for a given language\n *\n * @example\n *\n * getTranslation()\n * getTranslation('en')\n * getTranslation('admin-page/en')\n */\n getTranslation(): Map<string, Translation>;\n getTranslation(langOrScope: string): Translation;\n getTranslation(langOrScope?: string): Map<string, Translation> | Translation {\n if (langOrScope) {\n if (this.isLang(langOrScope)) {\n return this.translations.get(langOrScope) || {};\n } else {\n // This is a scope, build the scope value from the translation object\n const { scope, resolveLang } = this.resolveLangAndScope(langOrScope);\n const translation = this.translations.get(resolveLang) || {};\n\n return this.getObjectByKey(translation, scope);\n }\n }\n\n return this.translations;\n }\n\n /**\n * Gets an object of translations for a given language\n *\n * @example\n *\n * selectTranslation().subscribe() - will return the current lang translation\n * selectTranslation('es').subscribe()\n * selectTranslation('admin-page').subscribe() - will return the current lang scope translation\n * selectTranslation('admin-page/es').subscribe()\n */\n selectTranslation(lang?: string): Observable<Translation> {\n let language$ = this.langChanges$;\n if (lang) {\n const scopeLangSpecified = getLangFromScope(lang) !== lang;\n if (this.isLang(lang) || scopeLangSpecified) {\n language$ = of(lang);\n } else {\n language$ = this.langChanges$.pipe(\n map((currentLang) => `${lang}/${currentLang}`)\n );\n }\n }\n\n return language$.pipe(\n switchMap((language) =>\n this.load(language).pipe(map(() => this.getTranslation(language)))\n )\n );\n }\n\n /**\n * Sets or merge a given translation object to current lang\n *\n * @example\n *\n * setTranslation({ ... })\n * setTranslation({ ... }, 'en')\n * setTranslation({ ... }, 'es', { merge: false } )\n * setTranslation({ ... }, 'todos/en', { merge: false } )\n */\n setTranslation(\n translation: Translation,\n lang = this.getActiveLang(),\n options: SetTranslationOptions = {}\n ) {\n const defaults = { merge: true, emitChange: true };\n const mergedOptions = { ...defaults, ...options };\n const scope = getScopeFromLang(lang);\n\n /**\n * If this isn't a scope we use the whole translation as is\n * otherwise we need to flat the scope and use it\n */\n let flattenScopeOrTranslation = translation;\n\n // Merged the scoped language into the active language\n if (scope) {\n const key = this.getMappedScope(scope);\n flattenScopeOrTranslation = flatten({ [key]: translation });\n }\n\n const currentLang = scope ? getLangFromScope(lang) : lang;\n\n const mergedTranslation = {\n ...(mergedOptions.merge && this.getTranslation(currentLang)),\n ...flattenScopeOrTranslation,\n };\n\n const flattenTranslation = this.config.flatten!.aot\n ? mergedTranslation\n : flatten(mergedTranslation);\n const withHook = this.interceptor.preSaveTranslation(\n flattenTranslation,\n currentLang\n );\n this.translations.set(currentLang, withHook);\n mergedOptions.emitChange && this.setActiveLang(this.getActiveLang());\n }\n\n /**\n * Sets translation key with given value\n *\n * @example\n *\n * setTranslationKey('key', 'value')\n * setTranslationKey('key.nested', 'value')\n * setTranslationKey('key.nested', 'value', 'en')\n * setTranslationKey('key.nested', 'value', 'en', { emitChange: false } )\n */\n setTranslationKey(\n key: string,\n value: string,\n options: Omit<SetTranslationOptions, 'merge'> = {}\n ) {\n const lang = options.lang || this.getActiveLang();\n const withHook = this.interceptor.preSaveTranslationKey(key, value, lang);\n const newValue = {\n [key]: withHook,\n };\n\n this.setTranslation(newValue, lang, { ...options, merge: true });\n }\n\n /**\n * Sets the fallback lang for the currently active language\n * @param fallbackLang\n */\n setFallbackLangForMissingTranslation({\n fallbackLang,\n }: Pick<TranslocoConfig, 'fallbackLang'>) {\n const lang = Array.isArray(fallbackLang) ? fallbackLang[0] : fallbackLang;\n if (fallbackLang && this.useFallbackTranslation(lang)) {\n this.firstFallbackLang = lang!;\n }\n }\n\n /**\n * @internal\n */\n _handleMissingKey(key: string, value: any, params?: HashMap) {\n if (this.config.missingHandler!.allowEmpty && value === '') {\n return '';\n }\n\n if (!this.isResolvedMissingOnce && this.useFallbackTranslation()) {\n // We need to set it to true to prevent a loop\n this.isResolvedMissingOnce = true;\n const fallbackValue = this.translate(\n key,\n params,\n this.firstFallbackLang!\n );\n this.isResolvedMissingOnce = false;\n\n return fallbackValue;\n }\n\n return this.missingHandler.handle(\n key,\n this.getMissingHandlerData(),\n params\n );\n }\n\n /**\n * @internal\n */\n _isLangScoped(lang: string) {\n return this.getAvailableLangsIds().indexOf(lang) === -1;\n }\n\n /**\n * Checks if a given string is one of the specified available languages.\n * @returns\n * True if the given string is an available language.\n * False if the given string is not an available language.\n */\n isLang(lang: string): boolean {\n return this.getAvailableLangsIds().indexOf(lang) !== -1;\n }\n\n /**\n * @internal\n *\n * We always want to make sure the global lang is loaded\n * before loading the scope since you can access both via the pipe/directive.\n */\n _loadDependencies(\n path: string,\n inlineLoader?: InlineLoader\n ): Observable<Translation | Translation[]> {\n const mainLang = getLangFromScope(path);\n\n if (this._isLangScoped(path) && !this.isLoadedTranslation(mainLang)) {\n return combineLatest([\n this.load(mainLang),\n this.load(path, { inlineLoader }),\n ]);\n }\n return this.load(path, { inlineLoader });\n }\n\n /**\n * @internal\n */\n _completeScopeWithLang(langOrScope: string) {\n if (\n this._isLangScoped(langOrScope) &&\n !this.isLang(getLangFromScope(langOrScope))\n ) {\n return `${langOrScope}/${this.getActiveLang()}`;\n }\n return langOrScope;\n }\n\n /**\n * @internal\n */\n _setScopeAlias(scope: string, alias: string) {\n if (!this.config.scopeMapping) {\n this.config.scopeMapping = {};\n }\n this.config.scopeMapping[scope] = alias;\n }\n\n ngOnDestroy() {\n // Caretaker note: since this is the root provider, it'll be destroyed when the `NgModuleRef.destroy()` is run.\n // Cached values capture `this`, thus leading to a circular reference and preventing the `TranslocoService` from\n // being GC'd. This would lead to a memory leak when server-side rendering is used since the service is created\n // and destroyed per each HTTP request, but any service is not getting GC'd.\n this.cache.clear();\n }\n\n private isLoadedTranslation(lang: string) {\n return size(this.getTranslation(lang));\n }\n\n private getAvailableLangsIds(): string[] {\n const first = this.getAvailableLangs()[0];\n\n if (isString(first)) {\n return this.getAvailableLangs() as string[];\n }\n\n return (this.getAvailableLangs() as LangDefinition[]).map((l) => l.id);\n }\n\n private getMissingHandlerData(): TranslocoMissingHandlerData {\n return {\n ...this.config,\n activeLang: this.getActiveLang(),\n availableLangs: this.availableLangs,\n defaultLang: this.defaultLang,\n };\n }\n\n /**\n * Use a fallback translation set for missing keys of the primary language\n * This is unrelated to the fallback language (which changes the active language)\n */\n private useFallbackTranslation(lang?: string) {\n return (\n this.config.missingHandler!.useFallbackTranslation &&\n lang !== this.firstFallbackLang\n );\n }\n\n private handleSuccess(lang: string, translation: Translation) {\n this.setTranslation(translation, lang, { emitChange: false });\n this.events.next({\n wasFailure: !!this.failedLangs.size,\n type: 'translationLoadSuccess',\n payload: getEventPayload(lang),\n });\n this.failedLangs.forEach((l) => this.cache.delete(l));\n this.failedLangs.clear();\n }\n\n private handleFailure(lang: string, loadOptions: LoadOptions) {\n // When starting to load a first choice language, initialize\n // the failed counter and resolve the fallback langs.\n if (isNil(loadOptions.failedCounter)) {\n loadOptions.failedCounter = 0;\n\n if (!loadOptions.fallbackLangs) {\n loadOptions.fallbackLangs = this.fallbackStrategy.getNextLangs(lang);\n }\n }\n\n const splitted = lang.split('/');\n const fallbacks = loadOptions.fallbackLangs;\n const nextLang = fallbacks![loadOptions.failedCounter!];\n this.failedLangs.add(lang);\n\n // This handles the case where a loaded fallback language is requested again\n if (this.cache.has(nextLang)) {\n this.handleSuccess(nextLang, this.getTranslation(nextLang));\n return EMPTY;\n }\n\n const isFallbackLang = nextLang === splitted[splitted.length - 1];\n\n if (!nextLang || isFallbackLang) {\n let msg = `Unable to load translation and all the fallback languages`;\n if (splitted.length > 1) {\n msg += `, did you misspelled the scope name?`;\n }\n\n throw new Error(msg);\n }\n\n let resolveLang = nextLang;\n // if it's scoped lang\n if (splitted.length > 1) {\n // We need to resolve it to:\n // todos/langNotExists => todos/nextLang\n splitted[splitted.length - 1] = nextLang;\n resolveLang = splitted.join('/');\n }\n\n loadOptions.failedCounter!++;\n this.events.next({\n type: 'translationLoadFailure',\n payload: getEventPayload(lang),\n });\n\n return this.load(resolveLang, loadOptions);\n }\n\n private getMappedScope(scope: string): string {\n const { scopeMapping = {} } = this.config;\n return scopeMapping[scope] || toCamelCase(scope);\n }\n\n /**\n * If lang is scope we need to check the following cases:\n * todos/es => in this case we should take `es` as lang\n * todos => in this case we should set the active lang as lang\n */\n private resolveLangAndScope(lang: string) {\n let resolveLang = lang;\n let scope;\n\n if (this._isLangScoped(lang)) {\n // en for example\n const langFromScope = getLangFromScope(lang);\n // en is lang\n const hasLang = this.isLang(langFromScope);\n // take en\n resolveLang = hasLang ? langFromScope : this.getActiveLang();\n // find the scope\n scope = this.getMappedScope(hasLang ? getScopeFromLang(lang) : lang);\n }\n\n return { scope, resolveLang };\n }\n\n private getObjectByKey(translation: Translation, key?: string) {\n const result: Translation = {};\n const prefix = `${key}.`;\n\n for (const currentKey in translation) {\n if (currentKey.startsWith(prefix)) {\n result[currentKey.replace(prefix, '')] = translation[currentKey];\n }\n }\n\n return result;\n }\n\n private getEntries(key: HashMap | Map<string, HashMap>) {\n return key instanceof Map ? key.entries() : Object.entries(key);\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n template: `\n <div class=\"transloco-loader-template\" [innerHTML]=\"html\"></div>\n `,\n standalone: true,\n})\nexport class TranslocoLoaderComponent {\n @Input() html: string | undefined;\n}\n","import { TemplateRef, Type, ViewContainerRef } from '@angular/core';\n\nimport { isString } from './helpers';\nimport { TranslocoLoaderComponent } from './loader-component.component';\n\nexport type Content = string | TemplateRef<unknown> | Type<unknown>;\n\nexport class TemplateHandler {\n constructor(private view: Content, private vcr: ViewContainerRef) {}\n\n attachView() {\n if (this.view instanceof TemplateRef) {\n this.vcr.createEmbeddedView(this.view);\n } else if (isString(this.view)) {\n const componentRef = this.vcr.createComponent(TranslocoLoaderComponent);\n componentRef.instance.html = this.view;\n componentRef.hostView.detectChanges();\n } else {\n this.vcr.createComponent(this.view);\n }\n }\n\n detachView() {\n this.vcr.clear();\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const TRANSLOCO_LANG = new InjectionToken<string>('TRANSLOCO_LANG');\n","import { InjectionToken } from '@angular/core';\n\nimport { Content } from './template-handler';\n\nexport const TRANSLOCO_LOADING_TEMPLATE = new InjectionToken<Content>(\n 'TRANSLOCO_LOADING_TEMPLATE'\n);\n","import { InjectionToken } from '@angular/core';\n\nimport { TranslocoScope } from './types';\n\nexport const TRANSLOCO_SCOPE = new InjectionToken<TranslocoScope>(\n 'TRANSLOCO_SCOPE'\n);\n","import { getLangFromScope, getPipeValue, getScopeFromLang } from './shared';\n\ninterface LangResolverParams {\n inline?: string;\n provider: string | null | undefined;\n active: string;\n}\n\nexport class LangResolver {\n initialized = false;\n\n // inline => provider => active\n resolve({ inline, provider, active }: LangResolverParams): string {\n let lang = active;\n /**\n * When the user changes the lang we need to update\n * the view. Otherwise, the lang will remain the inline/provided lang\n */\n if (this.initialized) {\n lang = active;\n\n return lang;\n }\n\n if (provider) {\n const [, extracted] = getPipeValue(provider, 'static');\n lang = extracted;\n }\n\n if (inline) {\n const [, extracted] = getPipeValue(inline, 'static');\n lang = extracted;\n }\n\n this.initialized = true;\n\n return lang;\n }\n\n /**\n *\n * Resolve the lang\n *\n * @example\n *\n * resolveLangBasedOnScope('todos/en') => en\n * resolveLangBasedOnScope('en') => en\n *\n */\n resolveLangBasedOnScope(lang: string) {\n const scope = getScopeFromLang(lang);\n\n return scope ? getLangFromScope(lang) : lang;\n }\n\n /**\n *\n * Resolve the lang path for loading\n *\n * @example\n *\n * resolveLangPath('todos', 'en') => todos/en\n * resolveLangPath('en') => en\n *\n */\n resolveLangPath(lang: string, scope?: string) {\n return scope ? `${scope}/${lang}` : lang;\n }\n}\n","import { TranslocoScope, ProviderScope, OrArray } from './types';\nimport { TranslocoService } from './transloco.service';\nimport { isScopeObject, toCamelCase } from './helpers';\n\ntype ScopeResolverParams = {\n inline: string | undefined;\n provider: OrArray<TranslocoScope> | null;\n};\n\nexport class ScopeResolver {\n constructor(private service: TranslocoService) {}\n\n // inline => provider\n resolve(params: ScopeResolverParams): string | undefined {\n const { inline, provider } = params;\n if (inline) {\n return inline;\n }\n\n if (provider) {\n if (isScopeObject(provider)) {\n const { scope, alias = toCamelCase(scope) } = provider as ProviderScope;\n this.service._setScopeAlias(scope, alias);\n\n return scope;\n }\n\n return provider as string;\n }\n\n return undefined;\n }\n}\n","import {\n ChangeDetectorRef,\n DestroyRef,\n Directive,\n ElementRef,\n EmbeddedViewRef,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { forkJoin, Observable, switchMap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { Content, TemplateHandler } from './template-handler';\nimport { TRANSLOCO_LANG } from './transloco-lang';\nimport { TRANSLOCO_LOADING_TEMPLATE } from './transloco-loading-template';\nimport { TRANSLOCO_SCOPE } from './transloco-scope';\nimport { TranslocoService } from './transloco.service';\nimport { HashMap, OrArray, Translation, TranslocoScope } from './types';\nimport {\n listenOrNotOperator,\n resolveInlineLoader,\n shouldListenToLangChanges,\n} from './shared';\nimport { LangResolver } from './lang-resolver';\nimport { ScopeResolver } from './scope-resolver';\n\ntype TranslateFn = (key: string, params?: HashMap) => any;\ninterface ViewContext {\n $implicit: TranslateFn;\n currentLang: string;\n}\n\n@Directive({\n selector: '[transloco]',\n standalone: true,\n})\nexport class TranslocoDirective implements OnInit, OnDestroy, OnChanges {\n private destroyRef = inject(DestroyRef);\n private service = inject(TranslocoService);\n private tpl = inject<TemplateRef<ViewContext>>(TemplateRef, {\n optional: true,\n });\n private providerLang = inject(TRANSLOCO_LANG, { optional: true });\n private providerScope: OrArray<TranslocoScope> | null = inject(\n TRANSLOCO_SCOPE,\n { optional: true }\n );\n private providedLoadingTpl = inject(TRANSLOCO_LOADING_TEMPLATE, {\n optional: true,\n });\n private cdr = inject(ChangeDetectorRef);\n private host = inject(ElementRef);\n private vcr = inject(ViewContainerRef);\n private renderer = inject(Renderer2);\n\n view: EmbeddedViewRef<ViewContext> | undefined;\n\n private memo = new Map<string, any>();\n\n @Input('transloco') key: string | undefined;\n @Input('translocoParams') params: HashMap = {};\n @Input('translocoScope') inlineScope: string | undefined;\n /** @deprecated use prefix instead, will be removed in Transloco v8 */\n @Input('translocoRead') inlineRead: string | undefined;\n @Input('translocoPrefix') prefix: string | undefined;\n @Input('translocoLang') inlineLang: string | undefined;\n @Input('translocoLoadingTpl') inlineTpl: Content | undefined;\n\n private currentLang: string | undefined;\n private loaderTplHandler: TemplateHandler | undefined;\n // Whether we already rendered the view once\n private initialized = false;\n private path: string | undefined;\n private langResolver = new LangResolver();\n private scopeResolver = new ScopeResolver(this.service);\n private readonly strategy = this.tpl === null ? 'attribute' : 'structural';\n\n static ngTemplateContextGuard(\n dir: TranslocoDirective,\n ctx: unknown\n ): ctx is ViewContext {\n return true;\n }\n\n ngOnInit() {\n const listenToLangChange = shouldListenToLangChanges(\n this.service,\n this.providerLang || this.inlineLang\n );\n\n this.service.langChanges$\n .pipe(\n switchMap((activeLang) => {\n const lang = this.langResolver.resolve({\n inline: this.inlineLang,\n provider: this.providerLang,\n active: activeLang,\n });\n\n return Array.isArray(this.providerScope)\n ? forkJoin(\n this.providerScope.map((providerScope) =>\n this.resolveScope(lang, providerScope)\n )\n )\n : this.resolveScope(lang, this.providerScope);\n }),\n listenOrNotOperator(listenToLangChange),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => {\n this.currentLang = this.langResolver.resolveLangBasedOnScope(\n this.path!\n );\n this.strategy === 'attribute'\n ? this.attributeStrategy()\n : this.structuralStrategy(\n this.currentLang,\n this.prefix || this.inlineRead\n );\n this.cdr.markForCheck();\n this.initialized = true;\n });\n\n if (!this.initialized) {\n const loadingContent = this.resolveLoadingContent();\n if (loadingContent) {\n this.loaderTplHandler = new TemplateHandler(loadingContent, this.vcr);\n this.loaderTplHandler.attachView();\n }\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // We need to support dynamic keys/params, so if this is not the first change CD cycle\n // we need to run the function again in order to update the value\n if (this.strategy === 'attribute') {\n const notInit = Object.keys(changes).some((v) => !changes[v].firstChange);\n notInit && this.attributeStrategy();\n }\n }\n\n private attributeStrategy() {\n this.detachLoader();\n this.renderer.setProperty(\n this.host.nativeElement,\n 'innerText',\n this.service.translate(this.key!, this.params, this.currentLang)\n );\n }\n\n private structuralStrategy(lang: string, prefix?: string) {\n this.memo.clear();\n const translateFn = this.getTranslateFn(lang, prefix);\n\n if (this.view) {\n // when the lang changes we need to change the reference so Angular will update the view\n this.view.context['$implicit'] = translateFn;\n this.view.context['currentLang'] = this.currentLang!;\n } else {\n this.detachLoader();\n this.view = this.vcr.createEmbeddedView(this.tpl!, {\n $implicit: translateFn,\n currentLang: this.currentLang!,\n });\n }\n }\n\n protected getTranslateFn(\n lang: string,\n prefix: string | undefined\n ): TranslateFn {\n return (key: string, params?: HashMap) => {\n const withPrefix = prefix ? `${prefix}.${key}` : key;\n const memoKey = params\n ? `${withPrefix}${JSON.stringify(params)}`\n : withPrefix;\n\n if (!this.memo.has(memoKey)) {\n this.memo.set(\n memoKey,\n this.service.translate(withPrefix, params, lang)\n );\n }\n\n return this.memo.get(memoKey);\n };\n }\n\n private resolveLoadingContent() {\n return this.inlineTpl || this.providedLoadingTpl;\n }\n\n ngOnDestroy() {\n this.memo.clear();\n }\n\n private detachLoader() {\n this.loaderTplHandler?.detachView();\n }\n\n private resolveScope(\n lang: string,\n providerScope: TranslocoScope | null\n ): Observable<Translation | Translation[]> {\n const resolvedScope = this.scopeResolver.resolve({\n inline: this.inlineScope,\n provider: providerScope,\n });\n this.path = this.langResolver.resolveLangPath(lang, resolvedScope);\n const inlineLoader = resolveInlineLoader(providerScope, resolvedScope);\n\n return this.service._loadDependencies(this.path, inlineLoader);\n }\n}\n","import {\n ChangeDetectorRef,\n Inject,\n OnDestroy,\n Optional,\n Pipe,\n PipeTransform,\n} from '@angular/core';\nimport { switchMap, forkJoin, Observable, Subscription } from 'rxjs';\n\nimport { TranslocoService } from './transloco.service';\nimport { HashMap, OrArray, Translation, TranslocoScope } from './types';\nimport { TRANSLOCO_SCOPE } from './transloco-scope';\nimport { TRANSLOCO_LANG } from './transloco-lang';\nimport {\n listenOrNotOperator,\n resolveInlineLoader,\n shouldListenToLangChanges,\n} from './shared';\nimport { LangResolver } from './lang-resolver';\nimport { ScopeResolver } from './scope-resolver';\n\n@Pipe({\n name: 'transloco',\n pure: false,\n standalone: true,\n})\nexport class TranslocoPipe implements PipeTransform, OnDestroy {\n private subscription: Subscription | null = null;\n private lastValue = '';\n private lastKey: string | undefined;\n private path: string | undefined;\n private langResolver = new LangResolver();\n private scopeResolver!: ScopeResolver;\n\n constructor(\n private service: TranslocoService,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n private providerScope: OrArray<TranslocoScope> | undefined,\n @Optional()\n @Inject(TRANSLOCO_LANG)\n private providerLang: string | undefined,\n private cdr: ChangeDetectorRef\n ) {\n this.scopeResolver = new ScopeResolver(this.service);\n }\n\n // null is for handling strict mode + async pipe types https://github.com/jsverse/transloco/issues/311\n // null is for handling strict mode + optional chaining types https://github.com/jsverse/transloco/issues/488\n transform(\n key?: string | null,\n params?: HashMap,\n inlineLang?: string\n ): string {\n if (!key) {\n return key as any;\n }\n\n const keyName = params ? `${key}${JSON.stringify(params)}` : key;\n\n if (keyName === this.lastKey) {\n return this.lastValue;\n }\n\n this.lastKey = keyName;\n this.subscription?.unsubscribe();\n\n const listenToLangChange = shouldListenToLangChanges(\n this.service,\n this.providerLang || inlineLang\n );\n\n this.subscription = this.service.langChanges$\n .pipe(\n switchMap((activeLang) => {\n const lang = this.langResolver.resolve({\n inline: inlineLang,\n provider: this.providerLang,\n active: activeLang,\n });\n\n return Array.isArray(this.providerScope)\n ? forkJoin(\n this.providerScope.map((providerScope) =>\n this.resolveScope(lang, providerScope)\n )\n )\n : this.resolveScope(lang, this.providerScope);\n }),\n listenOrNotOperator(listenToLangChange)\n )\n .subscribe(() => this.updateValue(key, params));\n\n return this.lastValue;\n }\n\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n // Caretaker note: it's important to clean up references to subscriptions since they save the `next`\n // callback within its `destination` property, preventing classes from being GC'd.\n this.subscription = null;\n }\n\n private updateValue(key: string, params?: HashMap | undefined) {\n const lang = this.langResolver.resolveLangBasedOnScope(this.path!);\n this.lastValue = this.service.translate(key, params, lang);\n this.cdr.markForCheck();\n }\n\n private resolveScope(\n lang: string,\n providerScope: TranslocoScope | null\n ): Observable<Translation | Translation[]> {\n const resolvedScope = this.scopeResolver.resolve({\n inline: undefined,\n provider: providerScope,\n });\n this.path = this.langResolver.resolveLangPath(lang, resolvedScope);\n const inlineLoader = resolveInlineLoader(providerScope, resolvedScope);\n\n return this.service._loadDependencies(this.path, inlineLoader);\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { TranslocoDirective } from './transloco.directive';\nimport { TranslocoPipe } from './transloco.pipe';\n\nconst decl = [TranslocoDirective, TranslocoPipe];\n\n@NgModule({\n imports: decl,\n exports: decl,\n})\nexport class TranslocoModule {}\n","import {\n EnvironmentProviders,\n makeEnvironmentProviders,\n Provider,\n Type,\n} from '@angular/core';\n\nimport { TRANSLOCO_LOADER, TranslocoLoader } from './transloco.loader';\nimport {\n PartialTranslocoConfig,\n TRANSLOCO_CONFIG,\n translocoConfig,\n} from './transloco.config';\nimport { TRANSLOCO_SCOPE } from './transloco-scope';\nimport { TranslocoScope } from './types';\nimport {\n DefaultTranspiler,\n TRANSLOCO_TRANSPILER,\n TranslocoTranspiler,\n} from './transloco.transpiler';\nimport {\n DefaultMissingHandler,\n TRANSLOCO_MISSING_HANDLER,\n TranslocoMissingHandler,\n} from './transloco-missing-handler';\nimport {\n DefaultInterceptor,\n TRANSLOCO_INTERCEPTOR,\n TranslocoInterceptor,\n} from './transloco.interceptor';\nimport {\n DefaultFallbackStrategy,\n TRANSLOCO_FALLBACK_STRATEGY,\n TranslocoFallbackStrategy,\n} from './transloco-fallback-strategy';\nimport { TRANSLOCO_LOADING_TEMPLATE } from './transloco-loading-template';\nimport { Content } from './template-handler';\nimport { TRANSLOCO_LANG } from './transloco-lang';\n\nexport interface TranslocoOptions {\n config: PartialTranslocoConfig;\n loader?: Type<TranslocoLoader>;\n}\n\nexport function provideTransloco(options: TranslocoOptions) {\n const providers: EnvironmentProviders[] = [\n provideTranslocoTranspiler(DefaultTranspiler),\n provideTranslocoMissingHandler(DefaultMissingHandler),\n provideTranslocoInterceptor(DefaultInterceptor),\n provideTranslocoFallbackStrategy(DefaultFallbackStrategy),\n ];\n\n if (options.config) {\n providers.push(provideTranslocoConfig(options.config));\n }\n\n if (options.loader) {\n providers.push(provideTranslocoLoader(options.loader));\n }\n\n return providers;\n}\n\nexport function provideTranslocoConfig(config: PartialTranslocoConfig) {\n return makeEnvironmentProviders([\n {\n provide: TRANSLOCO_CONFIG,\n useValue: translocoConfig(config),\n },\n ]);\n}\n\nexport function provideTranslocoLoader(loader: Type<TranslocoLoader>) {\n return makeEnvironmentProviders([\n { provide: TRANSLOCO_LOADER, useClass: loader },\n ]);\n}\n\nexport function provideTranslocoScope(...scopes: TranslocoScope[]) {\n return scopes.map((scope) => ({\n provide: TRANSLOCO_SCOPE,\n useValue: scope,\n multi: true,\n }));\n}\n\nexport function provideTranslocoLoadingTpl(content: Content) {\n return {\n provide: TRANSLOCO_LOADING_TEMPLATE,\n useValue: content,\n };\n}\n\nexport function provideTranslocoTranspiler(\n transpiler: Type<TranslocoTranspiler>\n) {\n return makeEnvironmentProviders([\n {\n provide: TRANSLOCO_TRANSPILER,\n useClass: transpiler,\n deps: [TRANSLOCO_CONFIG],\n },\n ]);\n}\n\nexport function provideTranslocoFallbackStrategy(\n strategy: Type<TranslocoFallbackStrategy>\n) {\n return makeEnvironmentProviders([\n {\n provide: TRANSLOCO_FALLBACK_STRATEGY,\n useClass: strategy,\n deps: [TRANSLOCO_CONFIG],\n },\n ]);\n}\n\nexport function provideTranslocoMissingHandler(\n handler: Type<TranslocoMissingHandler>\n) {\n return makeEnvironmentProviders([\n {\n provide: TRANSLOCO_MISSING_HANDLER,\n useClass: handler,\n },\n ]);\n}\n\nexport function provideTranslocoInterceptor(\n interceptor: Type<TranslocoInterceptor>\n) {\n return makeEnvironmentProviders([\n {\n provide: TRANSLOCO_INTERCEPTOR,\n useClass: interceptor,\n },\n ]);\n}\n\nexport function provideTranslocoLang(lang: string): Provider {\n return {\n provide: TRANSLOCO_LANG,\n useValue: lang,\n };\n}\n","import {\n APP_INITIALIZER,\n Inject,\n Injectable,\n InjectionToken,\n ModuleWithProviders,\n NgModule,\n} from '@angular/core';\nimport { Observable, of } from 'rxjs';\n\nimport { TranslocoLoader } from './transloco.loader';\nimport { HashMap, Translation } from './types';\nimport { TranslocoModule } from './transloco.module';\nimport { provideTransloco } from './transloco.providers';\nimport { TranslocoConfig } from './transloco.config';\nimport { TranslocoService } from './transloco.service';\n\nexport interface TranslocoTestingOptions {\n translocoConfig?: Partial<TranslocoConfig>;\n preloadLangs?: boolean;\n langs?: HashMap<Translation>;\n}\n\nconst TRANSLOCO_TEST_LANGS = new InjectionToken<HashMap<Translation>>(\n 'TRANSLOCO_TEST_LANGS - Available testing languages'\n);\nconst TRANSLOCO_TEST_OPTIONS = new InjectionToken<TranslocoTestingOptions>(\n 'TRANSLOCO_TEST_OPTIONS - Testing options'\n);\n\n@Injectable()\nexport class TestingLoader implements TranslocoLoader {\n constructor(\n @Inject(TRANSLOCO_TEST_LANGS) private langs: HashMap<Translation>\n ) {}\n\n getTranslation(lang: string): Observable<Translation> | Promise<Translation> {\n return of(this.langs[lang]);\n }\n}\n\nexport function initTranslocoService(\n service: TranslocoService,\n langs: HashMap<Translation> = {},\n options: TranslocoTestingOptions\n) {\n const preloadAllLangs = () =>\n options.preloadLangs\n ? Promise.all(\n Object.keys(langs).map((lang) => service.load(lang).toPromise())\n )\n : Promise.resolve();\n\n return preloadAllLangs;\n}\n\n@NgModule({\n exports: [TranslocoModule],\n})\nexport class TranslocoTestingModule {\n static forRoot(\n options: TranslocoTestingOptions\n ): ModuleWithProviders<TranslocoTestingModule> {\n return {\n ngModule: TranslocoTestingModule,\n providers: [\n provideTransloco({\n loader: TestingLoader,\n config: {\n prodMode: true,\n missingHandler: { logMissingKey: false },\n ...options.translocoConfig,\n },\n }),\n {\n provide: TRANSLOCO_TEST_LANGS,\n useValue: options.langs,\n },\n {\n provide: TRANSLOCO_TEST_OPTIONS,\n useValue: options,\n },\n {\n provide: APP_INITIALIZER,\n useFactory: initTranslocoService,\n deps: [\n TranslocoService,\n TRANSLOCO_TEST_LANGS,\n TRANSLOCO_TEST_OPTIONS,\n ],\n multi: true,\n },\n ],\n };\n }\n}\n","import { isBrowser } from './helpers';\n\n/**\n * Returns the language code name from the browser, e.g. \"en\"\n */\nexport function getBrowserLang(): string | undefined {\n let browserLang = getBrowserCultureLang();\n if (!browserLang || !isBrowser()) {\n return undefined;\n }\n\n if (browserLang.indexOf('-') !== -1) {\n browserLang = browserLang.split('-')[0];\n }\n\n if (browserLang.indexOf('_') !== -1) {\n browserLang = browserLang.split('_')[0];\n }\n\n return browserLang;\n}\n\n/**\n * Returns the culture language code name from the browser, e.g. \"en-US\"\n */\nexport function getBrowserCultureLang(): string {\n if (!isBrowser()) {\n return '';\n }\n\n const navigator = window.navigator;\n\n return navigator.languages?.[0] ?? navigator.language;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["_unflatten","_flatten","i1.TranslocoService"],"mappings":"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"}
package/lib/helpers.d.ts CHANGED
@@ -15,7 +15,6 @@ export declare function isNil(value: unknown): value is null | undefined;
15
15
  export declare function isDefined(value: unknown): boolean;
16
16
  export declare function toNumber(value: number | string): number | null;
17
17
  export declare function isScopeObject(item: any): item is ProviderScope;
18
- export declare function isScopeArray(item: any): item is ProviderScope[];
19
18
  export declare function hasInlineLoader(item: any): item is ProviderScope;
20
19
  export declare function unflatten(obj: Translation): Translation;
21
20
  export declare function flatten(obj: Translation): Translation;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jsverse/transloco",
3
- "version": "7.4.0",
3
+ "version": "7.4.1",
4
4
  "description": "The internationalization (i18n) library for Angular",
5
5
  "schematics": "./schematics/src/collection.json",
6
6
  "publishConfig": {