@decaf-ts/decorator-validation 1.7.7 → 1.7.8
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 +629 -254
- package/dist/decorator-validation.esm.cjs +622 -255
- package/lib/constants/validation.cjs +3 -2
- package/lib/constants/validation.d.ts +1 -0
- package/lib/esm/constants/validation.d.ts +1 -0
- package/lib/esm/constants/validation.js +2 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +1 -1
- package/lib/esm/mcp/ModelContextProtocol.d.ts +14 -22
- package/lib/esm/mcp/ModelContextProtocol.js +55 -51
- package/lib/esm/model/Model.d.ts +11 -8
- package/lib/esm/model/Model.js +12 -6
- package/lib/esm/model/decorators.js +1 -1
- package/lib/esm/model/types.d.ts +37 -9
- package/lib/esm/model/types.js +1 -1
- package/lib/esm/model/utils.d.ts +14 -1
- package/lib/esm/model/utils.js +15 -1
- package/lib/esm/model/validation.d.ts +107 -5
- package/lib/esm/model/validation.js +329 -124
- package/lib/esm/types/index.d.ts +1 -0
- package/lib/esm/types/index.js +2 -0
- package/lib/esm/types/validation.d.ts +25 -0
- package/lib/esm/types/validation.js +2 -0
- package/lib/esm/validation/Validators/AsyncValidator.d.ts +72 -0
- package/lib/esm/validation/Validators/AsyncValidator.js +61 -0
- package/lib/esm/validation/Validators/BaseValidator.d.ts +118 -0
- package/lib/esm/validation/Validators/BaseValidator.js +117 -0
- package/lib/esm/validation/Validators/ListValidator.js +2 -2
- package/lib/esm/validation/Validators/MinLengthValidator.d.ts +1 -1
- package/lib/esm/validation/Validators/MinLengthValidator.js +2 -2
- package/lib/esm/validation/Validators/TypeValidator.js +1 -1
- package/lib/esm/validation/Validators/Validator.d.ts +28 -68
- package/lib/esm/validation/Validators/Validator.js +30 -86
- package/lib/esm/validation/Validators/constants.d.ts +12 -11
- package/lib/esm/validation/Validators/constants.js +14 -12
- package/lib/esm/validation/Validators/index.d.ts +1 -0
- package/lib/esm/validation/Validators/index.js +2 -1
- package/lib/esm/validation/decorators.d.ts +2 -1
- package/lib/esm/validation/decorators.js +31 -8
- package/lib/esm/validation/types.d.ts +19 -0
- package/lib/esm/validation/types.js +1 -1
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/mcp/ModelContextProtocol.cjs +55 -51
- package/lib/mcp/ModelContextProtocol.d.ts +14 -22
- package/lib/model/Model.cjs +11 -5
- package/lib/model/Model.d.ts +11 -8
- package/lib/model/decorators.cjs +1 -1
- package/lib/model/types.cjs +1 -1
- package/lib/model/types.d.ts +37 -9
- package/lib/model/utils.cjs +16 -1
- package/lib/model/utils.d.ts +14 -1
- package/lib/model/validation.cjs +334 -125
- package/lib/model/validation.d.ts +107 -5
- package/lib/types/index.cjs +18 -0
- package/lib/types/index.d.ts +1 -0
- package/lib/types/validation.cjs +3 -0
- package/lib/types/validation.d.ts +25 -0
- package/lib/validation/Validators/AsyncValidator.cjs +65 -0
- package/lib/validation/Validators/AsyncValidator.d.ts +72 -0
- package/lib/validation/Validators/BaseValidator.cjs +121 -0
- package/lib/validation/Validators/BaseValidator.d.ts +118 -0
- package/lib/validation/Validators/ListValidator.cjs +2 -2
- package/lib/validation/Validators/MinLengthValidator.cjs +2 -2
- package/lib/validation/Validators/MinLengthValidator.d.ts +1 -1
- package/lib/validation/Validators/TypeValidator.cjs +1 -1
- package/lib/validation/Validators/Validator.cjs +30 -86
- package/lib/validation/Validators/Validator.d.ts +28 -68
- package/lib/validation/Validators/constants.cjs +14 -12
- package/lib/validation/Validators/constants.d.ts +12 -11
- package/lib/validation/Validators/index.cjs +2 -1
- package/lib/validation/Validators/index.d.ts +1 -0
- package/lib/validation/decorators.cjs +32 -8
- package/lib/validation/decorators.d.ts +2 -1
- package/lib/validation/types.cjs +1 -1
- package/lib/validation/types.d.ts +19 -0
- package/package.json +1 -1
package/lib/model/types.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29uZGl0aW9uYWxBc3luYyB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgTW9kZWxFcnJvckRlZmluaXRpb24gfSBmcm9tIFwiLi9Nb2RlbEVycm9yRGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi9Nb2RlbFwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbiB0eXBlIGZvciBidWlsZGluZyBtb2RlbCBpbnN0YW5jZXMgZnJvbSBvYmplY3RzXG4gKiBAc3VtbWFyeSBUeXBlIGRlZmluaXRpb24gZm9yIGEgbW9kZWwgYnVpbGRlciBmdW5jdGlvbiB0aGF0IHBvcHVsYXRlcyBtb2RlbCBwcm9wZXJ0aWVzXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHtUfSBzZWxmIC0gVGhlIHRhcmdldCBtb2RlbCBpbnN0YW5jZSB0byBwb3B1bGF0ZVxuICogQHBhcmFtIHtUIHwgUmVjb3JkPHN0cmluZywgYW55Pn0gW29ial0gLSBUaGUgc291cmNlIG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMgdG8gY29weVxuICogQHJldHVybiB7VH0gLSBUaGUgcG9wdWxhdGVkIG1vZGVsIGluc3RhbmNlXG4gKiBAdHlwZWRlZiBNb2RlbEJ1aWxkZXJGdW5jdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICovXG5leHBvcnQgdHlwZSBNb2RlbEJ1aWxkZXJGdW5jdGlvbiA9IDxUIGV4dGVuZHMgTW9kZWw+KFxuICBzZWxmOiBULFxuICBvYmo/OiBUIHwgUmVjb3JkPHN0cmluZywgYW55PlxuKSA9PiBUO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUeXBlIHJlcHJlc2VudGluZyB2YWxpZCBhcmd1bWVudCB0eXBlcyBmb3IgbW9kZWwgY29uc3RydWN0b3JzXG4gKiBAc3VtbWFyeSBEZWZpbml0aW9uIG9mIGEgTW9kZWwgQ29uc3RydWN0b3IgQXJndW1lbnQgdGhhdCBjYW4gYmUgYSBjb21wbGV0ZSBtb2RlbCwgcGFydGlhbCBtb2RlbCwgb3IgcGxhaW4gb2JqZWN0XG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYgTW9kZWxBcmdcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBzZWUgTW9kZWxDb25zdHJ1Y3RvclxuICovXG5leHBvcnQgdHlwZSBNb2RlbEFyZzxUPiA9IFQgfCBQYXJ0aWFsPFQ+IHwgUmVjb3JkPHN0cmluZywgYW55PjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gR2VuZXJpYyB0eXBlIGZvciBjbGFzcyBjb25zdHJ1Y3RvciBmdW5jdGlvbnNcbiAqIEBzdW1tYXJ5IERlZmluaXRpb24gb2YgYSBDbGFzcyBDb25zdHJ1Y3RvciB0aGF0IGNhbiBjcmVhdGUgaW5zdGFuY2VzIG9mIGEgc3BlY2lmaWVkIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge2FueVtdfSBbYXJnc10gLSBDb25zdHJ1Y3RvciBhcmd1bWVudHNcbiAqIEByZXR1cm4ge1R9IC0gQW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzXG4gKiBAdHlwZWRlZiBDb25zdHJ1Y3RvclxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICovXG5leHBvcnQgdHlwZSBDb25zdHJ1Y3RvcjxUPiA9IHtcbiAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFQ7XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTcGVjaWFsaXplZCBjb25zdHJ1Y3RvciB0eXBlIGZvciBNb2RlbCBjbGFzc2VzXG4gKiBAc3VtbWFyeSBEZWZpbml0aW9uIG9mIGEgTW9kZWwgQ29uc3RydWN0b3IgdGhhdCBjcmVhdGVzIGluc3RhbmNlcyBvZiBNb2RlbCBzdWJjbGFzc2VzXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHtNb2RlbEFyZzxUPn0gW21vZGVsXSAtIEluaXRpYWwgZGF0YSB0byBwb3B1bGF0ZSB0aGUgbW9kZWwgd2l0aFxuICogQHBhcmFtIHthbnlbXX0gW2FyZ3NdIC0gQWRkaXRpb25hbCBjb25zdHJ1Y3RvciBhcmd1bWVudHNcbiAqIEByZXR1cm4ge1R9IC0gQW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIGNsYXNzXG4gKiBAdHlwZWRlZiBNb2RlbENvbnN0cnVjdG9yXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIE1vZGVsQ29uc3RydWN0b3I8VCBleHRlbmRzIE1vZGVsPiA9IHtcbiAgbmV3IChtb2RlbD86IE1vZGVsQXJnPFQ+LCAuLi5hcmdzOiBhbnlbXSk6IFQ7XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBJbnRlcmZhY2UgZm9yIG9iamVjdHMgdGhhdCBjYW4gYmUgdmFsaWRhdGVkLlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgVmFsaWRhdGlvbiBBUEkgZm9yIHZhbGlkYXRpb24gYmVoYXZpb3Igb24gbW9kZWxzLCBzdXBwb3J0aW5nIGJvdGggc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyB2YWxpZGF0aW9ucy5cbiAqIEltcGxlbWVudGVycyBtdXN0IHByb3ZpZGUgYSBgaGFzRXJyb3JzYCBtZXRob2QgdGhhdCBwZXJmb3JtcyB0aGUgdmFsaWRhdGlvbiBhbmQgcmV0dXJucyBlaXRoZXIgdmFsaWRhdGlvbiBlcnJvcnMgb3IgdW5kZWZpbmVkIGlmIHZhbGlkYXRpb24gcGFzc2VzLlxuICpcbiAqIEB0ZW1wbGF0ZSBBc3luYyAtIEEgYm9vbGVhbiBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgdmFsaWRhdGlvbiBpcyBhc3luY2hyb25vdXMgKGB0cnVlYCkgb3Igc3luY2hyb25vdXMgKGBmYWxzZWApLlxuICpcbiAqIEBwYXJhbSB7YW55W119IFthcmdzXSAtIE9wdGlvbmFsIGFyZ3VtZW50cyB0byBjb250cm9sIHZhbGlkYXRpb24gYmVoYXZpb3IgcGFzc2VkIHRvIHRoZSB2YWxpZGF0aW9uIG1ldGhvZC5cbiAqXG4gKiBAaW50ZXJmYWNlIFZhbGlkYXRhYmxlXG4gKiBAY2F0ZWdvcnkgTW9kZWxcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gU3luY2hyb25vdXMgdmFsaWRhdGlvbiBleGFtcGxlXG4gKiBjbGFzcyBTeW5jTW9kZWwgaW1wbGVtZW50cyBWYWxpZGF0YWJsZTxmYWxzZT4ge1xuICogICBoYXNFcnJvcnMoLi4uYXJnczogYW55W10pOiBNb2RlbEVycm9yRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XG4gKiAgICAgLy8gcGVyZm9ybSBzeW5jaHJvbm91cyB2YWxpZGF0aW9uIGxvZ2ljXG4gKiAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gb3IgcmV0dXJuIGVycm9ycyBpZiBpbnZhbGlkXG4gKiAgIH1cbiAqIH1cbiAqXG4gKiAvLyBBc3luY2hyb25vdXMgdmFsaWRhdGlvbiBleGFtcGxlXG4gKiBjbGFzcyBBc3luY01vZGVsIGltcGxlbWVudHMgVmFsaWRhdGFibGU8dHJ1ZT4ge1xuICogICBhc3luYyBoYXNFcnJvcnMoLi4uYXJnczogYW55W10pOiBQcm9taXNlPE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkPiB7XG4gKiAgICAgLy8gcGVyZm9ybSBhc3luY2hyb25vdXMgdmFsaWRhdGlvbiBsb2dpY1xuICogICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIG9yIHJldHVybiBlcnJvcnMgaWYgaW52YWxpZFxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0YWJsZTxBc3luYyBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZT4ge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFZhbGlkYXRlcyB0aGUgb2JqZWN0IGFnYWluc3QgaXRzIHZhbGlkYXRpb24gcnVsZXMuXG4gICAqIEBzdW1tYXJ5IFZhbGlkYXRlcyB0aGUgbW9kZWwgYW5kIHJldHVybnMgdGhlIHtAbGluayBNb2RlbEVycm9yRGVmaW5pdGlvbn0gaWYgYW55IGVycm9ycyBleGlzdCwgb3IgYHVuZGVmaW5lZGAgaWYgbm8gZXJyb3JzLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueVtdfSBbYXJnc10gLSBPcHRpb25hbCBhcmd1bWVudHMgdGhhdCBtYXkgaW5mbHVlbmNlIHZhbGlkYXRpb24gbG9naWMuXG4gICAqIEByZXR1cm4ge0NvbmRpdGlvbmFsQXN5bmM8QXN5bmMsIE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkPn0gVmFsaWRhdGlvbiBlcnJvcnMgb3IgdW5kZWZpbmVkLCBjb25kaXRpb25hbGx5IHdyYXBwZWQgaW4gYSBQcm9taXNlIGlmIGFzeW5jaHJvbm91cy5cbiAgICpcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgaGFzRXJyb3JzKFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IENvbmRpdGlvbmFsQXN5bmM8QXN5bmMsIE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkPjtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlIGZvciBvYmplY3RzIHRoYXQgY2FuIGJlIHNlcmlhbGl6ZWQgdG8gc3RyaW5nXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBzZXJpYWxpemF0aW9uIEFQSSBmb3IgbW9kZWwgb2JqZWN0c1xuICogQGludGVyZmFjZSBTZXJpYWxpemFibGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBNb2RlbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6YWJsZSB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIG9iamVjdCB0byBhIHNlcmlhbGl6ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBzdW1tYXJ5IFNlcmlhbGl6ZXMgdGhlIG1vZGVsIHRvIGEgc3RyaW5nIGZvcm1hdFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IC0gVGhlIHNlcmlhbGl6ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBtZXRob2RcbiAgICovXG4gIHNlcmlhbGl6ZSgpOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEludGVyZmFjZSBmb3Igb2JqZWN0cyB0aGF0IGNhbiBnZW5lcmF0ZSBhIGhhc2ggcmVwcmVzZW50YXRpb25cbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGhhc2hpbmcgQVBJIGZvciBtb2RlbCBvYmplY3RzXG4gKiBAaW50ZXJmYWNlIEhhc2hhYmxlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgTW9kZWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIYXNoYWJsZSB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2VuZXJhdGVzIGEgdW5pcXVlIGhhc2ggc3RyaW5nIGZvciB0aGUgb2JqZWN0XG4gICAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBoYXNoIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0XG4gICAqIEByZXR1cm4ge3N0cmluZ30gLSBIYXNoIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgb2JqZWN0XG4gICAqIEBtZXRob2RcbiAgICovXG4gIGhhc2goKTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBJbnRlcmZhY2UgZm9yIG9iamVjdHMgdGhhdCBjYW4gYmUgY29tcGFyZWQgd2l0aCBvdGhlciBvYmplY3RzXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBlcXVhbGl0eSBjb21wYXJpc29uIEFQSSBmb3IgbW9kZWwgb2JqZWN0c1xuICogQHRlbXBsYXRlIFRcbiAqIEBpbnRlcmZhY2UgQ29tcGFyYWJsZVxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IE1vZGVsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGFyYWJsZTxUPiB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRGV0ZXJtaW5lcyBpZiB0aGlzIG9iamVjdCBpcyBlcXVhbCB0byBhbm90aGVyIG9iamVjdFxuICAgKiBAc3VtbWFyeSBDb21wYXJlcyB0aGlzIG9iamVjdCB3aXRoIGFub3RoZXIgZm9yIGVxdWFsaXR5XG4gICAqIEBwYXJhbSB7VH0gb3RoZXIgLSBUaGUgb2JqZWN0IHRvIGNvbXBhcmUgd2l0aFxuICAgKiBAcGFyYW0ge2FueVtdfSBbYXJnc10gLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyBmb3IgY29tcGFyaXNvblxuICAgKiBAcmV0dXJuIHtib29sZWFufSAtIFRydWUgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2VcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgZXF1YWxzKG90aGVyOiBULCAuLi5hcmdzOiBhbnlbXSk6IGJvb2xlYW47XG59XG4iXX0=
|
package/lib/model/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ConditionalAsync } from "../types";
|
|
1
2
|
import { ModelErrorDefinition } from "./ModelErrorDefinition";
|
|
2
3
|
import { Model } from "./Model";
|
|
3
4
|
/**
|
|
@@ -46,21 +47,48 @@ export type ModelConstructor<T extends Model> = {
|
|
|
46
47
|
new (model?: ModelArg<T>, ...args: any[]): T;
|
|
47
48
|
};
|
|
48
49
|
/**
|
|
49
|
-
* @description Interface for objects that can be validated
|
|
50
|
-
* @summary Defines the Validation API for
|
|
50
|
+
* @description Interface for objects that can be validated.
|
|
51
|
+
* @summary Defines the Validation API for validation behavior on models, supporting both synchronous and asynchronous validations.
|
|
52
|
+
* Implementers must provide a `hasErrors` method that performs the validation and returns either validation errors or undefined if validation passes.
|
|
53
|
+
*
|
|
54
|
+
* @template Async - A boolean flag indicating whether the validation is asynchronous (`true`) or synchronous (`false`).
|
|
55
|
+
*
|
|
56
|
+
* @param {any[]} [args] - Optional arguments to control validation behavior passed to the validation method.
|
|
57
|
+
*
|
|
51
58
|
* @interface Validatable
|
|
52
|
-
* @memberOf module:decorator-validation
|
|
53
59
|
* @category Model
|
|
60
|
+
* @memberOf module:decorator-validation
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* // Synchronous validation example
|
|
65
|
+
* class SyncModel implements Validatable<false> {
|
|
66
|
+
* hasErrors(...args: any[]): ModelErrorDefinition | undefined {
|
|
67
|
+
* // perform synchronous validation logic
|
|
68
|
+
* return undefined; // or return errors if invalid
|
|
69
|
+
* }
|
|
70
|
+
* }
|
|
71
|
+
*
|
|
72
|
+
* // Asynchronous validation example
|
|
73
|
+
* class AsyncModel implements Validatable<true> {
|
|
74
|
+
* async hasErrors(...args: any[]): Promise<ModelErrorDefinition | undefined> {
|
|
75
|
+
* // perform asynchronous validation logic
|
|
76
|
+
* return undefined; // or return errors if invalid
|
|
77
|
+
* }
|
|
78
|
+
* }
|
|
79
|
+
* ```
|
|
54
80
|
*/
|
|
55
|
-
export interface Validatable {
|
|
81
|
+
export interface Validatable<Async extends boolean = false> {
|
|
56
82
|
/**
|
|
57
|
-
* @description Validates the object against its validation rules
|
|
58
|
-
* @summary Validates the model and returns the {@link ModelErrorDefinition} if any errors exist
|
|
59
|
-
*
|
|
60
|
-
* @
|
|
83
|
+
* @description Validates the object against its validation rules.
|
|
84
|
+
* @summary Validates the model and returns the {@link ModelErrorDefinition} if any errors exist, or `undefined` if no errors.
|
|
85
|
+
*
|
|
86
|
+
* @param {any[]} [args] - Optional arguments that may influence validation logic.
|
|
87
|
+
* @return {ConditionalAsync<Async, ModelErrorDefinition | undefined>} Validation errors or undefined, conditionally wrapped in a Promise if asynchronous.
|
|
88
|
+
*
|
|
61
89
|
* @method
|
|
62
90
|
*/
|
|
63
|
-
hasErrors(...args: any[]): ModelErrorDefinition | undefined
|
|
91
|
+
hasErrors(...args: any[]): ConditionalAsync<Async, ModelErrorDefinition | undefined>;
|
|
64
92
|
}
|
|
65
93
|
/**
|
|
66
94
|
* @description Interface for objects that can be serialized to string
|
package/lib/model/utils.cjs
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getModelKey = getModelKey;
|
|
4
4
|
exports.getMetadata = getMetadata;
|
|
5
|
+
exports.toConditionalPromise = toConditionalPromise;
|
|
5
6
|
const constants_1 = require("./../utils/constants.cjs");
|
|
6
7
|
function getModelKey(str) {
|
|
7
8
|
return constants_1.ModelKeys.REFLECT + str;
|
|
@@ -12,4 +13,18 @@ function getMetadata(model) {
|
|
|
12
13
|
throw new Error("could not find metadata for provided " + model.constructor.name);
|
|
13
14
|
return metadata;
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Wraps a value in a Promise if the `async` flag is true.
|
|
18
|
+
*
|
|
19
|
+
* @template T - The type of the value being wrapped.
|
|
20
|
+
* @template Async - A boolean type that determines if the result should be wrapped in a Promise.
|
|
21
|
+
*
|
|
22
|
+
* @param value - The value to return directly or wrap in a Promise.
|
|
23
|
+
* @param async - If true, the value is wrapped in a resolved Promise. If false or undefined, the value is returned as-is.
|
|
24
|
+
*
|
|
25
|
+
* @returns The original value or a Promise resolving to it, depending on the `async` flag.
|
|
26
|
+
*/
|
|
27
|
+
function toConditionalPromise(value, async) {
|
|
28
|
+
return (async ? Promise.resolve(value) : value);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFJQSxrQ0FFQztBQUVELGtDQVVDO0FBYUQsb0RBS0M7QUFwQ0Qsd0RBQStDO0FBSS9DLFNBQWdCLFdBQVcsQ0FBQyxHQUFXO0lBQ3JDLE9BQU8scUJBQVMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxTQUFnQixXQUFXLENBQWtCLEtBQVE7SUFDbkQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FDbEMsV0FBVyxDQUFDLHFCQUFTLENBQUMsS0FBSyxDQUFDLEVBQzVCLEtBQUssQ0FBQyxXQUFXLENBQ2xCLENBQUM7SUFDRixJQUFJLENBQUMsUUFBUTtRQUNYLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUNBQXVDLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ2pFLENBQUM7SUFDSixPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLG9CQUFvQixDQUNsQyxLQUFRLEVBQ1IsS0FBYTtJQUViLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBK0IsQ0FBQztBQUNoRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWxLZXlzIH0gZnJvbSBcIi4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ29uZGl0aW9uYWxBc3luYyB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi9Nb2RlbFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kZWxLZXkoc3RyOiBzdHJpbmcpIHtcbiAgcmV0dXJuIE1vZGVsS2V5cy5SRUZMRUNUICsgc3RyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWV0YWRhdGE8TSBleHRlbmRzIE1vZGVsPihtb2RlbDogTSkge1xuICBjb25zdCBtZXRhZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgZ2V0TW9kZWxLZXkoTW9kZWxLZXlzLk1PREVMKSxcbiAgICBtb2RlbC5jb25zdHJ1Y3RvclxuICApO1xuICBpZiAoIW1ldGFkYXRhKVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiY291bGQgbm90IGZpbmQgbWV0YWRhdGEgZm9yIHByb3ZpZGVkIFwiICsgbW9kZWwuY29uc3RydWN0b3IubmFtZVxuICAgICk7XG4gIHJldHVybiBtZXRhZGF0YTtcbn1cblxuLyoqXG4gKiBXcmFwcyBhIHZhbHVlIGluIGEgUHJvbWlzZSBpZiB0aGUgYGFzeW5jYCBmbGFnIGlzIHRydWUuXG4gKlxuICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgYmVpbmcgd3JhcHBlZC5cbiAqIEB0ZW1wbGF0ZSBBc3luYyAtIEEgYm9vbGVhbiB0eXBlIHRoYXQgZGV0ZXJtaW5lcyBpZiB0aGUgcmVzdWx0IHNob3VsZCBiZSB3cmFwcGVkIGluIGEgUHJvbWlzZS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGRpcmVjdGx5IG9yIHdyYXAgaW4gYSBQcm9taXNlLlxuICogQHBhcmFtIGFzeW5jIC0gSWYgdHJ1ZSwgdGhlIHZhbHVlIGlzIHdyYXBwZWQgaW4gYSByZXNvbHZlZCBQcm9taXNlLiBJZiBmYWxzZSBvciB1bmRlZmluZWQsIHRoZSB2YWx1ZSBpcyByZXR1cm5lZCBhcy1pcy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgb3JpZ2luYWwgdmFsdWUgb3IgYSBQcm9taXNlIHJlc29sdmluZyB0byBpdCwgZGVwZW5kaW5nIG9uIHRoZSBgYXN5bmNgIGZsYWcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0NvbmRpdGlvbmFsUHJvbWlzZTxULCBBc3luYyBleHRlbmRzIGJvb2xlYW4+KFxuICB2YWx1ZTogVCxcbiAgYXN5bmM/OiBBc3luY1xuKTogQ29uZGl0aW9uYWxBc3luYzxBc3luYywgVD4ge1xuICByZXR1cm4gKGFzeW5jID8gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKSA6IHZhbHVlKSBhcyBDb25kaXRpb25hbEFzeW5jPEFzeW5jLCBUPjtcbn1cbiJdfQ==
|
package/lib/model/utils.d.ts
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { ConditionalAsync } from "../types";
|
|
2
|
+
import { Model } from "./Model";
|
|
2
3
|
export declare function getModelKey(str: string): string;
|
|
3
4
|
export declare function getMetadata<M extends Model>(model: M): any;
|
|
5
|
+
/**
|
|
6
|
+
* Wraps a value in a Promise if the `async` flag is true.
|
|
7
|
+
*
|
|
8
|
+
* @template T - The type of the value being wrapped.
|
|
9
|
+
* @template Async - A boolean type that determines if the result should be wrapped in a Promise.
|
|
10
|
+
*
|
|
11
|
+
* @param value - The value to return directly or wrap in a Promise.
|
|
12
|
+
* @param async - If true, the value is wrapped in a resolved Promise. If false or undefined, the value is returned as-is.
|
|
13
|
+
*
|
|
14
|
+
* @returns The original value or a Promise resolving to it, depending on the `async` flag.
|
|
15
|
+
*/
|
|
16
|
+
export declare function toConditionalPromise<T, Async extends boolean>(value: T, async?: Async): ConditionalAsync<Async, T>;
|