diff --git a/src/handlers/RelatedResourcesParser.ts b/src/handlers/RelatedResourcesParser.ts index 78067d0c..ac008fa1 100644 --- a/src/handlers/RelatedResourcesParser.ts +++ b/src/handlers/RelatedResourcesParser.ts @@ -4,17 +4,18 @@ import { InsertRelatedResourcesParams, TemplateUri, } from '../protocol/RelatedResourcesProtocol'; +import { NonEmptyZodString } from '../utils/ZodModel'; -const TemplateUriSchema = z.string().min(1); +const TemplateUriSchema = NonEmptyZodString; const GetRelatedResourceTypesParamsSchema = z.object({ - parentResourceType: z.string().min(1), + parentResourceType: NonEmptyZodString, }); const InsertRelatedResourcesParamsSchema = z.object({ - templateUri: z.string().min(1), - relatedResourceTypes: z.array(z.string().min(1)).min(1), - parentResourceType: z.string().min(1), + templateUri: NonEmptyZodString, + relatedResourceTypes: z.array(NonEmptyZodString).min(1), + parentResourceType: NonEmptyZodString, }); export function parseTemplateUriParams(input: unknown): TemplateUri { diff --git a/src/protocol/LspParser.ts b/src/protocol/LspParser.ts index 53e6e059..839c8abd 100644 --- a/src/protocol/LspParser.ts +++ b/src/protocol/LspParser.ts @@ -1,8 +1,9 @@ import { z } from 'zod'; +import { NonEmptyZodString } from '../utils/ZodModel'; import { Identifiable } from './LspTypes'; const IdentifiableSchema = z.object({ - id: z.string().min(1), + id: NonEmptyZodString, }); export function parseIdentifiable(input: unknown): Identifiable { diff --git a/src/resourceState/ResourceStateParser.ts b/src/resourceState/ResourceStateParser.ts index 06d25bc3..80fb4b0a 100644 --- a/src/resourceState/ResourceStateParser.ts +++ b/src/resourceState/ResourceStateParser.ts @@ -1,6 +1,6 @@ -import { z } from 'zod'; +import { NonEmptyZodString } from '../utils/ZodModel'; -const ResourceTypeNameSchema = z.string().min(1); +const ResourceTypeNameSchema = NonEmptyZodString; export function parseResourceTypeName(input: unknown): string { return ResourceTypeNameSchema.parse(input); diff --git a/src/s3/S3RequestParser.ts b/src/s3/S3RequestParser.ts index 58f96de5..65a76cf6 100644 --- a/src/s3/S3RequestParser.ts +++ b/src/s3/S3RequestParser.ts @@ -1,9 +1,10 @@ import { z } from 'zod'; +import { NonEmptyZodString } from '../utils/ZodModel'; import { UploadFileParams } from './S3RequestType'; const UploadFileParamsSchema = z.object({ - localFilePath: z.string().min(1), - s3Url: z.string().min(1), + localFilePath: NonEmptyZodString, + s3Url: NonEmptyZodString, }); export function parseUploadFileParams(input: unknown): UploadFileParams { diff --git a/src/stacks/actions/StackActionParser.ts b/src/stacks/actions/StackActionParser.ts index 0bac5ed8..dfe5f839 100644 --- a/src/stacks/actions/StackActionParser.ts +++ b/src/stacks/actions/StackActionParser.ts @@ -1,5 +1,6 @@ import { Capability, OnStackFailure } from '@aws-sdk/client-cloudformation'; import { z } from 'zod'; +import { NonEmptyZodString, CfnNameZodString } from '../../utils/ZodModel'; import { ListStackResourcesParams, GetStackEventsParams, @@ -44,9 +45,9 @@ const ResourceToImportSchema = z.object({ const DeploymentModeSchema = z.enum([DeploymentMode.REVERT_DRIFT]); const CreateValidationParamsSchema = z.object({ - id: z.string().min(1), - uri: z.string().min(1), - stackName: z.string().min(1).max(128), + id: NonEmptyZodString, + uri: NonEmptyZodString, + stackName: CfnNameZodString, parameters: z.array(ParameterSchema).optional(), capabilities: z.array(CapabilitySchema).optional(), resourcesToImport: z.array(ResourceToImportSchema).optional(), @@ -61,42 +62,42 @@ const CreateValidationParamsSchema = z.object({ }); const CreateDeploymentParamsSchema = z.object({ - id: z.string().min(1), - stackName: z.string().min(1).max(128), - changeSetName: z.string().min(1).max(128), + id: NonEmptyZodString, + stackName: CfnNameZodString, + changeSetName: CfnNameZodString, }); const DeleteChangeSetParamsSchema = z.object({ - id: z.string().min(1), - stackName: z.string().min(1).max(128), - changeSetName: z.string().min(1).max(128), + id: NonEmptyZodString, + stackName: CfnNameZodString, + changeSetName: CfnNameZodString, }); const DescribeChangeSetParamsSchema = z.object({ - stackName: z.string().min(1).max(128), - changeSetName: z.string().min(1).max(128), + stackName: CfnNameZodString, + changeSetName: CfnNameZodString, }); -const TemplateUriSchema = z.string().min(1); +const TemplateUriSchema = NonEmptyZodString; const ListStackResourcesParamsSchema = z.object({ - stackName: z.string().min(1), + stackName: NonEmptyZodString, nextToken: z.string().optional(), maxItems: z.number().optional(), }); const GetStackEventsParamsSchema = z.object({ - stackName: z.string().min(1).max(128), + stackName: CfnNameZodString, nextToken: z.string().optional(), refresh: z.boolean().optional(), }); const ClearStackEventsParamsSchema = z.object({ - stackName: z.string().min(1).max(128), + stackName: CfnNameZodString, }); const DescribeStackParamsSchema = z.object({ - stackName: z.string().min(1).max(128), + stackName: CfnNameZodString, }); export function parseCreateValidationParams(input: unknown): CreateValidationParams { diff --git a/src/utils/ZodModel.ts b/src/utils/ZodModel.ts new file mode 100644 index 00000000..692e8050 --- /dev/null +++ b/src/utils/ZodModel.ts @@ -0,0 +1,4 @@ +import { z } from 'zod'; + +export const NonEmptyZodString = z.string().trim().min(1); +export const CfnNameZodString = z.string().trim().min(1).max(128);