@dyanet/nestjs-config-aws 1.2.0-beta.1 → 1.2.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/README.md +5 -0
- package/dist/cjs/config-aws/src/config-manager.js +8 -8
- package/dist/cjs/config-aws/src/index.js +23 -23
- package/dist/cjs/config-aws/src/interfaces/config-manager.interface.js +1 -1
- package/dist/cjs/config-aws/src/loaders/env-file.loader.js +5 -5
- package/dist/cjs/config-aws/src/loaders/environment.loader.js +1 -1
- package/dist/cjs/config-aws/src/loaders/s3.loader.js +8 -8
- package/dist/cjs/config-aws/src/loaders/secrets-manager.loader.js +16 -9
- package/dist/cjs/config-aws/src/loaders/ssm-parameter-store.loader.js +6 -6
- package/dist/cjs/config-aws/src/utils/validation.util.js +6 -6
- package/dist/cjs/nestjs-config-aws/src/integration/services/async-config-helper.service.js +14 -6
- package/dist/cjs/nestjs-config-aws/src/integration/services/validation-integration.service.js +9 -6
- package/dist/esm/config-aws/src/config-manager.js +2 -2
- package/dist/esm/config-aws/src/index.js +10 -10
- package/dist/esm/config-aws/src/interfaces/config-manager.interface.js +1 -1
- package/dist/esm/config-aws/src/loaders/env-file.loader.js +3 -3
- package/dist/esm/config-aws/src/loaders/environment.loader.js +1 -1
- package/dist/esm/config-aws/src/loaders/s3.loader.js +3 -3
- package/dist/esm/config-aws/src/loaders/secrets-manager.loader.js +12 -5
- package/dist/esm/config-aws/src/loaders/ssm-parameter-store.loader.js +2 -2
- package/dist/esm/config-aws/src/utils/validation.util.js +2 -2
- package/dist/esm/nestjs-config-aws/src/integration/services/async-config-helper.service.js +14 -6
- package/dist/esm/nestjs-config-aws/src/integration/services/validation-integration.service.js +9 -6
- package/dist/esm/package.json +1 -0
- package/dist/types/config-aws/src/config-manager.d.ts +1 -1
- package/dist/types/config-aws/src/config-manager.d.ts.map +1 -1
- package/dist/types/config-aws/src/index.d.ts +16 -16
- package/dist/types/config-aws/src/index.d.ts.map +1 -1
- package/dist/types/config-aws/src/interfaces/config-manager.interface.d.ts +1 -1
- package/dist/types/config-aws/src/interfaces/config-manager.interface.d.ts.map +1 -1
- package/dist/types/config-aws/src/loaders/env-file.loader.d.ts +2 -2
- package/dist/types/config-aws/src/loaders/env-file.loader.d.ts.map +1 -1
- package/dist/types/config-aws/src/loaders/environment.loader.d.ts +2 -2
- package/dist/types/config-aws/src/loaders/environment.loader.d.ts.map +1 -1
- package/dist/types/config-aws/src/loaders/s3.loader.d.ts +2 -2
- package/dist/types/config-aws/src/loaders/s3.loader.d.ts.map +1 -1
- package/dist/types/config-aws/src/loaders/secrets-manager.loader.d.ts +3 -3
- package/dist/types/config-aws/src/loaders/secrets-manager.loader.d.ts.map +1 -1
- package/dist/types/config-aws/src/loaders/ssm-parameter-store.loader.d.ts +2 -2
- package/dist/types/config-aws/src/loaders/ssm-parameter-store.loader.d.ts.map +1 -1
- package/dist/types/config-aws/src/utils/validation.util.d.ts +1 -1
- package/dist/types/config-aws/src/utils/validation.util.d.ts.map +1 -1
- package/dist/types/nestjs-config-aws/src/integration/services/async-config-helper.service.d.ts.map +1 -1
- package/dist/types/nestjs-config-aws/src/integration/services/validation-integration.service.d.ts.map +1 -1
- package/package.json +5 -5
package/dist/esm/nestjs-config-aws/src/integration/services/validation-integration.service.js
CHANGED
|
@@ -20,7 +20,7 @@ export class JoiValidationProvider {
|
|
|
20
20
|
// Try to import Joi dynamically
|
|
21
21
|
this.joi = require('joi');
|
|
22
22
|
}
|
|
23
|
-
catch
|
|
23
|
+
catch {
|
|
24
24
|
// Joi is not available
|
|
25
25
|
this.joi = null;
|
|
26
26
|
}
|
|
@@ -33,9 +33,12 @@ export class JoiValidationProvider {
|
|
|
33
33
|
return { isValid: false, errors: ['Joi is not available'] };
|
|
34
34
|
}
|
|
35
35
|
try {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
// Use joi.attempt which throws on validation error, or fall back to schema.validate
|
|
37
|
+
if (this.joi.attempt) {
|
|
38
|
+
this.joi.attempt(config, schema);
|
|
39
|
+
return { isValid: true, errors: [] };
|
|
40
|
+
}
|
|
41
|
+
const { error } = schema.validate(config);
|
|
39
42
|
if (error) {
|
|
40
43
|
const errors = error.details?.map((detail) => detail.message) || [error.message];
|
|
41
44
|
return { isValid: false, errors };
|
|
@@ -61,7 +64,7 @@ export class ClassValidatorProvider {
|
|
|
61
64
|
this.classValidator = require('class-validator');
|
|
62
65
|
this.classTransformer = require('class-transformer');
|
|
63
66
|
}
|
|
64
|
-
catch
|
|
67
|
+
catch {
|
|
65
68
|
// class-validator is not available
|
|
66
69
|
this.classValidator = null;
|
|
67
70
|
this.classTransformer = null;
|
|
@@ -583,4 +586,4 @@ ValidationIntegrationService = ValidationIntegrationService_1 = __decorate([
|
|
|
583
586
|
__metadata("design:paramtypes", [])
|
|
584
587
|
], ValidationIntegrationService);
|
|
585
588
|
export { ValidationIntegrationService };
|
|
586
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1pbnRlZ3JhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2ludGVncmF0aW9uL3NlcnZpY2VzL3ZhbGlkYXRpb24taW50ZWdyYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQWFwRDs7R0FFRztBQUNILE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNMLEdBQUcsQ0FBTTtJQUVqQjtRQUNFLElBQUksQ0FBQztZQUNILGdDQUFnQztZQUNoQyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLHVCQUF1QjtZQUN2QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBVyxFQUFFLE1BQVc7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNkLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQztRQUM5RCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ2pCLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFMUIsSUFB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QUMvRSxDQUFDO0NBQ0YsQ0FBQTtBQTVpQlksNEJBQTRCO0lBRHhDLFVBQVUsRUFBRTs7R0FDQSw0QkFBNEIsQ0E0aUJ4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIExvZ2dlciB9IGZyb20gJ0BuZXN0anMvY29tbW9uJztcclxuaW1wb3J0IHsgQ29uZmlnRmFjdG9yeSB9IGZyb20gJ0BuZXN0anMvY29uZmlnJztcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvblNvdXJjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY29uZmlndXJhdGlvbi1zb3VyY2UuaW50ZXJmYWNlJztcclxuXHJcbi8qKlxyXG4gKiBJbnRlcmZhY2UgZm9yIHZhbGlkYXRpb24gc2NoZW1hIHByb3ZpZGVycy5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvblNjaGVtYVByb3ZpZGVyIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdmFsaWRhdGUoY29uZmlnOiBhbnksIHNjaGVtYTogYW55KTogeyBpc1ZhbGlkOiBib29sZWFuOyBlcnJvcnM6IHN0cmluZ1tdIH07XHJcbiAgaXNBdmFpbGFibGUoKTogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEpvaSB2YWxpZGF0aW9uIHNjaGVtYSBwcm92aWRlci5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBKb2lWYWxpZGF0aW9uUHJvdmlkZXIgaW1wbGVtZW50cyBWYWxpZGF0aW9uU2NoZW1hUHJvdmlkZXIge1xyXG4gIG5hbWUgPSAnam9pJztcclxuICBwcml2YXRlIGpvaTogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIFRyeSB0byBpbXBvcnQgSm9pIGR5bmFtaWNhbGx5XHJcbiAgICAgIHRoaXMuam9pID0gcmVxdWlyZSgnam9pJyk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAvLyBKb2kgaXMgbm90IGF2YWlsYWJsZVxyXG4gICAgICB0aGlzLmpvaSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0F2YWlsYWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmpvaSAhPT0gbnVsbDtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlKGNvbmZpZzogYW55LCBzY2hlbWE6IGFueSk6IHsgaXNWYWxpZDogYm9vbGVhbjsgZXJyb3JzOiBzdHJpbmdbXSB9IHtcclxuICAgIGlmICghdGhpcy5qb2kpIHtcclxuICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yczogWydKb2kgaXMgbm90IGF2YWlsYWJsZSddIH07XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgeyBlcnJvciB9ID0gdGhpcy5qb2kuYXR0ZW1wdCA/IFxyXG4gICAgICAgIHsgZXJyb3I6IG51bGwgfSA6XHJcbiAgICAgICAgc2NoZW1hLnZhbGlkYXRlKGNvbmZpZyk7XHJcblxyXG4gICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBjb25zdCBlcnJvcnMgPSBlcnJvci5kZXRhaWxzPy5tYXAoKGRldGFpbDogYW55KSA9PiBkZXRhaWwubWVzc2FnZSkgfHwgW2Vycm9yLm1lc3NhZ2VdO1xyXG4gICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvcnMgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgZXJyb3JzOiBbXSB9O1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc3QgdmFsaWRhdGlvbkVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xyXG4gICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3JzOiBbdmFsaWRhdGlvbkVycm9yLm1lc3NhZ2VdIH07XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQ2xhc3MtdmFsaWRhdG9yIHZhbGlkYXRpb24gc2NoZW1hIHByb3ZpZGVyLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIENsYXNzVmFsaWRhdG9yUHJvdmlkZXIgaW1wbGVtZW50cyBWYWxpZGF0aW9uU2NoZW1hUHJvdmlkZXIge1xyXG4gIG5hbWUgPSAnY2xhc3MtdmFsaWRhdG9yJztcclxuICBwcml2YXRlIGNsYXNzVmFsaWRhdG9yOiBhbnk7XHJcbiAgcHJpdmF0ZSBjbGFzc1RyYW5zZm9ybWVyOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gVHJ5IHRvIGltcG9ydCBjbGFzcy12YWxpZGF0b3IgYW5kIGNsYXNzLXRyYW5zZm9ybWVyIGR5bmFtaWNhbGx5XHJcbiAgICAgIHRoaXMuY2xhc3NWYWxpZGF0b3IgPSByZXF1aXJlKCdjbGFzcy12YWxpZGF0b3InKTtcclxuICAgICAgdGhpcy5jbGFzc1RyYW5zZm9ybWVyID0gcmVxdWlyZSgnY2xhc3MtdHJhbnNmb3JtZXInKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIC8vIGNsYXNzLXZhbGlkYXRvciBpcyBub3QgYXZhaWxhYmxlXHJcbiAgICAgIHRoaXMuY2xhc3NWYWxpZGF0b3IgPSBudWxsO1xyXG4gICAgICB0aGlzLmNsYXNzVHJhbnNmb3JtZXIgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNBdmFpbGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jbGFzc1ZhbGlkYXRvciAhPT0gbnVsbCAmJiB0aGlzLmNsYXNzVHJhbnNmb3JtZXIgIT09IG51bGw7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZShjb25maWc6IGFueSwgc2NoZW1hQ2xhc3M6IGFueSk6IHsgaXNWYWxpZDogYm9vbGVhbjsgZXJyb3JzOiBzdHJpbmdbXSB9IHtcclxuICAgIGlmICghdGhpcy5jbGFzc1ZhbGlkYXRvciB8fCAhdGhpcy5jbGFzc1RyYW5zZm9ybWVyKSB7XHJcbiAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvcnM6IFsnY2xhc3MtdmFsaWRhdG9yIG9yIGNsYXNzLXRyYW5zZm9ybWVyIGlzIG5vdCBhdmFpbGFibGUnXSB9O1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIFRyYW5zZm9ybSBwbGFpbiBvYmplY3QgdG8gY2xhc3MgaW5zdGFuY2VcclxuICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNsYXNzVHJhbnNmb3JtZXIucGxhaW5Ub0NsYXNzKHNjaGVtYUNsYXNzLCBjb25maWcpO1xyXG4gICAgICBcclxuICAgICAgLy8gVmFsaWRhdGUgdGhlIGluc3RhbmNlXHJcbiAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuY2xhc3NWYWxpZGF0b3IudmFsaWRhdGVTeW5jKGluc3RhbmNlKTtcclxuICAgICAgXHJcbiAgICAgIGlmIChlcnJvcnMgJiYgZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2VzID0gZXJyb3JzLm1hcCgoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY29uc3RyYWludHMgPSBlcnJvci5jb25zdHJhaW50cyB8fCB7fTtcclxuICAgICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGNvbnN0cmFpbnRzKS5qb2luKCcsICcpO1xyXG4gICAgICAgIH0pLmZpbHRlcigobXNnOiBzdHJpbmcpID0+IG1zZy5sZW5ndGggPiAwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yczogZXJyb3JNZXNzYWdlcyB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBlcnJvcnM6IFtdIH07XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvcnM6IFt2YWxpZGF0aW9uRXJyb3IubWVzc2FnZV0gfTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbiBwcm92aWRlci5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21WYWxpZGF0aW9uUHJvdmlkZXIgaW1wbGVtZW50cyBWYWxpZGF0aW9uU2NoZW1hUHJvdmlkZXIge1xyXG4gIG5hbWUgPSAnY3VzdG9tJztcclxuXHJcbiAgaXNBdmFpbGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlKGNvbmZpZzogYW55LCB2YWxpZGF0aW9uRm46IChjb25maWc6IGFueSkgPT4gc3RyaW5nW10gfCB2b2lkKTogeyBpc1ZhbGlkOiBib29sZWFuOyBlcnJvcnM6IHN0cmluZ1tdIH0ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGlvbkZuKGNvbmZpZyk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpICYmIHJlc3VsdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yczogcmVzdWx0IH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yczogW10gfTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yczogW3ZhbGlkYXRpb25FcnJvci5tZXNzYWdlXSB9O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFNlcnZpY2UgZm9yIGludGVncmF0aW5nIEFXUy1zb3VyY2VkIGNvbmZpZ3VyYXRpb24gd2l0aCBAbmVzdGpzL2NvbmZpZyB2YWxpZGF0aW9uLlxyXG4gKiBTdXBwb3J0cyBKb2ksIGNsYXNzLXZhbGlkYXRvciwgYW5kIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy5cclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25JbnRlZ3JhdGlvblNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gbmV3IExvZ2dlcihWYWxpZGF0aW9uSW50ZWdyYXRpb25TZXJ2aWNlLm5hbWUpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgdmFsaWRhdGlvblByb3ZpZGVyczogTWFwPHN0cmluZywgVmFsaWRhdGlvblNjaGVtYVByb3ZpZGVyPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAvLyBSZWdpc3RlciBhdmFpbGFibGUgdmFsaWRhdGlvbiBwcm92aWRlcnNcclxuICAgIHRoaXMucmVnaXN0ZXJWYWxpZGF0aW9uUHJvdmlkZXJzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSB2YWxpZGF0ZWQgY29uZmlndXJhdGlvbiBmYWN0b3J5LlxyXG4gICAqIFRoaXMgZmFjdG9yeSB3aWxsIHZhbGlkYXRlIEFXUy1zb3VyY2VkIGNvbmZpZ3VyYXRpb24gYmVmb3JlIHJldHVybmluZyBpdC5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gbmFtZXNwYWNlIC0gT3B0aW9uYWwgbmFtZXNwYWNlIGZvciB0aGUgY29uZmlndXJhdGlvblxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIGRhdGEgdG8gdmFsaWRhdGVcclxuICAgKiBAcGFyYW0gdmFsaWRhdGlvblNjaGVtYSAtIFZhbGlkYXRpb24gc2NoZW1hIChKb2kgc2NoZW1hLCBjbGFzcy12YWxpZGF0b3IgY2xhc3MsIG9yIGN1c3RvbSBmdW5jdGlvbilcclxuICAgKiBAcGFyYW0gdmFsaWRhdGlvblR5cGUgLSBUeXBlIG9mIHZhbGlkYXRpb24gKCdqb2knLCAnY2xhc3MtdmFsaWRhdG9yJywgb3IgJ2N1c3RvbScpXHJcbiAgICogQHBhcmFtIHNvdXJjZXMgLSBDb25maWd1cmF0aW9uIHNvdXJjZXMgbWV0YWRhdGFcclxuICAgKiBAcmV0dXJucyBWYWxpZGF0ZWQgY29uZmlndXJhdGlvbiBmYWN0b3J5XHJcbiAgICovXHJcbiAgY3JlYXRlVmFsaWRhdGVkRmFjdG9yeShcclxuICAgIG5hbWVzcGFjZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxyXG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gICAgdmFsaWRhdGlvblNjaGVtYTogYW55LFxyXG4gICAgdmFsaWRhdGlvblR5cGU6ICdqb2knIHwgJ2NsYXNzLXZhbGlkYXRvcicgfCAnY3VzdG9tJyxcclxuICAgIHNvdXJjZXM/OiBDb25maWd1cmF0aW9uU291cmNlW11cclxuICApOiBDb25maWdGYWN0b3J5IHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDcmVhdGluZyB2YWxpZGF0ZWQgZmFjdG9yeSBmb3IgbmFtZXNwYWNlOiAke25hbWVzcGFjZSB8fCAnZGVmYXVsdCd9IHdpdGggJHt2YWxpZGF0aW9uVHlwZX0gdmFsaWRhdGlvbmApO1xyXG5cclxuICAgIGNvbnN0IGZhY3RvcnkgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBWYWxpZGF0ZWQgZmFjdG9yeSBjYWxsZWQgZm9yIG5hbWVzcGFjZTogJHtuYW1lc3BhY2UgfHwgJ2RlZmF1bHQnfWApO1xyXG5cclxuICAgICAgLy8gVmFsaWRhdGUgY29uZmlndXJhdGlvblxyXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdGhpcy52YWxpZGF0ZUNvbmZpZ3VyYXRpb24oY29uZmlnLCB2YWxpZGF0aW9uU2NoZW1hLCB2YWxpZGF0aW9uVHlwZSwgc291cmNlcyk7XHJcblxyXG4gICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQuaXNWYWxpZCkge1xyXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gZmFpbGVkIGZvciAke25hbWVzcGFjZSB8fCAnZGVmYXVsdCd9OiAke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3JzLmpvaW4oJywgJyl9YDtcclxuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIENyZWF0ZSBkZXRhaWxlZCBlcnJvciB3aXRoIHNvdXJjZSBpbmZvcm1hdGlvblxyXG4gICAgICAgIGNvbnN0IGRldGFpbGVkRXJyb3IgPSB0aGlzLmNyZWF0ZVZhbGlkYXRpb25FcnJvcihcclxuICAgICAgICAgIG5hbWVzcGFjZSB8fCAnZGVmYXVsdCcsXHJcbiAgICAgICAgICB2YWxpZGF0aW9uUmVzdWx0LmVycm9ycyxcclxuICAgICAgICAgIHNvdXJjZXNcclxuICAgICAgICApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRocm93IGRldGFpbGVkRXJyb3I7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gcGFzc2VkIGZvciBuYW1lc3BhY2U6ICR7bmFtZXNwYWNlIHx8ICdkZWZhdWx0J31gKTtcclxuICAgICAgcmV0dXJuIGNvbmZpZztcclxuICAgIH07XHJcblxyXG4gICAgLy8gQWRkIHZhbGlkYXRpb24gbWV0YWRhdGFcclxuICAgIChmYWN0b3J5IGFzIGFueSkuX19pc1ZhbGlkYXRlZEZhY3RvcnkgPSB0cnVlO1xyXG4gICAgKGZhY3RvcnkgYXMgYW55KS5fX3ZhbGlkYXRpb25UeXBlID0gdmFsaWRhdGlvblR5cGU7XHJcbiAgICAoZmFjdG9yeSBhcyBhbnkpLl9fbmFtZXNwYWNlID0gbmFtZXNwYWNlO1xyXG4gICAgKGZhY3RvcnkgYXMgYW55KS5fX3NvdXJjZXMgPSBzb3VyY2VzPy5tYXAocyA9PiBzLm5hbWUpIHx8IFtdO1xyXG5cclxuICAgIHJldHVybiBmYWN0b3J5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGUgY29uZmlndXJhdGlvbiB1c2luZyB0aGUgc3BlY2lmaWVkIHZhbGlkYXRpb24gdHlwZSBhbmQgc2NoZW1hLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIHRvIHZhbGlkYXRlXHJcbiAgICogQHBhcmFtIHNjaGVtYSAtIFZhbGlkYXRpb24gc2NoZW1hXHJcbiAgICogQHBhcmFtIHZhbGlkYXRpb25UeXBlIC0gVHlwZSBvZiB2YWxpZGF0aW9uXHJcbiAgICogQHBhcmFtIHNvdXJjZXMgLSBDb25maWd1cmF0aW9uIHNvdXJjZXMgZm9yIGVycm9yIHJlcG9ydGluZ1xyXG4gICAqIEByZXR1cm5zIFZhbGlkYXRpb24gcmVzdWx0XHJcbiAgICovXHJcbiAgdmFsaWRhdGVDb25maWd1cmF0aW9uKFxyXG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gICAgc2NoZW1hOiBhbnksXHJcbiAgICB2YWxpZGF0aW9uVHlwZTogJ2pvaScgfCAnY2xhc3MtdmFsaWRhdG9yJyB8ICdjdXN0b20nLFxyXG4gICAgc291cmNlcz86IENvbmZpZ3VyYXRpb25Tb3VyY2VbXVxyXG4gICk6IHsgaXNWYWxpZDogYm9vbGVhbjsgZXJyb3JzOiBzdHJpbmdbXTsgd2FybmluZ3M6IHN0cmluZ1tdIH0ge1xyXG4gICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLnZhbGlkYXRpb25Qcm92aWRlcnMuZ2V0KHZhbGlkYXRpb25UeXBlKTtcclxuICAgIFxyXG4gICAgaWYgKCFwcm92aWRlcikge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgIGVycm9yczogW2BWYWxpZGF0aW9uIHByb3ZpZGVyICcke3ZhbGlkYXRpb25UeXBlfScgaXMgbm90IGF2YWlsYWJsZWBdLFxyXG4gICAgICAgIHdhcm5pbmdzOiBbXVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcHJvdmlkZXIuaXNBdmFpbGFibGUoKSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgIGVycm9yczogW2BWYWxpZGF0aW9uIHByb3ZpZGVyICcke3ZhbGlkYXRpb25UeXBlfScgaXMgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWRgXSxcclxuICAgICAgICB3YXJuaW5nczogW11cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBwcm92aWRlci52YWxpZGF0ZShjb25maWcsIHNjaGVtYSk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBBZGQgc291cmNlIGluZm9ybWF0aW9uIHRvIGVycm9yc1xyXG4gICAgICBjb25zdCBlbmhhbmNlZEVycm9ycyA9IHJlc3VsdC5lcnJvcnMubWFwKGVycm9yID0+IFxyXG4gICAgICAgIHRoaXMuZW5oYW5jZUVycm9yV2l0aFNvdXJjZUluZm8oZXJyb3IsIHNvdXJjZXMpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzVmFsaWQ6IHJlc3VsdC5pc1ZhbGlkLFxyXG4gICAgICAgIGVycm9yczogZW5oYW5jZWRFcnJvcnMsXHJcbiAgICAgICAgd2FybmluZ3M6IFtdXHJcbiAgICAgIH07XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXHJcbiAgICAgICAgZXJyb3JzOiBbdmFsaWRhdGlvbkVycm9yLm1lc3NhZ2VdLFxyXG4gICAgICAgIHdhcm5pbmdzOiBbXVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgZmFjdG9yeSB0aGF0IHZhbGlkYXRlcyBjb25maWd1cmF0aW9uIGFuZCBwcm92aWRlcyBmYWxsYmFjayB2YWx1ZXMuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIG5hbWVzcGFjZSAtIE9wdGlvbmFsIG5hbWVzcGFjZVxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIGRhdGFcclxuICAgKiBAcGFyYW0gdmFsaWRhdGlvblNjaGVtYSAtIFZhbGlkYXRpb24gc2NoZW1hXHJcbiAgICogQHBhcmFtIHZhbGlkYXRpb25UeXBlIC0gVHlwZSBvZiB2YWxpZGF0aW9uXHJcbiAgICogQHBhcmFtIGZhbGxiYWNrQ29uZmlnIC0gRmFsbGJhY2sgY29uZmlndXJhdGlvbiB0byB1c2UgaWYgdmFsaWRhdGlvbiBmYWlsc1xyXG4gICAqIEBwYXJhbSBzb3VyY2VzIC0gQ29uZmlndXJhdGlvbiBzb3VyY2VzXHJcbiAgICogQHJldHVybnMgRmFjdG9yeSB3aXRoIHZhbGlkYXRpb24gYW5kIGZhbGxiYWNrXHJcbiAgICovXHJcbiAgY3JlYXRlVmFsaWRhdGVkRmFjdG9yeVdpdGhGYWxsYmFjayhcclxuICAgIG5hbWVzcGFjZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxyXG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gICAgdmFsaWRhdGlvblNjaGVtYTogYW55LFxyXG4gICAgdmFsaWRhdGlvblR5cGU6ICdqb2knIHwgJ2NsYXNzLXZhbGlkYXRvcicgfCAnY3VzdG9tJyxcclxuICAgIGZhbGxiYWNrQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gICAgc291cmNlcz86IENvbmZpZ3VyYXRpb25Tb3VyY2VbXVxyXG4gICk6IENvbmZpZ0ZhY3Rvcnkge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYENyZWF0aW5nIHZhbGlkYXRlZCBmYWN0b3J5IHdpdGggZmFsbGJhY2sgZm9yIG5hbWVzcGFjZTogJHtuYW1lc3BhY2UgfHwgJ2RlZmF1bHQnfWApO1xyXG5cclxuICAgIGNvbnN0IGZhY3RvcnkgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBWYWxpZGF0ZWQgZmFjdG9yeSB3aXRoIGZhbGxiYWNrIGNhbGxlZCBmb3IgbmFtZXNwYWNlOiAke25hbWVzcGFjZSB8fCAnZGVmYXVsdCd9YCk7XHJcblxyXG4gICAgICAvLyBWYWxpZGF0ZSBjb25maWd1cmF0aW9uXHJcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSB0aGlzLnZhbGlkYXRlQ29uZmlndXJhdGlvbihjb25maWcsIHZhbGlkYXRpb25TY2hlbWEsIHZhbGlkYXRpb25UeXBlLCBzb3VyY2VzKTtcclxuXHJcbiAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdC5pc1ZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihgQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgJHtuYW1lc3BhY2UgfHwgJ2RlZmF1bHQnfSwgdXNpbmcgZmFsbGJhY2s6ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvcnMuam9pbignLCAnKX1gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBWYWxpZGF0ZSBmYWxsYmFjayBjb25maWd1cmF0aW9uXHJcbiAgICAgICAgY29uc3QgZmFsbGJhY2tWYWxpZGF0aW9uID0gdGhpcy52YWxpZGF0ZUNvbmZpZ3VyYXRpb24oZmFsbGJhY2tDb25maWcsIHZhbGlkYXRpb25TY2hlbWEsIHZhbGlkYXRpb25UeXBlKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZmFsbGJhY2tWYWxpZGF0aW9uLmlzVmFsaWQpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxsYmFja0NvbmZpZztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gQm90aCBwcmltYXJ5IGFuZCBmYWxsYmFjayBmYWlsZWRcclxuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBCb3RoIHByaW1hcnkgYW5kIGZhbGxiYWNrIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsZWQgZm9yICR7bmFtZXNwYWNlIHx8ICdkZWZhdWx0J31gO1xyXG4gICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgY29uc3QgZGV0YWlsZWRFcnJvciA9IHRoaXMuY3JlYXRlVmFsaWRhdGlvbkVycm9yKFxyXG4gICAgICAgICAgICBuYW1lc3BhY2UgfHwgJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICBbLi4udmFsaWRhdGlvblJlc3VsdC5lcnJvcnMsIC4uLmZhbGxiYWNrVmFsaWRhdGlvbi5lcnJvcnNdLFxyXG4gICAgICAgICAgICBzb3VyY2VzXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICB0aHJvdyBkZXRhaWxlZEVycm9yO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBwYXNzZWQgZm9yIG5hbWVzcGFjZTogJHtuYW1lc3BhY2UgfHwgJ2RlZmF1bHQnfWApO1xyXG4gICAgICByZXR1cm4gY29uZmlnO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBBZGQgbWV0YWRhdGFcclxuICAgIChmYWN0b3J5IGFzIGFueSkuX19pc1ZhbGlkYXRlZEZhY3RvcnkgPSB0cnVlO1xyXG4gICAgKGZhY3RvcnkgYXMgYW55KS5fX2hhc0ZhbGxiYWNrID0gdHJ1ZTtcclxuICAgIChmYWN0b3J5IGFzIGFueSkuX192YWxpZGF0aW9uVHlwZSA9IHZhbGlkYXRpb25UeXBlO1xyXG4gICAgKGZhY3RvcnkgYXMgYW55KS5fX25hbWVzcGFjZSA9IG5hbWVzcGFjZTtcclxuICAgIChmYWN0b3J5IGFzIGFueSkuX19zb3VyY2VzID0gc291cmNlcz8ubWFwKHMgPT4gcy5uYW1lKSB8fCBbXTtcclxuXHJcbiAgICByZXR1cm4gZmFjdG9yeTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlIG11bHRpcGxlIG5hbWVzcGFjZSBjb25maWd1cmF0aW9ucy5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gbmFtZXNwYWNlZENvbmZpZyAtIENvbmZpZ3VyYXRpb24gb3JnYW5pemVkIGJ5IG5hbWVzcGFjZVxyXG4gICAqIEBwYXJhbSB2YWxpZGF0aW9uU2NoZW1hcyAtIFZhbGlkYXRpb24gc2NoZW1hcyBmb3IgZWFjaCBuYW1lc3BhY2VcclxuICAgKiBAcGFyYW0gdmFsaWRhdGlvblR5cGUgLSBUeXBlIG9mIHZhbGlkYXRpb25cclxuICAgKiBAcGFyYW0gc291cmNlcyAtIENvbmZpZ3VyYXRpb24gc291cmNlc1xyXG4gICAqIEByZXR1cm5zIFZhbGlkYXRpb24gcmVzdWx0cyBmb3IgZWFjaCBuYW1lc3BhY2VcclxuICAgKi9cclxuICB2YWxpZGF0ZU5hbWVzcGFjZWRDb25maWd1cmF0aW9uKFxyXG4gICAgbmFtZXNwYWNlZENvbmZpZzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgYW55Pj4sXHJcbiAgICB2YWxpZGF0aW9uU2NoZW1hczogUmVjb3JkPHN0cmluZywgYW55PixcclxuICAgIHZhbGlkYXRpb25UeXBlOiAnam9pJyB8ICdjbGFzcy12YWxpZGF0b3InIHwgJ2N1c3RvbScsXHJcbiAgICBzb3VyY2VzPzogQ29uZmlndXJhdGlvblNvdXJjZVtdXHJcbiAgKTogUmVjb3JkPHN0cmluZywgeyBpc1ZhbGlkOiBib29sZWFuOyBlcnJvcnM6IHN0cmluZ1tdOyB3YXJuaW5nczogc3RyaW5nW10gfT4ge1xyXG4gICAgY29uc3QgcmVzdWx0czogUmVjb3JkPHN0cmluZywgeyBpc1ZhbGlkOiBib29sZWFuOyBlcnJvcnM6IHN0cmluZ1tdOyB3YXJuaW5nczogc3RyaW5nW10gfT4gPSB7fTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IFtuYW1lc3BhY2UsIGNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMobmFtZXNwYWNlZENvbmZpZykpIHtcclxuICAgICAgY29uc3Qgc2NoZW1hID0gdmFsaWRhdGlvblNjaGVtYXNbbmFtZXNwYWNlXTtcclxuICAgICAgXHJcbiAgICAgIGlmIChzY2hlbWEpIHtcclxuICAgICAgICByZXN1bHRzW25hbWVzcGFjZV0gPSB0aGlzLnZhbGlkYXRlQ29uZmlndXJhdGlvbihjb25maWcsIHNjaGVtYSwgdmFsaWRhdGlvblR5cGUsIHNvdXJjZXMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdHNbbmFtZXNwYWNlXSA9IHtcclxuICAgICAgICAgIGlzVmFsaWQ6IHRydWUsXHJcbiAgICAgICAgICBlcnJvcnM6IFtdLFxyXG4gICAgICAgICAgd2FybmluZ3M6IFtgTm8gdmFsaWRhdGlvbiBzY2hlbWEgcHJvdmlkZWQgZm9yIG5hbWVzcGFjZTogJHtuYW1lc3BhY2V9YF1cclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayB3aGljaCB2YWxpZGF0aW9uIHByb3ZpZGVycyBhcmUgYXZhaWxhYmxlLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIE9iamVjdCBpbmRpY2F0aW5nIGF2YWlsYWJpbGl0eSBvZiBlYWNoIHByb3ZpZGVyXHJcbiAgICovXHJcbiAgZ2V0QXZhaWxhYmxlVmFsaWRhdGlvblByb3ZpZGVycygpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB7XHJcbiAgICBjb25zdCBhdmFpbGFiaWxpdHk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XHJcbiAgICBcclxuICAgIGZvciAoY29uc3QgW25hbWUsIHByb3ZpZGVyXSBvZiB0aGlzLnZhbGlkYXRpb25Qcm92aWRlcnMpIHtcclxuICAgICAgYXZhaWxhYmlsaXR5W25hbWVdID0gcHJvdmlkZXIuaXNBdmFpbGFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXZhaWxhYmlsaXR5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHZhbGlkYXRpb24gcmVjb21tZW5kYXRpb25zIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIHRvIGFuYWx5emVcclxuICAgKiBAcmV0dXJucyBWYWxpZGF0aW9uIHJlY29tbWVuZGF0aW9uc1xyXG4gICAqL1xyXG4gIGdldFZhbGlkYXRpb25SZWNvbW1lbmRhdGlvbnMoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KToge1xyXG4gICAgcmVjb21tZW5kZWRQcm92aWRlcjogc3RyaW5nO1xyXG4gICAgcmVhc29uczogc3RyaW5nW107XHJcbiAgICBleGFtcGxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxuICB9IHtcclxuICAgIGNvbnN0IGFuYWx5c2lzID0gdGhpcy5hbmFseXplQ29uZmlndXJhdGlvblN0cnVjdHVyZShjb25maWcpO1xyXG4gICAgXHJcbiAgICBsZXQgcmVjb21tZW5kZWRQcm92aWRlciA9ICdjdXN0b20nO1xyXG4gICAgY29uc3QgcmVhc29uczogc3RyaW5nW10gPSBbXTtcclxuICAgIGNvbnN0IGV4YW1wbGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcblxyXG4gICAgLy8gRGV0ZXJtaW5lIGJlc3QgdmFsaWRhdGlvbiBhcHByb2FjaFxyXG4gICAgaWYgKGFuYWx5c2lzLmhhc0NvbXBsZXhOZXN0aW5nIHx8IGFuYWx5c2lzLmhhc0FycmF5cykge1xyXG4gICAgICBpZiAodGhpcy52YWxpZGF0aW9uUHJvdmlkZXJzLmdldCgnam9pJyk/LmlzQXZhaWxhYmxlKCkpIHtcclxuICAgICAgICByZWNvbW1lbmRlZFByb3ZpZGVyID0gJ2pvaSc7XHJcbiAgICAgICAgcmVhc29ucy5wdXNoKCdDb21wbGV4IG5lc3RlZCBzdHJ1Y3R1cmUgZGV0ZWN0ZWQgLSBKb2kgcHJvdmlkZXMgZXhjZWxsZW50IG5lc3RlZCB2YWxpZGF0aW9uJyk7XHJcbiAgICAgICAgZXhhbXBsZXNbJ2pvaSddID0gdGhpcy5nZW5lcmF0ZUpvaUV4YW1wbGUoY29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChhbmFseXNpcy5oYXNUeXBlZFZhbHVlcyAmJiB0aGlzLnZhbGlkYXRpb25Qcm92aWRlcnMuZ2V0KCdjbGFzcy12YWxpZGF0b3InKT8uaXNBdmFpbGFibGUoKSkge1xyXG4gICAgICByZWNvbW1lbmRlZFByb3ZpZGVyID0gJ2NsYXNzLXZhbGlkYXRvcic7XHJcbiAgICAgIHJlYXNvbnMucHVzaCgnVHlwZWQgdmFsdWVzIGRldGVjdGVkIC0gY2xhc3MtdmFsaWRhdG9yIHByb3ZpZGVzIHN0cm9uZyB0eXBlIHNhZmV0eScpO1xyXG4gICAgICBleGFtcGxlc1snY2xhc3MtdmFsaWRhdG9yJ10gPSB0aGlzLmdlbmVyYXRlQ2xhc3NWYWxpZGF0b3JFeGFtcGxlKGNvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWx3YXlzIHByb3ZpZGUgY3VzdG9tIGV4YW1wbGVcclxuICAgIGV4YW1wbGVzWydjdXN0b20nXSA9IHRoaXMuZ2VuZXJhdGVDdXN0b21WYWxpZGF0aW9uRXhhbXBsZShjb25maWcpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlY29tbWVuZGVkUHJvdmlkZXIsXHJcbiAgICAgIHJlYXNvbnMsXHJcbiAgICAgIGV4YW1wbGVzXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVnaXN0ZXIgdmFsaWRhdGlvbiBwcm92aWRlcnMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWdpc3RlclZhbGlkYXRpb25Qcm92aWRlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25Qcm92aWRlcnMuc2V0KCdqb2knLCBuZXcgSm9pVmFsaWRhdGlvblByb3ZpZGVyKCkpO1xyXG4gICAgdGhpcy52YWxpZGF0aW9uUHJvdmlkZXJzLnNldCgnY2xhc3MtdmFsaWRhdG9yJywgbmV3IENsYXNzVmFsaWRhdG9yUHJvdmlkZXIoKSk7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25Qcm92aWRlcnMuc2V0KCdjdXN0b20nLCBuZXcgQ3VzdG9tVmFsaWRhdGlvblByb3ZpZGVyKCkpO1xyXG5cclxuICAgIC8vIExvZyBhdmFpbGFibGUgcHJvdmlkZXJzXHJcbiAgICBjb25zdCBhdmFpbGFibGUgPSBBcnJheS5mcm9tKHRoaXMudmFsaWRhdGlvblByb3ZpZGVycy5lbnRyaWVzKCkpXHJcbiAgICAgIC5maWx0ZXIoKFtfLCBwcm92aWRlcl0pID0+IHByb3ZpZGVyLmlzQXZhaWxhYmxlKCkpXHJcbiAgICAgIC5tYXAoKFtuYW1lXSkgPT4gbmFtZSk7XHJcblxyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYEF2YWlsYWJsZSB2YWxpZGF0aW9uIHByb3ZpZGVyczogJHthdmFpbGFibGUuam9pbignLCAnKX1gKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIGRldGFpbGVkIHZhbGlkYXRpb24gZXJyb3Igd2l0aCBzb3VyY2UgaW5mb3JtYXRpb24uXHJcbiAgICogXHJcbiAgICogQHBhcmFtIG5hbWVzcGFjZSAtIE5hbWVzcGFjZSB0aGF0IGZhaWxlZCB2YWxpZGF0aW9uXHJcbiAgICogQHBhcmFtIGVycm9ycyAtIFZhbGlkYXRpb24gZXJyb3JzXHJcbiAgICogQHBhcmFtIHNvdXJjZXMgLSBDb25maWd1cmF0aW9uIHNvdXJjZXNcclxuICAgKiBAcmV0dXJucyBEZXRhaWxlZCBlcnJvclxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlVmFsaWRhdGlvbkVycm9yKFxyXG4gICAgbmFtZXNwYWNlOiBzdHJpbmcsXHJcbiAgICBlcnJvcnM6IHN0cmluZ1tdLFxyXG4gICAgc291cmNlcz86IENvbmZpZ3VyYXRpb25Tb3VyY2VbXVxyXG4gICk6IEVycm9yIHtcclxuICAgIGxldCBtZXNzYWdlID0gYENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsZWQgZm9yIG5hbWVzcGFjZSAnJHtuYW1lc3BhY2V9JzpcXG5gO1xyXG4gICAgbWVzc2FnZSArPSBlcnJvcnMubWFwKGVycm9yID0+IGAgIC0gJHtlcnJvcn1gKS5qb2luKCdcXG4nKTtcclxuXHJcbiAgICBpZiAoc291cmNlcyAmJiBzb3VyY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgbWVzc2FnZSArPSAnXFxuXFxuQ29uZmlndXJhdGlvbiBzb3VyY2VzOlxcbic7XHJcbiAgICAgIG1lc3NhZ2UgKz0gc291cmNlcy5tYXAoc291cmNlID0+IFxyXG4gICAgICAgIGAgIC0gJHtzb3VyY2UubmFtZX0gKCR7c291cmNlLnR5cGV9KTogJHtPYmplY3Qua2V5cyhzb3VyY2UuZGF0YSkubGVuZ3RofSBrZXlzYFxyXG4gICAgICApLmpvaW4oJ1xcbicpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgZXJyb3IubmFtZSA9ICdDb25maWd1cmF0aW9uVmFsaWRhdGlvbkVycm9yJztcclxuICAgIChlcnJvciBhcyBhbnkpLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcclxuICAgIChlcnJvciBhcyBhbnkpLnZhbGlkYXRpb25FcnJvcnMgPSBlcnJvcnM7XHJcbiAgICAoZXJyb3IgYXMgYW55KS5zb3VyY2VzID0gc291cmNlcztcclxuXHJcbiAgICByZXR1cm4gZXJyb3I7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbmhhbmNlIGVycm9yIG1lc3NhZ2Ugd2l0aCBzb3VyY2UgaW5mb3JtYXRpb24uXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGVycm9yIC0gT3JpZ2luYWwgZXJyb3IgbWVzc2FnZVxyXG4gICAqIEBwYXJhbSBzb3VyY2VzIC0gQ29uZmlndXJhdGlvbiBzb3VyY2VzXHJcbiAgICogQHJldHVybnMgRW5oYW5jZWQgZXJyb3IgbWVzc2FnZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZW5oYW5jZUVycm9yV2l0aFNvdXJjZUluZm8oZXJyb3I6IHN0cmluZywgc291cmNlcz86IENvbmZpZ3VyYXRpb25Tb3VyY2VbXSk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXNvdXJjZXMgfHwgc291cmNlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIGVycm9yO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNvdXJjZU5hbWVzID0gc291cmNlcy5tYXAocyA9PiBzLm5hbWUpLmpvaW4oJywgJyk7XHJcbiAgICByZXR1cm4gYCR7ZXJyb3J9IChmcm9tIHNvdXJjZXM6ICR7c291cmNlTmFtZXN9KWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbmFseXplIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGZvciB2YWxpZGF0aW9uIHJlY29tbWVuZGF0aW9ucy5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiB0byBhbmFseXplXHJcbiAgICogQHJldHVybnMgU3RydWN0dXJlIGFuYWx5c2lzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhbmFseXplQ29uZmlndXJhdGlvblN0cnVjdHVyZShjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4pOiB7XHJcbiAgICBoYXNDb21wbGV4TmVzdGluZzogYm9vbGVhbjtcclxuICAgIGhhc0FycmF5czogYm9vbGVhbjtcclxuICAgIGhhc1R5cGVkVmFsdWVzOiBib29sZWFuO1xyXG4gICAgZGVwdGg6IG51bWJlcjtcclxuICB9IHtcclxuICAgIGxldCBoYXNDb21wbGV4TmVzdGluZyA9IGZhbHNlO1xyXG4gICAgbGV0IGhhc0FycmF5cyA9IGZhbHNlO1xyXG4gICAgbGV0IGhhc1R5cGVkVmFsdWVzID0gZmFsc2U7XHJcbiAgICBsZXQgbWF4RGVwdGggPSAwO1xyXG5cclxuICAgIGNvbnN0IGFuYWx5emUgPSAob2JqOiBhbnksIGRlcHRoOiBudW1iZXIgPSAwKTogdm9pZCA9PiB7XHJcbiAgICAgIG1heERlcHRoID0gTWF0aC5tYXgobWF4RGVwdGgsIGRlcHRoKTtcclxuXHJcbiAgICAgIGlmIChkZXB0aCA+IDIpIHtcclxuICAgICAgICBoYXNDb21wbGV4TmVzdGluZyA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgT2JqZWN0LnZhbHVlcyhvYmopKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICBoYXNBcnJheXMgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgYW5hbHl6ZSh2YWx1ZSwgZGVwdGggKyAxKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgIGhhc1R5cGVkVmFsdWVzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgYW5hbHl6ZShjb25maWcpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGhhc0NvbXBsZXhOZXN0aW5nLFxyXG4gICAgICBoYXNBcnJheXMsXHJcbiAgICAgIGhhc1R5cGVkVmFsdWVzLFxyXG4gICAgICBkZXB0aDogbWF4RGVwdGhcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZSBKb2kgdmFsaWRhdGlvbiBleGFtcGxlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIHRvIGdlbmVyYXRlIGV4YW1wbGUgZm9yXHJcbiAgICogQHJldHVybnMgSm9pIHZhbGlkYXRpb24gZXhhbXBsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2VuZXJhdGVKb2lFeGFtcGxlKGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55Pik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzY2hlbWEgPSB0aGlzLmdlbmVyYXRlSm9pU2NoZW1hRnJvbUNvbmZpZyhjb25maWcpO1xyXG4gICAgcmV0dXJuIGBjb25zdCBKb2kgPSByZXF1aXJlKCdqb2knKTtcclxuXHJcbmNvbnN0IHNjaGVtYSA9ICR7c2NoZW1hfTtcclxuXHJcbi8vIFVzYWdlIGluIGZhY3RvcnlcclxuY29uc3QgZmFjdG9yeSA9ICgpID0+IHtcclxuICBjb25zdCBjb25maWcgPSBsb2FkQXdzQ29uZmlnKCk7XHJcbiAgY29uc3QgeyBlcnJvciwgdmFsdWUgfSA9IHNjaGVtYS52YWxpZGF0ZShjb25maWcpO1xyXG4gIGlmIChlcnJvcikgdGhyb3cgZXJyb3I7XHJcbiAgcmV0dXJuIHZhbHVlO1xyXG59O2A7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZSBjbGFzcy12YWxpZGF0b3IgZXhhbXBsZS5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiB0byBnZW5lcmF0ZSBleGFtcGxlIGZvclxyXG4gICAqIEByZXR1cm5zIGNsYXNzLXZhbGlkYXRvciBleGFtcGxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNsYXNzVmFsaWRhdG9yRXhhbXBsZShjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY2xhc3NEZWZpbml0aW9uID0gdGhpcy5nZW5lcmF0ZUNsYXNzRnJvbUNvbmZpZyhjb25maWcpO1xyXG4gICAgcmV0dXJuIGBpbXBvcnQgeyBJc1N0cmluZywgSXNOdW1iZXIsIElzT3B0aW9uYWwsIHZhbGlkYXRlU3luYyB9IGZyb20gJ2NsYXNzLXZhbGlkYXRvcic7XHJcbmltcG9ydCB7IHBsYWluVG9DbGFzcyB9IGZyb20gJ2NsYXNzLXRyYW5zZm9ybWVyJztcclxuXHJcbiR7Y2xhc3NEZWZpbml0aW9ufVxyXG5cclxuLy8gVXNhZ2UgaW4gZmFjdG9yeVxyXG5jb25zdCBmYWN0b3J5ID0gKCkgPT4ge1xyXG4gIGNvbnN0IGNvbmZpZyA9IGxvYWRBd3NDb25maWcoKTtcclxuICBjb25zdCBpbnN0YW5jZSA9IHBsYWluVG9DbGFzcyhDb25maWdDbGFzcywgY29uZmlnKTtcclxuICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0ZVN5bmMoaW5zdGFuY2UpO1xyXG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkgdGhyb3cgbmV3IEVycm9yKCdWYWxpZGF0aW9uIGZhaWxlZCcpO1xyXG4gIHJldHVybiBjb25maWc7XHJcbn07YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIGN1c3RvbSB2YWxpZGF0aW9uIGV4YW1wbGUuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gdG8gZ2VuZXJhdGUgZXhhbXBsZSBmb3JcclxuICAgKiBAcmV0dXJucyBDdXN0b20gdmFsaWRhdGlvbiBleGFtcGxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUN1c3RvbVZhbGlkYXRpb25FeGFtcGxlKGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55Pik6IHN0cmluZyB7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9uQ2hlY2tzID0gdGhpcy5nZW5lcmF0ZVZhbGlkYXRpb25DaGVja3MoY29uZmlnKTtcclxuICAgIHJldHVybiBgY29uc3QgdmFsaWRhdGVDb25maWcgPSAoY29uZmlnKSA9PiB7XHJcbiAgY29uc3QgZXJyb3JzID0gW107XHJcbiAgXHJcbiR7dmFsaWRhdGlvbkNoZWNrc31cclxuICBcclxuICByZXR1cm4gZXJyb3JzO1xyXG59O1xyXG5cclxuLy8gVXNhZ2UgaW4gZmFjdG9yeVxyXG5jb25zdCBmYWN0b3J5ID0gKCkgPT4ge1xyXG4gIGNvbnN0IGNvbmZpZyA9IGxvYWRBd3NDb25maWcoKTtcclxuICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0ZUNvbmZpZyhjb25maWcpO1xyXG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkgdGhyb3cgbmV3IEVycm9yKFxcYFZhbGlkYXRpb24gZmFpbGVkOiBcXCR7ZXJyb3JzLmpvaW4oJywgJyl9XFxgKTtcclxuICByZXR1cm4gY29uZmlnO1xyXG59O2A7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZSBKb2kgc2NoZW1hIGZyb20gY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICogQHJldHVybnMgSm9pIHNjaGVtYSBzdHJpbmdcclxuICAgKi9cclxuICBwcml2YXRlIGdlbmVyYXRlSm9pU2NoZW1hRnJvbUNvbmZpZyhjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZ2VuZXJhdGVTY2hlbWEgPSAob2JqOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHJldHVybiAnSm9pLnN0cmluZygpJztcclxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdudW1iZXInKSByZXR1cm4gJ0pvaS5udW1iZXIoKSc7XHJcbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHJldHVybiAnSm9pLmJvb2xlYW4oKSc7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybiAnSm9pLmFycmF5KCknO1xyXG4gICAgICBcclxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3QuZW50cmllcyhvYmopXHJcbiAgICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAgICR7a2V5fTogJHtnZW5lcmF0ZVNjaGVtYSh2YWx1ZSl9YClcclxuICAgICAgICAgIC5qb2luKCcsXFxuJyk7XHJcbiAgICAgICAgcmV0dXJuIGBKb2kub2JqZWN0KHtcXG4ke3Byb3BlcnRpZXN9XFxufSlgO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICByZXR1cm4gJ0pvaS5hbnkoKSc7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBnZW5lcmF0ZVNjaGVtYShjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGUgY2xhc3MgZGVmaW5pdGlvbiBmcm9tIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIG9iamVjdFxyXG4gICAqIEByZXR1cm5zIENsYXNzIGRlZmluaXRpb24gc3RyaW5nXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNsYXNzRnJvbUNvbmZpZyhjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5lbnRyaWVzKGNvbmZpZylcclxuICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGVjb3JhdG9yID0gdGhpcy5nZXRDbGFzc1ZhbGlkYXRvckRlY29yYXRvcih2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIGAgICR7ZGVjb3JhdG9yfVxcbiAgJHtrZXl9OiAke3RoaXMuZ2V0VHlwZVNjcmlwdFR5cGUodmFsdWUpfTtgO1xyXG4gICAgICB9KVxyXG4gICAgICAuam9pbignXFxuXFxuJyk7XHJcblxyXG4gICAgcmV0dXJuIGBjbGFzcyBDb25maWdDbGFzcyB7XFxuJHtwcm9wZXJ0aWVzfVxcbn1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGUgdmFsaWRhdGlvbiBjaGVja3MgZm9yIGN1c3RvbSB2YWxpZGF0aW9uLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIG9iamVjdFxyXG4gICAqIEByZXR1cm5zIFZhbGlkYXRpb24gY2hlY2tzIHN0cmluZ1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2VuZXJhdGVWYWxpZGF0aW9uQ2hlY2tzKGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55Pik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoY29uZmlnKVxyXG4gICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICBjb25zdCBjaGVjayA9IHRoaXMuZ2V0VmFsaWRhdGlvbkNoZWNrKGtleSwgdmFsdWUpO1xyXG4gICAgICAgIHJldHVybiBgICAke2NoZWNrfWA7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5qb2luKCdcXG4nKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBjbGFzcy12YWxpZGF0b3IgZGVjb3JhdG9yIGZvciBhIHZhbHVlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGdldCBkZWNvcmF0b3IgZm9yXHJcbiAgICogQHJldHVybnMgRGVjb3JhdG9yIHN0cmluZ1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0Q2xhc3NWYWxpZGF0b3JEZWNvcmF0b3IodmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuICdASXNTdHJpbmcoKSc7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuICdASXNOdW1iZXIoKSc7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHJldHVybiAnQElzQm9vbGVhbigpJztcclxuICAgIHJldHVybiAnQElzT3B0aW9uYWwoKSc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgVHlwZVNjcmlwdCB0eXBlIGZvciBhIHZhbHVlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGdldCB0eXBlIGZvclxyXG4gICAqIEByZXR1cm5zIFR5cGVTY3JpcHQgdHlwZSBzdHJpbmdcclxuICAgKi9cclxuICBwcml2YXRlIGdldFR5cGVTY3JpcHRUeXBlKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiAnc3RyaW5nJztcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gJ251bWJlcic7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHJldHVybiAnYm9vbGVhbic7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiAnYW55W10nO1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHJldHVybiAnb2JqZWN0JztcclxuICAgIHJldHVybiAnYW55JztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB2YWxpZGF0aW9uIGNoZWNrIGZvciBjdXN0b20gdmFsaWRhdGlvbi5cclxuICAgKiBcclxuICAgKiBAcGFyYW0ga2V5IC0gQ29uZmlndXJhdGlvbiBrZXlcclxuICAgKiBAcGFyYW0gdmFsdWUgLSBDb25maWd1cmF0aW9uIHZhbHVlXHJcbiAgICogQHJldHVybnMgVmFsaWRhdGlvbiBjaGVjayBzdHJpbmdcclxuICAgKi9cclxuICBwcml2YXRlIGdldFZhbGlkYXRpb25DaGVjayhrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gYGlmICghY29uZmlnLiR7a2V5fSB8fCB0eXBlb2YgY29uZmlnLiR7a2V5fSAhPT0gJ3N0cmluZycpIGVycm9ycy5wdXNoKCcke2tleX0gbXVzdCBiZSBhIHN0cmluZycpO2A7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4gYGlmIChjb25maWcuJHtrZXl9ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGNvbmZpZy4ke2tleX0gIT09ICdudW1iZXInKSBlcnJvcnMucHVzaCgnJHtrZXl9IG11c3QgYmUgYSBudW1iZXInKTtgO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIHJldHVybiBgaWYgKGNvbmZpZy4ke2tleX0gPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgY29uZmlnLiR7a2V5fSAhPT0gJ2Jvb2xlYW4nKSBlcnJvcnMucHVzaCgnJHtrZXl9IG11c3QgYmUgYSBib29sZWFuJyk7YDtcclxuICAgIH1cclxuICAgIHJldHVybiBgaWYgKGNvbmZpZy4ke2tleX0gPT09IHVuZGVmaW5lZCkgZXJyb3JzLnB1c2goJyR7a2V5fSBpcyByZXF1aXJlZCcpO2A7XHJcbiAgfVxyXG59Il19
|
|
589
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1pbnRlZ3JhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2ludGVncmF0aW9uL3NlcnZpY2VzL3ZhbGlkYXRpb24taW50ZWdyYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQWFwRDs7R0FFRztBQUNILE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNMLEdBQUcsQ0FBTTtJQUVqQjtRQUNFLElBQUksQ0FBQztZQUNILGdDQUFnQztZQUNoQyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsdUJBQXVCO1lBQ3ZCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxNQUFXLEVBQUUsTUFBVztRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2QsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDO1FBQzlELENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxvRkFBb0Y7WUFDcEYsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ2pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxF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QW1DLEdBQUcsZ0NBQWdDLEdBQUcsdUJBQXVCLENBQUM7UUFDM0gsQ0FBQztRQUNELE9BQU8sY0FBYyxHQUFHLGdDQUFnQyxHQUFHLGlCQUFpQixDQUFDO0lBQy9FLENBQUM7Q0FDRixDQUFBO0FBNWlCWSw0QkFBNEI7SUFEeEMsVUFBVSxFQUFFOztHQUNBLDRCQUE0QixDQTRpQnhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTG9nZ2VyIH0gZnJvbSAnQG5lc3Rqcy9jb21tb24nO1xyXG5pbXBvcnQgeyBDb25maWdGYWN0b3J5IH0gZnJvbSAnQG5lc3Rqcy9jb25maWcnO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uU291cmNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jb25maWd1cmF0aW9uLXNvdXJjZS5pbnRlcmZhY2UnO1xyXG5cclxuLyoqXHJcbiAqIEludGVyZmFjZSBmb3IgdmFsaWRhdGlvbiBzY2hlbWEgcHJvdmlkZXJzLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uU2NoZW1hUHJvdmlkZXIge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB2YWxpZGF0ZShjb25maWc6IGFueSwgc2NoZW1hOiBhbnkpOiB7IGlzVmFsaWQ6IGJvb2xlYW47IGVycm9yczogc3RyaW5nW10gfTtcclxuICBpc0F2YWlsYWJsZSgpOiBib29sZWFuO1xyXG59XHJcblxyXG4vKipcclxuICogSm9pIHZhbGlkYXRpb24gc2NoZW1hIHByb3ZpZGVyLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEpvaVZhbGlkYXRpb25Qcm92aWRlciBpbXBsZW1lbnRzIFZhbGlkYXRpb25TY2hlbWFQcm92aWRlciB7XHJcbiAgbmFtZSA9ICdqb2knO1xyXG4gIHByaXZhdGUgam9pOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gVHJ5IHRvIGltcG9ydCBKb2kgZHluYW1pY2FsbHlcclxuICAgICAgdGhpcy5qb2kgPSByZXF1aXJlKCdqb2knKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAvLyBKb2kgaXMgbm90IGF2YWlsYWJsZVxyXG4gICAgICB0aGlzLmpvaSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0F2YWlsYWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmpvaSAhPT0gbnVsbDtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlKGNvbmZpZzogYW55LCBzY2hlbWE6IGFueSk6IHsgaXNWYWxpZDogYm9vbGVhbjsgZXJyb3JzOiBzdHJpbmdbXSB9IHtcclxuICAgIGlmICghdGhpcy5qb2kpIHtcclxuICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yczogWydKb2kgaXMgbm90IGF2YWlsYWJsZSddIH07XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gVXNlIGpvaS5hdHRlbXB0IHdoaWNoIHRocm93cyBvbiB2YWxpZGF0aW9uIGVycm9yLCBvciBmYWxsIGJhY2sgdG8gc2NoZW1hLnZhbGlkYXRlXHJcbiAgICAgIGlmICh0aGlzLmpvaS5hdHRlbXB0KSB7XHJcbiAgICAgICAgdGhpcy5qb2kuYXR0ZW1wdChjb25maWcsIHNjaGVtYSk7XHJcbiAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgZXJyb3JzOiBbXSB9O1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCB7IGVycm9yIH0gPSBzY2hlbWEudmFsaWRhdGUoY29uZmlnKTtcclxuICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3JzID0gZXJyb3IuZGV0YWlscz8ubWFwKChkZXRhaWw6IGFueSkgPT4gZGV0YWlsLm1lc3NhZ2UpIHx8IFtlcnJvci5tZXNzYWdlXTtcclxuICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3JzIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yczogW10gfTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yczogW3ZhbGlkYXRpb25FcnJvci5tZXNzYWdlXSB9O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENsYXNzLXZhbGlkYXRvciB2YWxpZGF0aW9uIHNjaGVtYSBwcm92aWRlci5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBDbGFzc1ZhbGlkYXRvclByb3ZpZGVyIGltcGxlbWVudHMgVmFsaWRhdGlvblNjaGVtYVByb3ZpZGVyIHtcclxuICBuYW1lID0gJ2NsYXNzLXZhbGlkYXRvcic7XHJcbiAgcHJpdmF0ZSBjbGFzc1ZhbGlkYXRvcjogYW55O1xyXG4gIHByaXZhdGUgY2xhc3NUcmFuc2Zvcm1lcjogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIFRyeSB0byBpbXBvcnQgY2xhc3MtdmFsaWRhdG9yIGFuZCBjbGFzcy10cmFuc2Zvcm1lciBkeW5hbWljYWxseVxyXG4gICAgICB0aGlzLmNsYXNzVmFsaWRhdG9yID0gcmVxdWlyZSgnY2xhc3MtdmFsaWRhdG9yJyk7XHJcbiAgICAgIHRoaXMuY2xhc3NUcmFuc2Zvcm1lciA9IHJlcXVpcmUoJ2NsYXNzLXRyYW5zZm9ybWVyJyk7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgLy8gY2xhc3MtdmFsaWRhdG9yIGlzIG5vdCBhdmFpbGFibGVcclxuICAgICAgdGhpcy5jbGFzc1ZhbGlkYXRvciA9IG51bGw7XHJcbiAgICAgIHRoaXMuY2xhc3NUcmFuc2Zvcm1lciA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0F2YWlsYWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNsYXNzVmFsaWRhdG9yICE9PSBudWxsICYmIHRoaXMuY2xhc3NUcmFuc2Zvcm1lciAhPT0gbnVsbDtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlKGNvbmZpZzogYW55LCBzY2hlbWFDbGFzczogYW55KTogeyBpc1ZhbGlkOiBib29sZWFuOyBlcnJvcnM6IHN0cmluZ1tdIH0ge1xyXG4gICAgaWYgKCF0aGlzLmNsYXNzVmFsaWRhdG9yIHx8ICF0aGlzLmNsYXNzVHJhbnNmb3JtZXIpIHtcclxuICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yczogWydjbGFzcy12YWxpZGF0b3Igb3IgY2xhc3MtdHJhbnNmb3JtZXIgaXMgbm90IGF2YWlsYWJsZSddIH07XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gVHJhbnNmb3JtIHBsYWluIG9iamVjdCB0byBjbGFzcyBpbnN0YW5jZVxyXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY2xhc3NUcmFuc2Zvcm1lci5wbGFpblRvQ2xhc3Moc2NoZW1hQ2xhc3MsIGNvbmZpZyk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBWYWxpZGF0ZSB0aGUgaW5zdGFuY2VcclxuICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5jbGFzc1ZhbGlkYXRvci52YWxpZGF0ZVN5bmMoaW5zdGFuY2UpO1xyXG4gICAgICBcclxuICAgICAgaWYgKGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZXMgPSBlcnJvcnMubWFwKChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IGVycm9yLmNvbnN0cmFpbnRzIHx8IHt9O1xyXG4gICAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoY29uc3RyYWludHMpLmpvaW4oJywgJyk7XHJcbiAgICAgICAgfSkuZmlsdGVyKChtc2c6IHN0cmluZykgPT4gbXNnLmxlbmd0aCA+IDApO1xyXG5cclxuICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3JzOiBlcnJvck1lc3NhZ2VzIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yczogW10gfTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yczogW3ZhbGlkYXRpb25FcnJvci5tZXNzYWdlXSB9O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9uIHByb3ZpZGVyLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEN1c3RvbVZhbGlkYXRpb25Qcm92aWRlciBpbXBsZW1lbnRzIFZhbGlkYXRpb25TY2hlbWFQcm92aWRlciB7XHJcbiAgbmFtZSA9ICdjdXN0b20nO1xyXG5cclxuICBpc0F2YWlsYWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGUoY29uZmlnOiBhbnksIHZhbGlkYXRpb25GbjogKGNvbmZpZzogYW55KSA9PiBzdHJpbmdbXSB8IHZvaWQpOiB7IGlzVmFsaWQ6IGJvb2xlYW47IGVycm9yczogc3RyaW5nW10gfSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0aW9uRm4oY29uZmlnKTtcclxuICAgICAgXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkgJiYgcmVzdWx0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3JzOiByZXN1bHQgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgZXJyb3JzOiBbXSB9O1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc3QgdmFsaWRhdGlvbkVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xyXG4gICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3JzOiBbdmFsaWRhdGlvbkVycm9yLm1lc3NhZ2VdIH07XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogU2VydmljZSBmb3IgaW50ZWdyYXRpbmcgQVdTLXNvdXJjZWQgY29uZmlndXJhdGlvbiB3aXRoIEBuZXN0anMvY29uZmlnIHZhbGlkYXRpb24uXHJcbiAqIFN1cHBvcnRzIEpvaSwgY2xhc3MtdmFsaWRhdG9yLCBhbmQgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkludGVncmF0aW9uU2VydmljZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBuZXcgTG9nZ2VyKFZhbGlkYXRpb25JbnRlZ3JhdGlvblNlcnZpY2UubmFtZSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB2YWxpZGF0aW9uUHJvdmlkZXJzOiBNYXA8c3RyaW5nLCBWYWxpZGF0aW9uU2NoZW1hUHJvdmlkZXI+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIC8vIFJlZ2lzdGVyIGF2YWlsYWJsZSB2YWxpZGF0aW9uIHByb3ZpZGVyc1xyXG4gICAgdGhpcy5yZWdpc3RlclZhbGlkYXRpb25Qcm92aWRlcnMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIHZhbGlkYXRlZCBjb25maWd1cmF0aW9uIGZhY3RvcnkuXHJcbiAgICogVGhpcyBmYWN0b3J5IHdpbGwgdmFsaWRhdGUgQVdTLXNvdXJjZWQgY29uZmlndXJhdGlvbiBiZWZvcmUgcmV0dXJuaW5nIGl0LlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBuYW1lc3BhY2UgLSBPcHRpb25hbCBuYW1lc3BhY2UgZm9yIHRoZSBjb25maWd1cmF0aW9uXHJcbiAgICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gZGF0YSB0byB2YWxpZGF0ZVxyXG4gICAqIEBwYXJhbSB2YWxpZGF0aW9uU2NoZW1hIC0gVmFsaWRhdGlvbiBzY2hlbWEgKEpvaSBzY2hlbWEsIGNsYXNzLXZhbGlkYXRvciBjbGFzcywgb3IgY3VzdG9tIGZ1bmN0aW9uKVxyXG4gICAqIEBwYXJhbSB2YWxpZGF0aW9uVHlwZSAtIFR5cGUgb2YgdmFsaWRhdGlvbiAoJ2pvaScsICdjbGFzcy12YWxpZGF0b3InLCBvciAnY3VzdG9tJylcclxuICAgKiBAcGFyYW0gc291cmNlcyAtIENvbmZpZ3VyYXRpb24gc291cmNlcyBtZXRhZGF0YVxyXG4gICAqIEByZXR1cm5zIFZhbGlkYXRlZCBjb25maWd1cmF0aW9uIGZhY3RvcnlcclxuICAgKi9cclxuICBjcmVhdGVWYWxpZGF0ZWRGYWN0b3J5KFxyXG4gICAgbmFtZXNwYWNlOiBzdHJpbmcgfCB1bmRlZmluZWQsXHJcbiAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXHJcbiAgICB2YWxpZGF0aW9uU2NoZW1hOiBhbnksXHJcbiAgICB2YWxpZGF0aW9uVHlwZTogJ2pvaScgfCAnY2xhc3MtdmFsaWRhdG9yJyB8ICdjdXN0b20nLFxyXG4gICAgc291cmNlcz86IENvbmZpZ3VyYXRpb25Tb3VyY2VbXVxyXG4gICk6IENvbmZpZ0ZhY3Rvcnkge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYENyZWF0aW5nIHZhbGlkYXRlZCBmYWN0b3J5IGZvciBuYW1lc3BhY2U6ICR7bmFtZXNwYWNlIHx8ICdkZWZhdWx0J30gd2l0aCAke3ZhbGlkYXRpb25UeXBlfSB2YWxpZGF0aW9uYCk7XHJcblxyXG4gICAgY29uc3QgZmFjdG9yeSA9ICgpID0+IHtcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFZhbGlkYXRlZCBmYWN0b3J5IGNhbGxlZCBmb3IgbmFtZXNwYWNlOiAke25hbWVzcGFjZSB8fCAnZGVmYXVsdCd9YCk7XHJcblxyXG4gICAgICAvLyBWYWxpZGF0ZSBjb25maWd1cmF0aW9uXHJcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSB0aGlzLnZhbGlkYXRlQ29uZmlndXJhdGlvbihjb25maWcsIHZhbGlkYXRpb25TY2hlbWEsIHZhbGlkYXRpb25UeXBlLCBzb3VyY2VzKTtcclxuXHJcbiAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdC5pc1ZhbGlkKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsZWQgZm9yICR7bmFtZXNwYWNlIHx8ICdkZWZhdWx0J306ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvcnMuam9pbignLCAnKX1gO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gQ3JlYXRlIGRldGFpbGVkIGVycm9yIHdpdGggc291cmNlIGluZm9ybWF0aW9uXHJcbiAgICAgICAgY29uc3QgZGV0YWlsZWRFcnJvciA9IHRoaXMuY3JlYXRlVmFsaWRhdGlvbkVycm9yKFxyXG4gICAgICAgICAgbmFtZXNwYWNlIHx8ICdkZWZhdWx0JyxcclxuICAgICAgICAgIHZhbGlkYXRpb25SZXN1bHQuZXJyb3JzLFxyXG4gICAgICAgICAgc291cmNlc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhyb3cgZGV0YWlsZWRFcnJvcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBwYXNzZWQgZm9yIG5hbWVzcGFjZTogJHtuYW1lc3BhY2UgfHwgJ2RlZmF1bHQnfWApO1xyXG4gICAgICByZXR1cm4gY29uZmlnO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBBZGQgdmFsaWRhdGlvbiBtZXRhZGF0YVxyXG4gICAgKGZhY3RvcnkgYXMgYW55KS5fX2lzVmFsaWRhdGVkRmFjdG9yeSA9IHRydWU7XHJcbiAgICAoZmFjdG9yeSBhcyBhbnkpLl9fdmFsaWRhdGlvblR5cGUgPSB2YWxpZGF0aW9uVHlwZTtcclxuICAgIChmYWN0b3J5IGFzIGFueSkuX19uYW1lc3BhY2UgPSBuYW1lc3BhY2U7XHJcbiAgICAoZmFjdG9yeSBhcyBhbnkpLl9fc291cmNlcyA9IHNvdXJjZXM/Lm1hcChzID0+IHMubmFtZSkgfHwgW107XHJcblxyXG4gICAgcmV0dXJuIGZhY3Rvcnk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZSBjb25maWd1cmF0aW9uIHVzaW5nIHRoZSBzcGVjaWZpZWQgdmFsaWRhdGlvbiB0eXBlIGFuZCBzY2hlbWEuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gdG8gdmFsaWRhdGVcclxuICAgKiBAcGFyYW0gc2NoZW1hIC0gVmFsaWRhdGlvbiBzY2hlbWFcclxuICAgKiBAcGFyYW0gdmFsaWRhdGlvblR5cGUgLSBUeXBlIG9mIHZhbGlkYXRpb25cclxuICAgKiBAcGFyYW0gc291cmNlcyAtIENvbmZpZ3VyYXRpb24gc291cmNlcyBmb3IgZXJyb3IgcmVwb3J0aW5nXHJcbiAgICogQHJldHVybnMgVmFsaWRhdGlvbiByZXN1bHRcclxuICAgKi9cclxuICB2YWxpZGF0ZUNvbmZpZ3VyYXRpb24oXHJcbiAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXHJcbiAgICBzY2hlbWE6IGFueSxcclxuICAgIHZhbGlkYXRpb25UeXBlOiAnam9pJyB8ICdjbGFzcy12YWxpZGF0b3InIHwgJ2N1c3RvbScsXHJcbiAgICBzb3VyY2VzPzogQ29uZmlndXJhdGlvblNvdXJjZVtdXHJcbiAgKTogeyBpc1ZhbGlkOiBib29sZWFuOyBlcnJvcnM6IHN0cmluZ1tdOyB3YXJuaW5nczogc3RyaW5nW10gfSB7XHJcbiAgICBjb25zdCBwcm92aWRlciA9IHRoaXMudmFsaWRhdGlvblByb3ZpZGVycy5nZXQodmFsaWRhdGlvblR5cGUpO1xyXG4gICAgXHJcbiAgICBpZiAoIXByb3ZpZGVyKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXHJcbiAgICAgICAgZXJyb3JzOiBbYFZhbGlkYXRpb24gcHJvdmlkZXIgJyR7dmFsaWRhdGlvblR5cGV9JyBpcyBub3QgYXZhaWxhYmxlYF0sXHJcbiAgICAgICAgd2FybmluZ3M6IFtdXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFwcm92aWRlci5pc0F2YWlsYWJsZSgpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXHJcbiAgICAgICAgZXJyb3JzOiBbYFZhbGlkYXRpb24gcHJvdmlkZXIgJyR7dmFsaWRhdGlvblR5cGV9JyBpcyBub3QgcHJvcGVybHkgY29uZmlndXJlZGBdLFxyXG4gICAgICAgIHdhcm5pbmdzOiBbXVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHByb3ZpZGVyLnZhbGlkYXRlKGNvbmZpZywgc2NoZW1hKTtcclxuICAgICAgXHJcbiAgICAgIC8vIEFkZCBzb3VyY2UgaW5mb3JtYXRpb24gdG8gZXJyb3JzXHJcbiAgICAgIGNvbnN0IGVuaGFuY2VkRXJyb3JzID0gcmVzdWx0LmVycm9ycy5tYXAoZXJyb3IgPT4gXHJcbiAgICAgICAgdGhpcy5lbmhhbmNlRXJyb3JXaXRoU291cmNlSW5mbyhlcnJvciwgc291cmNlcylcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNWYWxpZDogcmVzdWx0LmlzVmFsaWQsXHJcbiAgICAgICAgZXJyb3JzOiBlbmhhbmNlZEVycm9ycyxcclxuICAgICAgICB3YXJuaW5nczogW11cclxuICAgICAgfTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcclxuICAgICAgICBlcnJvcnM6IFt2YWxpZGF0aW9uRXJyb3IubWVzc2FnZV0sXHJcbiAgICAgICAgd2FybmluZ3M6IFtdXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBmYWN0b3J5IHRoYXQgdmFsaWRhdGVzIGNvbmZpZ3VyYXRpb24gYW5kIHByb3ZpZGVzIGZhbGxiYWNrIHZhbHVlcy5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gbmFtZXNwYWNlIC0gT3B0aW9uYWwgbmFtZXNwYWNlXHJcbiAgICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gZGF0YVxyXG4gICAqIEBwYXJhbSB2YWxpZGF0aW9uU2NoZW1hIC0gVmFsaWRhdGlvbiBzY2hlbWFcclxuICAgKiBAcGFyYW0gdmFsaWRhdGlvblR5cGUgLSBUeXBlIG9mIHZhbGlkYXRpb25cclxuICAgKiBAcGFyYW0gZmFsbGJhY2tDb25maWcgLSBGYWxsYmFjayBjb25maWd1cmF0aW9uIHRvIHVzZSBpZiB2YWxpZGF0aW9uIGZhaWxzXHJcbiAgICogQHBhcmFtIHNvdXJjZXMgLSBDb25maWd1cmF0aW9uIHNvdXJjZXNcclxuICAgKiBAcmV0dXJucyBGYWN0b3J5IHdpdGggdmFsaWRhdGlvbiBhbmQgZmFsbGJhY2tcclxuICAgKi9cclxuICBjcmVhdGVWYWxpZGF0ZWRGYWN0b3J5V2l0aEZhbGxiYWNrKFxyXG4gICAgbmFtZXNwYWNlOiBzdHJpbmcgfCB1bmRlZmluZWQsXHJcbiAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXHJcbiAgICB2YWxpZGF0aW9uU2NoZW1hOiBhbnksXHJcbiAgICB2YWxpZGF0aW9uVHlwZTogJ2pvaScgfCAnY2xhc3MtdmFsaWRhdG9yJyB8ICdjdXN0b20nLFxyXG4gICAgZmFsbGJhY2tDb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXHJcbiAgICBzb3VyY2VzPzogQ29uZmlndXJhdGlvblNvdXJjZVtdXHJcbiAgKTogQ29uZmlnRmFjdG9yeSB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgQ3JlYXRpbmcgdmFsaWRhdGVkIGZhY3Rvcnkgd2l0aCBmYWxsYmFjayBmb3IgbmFtZXNwYWNlOiAke25hbWVzcGFjZSB8fCAnZGVmYXVsdCd9YCk7XHJcblxyXG4gICAgY29uc3QgZmFjdG9yeSA9ICgpID0+IHtcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFZhbGlkYXRlZCBmYWN0b3J5IHdpdGggZmFsbGJhY2sgY2FsbGVkIGZvciBuYW1lc3BhY2U6ICR7bmFtZXNwYWNlIHx8ICdkZWZhdWx0J31gKTtcclxuXHJcbiAgICAgIC8vIFZhbGlkYXRlIGNvbmZpZ3VyYXRpb25cclxuICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHRoaXMudmFsaWRhdGVDb25maWd1cmF0aW9uKGNvbmZpZywgdmFsaWRhdGlvblNjaGVtYSwgdmFsaWRhdGlvblR5cGUsIHNvdXJjZXMpO1xyXG5cclxuICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LmlzVmFsaWQpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gZmFpbGVkIGZvciAke25hbWVzcGFjZSB8fCAnZGVmYXVsdCd9LCB1c2luZyBmYWxsYmFjazogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9ycy5qb2luKCcsICcpfWApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIFZhbGlkYXRlIGZhbGxiYWNrIGNvbmZpZ3VyYXRpb25cclxuICAgICAgICBjb25zdCBmYWxsYmFja1ZhbGlkYXRpb24gPSB0aGlzLnZhbGlkYXRlQ29uZmlndXJhdGlvbihmYWxsYmFja0NvbmZpZywgdmFsaWRhdGlvblNjaGVtYSwgdmFsaWRhdGlvblR5cGUpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChmYWxsYmFja1ZhbGlkYXRpb24uaXNWYWxpZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbGxiYWNrQ29uZmlnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBCb3RoIHByaW1hcnkgYW5kIGZhbGxiYWNrIGZhaWxlZFxyXG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYEJvdGggcHJpbWFyeSBhbmQgZmFsbGJhY2sgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgJHtuYW1lc3BhY2UgfHwgJ2RlZmF1bHQnfWA7XHJcbiAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBjb25zdCBkZXRhaWxlZEVycm9yID0gdGhpcy5jcmVhdGVWYWxpZGF0aW9uRXJyb3IoXHJcbiAgICAgICAgICAgIG5hbWVzcGFjZSB8fCAnZGVmYXVsdCcsXHJcbiAgICAgICAgICAgIFsuLi52YWxpZGF0aW9uUmVzdWx0LmVycm9ycywgLi4uZmFsbGJhY2tWYWxpZGF0aW9uLmVycm9yc10sXHJcbiAgICAgICAgICAgIHNvdXJjZXNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHRocm93IGRldGFpbGVkRXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIHBhc3NlZCBmb3IgbmFtZXNwYWNlOiAke25hbWVzcGFjZSB8fCAnZGVmYXVsdCd9YCk7XHJcbiAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEFkZCBtZXRhZGF0YVxyXG4gICAgKGZhY3RvcnkgYXMgYW55KS5fX2lzVmFsaWRhdGVkRmFjdG9yeSA9IHRydWU7XHJcbiAgICAoZmFjdG9yeSBhcyBhbnkpLl9faGFzRmFsbGJhY2sgPSB0cnVlO1xyXG4gICAgKGZhY3RvcnkgYXMgYW55KS5fX3ZhbGlkYXRpb25UeXBlID0gdmFsaWRhdGlvblR5cGU7XHJcbiAgICAoZmFjdG9yeSBhcyBhbnkpLl9fbmFtZXNwYWNlID0gbmFtZXNwYWNlO1xyXG4gICAgKGZhY3RvcnkgYXMgYW55KS5fX3NvdXJjZXMgPSBzb3VyY2VzPy5tYXAocyA9PiBzLm5hbWUpIHx8IFtdO1xyXG5cclxuICAgIHJldHVybiBmYWN0b3J5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGUgbXVsdGlwbGUgbmFtZXNwYWNlIGNvbmZpZ3VyYXRpb25zLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBuYW1lc3BhY2VkQ29uZmlnIC0gQ29uZmlndXJhdGlvbiBvcmdhbml6ZWQgYnkgbmFtZXNwYWNlXHJcbiAgICogQHBhcmFtIHZhbGlkYXRpb25TY2hlbWFzIC0gVmFsaWRhdGlvbiBzY2hlbWFzIGZvciBlYWNoIG5hbWVzcGFjZVxyXG4gICAqIEBwYXJhbSB2YWxpZGF0aW9uVHlwZSAtIFR5cGUgb2YgdmFsaWRhdGlvblxyXG4gICAqIEBwYXJhbSBzb3VyY2VzIC0gQ29uZmlndXJhdGlvbiBzb3VyY2VzXHJcbiAgICogQHJldHVybnMgVmFsaWRhdGlvbiByZXN1bHRzIGZvciBlYWNoIG5hbWVzcGFjZVxyXG4gICAqL1xyXG4gIHZhbGlkYXRlTmFtZXNwYWNlZENvbmZpZ3VyYXRpb24oXHJcbiAgICBuYW1lc3BhY2VkQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBhbnk+PixcclxuICAgIHZhbGlkYXRpb25TY2hlbWFzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gICAgdmFsaWRhdGlvblR5cGU6ICdqb2knIHwgJ2NsYXNzLXZhbGlkYXRvcicgfCAnY3VzdG9tJyxcclxuICAgIHNvdXJjZXM/OiBDb25maWd1cmF0aW9uU291cmNlW11cclxuICApOiBSZWNvcmQ8c3RyaW5nLCB7IGlzVmFsaWQ6IGJvb2xlYW47IGVycm9yczogc3RyaW5nW107IHdhcm5pbmdzOiBzdHJpbmdbXSB9PiB7XHJcbiAgICBjb25zdCByZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCB7IGlzVmFsaWQ6IGJvb2xlYW47IGVycm9yczogc3RyaW5nW107IHdhcm5pbmdzOiBzdHJpbmdbXSB9PiA9IHt9O1xyXG5cclxuICAgIGZvciAoY29uc3QgW25hbWVzcGFjZSwgY29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhuYW1lc3BhY2VkQ29uZmlnKSkge1xyXG4gICAgICBjb25zdCBzY2hlbWEgPSB2YWxpZGF0aW9uU2NoZW1hc1tuYW1lc3BhY2VdO1xyXG4gICAgICBcclxuICAgICAgaWYgKHNjaGVtYSkge1xyXG4gICAgICAgIHJlc3VsdHNbbmFtZXNwYWNlXSA9IHRoaXMudmFsaWRhdGVDb25maWd1cmF0aW9uKGNvbmZpZywgc2NoZW1hLCB2YWxpZGF0aW9uVHlwZSwgc291cmNlcyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzdWx0c1tuYW1lc3BhY2VdID0ge1xyXG4gICAgICAgICAgaXNWYWxpZDogdHJ1ZSxcclxuICAgICAgICAgIGVycm9yczogW10sXHJcbiAgICAgICAgICB3YXJuaW5nczogW2BObyB2YWxpZGF0aW9uIHNjaGVtYSBwcm92aWRlZCBmb3IgbmFtZXNwYWNlOiAke25hbWVzcGFjZX1gXVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIHdoaWNoIHZhbGlkYXRpb24gcHJvdmlkZXJzIGFyZSBhdmFpbGFibGUuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMgT2JqZWN0IGluZGljYXRpbmcgYXZhaWxhYmlsaXR5IG9mIGVhY2ggcHJvdmlkZXJcclxuICAgKi9cclxuICBnZXRBdmFpbGFibGVWYWxpZGF0aW9uUHJvdmlkZXJzKCk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IGF2YWlsYWJpbGl0eTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcclxuICAgIFxyXG4gICAgZm9yIChjb25zdCBbbmFtZSwgcHJvdmlkZXJdIG9mIHRoaXMudmFsaWRhdGlvblByb3ZpZGVycykge1xyXG4gICAgICBhdmFpbGFiaWxpdHlbbmFtZV0gPSBwcm92aWRlci5pc0F2YWlsYWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhdmFpbGFiaWxpdHk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdmFsaWRhdGlvbiByZWNvbW1lbmRhdGlvbnMgYmFzZWQgb24gY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gdG8gYW5hbHl6ZVxyXG4gICAqIEByZXR1cm5zIFZhbGlkYXRpb24gcmVjb21tZW5kYXRpb25zXHJcbiAgICovXHJcbiAgZ2V0VmFsaWRhdGlvblJlY29tbWVuZGF0aW9ucyhjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4pOiB7XHJcbiAgICByZWNvbW1lbmRlZFByb3ZpZGVyOiBzdHJpbmc7XHJcbiAgICByZWFzb25zOiBzdHJpbmdbXTtcclxuICAgIGV4YW1wbGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIH0ge1xyXG4gICAgY29uc3QgYW5hbHlzaXMgPSB0aGlzLmFuYWx5emVDb25maWd1cmF0aW9uU3RydWN0dXJlKGNvbmZpZyk7XHJcbiAgICBcclxuICAgIGxldCByZWNvbW1lbmRlZFByb3ZpZGVyID0gJ2N1c3RvbSc7XHJcbiAgICBjb25zdCByZWFzb25zOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgY29uc3QgZXhhbXBsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgYmVzdCB2YWxpZGF0aW9uIGFwcHJvYWNoXHJcbiAgICBpZiAoYW5hbHlzaXMuaGFzQ29tcGxleE5lc3RpbmcgfHwgYW5hbHlzaXMuaGFzQXJyYXlzKSB7XHJcbiAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25Qcm92aWRlcnMuZ2V0KCdqb2knKT8uaXNBdmFpbGFibGUoKSkge1xyXG4gICAgICAgIHJlY29tbWVuZGVkUHJvdmlkZXIgPSAnam9pJztcclxuICAgICAgICByZWFzb25zLnB1c2goJ0NvbXBsZXggbmVzdGVkIHN0cnVjdHVyZSBkZXRlY3RlZCAtIEpvaSBwcm92aWRlcyBleGNlbGxlbnQgbmVzdGVkIHZhbGlkYXRpb24nKTtcclxuICAgICAgICBleGFtcGxlc1snam9pJ10gPSB0aGlzLmdlbmVyYXRlSm9pRXhhbXBsZShjb25maWcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFuYWx5c2lzLmhhc1R5cGVkVmFsdWVzICYmIHRoaXMudmFsaWRhdGlvblByb3ZpZGVycy5nZXQoJ2NsYXNzLXZhbGlkYXRvcicpPy5pc0F2YWlsYWJsZSgpKSB7XHJcbiAgICAgIHJlY29tbWVuZGVkUHJvdmlkZXIgPSAnY2xhc3MtdmFsaWRhdG9yJztcclxuICAgICAgcmVhc29ucy5wdXNoKCdUeXBlZCB2YWx1ZXMgZGV0ZWN0ZWQgLSBjbGFzcy12YWxpZGF0b3IgcHJvdmlkZXMgc3Ryb25nIHR5cGUgc2FmZXR5Jyk7XHJcbiAgICAgIGV4YW1wbGVzWydjbGFzcy12YWxpZGF0b3InXSA9IHRoaXMuZ2VuZXJhdGVDbGFzc1ZhbGlkYXRvckV4YW1wbGUoY29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBbHdheXMgcHJvdmlkZSBjdXN0b20gZXhhbXBsZVxyXG4gICAgZXhhbXBsZXNbJ2N1c3RvbSddID0gdGhpcy5nZW5lcmF0ZUN1c3RvbVZhbGlkYXRpb25FeGFtcGxlKGNvbmZpZyk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVjb21tZW5kZWRQcm92aWRlcixcclxuICAgICAgcmVhc29ucyxcclxuICAgICAgZXhhbXBsZXNcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RlciB2YWxpZGF0aW9uIHByb3ZpZGVycy5cclxuICAgKi9cclxuICBwcml2YXRlIHJlZ2lzdGVyVmFsaWRhdGlvblByb3ZpZGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsaWRhdGlvblByb3ZpZGVycy5zZXQoJ2pvaScsIG5ldyBKb2lWYWxpZGF0aW9uUHJvdmlkZXIoKSk7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25Qcm92aWRlcnMuc2V0KCdjbGFzcy12YWxpZGF0b3InLCBuZXcgQ2xhc3NWYWxpZGF0b3JQcm92aWRlcigpKTtcclxuICAgIHRoaXMudmFsaWRhdGlvblByb3ZpZGVycy5zZXQoJ2N1c3RvbScsIG5ldyBDdXN0b21WYWxpZGF0aW9uUHJvdmlkZXIoKSk7XHJcblxyXG4gICAgLy8gTG9nIGF2YWlsYWJsZSBwcm92aWRlcnNcclxuICAgIGNvbnN0IGF2YWlsYWJsZSA9IEFycmF5LmZyb20odGhpcy52YWxpZGF0aW9uUHJvdmlkZXJzLmVudHJpZXMoKSlcclxuICAgICAgLmZpbHRlcigoW18sIHByb3ZpZGVyXSkgPT4gcHJvdmlkZXIuaXNBdmFpbGFibGUoKSlcclxuICAgICAgLm1hcCgoW25hbWVdKSA9PiBuYW1lKTtcclxuXHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgQXZhaWxhYmxlIHZhbGlkYXRpb24gcHJvdmlkZXJzOiAke2F2YWlsYWJsZS5qb2luKCcsICcpfWApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgZGV0YWlsZWQgdmFsaWRhdGlvbiBlcnJvciB3aXRoIHNvdXJjZSBpbmZvcm1hdGlvbi5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gbmFtZXNwYWNlIC0gTmFtZXNwYWNlIHRoYXQgZmFpbGVkIHZhbGlkYXRpb25cclxuICAgKiBAcGFyYW0gZXJyb3JzIC0gVmFsaWRhdGlvbiBlcnJvcnNcclxuICAgKiBAcGFyYW0gc291cmNlcyAtIENvbmZpZ3VyYXRpb24gc291cmNlc1xyXG4gICAqIEByZXR1cm5zIERldGFpbGVkIGVycm9yXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVWYWxpZGF0aW9uRXJyb3IoXHJcbiAgICBuYW1lc3BhY2U6IHN0cmluZyxcclxuICAgIGVycm9yczogc3RyaW5nW10sXHJcbiAgICBzb3VyY2VzPzogQ29uZmlndXJhdGlvblNvdXJjZVtdXHJcbiAgKTogRXJyb3Ige1xyXG4gICAgbGV0IG1lc3NhZ2UgPSBgQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgbmFtZXNwYWNlICcke25hbWVzcGFjZX0nOlxcbmA7XHJcbiAgICBtZXNzYWdlICs9IGVycm9ycy5tYXAoZXJyb3IgPT4gYCAgLSAke2Vycm9yfWApLmpvaW4oJ1xcbicpO1xyXG5cclxuICAgIGlmIChzb3VyY2VzICYmIHNvdXJjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBtZXNzYWdlICs9ICdcXG5cXG5Db25maWd1cmF0aW9uIHNvdXJjZXM6XFxuJztcclxuICAgICAgbWVzc2FnZSArPSBzb3VyY2VzLm1hcChzb3VyY2UgPT4gXHJcbiAgICAgICAgYCAgLSAke3NvdXJjZS5uYW1lfSAoJHtzb3VyY2UudHlwZX0pOiAke09iamVjdC5rZXlzKHNvdXJjZS5kYXRhKS5sZW5ndGh9IGtleXNgXHJcbiAgICAgICkuam9pbignXFxuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICBlcnJvci5uYW1lID0gJ0NvbmZpZ3VyYXRpb25WYWxpZGF0aW9uRXJyb3InO1xyXG4gICAgKGVycm9yIGFzIGFueSkubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xyXG4gICAgKGVycm9yIGFzIGFueSkudmFsaWRhdGlvbkVycm9ycyA9IGVycm9ycztcclxuICAgIChlcnJvciBhcyBhbnkpLnNvdXJjZXMgPSBzb3VyY2VzO1xyXG5cclxuICAgIHJldHVybiBlcnJvcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVuaGFuY2UgZXJyb3IgbWVzc2FnZSB3aXRoIHNvdXJjZSBpbmZvcm1hdGlvbi5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gZXJyb3IgLSBPcmlnaW5hbCBlcnJvciBtZXNzYWdlXHJcbiAgICogQHBhcmFtIHNvdXJjZXMgLSBDb25maWd1cmF0aW9uIHNvdXJjZXNcclxuICAgKiBAcmV0dXJucyBFbmhhbmNlZCBlcnJvciBtZXNzYWdlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBlbmhhbmNlRXJyb3JXaXRoU291cmNlSW5mbyhlcnJvcjogc3RyaW5nLCBzb3VyY2VzPzogQ29uZmlndXJhdGlvblNvdXJjZVtdKTogc3RyaW5nIHtcclxuICAgIGlmICghc291cmNlcyB8fCBzb3VyY2VzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gZXJyb3I7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc291cmNlTmFtZXMgPSBzb3VyY2VzLm1hcChzID0+IHMubmFtZSkuam9pbignLCAnKTtcclxuICAgIHJldHVybiBgJHtlcnJvcn0gKGZyb20gc291cmNlczogJHtzb3VyY2VOYW1lc30pYDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFuYWx5emUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgZm9yIHZhbGlkYXRpb24gcmVjb21tZW5kYXRpb25zLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIHRvIGFuYWx5emVcclxuICAgKiBAcmV0dXJucyBTdHJ1Y3R1cmUgYW5hbHlzaXNcclxuICAgKi9cclxuICBwcml2YXRlIGFuYWx5emVDb25maWd1cmF0aW9uU3RydWN0dXJlKGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55Pik6IHtcclxuICAgIGhhc0NvbXBsZXhOZXN0aW5nOiBib29sZWFuO1xyXG4gICAgaGFzQXJyYXlzOiBib29sZWFuO1xyXG4gICAgaGFzVHlwZWRWYWx1ZXM6IGJvb2xlYW47XHJcbiAgICBkZXB0aDogbnVtYmVyO1xyXG4gIH0ge1xyXG4gICAgbGV0IGhhc0NvbXBsZXhOZXN0aW5nID0gZmFsc2U7XHJcbiAgICBsZXQgaGFzQXJyYXlzID0gZmFsc2U7XHJcbiAgICBsZXQgaGFzVHlwZWRWYWx1ZXMgPSBmYWxzZTtcclxuICAgIGxldCBtYXhEZXB0aCA9IDA7XHJcblxyXG4gICAgY29uc3QgYW5hbHl6ZSA9IChvYmo6IGFueSwgZGVwdGg6IG51bWJlciA9IDApOiB2b2lkID0+IHtcclxuICAgICAgbWF4RGVwdGggPSBNYXRoLm1heChtYXhEZXB0aCwgZGVwdGgpO1xyXG5cclxuICAgICAgaWYgKGRlcHRoID4gMikge1xyXG4gICAgICAgIGhhc0NvbXBsZXhOZXN0aW5nID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBPYmplY3QudmFsdWVzKG9iaikpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgIGhhc0FycmF5cyA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBhbmFseXplKHZhbHVlLCBkZXB0aCArIDEpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgaGFzVHlwZWRWYWx1ZXMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBhbmFseXplKGNvbmZpZyk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaGFzQ29tcGxleE5lc3RpbmcsXHJcbiAgICAgIGhhc0FycmF5cyxcclxuICAgICAgaGFzVHlwZWRWYWx1ZXMsXHJcbiAgICAgIGRlcHRoOiBtYXhEZXB0aFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIEpvaSB2YWxpZGF0aW9uIGV4YW1wbGUuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gdG8gZ2VuZXJhdGUgZXhhbXBsZSBmb3JcclxuICAgKiBAcmV0dXJucyBKb2kgdmFsaWRhdGlvbiBleGFtcGxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUpvaUV4YW1wbGUoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuZ2VuZXJhdGVKb2lTY2hlbWFGcm9tQ29uZmlnKGNvbmZpZyk7XHJcbiAgICByZXR1cm4gYGNvbnN0IEpvaSA9IHJlcXVpcmUoJ2pvaScpO1xyXG5cclxuY29uc3Qgc2NoZW1hID0gJHtzY2hlbWF9O1xyXG5cclxuLy8gVXNhZ2UgaW4gZmFjdG9yeVxyXG5jb25zdCBmYWN0b3J5ID0gKCkgPT4ge1xyXG4gIGNvbnN0IGNvbmZpZyA9IGxvYWRBd3NDb25maWcoKTtcclxuICBjb25zdCB7IGVycm9yLCB2YWx1ZSB9ID0gc2NoZW1hLnZhbGlkYXRlKGNvbmZpZyk7XHJcbiAgaWYgKGVycm9yKSB0aHJvdyBlcnJvcjtcclxuICByZXR1cm4gdmFsdWU7XHJcbn07YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIGNsYXNzLXZhbGlkYXRvciBleGFtcGxlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIHRvIGdlbmVyYXRlIGV4YW1wbGUgZm9yXHJcbiAgICogQHJldHVybnMgY2xhc3MtdmFsaWRhdG9yIGV4YW1wbGVcclxuICAgKi9cclxuICBwcml2YXRlIGdlbmVyYXRlQ2xhc3NWYWxpZGF0b3JFeGFtcGxlKGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55Pik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjbGFzc0RlZmluaXRpb24gPSB0aGlzLmdlbmVyYXRlQ2xhc3NGcm9tQ29uZmlnKGNvbmZpZyk7XHJcbiAgICByZXR1cm4gYGltcG9ydCB7IElzU3RyaW5nLCBJc051bWJlciwgSXNPcHRpb25hbCwgdmFsaWRhdGVTeW5jIH0gZnJvbSAnY2xhc3MtdmFsaWRhdG9yJztcclxuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xyXG5cclxuJHtjbGFzc0RlZmluaXRpb259XHJcblxyXG4vLyBVc2FnZSBpbiBmYWN0b3J5XHJcbmNvbnN0IGZhY3RvcnkgPSAoKSA9PiB7XHJcbiAgY29uc3QgY29uZmlnID0gbG9hZEF3c0NvbmZpZygpO1xyXG4gIGNvbnN0IGluc3RhbmNlID0gcGxhaW5Ub0NsYXNzKENvbmZpZ0NsYXNzLCBjb25maWcpO1xyXG4gIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlU3luYyhpbnN0YW5jZSk7XHJcbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB0aHJvdyBuZXcgRXJyb3IoJ1ZhbGlkYXRpb24gZmFpbGVkJyk7XHJcbiAgcmV0dXJuIGNvbmZpZztcclxufTtgO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGUgY3VzdG9tIHZhbGlkYXRpb24gZXhhbXBsZS5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiB0byBnZW5lcmF0ZSBleGFtcGxlIGZvclxyXG4gICAqIEByZXR1cm5zIEN1c3RvbSB2YWxpZGF0aW9uIGV4YW1wbGVcclxuICAgKi9cclxuICBwcml2YXRlIGdlbmVyYXRlQ3VzdG9tVmFsaWRhdGlvbkV4YW1wbGUoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHZhbGlkYXRpb25DaGVja3MgPSB0aGlzLmdlbmVyYXRlVmFsaWRhdGlvbkNoZWNrcyhjb25maWcpO1xyXG4gICAgcmV0dXJuIGBjb25zdCB2YWxpZGF0ZUNvbmZpZyA9IChjb25maWcpID0+IHtcclxuICBjb25zdCBlcnJvcnMgPSBbXTtcclxuICBcclxuJHt2YWxpZGF0aW9uQ2hlY2tzfVxyXG4gIFxyXG4gIHJldHVybiBlcnJvcnM7XHJcbn07XHJcblxyXG4vLyBVc2FnZSBpbiBmYWN0b3J5XHJcbmNvbnN0IGZhY3RvcnkgPSAoKSA9PiB7XHJcbiAgY29uc3QgY29uZmlnID0gbG9hZEF3c0NvbmZpZygpO1xyXG4gIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlQ29uZmlnKGNvbmZpZyk7XHJcbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB0aHJvdyBuZXcgRXJyb3IoXFxgVmFsaWRhdGlvbiBmYWlsZWQ6IFxcJHtlcnJvcnMuam9pbignLCAnKX1cXGApO1xyXG4gIHJldHVybiBjb25maWc7XHJcbn07YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIEpvaSBzY2hlbWEgZnJvbSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiBvYmplY3RcclxuICAgKiBAcmV0dXJucyBKb2kgc2NoZW1hIHN0cmluZ1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2VuZXJhdGVKb2lTY2hlbWFGcm9tQ29uZmlnKGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55Pik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBnZW5lcmF0ZVNjaGVtYSA9IChvYmo6IGFueSk6IHN0cmluZyA9PiB7XHJcbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykgcmV0dXJuICdKb2kuc3RyaW5nKCknO1xyXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ251bWJlcicpIHJldHVybiAnSm9pLm51bWJlcigpJztcclxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdib29sZWFuJykgcmV0dXJuICdKb2kuYm9vbGVhbigpJztcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkgcmV0dXJuICdKb2kuYXJyYXkoKSc7XHJcbiAgICAgIFxyXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5lbnRyaWVzKG9iailcclxuICAgICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCAgJHtrZXl9OiAke2dlbmVyYXRlU2NoZW1hKHZhbHVlKX1gKVxyXG4gICAgICAgICAgLmpvaW4oJyxcXG4nKTtcclxuICAgICAgICByZXR1cm4gYEpvaS5vYmplY3Qoe1xcbiR7cHJvcGVydGllc31cXG59KWA7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIHJldHVybiAnSm9pLmFueSgpJztcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGdlbmVyYXRlU2NoZW1hKGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZSBjbGFzcyBkZWZpbml0aW9uIGZyb20gY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICogQHJldHVybnMgQ2xhc3MgZGVmaW5pdGlvbiBzdHJpbmdcclxuICAgKi9cclxuICBwcml2YXRlIGdlbmVyYXRlQ2xhc3NGcm9tQ29uZmlnKGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55Pik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmVudHJpZXMoY29uZmlnKVxyXG4gICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICBjb25zdCBkZWNvcmF0b3IgPSB0aGlzLmdldENsYXNzVmFsaWRhdG9yRGVjb3JhdG9yKHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gYCAgJHtkZWNvcmF0b3J9XFxuICAke2tleX06ICR7dGhpcy5nZXRUeXBlU2NyaXB0VHlwZSh2YWx1ZSl9O2A7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5qb2luKCdcXG5cXG4nKTtcclxuXHJcbiAgICByZXR1cm4gYGNsYXNzIENvbmZpZ0NsYXNzIHtcXG4ke3Byb3BlcnRpZXN9XFxufWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZSB2YWxpZGF0aW9uIGNoZWNrcyBmb3IgY3VzdG9tIHZhbGlkYXRpb24uXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICogQHJldHVybnMgVmFsaWRhdGlvbiBjaGVja3Mgc3RyaW5nXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZVZhbGlkYXRpb25DaGVja3MoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogc3RyaW5nIHtcclxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhjb25maWcpXHJcbiAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNoZWNrID0gdGhpcy5nZXRWYWxpZGF0aW9uQ2hlY2soa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIGAgICR7Y2hlY2t9YDtcclxuICAgICAgfSlcclxuICAgICAgLmpvaW4oJ1xcbicpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGNsYXNzLXZhbGlkYXRvciBkZWNvcmF0b3IgZm9yIGEgdmFsdWUuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gZ2V0IGRlY29yYXRvciBmb3JcclxuICAgKiBAcmV0dXJucyBEZWNvcmF0b3Igc3RyaW5nXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRDbGFzc1ZhbGlkYXRvckRlY29yYXRvcih2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gJ0BJc1N0cmluZygpJztcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gJ0BJc051bWJlcigpJztcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykgcmV0dXJuICdASXNCb29sZWFuKCknO1xyXG4gICAgcmV0dXJuICdASXNPcHRpb25hbCgpJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBUeXBlU2NyaXB0IHR5cGUgZm9yIGEgdmFsdWUuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gZ2V0IHR5cGUgZm9yXHJcbiAgICogQHJldHVybnMgVHlwZVNjcmlwdCB0eXBlIHN0cmluZ1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0VHlwZVNjcmlwdFR5cGUodmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuICdzdHJpbmcnO1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiAnbnVtYmVyJztcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykgcmV0dXJuICdib29sZWFuJztcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuICdhbnlbXSc7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgcmV0dXJuICdvYmplY3QnO1xyXG4gICAgcmV0dXJuICdhbnknO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHZhbGlkYXRpb24gY2hlY2sgZm9yIGN1c3RvbSB2YWxpZGF0aW9uLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBrZXkgLSBDb25maWd1cmF0aW9uIGtleVxyXG4gICAqIEBwYXJhbSB2YWx1ZSAtIENvbmZpZ3VyYXRpb24gdmFsdWVcclxuICAgKiBAcmV0dXJucyBWYWxpZGF0aW9uIGNoZWNrIHN0cmluZ1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0VmFsaWRhdGlvbkNoZWNrKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBgaWYgKCFjb25maWcuJHtrZXl9IHx8IHR5cGVvZiBjb25maWcuJHtrZXl9ICE9PSAnc3RyaW5nJykgZXJyb3JzLnB1c2goJyR7a2V5fSBtdXN0IGJlIGEgc3RyaW5nJyk7YDtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgIHJldHVybiBgaWYgKGNvbmZpZy4ke2tleX0gPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgY29uZmlnLiR7a2V5fSAhPT0gJ251bWJlcicpIGVycm9ycy5wdXNoKCcke2tleX0gbXVzdCBiZSBhIG51bWJlcicpO2A7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgcmV0dXJuIGBpZiAoY29uZmlnLiR7a2V5fSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBjb25maWcuJHtrZXl9ICE9PSAnYm9vbGVhbicpIGVycm9ycy5wdXNoKCcke2tleX0gbXVzdCBiZSBhIGJvb2xlYW4nKTtgO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGBpZiAoY29uZmlnLiR7a2V5fSA9PT0gdW5kZWZpbmVkKSBlcnJvcnMucHVzaCgnJHtrZXl9IGlzIHJlcXVpcmVkJyk7YDtcclxuICB9XHJcbn0iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ConfigManagerOptions, ConfigLoadResult, Logger, VerboseOptions } from './interfaces/config-manager.interface';
|
|
1
|
+
import type { ConfigManagerOptions, ConfigLoadResult, Logger, VerboseOptions } from './interfaces/config-manager.interface.js';
|
|
2
2
|
/**
|
|
3
3
|
* ConfigManager orchestrates loading configuration from multiple sources
|
|
4
4
|
* with configurable precedence and validation.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../../../../config-aws/src/config-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAEhB,MAAM,EAEN,cAAc,EACf,MAAM,
|
|
1
|
+
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../../../../config-aws/src/config-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAEhB,MAAM,EAEN,cAAc,EACf,MAAM,0CAA0C,CAAC;AAsDlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpD,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAC,GAAG;QACtG,MAAM,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC;KACpC,CAAC;IACF,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACnC,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IAEpE,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,GAAE,oBAAoB,CAAC,CAAC,CAAM;IAcjD;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;IACH,OAAO,CAAC,GAAG;IAMX;;OAEG;IACH,OAAO,CAAC,SAAS;IAwBjB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAiBpB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAc9B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAY7B;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA0G3B;;;;;OAKG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAQpC;;;;OAIG;IACH,MAAM,IAAI,CAAC;IAOX;;;OAGG;IACH,QAAQ,IAAI,OAAO;IAInB;;;OAGG;IACH,SAAS,IAAI,MAAM;IAInB;;;OAGG;IACH,aAAa,IAAI,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI;IAI3C;;;;OAIG;IACH,SAAS,IAAI,MAAM;IAOnB;;;;;;OAMG;IACH,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5C,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,oBAAoB,CAAC,CAAC,CAAM,GACpC,aAAa,CAAC,CAAC,CAAC;CA4BpB"}
|
|
@@ -5,20 +5,20 @@
|
|
|
5
5
|
* Supports environment variables, AWS Secrets Manager, SSM Parameter Store,
|
|
6
6
|
* S3, and .env files with configurable precedence.
|
|
7
7
|
*/
|
|
8
|
-
export type { ConfigLoader, ConfigLoaderResult, } from './interfaces/config-loader.interface';
|
|
9
|
-
export type { ConfigManagerOptions, LoaderPrecedence, VerboseOptions, PrecedenceStrategy, ConfigLoadResult, ConfigSourceInfo, Logger, } from './interfaces/config-manager.interface';
|
|
10
|
-
export type { EnvironmentLoaderConfig, } from './interfaces/environment-loader.interface';
|
|
11
|
-
export type { EnvFileLoaderConfig, } from './interfaces/env-file-loader.interface';
|
|
12
|
-
export type { S3LoaderConfig, } from './interfaces/s3-loader.interface';
|
|
13
|
-
export type { SecretsManagerLoaderConfig, } from './interfaces/secrets-manager-loader.interface';
|
|
14
|
-
export type { SSMParameterStoreLoaderConfig, } from './interfaces/ssm-parameter-store-loader.interface';
|
|
15
|
-
export { ConfigurationError, ValidationError, AWSServiceError, ConfigurationLoadError, MissingConfigurationError, } from './errors';
|
|
16
|
-
export { EnvironmentLoader } from './loaders/environment.loader';
|
|
17
|
-
export { EnvFileLoader } from './loaders/env-file.loader';
|
|
18
|
-
export { S3Loader } from './loaders/s3.loader';
|
|
19
|
-
export { SecretsManagerLoader } from './loaders/secrets-manager.loader';
|
|
20
|
-
export { SSMParameterStoreLoader } from './loaders/ssm-parameter-store.loader';
|
|
21
|
-
export { ConfigManager } from './config-manager';
|
|
22
|
-
export { ConfigValidationUtil } from './utils/validation.util';
|
|
23
|
-
export { EnvFileParser } from './utils/env-file-parser.util';
|
|
8
|
+
export type { ConfigLoader, ConfigLoaderResult, } from './interfaces/config-loader.interface.js';
|
|
9
|
+
export type { ConfigManagerOptions, LoaderPrecedence, VerboseOptions, PrecedenceStrategy, ConfigLoadResult, ConfigSourceInfo, Logger, } from './interfaces/config-manager.interface.js';
|
|
10
|
+
export type { EnvironmentLoaderConfig, } from './interfaces/environment-loader.interface.js';
|
|
11
|
+
export type { EnvFileLoaderConfig, } from './interfaces/env-file-loader.interface.js';
|
|
12
|
+
export type { S3LoaderConfig, } from './interfaces/s3-loader.interface.js';
|
|
13
|
+
export type { SecretsManagerLoaderConfig, } from './interfaces/secrets-manager-loader.interface.js';
|
|
14
|
+
export type { SSMParameterStoreLoaderConfig, } from './interfaces/ssm-parameter-store-loader.interface.js';
|
|
15
|
+
export { ConfigurationError, ValidationError, AWSServiceError, ConfigurationLoadError, MissingConfigurationError, } from './errors/index.js';
|
|
16
|
+
export { EnvironmentLoader } from './loaders/environment.loader.js';
|
|
17
|
+
export { EnvFileLoader } from './loaders/env-file.loader.js';
|
|
18
|
+
export { S3Loader } from './loaders/s3.loader.js';
|
|
19
|
+
export { SecretsManagerLoader } from './loaders/secrets-manager.loader.js';
|
|
20
|
+
export { SSMParameterStoreLoader } from './loaders/ssm-parameter-store.loader.js';
|
|
21
|
+
export { ConfigManager } from './config-manager.js';
|
|
22
|
+
export { ConfigValidationUtil } from './utils/validation.util.js';
|
|
23
|
+
export { EnvFileParser } from './utils/env-file-parser.util.js';
|
|
24
24
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../config-aws/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,YAAY,EACZ,kBAAkB,GACnB,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../config-aws/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,YAAY,EACZ,kBAAkB,GACnB,MAAM,yCAAyC,CAAC;AAEjD,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,MAAM,GACP,MAAM,0CAA0C,CAAC;AAElD,YAAY,EACV,uBAAuB,GACxB,MAAM,8CAA8C,CAAC;AAEtD,YAAY,EACV,mBAAmB,GACpB,MAAM,2CAA2C,CAAC;AAEnD,YAAY,EACV,cAAc,GACf,MAAM,qCAAqC,CAAC;AAE7C,YAAY,EACV,0BAA0B,GAC3B,MAAM,kDAAkD,CAAC;AAE1D,YAAY,EACV,6BAA6B,GAC9B,MAAM,sDAAsD,CAAC;AAG9D,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAGlF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-manager.interface.d.ts","sourceRoot":"","sources":["../../../../../../config-aws/src/interfaces/config-manager.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"config-manager.interface.d.ts","sourceRoot":"","sources":["../../../../../../config-aws/src/interfaces/config-manager.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qFAAqF;IACrF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mDAAmD;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mGAAmG;IACnG,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4GAA4G;IAC5G,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,aAAa,GAAG,gBAAgB,EAAE,CAAC;AAElF;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/D,8BAA8B;IAC9B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,gCAAgC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,qDAAqD;IACrD,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,+DAA+D;IAC/D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qCAAqC;IACrC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,+BAA+B;IAC/B,MAAM,EAAE,CAAC,CAAC;IACV,oCAAoC;IACpC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,wCAAwC;IACxC,QAAQ,EAAE,IAAI,CAAC;CAChB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ConfigLoader } from '../interfaces/config-loader.interface';
|
|
2
|
-
import type { EnvFileLoaderConfig } from '../interfaces/env-file-loader.interface';
|
|
1
|
+
import type { ConfigLoader } from '../interfaces/config-loader.interface.js';
|
|
2
|
+
import type { EnvFileLoaderConfig } from '../interfaces/env-file-loader.interface.js';
|
|
3
3
|
/**
|
|
4
4
|
* Loader that reads configuration from .env files on the filesystem.
|
|
5
5
|
* Uses AWS ECS-compatible format for parsing.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-file.loader.d.ts","sourceRoot":"","sources":["../../../../../../config-aws/src/loaders/env-file.loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"env-file.loader.d.ts","sourceRoot":"","sources":["../../../../../../config-aws/src/loaders/env-file.loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAItF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,aAAc,YAAW,YAAY;IAChD,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IAE1D,6CAA6C;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA0B;IAE/D,4BAA4B;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAA2B;gBAEvD,MAAM,GAAE,mBAAwB;IAQ5C,OAAO,IAAI,MAAM;IAKjB;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAUrC;;;;;;;;;;;OAWG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAuC9C;;;OAGG;IACH,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAO/C;;;OAGG;cACa,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS9D;;;OAGG;cACa,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAG5D"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ConfigLoader } from '../interfaces/config-loader.interface';
|
|
2
|
-
import type { EnvironmentLoaderConfig } from '../interfaces/environment-loader.interface';
|
|
1
|
+
import type { ConfigLoader } from '../interfaces/config-loader.interface.js';
|
|
2
|
+
import type { EnvironmentLoaderConfig } from '../interfaces/environment-loader.interface.js';
|
|
3
3
|
/**
|
|
4
4
|
* Loader that reads configuration from process.env.
|
|
5
5
|
* Supports prefix filtering and exclusion lists.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.loader.d.ts","sourceRoot":"","sources":["../../../../../../config-aws/src/loaders/environment.loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"environment.loader.d.ts","sourceRoot":"","sources":["../../../../../../config-aws/src/loaders/environment.loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;AAE7F;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IACpD,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;gBAExC,MAAM,GAAE,uBAA4B;IAIhD,OAAO,IAAI,MAAM;IAIX,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC;;;;;;;;;;;;OAYG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAmC/C"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { S3Client } from '@aws-sdk/client-s3';
|
|
2
|
-
import type { ConfigLoader } from '../interfaces/config-loader.interface';
|
|
3
|
-
import type { S3LoaderConfig } from '../interfaces/s3-loader.interface';
|
|
2
|
+
import type { ConfigLoader } from '../interfaces/config-loader.interface.js';
|
|
3
|
+
import type { S3LoaderConfig } from '../interfaces/s3-loader.interface.js';
|
|
4
4
|
/**
|
|
5
5
|
* Loader that reads configuration from S3 buckets.
|
|
6
6
|
* Supports JSON and .env file formats with auto-detection.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3.loader.d.ts","sourceRoot":"","sources":["../../../../../../config-aws/src/loaders/s3.loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"s3.loader.d.ts","sourceRoot":"","sources":["../../../../../../config-aws/src/loaders/s3.loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAI3E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,QAAS,YAAW,YAAY;IAC3C,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACrD,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;gBAEzB,MAAM,EAAE,cAAc;IAclC,OAAO,IAAI,MAAM;IAKjB;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC;;;;;OAKG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAkD9C;;;OAGG;IACH,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAUhE;;;;OAIG;IACH,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK;IAQvD;;;OAGG;IACH,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAkB9D"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SecretsManagerClient } from '@aws-sdk/client-secrets-manager';
|
|
2
|
-
import type { ConfigLoader } from '../interfaces/config-loader.interface';
|
|
3
|
-
import type { SecretsManagerLoaderConfig } from '../interfaces/secrets-manager-loader.interface';
|
|
2
|
+
import type { ConfigLoader } from '../interfaces/config-loader.interface.js';
|
|
3
|
+
import type { SecretsManagerLoaderConfig } from '../interfaces/secrets-manager-loader.interface.js';
|
|
4
4
|
/**
|
|
5
5
|
* Loader that reads configuration from AWS Secrets Manager.
|
|
6
6
|
* Supports environment-aware path construction.
|
|
@@ -34,7 +34,7 @@ export declare class SecretsManagerLoader implements ConfigLoader {
|
|
|
34
34
|
constructor(config?: SecretsManagerLoaderConfig);
|
|
35
35
|
/**
|
|
36
36
|
* Get the name of this loader for logging and debugging.
|
|
37
|
-
* @returns The loader name with secret path
|
|
37
|
+
* @returns The loader name with secret path or base secret name if path cannot be built
|
|
38
38
|
*/
|
|
39
39
|
getName(): string;
|
|
40
40
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets-manager.loader.d.ts","sourceRoot":"","sources":["../../../../../../config-aws/src/loaders/secrets-manager.loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAG9F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"secrets-manager.loader.d.ts","sourceRoot":"","sources":["../../../../../../config-aws/src/loaders/secrets-manager.loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAG9F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAC;AAGpG;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,oBAAqB,YAAW,YAAY;IACvD,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;IACjD,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,0BAA0B,CAAC,CAAC;IACjE,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEvB,MAAM,GAAE,0BAA+B;IAsBnD;;;OAGG;IACH,OAAO,IAAI,MAAM;IAYjB;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAerC;;;;;OAKG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAoE9C;;;OAGG;IACH,eAAe,IAAI,MAAM;IAczB;;;OAGG;IACH,SAAS,IAAI,MAAM;IAInB;;;OAGG;IACH,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGhD"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SSMClient } from '@aws-sdk/client-ssm';
|
|
2
|
-
import type { ConfigLoader } from '../interfaces/config-loader.interface';
|
|
3
|
-
import type { SSMParameterStoreLoaderConfig } from '../interfaces/ssm-parameter-store-loader.interface';
|
|
2
|
+
import type { ConfigLoader } from '../interfaces/config-loader.interface.js';
|
|
3
|
+
import type { SSMParameterStoreLoaderConfig } from '../interfaces/ssm-parameter-store-loader.interface.js';
|
|
4
4
|
/**
|
|
5
5
|
* Loader that reads configuration from AWS SSM Parameter Store.
|
|
6
6
|
* Supports environment-aware path construction, pagination, and decryption options.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssm-parameter-store.loader.d.ts","sourceRoot":"","sources":["../../../../../../config-aws/src/loaders/ssm-parameter-store.loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAG5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ssm-parameter-store.loader.d.ts","sourceRoot":"","sources":["../../../../../../config-aws/src/loaders/ssm-parameter-store.loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAG5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,uDAAuD,CAAC;AAG3G;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,uBAAwB,YAAW,YAAY;IAC1D,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IACtC,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,6BAA6B,CAAC,CAAC;IACpE,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEvB,MAAM,GAAE,6BAAkC;IAuBtD;;;OAGG;IACH,OAAO,IAAI,MAAM;IAUjB;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAerC;;;;;;OAMG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IA6E9C;;;;OAIG;IACH,kBAAkB,IAAI,MAAM;IAc5B;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;;OAGG;IACH,SAAS,IAAI,MAAM;IAInB;;;OAGG;IACH,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGhD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ZodType, ZodError, TypeOf } from 'zod';
|
|
2
|
-
import { ValidationError } from '../errors';
|
|
2
|
+
import { ValidationError } from '../errors/index.js';
|
|
3
3
|
/**
|
|
4
4
|
* Framework-agnostic validation utility for configuration values.
|
|
5
5
|
* Provides methods for validating configuration objects against Zod schemas.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.util.d.ts","sourceRoot":"","sources":["../../../../../../config-aws/src/utils/validation.util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"validation.util.d.ts","sourceRoot":"","sources":["../../../../../../config-aws/src/utils/validation.util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B;;;;;;;OAOG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,OAAO,EAC/B,MAAM,EAAE,CAAC,EACT,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAAC,CAAC,CAAC;IAeZ;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,OAAO,EACnC,MAAM,EAAE,CAAC,EACT,KAAK,EAAE,OAAO,GACb;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;KAAE,GAAG;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,eAAe,CAAA;KAAE;IAalF;;;;OAIG;IACH,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IA+BvD;;;;;OAKG;IACH,MAAM,CAAC,0BAA0B,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAmB5E;;;;;;;OAOG;IACH,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,OAAO,EAC5C,MAAM,EAAE,CAAC,EACT,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,GACb,MAAM,CAAC,CAAC,CAAC;CAYb"}
|
package/dist/types/nestjs-config-aws/src/integration/services/async-config-helper.service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async-config-helper.service.d.ts","sourceRoot":"","sources":["../../../../../../src/integration/services/async-config-helper.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AAGjF;;;;GAIG;AACH,qBACa,wBAAwB;IAIjC,OAAO,CAAC,QAAQ,CAAC,0BAA0B;IAE3C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6C;gBAGjD,0BAA0B,EAAE,0BAA0B,EAEtD,OAAO,GAAE,kBAAuB;IAGnD;;;;;OAKG;IACG,wBAAwB,IAAI,OAAO,CAAC,aAAa,CAAC;IAiDxD;;;;;;OAMG;IACG,8BAA8B,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAgCpF;;;;;;OAMG;IACH,kCAAkC,CAAC,YAAY,GAAE,GAAG,EAAO,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,mBAAmB,CAAC;IA6C9G;;;;;;OAMG;IACG,wBAAwB,CAAC,eAAe,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAmDvF;;;;;;OAMG;IACG,wBAAwB,CAAC,WAAW,GAAE,mBAAwB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAyCnG;;;;;OAKG;IACG,sBAAsB,IAAI,OAAO,CAAC;QACtC,WAAW,EAAE,OAAO,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IA0BF;;;;;OAKG;IACH,sBAAsB,IAAI,aAAa;
|
|
1
|
+
{"version":3,"file":"async-config-helper.service.d.ts","sourceRoot":"","sources":["../../../../../../src/integration/services/async-config-helper.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AAGjF;;;;GAIG;AACH,qBACa,wBAAwB;IAIjC,OAAO,CAAC,QAAQ,CAAC,0BAA0B;IAE3C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6C;gBAGjD,0BAA0B,EAAE,0BAA0B,EAEtD,OAAO,GAAE,kBAAuB;IAGnD;;;;;OAKG;IACG,wBAAwB,IAAI,OAAO,CAAC,aAAa,CAAC;IAiDxD;;;;;;OAMG;IACG,8BAA8B,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAgCpF;;;;;;OAMG;IACH,kCAAkC,CAAC,YAAY,GAAE,GAAG,EAAO,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,mBAAmB,CAAC;IA6C9G;;;;;;OAMG;IACG,wBAAwB,CAAC,eAAe,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAmDvF;;;;;;OAMG;IACG,wBAAwB,CAAC,WAAW,GAAE,mBAAwB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAyCnG;;;;;OAKG;IACG,sBAAsB,IAAI,OAAO,CAAC;QACtC,WAAW,EAAE,OAAO,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IA0BF;;;;;OAKG;IACH,sBAAsB,IAAI,aAAa;IAuCvC;;;OAGG;YACW,uBAAuB;IAkBrC;;;;;OAKG;IACH,OAAO,CAAC,SAAS;CAiBlB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation-integration.service.d.ts","sourceRoot":"","sources":["../../../../../../src/integration/services/validation-integration.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC3E,WAAW,IAAI,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,qBAAsB,YAAW,wBAAwB;IACpE,IAAI,SAAS;IACb,OAAO,CAAC,GAAG,CAAM;;IAYjB,WAAW,IAAI,OAAO;IAItB,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;
|
|
1
|
+
{"version":3,"file":"validation-integration.service.d.ts","sourceRoot":"","sources":["../../../../../../src/integration/services/validation-integration.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC3E,WAAW,IAAI,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,qBAAsB,YAAW,wBAAwB;IACpE,IAAI,SAAS;IACb,OAAO,CAAC,GAAG,CAAM;;IAYjB,WAAW,IAAI,OAAO;IAItB,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;CAwB3E;AAED;;GAEG;AACH,qBAAa,sBAAuB,YAAW,wBAAwB;IACrE,IAAI,SAAqB;IACzB,OAAO,CAAC,cAAc,CAAM;IAC5B,OAAO,CAAC,gBAAgB,CAAM;;IAc9B,WAAW,IAAI,OAAO;IAItB,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;CA2BhF;AAED;;GAEG;AACH,qBAAa,wBAAyB,YAAW,wBAAwB;IACvE,IAAI,SAAY;IAEhB,WAAW,IAAI,OAAO;IAItB,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,GAAG,IAAI,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;CAc9G;AAED;;;GAGG;AACH,qBACa,4BAA4B;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiD;IACxE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAoD;;IAOxF;;;;;;;;;;OAUG;IACH,sBAAsB,CACpB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,gBAAgB,EAAE,GAAG,EACrB,cAAc,EAAE,KAAK,GAAG,iBAAiB,GAAG,QAAQ,EACpD,OAAO,CAAC,EAAE,mBAAmB,EAAE,GAC9B,aAAa;IAoChB;;;;;;;;OAQG;IACH,qBAAqB,CACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,MAAM,EAAE,GAAG,EACX,cAAc,EAAE,KAAK,GAAG,iBAAiB,GAAG,QAAQ,EACpD,OAAO,CAAC,EAAE,mBAAmB,EAAE,GAC9B;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;IA0C7D;;;;;;;;;;OAUG;IACH,kCAAkC,CAChC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,gBAAgB,EAAE,GAAG,EACrB,cAAc,EAAE,KAAK,GAAG,iBAAiB,GAAG,QAAQ,EACpD,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnC,OAAO,CAAC,EAAE,mBAAmB,EAAE,GAC9B,aAAa;IA8ChB;;;;;;;;OAQG;IACH,+BAA+B,CAC7B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EACrD,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtC,cAAc,EAAE,KAAK,GAAG,iBAAiB,GAAG,QAAQ,EACpD,OAAO,CAAC,EAAE,mBAAmB,EAAE,GAC9B,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAoB7E;;;;OAIG;IACH,+BAA+B,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAU1D;;;;;OAKG;IACH,4BAA4B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QACzD,mBAAmB,EAAE,MAAM,CAAC;QAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC;IAgCD;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAanC;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB;IAwB7B;;;;;;OAMG;IACH,OAAO,CAAC,0BAA0B;IASlC;;;;;OAKG;IACH,OAAO,CAAC,6BAA6B;IAuCrC;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;;;;OAKG;IACH,OAAO,CAAC,6BAA6B;IAiBrC;;;;;OAKG;IACH,OAAO,CAAC,+BAA+B;IAmBvC;;;;;OAKG;IACH,OAAO,CAAC,2BAA2B;IAoBnC;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAW/B;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;IAShC;;;;;OAKG;IACH,OAAO,CAAC,0BAA0B;IAOlC;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IASzB;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;CAY3B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dyanet/nestjs-config-aws",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "AWS-integrated configuration management for NestJS applications with support for environment variables, AWS Secrets Manager, and AWS Systems Manager Parameter Store. Includes @nestjs/config integration for seamless compatibility.",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"scripts": {
|
|
21
21
|
"build": "npm run clean && npm run build:types && npm run build:esm && npm run build:cjs",
|
|
22
22
|
"build:types": "tsc --project tsconfig.types.json",
|
|
23
|
-
"build:esm": "tsc --project tsconfig.esm.json",
|
|
23
|
+
"build:esm": "tsc --project tsconfig.esm.json && echo {\"type\":\"module\"} > dist/esm/package.json",
|
|
24
24
|
"build:cjs": "tsc --project tsconfig.cjs.json",
|
|
25
25
|
"clean": "rimraf dist",
|
|
26
26
|
"test": "jest",
|
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
"author": "Dyanet",
|
|
51
51
|
"license": "MIT",
|
|
52
52
|
"engines": {
|
|
53
|
-
"node": ">=
|
|
54
|
-
"npm": ">=
|
|
53
|
+
"node": ">=20.0.0",
|
|
54
|
+
"npm": ">=10.0.0"
|
|
55
55
|
},
|
|
56
56
|
"publishConfig": {
|
|
57
57
|
"access": "public",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"@types/node": "^20.0.0",
|
|
88
88
|
"dotenv": "^17.2.1",
|
|
89
89
|
"jest": "^29.5.0",
|
|
90
|
-
"rimraf": "^
|
|
90
|
+
"rimraf": "^6.0.0",
|
|
91
91
|
"ts-jest": "^29.1.0",
|
|
92
92
|
"typescript": "^5.9.2",
|
|
93
93
|
"zod": "^3.22.0"
|