From 8c0871b0fc3a601da47da67e7ea4017001cc1ba6 Mon Sep 17 00:00:00 2001 From: Sean Sica <23294618+seansica@users.noreply.github.com> Date: Tue, 17 Feb 2026 14:58:03 -0500 Subject: [PATCH] feat(schemas): export refinement check bundles in schema modules with partials Exporting groupChecks (et al) allows users to re-compose the original groupSchema and groupPartialSchema with modifications without concern of Zod conflicts introduced in Zod v4.3.6 --- src/schemas/sdo/campaign.schema.ts | 2 +- src/schemas/sdo/group.schema.ts | 2 +- src/schemas/sdo/malware.schema.ts | 2 +- src/schemas/sdo/technique.schema.ts | 2 +- src/schemas/sdo/tool.schema.ts | 2 +- src/schemas/sro/relationship.schema.ts | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/schemas/sdo/campaign.schema.ts b/src/schemas/sdo/campaign.schema.ts index ee4f4630..57bbd4d2 100644 --- a/src/schemas/sdo/campaign.schema.ts +++ b/src/schemas/sdo/campaign.schema.ts @@ -132,7 +132,7 @@ objects with additional temporal tracking fields. export type Campaign = z.infer; export type CampaignPartial = Partial; -const campaignChecks = (ctx: z.core.ParsePayload): void => { +export const campaignChecks = (ctx: z.core.ParsePayload): void => { createFirstAliasRefinement()(ctx); createCitationsRefinement()(ctx); }; diff --git a/src/schemas/sdo/group.schema.ts b/src/schemas/sdo/group.schema.ts index 353b0c3f..4c3b65d2 100644 --- a/src/schemas/sdo/group.schema.ts +++ b/src/schemas/sdo/group.schema.ts @@ -84,7 +84,7 @@ objects and strictly follow the STIX 2.1 specification without additional custom export type Group = z.infer; export type GroupPartial = Partial; -const groupChecks = (ctx: z.core.ParsePayload): void => { +export const groupChecks = (ctx: z.core.ParsePayload): void => { createFirstAliasRefinement()(ctx); }; diff --git a/src/schemas/sdo/malware.schema.ts b/src/schemas/sdo/malware.schema.ts index 5100f278..9fb18d91 100644 --- a/src/schemas/sdo/malware.schema.ts +++ b/src/schemas/sdo/malware.schema.ts @@ -248,7 +248,7 @@ export const malwareBaseSchema = attackBaseDomainObjectSchema export type Malware = z.infer; export type MalwarePartial = Partial; -const malwareChecks = (ctx: z.core.ParsePayload): void => { +export const malwareChecks = (ctx: z.core.ParsePayload): void => { createFirstAliasRefinement()(ctx); createFirstXMitreAliasRefinement()(ctx); }; diff --git a/src/schemas/sdo/technique.schema.ts b/src/schemas/sdo/technique.schema.ts index ab100705..dfea1bfb 100644 --- a/src/schemas/sdo/technique.schema.ts +++ b/src/schemas/sdo/technique.schema.ts @@ -404,7 +404,7 @@ They are represented as \`attack-pattern\` objects with the same structure as te export type Technique = z.infer; export type TechniquePartial = Partial; -const techniqueChecks = (ctx: z.core.ParsePayload): void => { +export const techniqueChecks = (ctx: z.core.ParsePayload): void => { createAttackIdInExternalReferencesRefinement()(ctx); createEnterpriseOnlyPropertiesRefinement()(ctx); createMobileOnlyPropertiesRefinement()(ctx); diff --git a/src/schemas/sdo/tool.schema.ts b/src/schemas/sdo/tool.schema.ts index 6cb325ee..4ba8e2eb 100644 --- a/src/schemas/sdo/tool.schema.ts +++ b/src/schemas/sdo/tool.schema.ts @@ -92,7 +92,7 @@ export const toolBaseSchema = attackBaseDomainObjectSchema export type Tool = z.infer; export type ToolPartial = Partial; -const toolChecks = (ctx: z.core.ParsePayload): void => { +export const toolChecks = (ctx: z.core.ParsePayload): void => { createFirstXMitreAliasRefinement()(ctx); createFirstAliasRefinement()(ctx); }; diff --git a/src/schemas/sro/relationship.schema.ts b/src/schemas/sro/relationship.schema.ts index d4d8565d..2668c660 100644 --- a/src/schemas/sro/relationship.schema.ts +++ b/src/schemas/sro/relationship.schema.ts @@ -313,7 +313,7 @@ export const relationshipBaseSchema = attackBaseRelationshipObjectSchema export type Relationship = z.infer; export type RelationshipPartial = Partial; -const relationshipChecks = (ctx: z.core.ParsePayload): void => { +export const relationshipChecks = (ctx: z.core.ParsePayload): void => { createRelationshipValidationRefinement()(ctx); // Check for deprecated pattern (partial-safe: skip if required fields are missing)