astro-loader-tweets
Version:
Astro loader for loading tweets by ID.
1,435 lines (1,432 loc) • 50.1 kB
TypeScript
import { z } from 'astro/zod';
import { Loader } from 'astro/loaders';
declare const TweetSchema: z.ZodObject<{
id: z.ZodString;
tweet: z.ZodObject<z.objectUtil.extendShape<{
id: z.ZodString;
text: z.ZodString;
edit_history_tweet_ids: z.ZodArray<z.ZodString, "many">;
attachments: z.ZodOptional<z.ZodObject<{
media_keys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
poll_ids: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
}, "strip", z.ZodTypeAny, {
media_keys?: string[] | undefined;
poll_ids?: string[] | undefined;
}, {
media_keys?: string[] | undefined;
poll_ids?: string[] | undefined;
}>>;
author_id: z.ZodOptional<z.ZodString>;
conversation_id: z.ZodOptional<z.ZodString>;
created_at: z.ZodOptional<z.ZodString>;
entities: z.ZodOptional<z.ZodObject<{
annotations: z.ZodOptional<z.ZodArray<z.ZodObject<{
start: z.ZodNumber;
end: z.ZodNumber;
probability: z.ZodNumber;
type: z.ZodString;
normalized_text: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: string;
start: number;
end: number;
probability: number;
normalized_text: string;
}, {
type: string;
start: number;
end: number;
probability: number;
normalized_text: string;
}>, "many">>;
urls: z.ZodOptional<z.ZodArray<z.ZodObject<{
start: z.ZodNumber;
end: z.ZodNumber;
url: z.ZodString;
expanded_url: z.ZodString;
display_url: z.ZodString;
unwound_url: z.ZodOptional<z.ZodString>;
title: z.ZodOptional<z.ZodString>;
description: z.ZodOptional<z.ZodString>;
status: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
media_key: z.ZodOptional<z.ZodString>;
images: z.ZodOptional<z.ZodArray<z.ZodObject<{
url: z.ZodString;
width: z.ZodNumber;
height: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
url: string;
width: number;
height: number;
}, {
url: string;
width: number;
height: number;
}>, "many">>;
}, "strip", z.ZodTypeAny, {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
status?: string | number | undefined;
unwound_url?: string | undefined;
title?: string | undefined;
description?: string | undefined;
media_key?: string | undefined;
images?: {
url: string;
width: number;
height: number;
}[] | undefined;
}, {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
status?: string | number | undefined;
unwound_url?: string | undefined;
title?: string | undefined;
description?: string | undefined;
media_key?: string | undefined;
images?: {
url: string;
width: number;
height: number;
}[] | undefined;
}>, "many">>;
hashtags: z.ZodOptional<z.ZodArray<z.ZodObject<{
start: z.ZodNumber;
end: z.ZodNumber;
tag: z.ZodString;
}, "strip", z.ZodTypeAny, {
start: number;
end: number;
tag: string;
}, {
start: number;
end: number;
tag: string;
}>, "many">>;
cashtags: z.ZodOptional<z.ZodArray<z.ZodObject<{
start: z.ZodNumber;
end: z.ZodNumber;
tag: z.ZodString;
}, "strip", z.ZodTypeAny, {
start: number;
end: number;
tag: string;
}, {
start: number;
end: number;
tag: string;
}>, "many">>;
mentions: z.ZodOptional<z.ZodArray<z.ZodObject<{
start: z.ZodNumber;
end: z.ZodNumber;
username: z.ZodString;
id: z.ZodString;
}, "strip", z.ZodTypeAny, {
id: string;
start: number;
end: number;
username: string;
}, {
id: string;
start: number;
end: number;
username: string;
}>, "many">>;
}, "strip", z.ZodTypeAny, {
annotations?: {
type: string;
start: number;
end: number;
probability: number;
normalized_text: string;
}[] | undefined;
urls?: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
status?: string | number | undefined;
unwound_url?: string | undefined;
title?: string | undefined;
description?: string | undefined;
media_key?: string | undefined;
images?: {
url: string;
width: number;
height: number;
}[] | undefined;
}[] | undefined;
hashtags?: {
start: number;
end: number;
tag: string;
}[] | undefined;
cashtags?: {
start: number;
end: number;
tag: string;
}[] | undefined;
mentions?: {
id: string;
start: number;
end: number;
username: string;
}[] | undefined;
}, {
annotations?: {
type: string;
start: number;
end: number;
probability: number;
normalized_text: string;
}[] | undefined;
urls?: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
status?: string | number | undefined;
unwound_url?: string | undefined;
title?: string | undefined;
description?: string | undefined;
media_key?: string | undefined;
images?: {
url: string;
width: number;
height: number;
}[] | undefined;
}[] | undefined;
hashtags?: {
start: number;
end: number;
tag: string;
}[] | undefined;
cashtags?: {
start: number;
end: number;
tag: string;
}[] | undefined;
mentions?: {
id: string;
start: number;
end: number;
username: string;
}[] | undefined;
}>>;
geo: z.ZodOptional<z.ZodObject<{
coordinates: z.ZodObject<{
type: z.ZodString;
coordinates: z.ZodNullable<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
}, "strip", z.ZodTypeAny, {
type: string;
coordinates: [number, number] | null;
}, {
type: string;
coordinates: [number, number] | null;
}>;
place_id: z.ZodString;
}, "strip", z.ZodTypeAny, {
coordinates: {
type: string;
coordinates: [number, number] | null;
};
place_id: string;
}, {
coordinates: {
type: string;
coordinates: [number, number] | null;
};
place_id: string;
}>>;
in_reply_to_user_id: z.ZodOptional<z.ZodString>;
lang: z.ZodOptional<z.ZodString>;
public_metrics: z.ZodOptional<z.ZodObject<{
retweet_count: z.ZodNumber;
reply_count: z.ZodNumber;
like_count: z.ZodNumber;
quote_count: z.ZodNumber;
impression_count: z.ZodNumber;
bookmark_count: z.ZodOptional<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
retweet_count: number;
reply_count: number;
like_count: number;
quote_count: number;
impression_count: number;
bookmark_count?: number | undefined;
}, {
retweet_count: number;
reply_count: number;
like_count: number;
quote_count: number;
impression_count: number;
bookmark_count?: number | undefined;
}>>;
referenced_tweets: z.ZodOptional<z.ZodArray<z.ZodOptional<z.ZodObject<{
type: z.ZodUnion<[z.ZodLiteral<"retweeted">, z.ZodLiteral<"quoted">, z.ZodLiteral<"replied_to">]>;
id: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: "retweeted" | "quoted" | "replied_to";
id: string;
}, {
type: "retweeted" | "quoted" | "replied_to";
id: string;
}>>, "many">>;
source: z.ZodOptional<z.ZodString>;
}, {
text_html: z.ZodString;
text_markdown: z.ZodString;
view_type: z.ZodEnum<["none", "media", "link"]>;
url_for_link_view: z.ZodOptional<z.ZodString>;
}>, "strip", z.ZodTypeAny, {
id: string;
text: string;
edit_history_tweet_ids: string[];
text_html: string;
text_markdown: string;
view_type: "none" | "media" | "link";
attachments?: {
media_keys?: string[] | undefined;
poll_ids?: string[] | undefined;
} | undefined;
author_id?: string | undefined;
conversation_id?: string | undefined;
created_at?: string | undefined;
entities?: {
annotations?: {
type: string;
start: number;
end: number;
probability: number;
normalized_text: string;
}[] | undefined;
urls?: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
status?: string | number | undefined;
unwound_url?: string | undefined;
title?: string | undefined;
description?: string | undefined;
media_key?: string | undefined;
images?: {
url: string;
width: number;
height: number;
}[] | undefined;
}[] | undefined;
hashtags?: {
start: number;
end: number;
tag: string;
}[] | undefined;
cashtags?: {
start: number;
end: number;
tag: string;
}[] | undefined;
mentions?: {
id: string;
start: number;
end: number;
username: string;
}[] | undefined;
} | undefined;
geo?: {
coordinates: {
type: string;
coordinates: [number, number] | null;
};
place_id: string;
} | undefined;
in_reply_to_user_id?: string | undefined;
lang?: string | undefined;
public_metrics?: {
retweet_count: number;
reply_count: number;
like_count: number;
quote_count: number;
impression_count: number;
bookmark_count?: number | undefined;
} | undefined;
referenced_tweets?: ({
type: "retweeted" | "quoted" | "replied_to";
id: string;
} | undefined)[] | undefined;
source?: string | undefined;
url_for_link_view?: string | undefined;
}, {
id: string;
text: string;
edit_history_tweet_ids: string[];
text_html: string;
text_markdown: string;
view_type: "none" | "media" | "link";
attachments?: {
media_keys?: string[] | undefined;
poll_ids?: string[] | undefined;
} | undefined;
author_id?: string | undefined;
conversation_id?: string | undefined;
created_at?: string | undefined;
entities?: {
annotations?: {
type: string;
start: number;
end: number;
probability: number;
normalized_text: string;
}[] | undefined;
urls?: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
status?: string | number | undefined;
unwound_url?: string | undefined;
title?: string | undefined;
description?: string | undefined;
media_key?: string | undefined;
images?: {
url: string;
width: number;
height: number;
}[] | undefined;
}[] | undefined;
hashtags?: {
start: number;
end: number;
tag: string;
}[] | undefined;
cashtags?: {
start: number;
end: number;
tag: string;
}[] | undefined;
mentions?: {
id: string;
start: number;
end: number;
username: string;
}[] | undefined;
} | undefined;
geo?: {
coordinates: {
type: string;
coordinates: [number, number] | null;
};
place_id: string;
} | undefined;
in_reply_to_user_id?: string | undefined;
lang?: string | undefined;
public_metrics?: {
retweet_count: number;
reply_count: number;
like_count: number;
quote_count: number;
impression_count: number;
bookmark_count?: number | undefined;
} | undefined;
referenced_tweets?: ({
type: "retweeted" | "quoted" | "replied_to";
id: string;
} | undefined)[] | undefined;
source?: string | undefined;
url_for_link_view?: string | undefined;
}>;
user: z.ZodUnion<[z.ZodObject<{
id: z.ZodString;
name: z.ZodString;
username: z.ZodString;
connection_status: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
created_at: z.ZodOptional<z.ZodString>;
description: z.ZodOptional<z.ZodString>;
entities: z.ZodOptional<z.ZodObject<{
url: z.ZodOptional<z.ZodObject<{
urls: z.ZodArray<z.ZodObject<z.objectUtil.extendShape<{
start: z.ZodNumber;
end: z.ZodNumber;
}, {
url: z.ZodString;
expanded_url: z.ZodString;
display_url: z.ZodString;
}>, "strip", z.ZodTypeAny, {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
}, {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
}>, "many">;
}, "strip", z.ZodTypeAny, {
urls: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
}[];
}, {
urls: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
}[];
}>>;
description: z.ZodOptional<z.ZodObject<{
urls: z.ZodOptional<z.ZodArray<z.ZodObject<z.objectUtil.extendShape<{
start: z.ZodNumber;
end: z.ZodNumber;
}, {
url: z.ZodString;
expanded_url: z.ZodString;
display_url: z.ZodString;
}>, "strip", z.ZodTypeAny, {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
}, {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
}>, "many">>;
hashtags: z.ZodOptional<z.ZodArray<z.ZodObject<z.objectUtil.extendShape<{
start: z.ZodNumber;
end: z.ZodNumber;
}, {
tag: z.ZodOptional<z.ZodString>;
hashtag: z.ZodOptional<z.ZodString>;
}>, "strip", z.ZodTypeAny, {
start: number;
end: number;
tag?: string | undefined;
hashtag?: string | undefined;
}, {
start: number;
end: number;
tag?: string | undefined;
hashtag?: string | undefined;
}>, "many">>;
cashtags: z.ZodOptional<z.ZodArray<z.ZodObject<z.objectUtil.extendShape<{
start: z.ZodNumber;
end: z.ZodNumber;
}, {
tag: z.ZodOptional<z.ZodString>;
cashtag: z.ZodOptional<z.ZodString>;
}>, "strip", z.ZodTypeAny, {
start: number;
end: number;
tag?: string | undefined;
cashtag?: string | undefined;
}, {
start: number;
end: number;
tag?: string | undefined;
cashtag?: string | undefined;
}>, "many">>;
mentions: z.ZodOptional<z.ZodArray<z.ZodObject<z.objectUtil.extendShape<{
start: z.ZodNumber;
end: z.ZodNumber;
}, {
username: z.ZodOptional<z.ZodString>;
}>, "strip", z.ZodTypeAny, {
start: number;
end: number;
username?: string | undefined;
}, {
start: number;
end: number;
username?: string | undefined;
}>, "many">>;
}, "strip", z.ZodTypeAny, {
urls?: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
}[] | undefined;
hashtags?: {
start: number;
end: number;
tag?: string | undefined;
hashtag?: string | undefined;
}[] | undefined;
cashtags?: {
start: number;
end: number;
tag?: string | undefined;
cashtag?: string | undefined;
}[] | undefined;
mentions?: {
start: number;
end: number;
username?: string | undefined;
}[] | undefined;
}, {
urls?: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
}[] | undefined;
hashtags?: {
start: number;
end: number;
tag?: string | undefined;
hashtag?: string | undefined;
}[] | undefined;
cashtags?: {
start: number;
end: number;
tag?: string | undefined;
cashtag?: string | undefined;
}[] | undefined;
mentions?: {
start: number;
end: number;
username?: string | undefined;
}[] | undefined;
}>>;
}, "strip", z.ZodTypeAny, {
url?: {
urls: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
}[];
} | undefined;
description?: {
urls?: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
}[] | undefined;
hashtags?: {
start: number;
end: number;
tag?: string | undefined;
hashtag?: string | undefined;
}[] | undefined;
cashtags?: {
start: number;
end: number;
tag?: string | undefined;
cashtag?: string | undefined;
}[] | undefined;
mentions?: {
start: number;
end: number;
username?: string | undefined;
}[] | undefined;
} | undefined;
}, {
url?: {
urls: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
}[];
} | undefined;
description?: {
urls?: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
}[] | undefined;
hashtags?: {
start: number;
end: number;
tag?: string | undefined;
hashtag?: string | undefined;
}[] | undefined;
cashtags?: {
start: number;
end: number;
tag?: string | undefined;
cashtag?: string | undefined;
}[] | undefined;
mentions?: {
start: number;
end: number;
username?: string | undefined;
}[] | undefined;
} | undefined;
}>>;
profile_image_url: z.ZodOptional<z.ZodString>;
public_metrics: z.ZodOptional<z.ZodObject<{
followers_count: z.ZodOptional<z.ZodNumber>;
following_count: z.ZodOptional<z.ZodNumber>;
tweet_count: z.ZodOptional<z.ZodNumber>;
listed_count: z.ZodOptional<z.ZodNumber>;
like_count: z.ZodOptional<z.ZodNumber>;
media_count: z.ZodOptional<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
like_count?: number | undefined;
followers_count?: number | undefined;
following_count?: number | undefined;
tweet_count?: number | undefined;
listed_count?: number | undefined;
media_count?: number | undefined;
}, {
like_count?: number | undefined;
followers_count?: number | undefined;
following_count?: number | undefined;
tweet_count?: number | undefined;
listed_count?: number | undefined;
media_count?: number | undefined;
}>>;
url: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
id: string;
username: string;
name: string;
created_at?: string | undefined;
url?: string | undefined;
description?: string | undefined;
entities?: {
url?: {
urls: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
}[];
} | undefined;
description?: {
urls?: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
}[] | undefined;
hashtags?: {
start: number;
end: number;
tag?: string | undefined;
hashtag?: string | undefined;
}[] | undefined;
cashtags?: {
start: number;
end: number;
tag?: string | undefined;
cashtag?: string | undefined;
}[] | undefined;
mentions?: {
start: number;
end: number;
username?: string | undefined;
}[] | undefined;
} | undefined;
} | undefined;
public_metrics?: {
like_count?: number | undefined;
followers_count?: number | undefined;
following_count?: number | undefined;
tweet_count?: number | undefined;
listed_count?: number | undefined;
media_count?: number | undefined;
} | undefined;
connection_status?: string[] | undefined;
profile_image_url?: string | undefined;
}, {
id: string;
username: string;
name: string;
created_at?: string | undefined;
url?: string | undefined;
description?: string | undefined;
entities?: {
url?: {
urls: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
}[];
} | undefined;
description?: {
urls?: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
}[] | undefined;
hashtags?: {
start: number;
end: number;
tag?: string | undefined;
hashtag?: string | undefined;
}[] | undefined;
cashtags?: {
start: number;
end: number;
tag?: string | undefined;
cashtag?: string | undefined;
}[] | undefined;
mentions?: {
start: number;
end: number;
username?: string | undefined;
}[] | undefined;
} | undefined;
} | undefined;
public_metrics?: {
like_count?: number | undefined;
followers_count?: number | undefined;
following_count?: number | undefined;
tweet_count?: number | undefined;
listed_count?: number | undefined;
media_count?: number | undefined;
} | undefined;
connection_status?: string[] | undefined;
profile_image_url?: string | undefined;
}>, z.ZodNull]>;
place: z.ZodUnion<[z.ZodObject<{
id: z.ZodString;
full_name: z.ZodString;
contained_within: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
country: z.ZodOptional<z.ZodString>;
country_code: z.ZodOptional<z.ZodString>;
geo: z.ZodOptional<z.ZodObject<{
type: z.ZodString;
bbox: z.ZodArray<z.ZodNumber, "many">;
properties: z.ZodAny;
}, "strip", z.ZodTypeAny, {
type: string;
bbox: number[];
properties?: any;
}, {
type: string;
bbox: number[];
properties?: any;
}>>;
name: z.ZodOptional<z.ZodString>;
place_type: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
id: string;
full_name: string;
geo?: {
type: string;
bbox: number[];
properties?: any;
} | undefined;
name?: string | undefined;
contained_within?: string[] | undefined;
country?: string | undefined;
country_code?: string | undefined;
place_type?: string | undefined;
}, {
id: string;
full_name: string;
geo?: {
type: string;
bbox: number[];
properties?: any;
} | undefined;
name?: string | undefined;
contained_within?: string[] | undefined;
country?: string | undefined;
country_code?: string | undefined;
place_type?: string | undefined;
}>, z.ZodNull]>;
media: z.ZodUnion<[z.ZodArray<z.ZodObject<{
media_key: z.ZodString;
type: z.ZodUnion<[z.ZodLiteral<"video">, z.ZodLiteral<"animated_gif">, z.ZodLiteral<"photo">, z.ZodString]>;
url: z.ZodOptional<z.ZodString>;
preview_image_url: z.ZodOptional<z.ZodString>;
width: z.ZodOptional<z.ZodNumber>;
height: z.ZodOptional<z.ZodNumber>;
alt_text: z.ZodOptional<z.ZodString>;
duration_ms: z.ZodOptional<z.ZodNumber>;
public_metrics: z.ZodOptional<z.ZodObject<{
view_count: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
view_count: number;
}, {
view_count: number;
}>>;
variants: z.ZodOptional<z.ZodArray<z.ZodObject<{
bit_rate: z.ZodOptional<z.ZodNumber>;
content_type: z.ZodUnion<[z.ZodLiteral<"video/mp4">, z.ZodLiteral<"application/x-mpegURL">, z.ZodString]>;
url: z.ZodString;
}, "strip", z.ZodTypeAny, {
url: string;
content_type: string;
bit_rate?: number | undefined;
}, {
url: string;
content_type: string;
bit_rate?: number | undefined;
}>, "many">>;
}, "strip", z.ZodTypeAny, {
type: string;
media_key: string;
url?: string | undefined;
width?: number | undefined;
height?: number | undefined;
public_metrics?: {
view_count: number;
} | undefined;
preview_image_url?: string | undefined;
alt_text?: string | undefined;
duration_ms?: number | undefined;
variants?: {
url: string;
content_type: string;
bit_rate?: number | undefined;
}[] | undefined;
}, {
type: string;
media_key: string;
url?: string | undefined;
width?: number | undefined;
height?: number | undefined;
public_metrics?: {
view_count: number;
} | undefined;
preview_image_url?: string | undefined;
alt_text?: string | undefined;
duration_ms?: number | undefined;
variants?: {
url: string;
content_type: string;
bit_rate?: number | undefined;
}[] | undefined;
}>, "many">, z.ZodNull]>;
poll: z.ZodUnion<[z.ZodArray<z.ZodObject<{
id: z.ZodString;
options: z.ZodArray<z.ZodObject<{
position: z.ZodNumber;
label: z.ZodString;
votes: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
position: number;
label: string;
votes: number;
}, {
position: number;
label: string;
votes: number;
}>, "many">;
duration_minutes: z.ZodOptional<z.ZodNumber>;
end_datetime: z.ZodOptional<z.ZodString>;
voting_status: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
options: {
position: number;
label: string;
votes: number;
}[];
id: string;
duration_minutes?: number | undefined;
end_datetime?: string | undefined;
voting_status?: string | undefined;
}, {
options: {
position: number;
label: string;
votes: number;
}[];
id: string;
duration_minutes?: number | undefined;
end_datetime?: string | undefined;
voting_status?: string | undefined;
}>, "many">, z.ZodNull]>;
}, "strip", z.ZodTypeAny, {
tweet: {
id: string;
text: string;
edit_history_tweet_ids: string[];
text_html: string;
text_markdown: string;
view_type: "none" | "media" | "link";
attachments?: {
media_keys?: string[] | undefined;
poll_ids?: string[] | undefined;
} | undefined;
author_id?: string | undefined;
conversation_id?: string | undefined;
created_at?: string | undefined;
entities?: {
annotations?: {
type: string;
start: number;
end: number;
probability: number;
normalized_text: string;
}[] | undefined;
urls?: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
status?: string | number | undefined;
unwound_url?: string | undefined;
title?: string | undefined;
description?: string | undefined;
media_key?: string | undefined;
images?: {
url: string;
width: number;
height: number;
}[] | undefined;
}[] | undefined;
hashtags?: {
start: number;
end: number;
tag: string;
}[] | undefined;
cashtags?: {
start: number;
end: number;
tag: string;
}[] | undefined;
mentions?: {
id: string;
start: number;
end: number;
username: string;
}[] | undefined;
} | undefined;
geo?: {
coordinates: {
type: string;
coordinates: [number, number] | null;
};
place_id: string;
} | undefined;
in_reply_to_user_id?: string | undefined;
lang?: string | undefined;
public_metrics?: {
retweet_count: number;
reply_count: number;
like_count: number;
quote_count: number;
impression_count: number;
bookmark_count?: number | undefined;
} | undefined;
referenced_tweets?: ({
type: "retweeted" | "quoted" | "replied_to";
id: string;
} | undefined)[] | undefined;
source?: string | undefined;
url_for_link_view?: string | undefined;
};
id: string;
media: {
type: string;
media_key: string;
url?: string | undefined;
width?: number | undefined;
height?: number | undefined;
public_metrics?: {
view_count: number;
} | undefined;
preview_image_url?: string | undefined;
alt_text?: string | undefined;
duration_ms?: number | undefined;
variants?: {
url: string;
content_type: string;
bit_rate?: number | undefined;
}[] | undefined;
}[] | null;
user: {
id: string;
username: string;
name: string;
created_at?: string | undefined;
url?: string | undefined;
description?: string | undefined;
entities?: {
url?: {
urls: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
}[];
} | undefined;
description?: {
urls?: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
}[] | undefined;
hashtags?: {
start: number;
end: number;
tag?: string | undefined;
hashtag?: string | undefined;
}[] | undefined;
cashtags?: {
start: number;
end: number;
tag?: string | undefined;
cashtag?: string | undefined;
}[] | undefined;
mentions?: {
start: number;
end: number;
username?: string | undefined;
}[] | undefined;
} | undefined;
} | undefined;
public_metrics?: {
like_count?: number | undefined;
followers_count?: number | undefined;
following_count?: number | undefined;
tweet_count?: number | undefined;
listed_count?: number | undefined;
media_count?: number | undefined;
} | undefined;
connection_status?: string[] | undefined;
profile_image_url?: string | undefined;
} | null;
place: {
id: string;
full_name: string;
geo?: {
type: string;
bbox: number[];
properties?: any;
} | undefined;
name?: string | undefined;
contained_within?: string[] | undefined;
country?: string | undefined;
country_code?: string | undefined;
place_type?: string | undefined;
} | null;
poll: {
options: {
position: number;
label: string;
votes: number;
}[];
id: string;
duration_minutes?: number | undefined;
end_datetime?: string | undefined;
voting_status?: string | undefined;
}[] | null;
}, {
tweet: {
id: string;
text: string;
edit_history_tweet_ids: string[];
text_html: string;
text_markdown: string;
view_type: "none" | "media" | "link";
attachments?: {
media_keys?: string[] | undefined;
poll_ids?: string[] | undefined;
} | undefined;
author_id?: string | undefined;
conversation_id?: string | undefined;
created_at?: string | undefined;
entities?: {
annotations?: {
type: string;
start: number;
end: number;
probability: number;
normalized_text: string;
}[] | undefined;
urls?: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
status?: string | number | undefined;
unwound_url?: string | undefined;
title?: string | undefined;
description?: string | undefined;
media_key?: string | undefined;
images?: {
url: string;
width: number;
height: number;
}[] | undefined;
}[] | undefined;
hashtags?: {
start: number;
end: number;
tag: string;
}[] | undefined;
cashtags?: {
start: number;
end: number;
tag: string;
}[] | undefined;
mentions?: {
id: string;
start: number;
end: number;
username: string;
}[] | undefined;
} | undefined;
geo?: {
coordinates: {
type: string;
coordinates: [number, number] | null;
};
place_id: string;
} | undefined;
in_reply_to_user_id?: string | undefined;
lang?: string | undefined;
public_metrics?: {
retweet_count: number;
reply_count: number;
like_count: number;
quote_count: number;
impression_count: number;
bookmark_count?: number | undefined;
} | undefined;
referenced_tweets?: ({
type: "retweeted" | "quoted" | "replied_to";
id: string;
} | undefined)[] | undefined;
source?: string | undefined;
url_for_link_view?: string | undefined;
};
id: string;
media: {
type: string;
media_key: string;
url?: string | undefined;
width?: number | undefined;
height?: number | undefined;
public_metrics?: {
view_count: number;
} | undefined;
preview_image_url?: string | undefined;
alt_text?: string | undefined;
duration_ms?: number | undefined;
variants?: {
url: string;
content_type: string;
bit_rate?: number | undefined;
}[] | undefined;
}[] | null;
user: {
id: string;
username: string;
name: string;
created_at?: string | undefined;
url?: string | undefined;
description?: string | undefined;
entities?: {
url?: {
urls: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
}[];
} | undefined;
description?: {
urls?: {
start: number;
end: number;
url: string;
expanded_url: string;
display_url: string;
}[] | undefined;
hashtags?: {
start: number;
end: number;
tag?: string | undefined;
hashtag?: string | undefined;
}[] | undefined;
cashtags?: {
start: number;
end: number;
tag?: string | undefined;
cashtag?: string | undefined;
}[] | undefined;
mentions?: {
start: number;
end: number;
username?: string | undefined;
}[] | undefined;
} | undefined;
} | undefined;
public_metrics?: {
like_count?: number | undefined;
followers_count?: number | undefined;
following_count?: number | undefined;
tweet_count?: number | undefined;
listed_count?: number | undefined;
media_count?: number | undefined;
} | undefined;
connection_status?: string[] | undefined;
profile_image_url?: string | undefined;
} | null;
place: {
id: string;
full_name: string;
geo?: {
type: string;
bbox: number[];
properties?: any;
} | undefined;
name?: string | undefined;
contained_within?: string[] | undefined;
country?: string | undefined;
country_code?: string | undefined;
place_type?: string | undefined;
} | null;
poll: {
options: {
position: number;
label: string;
votes: number;
}[];
id: string;
duration_minutes?: number | undefined;
end_datetime?: string | undefined;
voting_status?: string | undefined;
}[] | null;
}>;
declare const TweetsLoaderConfigSchema: z.ZodEffects<z.ZodObject<{
/**
* An array of Tweet IDs to fetch content for.
*/
ids: z.ZodArray<z.ZodString, "many">;
/**
* The method to store the loaded tweets:
* - `'default'`: Uses Astro's default KV store (`./store/data-store.json`).
* - `'custom'`: Use a custom JSON file path.
* - `'both'`: Both default and custom path.
*
* @default 'default'
*/
storage: z.ZodDefault<z.ZodEnum<["default", "custom", "both"]>>;
/**
* The custom output path for storing tweets, either absolute or
* relative to the Astro project root. Must end with `.json`.
* Required if `storage` is `'custom'` or `'both'`.
*
* @example
* 'src/data/tweets.json'
* './src/content/tweets.json'
* '/absolute/path/to/tweets.json'
*/
storePath: z.ZodDefault<z.ZodString>;
/**
* Whether to remove trailing URLs from the tweet text in the generated `text_html` and `text_markdown`,
* typically used for views or referenced tweets.
*
* @default true
*/
removeTrailingUrls: z.ZodDefault<z.ZodBoolean>;
/**
* The type of text to display for links when generating `text_html` and `text_markdown`:
* - `'domain-path'`: Shows the link's domain and path.
* - `'post-text'`: Uses the link text as shown in the tweet.
*
* @default 'post-text'
*/
linkTextType: z.ZodDefault<z.ZodEnum<["domain-path", "post-text"]>>;
/**
* The way for processing `\n` in `text_html` generation:
* - `'none'`: Keep as is.
* - `'break'`: Replace consecutive `\n` with `<br>`.
* - `'paragraph'`: Wrap paragraphs with `<p>` while removing standalone `\n`.
*
* @default 'none'
*/
newlineHandling: z.ZodDefault<z.ZodEnum<["none", "break", "paragraph"]>>;
/**
* The X app-only Bearer Token for authentication.
*
* This is optional; by default, it reads from the `X_TOKEN` environment variable.
* You may also configure it directly here (not recommended; if you do, ensure it is not exposed
* in public code repositories).
*
* @see
* - {@link https://developer.x.com/en/docs/authentication/oauth-2-0/bearer-tokens How to create an X app-only Bearer Token}
* - {@link https://docs.astro.build/en/guides/environment-variables/#setting-environment-variables How to store token in Astro project environment variables}
*/
authToken: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
ids: string[];
storage: "default" | "custom" | "both";
storePath: string;
removeTrailingUrls: boolean;
linkTextType: "post-text" | "domain-path";
newlineHandling: "none" | "break" | "paragraph";
authToken?: string | undefined;
}, {
ids: string[];
storage?: "default" | "custom" | "both" | undefined;
storePath?: string | undefined;
removeTrailingUrls?: boolean | undefined;
linkTextType?: "post-text" | "domain-path" | undefined;
newlineHandling?: "none" | "break" | "paragraph" | undefined;
authToken?: string | undefined;
}>, {
ids: string[];
storage: "default" | "custom" | "both";
storePath: string;
removeTrailingUrls: boolean;
linkTextType: "post-text" | "domain-path";
newlineHandling: "none" | "break" | "paragraph";
authToken?: string | undefined;
}, {
ids: string[];
storage?: "default" | "custom" | "both" | undefined;
storePath?: string | undefined;
removeTrailingUrls?: boolean | undefined;
linkTextType?: "post-text" | "domain-path" | undefined;
newlineHandling?: "none" | "break" | "paragraph" | undefined;
authToken?: string | undefined;
}>;
type TweetsLoaderUserConfig = z.input<typeof TweetsLoaderConfigSchema>;
/**
* Astro loader for loading tweets by ID.
*
* @see https://github.com/lin-stephanie/astro-loaders/tree/main/packages/astro-loader-tweets
*/
declare function tweetsLoader(userConfig: Tw