mirror of
https://github.com/bcye/structured-wikivoyage-exports.git
synced 2025-09-14 08:54:48 +00:00
v0.2.0 compile ts
This commit is contained in:
253
types/index.ts
Normal file
253
types/index.ts
Normal file
@@ -0,0 +1,253 @@
|
||||
/**
|
||||
* Enum for all possible node types
|
||||
*/
|
||||
export enum NodeType {
|
||||
Root = "root",
|
||||
Section = "section",
|
||||
Text = "text",
|
||||
Template = "template",
|
||||
See = "see",
|
||||
Do = "do",
|
||||
Buy = "buy",
|
||||
Eat = "eat",
|
||||
Drink = "drink",
|
||||
Sleep = "sleep",
|
||||
Listing = "listing",
|
||||
Marker = "marker",
|
||||
}
|
||||
|
||||
/**
|
||||
* Base interface for all node types in the Wikivoyage tree
|
||||
*/
|
||||
export interface BaseNode {
|
||||
/** Type identifier for the node */
|
||||
type: NodeType;
|
||||
/** Properties specific to this node type */
|
||||
properties: Record<string, any>;
|
||||
/** Child nodes */
|
||||
children: WikiNode[];
|
||||
}
|
||||
|
||||
/**
|
||||
* Root node of the document
|
||||
*/
|
||||
export interface RootNode extends BaseNode {
|
||||
type: NodeType.Root;
|
||||
properties: {
|
||||
/** Page banner information */
|
||||
pagebanner?: {
|
||||
[key: string]: string;
|
||||
};
|
||||
/** Map frame information */
|
||||
mapframe?: {
|
||||
[key: string]: string;
|
||||
};
|
||||
/** Route box information */
|
||||
routebox?: {
|
||||
[key: string]: string;
|
||||
};
|
||||
/** Geographic coordinates */
|
||||
geo?: {
|
||||
[key: string]: string;
|
||||
};
|
||||
/** Parent region information */
|
||||
isPartOf?: {
|
||||
[key: string]: string;
|
||||
};
|
||||
/** City status information */
|
||||
usablecity?: {
|
||||
[key: string]: string;
|
||||
};
|
||||
guidecity?: {
|
||||
[key: string]: string;
|
||||
};
|
||||
outlinecity?: {
|
||||
[key: string]: string;
|
||||
};
|
||||
title: string;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Section node representing a heading and its content
|
||||
*/
|
||||
export interface SectionNode extends BaseNode {
|
||||
type: NodeType.Section;
|
||||
properties: {
|
||||
/** Section title */
|
||||
title: string;
|
||||
/** Heading level (1-6) */
|
||||
level: number;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Text node containing markdown content
|
||||
*/
|
||||
export interface TextNode extends BaseNode {
|
||||
type: NodeType.Text;
|
||||
properties: {
|
||||
/** Markdown formatted text */
|
||||
markdown: string;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Generic template node for templates not specifically handled
|
||||
*/
|
||||
export interface TemplateNode extends BaseNode {
|
||||
type: NodeType.Template;
|
||||
properties: {
|
||||
/** Template name */
|
||||
name: string;
|
||||
/** Template parameters */
|
||||
params: {
|
||||
[key: string]: string;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Base interface for listing templates (see, do, buy, eat, drink, sleep)
|
||||
*/
|
||||
export interface ListingNode extends BaseNode {
|
||||
properties: {
|
||||
/** Name of the listing */
|
||||
name: string;
|
||||
/** Alternative name */
|
||||
alt?: string;
|
||||
/** URL for the listing */
|
||||
url?: string;
|
||||
/** Email address */
|
||||
email?: string;
|
||||
/** Physical address */
|
||||
address?: string;
|
||||
/** Latitude coordinate */
|
||||
lat?: string;
|
||||
/** Longitude coordinate */
|
||||
long?: string;
|
||||
/** Directions to reach the location */
|
||||
directions?: string;
|
||||
/** Phone number */
|
||||
phone?: string;
|
||||
/** Toll-free phone number */
|
||||
tollfree?: string;
|
||||
/** Fax number */
|
||||
fax?: string;
|
||||
/** Opening hours */
|
||||
hours?: string;
|
||||
/** Price information */
|
||||
price?: string;
|
||||
/** Last edit timestamp */
|
||||
lastedit?: string;
|
||||
/** Wikipedia article name */
|
||||
wikipedia?: string;
|
||||
/** Wikidata ID */
|
||||
wikidata?: string;
|
||||
/** Image filename */
|
||||
image?: string;
|
||||
/** Description content */
|
||||
content?: string;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* See listing (attractions, landmarks)
|
||||
*/
|
||||
export interface SeeNode extends ListingNode {
|
||||
type: NodeType.See;
|
||||
}
|
||||
|
||||
/**
|
||||
* Do listing (activities)
|
||||
*/
|
||||
export interface DoNode extends ListingNode {
|
||||
type: NodeType.Do;
|
||||
}
|
||||
|
||||
/**
|
||||
* Buy listing (shopping)
|
||||
*/
|
||||
export interface BuyNode extends ListingNode {
|
||||
type: NodeType.Buy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Eat listing (restaurants)
|
||||
*/
|
||||
export interface EatNode extends ListingNode {
|
||||
type: NodeType.Eat;
|
||||
}
|
||||
|
||||
/**
|
||||
* Drink listing (bars, cafes)
|
||||
*/
|
||||
export interface DrinkNode extends ListingNode {
|
||||
type: NodeType.Drink;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sleep listing (accommodations)
|
||||
*/
|
||||
export interface SleepNode extends ListingNode {
|
||||
type: NodeType.Sleep;
|
||||
properties: ListingNode["properties"] & {
|
||||
/** Check-in time */
|
||||
checkin?: string;
|
||||
/** Check-out time */
|
||||
checkout?: string;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Generic listing node
|
||||
*/
|
||||
export interface GenericListingNode extends ListingNode {
|
||||
type: NodeType.Listing;
|
||||
}
|
||||
|
||||
/**
|
||||
* Marker node for map locations
|
||||
*/
|
||||
export interface MarkerNode extends BaseNode {
|
||||
type: NodeType.Marker;
|
||||
properties: {
|
||||
/** Type of marker */
|
||||
type: string;
|
||||
/** Name of the location */
|
||||
name: string;
|
||||
/** Latitude coordinate */
|
||||
lat: string;
|
||||
/** Longitude coordinate */
|
||||
long: string;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Union type of all possible node types
|
||||
*/
|
||||
export type WikiNode<T extends NodeType = NodeType> = T extends NodeType.Root
|
||||
? RootNode
|
||||
: T extends NodeType.Section
|
||||
? SectionNode
|
||||
: T extends NodeType.Text
|
||||
? TextNode
|
||||
: T extends NodeType.Template
|
||||
? TemplateNode
|
||||
: T extends NodeType.See
|
||||
? SeeNode
|
||||
: T extends NodeType.Do
|
||||
? DoNode
|
||||
: T extends NodeType.Buy
|
||||
? BuyNode
|
||||
: T extends NodeType.Eat
|
||||
? EatNode
|
||||
: T extends NodeType.Drink
|
||||
? DrinkNode
|
||||
: T extends NodeType.Sleep
|
||||
? SleepNode
|
||||
: T extends NodeType.Listing
|
||||
? GenericListingNode
|
||||
: T extends NodeType.Marker
|
||||
? MarkerNode
|
||||
: never;
|
Reference in New Issue
Block a user