@decaf-ts/decorator-validation 1.7.4 → 1.7.6
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/dist/decorator-validation.cjs +145 -57
- package/dist/decorator-validation.esm.cjs +144 -58
- package/lib/esm/constants/index.js +3 -3
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +6 -6
- package/lib/esm/mcp/ModelContextProtocol.d.ts +31 -0
- package/lib/esm/mcp/ModelContextProtocol.js +66 -0
- package/lib/esm/mcp/mcp1.d.ts +0 -0
- package/lib/esm/mcp/mcp1.js +405 -0
- package/lib/esm/mcp/tools/createModel.tool.d.ts +0 -0
- package/lib/esm/mcp/tools/createModel.tool.js +67 -0
- package/lib/esm/mcp/tools/validateModel.tool.d.ts +0 -0
- package/lib/esm/mcp/tools/validateModel.tool.js +2 -0
- package/lib/esm/mcp/types.d.ts +3 -0
- package/lib/esm/mcp/types.js +2 -0
- package/lib/esm/model/Builder.d.ts +0 -0
- package/lib/esm/model/Builder.js +130 -0
- package/lib/esm/model/Model.d.ts +1 -0
- package/lib/esm/model/Model.js +21 -10
- package/lib/esm/model/construction.js +2 -2
- package/lib/esm/model/decorators.d.ts +10 -0
- package/lib/esm/model/decorators.js +16 -4
- package/lib/esm/model/index.js +9 -9
- package/lib/esm/model/utils.js +2 -2
- package/lib/esm/model/validation.js +15 -12
- package/lib/esm/utils/Decoration.js +2 -2
- package/lib/esm/utils/PathProxy.js +3 -3
- package/lib/esm/utils/constants.d.ts +1 -0
- package/lib/esm/utils/constants.js +2 -1
- package/lib/esm/utils/dates.js +3 -3
- package/lib/esm/utils/decorators.js +2 -2
- package/lib/esm/utils/index.js +11 -11
- package/lib/esm/utils/serialization.js +4 -4
- package/lib/esm/validation/Validation.d.ts +3 -0
- package/lib/esm/validation/Validation.js +14 -3
- package/lib/esm/validation/Validators/DateValidator.js +4 -4
- package/lib/esm/validation/Validators/DiffValidator.js +4 -4
- package/lib/esm/validation/Validators/EmailValidator.js +4 -4
- package/lib/esm/validation/Validators/EqualsValidator.js +4 -4
- package/lib/esm/validation/Validators/GreaterThanOrEqualValidator.js +5 -5
- package/lib/esm/validation/Validators/GreaterThanValidator.js +5 -5
- package/lib/esm/validation/Validators/LessThanOrEqualValidator.d.ts +1 -1
- package/lib/esm/validation/Validators/LessThanOrEqualValidator.js +5 -5
- package/lib/esm/validation/Validators/LessThanValidator.d.ts +1 -1
- package/lib/esm/validation/Validators/LessThanValidator.js +5 -5
- package/lib/esm/validation/Validators/ListValidator.js +4 -4
- package/lib/esm/validation/Validators/MaxLengthValidator.js +4 -4
- package/lib/esm/validation/Validators/MaxValidator.js +4 -4
- package/lib/esm/validation/Validators/MinLengthValidator.js +4 -4
- package/lib/esm/validation/Validators/MinValidator.js +4 -4
- package/lib/esm/validation/Validators/PasswordValidator.js +4 -4
- package/lib/esm/validation/Validators/PatternValidator.js +4 -4
- package/lib/esm/validation/Validators/RequiredValidator.js +4 -4
- package/lib/esm/validation/Validators/StepValidator.js +4 -4
- package/lib/esm/validation/Validators/TypeValidator.js +6 -6
- package/lib/esm/validation/Validators/URLValidator.js +4 -4
- package/lib/esm/validation/Validators/Validator.js +3 -3
- package/lib/esm/validation/Validators/ValidatorRegistry.js +2 -2
- package/lib/esm/validation/Validators/constants.js +2 -2
- package/lib/esm/validation/Validators/decorators.js +3 -3
- package/lib/esm/validation/Validators/index.js +25 -25
- package/lib/esm/validation/Validators/utils.js +3 -3
- package/lib/esm/validation/decorators.d.ts +26 -3
- package/lib/esm/validation/decorators.js +107 -58
- package/lib/esm/validation/index.js +5 -5
- package/lib/esm/validation/types.d.ts +11 -5
- package/lib/esm/validation/types.js +2 -2
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/mcp/ModelContextProtocol.cjs +70 -0
- package/lib/mcp/ModelContextProtocol.d.ts +31 -0
- package/lib/mcp/mcp1.cjs +405 -0
- package/lib/mcp/mcp1.d.ts +0 -0
- package/lib/mcp/tools/createModel.tool.cjs +67 -0
- package/lib/mcp/tools/createModel.tool.d.ts +0 -0
- package/lib/mcp/tools/validateModel.tool.cjs +2 -0
- package/lib/mcp/tools/validateModel.tool.d.ts +0 -0
- package/lib/mcp/types.cjs +3 -0
- package/lib/mcp/types.d.ts +3 -0
- package/lib/model/Builder.cjs +130 -0
- package/lib/model/Builder.d.ts +0 -0
- package/lib/model/Model.cjs +14 -3
- package/lib/model/Model.d.ts +1 -0
- package/lib/model/decorators.cjs +14 -1
- package/lib/model/decorators.d.ts +10 -0
- package/lib/model/validation.cjs +6 -3
- package/lib/utils/constants.cjs +2 -1
- package/lib/utils/constants.d.ts +1 -0
- package/lib/validation/Validation.cjs +12 -1
- package/lib/validation/Validation.d.ts +3 -0
- package/lib/validation/Validators/LessThanOrEqualValidator.cjs +1 -1
- package/lib/validation/Validators/LessThanOrEqualValidator.d.ts +1 -1
- package/lib/validation/Validators/LessThanValidator.cjs +1 -1
- package/lib/validation/Validators/LessThanValidator.d.ts +1 -1
- package/lib/validation/decorators.cjs +102 -52
- package/lib/validation/decorators.d.ts +26 -3
- package/lib/validation/types.cjs +1 -1
- package/lib/validation/types.d.ts +11 -5
- package/package.json +15 -4
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { ValidationKeys } from "./Validators";
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdmFsaWRhdGlvbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsY0FBYyxFQUFhLE1BQU0sY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVjb3JhdG9yTWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yIH0gZnJvbSBcIi4uL21vZGVsXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uS2V5cywgVmFsaWRhdG9yIH0gZnJvbSBcIi4vVmFsaWRhdG9yc1wiO1xuaW1wb3J0IHsgSVJlZ2lzdHJ5IH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFR5cGUgZGVmaW5pdGlvbiBmb3IgbWV0YWRhdGEgdXNlZCBieSB2YWxpZGF0aW9uIGRlY29yYXRvcnNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHN0cnVjdHVyZSBvZiBtZXRhZGF0YSBhdHRhY2hlZCB0byBwcm9wZXJ0aWVzIGJ5IHZhbGlkYXRpb24gZGVjb3JhdG9ycy5cbiAqIFRoaXMgbWV0YWRhdGEgaXMgdXNlZCBkdXJpbmcgdmFsaWRhdGlvbiB0byBkZXRlcm1pbmUgdmFsaWRhdGlvbiBydWxlcyBhbmQgZXJyb3IgbWVzc2FnZXMuXG4gKlxuICogQHByb3BlcnR5IHthbnlbXX0gW2FyZ3NdIC0gT3B0aW9uYWwgYXJndW1lbnRzIGZvciB0aGUgdmFsaWRhdG9yXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVzc2FnZSAtIEVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSB3aGVuIHZhbGlkYXRpb24gZmFpbHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFt0eXBlc10gLSBBcnJheSBvZiB0eXBlIG5hbWVzIHRoYXQgdGhlIHByb3BlcnR5IGNhbiBoYXZlXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gVmFsaWRhdGlvbk1ldGFkYXRhXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uTWV0YWRhdGEgPSB7XG4gIFtpbmRleGVyOiBzdHJpbmddOiBhbnk7XG4gIGFyZ3M/OiBhbnlbXTtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICB0eXBlcz86IHN0cmluZ1tdO1xufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVHlwZSBkZWZpbml0aW9uIGZvciBwcm9wZXJ0eS1sZXZlbCB2YWxpZGF0aW9uIGRlY29yYXRvciBjb25maWd1cmF0aW9uXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgdGhhdCBhc3NvY2lhdGVzIGEgcHJvcGVydHkgd2l0aCBpdHMgdmFsaWRhdGlvbiBkZWNvcmF0b3JzLlxuICogVGhpcyB0eXBlIGlzIHVzZWQgdG8gdHJhY2sgd2hpY2ggZGVjb3JhdG9ycyBhcmUgYXBwbGllZCB0byBhIHNwZWNpZmljIHByb3BlcnR5IGR1cmluZyB2YWxpZGF0aW9uLlxuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHN5bWJvbH0gcHJvcCAtIFRoZSBwcm9wZXJ0eSBuYW1lIG9yIHN5bWJvbCB0aGF0IHRoZSBkZWNvcmF0b3JzIGFyZSBhcHBsaWVkIHRvXG4gKiBAcHJvcGVydHkge1ZhbGlkYXRpb25EZWNvcmF0b3JEZWZpbml0aW9uW119IGRlY29yYXRvcnMgLSBBcnJheSBvZiBkZWNvcmF0b3IgZGVmaW5pdGlvbnMgYXBwbGllZCB0byB0aGUgcHJvcGVydHlcbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBWYWxpZGF0aW9uUHJvcGVydHlEZWNvcmF0b3JEZWZpbml0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uUHJvcGVydHlEZWNvcmF0b3JEZWZpbml0aW9uID0ge1xuICBwcm9wOiBzdHJpbmcgfCBzeW1ib2w7XG4gIGRlY29yYXRvcnM6IFZhbGlkYXRpb25EZWNvcmF0b3JEZWZpbml0aW9uW107XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUeXBlIGRlZmluaXRpb24gZm9yIGluZGl2aWR1YWwgdmFsaWRhdGlvbiBkZWNvcmF0b3IgbWV0YWRhdGFcbiAqIEBzdW1tYXJ5IEV4dGVuZHMgdGhlIGJhc2UgRGVjb3JhdG9yTWV0YWRhdGEgdHlwZSB3aXRoIHZhbGlkYXRpb24tc3BlY2lmaWMgcHJvcGVydGllcy5cbiAqIFRoaXMgdHlwZSByZXByZXNlbnRzIHRoZSBtZXRhZGF0YSBmb3IgYSBzaW5nbGUgdmFsaWRhdGlvbiBkZWNvcmF0b3IgYXBwbGllZCB0byBhIHByb3BlcnR5LlxuICpcbiAqIEBwcm9wZXJ0eSB7VmFsaWRhdGlvbkVsZW1lbnREZWZpbml0aW9ufSBwcm9wcyAtIFRoZSB2YWxpZGF0aW9uIGVsZW1lbnQgcHJvcGVydGllcyBhbmQgY29uZmlndXJhdGlvblxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFZhbGlkYXRpb25EZWNvcmF0b3JEZWZpbml0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uRGVjb3JhdG9yRGVmaW5pdGlvbiA9IERlY29yYXRvck1ldGFkYXRhICYge1xuICBwcm9wczogVmFsaWRhdGlvbkVsZW1lbnREZWZpbml0aW9uO1xufTtcblxuLyoqXG4gKiBAc3VtbWFyeSBUeXBlIGZvciBhIHZhbGlkYXRvciBlbGVtZW50IG1ldGFkYXRhXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uRWxlbWVudERlZmluaXRpb24gPSB7XG4gIFtpbmRleGVyOiBzdHJpbmddOiBhbnk7XG5cbiAgdmFsdWU/OiBzdHJpbmcgfCBudW1iZXI7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgdHlwZXM/OiBzdHJpbmdbXTtcbn07XG5cbi8qKlxuICogQHN1bW1hcnkgVHlwZSBmb3IgYSBtb2RlbCBlcnJvcnNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIE1vZGVsRXJyb3JzID0gUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPj47XG5cbi8qKlxuICogQHN1bW1hcnkgVXRpbCB0eXBlIGZvciB7QGxpbmsgVmFsaWRhdG9yfSBjb25maWd1cmF0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgdHlwZSBWYWxpZGF0b3JEZWZpbml0aW9uID0ge1xuICB2YWxpZGF0b3I6IENvbnN0cnVjdG9yPFZhbGlkYXRvcj47XG4gIHZhbGlkYXRpb25LZXk6IHN0cmluZztcbiAgc2F2ZTogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEludGVyZmFjZSBmb3IgYSByZWdpc3RyeSB0aGF0IG1hbmFnZXMgdmFsaWRhdG9yIGluc3RhbmNlc1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgY29udHJhY3QgZm9yIGEgcmVnaXN0cnkgdGhhdCBzdG9yZXMgYW5kIHJldHJpZXZlcyB2YWxpZGF0b3JzLlxuICogVGhlIHJlZ2lzdHJ5IGlzIHJlc3BvbnNpYmxlIGZvciBtYWludGFpbmluZyBhIGNvbGxlY3Rpb24gb2YgdmFsaWRhdG9ycyBhbmQgcHJvdmlkaW5nXG4gKiBhY2Nlc3MgdG8gdGhlbSBieSBrZXkuXG4gKlxuICogQGludGVyZmFjZSBJVmFsaWRhdG9yUmVnaXN0cnlcbiAqIEB0ZW1wbGF0ZSBUIFR5cGUgb2YgdmFsaWRhdG9yLCBtdXN0IGV4dGVuZCBWYWxpZGF0b3JcbiAqIEBleHRlbmRzIElSZWdpc3RyeTxUPlxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVmFsaWRhdG9yUmVnaXN0cnk8VCBleHRlbmRzIFZhbGlkYXRvcj4gZXh0ZW5kcyBJUmVnaXN0cnk8VD4ge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBjdXN0b20gdmFsaWRhdGlvbiBrZXlzIGRlZmluZWQgaW4gdGhlIHJlZ2lzdHJ5XG4gICAqIEBzdW1tYXJ5IFJldHVybnMgYSBtYXBwaW5nIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGtleXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBzdGFuZGFyZCBrZXlzLlxuICAgKiBUaGlzIGFsbG93cyBmb3IgYWxpYXNpbmcgdmFsaWRhdGlvbiBrZXlzIGZvciBzcGVjaWZpYyB1c2UgY2FzZXMuXG4gICAqXG4gICAqIEByZXR1cm4ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IE9iamVjdCBtYXBwaW5nIGN1c3RvbSBrZXlzIHRvIHN0YW5kYXJkIHZhbGlkYXRpb24ga2V5c1xuICAgKi9cbiAgZ2V0Q3VzdG9tS2V5cygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyBhbGwgcmVnaXN0ZXJlZCB2YWxpZGF0b3Iga2V5c1xuICAgKiBAc3VtbWFyeSBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB2YWxpZGF0aW9uIGtleXMgdGhhdCBoYXZlIHJlZ2lzdGVyZWQgdmFsaWRhdG9ycy5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nW119IEFycmF5IG9mIHJlZ2lzdGVyZWQgdmFsaWRhdG9yIGtleXNcbiAgICovXG4gIGdldEtleXMoKTogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RlcnMgb25lIG9yIG1vcmUgdmFsaWRhdG9ycyB3aXRoIHRoZSByZWdpc3RyeVxuICAgKiBAc3VtbWFyeSBBZGRzIHZhbGlkYXRvcnMgdG8gdGhlIHJlZ2lzdHJ5LCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgZm9yIHZhbGlkYXRpb24gb3BlcmF0aW9ucy5cbiAgICogVmFsaWRhdG9ycyBjYW4gYmUgcHJvdmlkZWQgYXMgaW5zdGFuY2VzIG9yIGFzIHZhbGlkYXRvciBkZWZpbml0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHsuLi4oVHxWYWxpZGF0b3JEZWZpbml0aW9uKX0gdmFsaWRhdG9yIC0gVmFsaWRhdG9yIGluc3RhbmNlcyBvciBkZWZpbml0aW9ucyB0byByZWdpc3RlclxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgcmVnaXN0ZXI8VCBleHRlbmRzIFZhbGlkYXRvcj4oXG4gICAgLi4udmFsaWRhdG9yOiAoVCB8IFZhbGlkYXRvckRlZmluaXRpb24pW11cbiAgKTogdm9pZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhIHZhbGlkYXRvciBieSBpdHMga2V5XG4gICAqIEBzdW1tYXJ5IExvb2tzIHVwIGEgdmFsaWRhdG9yIGluIHRoZSByZWdpc3RyeSB1c2luZyBpdHMgdmFsaWRhdGlvbiBrZXkuXG4gICAqIFJldHVybnMgdGhlIHZhbGlkYXRvciBpZiBmb3VuZCwgb3IgdW5kZWZpbmVkIGlmIG5vIHZhbGlkYXRvciBpcyByZWdpc3RlcmVkIGZvciB0aGUga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHZhbGlkYXRpb24ga2V5IHRvIGxvb2sgdXAsIHR5cGljYWxseSBvbmUgb2YgdGhlIHtAbGluayBWYWxpZGF0aW9uS2V5c31cbiAgICogQHJldHVybiB7VHx1bmRlZmluZWR9IFRoZSByZWdpc3RlcmVkIHZhbGlkYXRvciBvciB1bmRlZmluZWQgaWYgbm9uZSBtYXRjaGVzIHRoZSBwcm92aWRlZCBrZXlcbiAgICovXG4gIGdldDxUIGV4dGVuZHMgVmFsaWRhdG9yPihrZXk6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEJhc2Ugb3B0aW9ucyB0eXBlIGZvciBhbGwgdmFsaWRhdG9yc1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgY29tbW9uIHByb3BlcnRpZXMgYXZhaWxhYmxlIHRvIGFsbCB2YWxpZGF0b3JzXG4gKiBAdHlwZWRlZiBWYWxpZGF0b3JPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21lc3NhZ2VdIC0gQ3VzdG9tIGVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSB3aGVuIHZhbGlkYXRpb24gZmFpbHNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIFZhbGlkYXRvck9wdGlvbnMgPSB7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBVUkwgdmFsaWRhdGlvbiBvcHRpb25zIGludGVyZmFjZVxuICogQHN1bW1hcnkgRGVmaW5lcyBvcHRpb25zIGZvciBVUkwgdmFsaWRhdGlvbiwgaW5jbHVkaW5nIGFsbG93ZWQgVVJMIHR5cGVzXG4gKiBAaW50ZXJmYWNlIFVSTFZhbGlkYXRvck9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7KHN0cmluZ3xzdHJpbmdbXXx7IG5hbWU6IHN0cmluZyB9KX0gdHlwZXMgLSBTcGVjaWZpZXMgdGhlIGFsbG93ZWQgVVJMIHR5cGVzIG9yIHBhdHRlcm5zXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVSTFZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgdHlwZXM6IHN0cmluZyB8IHN0cmluZ1tdIHwgeyBuYW1lOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVHlwZSB2YWxpZGF0aW9uIG9wdGlvbnMgaW50ZXJmYWNlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG9wdGlvbnMgZm9yIHR5cGUgdmFsaWRhdGlvbiwgc3BlY2lmeWluZyBhbGxvd2VkIHR5cGVzXG4gKiBAaW50ZXJmYWNlIFR5cGVWYWxpZGF0b3JPcHRpb25zXG4gKiBAcHJvcGVydHkgeyhzdHJpbmd8c3RyaW5nW118eyBuYW1lOiBzdHJpbmcgfSl9IHR5cGVzIC0gU3BlY2lmaWVzIHRoZSBhbGxvd2VkIGRhdGEgdHlwZXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZVZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgdHlwZXM6IHN0cmluZyB8IHN0cmluZ1tdIHwgeyBuYW1lOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU3RlcCB2YWxpZGF0aW9uIG9wdGlvbnMgaW50ZXJmYWNlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG9wdGlvbnMgZm9yIHN0ZXAgdmFsaWRhdGlvbiwgc3BlY2lmeWluZyB0aGUgc3RlcCBpbmNyZW1lbnRcbiAqIEBpbnRlcmZhY2UgU3RlcFZhbGlkYXRvck9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7KG51bWJlcnxzdHJpbmcpfSBbVmFsaWRhdGlvbktleXMuU1RFUF0gLSBUaGUgc3RlcCB2YWx1ZSBmb3IgbnVtZXJpY2FsIHZhbGlkYXRpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcFZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLlNURVBdOiBudW1iZXIgfCBzdHJpbmc7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFBhdHRlcm4gdmFsaWRhdGlvbiBvcHRpb25zIGludGVyZmFjZVxuICogQHN1bW1hcnkgRGVmaW5lcyBvcHRpb25zIGZvciBwYXR0ZXJuIHZhbGlkYXRpb24gdXNpbmcgcmVndWxhciBleHByZXNzaW9uc1xuICogQGludGVyZmFjZSBQYXR0ZXJuVmFsaWRhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHsoUmVnRXhwfHN0cmluZyl9IFtWYWxpZGF0aW9uS2V5cy5QQVRURVJOXSAtIFRoZSBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3RcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF0dGVyblZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLlBBVFRFUk5dPzogUmVnRXhwIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBNaW5pbXVtIHZhbHVlIHZhbGlkYXRpb24gb3B0aW9ucyBpbnRlcmZhY2VcbiAqIEBzdW1tYXJ5IERlZmluZXMgb3B0aW9ucyBmb3IgbWluaW11bSB2YWx1ZSB2YWxpZGF0aW9uXG4gKiBAaW50ZXJmYWNlIE1pblZhbGlkYXRvck9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7KG51bWJlcnxEYXRlfHN0cmluZyl9IFtWYWxpZGF0aW9uS2V5cy5NSU5dIC0gVGhlIG1pbmltdW0gYWxsb3dlZCB2YWx1ZVxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaW5WYWxpZGF0b3JPcHRpb25zIGV4dGVuZHMgVmFsaWRhdG9yT3B0aW9ucyB7XG4gIFtWYWxpZGF0aW9uS2V5cy5NSU5dOiBudW1iZXIgfCBEYXRlIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBNaW5pbXVtIGxlbmd0aCB2YWxpZGF0aW9uIG9wdGlvbnMgaW50ZXJmYWNlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG9wdGlvbnMgZm9yIG1pbmltdW0gbGVuZ3RoIHZhbGlkYXRpb25cbiAqIEBpbnRlcmZhY2UgTWluTGVuZ3RoVmFsaWRhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFtWYWxpZGF0aW9uS2V5cy5NSU5fTEVOR1RIXSAtIFRoZSBtaW5pbXVtIGFsbG93ZWQgbGVuZ3RoXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pbkxlbmd0aFZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLk1JTl9MRU5HVEhdOiBudW1iZXI7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1heGltdW0gdmFsdWUgdmFsaWRhdGlvbiBvcHRpb25zIGludGVyZmFjZVxuICogQHN1bW1hcnkgRGVmaW5lcyBvcHRpb25zIGZvciBtYXhpbXVtIHZhbHVlIHZhbGlkYXRpb25cbiAqIEBpbnRlcmZhY2UgTWF4VmFsaWRhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHsobnVtYmVyfERhdGV8c3RyaW5nKX0gW1ZhbGlkYXRpb25LZXlzLk1BWF0gLSBUaGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1heFZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLk1BWF06IG51bWJlciB8IERhdGUgfCBzdHJpbmc7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1heGltdW0gbGVuZ3RoIHZhbGlkYXRpb24gb3B0aW9ucyBpbnRlcmZhY2VcbiAqIEBzdW1tYXJ5IERlZmluZXMgb3B0aW9ucyBmb3IgbWF4aW11bSBsZW5ndGggdmFsaWRhdGlvblxuICogQGludGVyZmFjZSBNYXhMZW5ndGhWYWxpZGF0b3JPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gW1ZhbGlkYXRpb25LZXlzLk1BWF9MRU5HVEhdIC0gVGhlIG1heGltdW0gYWxsb3dlZCBsZW5ndGhcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF4TGVuZ3RoVmFsaWRhdG9yT3B0aW9ucyBleHRlbmRzIFZhbGlkYXRvck9wdGlvbnMge1xuICBbVmFsaWRhdGlvbktleXMuTUFYX0xFTkdUSF06IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTGlzdCB2YWxpZGF0aW9uIG9wdGlvbnMgaW50ZXJmYWNlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG9wdGlvbnMgZm9yIGxpc3QgdmFsaWRhdGlvblxuICogQGludGVyZmFjZSBMaXN0VmFsaWRhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gY2xhenogLSBBcnJheSBvZiBhbGxvd2VkIGNsYXNzIG5hbWVzIG9yIHR5cGVzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RWYWxpZGF0b3JPcHRpb25zIGV4dGVuZHMgVmFsaWRhdG9yT3B0aW9ucyB7XG4gIGNsYXp6OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGF0ZSB2YWxpZGF0aW9uIG9wdGlvbnMgaW50ZXJmYWNlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG9wdGlvbnMgZm9yIGRhdGUgdmFsaWRhdGlvblxuICogQGludGVyZmFjZSBEYXRlVmFsaWRhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtWYWxpZGF0aW9uS2V5cy5GT1JNQVRdIC0gVGhlIGV4cGVjdGVkIGRhdGUgZm9ybWF0IHBhdHRlcm5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZVZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLkZPUk1BVF0/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXF1YWxzVmFsaWRhdG9yT3B0aW9ucyBleHRlbmRzIFZhbGlkYXRvck9wdGlvbnMge1xuICBbVmFsaWRhdGlvbktleXMuRVFVQUxTXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpZmZWYWxpZGF0b3JPcHRpb25zIGV4dGVuZHMgVmFsaWRhdG9yT3B0aW9ucyB7XG4gIFtWYWxpZGF0aW9uS2V5cy5ESUZGXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExlc3NUaGFuVmFsaWRhdG9yT3B0aW9ucyBleHRlbmRzIFZhbGlkYXRvck9wdGlvbnMge1xuICBbVmFsaWRhdGlvbktleXMuTEVTU19USEFOXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExlc3NUaGFuT3JFcXVhbFZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLkxFU1NfVEhBTl9PUl9FUVVBTF06IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmVhdGVyVGhhblZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLkdSRUFURVJfVEhBTl06IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmVhdGVyVGhhbk9yRXF1YWxWYWxpZGF0b3JPcHRpb25zIGV4dGVuZHMgVmFsaWRhdG9yT3B0aW9ucyB7XG4gIFtWYWxpZGF0aW9uS2V5cy5HUkVBVEVSX1RIQU5fT1JfRVFVQUxdOiBzdHJpbmc7XG59XG4iXX0=
|
|
1
|
+
import { ValidationKeys } from "./Validators/index.js";
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdmFsaWRhdGlvbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsY0FBYyxFQUFhLDhCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlY29yYXRvck1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciB9IGZyb20gXCIuLi9tb2RlbFwiO1xuaW1wb3J0IHsgVmFsaWRhdGlvbktleXMsIFZhbGlkYXRvciB9IGZyb20gXCIuL1ZhbGlkYXRvcnNcIjtcbmltcG9ydCB7IElSZWdpc3RyeSB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUeXBlIGRlZmluaXRpb24gZm9yIG1ldGFkYXRhIHVzZWQgYnkgdmFsaWRhdGlvbiBkZWNvcmF0b3JzXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgb2YgbWV0YWRhdGEgYXR0YWNoZWQgdG8gcHJvcGVydGllcyBieSB2YWxpZGF0aW9uIGRlY29yYXRvcnMuXG4gKiBUaGlzIG1ldGFkYXRhIGlzIHVzZWQgZHVyaW5nIHZhbGlkYXRpb24gdG8gZGV0ZXJtaW5lIHZhbGlkYXRpb24gcnVsZXMgYW5kIGVycm9yIG1lc3NhZ2VzLlxuICpcbiAqIEBwcm9wZXJ0eSB7YW55W119IFthcmdzXSAtIE9wdGlvbmFsIGFyZ3VtZW50cyBmb3IgdGhlIHZhbGlkYXRvclxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1lc3NhZ2UgLSBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgd2hlbiB2YWxpZGF0aW9uIGZhaWxzXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbdHlwZXNdIC0gQXJyYXkgb2YgdHlwZSBuYW1lcyB0aGF0IHRoZSBwcm9wZXJ0eSBjYW4gaGF2ZVxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFZhbGlkYXRpb25NZXRhZGF0YVxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdGlvbk1ldGFkYXRhID0ge1xuICBbaW5kZXhlcjogc3RyaW5nXTogYW55O1xuICBhcmdzPzogYW55W107XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgdHlwZXM/OiBzdHJpbmdbXTtcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFR5cGUgZGVmaW5pdGlvbiBmb3IgcHJvcGVydHktbGV2ZWwgdmFsaWRhdGlvbiBkZWNvcmF0b3IgY29uZmlndXJhdGlvblxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgc3RydWN0dXJlIHRoYXQgYXNzb2NpYXRlcyBhIHByb3BlcnR5IHdpdGggaXRzIHZhbGlkYXRpb24gZGVjb3JhdG9ycy5cbiAqIFRoaXMgdHlwZSBpcyB1c2VkIHRvIHRyYWNrIHdoaWNoIGRlY29yYXRvcnMgYXJlIGFwcGxpZWQgdG8gYSBzcGVjaWZpYyBwcm9wZXJ0eSBkdXJpbmcgdmFsaWRhdGlvbi5cbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ3xzeW1ib2x9IHByb3AgLSBUaGUgcHJvcGVydHkgbmFtZSBvciBzeW1ib2wgdGhhdCB0aGUgZGVjb3JhdG9ycyBhcmUgYXBwbGllZCB0b1xuICogQHByb3BlcnR5IHtWYWxpZGF0aW9uRGVjb3JhdG9yRGVmaW5pdGlvbltdfSBkZWNvcmF0b3JzIC0gQXJyYXkgb2YgZGVjb3JhdG9yIGRlZmluaXRpb25zIGFwcGxpZWQgdG8gdGhlIHByb3BlcnR5XG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gVmFsaWRhdGlvblByb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdGlvblByb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvbiA9IHtcbiAgcHJvcDogc3RyaW5nIHwgc3ltYm9sO1xuICBkZWNvcmF0b3JzOiBWYWxpZGF0aW9uRGVjb3JhdG9yRGVmaW5pdGlvbltdO1xufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVHlwZSBkZWZpbml0aW9uIGZvciBpbmRpdmlkdWFsIHZhbGlkYXRpb24gZGVjb3JhdG9yIG1ldGFkYXRhXG4gKiBAc3VtbWFyeSBFeHRlbmRzIHRoZSBiYXNlIERlY29yYXRvck1ldGFkYXRhIHR5cGUgd2l0aCB2YWxpZGF0aW9uLXNwZWNpZmljIHByb3BlcnRpZXMuXG4gKiBUaGlzIHR5cGUgcmVwcmVzZW50cyB0aGUgbWV0YWRhdGEgZm9yIGEgc2luZ2xlIHZhbGlkYXRpb24gZGVjb3JhdG9yIGFwcGxpZWQgdG8gYSBwcm9wZXJ0eS5cbiAqXG4gKiBAcHJvcGVydHkge1ZhbGlkYXRpb25FbGVtZW50RGVmaW5pdGlvbn0gcHJvcHMgLSBUaGUgdmFsaWRhdGlvbiBlbGVtZW50IHByb3BlcnRpZXMgYW5kIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBWYWxpZGF0aW9uRGVjb3JhdG9yRGVmaW5pdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdGlvbkRlY29yYXRvckRlZmluaXRpb24gPSBEZWNvcmF0b3JNZXRhZGF0YSAmIHtcbiAgcHJvcHM6IFZhbGlkYXRpb25FbGVtZW50RGVmaW5pdGlvbjtcbn07XG5cbi8qKlxuICogQHN1bW1hcnkgVHlwZSBmb3IgYSB2YWxpZGF0b3IgZWxlbWVudCBtZXRhZGF0YVxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdGlvbkVsZW1lbnREZWZpbml0aW9uID0ge1xuICBbaW5kZXhlcjogc3RyaW5nXTogYW55O1xuXG4gIHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHR5cGVzPzogc3RyaW5nW107XG59O1xuXG4vKipcbiAqIEBzdW1tYXJ5IFR5cGUgZm9yIGEgbW9kZWwgZXJyb3JzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgdHlwZSBNb2RlbEVycm9ycyA9IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4+O1xuXG4vKipcbiAqIEBzdW1tYXJ5IFV0aWwgdHlwZSBmb3Ige0BsaW5rIFZhbGlkYXRvcn0gY29uZmlndXJhdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdG9yRGVmaW5pdGlvbiA9IHtcbiAgdmFsaWRhdG9yOiBDb25zdHJ1Y3RvcjxWYWxpZGF0b3I+O1xuICB2YWxpZGF0aW9uS2V5OiBzdHJpbmc7XG4gIHNhdmU6IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBJbnRlcmZhY2UgZm9yIGEgcmVnaXN0cnkgdGhhdCBtYW5hZ2VzIHZhbGlkYXRvciBpbnN0YW5jZXNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGNvbnRyYWN0IGZvciBhIHJlZ2lzdHJ5IHRoYXQgc3RvcmVzIGFuZCByZXRyaWV2ZXMgdmFsaWRhdG9ycy5cbiAqIFRoZSByZWdpc3RyeSBpcyByZXNwb25zaWJsZSBmb3IgbWFpbnRhaW5pbmcgYSBjb2xsZWN0aW9uIG9mIHZhbGlkYXRvcnMgYW5kIHByb3ZpZGluZ1xuICogYWNjZXNzIHRvIHRoZW0gYnkga2V5LlxuICpcbiAqIEBpbnRlcmZhY2UgSVZhbGlkYXRvclJlZ2lzdHJ5XG4gKiBAdGVtcGxhdGUgVCBUeXBlIG9mIHZhbGlkYXRvciwgbXVzdCBleHRlbmQgVmFsaWRhdG9yXG4gKiBAZXh0ZW5kcyBJUmVnaXN0cnk8VD5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkYXRvclJlZ2lzdHJ5PFQgZXh0ZW5kcyBWYWxpZGF0b3I+IGV4dGVuZHMgSVJlZ2lzdHJ5PFQ+IHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgY3VzdG9tIHZhbGlkYXRpb24ga2V5cyBkZWZpbmVkIGluIHRoZSByZWdpc3RyeVxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIGEgbWFwcGluZyBvZiBjdXN0b20gdmFsaWRhdGlvbiBrZXlzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgc3RhbmRhcmQga2V5cy5cbiAgICogVGhpcyBhbGxvd3MgZm9yIGFsaWFzaW5nIHZhbGlkYXRpb24ga2V5cyBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzLlxuICAgKlxuICAgKiBAcmV0dXJuIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBPYmplY3QgbWFwcGluZyBjdXN0b20ga2V5cyB0byBzdGFuZGFyZCB2YWxpZGF0aW9uIGtleXNcbiAgICovXG4gIGdldEN1c3RvbUtleXMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgYWxsIHJlZ2lzdGVyZWQgdmFsaWRhdG9yIGtleXNcbiAgICogQHN1bW1hcnkgUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdmFsaWRhdGlvbiBrZXlzIHRoYXQgaGF2ZSByZWdpc3RlcmVkIHZhbGlkYXRvcnMuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfSBBcnJheSBvZiByZWdpc3RlcmVkIHZhbGlkYXRvciBrZXlzXG4gICAqL1xuICBnZXRLZXlzKCk6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVnaXN0ZXJzIG9uZSBvciBtb3JlIHZhbGlkYXRvcnMgd2l0aCB0aGUgcmVnaXN0cnlcbiAgICogQHN1bW1hcnkgQWRkcyB2YWxpZGF0b3JzIHRvIHRoZSByZWdpc3RyeSwgbWFraW5nIHRoZW0gYXZhaWxhYmxlIGZvciB2YWxpZGF0aW9uIG9wZXJhdGlvbnMuXG4gICAqIFZhbGlkYXRvcnMgY2FuIGJlIHByb3ZpZGVkIGFzIGluc3RhbmNlcyBvciBhcyB2YWxpZGF0b3IgZGVmaW5pdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7Li4uKFR8VmFsaWRhdG9yRGVmaW5pdGlvbil9IHZhbGlkYXRvciAtIFZhbGlkYXRvciBpbnN0YW5jZXMgb3IgZGVmaW5pdGlvbnMgdG8gcmVnaXN0ZXJcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHJlZ2lzdGVyPFQgZXh0ZW5kcyBWYWxpZGF0b3I+KFxuICAgIC4uLnZhbGlkYXRvcjogKFQgfCBWYWxpZGF0b3JEZWZpbml0aW9uKVtdXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSB2YWxpZGF0b3IgYnkgaXRzIGtleVxuICAgKiBAc3VtbWFyeSBMb29rcyB1cCBhIHZhbGlkYXRvciBpbiB0aGUgcmVnaXN0cnkgdXNpbmcgaXRzIHZhbGlkYXRpb24ga2V5LlxuICAgKiBSZXR1cm5zIHRoZSB2YWxpZGF0b3IgaWYgZm91bmQsIG9yIHVuZGVmaW5lZCBpZiBubyB2YWxpZGF0b3IgaXMgcmVnaXN0ZXJlZCBmb3IgdGhlIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSB2YWxpZGF0aW9uIGtleSB0byBsb29rIHVwLCB0eXBpY2FsbHkgb25lIG9mIHRoZSB7QGxpbmsgVmFsaWRhdGlvbktleXN9XG4gICAqIEByZXR1cm4ge1R8dW5kZWZpbmVkfSBUaGUgcmVnaXN0ZXJlZCB2YWxpZGF0b3Igb3IgdW5kZWZpbmVkIGlmIG5vbmUgbWF0Y2hlcyB0aGUgcHJvdmlkZWQga2V5XG4gICAqL1xuICBnZXQ8VCBleHRlbmRzIFZhbGlkYXRvcj4oa2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCYXNlIG9wdGlvbnMgdHlwZSBmb3IgYWxsIHZhbGlkYXRvcnNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGNvbW1vbiBwcm9wZXJ0aWVzIGF2YWlsYWJsZSB0byBhbGwgdmFsaWRhdG9yc1xuICogQGludGVyZmFjZSBWYWxpZGF0b3JPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21lc3NhZ2VdIC0gQ3VzdG9tIGVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSB3aGVuIHZhbGlkYXRpb24gZmFpbHNcbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdG9yT3B0aW9ucyB7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBVUkwgdmFsaWRhdGlvbiBvcHRpb25zIGludGVyZmFjZVxuICogQHN1bW1hcnkgRGVmaW5lcyBvcHRpb25zIGZvciBVUkwgdmFsaWRhdGlvbiwgaW5jbHVkaW5nIGFsbG93ZWQgVVJMIHR5cGVzXG4gKiBAaW50ZXJmYWNlIFVSTFZhbGlkYXRvck9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7KHN0cmluZ3xzdHJpbmdbXXx7IG5hbWU6IHN0cmluZyB9KX0gdHlwZXMgLSBTcGVjaWZpZXMgdGhlIGFsbG93ZWQgVVJMIHR5cGVzIG9yIHBhdHRlcm5zXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVSTFZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgdHlwZXM6IHN0cmluZyB8IHN0cmluZ1tdIHwgeyBuYW1lOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVHlwZSB2YWxpZGF0aW9uIG9wdGlvbnMgaW50ZXJmYWNlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG9wdGlvbnMgZm9yIHR5cGUgdmFsaWRhdGlvbiwgc3BlY2lmeWluZyBhbGxvd2VkIHR5cGVzXG4gKiBAaW50ZXJmYWNlIFR5cGVWYWxpZGF0b3JPcHRpb25zXG4gKiBAcHJvcGVydHkgeyhzdHJpbmd8c3RyaW5nW118eyBuYW1lOiBzdHJpbmcgfSl9IHR5cGVzIC0gU3BlY2lmaWVzIHRoZSBhbGxvd2VkIGRhdGEgdHlwZXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZVZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgdHlwZXM6IHN0cmluZyB8IHN0cmluZ1tdIHwgeyBuYW1lOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU3RlcCB2YWxpZGF0aW9uIG9wdGlvbnMgaW50ZXJmYWNlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG9wdGlvbnMgZm9yIHN0ZXAgdmFsaWRhdGlvbiwgc3BlY2lmeWluZyB0aGUgc3RlcCBpbmNyZW1lbnRcbiAqIEBpbnRlcmZhY2UgU3RlcFZhbGlkYXRvck9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7KG51bWJlcnxzdHJpbmcpfSBbVmFsaWRhdGlvbktleXMuU1RFUF0gLSBUaGUgc3RlcCB2YWx1ZSBmb3IgbnVtZXJpY2FsIHZhbGlkYXRpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcFZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLlNURVBdOiBudW1iZXIgfCBzdHJpbmc7XG4gIHR5cGVzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFBhdHRlcm4gdmFsaWRhdGlvbiBvcHRpb25zIGludGVyZmFjZVxuICogQHN1bW1hcnkgRGVmaW5lcyBvcHRpb25zIGZvciBwYXR0ZXJuIHZhbGlkYXRpb24gdXNpbmcgcmVndWxhciBleHByZXNzaW9uc1xuICogQGludGVyZmFjZSBQYXR0ZXJuVmFsaWRhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHsoUmVnRXhwfHN0cmluZyl9IFtWYWxpZGF0aW9uS2V5cy5QQVRURVJOXSAtIFRoZSBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3RcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF0dGVyblZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLlBBVFRFUk5dPzogUmVnRXhwIHwgc3RyaW5nO1xuICB0eXBlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBNaW5pbXVtIHZhbHVlIHZhbGlkYXRpb24gb3B0aW9ucyBpbnRlcmZhY2VcbiAqIEBzdW1tYXJ5IERlZmluZXMgb3B0aW9ucyBmb3IgbWluaW11bSB2YWx1ZSB2YWxpZGF0aW9uXG4gKiBAaW50ZXJmYWNlIE1pblZhbGlkYXRvck9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7KG51bWJlcnxEYXRlfHN0cmluZyl9IFtWYWxpZGF0aW9uS2V5cy5NSU5dIC0gVGhlIG1pbmltdW0gYWxsb3dlZCB2YWx1ZVxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaW5WYWxpZGF0b3JPcHRpb25zIGV4dGVuZHMgVmFsaWRhdG9yT3B0aW9ucyB7XG4gIFtWYWxpZGF0aW9uS2V5cy5NSU5dOiBudW1iZXIgfCBEYXRlIHwgc3RyaW5nO1xuICB0eXBlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBNaW5pbXVtIGxlbmd0aCB2YWxpZGF0aW9uIG9wdGlvbnMgaW50ZXJmYWNlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG9wdGlvbnMgZm9yIG1pbmltdW0gbGVuZ3RoIHZhbGlkYXRpb25cbiAqIEBpbnRlcmZhY2UgTWluTGVuZ3RoVmFsaWRhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFtWYWxpZGF0aW9uS2V5cy5NSU5fTEVOR1RIXSAtIFRoZSBtaW5pbXVtIGFsbG93ZWQgbGVuZ3RoXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pbkxlbmd0aFZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLk1JTl9MRU5HVEhdOiBudW1iZXI7XG4gIHR5cGVzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1heGltdW0gdmFsdWUgdmFsaWRhdGlvbiBvcHRpb25zIGludGVyZmFjZVxuICogQHN1bW1hcnkgRGVmaW5lcyBvcHRpb25zIGZvciBtYXhpbXVtIHZhbHVlIHZhbGlkYXRpb25cbiAqIEBpbnRlcmZhY2UgTWF4VmFsaWRhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHsobnVtYmVyfERhdGV8c3RyaW5nKX0gW1ZhbGlkYXRpb25LZXlzLk1BWF0gLSBUaGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1heFZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLk1BWF06IG51bWJlciB8IERhdGUgfCBzdHJpbmc7XG4gIHR5cGVzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1heGltdW0gbGVuZ3RoIHZhbGlkYXRpb24gb3B0aW9ucyBpbnRlcmZhY2VcbiAqIEBzdW1tYXJ5IERlZmluZXMgb3B0aW9ucyBmb3IgbWF4aW11bSBsZW5ndGggdmFsaWRhdGlvblxuICogQGludGVyZmFjZSBNYXhMZW5ndGhWYWxpZGF0b3JPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gW1ZhbGlkYXRpb25LZXlzLk1BWF9MRU5HVEhdIC0gVGhlIG1heGltdW0gYWxsb3dlZCBsZW5ndGhcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF4TGVuZ3RoVmFsaWRhdG9yT3B0aW9ucyBleHRlbmRzIFZhbGlkYXRvck9wdGlvbnMge1xuICBbVmFsaWRhdGlvbktleXMuTUFYX0xFTkdUSF06IG51bWJlcjtcbiAgdHlwZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTGlzdCB2YWxpZGF0aW9uIG9wdGlvbnMgaW50ZXJmYWNlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG9wdGlvbnMgZm9yIGxpc3QgdmFsaWRhdGlvblxuICogQGludGVyZmFjZSBMaXN0VmFsaWRhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gY2xhenogLSBBcnJheSBvZiBhbGxvd2VkIGNsYXNzIG5hbWVzIG9yIHR5cGVzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RWYWxpZGF0b3JPcHRpb25zIGV4dGVuZHMgVmFsaWRhdG9yT3B0aW9ucyB7XG4gIGNsYXp6OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGF0ZSB2YWxpZGF0aW9uIG9wdGlvbnMgaW50ZXJmYWNlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG9wdGlvbnMgZm9yIGRhdGUgdmFsaWRhdGlvblxuICogQGludGVyZmFjZSBEYXRlVmFsaWRhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtWYWxpZGF0aW9uS2V5cy5GT1JNQVRdIC0gVGhlIGV4cGVjdGVkIGRhdGUgZm9ybWF0IHBhdHRlcm5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZVZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLkZPUk1BVF0/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXF1YWxzVmFsaWRhdG9yT3B0aW9ucyBleHRlbmRzIFZhbGlkYXRvck9wdGlvbnMge1xuICBbVmFsaWRhdGlvbktleXMuRVFVQUxTXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpZmZWYWxpZGF0b3JPcHRpb25zIGV4dGVuZHMgVmFsaWRhdG9yT3B0aW9ucyB7XG4gIFtWYWxpZGF0aW9uS2V5cy5ESUZGXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExlc3NUaGFuVmFsaWRhdG9yT3B0aW9ucyBleHRlbmRzIFZhbGlkYXRvck9wdGlvbnMge1xuICBbVmFsaWRhdGlvbktleXMuTEVTU19USEFOXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExlc3NUaGFuT3JFcXVhbFZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLkxFU1NfVEhBTl9PUl9FUVVBTF06IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmVhdGVyVGhhblZhbGlkYXRvck9wdGlvbnMgZXh0ZW5kcyBWYWxpZGF0b3JPcHRpb25zIHtcbiAgW1ZhbGlkYXRpb25LZXlzLkdSRUFURVJfVEhBTl06IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmVhdGVyVGhhbk9yRXF1YWxWYWxpZGF0b3JPcHRpb25zIGV4dGVuZHMgVmFsaWRhdG9yT3B0aW9ucyB7XG4gIFtWYWxpZGF0aW9uS2V5cy5HUkVBVEVSX1RIQU5fT1JfRVFVQUxdOiBzdHJpbmc7XG59XG4iXX0=
|
package/lib/index.cjs
CHANGED
|
@@ -32,5 +32,5 @@ __exportStar(require("./model/index.cjs"), exports);
|
|
|
32
32
|
* @const VERSION
|
|
33
33
|
* @memberOf module:decorator-validation
|
|
34
34
|
*/
|
|
35
|
-
exports.VERSION = "1.7.
|
|
35
|
+
exports.VERSION = "1.7.6";
|
|
36
36
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7O0dBTUc7QUFDSCx3REFBNEI7QUFDNUIsb0RBQXdCO0FBQ3hCLHlEQUE2QjtBQUM3QixvREFBd0I7QUFFeEI7Ozs7O0dBS0c7QUFDVSxRQUFBLE9BQU8sR0FBRyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBkZXNjcmlwdGlvbiBUeXBlU2NyaXB0IGRlY29yYXRvci1iYXNlZCB2YWxpZGF0aW9uIGxpYnJhcnlcbiAqIEBzdW1tYXJ5IFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSB2YWxpZGF0aW9uIGZyYW1ld29yayB1c2luZyBUeXBlU2NyaXB0IGRlY29yYXRvcnMuXG4gKiBJdCBleHBvc2VzIHV0aWxpdHkgZnVuY3Rpb25zLCB2YWxpZGF0aW9uIGRlY29yYXRvcnMsIGFuZCBtb2RlbC1yZWxhdGVkIGZ1bmN0aW9uYWxpdHkgZm9yXG4gKiBpbXBsZW1lbnRpbmcgdHlwZS1zYWZlLCBkZWNsYXJhdGl2ZSB2YWxpZGF0aW9uIGluIFR5cGVTY3JpcHQgYXBwbGljYXRpb25zLlxuICovXG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92YWxpZGF0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tb2RlbFwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHZlcnNpb24gb2YgdGhlIHJlZmxlY3Rpb24gcGFja2FnZVxuICogQHN1bW1hcnkgU3RvcmVzIHRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlciBvZiB0aGUgcGFja2FnZVxuICogQGNvbnN0IFZFUlNJT05cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIiMjVkVSU0lPTiMjXCI7XG4iXX0=
|
package/lib/index.d.ts
CHANGED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ModelContextProtocol = void 0;
|
|
4
|
+
const fastmcp_1 = require("fastmcp");
|
|
5
|
+
const logging_1 = require("@decaf-ts/logging");
|
|
6
|
+
class ModelContextProtocol {
|
|
7
|
+
get log() {
|
|
8
|
+
return logging_1.Logging.for(this);
|
|
9
|
+
}
|
|
10
|
+
constructor(mcp) {
|
|
11
|
+
this.mcp = mcp;
|
|
12
|
+
}
|
|
13
|
+
static { this.Builder = class Builder {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.tools = {};
|
|
16
|
+
this.log = logging_1.Logging.for("MCP Builder");
|
|
17
|
+
}
|
|
18
|
+
setName(value) {
|
|
19
|
+
this.name = value;
|
|
20
|
+
this.log.debug(`name set to ${value}`);
|
|
21
|
+
return this;
|
|
22
|
+
}
|
|
23
|
+
setVersion(value) {
|
|
24
|
+
this.version = ModelContextProtocol.validateVersion(value);
|
|
25
|
+
this.log.debug(`version set to ${value}`);
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
addTool(config) {
|
|
29
|
+
const { name } = config;
|
|
30
|
+
if (name in this.tools)
|
|
31
|
+
throw new Error(`tool ${name} already registered`);
|
|
32
|
+
this.tools[name] = config;
|
|
33
|
+
this.log.debug(`tool ${name} added`);
|
|
34
|
+
return this;
|
|
35
|
+
}
|
|
36
|
+
build() {
|
|
37
|
+
if (!this.name)
|
|
38
|
+
throw new Error("name is required");
|
|
39
|
+
if (!this.version)
|
|
40
|
+
throw new Error("version is required");
|
|
41
|
+
const mcp = new fastmcp_1.FastMCP({
|
|
42
|
+
name: this.name,
|
|
43
|
+
version: this.version,
|
|
44
|
+
});
|
|
45
|
+
Object.values(this.tools).forEach((tool) => {
|
|
46
|
+
try {
|
|
47
|
+
mcp.addTool(tool);
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
throw new Error(`Failed to add tool ${tool.name}: ${e}`);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
this.log.info(`${this.name} MCP built`);
|
|
54
|
+
this.log.debug(`${this.name} MCP - available tools: ${Object.keys(this.tools).join(", ")}`);
|
|
55
|
+
return new ModelContextProtocol(mcp);
|
|
56
|
+
}
|
|
57
|
+
}; }
|
|
58
|
+
static get builder() {
|
|
59
|
+
return new ModelContextProtocol.Builder();
|
|
60
|
+
}
|
|
61
|
+
static validateVersion(version) {
|
|
62
|
+
const regexp = /(\d+)\.(\d+)\.(\d+)/g;
|
|
63
|
+
const match = regexp.exec(version);
|
|
64
|
+
if (!match)
|
|
65
|
+
throw new Error(`Invalid version string. should obey semantic versioning: ${version}`);
|
|
66
|
+
return `${match[1]}.${match[2]}.${match[3]}`;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.ModelContextProtocol = ModelContextProtocol;
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWxDb250ZXh0UHJvdG9jb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWNwL01vZGVsQ29udGV4dFByb3RvY29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUF3QztBQUN4QywrQ0FBb0Q7QUFHcEQsTUFBYSxvQkFBb0I7SUFDL0IsSUFBYyxHQUFHO1FBQ2YsT0FBTyxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxJQUFXLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsWUFBK0IsR0FBa0I7UUFBbEIsUUFBRyxHQUFILEdBQUcsQ0FBZTtJQUFHLENBQUM7YUFFckMsWUFBTyxHQUFHLE1BQU0sT0FBTztRQU9yQztZQUpBLFVBQUssR0FBbUMsRUFBRSxDQUFDO1lBRTNDLFFBQUcsR0FBRyxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVsQixDQUFDO1FBRWhCLE9BQU8sQ0FBQyxLQUFhO1lBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGVBQWUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN2QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxVQUFVLENBQUMsS0FBYTtZQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMxQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPLENBQ0wsTUFBdUI7WUFFdkIsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUN4QixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSztnQkFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUkscUJBQXFCLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLENBQUM7WUFDckMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsS0FBSztZQUdILElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUMxRCxNQUFNLEdBQUcsR0FBRyxJQUFJLGlCQUFPLENBQU87Z0JBQzVCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87YUFDdEIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQztvQkFDSCxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQixDQUFDO2dCQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7b0JBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDM0QsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FDWixHQUFHLElBQUksQ0FBQyxJQUFJLDJCQUEyQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDNUUsQ0FBQztZQUNGLE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxDQUFDO0tBQ0YsQ0FBQztJQUVGLE1BQU0sS0FBSyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRU8sTUFBTSxDQUFDLGVBQWUsQ0FDNUIsT0FBZTtRQUVmLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUs7WUFDUixNQUFNLElBQUksS0FBSyxDQUNiLDREQUE0RCxPQUFPLEVBQUUsQ0FDdEUsQ0FBQztRQUNKLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBcUMsQ0FBQztJQUNsRixDQUFDOztBQTdFSCxvREE4RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGYXN0TUNQLCBUb29sIH0gZnJvbSBcImZhc3RtY3BcIjtcbmltcG9ydCB7IExvZ2dlciwgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgRmFzdE1DUFNlc3Npb25BdXRoIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IGNsYXNzIE1vZGVsQ29udGV4dFByb3RvY29sPEF1dGggZXh0ZW5kcyBGYXN0TUNQU2Vzc2lvbkF1dGggPSB1bmRlZmluZWQ+IHtcbiAgcHJvdGVjdGVkIGdldCBsb2coKTogTG9nZ2VyIHtcbiAgICByZXR1cm4gTG9nZ2luZy5mb3IodGhpcyBhcyBhbnkpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IG1jcDogRmFzdE1DUDxBdXRoPikge31cblxuICBzdGF0aWMgcmVhZG9ubHkgQnVpbGRlciA9IGNsYXNzIEJ1aWxkZXIge1xuICAgIG5hbWUhOiBzdHJpbmc7XG4gICAgdmVyc2lvbiE6IGAke251bWJlcn0uJHtudW1iZXJ9LiR7bnVtYmVyfWA7XG4gICAgdG9vbHM6IFJlY29yZDxzdHJpbmcsIFRvb2w8YW55LCBhbnk+PiA9IHt9O1xuXG4gICAgbG9nID0gTG9nZ2luZy5mb3IoXCJNQ1AgQnVpbGRlclwiKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge31cblxuICAgIHNldE5hbWUodmFsdWU6IHN0cmluZykge1xuICAgICAgdGhpcy5uYW1lID0gdmFsdWU7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgbmFtZSBzZXQgdG8gJHt2YWx1ZX1gKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHNldFZlcnNpb24odmFsdWU6IHN0cmluZykge1xuICAgICAgdGhpcy52ZXJzaW9uID0gTW9kZWxDb250ZXh0UHJvdG9jb2wudmFsaWRhdGVWZXJzaW9uKHZhbHVlKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGB2ZXJzaW9uIHNldCB0byAke3ZhbHVlfWApO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgYWRkVG9vbDxBdXRoIGV4dGVuZHMgRmFzdE1DUFNlc3Npb25BdXRoID0gdW5kZWZpbmVkPihcbiAgICAgIGNvbmZpZzogVG9vbDxBdXRoLCBhbnk+XG4gICAgKSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGNvbmZpZztcbiAgICAgIGlmIChuYW1lIGluIHRoaXMudG9vbHMpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdG9vbCAke25hbWV9IGFscmVhZHkgcmVnaXN0ZXJlZGApO1xuICAgICAgdGhpcy50b29sc1tuYW1lXSA9IGNvbmZpZztcbiAgICAgIHRoaXMubG9nLmRlYnVnKGB0b29sICR7bmFtZX0gYWRkZWRgKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGJ1aWxkPFxuICAgICAgQXV0aCBleHRlbmRzIEZhc3RNQ1BTZXNzaW9uQXV0aCA9IHVuZGVmaW5lZCxcbiAgICA+KCk6IE1vZGVsQ29udGV4dFByb3RvY29sPEF1dGg+IHtcbiAgICAgIGlmICghdGhpcy5uYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJuYW1lIGlzIHJlcXVpcmVkXCIpO1xuICAgICAgaWYgKCF0aGlzLnZlcnNpb24pIHRocm93IG5ldyBFcnJvcihcInZlcnNpb24gaXMgcmVxdWlyZWRcIik7XG4gICAgICBjb25zdCBtY3AgPSBuZXcgRmFzdE1DUDxBdXRoPih7XG4gICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgfSk7XG4gICAgICBPYmplY3QudmFsdWVzKHRoaXMudG9vbHMpLmZvckVhY2goKHRvb2wpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtY3AuYWRkVG9vbCh0b29sKTtcbiAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGFkZCB0b29sICR7dG9vbC5uYW1lfTogJHtlfWApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9nLmluZm8oYCR7dGhpcy5uYW1lfSBNQ1AgYnVpbHRgKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKFxuICAgICAgICBgJHt0aGlzLm5hbWV9IE1DUCAtIGF2YWlsYWJsZSB0b29sczogJHtPYmplY3Qua2V5cyh0aGlzLnRvb2xzKS5qb2luKFwiLCBcIil9YFxuICAgICAgKTtcbiAgICAgIHJldHVybiBuZXcgTW9kZWxDb250ZXh0UHJvdG9jb2wobWNwKTtcbiAgICB9XG4gIH07XG5cbiAgc3RhdGljIGdldCBidWlsZGVyKCkge1xuICAgIHJldHVybiBuZXcgTW9kZWxDb250ZXh0UHJvdG9jb2wuQnVpbGRlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVWZXJzaW9uKFxuICAgIHZlcnNpb246IHN0cmluZ1xuICApOiBgJHtudW1iZXJ9LiR7bnVtYmVyfS4ke251bWJlcn1gIHtcbiAgICBjb25zdCByZWdleHAgPSAvKFxcZCspXFwuKFxcZCspXFwuKFxcZCspL2c7XG4gICAgY29uc3QgbWF0Y2ggPSByZWdleHAuZXhlYyh2ZXJzaW9uKTtcbiAgICBpZiAoIW1hdGNoKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCB2ZXJzaW9uIHN0cmluZy4gc2hvdWxkIG9iZXkgc2VtYW50aWMgdmVyc2lvbmluZzogJHt2ZXJzaW9ufWBcbiAgICAgICk7XG4gICAgcmV0dXJuIGAke21hdGNoWzFdfS4ke21hdGNoWzJdfS4ke21hdGNoWzNdfWAgYXMgYCR7bnVtYmVyfS4ke251bWJlcn0uJHtudW1iZXJ9YDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { FastMCP, Tool } from "fastmcp";
|
|
2
|
+
import { Logger } from "@decaf-ts/logging";
|
|
3
|
+
import { FastMCPSessionAuth } from "./types";
|
|
4
|
+
export declare class ModelContextProtocol<Auth extends FastMCPSessionAuth = undefined> {
|
|
5
|
+
protected readonly mcp: FastMCP<Auth>;
|
|
6
|
+
protected get log(): Logger;
|
|
7
|
+
constructor(mcp: FastMCP<Auth>);
|
|
8
|
+
static readonly Builder: {
|
|
9
|
+
new (): {
|
|
10
|
+
name: string;
|
|
11
|
+
version: `${number}.${number}.${number}`;
|
|
12
|
+
tools: Record<string, Tool<any, any>>;
|
|
13
|
+
log: Logger;
|
|
14
|
+
setName(value: string): /*elided*/ any;
|
|
15
|
+
setVersion(value: string): /*elided*/ any;
|
|
16
|
+
addTool<Auth_1 extends FastMCPSessionAuth = undefined>(config: Tool<Auth_1, any>): /*elided*/ any;
|
|
17
|
+
build<Auth_1 extends FastMCPSessionAuth = undefined>(): ModelContextProtocol<Auth_1>;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
static get builder(): {
|
|
21
|
+
name: string;
|
|
22
|
+
version: `${number}.${number}.${number}`;
|
|
23
|
+
tools: Record<string, Tool<any, any>>;
|
|
24
|
+
log: Logger;
|
|
25
|
+
setName(value: string): /*elided*/ any;
|
|
26
|
+
setVersion(value: string): /*elided*/ any;
|
|
27
|
+
addTool<Auth extends FastMCPSessionAuth = undefined>(config: Tool<Auth, any>): /*elided*/ any;
|
|
28
|
+
build<Auth extends FastMCPSessionAuth = undefined>(): ModelContextProtocol<Auth>;
|
|
29
|
+
};
|
|
30
|
+
private static validateVersion;
|
|
31
|
+
}
|
package/lib/mcp/mcp1.cjs
ADDED
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// import { FastMCP } from "fastmcp";
|
|
3
|
+
// import { z } from "zod";
|
|
4
|
+
// import { version } from "../../package.json";
|
|
5
|
+
// import { ModelContextProtocol } from "./ModelContextProtocol";
|
|
6
|
+
// import { Model } from "../model";
|
|
7
|
+
// import {
|
|
8
|
+
// email,
|
|
9
|
+
// max,
|
|
10
|
+
// maxlength,
|
|
11
|
+
// min,
|
|
12
|
+
// minlength,
|
|
13
|
+
// pattern,
|
|
14
|
+
// required,
|
|
15
|
+
// } from "../validation";
|
|
16
|
+
// import { createModelTool } from "./tools/createModel.tool";
|
|
17
|
+
//
|
|
18
|
+
// const DecoratorValidatonMCP = ModelContextProtocol.builder
|
|
19
|
+
// .setName("decaf-validation-server")
|
|
20
|
+
// .setVersion(version)
|
|
21
|
+
// .addTool(createModelTool)
|
|
22
|
+
// .build();
|
|
23
|
+
//
|
|
24
|
+
// // Initialize FastMCP server
|
|
25
|
+
// const server = new FastMCP({
|
|
26
|
+
// name: "decaf-validation-server",
|
|
27
|
+
// // @ts-ignore
|
|
28
|
+
// version: version,
|
|
29
|
+
// });
|
|
30
|
+
//
|
|
31
|
+
// // Model registry for dynamic model management
|
|
32
|
+
// const modelRegistry = new Map<string, any>();
|
|
33
|
+
//
|
|
34
|
+
// // Tool: Validate a model instance
|
|
35
|
+
// server.addTool({
|
|
36
|
+
// name: "validate-model",
|
|
37
|
+
// description: "Validate a model instance against its decorators",
|
|
38
|
+
// parameters: z.object({
|
|
39
|
+
// modelName: z.string().describe("Name of the model class"),
|
|
40
|
+
// data: z.record(z.any()).describe("Data to validate"),
|
|
41
|
+
// options: z
|
|
42
|
+
// .object({
|
|
43
|
+
// partial: z.boolean().optional().describe("Allow partial validation"),
|
|
44
|
+
// })
|
|
45
|
+
// .optional(),
|
|
46
|
+
// }),
|
|
47
|
+
// execute: async (args) => {
|
|
48
|
+
// const { modelName, data, options } = args;
|
|
49
|
+
//
|
|
50
|
+
// const ModelClass = modelRegistry.get(modelName) || Model.get(modelName);
|
|
51
|
+
// if (!ModelClass) {
|
|
52
|
+
// throw new Error(`Model "${modelName}" not found`);
|
|
53
|
+
// }
|
|
54
|
+
//
|
|
55
|
+
// try {
|
|
56
|
+
// const instance = new ModelClass(data);
|
|
57
|
+
// const errors = instance.hasErrors();
|
|
58
|
+
//
|
|
59
|
+
// return {
|
|
60
|
+
// isValid: !errors,
|
|
61
|
+
// errors: errors || null,
|
|
62
|
+
// validatedData: errors ? null : instance.serialize(),
|
|
63
|
+
// };
|
|
64
|
+
// } catch (error) {
|
|
65
|
+
// return {
|
|
66
|
+
// isValid: false,
|
|
67
|
+
// errors: [{ message: error.message }],
|
|
68
|
+
// validatedData: null,
|
|
69
|
+
// };
|
|
70
|
+
// }
|
|
71
|
+
// },
|
|
72
|
+
// });
|
|
73
|
+
//
|
|
74
|
+
// // Tool: Get model schema information
|
|
75
|
+
// server.addTool({
|
|
76
|
+
// name: "get-model-schema",
|
|
77
|
+
// description: "Get the validation schema for a model",
|
|
78
|
+
// parameters: z.object({
|
|
79
|
+
// modelName: z.string().describe("Name of the model class"),
|
|
80
|
+
// }),
|
|
81
|
+
// execute: async (args) => {
|
|
82
|
+
// const { modelName } = args;
|
|
83
|
+
//
|
|
84
|
+
// const ModelClass = modelRegistry.get(modelName) || Model.get(modelName);
|
|
85
|
+
// if (!ModelClass) {
|
|
86
|
+
// throw new Error(`Model "${modelName}" not found`);
|
|
87
|
+
// }
|
|
88
|
+
//
|
|
89
|
+
// // Extract validation metadata
|
|
90
|
+
// const instance = new ModelClass();
|
|
91
|
+
// const metadata = Reflect.getMetadata("validation", instance) || {};
|
|
92
|
+
//
|
|
93
|
+
// return {
|
|
94
|
+
// modelName,
|
|
95
|
+
// properties: Object.keys(metadata).map((key) => ({
|
|
96
|
+
// name: key,
|
|
97
|
+
// validators: metadata[key] || [],
|
|
98
|
+
// })),
|
|
99
|
+
// capabilities: {
|
|
100
|
+
// serialization: !!instance.serialize,
|
|
101
|
+
// hashing: !!instance.hash,
|
|
102
|
+
// comparison: !!instance.equals,
|
|
103
|
+
// },
|
|
104
|
+
// };
|
|
105
|
+
// },
|
|
106
|
+
// });
|
|
107
|
+
//
|
|
108
|
+
// // Tool: Serialize model
|
|
109
|
+
// server.addTool({
|
|
110
|
+
// name: "serialize-model",
|
|
111
|
+
// description: "Serialize a model instance to string",
|
|
112
|
+
// parameters: z.object({
|
|
113
|
+
// modelName: z.string().describe("Name of the model class"),
|
|
114
|
+
// data: z.record(z.any()).describe("Model data to serialize"),
|
|
115
|
+
// format: z.enum(["json", "yaml"]).optional().default("json"),
|
|
116
|
+
// }),
|
|
117
|
+
// execute: async (args) => {
|
|
118
|
+
// const { modelName, data, format } = args;
|
|
119
|
+
//
|
|
120
|
+
// const ModelClass = modelRegistry.get(modelName) || Model.get(modelName);
|
|
121
|
+
// if (!ModelClass) {
|
|
122
|
+
// throw new Error(`Model "${modelName}" not found`);
|
|
123
|
+
// }
|
|
124
|
+
//
|
|
125
|
+
// const instance = new ModelClass(data);
|
|
126
|
+
// const errors = instance.hasErrors();
|
|
127
|
+
//
|
|
128
|
+
// if (errors) {
|
|
129
|
+
// throw new Error(
|
|
130
|
+
// `Cannot serialize invalid model: ${JSON.stringify(errors)}`
|
|
131
|
+
// );
|
|
132
|
+
// }
|
|
133
|
+
//
|
|
134
|
+
// return {
|
|
135
|
+
// serialized: instance.serialize(),
|
|
136
|
+
// format,
|
|
137
|
+
// modelName,
|
|
138
|
+
// };
|
|
139
|
+
// },
|
|
140
|
+
// });
|
|
141
|
+
//
|
|
142
|
+
// // Tool: Deserialize model
|
|
143
|
+
// server.addTool({
|
|
144
|
+
// name: "deserialize-model",
|
|
145
|
+
// description: "Deserialize a string to model instance",
|
|
146
|
+
// parameters: z.object({
|
|
147
|
+
// serializedData: z.string().describe("Serialized model data"),
|
|
148
|
+
// modelName: z
|
|
149
|
+
// .string()
|
|
150
|
+
// .optional()
|
|
151
|
+
// .describe("Expected model name for validation"),
|
|
152
|
+
// }),
|
|
153
|
+
// execute: async (args) => {
|
|
154
|
+
// const { serializedData, modelName } = args;
|
|
155
|
+
//
|
|
156
|
+
// try {
|
|
157
|
+
// const instance = Model.deserialize(serializedData);
|
|
158
|
+
//
|
|
159
|
+
// if (modelName && instance.constructor.name !== modelName) {
|
|
160
|
+
// throw new Error(
|
|
161
|
+
// `Expected model "${modelName}", got "${instance.constructor.name}"`
|
|
162
|
+
// );
|
|
163
|
+
// }
|
|
164
|
+
//
|
|
165
|
+
// return {
|
|
166
|
+
// modelName: instance.constructor.name,
|
|
167
|
+
// data: JSON.parse(instance.serialize()),
|
|
168
|
+
// isValid: !instance.hasErrors(),
|
|
169
|
+
// };
|
|
170
|
+
// } catch (error) {
|
|
171
|
+
// throw new Error(`Deserialization failed: ${error.message}`);
|
|
172
|
+
// }
|
|
173
|
+
// },
|
|
174
|
+
// });
|
|
175
|
+
//
|
|
176
|
+
// // Tool: Compare models
|
|
177
|
+
// server.addTool({
|
|
178
|
+
// name: "compare-models",
|
|
179
|
+
// description: "Compare two model instances for equality",
|
|
180
|
+
// parameters: z.object({
|
|
181
|
+
// modelName: z.string().describe("Name of the model class"),
|
|
182
|
+
// data1: z.record(z.any()).describe("First model data"),
|
|
183
|
+
// data2: z.record(z.any()).describe("Second model data"),
|
|
184
|
+
// excludeFields: z
|
|
185
|
+
// .array(z.string())
|
|
186
|
+
// .optional()
|
|
187
|
+
// .describe("Fields to exclude from comparison"),
|
|
188
|
+
// }),
|
|
189
|
+
// execute: async (args) => {
|
|
190
|
+
// const { modelName, data1, data2, excludeFields } = args;
|
|
191
|
+
//
|
|
192
|
+
// const ModelClass = modelRegistry.get(modelName) || Model.get(modelName);
|
|
193
|
+
// if (!ModelClass) {
|
|
194
|
+
// throw new Error(`Model "${modelName}" not found`);
|
|
195
|
+
// }
|
|
196
|
+
//
|
|
197
|
+
// const instance1 = new ModelClass(data1);
|
|
198
|
+
// const instance2 = new ModelClass(data2);
|
|
199
|
+
//
|
|
200
|
+
// const isEqual = excludeFields
|
|
201
|
+
// ? instance1.equals(instance2, ...excludeFields)
|
|
202
|
+
// : instance1.equals(instance2);
|
|
203
|
+
//
|
|
204
|
+
// return {
|
|
205
|
+
// isEqual,
|
|
206
|
+
// hash1: instance1.hash(),
|
|
207
|
+
// hash2: instance2.hash(),
|
|
208
|
+
// differences: isEqual ? null : await findDifferences(instance1, instance2),
|
|
209
|
+
// };
|
|
210
|
+
// },
|
|
211
|
+
// });
|
|
212
|
+
//
|
|
213
|
+
// // Tool: List available decorators
|
|
214
|
+
// server.addTool({
|
|
215
|
+
// name: "list-decorators",
|
|
216
|
+
// description: "List all available validation decorators",
|
|
217
|
+
// parameters: z.object({
|
|
218
|
+
// category: z
|
|
219
|
+
// .enum(["basic", "type-specific", "comparison", "all"])
|
|
220
|
+
// .optional()
|
|
221
|
+
// .default("all"),
|
|
222
|
+
// }),
|
|
223
|
+
// execute: async (args) => {
|
|
224
|
+
// const { category } = args;
|
|
225
|
+
//
|
|
226
|
+
// const decorators = {
|
|
227
|
+
// basic: [
|
|
228
|
+
// {
|
|
229
|
+
// name: "required",
|
|
230
|
+
// description: "Marks field as required",
|
|
231
|
+
// args: ["message?"],
|
|
232
|
+
// },
|
|
233
|
+
// {
|
|
234
|
+
// name: "min",
|
|
235
|
+
// description: "Minimum value validation",
|
|
236
|
+
// args: ["value", "message?"],
|
|
237
|
+
// },
|
|
238
|
+
// {
|
|
239
|
+
// name: "max",
|
|
240
|
+
// description: "Maximum value validation",
|
|
241
|
+
// args: ["value", "message?"],
|
|
242
|
+
// },
|
|
243
|
+
// {
|
|
244
|
+
// name: "minlength",
|
|
245
|
+
// description: "Minimum length validation",
|
|
246
|
+
// args: ["length", "message?"],
|
|
247
|
+
// },
|
|
248
|
+
// {
|
|
249
|
+
// name: "maxlength",
|
|
250
|
+
// description: "Maximum length validation",
|
|
251
|
+
// args: ["length", "message?"],
|
|
252
|
+
// },
|
|
253
|
+
// {
|
|
254
|
+
// name: "pattern",
|
|
255
|
+
// description: "Regex pattern validation",
|
|
256
|
+
// args: ["pattern", "message?"],
|
|
257
|
+
// },
|
|
258
|
+
// {
|
|
259
|
+
// name: "step",
|
|
260
|
+
// description: "Step value validation",
|
|
261
|
+
// args: ["step", "message?"],
|
|
262
|
+
// },
|
|
263
|
+
// ],
|
|
264
|
+
// "type-specific": [
|
|
265
|
+
// {
|
|
266
|
+
// name: "email",
|
|
267
|
+
// description: "Email format validation",
|
|
268
|
+
// args: ["message?"],
|
|
269
|
+
// },
|
|
270
|
+
// {
|
|
271
|
+
// name: "url",
|
|
272
|
+
// description: "URL format validation",
|
|
273
|
+
// args: ["message?"],
|
|
274
|
+
// },
|
|
275
|
+
// {
|
|
276
|
+
// name: "date",
|
|
277
|
+
// description: "Date format validation",
|
|
278
|
+
// args: ["format?", "message?"],
|
|
279
|
+
// },
|
|
280
|
+
// {
|
|
281
|
+
// name: "password",
|
|
282
|
+
// description: "Password strength validation",
|
|
283
|
+
// args: ["message?"],
|
|
284
|
+
// },
|
|
285
|
+
// {
|
|
286
|
+
// name: "type",
|
|
287
|
+
// description: "Type validation",
|
|
288
|
+
// args: ["type", "message?"],
|
|
289
|
+
// },
|
|
290
|
+
// {
|
|
291
|
+
// name: "list",
|
|
292
|
+
// description: "Array validation",
|
|
293
|
+
// args: ["itemType", "message?"],
|
|
294
|
+
// },
|
|
295
|
+
// {
|
|
296
|
+
// name: "set",
|
|
297
|
+
// description: "Set validation",
|
|
298
|
+
// args: ["itemType", "message?"],
|
|
299
|
+
// },
|
|
300
|
+
// ],
|
|
301
|
+
// comparison: [
|
|
302
|
+
// {
|
|
303
|
+
// name: "eq",
|
|
304
|
+
// description: "Equal to another field",
|
|
305
|
+
// args: ["fieldName", "message?"],
|
|
306
|
+
// },
|
|
307
|
+
// {
|
|
308
|
+
// name: "diff",
|
|
309
|
+
// description: "Different from another field",
|
|
310
|
+
// args: ["fieldName", "message?"],
|
|
311
|
+
// },
|
|
312
|
+
// {
|
|
313
|
+
// name: "lt",
|
|
314
|
+
// description: "Less than another field",
|
|
315
|
+
// args: ["fieldName", "message?"],
|
|
316
|
+
// },
|
|
317
|
+
// {
|
|
318
|
+
// name: "lte",
|
|
319
|
+
// description: "Less than or equal to another field",
|
|
320
|
+
// args: ["fieldName", "message?"],
|
|
321
|
+
// },
|
|
322
|
+
// {
|
|
323
|
+
// name: "gt",
|
|
324
|
+
// description: "Greater than another field",
|
|
325
|
+
// args: ["fieldName", "message?"],
|
|
326
|
+
// },
|
|
327
|
+
// {
|
|
328
|
+
// name: "gte",
|
|
329
|
+
// description: "Greater than or equal to another field",
|
|
330
|
+
// args: ["fieldName", "message?"],
|
|
331
|
+
// },
|
|
332
|
+
// ],
|
|
333
|
+
// };
|
|
334
|
+
//
|
|
335
|
+
// if (category === "all") {
|
|
336
|
+
// return {
|
|
337
|
+
// categories: decorators,
|
|
338
|
+
// total: Object.values(decorators).reduce(
|
|
339
|
+
// (sum, arr) => sum + arr.length,
|
|
340
|
+
// 0
|
|
341
|
+
// ),
|
|
342
|
+
// };
|
|
343
|
+
// }
|
|
344
|
+
//
|
|
345
|
+
// return {
|
|
346
|
+
// category,
|
|
347
|
+
// decorators: decorators[category] || [],
|
|
348
|
+
// count: decorators[category]?.length || 0,
|
|
349
|
+
// };
|
|
350
|
+
// },
|
|
351
|
+
// });
|
|
352
|
+
//
|
|
353
|
+
// // Utility function to get decorator function by name
|
|
354
|
+
// function getDecoratorFunction(name: string): Function | null {
|
|
355
|
+
// const decoratorMap = {
|
|
356
|
+
// required,
|
|
357
|
+
// email,
|
|
358
|
+
// min,
|
|
359
|
+
// max,
|
|
360
|
+
// minlength,
|
|
361
|
+
// maxlength,
|
|
362
|
+
// pattern,
|
|
363
|
+
// url,
|
|
364
|
+
// date,
|
|
365
|
+
// password,
|
|
366
|
+
// list,
|
|
367
|
+
// set,
|
|
368
|
+
// eq,
|
|
369
|
+
// diff,
|
|
370
|
+
// lt,
|
|
371
|
+
// lte,
|
|
372
|
+
// gt,
|
|
373
|
+
// gte,
|
|
374
|
+
// type,
|
|
375
|
+
// step,
|
|
376
|
+
// };
|
|
377
|
+
// return decoratorMap[name] || null;
|
|
378
|
+
// }
|
|
379
|
+
//
|
|
380
|
+
// // Utility function to find differences between models
|
|
381
|
+
// async function findDifferences(instance1: any, instance2: any): Promise<any[]> {
|
|
382
|
+
// const differences = [];
|
|
383
|
+
// const serialized1 = JSON.parse(instance1.serialize());
|
|
384
|
+
// const serialized2 = JSON.parse(instance2.serialize());
|
|
385
|
+
//
|
|
386
|
+
// for (const key in serialized1) {
|
|
387
|
+
// if (serialized1[key] !== serialized2[key]) {
|
|
388
|
+
// differences.push({
|
|
389
|
+
// field: key,
|
|
390
|
+
// value1: serialized1[key],
|
|
391
|
+
// value2: serialized2[key],
|
|
392
|
+
// });
|
|
393
|
+
// }
|
|
394
|
+
// }
|
|
395
|
+
//
|
|
396
|
+
// return differences;
|
|
397
|
+
// }
|
|
398
|
+
//
|
|
399
|
+
// // Start the server
|
|
400
|
+
// server.start({
|
|
401
|
+
// transportType: "stdio",
|
|
402
|
+
// });
|
|
403
|
+
//
|
|
404
|
+
// export { server };
|
|
405
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWNwMS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tY3AvbWNwMS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEscUNBQXFDO0FBQ3JDLDJCQUEyQjtBQUMzQixnREFBZ0Q7QUFDaEQsaUVBQWlFO0FBQ2pFLG9DQUFvQztBQUNwQyxXQUFXO0FBQ1gsV0FBVztBQUNYLFNBQVM7QUFDVCxlQUFlO0FBQ2YsU0FBUztBQUNULGVBQWU7QUFDZixhQUFhO0FBQ2IsY0FBYztBQUNkLDBCQUEwQjtBQUMxQiw4REFBOEQ7QUFDOUQsRUFBRTtBQUNGLDZEQUE2RDtBQUM3RCx3Q0FBd0M7QUFDeEMseUJBQXlCO0FBQ3pCLDhCQUE4QjtBQUM5QixjQUFjO0FBQ2QsRUFBRTtBQUNGLCtCQUErQjtBQUMvQiwrQkFBK0I7QUFDL0IscUNBQXFDO0FBQ3JDLGtCQUFrQjtBQUNsQixzQkFBc0I7QUFDdEIsTUFBTTtBQUNOLEVBQUU7QUFDRixpREFBaUQ7QUFDakQsZ0RBQWdEO0FBQ2hELEVBQUU7QUFDRixxQ0FBcUM7QUFDckMsbUJBQW1CO0FBQ25CLDRCQUE0QjtBQUM1QixxRUFBcUU7QUFDckUsMkJBQTJCO0FBQzNCLGlFQUFpRTtBQUNqRSw0REFBNEQ7QUFDNUQsaUJBQWlCO0FBQ2pCLGtCQUFrQjtBQUNsQixnRkFBZ0Y7QUFDaEYsV0FBVztBQUNYLHFCQUFxQjtBQUNyQixRQUFRO0FBQ1IsK0JBQStCO0FBQy9CLGlEQUFpRDtBQUNqRCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLHlCQUF5QjtBQUN6QiwyREFBMkQ7QUFDM0QsUUFBUTtBQUNSLEVBQUU7QUFDRixZQUFZO0FBQ1osK0NBQStDO0FBQy9DLDZDQUE2QztBQUM3QyxFQUFFO0FBQ0YsaUJBQWlCO0FBQ2pCLDRCQUE0QjtBQUM1QixrQ0FBa0M7QUFDbEMsK0RBQStEO0FBQy9ELFdBQVc7QUFDWCx3QkFBd0I7QUFDeEIsaUJBQWlCO0FBQ2pCLDBCQUEwQjtBQUMxQixnREFBZ0Q7QUFD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QUFXO0FBQ1gsWUFBWTtBQUNaLFlBQVk7QUFDWixPQUFPO0FBQ1AsdUNBQXVDO0FBQ3ZDLElBQUk7QUFDSixFQUFFO0FBQ0YseURBQXlEO0FBQ3pELG1GQUFtRjtBQUNuRiw0QkFBNEI7QUFDNUIsMkRBQTJEO0FBQzNELDJEQUEyRDtBQUMzRCxFQUFFO0FBQ0YscUNBQXFDO0FBQ3JDLG1EQUFtRDtBQUNuRCwyQkFBMkI7QUFDM0Isc0JBQXNCO0FBQ3RCLG9DQUFvQztBQUNwQyxvQ0FBb0M7QUFDcEMsWUFBWTtBQUNaLFFBQVE7QUFDUixNQUFNO0FBQ04sRUFBRTtBQUNGLHdCQUF3QjtBQUN4QixJQUFJO0FBQ0osRUFBRTtBQUNGLHNCQUFzQjtBQUN0QixpQkFBaUI7QUFDakIsNEJBQTRCO0FBQzVCLE1BQU07QUFDTixFQUFFO0FBQ0YscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0IHsgRmFzdE1DUCB9IGZyb20gXCJmYXN0bWNwXCI7XG4vLyBpbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuLy8gaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gXCIuLi8uLi9wYWNrYWdlLmpzb25cIjtcbi8vIGltcG9ydCB7IE1vZGVsQ29udGV4dFByb3RvY29sIH0gZnJvbSBcIi4vTW9kZWxDb250ZXh0UHJvdG9jb2xcIjtcbi8vIGltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIi4uL21vZGVsXCI7XG4vLyBpbXBvcnQge1xuLy8gICBlbWFpbCxcbi8vICAgbWF4LFxuLy8gICBtYXhsZW5ndGgsXG4vLyAgIG1pbixcbi8vICAgbWlubGVuZ3RoLFxuLy8gICBwYXR0ZXJuLFxuLy8gICByZXF1aXJlZCxcbi8vIH0gZnJvbSBcIi4uL3ZhbGlkYXRpb25cIjtcbi8vIGltcG9ydCB7IGNyZWF0ZU1vZGVsVG9vbCB9IGZyb20gXCIuL3Rvb2xzL2NyZWF0ZU1vZGVsLnRvb2xcIjtcbi8vXG4vLyBjb25zdCBEZWNvcmF0b3JWYWxpZGF0b25NQ1AgPSBNb2RlbENvbnRleHRQcm90b2NvbC5idWlsZGVyXG4vLyAgIC5zZXROYW1lKFwiZGVjYWYtdmFsaWRhdGlvbi1zZXJ2ZXJcIilcbi8vICAgLnNldFZlcnNpb24odmVyc2lvbilcbi8vICAgLmFkZFRvb2woY3JlYXRlTW9kZWxUb29sKVxuLy8gICAuYnVpbGQoKTtcbi8vXG4vLyAvLyBJbml0aWFsaXplIEZhc3RNQ1Agc2VydmVyXG4vLyBjb25zdCBzZXJ2ZXIgPSBuZXcgRmFzdE1DUCh7XG4vLyAgIG5hbWU6IFwiZGVjYWYtdmFsaWRhdGlvbi1zZXJ2ZXJcIixcbi8vICAgLy8gQHRzLWlnbm9yZVxuLy8gICB2ZXJzaW9uOiB2ZXJzaW9uLFxuLy8gfSk7XG4vL1xuLy8gLy8gTW9kZWwgcmVnaXN0cnkgZm9yIGR5bmFtaWMgbW9kZWwgbWFuYWdlbWVudFxuLy8gY29uc3QgbW9kZWxSZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4vL1xuLy8gLy8gVG9vbDogVmFsaWRhdGUgYSBtb2RlbCBpbnN0YW5jZVxuLy8gc2VydmVyLmFkZFRvb2woe1xuLy8gICBuYW1lOiBcInZhbGlkYXRlLW1vZGVsXCIsXG4vLyAgIGRlc2NyaXB0aW9uOiBcIlZhbGlkYXRlIGEgbW9kZWwgaW5zdGFuY2UgYWdhaW5zdCBpdHMgZGVjb3JhdG9yc1wiLFxuLy8gICBwYXJhbWV0ZXJzOiB6Lm9iamVjdCh7XG4vLyAgICAgbW9kZWxOYW1lOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiTmFtZSBvZiB0aGUgbW9kZWwgY2xhc3NcIiksXG4vLyAgICAgZGF0YTogei5yZWNvcmQoei5hbnkoKSkuZGVzY3JpYmUoXCJEYXRhIHRvIHZhbGlkYXRlXCIpLFxuLy8gICAgIG9wdGlvbnM6IHpcbi8vICAgICAgIC5vYmplY3Qoe1xuLy8gICAgICAgICBwYXJ0aWFsOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiQWxsb3cgcGFydGlhbCB2YWxpZGF0aW9uXCIpLFxuLy8gICAgICAgfSlcbi8vICAgICAgIC5vcHRpb25hbCgpLFxuLy8gICB9KSxcbi8vICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3MpID0+IHtcbi8vICAgICBjb25zdCB7IG1vZGVsTmFtZSwgZGF0YSwgb3B0aW9ucyB9ID0gYXJncztcbi8vXG4vLyAgICAgY29uc3QgTW9kZWxDbGFzcyA9IG1vZGVsUmVnaXN0cnkuZ2V0KG1vZGVsTmFtZSkgfHwgTW9kZWwuZ2V0KG1vZGVsTmFtZSk7XG4vLyAgICAgaWYgKCFNb2RlbENsYXNzKSB7XG4vLyAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsIFwiJHttb2RlbE5hbWV9XCIgbm90IGZvdW5kYCk7XG4vLyAgICAgfVxuLy9cbi8vICAgICB0cnkge1xuLy8gICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgTW9kZWxDbGFzcyhkYXRhKTtcbi8vICAgICAgIGNvbnN0IGVycm9ycyA9IGluc3RhbmNlLmhhc0Vycm9ycygpO1xuLy9cbi8vICAgICAgIHJldHVybiB7XG4vLyAgICAgICAgIGlzVmFsaWQ6ICFlcnJvcnMsXG4vLyAgICAgICAgIGVycm9yczogZXJyb3JzIHx8IG51bGwsXG4vLyAgICAgICAgIHZhbGlkYXRlZERhdGE6IGVycm9ycyA/IG51bGwgOiBpbnN0YW5jZS5zZXJpYWxpemUoKSxcbi8vICAgICAgIH07XG4vLyAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbi8vICAgICAgIHJldHVybiB7XG4vLyAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuLy8gICAgICAgICBlcnJvcnM6IFt7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgfV0sXG4vLyAgICAgICAgIHZhbGlkYXRlZERhdGE6IG51bGwsXG4vLyAgICAgICB9O1xuLy8gICAgIH1cbi8vICAgfSxcbi8vIH0pO1xuLy9cbi8vIC8vIFRvb2w6IEdldCBtb2RlbCBzY2hlbWEgaW5mb3JtYXRpb25cbi8vIHNlcnZlci5hZGRUb29sKHtcbi8vICAgbmFtZTogXCJnZXQtbW9kZWwtc2NoZW1hXCIsXG4vLyAgIGRlc2NyaXB0aW9uOiBcIkdldCB0aGUgdmFsaWRhdGlvbiBzY2hlbWEgZm9yIGEgbW9kZWxcIixcbi8vICAgcGFyYW1ldGVyczogei5vYmplY3Qoe1xuLy8gICAgIG1vZGVsTmFtZTogei5zdHJpbmcoKS5kZXNjcmliZShcIk5hbWUgb2YgdGhlIG1vZGVsIGNsYXNzXCIpLFxuLy8gICB9KSxcbi8vICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3MpID0+IHtcbi8vICAgICBjb25zdCB7IG1vZGVsTmFtZSB9ID0gYXJncztcbi8vXG4vLyAgICAgY29uc3QgTW9kZWxDbGFzcyA9IG1vZGVsUmVnaXN0cnkuZ2V0KG1vZGVsTmFtZSkgfHwgTW9kZWwuZ2V0KG1vZGVsTmFtZSk7XG4vLyAgICAgaWYgKCFNb2RlbENsYXNzKSB7XG4vLyAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsIFwiJHttb2RlbE5hbWV9XCIgbm90IGZvdW5kYCk7XG4vLyAgICAgfVxuLy9cbi8vICAgICAvLyBFeHRyYWN0IHZhbGlkYXRpb24gbWV0YWRhdGFcbi8vICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBNb2RlbENsYXNzKCk7XG4vLyAgICAgY29uc3QgbWV0YWRhdGEgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFwidmFsaWRhdGlvblwiLCBpbnN0YW5jZSkgfHwge307XG4vL1xuLy8gICAgIHJldHVybiB7XG4vLyAgICAgICBtb2RlbE5hbWUsXG4vLyAgICAgICBwcm9wZXJ0aWVzOiBPYmplY3Qua2V5cyhtZXRhZGF0YSkubWFwKChrZXkpID0+ICh7XG4vLyAgICAgICAgIG5hbWU6IGtleSxcbi8vICAgICAgICAgdmFsaWRhdG9yczogbWV0YWRhdGFba2V5XSB8fCBbXSxcbi8vICAgICAgIH0pKSxcbi8vICAgICAgIGNhcGFiaWxpdGllczoge1xuLy8gICAgICAgICBzZXJpYWxpemF0aW9uOiAhIWluc3RhbmNlLnNlcmlhbGl6ZSxcbi8vICAgICAgICAgaGFzaGluZzogISFpbnN0YW5jZS5oYXNoLFxuLy8gICAgICAgICBjb21wYXJpc29uOiAhIWluc3RhbmNlLmVxdWFscyxcbi8vICAgICAgIH0sXG4vLyAgICAgfTtcbi8vICAgfSxcbi8vIH0pO1xuLy9cbi8vIC8vIFRvb2w6IFNlcmlhbGl6ZSBtb2RlbFxuLy8gc2VydmVyLmFkZFRvb2woe1xuLy8gICBuYW1lOiBcInNlcmlhbGl6ZS1tb2RlbFwiLFxuLy8gICBkZXNjcmlwdGlvbjogXCJTZXJpYWxpemUgYSBtb2RlbCBpbnN0YW5jZSB0byBzdHJpbmdcIixcbi8vICAgcGFyYW1ldGVyczogei5vYmplY3Qoe1xuLy8gICAgIG1vZGVsTmFtZTogei5zdHJpbmcoKS5kZXNjcmliZShcIk5hbWUgb2YgdGhlIG1vZGVsIGNsYXNzXCIpLFxuLy8gICAgIGRhdGE6IHoucmVjb3JkKHouYW55KCkpLmRlc2NyaWJlKFwiTW9kZWwgZGF0YSB0byBzZXJpYWxpemVcIiksXG4vLyAgICAgZm9ybWF0OiB6LmVudW0oW1wianNvblwiLCBcInlhbWxcIl0pLm9wdGlvbmFsKCkuZGVmYXVsdChcImpzb25cIiksXG4vLyAgIH0pLFxuLy8gICBleGVjdXRlOiBhc3luYyAoYXJncykgPT4ge1xuLy8gICAgIGNvbnN0IHsgbW9kZWxOYW1lLCBkYXRhLCBmb3JtYXQgfSA9IGFyZ3M7XG4vL1xuLy8gICAgIGNvbnN0IE1vZGVsQ2xhc3MgPSBtb2RlbFJlZ2lzdHJ5LmdldChtb2RlbE5hbWUpIHx8IE1vZGVsLmdldChtb2RlbE5hbWUpO1xuLy8gICAgIGlmICghTW9kZWxDbGFzcykge1xuLy8gICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb2RlbCBcIiR7bW9kZWxOYW1lfVwiIG5vdCBmb3VuZGApO1xuLy8gICAgIH1cbi8vXG4vLyAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgTW9kZWxDbGFzcyhkYXRhKTtcbi8vICAgICBjb25zdCBlcnJvcnMgPSBpbnN0YW5jZS5oYXNFcnJvcnMoKTtcbi8vXG4vLyAgICAgaWYgKGVycm9ycykge1xuLy8gICAgICAgdGhyb3cgbmV3IEVycm9yKFxuLy8gICAgICAgICBgQ2Fubm90IHNlcmlhbGl6ZSBpbnZhbGlkIG1vZGVsOiAke0pTT04uc3RyaW5naWZ5KGVycm9ycyl9YFxuLy8gICAgICAgKTtcbi8vICAgICB9XG4vL1xuLy8gICAgIHJldHVybiB7XG4vLyAgICAgICBzZXJpYWxpemVkOiBpbnN0YW5jZS5zZXJpYWxpemUoKSxcbi8vICAgICAgIGZvcm1hdCxcbi8vICAgICAgIG1vZGVsTmFtZSxcbi8vICAgICB9O1xuLy8gICB9LFxuLy8gfSk7XG4vL1xuLy8gLy8gVG9vbDogRGVzZXJpYWxpemUgbW9kZWxcbi8vIHNlcnZlci5hZGRUb29sKHtcbi8vICAgbmFtZTogXCJkZXNlcmlhbGl6ZS1tb2RlbFwiLFxuLy8gICBkZXNjcmlwdGlvbjogXCJEZXNlcmlhbGl6ZSBhIHN0cmluZyB0byBtb2RlbCBpbnN0YW5jZVwiLFxuLy8gICBwYXJhbWV0ZXJzOiB6Lm9iamVjdCh7XG4vLyAgICAgc2VyaWFsaXplZERhdGE6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJTZXJpYWxpemVkIG1vZGVsIGRhdGFcIiksXG4vLyAgICAgbW9kZWxOYW1lOiB6XG4vLyAgICAgICAuc3RyaW5nKClcbi8vICAgICAgIC5vcHRpb25hbCgpXG4vLyAgICAgICAuZGVzY3JpYmUoXCJFeHBlY3RlZCBtb2RlbCBuYW1lIGZvciB2YWxpZGF0aW9uXCIpLFxuLy8gICB9KSxcbi8vICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3MpID0+IHtcbi8vICAgICBjb25zdCB7IHNlcmlhbGl6ZWREYXRhLCBtb2RlbE5hbWUgfSA9IGFyZ3M7XG4vL1xuLy8gICAgIHRyeSB7XG4vLyAgICAgICBjb25zdCBpbnN0YW5jZSA9IE1vZGVsLmRlc2VyaWFsaXplKHNlcmlhbGl6ZWREYXRhKTtcbi8vXG4vLyAgICAgICBpZiAobW9kZWxOYW1lICYmIGluc3RhbmNlLmNvbnN0cnVjdG9yLm5hbWUgIT09IG1vZGVsTmFtZSkge1xuLy8gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4vLyAgICAgICAgICAgYEV4cGVjdGVkIG1vZGVsIFwiJHttb2RlbE5hbWV9XCIsIGdvdCBcIiR7aW5zdGFuY2UuY29uc3RydWN0b3IubmFtZX1cImBcbi8vICAgICAgICAgKTtcbi8vICAgICAgIH1cbi8vXG4vLyAgICAgICByZXR1cm4ge1xuLy8gICAgICAgICBtb2RlbE5hbWU6IGluc3RhbmNlLmNvbnN0cnVjdG9yLm5hbWUsXG4vLyAgICAgICAgIGRhdGE6IEpTT04ucGFyc2UoaW5zdGFuY2Uuc2VyaWFsaXplKCkpLFxuLy8gICAgICAgICBpc1ZhbGlkOiAhaW5zdGFuY2UuaGFzRXJyb3JzKCksXG4vLyAgICAgICB9O1xuLy8gICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4vLyAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERlc2VyaWFsaXphdGlvbiBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbi8vICAgICB9XG4vLyAgIH0sXG4vLyB9KTtcbi8vXG4vLyAvLyBUb29sOiBDb21wYXJlIG1vZGVsc1xuLy8gc2VydmVyLmFkZFRvb2woe1xuLy8gICBuYW1lOiBcImNvbXBhcmUtbW9kZWxzXCIsXG4vLyAgIGRlc2NyaXB0aW9uOiBcIkNvbXBhcmUgdHdvIG1vZGVsIGluc3RhbmNlcyBmb3IgZXF1YWxpdHlcIixcbi8vICAgcGFyYW1ldGVyczogei5vYmplY3Qoe1xuLy8gICAgIG1vZGVsTmFtZTogei5zdHJpbmcoKS5kZXNjcmliZShcIk5hbWUgb2YgdGhlIG1vZGVsIGNsYXNzXCIpLFxuLy8gICAgIGRhdGExOiB6LnJlY29yZCh6LmFueSgpKS5kZXNjcmliZShcIkZpcnN0IG1vZGVsIGRhdGFcIiksXG4vLyAgICAgZGF0YTI6IHoucmVjb3JkKHouYW55KCkpLmRlc2NyaWJlKFwiU2Vjb25kIG1vZGVsIGRhdGFcIiksXG4vLyAgICAgZXhjbHVkZUZpZWxkczogelxuLy8gICAgICAgLmFycmF5KHouc3RyaW5nKCkpXG4vLyAgICAgICAub3B0aW9uYWwoKVxuLy8gICAgICAgLmRlc2NyaWJlKFwiRmllbGRzIHRvIGV4Y2x1ZGUgZnJvbSBjb21wYXJpc29uXCIpLFxuLy8gICB9KSxcbi8vICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3MpID0+IHtcbi8vICAgICBjb25zdCB7IG1vZGVsTmFtZSwgZGF0YTEsIGRhdGEyLCBleGNsdWRlRmllbGRzIH0gPSBhcmdzO1xuLy9cbi8vICAgICBjb25zdCBNb2RlbENsYXNzID0gbW9kZWxSZWdpc3RyeS5nZXQobW9kZWxOYW1lKSB8fCBNb2RlbC5nZXQobW9kZWxOYW1lKTtcbi8vICAgICBpZiAoIU1vZGVsQ2xhc3MpIHtcbi8vICAgICAgIHRocm93IG5ldyBFcnJvcihgTW9kZWwgXCIke21vZGVsTmFtZX1cIiBub3QgZm91bmRgKTtcbi8vICAgICB9XG4vL1xuLy8gICAgIGNvbnN0IGluc3RhbmNlMSA9IG5ldyBNb2RlbENsYXNzKGRhdGExKTtcbi8vICAgICBjb25zdCBpbnN0YW5jZTIgPSBuZXcgTW9kZWxDbGFzcyhkYXRhMik7XG4vL1xuLy8gICAgIGNvbnN0IGlzRXF1YWwgPSBleGNsdWRlRmllbGRzXG4vLyAgICAgICA/IGluc3RhbmNlMS5lcXVhbHMoaW5zdGFuY2UyLCAuLi5leGNsdWRlRmllbGRzKVxuLy8gICAgICAgOiBpbnN0YW5jZTEuZXF1YWxzKGluc3RhbmNlMik7XG4vL1xuLy8gICAgIHJldHVybiB7XG4vLyAgICAgICBpc0VxdWFsLFxuLy8gICAgICAgaGFzaDE6IGluc3RhbmNlMS5oYXNoKCksXG4vLyAgICAgICBoYXNoMjogaW5zdGFuY2UyLmhhc2goKSxcbi8vICAgICAgIGRpZmZlcmVuY2VzOiBpc0VxdWFsID8gbnVsbCA6IGF3YWl0IGZpbmREaWZmZXJlbmNlcyhpbnN0YW5jZTEsIGluc3RhbmNlMiksXG4vLyAgICAgfTtcbi8vICAgfSxcbi8vIH0pO1xuLy9cbi8vIC8vIFRvb2w6IExpc3QgYXZhaWxhYmxlIGRlY29yYXRvcnNcbi8vIHNlcnZlci5hZGRUb29sKHtcbi8vICAgbmFtZTogXCJsaXN0LWRlY29yYXRvcnNcIixcbi8vICAgZGVzY3JpcHRpb246IFwiTGlzdCBhbGwgYXZhaWxhYmxlIHZhbGlkYXRpb24gZGVjb3JhdG9yc1wiLFxuLy8gICBwYXJhbWV0ZXJzOiB6Lm9iamVjdCh7XG4vLyAgICAgY2F0ZWdvcnk6IHpcbi8vICAgICAgIC5lbnVtKFtcImJhc2ljXCIsIFwidHlwZS1zcGVjaWZpY1wiLCBcImNvbXBhcmlzb25cIiwgXCJhbGxcIl0pXG4vLyAgICAgICAub3B0aW9uYWwoKVxuLy8gICAgICAgLmRlZmF1bHQoXCJhbGxcIiksXG4vLyAgIH0pLFxuLy8gICBleGVjdXRlOiBhc3luYyAoYXJncykgPT4ge1xuLy8gICAgIGNvbnN0IHsgY2F0ZWdvcnkgfSA9IGFyZ3M7XG4vL1xuLy8gICAgIGNvbnN0IGRlY29yYXRvcnMgPSB7XG4vLyAgICAgICBiYXNpYzogW1xuLy8gICAgICAgICB7XG4vLyAgICAgICAgICAgbmFtZTogXCJyZXF1aXJlZFwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk1hcmtzIGZpZWxkIGFzIHJlcXVpcmVkXCIsXG4vLyAgICAgICAgICAgYXJnczogW1wibWVzc2FnZT9cIl0sXG4vLyAgICAgICAgIH0sXG4vLyAgICAgICAgIHtcbi8vICAgICAgICAgICBuYW1lOiBcIm1pblwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk1pbmltdW0gdmFsdWUgdmFsaWRhdGlvblwiLFxuLy8gICAgICAgICAgIGFyZ3M6IFtcInZhbHVlXCIsIFwibWVzc2FnZT9cIl0sXG4vLyAgICAgICAgIH0sXG4vLyAgICAgICAgIHtcbi8vICAgICAgICAgICBuYW1lOiBcIm1heFwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk1heGltdW0gdmFsdWUgdmFsaWRhdGlvblwiLFxuLy8gICAgICAgICAgIGFyZ3M6IFtcInZhbHVlXCIsIFwibWVzc2FnZT9cIl0sXG4vLyAgICAgICAgIH0sXG4vLyAgICAgICAgIHtcbi8vICAgICAgICAgICBuYW1lOiBcIm1pbmxlbmd0aFwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk1pbmltdW0gbGVuZ3RoIHZhbGlkYXRpb25cIixcbi8vICAgICAgICAgICBhcmdzOiBbXCJsZW5ndGhcIiwgXCJtZXNzYWdlP1wiXSxcbi8vICAgICAgICAgfSxcbi8vICAgICAgICAge1xuLy8gICAgICAgICAgIG5hbWU6IFwibWF4bGVuZ3RoXCIsXG4vLyAgICAgICAgICAgZGVzY3JpcHRpb246IFwiTWF4aW11bSBsZW5ndGggdmFsaWRhdGlvblwiLFxuLy8gICAgICAgICAgIGFyZ3M6IFtcImxlbmd0aFwiLCBcIm1lc3NhZ2U/XCJdLFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgICB7XG4vLyAgICAgICAgICAgbmFtZTogXCJwYXR0ZXJuXCIsXG4vLyAgICAgICAgICAgZGVzY3JpcHRpb246IFwiUmVnZXggcGF0dGVybiB2YWxpZGF0aW9uXCIsXG4vLyAgICAgICAgICAgYXJnczogW1wicGF0dGVyblwiLCBcIm1lc3NhZ2U/XCJdLFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgICB7XG4vLyAgICAgICAgICAgbmFtZTogXCJzdGVwXCIsXG4vLyAgICAgICAgICAgZGVzY3JpcHRpb246IFwiU3RlcCB2YWx1ZSB2YWxpZGF0aW9uXCIsXG4vLyAgICAgICAgICAgYXJnczogW1wic3RlcFwiLCBcIm1lc3NhZ2U/XCJdLFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgXSxcbi8vICAgICAgIFwidHlwZS1zcGVjaWZpY1wiOiBbXG4vLyAgICAgICAgIHtcbi8vICAgICAgICAgICBuYW1lOiBcImVtYWlsXCIsXG4vLyAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRW1haWwgZm9ybWF0IHZhbGlkYXRpb25cIixcbi8vICAgICAgICAgICBhcmdzOiBbXCJtZXNzYWdlP1wiXSxcbi8vICAgICAgICAgfSxcbi8vICAgICAgICAge1xuLy8gICAgICAgICAgIG5hbWU6IFwidXJsXCIsXG4vLyAgICAgICAgICAgZGVzY3JpcHRpb246IFwiVVJMIGZvcm1hdCB2YWxpZGF0aW9uXCIsXG4vLyAgICAgICAgICAgYXJnczogW1wibWVzc2FnZT9cIl0sXG4vLyAgICAgICAgIH0sXG4vLyAgICAgICAgIHtcbi8vICAgICAgICAgICBuYW1lOiBcImRhdGVcIixcbi8vICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJEYXRlIGZvcm1hdCB2YWxpZGF0aW9uXCIsXG4vLyAgICAgICAgICAgYXJnczogW1wiZm9ybWF0P1wiLCBcIm1lc3NhZ2U/XCJdLFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgICB7XG4vLyAgICAgICAgICAgbmFtZTogXCJwYXNzd29yZFwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlBhc3N3b3JkIHN0cmVuZ3RoIHZhbGlkYXRpb25cIixcbi8vICAgICAgICAgICBhcmdzOiBbXCJtZXNzYWdlP1wiXSxcbi8vICAgICAgICAgfSxcbi8vICAgICAgICAge1xuLy8gICAgICAgICAgIG5hbWU6IFwidHlwZVwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlR5cGUgdmFsaWRhdGlvblwiLFxuLy8gICAgICAgICAgIGFyZ3M6IFtcInR5cGVcIiwgXCJtZXNzYWdlP1wiXSxcbi8vICAgICAgICAgfSxcbi8vICAgICAgICAge1xuLy8gICAgICAgICAgIG5hbWU6IFwibGlzdFwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkFycmF5IHZhbGlkYXRpb25cIixcbi8vICAgICAgICAgICBhcmdzOiBbXCJpdGVtVHlwZVwiLCBcIm1lc3NhZ2U/XCJdLFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgICB7XG4vLyAgICAgICAgICAgbmFtZTogXCJzZXRcIixcbi8vICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJTZXQgdmFsaWRhdGlvblwiLFxuLy8gICAgICAgICAgIGFyZ3M6IFtcIml0ZW1UeXBlXCIsIFwibWVzc2FnZT9cIl0sXG4vLyAgICAgICAgIH0sXG4vLyAgICAgICBdLFxuLy8gICAgICAgY29tcGFyaXNvbjogW1xuLy8gICAgICAgICB7XG4vLyAgICAgICAgICAgbmFtZTogXCJlcVwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkVxdWFsIHRvIGFub3RoZXIgZmllbGRcIixcbi8vICAgICAgICAgICBhcmdzOiBbXCJmaWVsZE5hbWVcIiwgXCJtZXNzYWdlP1wiXSxcbi8vICAgICAgICAgfSxcbi8vICAgICAgICAge1xuLy8gICAgICAgICAgIG5hbWU6IFwiZGlmZlwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkRpZmZlcmVudCBmcm9tIGFub3RoZXIgZmllbGRcIixcbi8vICAgICAgICAgICBhcmdzOiBbXCJmaWVsZE5hbWVcIiwgXCJtZXNzYWdlP1wiXSxcbi8vICAgICAgICAgfSxcbi8vICAgICAgICAge1xuLy8gICAgICAgICAgIG5hbWU6IFwibHRcIixcbi8vICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJMZXNzIHRoYW4gYW5vdGhlciBmaWVsZFwiLFxuLy8gICAgICAgICAgIGFyZ3M6IFtcImZpZWxkTmFtZVwiLCBcIm1lc3NhZ2U/XCJdLFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgICB7XG4vLyAgICAgICAgICAgbmFtZTogXCJsdGVcIixcbi8vICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJMZXNzIHRoYW4gb3IgZXF1YWwgdG8gYW5vdGhlciBmaWVsZFwiLFxuLy8gICAgICAgICAgIGFyZ3M6IFtcImZpZWxkTmFtZVwiLCBcIm1lc3NhZ2U/XCJdLFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgICB7XG4vLyAgICAgICAgICAgbmFtZTogXCJndFwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkdyZWF0ZXIgdGhhbiBhbm90aGVyIGZpZWxkXCIsXG4vLyAgICAgICAgICAgYXJnczogW1wiZmllbGROYW1lXCIsIFwibWVzc2FnZT9cIl0sXG4vLyAgICAgICAgIH0sXG4vLyAgICAgICAgIHtcbi8vICAgICAgICAgICBuYW1lOiBcImd0ZVwiLFxuLy8gICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBhbm90aGVyIGZpZWxkXCIsXG4vLyAgICAgICAgICAgYXJnczogW1wiZmllbGROYW1lXCIsIFwibWVzc2FnZT9cIl0sXG4vLyAgICAgICAgIH0sXG4vLyAgICAgICBdLFxuLy8gICAgIH07XG4vL1xuLy8gICAgIGlmIChjYXRlZ29yeSA9PT0gXCJhbGxcIikge1xuLy8gICAgICAgcmV0dXJuIHtcbi8vICAgICAgICAgY2F0ZWdvcmllczogZGVjb3JhdG9ycyxcbi8vICAgICAgICAgdG90YWw6IE9iamVjdC52YWx1ZXMoZGVjb3JhdG9ycykucmVkdWNlKFxuLy8gICAgICAgICAgIChzdW0sIGFycikgPT4gc3VtICsgYXJyLmxlbmd0aCxcbi8vICAgICAgICAgICAwXG4vLyAgICAgICAgICksXG4vLyAgICAgICB9O1xuLy8gICAgIH1cbi8vXG4vLyAgICAgcmV0dXJuIHtcbi8vICAgICAgIGNhdGVnb3J5LFxuLy8gICAgICAgZGVjb3JhdG9yczogZGVjb3JhdG9yc1tjYXRlZ29yeV0gfHwgW10sXG4vLyAgICAgICBjb3VudDogZGVjb3JhdG9yc1tjYXRlZ29yeV0/Lmxlbmd0aCB8fCAwLFxuLy8gICAgIH07XG4vLyAgIH0sXG4vLyB9KTtcbi8vXG4vLyAvLyBVdGlsaXR5IGZ1bmN0aW9uIHRvIGdldCBkZWNvcmF0b3IgZnVuY3Rpb24gYnkgbmFtZVxuLy8gZnVuY3Rpb24gZ2V0RGVjb3JhdG9yRnVuY3Rpb24obmFtZTogc3RyaW5nKTogRnVuY3Rpb24gfCBudWxsIHtcbi8vICAgY29uc3QgZGVjb3JhdG9yTWFwID0ge1xuLy8gICAgIHJlcXVpcmVkLFxuLy8gICAgIGVtYWlsLFxuLy8gICAgIG1pbixcbi8vICAgICBtYXgsXG4vLyAgICAgbWlubGVuZ3RoLFxuLy8gICAgIG1heGxlbmd0aCxcbi8vICAgICBwYXR0ZXJuLFxuLy8gICAgIHVybCxcbi8vICAgICBkYXRlLFxuLy8gICAgIHBhc3N3b3JkLFxuLy8gICAgIGxpc3QsXG4vLyAgICAgc2V0LFxuLy8gICAgIGVxLFxuLy8gICAgIGRpZmYsXG4vLyAgICAgbHQsXG4vLyAgICAgbHRlLFxuLy8gICAgIGd0LFxuLy8gICAgIGd0ZSxcbi8vICAgICB0eXBlLFxuLy8gICAgIHN0ZXAsXG4vLyAgIH07XG4vLyAgIHJldHVybiBkZWNvcmF0b3JNYXBbbmFtZV0gfHwgbnVsbDtcbi8vIH1cbi8vXG4vLyAvLyBVdGlsaXR5IGZ1bmN0aW9uIHRvIGZpbmQgZGlmZmVyZW5jZXMgYmV0d2VlbiBtb2RlbHNcbi8vIGFzeW5jIGZ1bmN0aW9uIGZpbmREaWZmZXJlbmNlcyhpbnN0YW5jZTE6IGFueSwgaW5zdGFuY2UyOiBhbnkpOiBQcm9taXNlPGFueVtdPiB7XG4vLyAgIGNvbnN0IGRpZmZlcmVuY2VzID0gW107XG4vLyAgIGNvbnN0IHNlcmlhbGl6ZWQxID0gSlNPTi5wYXJzZShpbnN0YW5jZTEuc2VyaWFsaXplKCkpO1xuLy8gICBjb25zdCBzZXJpYWxpemVkMiA9IEpTT04ucGFyc2UoaW5zdGFuY2UyLnNlcmlhbGl6ZSgpKTtcbi8vXG4vLyAgIGZvciAoY29uc3Qga2V5IGluIHNlcmlhbGl6ZWQxKSB7XG4vLyAgICAgaWYgKHNlcmlhbGl6ZWQxW2tleV0gIT09IHNlcmlhbGl6ZWQyW2tleV0pIHtcbi8vICAgICAgIGRpZmZlcmVuY2VzLnB1c2goe1xuLy8gICAgICAgICBmaWVsZDoga2V5LFxuLy8gICAgICAgICB2YWx1ZTE6IHNlcmlhbGl6ZWQxW2tleV0sXG4vLyAgICAgICAgIHZhbHVlMjogc2VyaWFsaXplZDJba2V5XSxcbi8vICAgICAgIH0pO1xuLy8gICAgIH1cbi8vICAgfVxuLy9cbi8vICAgcmV0dXJuIGRpZmZlcmVuY2VzO1xuLy8gfVxuLy9cbi8vIC8vIFN0YXJ0IHRoZSBzZXJ2ZXJcbi8vIHNlcnZlci5zdGFydCh7XG4vLyAgIHRyYW5zcG9ydFR5cGU6IFwic3RkaW9cIixcbi8vIH0pO1xuLy9cbi8vIGV4cG9ydCB7IHNlcnZlciB9O1xuIl19
|
|
File without changes
|