@aws-amplify/data-schema 1.19.0 → 1.20.0
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/cjs/Authorization.js.map +1 -1
- package/dist/cjs/ClientSchema/utilities/index.js.map +1 -1
- package/dist/cjs/CombineSchema.js +2 -2
- package/dist/cjs/CombineSchema.js.map +1 -1
- package/dist/cjs/CustomOperation.js +5 -5
- package/dist/cjs/CustomOperation.js.map +1 -1
- package/dist/cjs/CustomType.js +1 -2
- package/dist/cjs/CustomType.js.map +1 -1
- package/dist/cjs/EnumType.js +1 -2
- package/dist/cjs/EnumType.js.map +1 -1
- package/dist/cjs/Handler.js +2 -2
- package/dist/cjs/Handler.js.map +1 -1
- package/dist/cjs/ModelField.js +24 -17
- package/dist/cjs/ModelField.js.map +1 -1
- package/dist/cjs/ModelIndex.js +1 -2
- package/dist/cjs/ModelIndex.js.map +1 -1
- package/dist/cjs/ModelRelationshipField.js +4 -4
- package/dist/cjs/ModelRelationshipField.js.map +1 -1
- package/dist/cjs/ModelSchema.js +3 -3
- package/dist/cjs/ModelSchema.js.map +1 -1
- package/dist/cjs/ModelType.js +2 -2
- package/dist/cjs/ModelType.js.map +1 -1
- package/dist/cjs/RefType.js +1 -2
- package/dist/cjs/RefType.js.map +1 -1
- package/dist/cjs/SchemaProcessor.js +12 -3
- package/dist/cjs/SchemaProcessor.js.map +1 -1
- package/dist/cjs/Validate.js +145 -0
- package/dist/cjs/Validate.js.map +1 -0
- package/dist/cjs/a.js.map +1 -1
- package/dist/cjs/ai/ConversationSchemaGraphQLTypes.js.map +1 -1
- package/dist/cjs/ai/ConversationSchemaProcessor.js.map +1 -1
- package/dist/cjs/ai/ConversationType.js +3 -3
- package/dist/cjs/ai/ConversationType.js.map +1 -1
- package/dist/cjs/ai/ModelType.js +1 -2
- package/dist/cjs/ai/ModelType.js.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internals/index.js.map +1 -1
- package/dist/cjs/runtime/addSchemaToClient.js +1 -2
- package/dist/cjs/runtime/addSchemaToClient.js.map +1 -1
- package/dist/cjs/runtime/addSchemaToClientWithInstance.js +1 -2
- package/dist/cjs/runtime/addSchemaToClientWithInstance.js.map +1 -1
- package/dist/cjs/runtime/bridge-types.js.map +1 -1
- package/dist/cjs/runtime/client/index.js.map +1 -1
- package/dist/cjs/runtime/client/index.v3.js.map +1 -1
- package/dist/cjs/runtime/index.js.map +1 -1
- package/dist/cjs/runtime/index.v3.js.map +1 -1
- package/dist/cjs/runtime/internals/APIClient.js +10 -10
- package/dist/cjs/runtime/internals/APIClient.js.map +1 -1
- package/dist/cjs/runtime/internals/ai/conversationMessageDeserializers.js.map +1 -1
- package/dist/cjs/runtime/internals/ai/conversationMessageSerializers.js.map +1 -1
- package/dist/cjs/runtime/internals/ai/conversationStreamEventDeserializers.js.map +1 -1
- package/dist/cjs/runtime/internals/ai/convertItemToConversation.js.map +1 -1
- package/dist/cjs/runtime/internals/ai/convertItemToConversationMessage.js.map +1 -1
- package/dist/cjs/runtime/internals/ai/createCreateConversationFunction.js.map +1 -1
- package/dist/cjs/runtime/internals/ai/createDeleteConversationFunction.js.map +1 -1
- package/dist/cjs/runtime/internals/ai/createGetConversationFunction.js.map +1 -1
- package/dist/cjs/runtime/internals/ai/createListConversationsFunction.js.map +1 -1
- package/dist/cjs/runtime/internals/ai/createListMessagesFunction.js.map +1 -1
- package/dist/cjs/runtime/internals/ai/createOnStreamEventFunction.js.map +1 -1
- package/dist/cjs/runtime/internals/ai/createSendMessageFunction.js.map +1 -1
- package/dist/cjs/runtime/internals/ai/createUpdateConversationFunction.js.map +1 -1
- package/dist/cjs/runtime/internals/ai/getCustomUserAgentDetails.js +2 -2
- package/dist/cjs/runtime/internals/ai/getCustomUserAgentDetails.js.map +1 -1
- package/dist/cjs/runtime/internals/cancellation.js +2 -3
- package/dist/cjs/runtime/internals/cancellation.js.map +1 -1
- package/dist/cjs/runtime/internals/clientUtils.js.map +1 -1
- package/dist/cjs/runtime/internals/generateCustomOperationsProperty.js +4 -5
- package/dist/cjs/runtime/internals/generateCustomOperationsProperty.js.map +1 -1
- package/dist/cjs/runtime/internals/index.js.map +1 -1
- package/dist/cjs/runtime/internals/operations/custom.js +1 -2
- package/dist/cjs/runtime/internals/operations/custom.js.map +1 -1
- package/dist/cjs/runtime/internals/operations/get.js +1 -2
- package/dist/cjs/runtime/internals/operations/get.js.map +1 -1
- package/dist/cjs/runtime/internals/operations/indexQuery.js +1 -2
- package/dist/cjs/runtime/internals/operations/indexQuery.js.map +1 -1
- package/dist/cjs/runtime/internals/operations/list.js +1 -2
- package/dist/cjs/runtime/internals/operations/list.js.map +1 -1
- package/dist/cjs/runtime/internals/operations/observeQuery.js +1 -2
- package/dist/cjs/runtime/internals/operations/observeQuery.js.map +1 -1
- package/dist/cjs/runtime/internals/operations/subscription.js +1 -2
- package/dist/cjs/runtime/internals/operations/subscription.js.map +1 -1
- package/dist/cjs/runtime/internals/operations/utils.js +2 -3
- package/dist/cjs/runtime/internals/operations/utils.js.map +1 -1
- package/dist/cjs/runtime/internals/server/generateModelsProperty.js +1 -2
- package/dist/cjs/runtime/internals/server/generateModelsProperty.js.map +1 -1
- package/dist/cjs/runtime/internals/server/index.js.map +1 -1
- package/dist/cjs/runtime/internals/utils/clientProperties/generateConversationsProperty.js +1 -2
- package/dist/cjs/runtime/internals/utils/clientProperties/generateConversationsProperty.js.map +1 -1
- package/dist/cjs/runtime/internals/utils/clientProperties/generateEnumsProperty.js.map +1 -1
- package/dist/cjs/runtime/internals/utils/clientProperties/generateGenerationsProperty.js +1 -2
- package/dist/cjs/runtime/internals/utils/clientProperties/generateGenerationsProperty.js.map +1 -1
- package/dist/cjs/runtime/internals/utils/clientProperties/generateModelsProperty.js +1 -2
- package/dist/cjs/runtime/internals/utils/clientProperties/generateModelsProperty.js.map +1 -1
- package/dist/cjs/runtime/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.js +1 -2
- package/dist/cjs/runtime/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.js.map +1 -1
- package/dist/cjs/runtime/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.js +1 -2
- package/dist/cjs/runtime/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.js.map +1 -1
- package/dist/cjs/runtime/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.js +1 -2
- package/dist/cjs/runtime/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.js.map +1 -1
- package/dist/cjs/runtime/utils/findIndexByFields.js +1 -2
- package/dist/cjs/runtime/utils/findIndexByFields.js.map +1 -1
- package/dist/cjs/runtime/utils/index.js.map +1 -1
- package/dist/cjs/runtime/utils/resolveOwnerFields.js +1 -2
- package/dist/cjs/runtime/utils/resolveOwnerFields.js.map +1 -1
- package/dist/cjs/runtime/utils/resolvePKFields.js +1 -2
- package/dist/cjs/runtime/utils/resolvePKFields.js.map +1 -1
- package/dist/cjs/runtime/utils/selfAwareAsync.js +1 -2
- package/dist/cjs/runtime/utils/selfAwareAsync.js.map +1 -1
- package/dist/cjs/runtime/utils/stringTransformation.js +1 -2
- package/dist/cjs/runtime/utils/stringTransformation.js.map +1 -1
- package/dist/cjs/util/Brand.js +3 -3
- package/dist/cjs/util/Brand.js.map +1 -1
- package/dist/cjs/util/index.js.map +1 -1
- package/dist/esm/Authorization.d.ts +8 -8
- package/dist/esm/Authorization.mjs.map +1 -1
- package/dist/esm/CombineSchema.mjs.map +1 -1
- package/dist/esm/CustomOperation.mjs.map +1 -1
- package/dist/esm/CustomType.mjs.map +1 -1
- package/dist/esm/EnumType.mjs.map +1 -1
- package/dist/esm/Handler.mjs.map +1 -1
- package/dist/esm/ModelField.d.ts +39 -24
- package/dist/esm/ModelField.mjs +9 -2
- package/dist/esm/ModelField.mjs.map +1 -1
- package/dist/esm/ModelIndex.mjs.map +1 -1
- package/dist/esm/ModelRelationshipField.mjs.map +1 -1
- package/dist/esm/ModelSchema.mjs.map +1 -1
- package/dist/esm/ModelType.d.ts +1 -1
- package/dist/esm/ModelType.mjs.map +1 -1
- package/dist/esm/RefType.mjs.map +1 -1
- package/dist/esm/SchemaProcessor.mjs +12 -2
- package/dist/esm/SchemaProcessor.mjs.map +1 -1
- package/dist/esm/Validate.d.ts +218 -0
- package/dist/esm/Validate.mjs +142 -0
- package/dist/esm/Validate.mjs.map +1 -0
- package/dist/esm/ai/ConversationSchemaGraphQLTypes.mjs.map +1 -1
- package/dist/esm/ai/ConversationSchemaProcessor.mjs.map +1 -1
- package/dist/esm/ai/ConversationType.mjs.map +1 -1
- package/dist/esm/ai/ModelType.mjs.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/runtime/addSchemaToClient.mjs.map +1 -1
- package/dist/esm/runtime/addSchemaToClientWithInstance.mjs.map +1 -1
- package/dist/esm/runtime/bridge-types.mjs.map +1 -1
- package/dist/esm/runtime/internals/APIClient.mjs.map +1 -1
- package/dist/esm/runtime/internals/ai/conversationMessageDeserializers.mjs.map +1 -1
- package/dist/esm/runtime/internals/ai/conversationMessageSerializers.mjs.map +1 -1
- package/dist/esm/runtime/internals/ai/conversationStreamEventDeserializers.mjs.map +1 -1
- package/dist/esm/runtime/internals/ai/convertItemToConversation.mjs.map +1 -1
- package/dist/esm/runtime/internals/ai/createCreateConversationFunction.d.ts +1 -1
- package/dist/esm/runtime/internals/ai/createCreateConversationFunction.mjs.map +1 -1
- package/dist/esm/runtime/internals/ai/createDeleteConversationFunction.d.ts +1 -1
- package/dist/esm/runtime/internals/ai/createDeleteConversationFunction.mjs.map +1 -1
- package/dist/esm/runtime/internals/ai/createGetConversationFunction.d.ts +1 -1
- package/dist/esm/runtime/internals/ai/createGetConversationFunction.mjs.map +1 -1
- package/dist/esm/runtime/internals/ai/createListConversationsFunction.d.ts +1 -1
- package/dist/esm/runtime/internals/ai/createListConversationsFunction.mjs.map +1 -1
- package/dist/esm/runtime/internals/ai/createListMessagesFunction.d.ts +1 -1
- package/dist/esm/runtime/internals/ai/createListMessagesFunction.mjs.map +1 -1
- package/dist/esm/runtime/internals/ai/createOnStreamEventFunction.d.ts +1 -1
- package/dist/esm/runtime/internals/ai/createOnStreamEventFunction.mjs.map +1 -1
- package/dist/esm/runtime/internals/ai/createSendMessageFunction.d.ts +1 -1
- package/dist/esm/runtime/internals/ai/createSendMessageFunction.mjs +1 -1
- package/dist/esm/runtime/internals/ai/createSendMessageFunction.mjs.map +1 -1
- package/dist/esm/runtime/internals/ai/createUpdateConversationFunction.d.ts +1 -1
- package/dist/esm/runtime/internals/ai/createUpdateConversationFunction.mjs.map +1 -1
- package/dist/esm/runtime/internals/ai/getCustomUserAgentDetails.mjs.map +1 -1
- package/dist/esm/runtime/internals/cancellation.mjs.map +1 -1
- package/dist/esm/runtime/internals/clientUtils.mjs.map +1 -1
- package/dist/esm/runtime/internals/generateCustomOperationsProperty.d.ts +3 -3
- package/dist/esm/runtime/internals/generateCustomOperationsProperty.mjs.map +1 -1
- package/dist/esm/runtime/internals/operations/custom.mjs.map +1 -1
- package/dist/esm/runtime/internals/operations/get.mjs.map +1 -1
- package/dist/esm/runtime/internals/operations/indexQuery.mjs +1 -1
- package/dist/esm/runtime/internals/operations/indexQuery.mjs.map +1 -1
- package/dist/esm/runtime/internals/operations/list.mjs.map +1 -1
- package/dist/esm/runtime/internals/operations/observeQuery.mjs.map +1 -1
- package/dist/esm/runtime/internals/operations/subscription.mjs.map +1 -1
- package/dist/esm/runtime/internals/operations/utils.mjs.map +1 -1
- package/dist/esm/runtime/internals/server/generateModelsProperty.mjs.map +1 -1
- package/dist/esm/runtime/internals/utils/clientProperties/generateConversationsProperty.mjs.map +1 -1
- package/dist/esm/runtime/internals/utils/clientProperties/generateEnumsProperty.d.ts +1 -1
- package/dist/esm/runtime/internals/utils/clientProperties/generateEnumsProperty.mjs.map +1 -1
- package/dist/esm/runtime/internals/utils/clientProperties/generateGenerationsProperty.mjs.map +1 -1
- package/dist/esm/runtime/internals/utils/clientProperties/generateModelsProperty.mjs.map +1 -1
- package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.mjs.map +1 -1
- package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.mjs.map +1 -1
- package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.mjs.map +1 -1
- package/dist/esm/runtime/utils/findIndexByFields.mjs.map +1 -1
- package/dist/esm/runtime/utils/resolveOwnerFields.mjs.map +1 -1
- package/dist/esm/runtime/utils/resolvePKFields.mjs.map +1 -1
- package/dist/esm/runtime/utils/selfAwareAsync.mjs.map +1 -1
- package/dist/esm/runtime/utils/stringTransformation.mjs.map +1 -1
- package/dist/esm/util/Brand.mjs.map +1 -1
- package/dist/meta/cjs.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/ModelField.ts +70 -29
- package/src/SchemaProcessor.ts +12 -0
- package/src/Validate.ts +418 -0
- package/src/index.ts +1 -1
package/src/Validate.ts
ADDED
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
import { ModelFieldType } from './ModelField';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The types of validations supported
|
|
5
|
+
*/
|
|
6
|
+
export enum ValidationType {
|
|
7
|
+
GT = 'gt',
|
|
8
|
+
LT = 'lt',
|
|
9
|
+
GTE = 'gte',
|
|
10
|
+
LTE = 'lte',
|
|
11
|
+
MIN_LENGTH = 'minLength',
|
|
12
|
+
MAX_LENGTH = 'maxLength',
|
|
13
|
+
STARTS_WITH = 'startsWith',
|
|
14
|
+
ENDS_WITH = 'endsWith',
|
|
15
|
+
MATCHES = 'matches',
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Represents a validation rule to be applied to a field
|
|
20
|
+
*/
|
|
21
|
+
export interface ValidationRule {
|
|
22
|
+
type: ValidationType;
|
|
23
|
+
value: string | number;
|
|
24
|
+
errorMessage?: string;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Internal interface that includes the getRules method
|
|
29
|
+
* This is not exported and only used internally
|
|
30
|
+
*/
|
|
31
|
+
interface InternalValidationBuilder {
|
|
32
|
+
/**
|
|
33
|
+
* Returns all the validation rules defined by this builder
|
|
34
|
+
*/
|
|
35
|
+
getRules(): ValidationRule[];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Interface for string validation methods without any exclusions
|
|
40
|
+
*/
|
|
41
|
+
export interface StringValidationBuilderBase<T, ExcludedMethods extends string = never> {
|
|
42
|
+
/**
|
|
43
|
+
* Validates that a string field has at least the specified length
|
|
44
|
+
*
|
|
45
|
+
* ⚠️ Only applicable to string fields
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* // String field example
|
|
49
|
+
* a.string().validate(v => v.minLength(5, 'String must be at least 5 characters'))
|
|
50
|
+
*
|
|
51
|
+
* @param length - The minimum length required
|
|
52
|
+
* @param errorMessage - Optional custom error message
|
|
53
|
+
*/
|
|
54
|
+
minLength(
|
|
55
|
+
length: number,
|
|
56
|
+
errorMessage?: string
|
|
57
|
+
): StringValidationBuilder<T, ExcludedMethods | 'minLength'>;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Validates that a string field does not exceed the specified length
|
|
61
|
+
*
|
|
62
|
+
* ⚠️ Only applicable to string fields
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* // String field example
|
|
66
|
+
* a.string().validate(v => v.maxLength(100, 'String must be at most 100 characters'))
|
|
67
|
+
*
|
|
68
|
+
* @param length - The maximum length allowed
|
|
69
|
+
* @param errorMessage - Optional custom error message
|
|
70
|
+
*/
|
|
71
|
+
maxLength(
|
|
72
|
+
length: number,
|
|
73
|
+
errorMessage?: string
|
|
74
|
+
): StringValidationBuilder<T, ExcludedMethods | 'maxLength'>;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Validates that a string field starts with the specified prefix
|
|
78
|
+
*
|
|
79
|
+
* ⚠️ Only applicable to string fields
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* // String field example
|
|
83
|
+
* a.string().validate(v => v.startsWith("prefix-", 'String must start with prefix-'))
|
|
84
|
+
*
|
|
85
|
+
* @param prefix - The prefix the string must start with
|
|
86
|
+
* @param errorMessage - Optional custom error message
|
|
87
|
+
*/
|
|
88
|
+
startsWith(
|
|
89
|
+
prefix: string,
|
|
90
|
+
errorMessage?: string
|
|
91
|
+
): StringValidationBuilder<T, ExcludedMethods | 'startsWith'>;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Validates that a string field ends with the specified suffix
|
|
95
|
+
*
|
|
96
|
+
* ⚠️ Only applicable to string fields
|
|
97
|
+
* @example
|
|
98
|
+
* // String field example
|
|
99
|
+
* a.string().validate(v => v.endsWith("-suffix", 'String must end with -suffix'))
|
|
100
|
+
*
|
|
101
|
+
* @param suffix - The suffix the string must end with
|
|
102
|
+
* @param errorMessage - Optional custom error message
|
|
103
|
+
*/
|
|
104
|
+
endsWith(
|
|
105
|
+
suffix: string,
|
|
106
|
+
errorMessage?: string
|
|
107
|
+
): StringValidationBuilder<T, ExcludedMethods | 'endsWith'>;
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Validates that a string field matches the specified regular expression pattern
|
|
111
|
+
*
|
|
112
|
+
* ⚠️ Only applicable to string fields
|
|
113
|
+
* @example
|
|
114
|
+
* // String field example
|
|
115
|
+
* a.string().validate(v => v.matches("^[a-zA-Z0-9]+$", 'String must match the regex pattern'))
|
|
116
|
+
*
|
|
117
|
+
* @param pattern - The regex pattern the string must match
|
|
118
|
+
* @param errorMessage - Optional custom error message
|
|
119
|
+
*/
|
|
120
|
+
matches(
|
|
121
|
+
pattern: string,
|
|
122
|
+
errorMessage?: string
|
|
123
|
+
): StringValidationBuilder<T, ExcludedMethods | 'matches'>;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Interface for string validation methods with specific validators excluded
|
|
128
|
+
*
|
|
129
|
+
* This is to disallow duplicate validation operators on the same field, which is not supported in the Validate Transformer.
|
|
130
|
+
*/
|
|
131
|
+
export type StringValidationBuilder<T, ExcludedMethods extends string = never> =
|
|
132
|
+
Omit<StringValidationBuilderBase<T, ExcludedMethods>, ExcludedMethods & keyof StringValidationBuilderBase<T, ExcludedMethods>>;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Interface for numeric validation methods without any exclusions
|
|
136
|
+
*/
|
|
137
|
+
export interface NumericValidationBuilderBase<T, ExcludedMethods extends string = never> {
|
|
138
|
+
/**
|
|
139
|
+
* Validates that a numeric field is greater than the specified value
|
|
140
|
+
*
|
|
141
|
+
* ⚠️ Only applicable for integer or float fields
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* // Integer field example
|
|
145
|
+
* a.integer().validate(v => v.gt(10, 'Integer must be greater than 10'))
|
|
146
|
+
*
|
|
147
|
+
* // Float field example
|
|
148
|
+
* a.float().validate(v => v.gt(3.14, 'Float must be greater than 3.14'))
|
|
149
|
+
*
|
|
150
|
+
* @param value - The value that the field must be greater than
|
|
151
|
+
* @param errorMessage - Optional custom error message
|
|
152
|
+
*/
|
|
153
|
+
gt(
|
|
154
|
+
value: number,
|
|
155
|
+
errorMessage?: string
|
|
156
|
+
): NumericValidationBuilder<T, ExcludedMethods | 'gt' | 'positive'>;
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Validates that a numeric field is less than the specified value
|
|
160
|
+
*
|
|
161
|
+
* ⚠️ Only applicable for integer or float fields
|
|
162
|
+
* @example
|
|
163
|
+
* // Integer field example
|
|
164
|
+
* a.integer().validate(v => v.lt(10, 'Integer must be less than 10'))
|
|
165
|
+
*
|
|
166
|
+
* // Float field example
|
|
167
|
+
* a.float().validate(v => v.lt(3.14, 'Float must be less than 3.14'))
|
|
168
|
+
*
|
|
169
|
+
* @param value - The value that the field must be less than
|
|
170
|
+
* @param errorMessage - Optional custom error message
|
|
171
|
+
*/
|
|
172
|
+
lt(
|
|
173
|
+
value: number,
|
|
174
|
+
errorMessage?: string
|
|
175
|
+
): NumericValidationBuilder<T, ExcludedMethods | 'lt' | 'negative'>;
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Validates that a numeric field is greater than or equal to the specified value
|
|
179
|
+
*
|
|
180
|
+
* ⚠️ Only applicable for integer or float fields
|
|
181
|
+
*
|
|
182
|
+
* @example
|
|
183
|
+
* // Integer field example
|
|
184
|
+
* a.integer().validate(v => v.gte(10, 'Integer must be greater than or equal to 10'))
|
|
185
|
+
*
|
|
186
|
+
* // Float field example
|
|
187
|
+
* a.float().validate(v => v.gte(3.14, 'Float must be greater than or equal to 3.14'))
|
|
188
|
+
*
|
|
189
|
+
* @param value - The value that the field must be greater than or equal to
|
|
190
|
+
* @param errorMessage - Optional custom error message
|
|
191
|
+
*/
|
|
192
|
+
gte(
|
|
193
|
+
value: number,
|
|
194
|
+
errorMessage?: string
|
|
195
|
+
): NumericValidationBuilder<T, ExcludedMethods | 'gte'>;
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Validates that a numeric field is less than or equal to the specified value
|
|
199
|
+
*
|
|
200
|
+
* ⚠️ Only applicable for integer or float fields
|
|
201
|
+
* @example
|
|
202
|
+
* // Integer field example
|
|
203
|
+
* a.integer().validate(v => v.lte(10, 'Integer must be less than or equal to 10'))
|
|
204
|
+
*
|
|
205
|
+
* // Float field example
|
|
206
|
+
* a.float().validate(v => v.lte(3.14, 'Float must be less than or equal to 3.14'))
|
|
207
|
+
*
|
|
208
|
+
* @param value - The value that the field must be less than or equal to
|
|
209
|
+
* @param errorMessage - Optional custom error message
|
|
210
|
+
*/
|
|
211
|
+
lte(
|
|
212
|
+
value: number,
|
|
213
|
+
errorMessage?: string
|
|
214
|
+
): NumericValidationBuilder<T, ExcludedMethods | 'lte'>;
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Validates that a numeric field is positive
|
|
218
|
+
*
|
|
219
|
+
* ⚠️ Only applicable for integer or float fields
|
|
220
|
+
*
|
|
221
|
+
* @example
|
|
222
|
+
* // Integer field example
|
|
223
|
+
* a.integer().validate(v => v.positive('Integer must be positive'))
|
|
224
|
+
*
|
|
225
|
+
* // Float field example
|
|
226
|
+
* a.float().validate(v => v.positive('Float must be positive'))
|
|
227
|
+
*
|
|
228
|
+
* @param errorMessage - Optional custom error message
|
|
229
|
+
*/
|
|
230
|
+
positive(
|
|
231
|
+
errorMessage?: string
|
|
232
|
+
): NumericValidationBuilder<T, ExcludedMethods | 'positive' | 'gt'>;
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Validates that a numeric field is negative
|
|
236
|
+
*
|
|
237
|
+
* ⚠️ Only applicable for integer or float fields
|
|
238
|
+
* @example
|
|
239
|
+
* // Integer field example
|
|
240
|
+
* a.integer().validate(v => v.negative('Integer must be negative'))
|
|
241
|
+
*
|
|
242
|
+
* // Float field example
|
|
243
|
+
* a.float().validate(v => v.negative('Float must be negative'))
|
|
244
|
+
*
|
|
245
|
+
* @param errorMessage - Optional custom error message
|
|
246
|
+
*/
|
|
247
|
+
negative(
|
|
248
|
+
errorMessage?: string
|
|
249
|
+
): NumericValidationBuilder<T, ExcludedMethods | 'negative' | 'lt'>;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Interface for numeric validation methods with specific validators excluded
|
|
254
|
+
*
|
|
255
|
+
* This is to disallow duplicate validation operators on the same field, which is not supported in the Validate Transformer.
|
|
256
|
+
*/
|
|
257
|
+
export type NumericValidationBuilder<T, ExcludedMethods extends string = never> =
|
|
258
|
+
Omit<NumericValidationBuilderBase<T, ExcludedMethods>, ExcludedMethods & keyof NumericValidationBuilderBase<T, ExcludedMethods>>;
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Maps a ModelFieldType to the appropriate validation builder type
|
|
262
|
+
*
|
|
263
|
+
* Note: This type intentionally uses the public interfaces which don't expose the getRules method
|
|
264
|
+
*/
|
|
265
|
+
export type FieldTypeToValidationBuilder<T, FT extends ModelFieldType> =
|
|
266
|
+
FT extends ModelFieldType.String
|
|
267
|
+
? StringValidationBuilder<T, never>
|
|
268
|
+
: FT extends ModelFieldType.Integer | ModelFieldType.Float
|
|
269
|
+
? NumericValidationBuilder<T, never>
|
|
270
|
+
: never;
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* A builder for creating field validation rules
|
|
274
|
+
* @typeParam T - The type of the field being validated
|
|
275
|
+
*/
|
|
276
|
+
export type ValidationBuilder<T> = StringValidationBuilderBase<T> & NumericValidationBuilderBase<T>;
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Creates an internal validation builder for a specific field type
|
|
280
|
+
* @typeParam T - The type of the field being validated
|
|
281
|
+
*/
|
|
282
|
+
function createValidationBuilderInternal<T>(): ValidationBuilder<T> & InternalValidationBuilder {
|
|
283
|
+
const rules: ValidationRule[] = [];
|
|
284
|
+
|
|
285
|
+
const builder = {
|
|
286
|
+
/**
|
|
287
|
+
* Validates that a numeric field is greater than the specified value
|
|
288
|
+
* @param value - The value that the field must be greater than
|
|
289
|
+
* @param errorMessage - Optional custom error message
|
|
290
|
+
*/
|
|
291
|
+
gt(value: number, errorMessage?: string) {
|
|
292
|
+
rules.push({ type: ValidationType.GT, value, errorMessage });
|
|
293
|
+
return this;
|
|
294
|
+
},
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Validates that a numeric field is less than the specified value
|
|
298
|
+
* @param value - The value that the field must be less than
|
|
299
|
+
* @param errorMessage - Optional custom error message
|
|
300
|
+
*/
|
|
301
|
+
lt(value: number, errorMessage?: string) {
|
|
302
|
+
rules.push({ type: ValidationType.LT, value, errorMessage });
|
|
303
|
+
return this;
|
|
304
|
+
},
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Validates that a numeric field is greater than or equal to the specified value
|
|
308
|
+
* @param value - The value that the field must be greater than or equal to
|
|
309
|
+
* @param errorMessage - Optional custom error message
|
|
310
|
+
*/
|
|
311
|
+
gte(value: number, errorMessage?: string) {
|
|
312
|
+
rules.push({ type: ValidationType.GTE, value, errorMessage });
|
|
313
|
+
return this;
|
|
314
|
+
},
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Validates that a numeric field is less than or equal to the specified value
|
|
318
|
+
* @param value - The value that the field must be less than or equal to
|
|
319
|
+
* @param errorMessage - Optional custom error message
|
|
320
|
+
*/
|
|
321
|
+
lte(value: number, errorMessage?: string) {
|
|
322
|
+
rules.push({ type: ValidationType.LTE, value, errorMessage });
|
|
323
|
+
return this;
|
|
324
|
+
},
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Validates that a numeric field is positive. We use gt(0) internally to achieve this.
|
|
328
|
+
* @param errorMessage - Optional custom error message
|
|
329
|
+
*/
|
|
330
|
+
positive(errorMessage?: string) {
|
|
331
|
+
rules.push({ type: ValidationType.GT, value: 0, errorMessage });
|
|
332
|
+
return this;
|
|
333
|
+
},
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* Validates that a numeric field is negative. We use lt(0) internally to achieve this.
|
|
337
|
+
* @param errorMessage - Optional custom error message
|
|
338
|
+
*/
|
|
339
|
+
negative(errorMessage?: string) {
|
|
340
|
+
rules.push({ type: ValidationType.LT, value: 0, errorMessage });
|
|
341
|
+
return this;
|
|
342
|
+
},
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Validates that a string field has at least the specified length
|
|
346
|
+
* @param length - The minimum length required
|
|
347
|
+
* @param errorMessage - Optional custom error message
|
|
348
|
+
*/
|
|
349
|
+
minLength(length: number, errorMessage?: string) {
|
|
350
|
+
rules.push({ type: ValidationType.MIN_LENGTH, value: length, errorMessage });
|
|
351
|
+
return this;
|
|
352
|
+
},
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Validates that a string field does not exceed the specified length
|
|
356
|
+
* @param length - The maximum length allowed
|
|
357
|
+
* @param errorMessage - Optional custom error message
|
|
358
|
+
*/
|
|
359
|
+
maxLength(length: number, errorMessage?: string) {
|
|
360
|
+
rules.push({ type: ValidationType.MAX_LENGTH, value: length, errorMessage });
|
|
361
|
+
return this;
|
|
362
|
+
},
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* Validates that a string field starts with the specified prefix
|
|
366
|
+
* @param prefix - The prefix the string must start with
|
|
367
|
+
* @param errorMessage - Optional custom error message
|
|
368
|
+
*/
|
|
369
|
+
startsWith(prefix: string, errorMessage?: string) {
|
|
370
|
+
rules.push({ type: ValidationType.STARTS_WITH, value: prefix, errorMessage });
|
|
371
|
+
return this;
|
|
372
|
+
},
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* Validates that a string field ends with the specified suffix
|
|
376
|
+
* @param suffix - The suffix the string must end with
|
|
377
|
+
* @param errorMessage - Optional custom error message
|
|
378
|
+
*/
|
|
379
|
+
endsWith(suffix: string, errorMessage?: string) {
|
|
380
|
+
rules.push({ type: ValidationType.ENDS_WITH, value: suffix, errorMessage });
|
|
381
|
+
return this;
|
|
382
|
+
},
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* Validates that a string field matches the specified regular expression pattern
|
|
386
|
+
* @param pattern - The regex pattern the string must match
|
|
387
|
+
* @param errorMessage - Optional custom error message
|
|
388
|
+
*/
|
|
389
|
+
matches(pattern: string, errorMessage?: string) {
|
|
390
|
+
rules.push({ type: ValidationType.MATCHES, value: pattern, errorMessage });
|
|
391
|
+
return this;
|
|
392
|
+
},
|
|
393
|
+
|
|
394
|
+
/**
|
|
395
|
+
* Returns all the validation rules defined by this builder
|
|
396
|
+
*/
|
|
397
|
+
getRules(): ValidationRule[] {
|
|
398
|
+
return rules;
|
|
399
|
+
}
|
|
400
|
+
} as ValidationBuilder<T> & InternalValidationBuilder;
|
|
401
|
+
|
|
402
|
+
return builder;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
/**
|
|
406
|
+
* Creates a type-safe validation builder for a specific field type with access to get the rules
|
|
407
|
+
* @returns An object containing the validation builder and a function to get the rules
|
|
408
|
+
*/
|
|
409
|
+
export function createValidationBuilder<T, FT extends ModelFieldType>(): {
|
|
410
|
+
builder: FieldTypeToValidationBuilder<T, FT>;
|
|
411
|
+
getRules: () => ValidationRule[];
|
|
412
|
+
} {
|
|
413
|
+
const internalBuilder = createValidationBuilderInternal<T>();
|
|
414
|
+
return {
|
|
415
|
+
builder: internalBuilder as unknown as FieldTypeToValidationBuilder<T, FT>,
|
|
416
|
+
getRules: () => internalBuilder.getRules()
|
|
417
|
+
};
|
|
418
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -7,7 +7,7 @@ export type { ClientSchema };
|
|
|
7
7
|
export type {CombinedModelSchema} from './CombineSchema';
|
|
8
8
|
export type { Authorization, ResourceAuthorization } from './Authorization';
|
|
9
9
|
export type { CustomOperation } from './CustomOperation';
|
|
10
|
-
export type { ModelField, Nullable, Json } from './ModelField';
|
|
10
|
+
export type { ModelField, ModelFieldType, Nullable, Json } from './ModelField';
|
|
11
11
|
export type { ModelSchema, RDSModelSchema} from './ModelSchema';
|
|
12
12
|
export type { ModelType, ModelDefaultIdentifier } from './ModelType';
|
|
13
13
|
export type { RefType } from './RefType';
|