@re-shell/cli
Version:
Full-stack development platform uniting microservices and microfrontends. Build complete applications with .NET (ASP.NET Core Web API, Minimal API), Java (Spring Boot, Quarkus, Micronaut, Vert.x), Rust (Actix-Web, Warp, Rocket, Axum), Python (FastAPI, Dja
179 lines (178 loc) • 5.03 kB
TypeScript
import { EventEmitter } from 'events';
import { TemplateCategory } from './template-engine';
export interface MarketplaceTemplate {
id: string;
name: string;
description: string;
category: TemplateCategory;
author: string;
authorProfile?: AuthorProfile;
version: string;
downloads: number;
rating: number;
ratingCount: number;
tags: string[];
featured: boolean;
verified: boolean;
createdAt: Date;
updatedAt: Date;
repository?: string;
homepage?: string;
license?: string;
preview?: TemplatePreview;
stats: TemplateStats;
}
export interface AuthorProfile {
username: string;
displayName: string;
avatar?: string;
bio?: string;
website?: string;
templatesCount: number;
totalDownloads: number;
joinedAt: Date;
verified: boolean;
}
export interface TemplatePreview {
screenshots: string[];
demoUrl?: string;
videoUrl?: string;
codeExamples: CodeExample[];
}
export interface CodeExample {
title: string;
description?: string;
language: string;
code: string;
}
export interface TemplateStats {
weeklyDownloads: number;
monthlyDownloads: number;
yearlyDownloads: number;
forks: number;
stars: number;
issues: number;
pullRequests: number;
lastCommit: Date;
commitCount: number;
contributors: number;
}
export interface TemplateReview {
id: string;
templateId: string;
userId: string;
username: string;
rating: number;
title?: string;
comment?: string;
createdAt: Date;
updatedAt?: Date;
helpful: number;
verified: boolean;
}
export interface SearchOptions {
query?: string;
category?: TemplateCategory;
tags?: string[];
author?: string;
minRating?: number;
verified?: boolean;
featured?: boolean;
sortBy?: 'downloads' | 'rating' | 'updated' | 'created' | 'trending';
order?: 'asc' | 'desc';
limit?: number;
offset?: number;
}
export interface SearchResult {
templates: MarketplaceTemplate[];
total: number;
page: number;
pageSize: number;
totalPages: number;
facets?: SearchFacets;
}
export interface SearchFacets {
categories: Array<{
category: TemplateCategory;
count: number;
}>;
tags: Array<{
tag: string;
count: number;
}>;
authors: Array<{
author: string;
count: number;
}>;
licenses: Array<{
license: string;
count: number;
}>;
}
export interface PublishOptions {
private?: boolean;
beta?: boolean;
dryRun?: boolean;
force?: boolean;
}
export interface PublishResult {
success: boolean;
templateId: string;
version: string;
url?: string;
warnings?: string[];
errors?: string[];
}
export interface MarketplaceConfig {
apiUrl?: string;
apiKey?: string;
cacheDir?: string;
cacheTTL?: number;
enableAnalytics?: boolean;
enableOfflineMode?: boolean;
maxCacheSize?: number;
userAgent?: string;
}
export declare class TemplateMarketplace extends EventEmitter {
private localTemplatesDir;
private config;
private cache;
private validator;
private versionManager;
private offlineTemplates;
private defaultConfig;
constructor(localTemplatesDir: string, config?: MarketplaceConfig);
private initialize;
private loadOfflineTemplates;
search(options?: SearchOptions): Promise<SearchResult>;
private searchOnline;
private searchOffline;
private sortTemplates;
getTemplate(templateId: string): Promise<MarketplaceTemplate | null>;
getReviews(templateId: string, limit?: number, offset?: number): Promise<TemplateReview[]>;
submitReview(templateId: string, rating: number, title?: string, comment?: string): Promise<boolean>;
install(templateId: string, version?: string): Promise<string>;
publish(templatePath: string, options?: PublishOptions): Promise<PublishResult>;
unpublish(templateId: string, version?: string): Promise<boolean>;
getFeaturedTemplates(): Promise<MarketplaceTemplate[]>;
getTrendingTemplates(): Promise<MarketplaceTemplate[]>;
getTemplatesByAuthor(author: string): Promise<MarketplaceTemplate[]>;
getAuthorProfile(username: string): Promise<AuthorProfile | null>;
private apiRequest;
private transformTemplate;
private getDownloadUrl;
private downloadAndExtract;
private loadTemplateFromPath;
private packageTemplate;
private trackInstall;
private updateOfflineCache;
private cleanupOfflineCache;
private getCacheKey;
private getFromCache;
private setCache;
private invalidateCache;
clearCache(): void;
}
export declare function createTemplateMarketplace(localTemplatesDir: string, config?: MarketplaceConfig): TemplateMarketplace;
export declare function getGlobalTemplateMarketplace(): TemplateMarketplace;
export declare function setGlobalTemplateMarketplace(marketplace: TemplateMarketplace): void;