🔧 TypeScript Schema Fixes: Complete type safety for Directus SDK

- Fixed DirectusSchema to use array types (Sites[], Posts[], etc.) as required by Directus SDK v11+
- Added missing fields to Pages interface: permalink, blocks, seo_title, seo_description, seo_image
- Added missing fields to Posts interface: excerpt, featured_image, published_at, category, author
- Added missing fields to Navigation interface: target
- Added missing fields to GeneratedArticles: is_published, date_updated
- Added missing fields to LocationsCities: county
- Cleaned up 'as unknown' type casts in fetchers.ts
- All TypeScript compilation errors resolved
This commit is contained in:
cawcenter
2025-12-14 13:30:43 -05:00
parent 25c934489c
commit 9c49d6f26a
3 changed files with 55 additions and 34 deletions

File diff suppressed because one or more lines are too long

View File

@@ -60,7 +60,9 @@ export async function fetchSiteGlobals(siteId: string): Promise<Globals | null>
fields: ['*']
})
);
return (globals as unknown as Globals[])?.[0] || null;
// SDK returns array directly - cast only the final result
const result = globals as Globals[];
return result?.[0] ?? null;
} catch (err) {
console.error('Error fetching globals:', err);
return null;
@@ -79,7 +81,8 @@ export async function fetchNavigation(siteId: string): Promise<Partial<Navigatio
fields: ['id', 'label', 'url', 'parent', 'target', 'sort']
})
);
return (nav as unknown as Navigation[]) || [];
// SDK returns array directly
return (nav as Navigation[]) ?? [];
} catch (err) {
console.error('Error fetching navigation:', err);
return [];

View File

@@ -82,8 +82,10 @@ export interface GeneratedArticles {
title?: string;
content?: string;
slug?: string;
is_published?: boolean;
schema_json?: Record<string, any>;
date_created?: string;
date_updated?: string;
}
export interface GenerationJobs {
@@ -103,8 +105,15 @@ export interface Pages {
site_id: string | Sites;
title?: string;
slug?: string;
permalink?: string;
content?: string;
blocks?: Record<string, any>;
schema_json?: Record<string, any>;
seo_title?: string;
seo_description?: string;
seo_image?: string | DirectusFiles;
date_created?: string;
date_updated?: string;
}
export interface Posts {
@@ -113,8 +122,15 @@ export interface Posts {
site_id: string | Sites;
title?: string;
slug?: string;
excerpt?: string;
content?: string;
featured_image?: string | DirectusFiles;
published_at?: string;
category?: string;
author?: string | DirectusUsers;
schema_json?: Record<string, any>;
date_created?: string;
date_updated?: string;
}
export interface Leads {
@@ -169,6 +185,7 @@ export interface Navigation {
label: string;
url: string;
parent?: string | Navigation;
target?: '_blank' | '_self';
sort?: number;
}
@@ -237,45 +254,45 @@ export interface DirectusActivity {
export interface DirectusSchema {
// Batch 1: Foundation
sites: Sites;
campaign_masters: CampaignMasters;
avatar_intelligence: AvatarIntelligence;
avatar_variants: AvatarVariants;
cartesian_patterns: CartesianPatterns;
geo_intelligence: GeoIntelligence;
offer_blocks: OfferBlocks;
sites: Sites[];
campaign_masters: CampaignMasters[];
avatar_intelligence: AvatarIntelligence[];
avatar_variants: AvatarVariants[];
cartesian_patterns: CartesianPatterns[];
geo_intelligence: GeoIntelligence[];
offer_blocks: OfferBlocks[];
// Batch 2: Children
generated_articles: GeneratedArticles;
generation_jobs: GenerationJobs;
pages: Pages;
posts: Posts;
leads: Leads;
headline_inventory: HeadlineInventory;
content_fragments: ContentFragments;
generated_articles: GeneratedArticles[];
generation_jobs: GenerationJobs[];
pages: Pages[];
posts: Posts[];
leads: Leads[];
headline_inventory: HeadlineInventory[];
content_fragments: ContentFragments[];
// Batch 3: Complex
link_targets: LinkTargets;
globals: Globals;
navigation: Navigation;
link_targets: LinkTargets[];
globals: Globals[];
navigation: Navigation[];
// System & Analytics
work_log: WorkLog;
hub_pages: HubPages;
forms: Forms;
form_submissions: FormSubmissions;
site_analytics: SiteAnalytics;
events: AnalyticsEvents;
pageviews: PageViews;
conversions: Conversions;
locations_states: LocationsStates;
locations_counties: LocationsCounties;
locations_cities: LocationsCities;
work_log: WorkLog[];
hub_pages: HubPages[];
forms: Forms[];
form_submissions: FormSubmissions[];
site_analytics: SiteAnalytics[];
events: AnalyticsEvents[];
pageviews: PageViews[];
conversions: Conversions[];
locations_states: LocationsStates[];
locations_counties: LocationsCounties[];
locations_cities: LocationsCities[];
// Directus System
directus_users: DirectusUsers;
directus_files: DirectusFiles;
directus_activity: DirectusActivity;
directus_users: DirectusUsers[];
directus_files: DirectusFiles[];
directus_activity: DirectusActivity[];
}
// ============================================================================
@@ -365,6 +382,7 @@ export interface LocationsCities {
id: string;
name: string;
state: string | LocationsStates;
county?: string | LocationsCounties;
population?: number;
}