@gt6/sdk 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/types.d.ts +11 -6
- package/dist/core/types.d.ts.map +1 -1
- package/dist/gt6-sdk.cjs.js +18 -13
- package/dist/gt6-sdk.cjs.js.map +1 -1
- package/dist/gt6-sdk.esm.js +18 -13
- package/dist/gt6-sdk.esm.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/modules/articles.d.ts +6 -4
- package/dist/modules/articles.d.ts.map +1 -1
- package/package.json +4 -1
package/dist/core/types.d.ts
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
export interface GT6Config {
|
2
2
|
baseUrl: string;
|
3
|
-
|
4
|
-
rootCategoryId?: string | number;
|
5
|
-
tagAlias?: string;
|
3
|
+
apiKey?: string;
|
6
4
|
timeout?: number;
|
7
5
|
cache?: {
|
8
6
|
enabled: boolean;
|
9
7
|
ttl: number;
|
10
8
|
};
|
9
|
+
platformId?: number;
|
10
|
+
rootCategoryId?: string;
|
11
|
+
tagAlias?: string;
|
11
12
|
}
|
12
13
|
export interface Category {
|
13
14
|
categoryId: number;
|
@@ -95,9 +96,8 @@ export interface ArticleListItem {
|
|
95
96
|
coverImage?: string;
|
96
97
|
}
|
97
98
|
export declare class GT6Error extends Error {
|
98
|
-
|
99
|
-
|
100
|
-
constructor(message: string, status?: number | undefined, code?: string | undefined);
|
99
|
+
statusCode?: number | undefined;
|
100
|
+
constructor(message: string, statusCode?: number | undefined);
|
101
101
|
}
|
102
102
|
export interface ArticleQueryParams {
|
103
103
|
categoryId?: number;
|
@@ -116,4 +116,9 @@ export interface ArticleStats {
|
|
116
116
|
byCategory: Record<number, number>;
|
117
117
|
byTag: Record<number, number>;
|
118
118
|
}
|
119
|
+
export interface GT6Response<T> {
|
120
|
+
success: boolean;
|
121
|
+
data: T;
|
122
|
+
error?: string;
|
123
|
+
}
|
119
124
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/core/types.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
package/dist/gt6-sdk.cjs.js
CHANGED
@@ -4,10 +4,9 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
5
5
|
// 错误类型
|
6
6
|
class GT6Error extends Error {
|
7
|
-
constructor(message,
|
7
|
+
constructor(message, statusCode) {
|
8
8
|
super(message);
|
9
|
-
this.
|
10
|
-
this.code = code;
|
9
|
+
this.statusCode = statusCode;
|
11
10
|
this.name = 'GT6Error';
|
12
11
|
}
|
13
12
|
}
|
@@ -147,12 +146,14 @@ class ArticlesAPI {
|
|
147
146
|
return {
|
148
147
|
articles: [],
|
149
148
|
total: 0,
|
150
|
-
|
149
|
+
page: options?.page || 1,
|
150
|
+
limit: options?.limit || 10
|
151
151
|
};
|
152
152
|
}
|
153
153
|
// 应用分页
|
154
|
-
const
|
155
|
-
const limit = options?.limit ||
|
154
|
+
const page = options?.page || 1;
|
155
|
+
const limit = options?.limit || 10;
|
156
|
+
const offset = (page - 1) * limit;
|
156
157
|
const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);
|
157
158
|
// 获取文章详情
|
158
159
|
const articles = await Promise.all(paginatedArticleIds.map(articleId => this.getArticle(articleId)));
|
@@ -163,8 +164,9 @@ class ArticlesAPI {
|
|
163
164
|
}
|
164
165
|
return {
|
165
166
|
articles: filteredArticles,
|
166
|
-
total: uniqueArticleIds.length,
|
167
|
-
|
167
|
+
total: uniqueArticleIds.length,
|
168
|
+
page,
|
169
|
+
limit
|
168
170
|
};
|
169
171
|
}
|
170
172
|
/**
|
@@ -190,12 +192,14 @@ class ArticlesAPI {
|
|
190
192
|
return {
|
191
193
|
articles: [],
|
192
194
|
total: 0,
|
193
|
-
|
195
|
+
page: options?.page || 1,
|
196
|
+
limit: options?.limit || 10
|
194
197
|
};
|
195
198
|
}
|
196
199
|
// 应用分页
|
197
|
-
const
|
198
|
-
const limit = options?.limit ||
|
200
|
+
const page = options?.page || 1;
|
201
|
+
const limit = options?.limit || 10;
|
202
|
+
const offset = (page - 1) * limit;
|
199
203
|
const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);
|
200
204
|
// 获取文章详情
|
201
205
|
const articles = await Promise.all(paginatedArticleIds.map(articleId => this.getArticle(articleId)));
|
@@ -206,8 +210,9 @@ class ArticlesAPI {
|
|
206
210
|
}
|
207
211
|
return {
|
208
212
|
articles: filteredArticles,
|
209
|
-
total: uniqueArticleIds.length,
|
210
|
-
|
213
|
+
total: uniqueArticleIds.length,
|
214
|
+
page,
|
215
|
+
limit
|
211
216
|
};
|
212
217
|
}
|
213
218
|
/**
|
package/dist/gt6-sdk.cjs.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"gt6-sdk.cjs.js","sources":["../src/core/types.ts","../src/core/client.ts","../src/modules/articles.ts","../src/index.ts"],"sourcesContent":["// 基础配置类型\r\nexport interface GT6Config {\r\n baseUrl: string;\r\n platformId: string | number;\r\n rootCategoryId?: string | number;\r\n tagAlias?: string;\r\n timeout?: number;\r\n cache?: {\r\n enabled: boolean;\r\n ttl: number; // 缓存时间(毫秒)\r\n };\r\n}\r\n\r\n// 分类相关类型\r\nexport interface Category {\r\n categoryId: number;\r\n categoryName: string;\r\n categoryDescription: string;\r\n metaKeywords: string;\r\n status: number;\r\n parentId: number;\r\n sortOrder: number;\r\n createdAt: any;\r\n updatedAt: any;\r\n platformId: number;\r\n articleIds: number[];\r\n children: Category[];\r\n}\r\n\r\nexport interface CategoryResponse {\r\n platformId: number;\r\n categories: Category[];\r\n generatedAt: string;\r\n}\r\n\r\n// 标签相关类型\r\nexport interface Tag {\r\n tagId: number;\r\n tagName: string;\r\n type: number;\r\n platformId: number;\r\n aliases: string;\r\n createdAt: any;\r\n articleIds: number[];\r\n}\r\n\r\nexport interface TagResponse {\r\n platformId: number;\r\n tags: Tag[];\r\n generatedAt: string;\r\n}\r\n\r\n// 文章元数据类型\r\nexport interface ArticleMetaData {\r\n metaId: number;\r\n articleId: number;\r\n metaKey: string;\r\n metaValue: string;\r\n type: number;\r\n templateId: number;\r\n groupId: number;\r\n sortOrder: number;\r\n aiId: number;\r\n fieldId: number;\r\n createdAt: any;\r\n updatedAt: any;\r\n}\r\n\r\n// 文章图片类型\r\nexport interface ArticleImage {\r\n imageId: number;\r\n articleId: number;\r\n metaId: number | null;\r\n imageUrl: string;\r\n imageType: 'cover' | 'content';\r\n sortOrder: number;\r\n createdAt: any;\r\n updatedAt: any;\r\n}\r\n\r\n// 文章类型\r\nexport interface Article {\r\n articleId: number;\r\n title: string;\r\n content: string;\r\n status: 'published' | 'draft' | 'archived';\r\n publishedAt: string;\r\n templateId: number;\r\n aiId: number;\r\n platformId: number;\r\n isVisible: boolean;\r\n displayTemplate: string;\r\n createdAt: any;\r\n updatedAt: any;\r\n categories: Category[];\r\n tags: Tag[];\r\n metaData: ArticleMetaData[];\r\n images: ArticleImage[];\r\n generatedAt: string;\r\n}\r\n\r\n// 文章列表项类型(简化版)\r\nexport interface ArticleListItem {\r\n articleId: number;\r\n title: string;\r\n status: string;\r\n publishedAt: string;\r\n categories: Category[];\r\n tags: Tag[];\r\n coverImage?: string;\r\n}\r\n\r\n// 错误类型\r\nexport class GT6Error extends Error {\r\n constructor(\r\n message: string,\r\n public status?: number,\r\n public code?: string\r\n ) {\r\n super(message);\r\n this.name = 'GT6Error';\r\n }\r\n}\r\n\r\n// 查询参数类型\r\nexport interface ArticleQueryParams {\r\n categoryId?: number;\r\n tagId?: number;\r\n status?: string;\r\n limit?: number;\r\n offset?: number;\r\n sortBy?: 'publishedAt' | 'title' | 'sortOrder';\r\n sortOrder?: 'asc' | 'desc';\r\n}\r\n\r\n// 文章统计类型\r\nexport interface ArticleStats {\r\n total: number;\r\n published: number;\r\n draft: number;\r\n archived: number;\r\n byCategory: Record<number, number>;\r\n byTag: Record<number, number>;\r\n} ","import { GT6Config, GT6Error } from './types';\r\n\r\nexport class GT6Client {\r\n private config: GT6Config;\r\n private cache: Map<string, { data: any; timestamp: number }>;\r\n\r\n constructor(config: GT6Config) {\r\n this.config = {\r\n timeout: 10000,\r\n cache: {\r\n enabled: true,\r\n ttl: 300000 // 5分钟默认缓存\r\n },\r\n ...config\r\n };\r\n this.cache = new Map();\r\n }\r\n\r\n /**\r\n * 发起HTTP请求\r\n */\r\n async request<T>(endpoint: string, options: RequestInit = {}): Promise<T> {\r\n const url = `${this.config.baseUrl}${endpoint}`;\r\n const cacheKey = `${options.method || 'GET'}:${url}`;\r\n\r\n // 检查缓存(只对GET请求缓存)\r\n if (this.config.cache?.enabled && options.method !== 'POST' && options.method !== 'PUT' && options.method !== 'DELETE') {\r\n const cached = this.cache.get(cacheKey);\r\n if (cached && Date.now() - cached.timestamp < this.config.cache.ttl) {\r\n return cached.data;\r\n }\r\n }\r\n\r\n try {\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\r\n\r\n const response = await fetch(url, {\r\n ...options,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n ...options.headers,\r\n },\r\n signal: controller.signal\r\n });\r\n\r\n clearTimeout(timeoutId);\r\n\r\n if (!response.ok) {\r\n throw new GT6Error(\r\n `HTTP ${response.status}: ${response.statusText}`,\r\n response.status\r\n );\r\n }\r\n\r\n const data = await response.json();\r\n\r\n // 更新缓存(只对GET请求缓存)\r\n if (this.config.cache?.enabled && options.method !== 'POST' && options.method !== 'PUT' && options.method !== 'DELETE') {\r\n this.cache.set(cacheKey, { data, timestamp: Date.now() });\r\n }\r\n\r\n return data;\r\n } catch (error: any) {\r\n if (error instanceof GT6Error) {\r\n throw error;\r\n }\r\n \r\n if (error.name === 'AbortError') {\r\n throw new GT6Error('Request timeout', 408);\r\n }\r\n \r\n throw new GT6Error(`Network error: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * 获取配置\r\n */\r\n getConfig(): GT6Config {\r\n return { ...this.config };\r\n }\r\n\r\n /**\r\n * 清除缓存\r\n */\r\n clearCache(): void {\r\n this.cache.clear();\r\n }\r\n\r\n /**\r\n * 获取缓存统计\r\n */\r\n getCacheStats(): { size: number; entries: Array<{ key: string; age: number }> } {\r\n const entries = Array.from(this.cache.entries()).map(([key, value]) => ({\r\n key,\r\n age: Date.now() - value.timestamp\r\n }));\r\n\r\n return {\r\n size: this.cache.size,\r\n entries\r\n };\r\n }\r\n} ","import { GT6Client } from '../core/client';\r\nimport {\r\n Article,\r\n Category,\r\n Tag,\r\n CategoryResponse,\r\n TagResponse\r\n} from '../core/types';\r\n\r\nexport class ArticlesAPI {\r\n constructor(private client: GT6Client) {}\r\n\r\n /**\r\n * 1. 根据文章ID获取文章详情\r\n */\r\n async getArticle(articleId: number | string): Promise<Article> {\r\n return this.client.request<Article>(`/articles/${articleId}.json`);\r\n }\r\n\r\n /**\r\n * 2. 获取文章分类列表\r\n */\r\n async getCategories(rootCategoryId?: number | string): Promise<Category[]> {\r\n const config = this.client.getConfig();\r\n const categoryId = rootCategoryId || config.rootCategoryId || '671920';\r\n \r\n const response = await this.client.request<CategoryResponse>(\r\n `/article-categories/platform-${config.platformId}-root-${categoryId}.json`\r\n );\r\n \r\n return response.categories;\r\n }\r\n\r\n /**\r\n * 3. 获取文章标签列表\r\n */\r\n async getTags(tagAlias?: string): Promise<Tag[]> {\r\n const config = this.client.getConfig();\r\n const alias = tagAlias || config.tagAlias || '001';\r\n \r\n const response = await this.client.request<TagResponse>(\r\n `/article-tags/platform-${config.platformId}-${alias}.json`\r\n );\r\n \r\n return response.tags;\r\n }\r\n\r\n /**\r\n * 4. 根据分类ID获取文章列表\r\n * 支持单个分类ID或分类ID数组\r\n */\r\n async getArticlesByCategory(categoryId: number | number[], options?: {\r\n offset?: number;\r\n limit?: number;\r\n status?: 'published' | 'draft' | 'archived';\r\n }): Promise<{\r\n articles: Article[];\r\n total: number;\r\n categoryIds: number[];\r\n }> {\r\n // 获取分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 将单个分类ID转换为数组\r\n const categoryIds = Array.isArray(categoryId) ? categoryId : [categoryId];\r\n \r\n // 收集所有指定分类下的文章ID\r\n const allArticleIds: number[] = [];\r\n \r\n categoryIds.forEach(id => {\r\n const targetCategory = categories.find(cat => cat.categoryId === id);\r\n if (targetCategory) {\r\n allArticleIds.push(...targetCategory.articleIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueArticleIds = [...new Set(allArticleIds)];\r\n \r\n if (uniqueArticleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n categoryIds\r\n };\r\n }\r\n \r\n // 应用分页\r\n const offset = options?.offset || 0;\r\n const limit = options?.limit || uniqueArticleIds.length;\r\n const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: uniqueArticleIds.length, // 返回去重后的总文章数\r\n categoryIds\r\n };\r\n }\r\n\r\n /**\r\n * 5. 根据标签ID获取文章列表\r\n * 支持单个标签ID或标签ID数组\r\n */\r\n async getArticlesByTag(tagId: number | number[], options?: {\r\n offset?: number;\r\n limit?: number;\r\n status?: 'published' | 'draft' | 'archived';\r\n }): Promise<{\r\n articles: Article[];\r\n total: number;\r\n tagIds: number[];\r\n }> {\r\n // 获取标签数据\r\n const tags = await this.getTags();\r\n \r\n // 将单个标签ID转换为数组\r\n const tagIds = Array.isArray(tagId) ? tagId : [tagId];\r\n \r\n // 收集所有指定标签下的文章ID\r\n const allArticleIds: number[] = [];\r\n \r\n tagIds.forEach(id => {\r\n const targetTag = tags.find(tag => tag.tagId === id);\r\n if (targetTag) {\r\n allArticleIds.push(...targetTag.articleIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueArticleIds = [...new Set(allArticleIds)];\r\n \r\n if (uniqueArticleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n tagIds\r\n };\r\n }\r\n \r\n // 应用分页\r\n const offset = options?.offset || 0;\r\n const limit = options?.limit || uniqueArticleIds.length;\r\n const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: uniqueArticleIds.length, // 返回去重后的总文章数\r\n tagIds\r\n };\r\n }\r\n\r\n /**\r\n * 6. 根据分类ID获取该分类的层级路径\r\n * 用于前端面包屑导航\r\n */\r\n async getCategoryPath(categoryId: number): Promise<{\r\n path: Category[];\r\n currentCategory: Category | null;\r\n breadcrumbs: Array<{\r\n categoryId: number;\r\n categoryName: string;\r\n level: number;\r\n }>;\r\n }> {\r\n // 获取所有分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 查找目标分类\r\n const targetCategory = categories.find(cat => cat.categoryId === categoryId);\r\n \r\n if (!targetCategory) {\r\n return {\r\n path: [],\r\n currentCategory: null,\r\n breadcrumbs: []\r\n };\r\n }\r\n \r\n // 构建分类路径\r\n const path: Category[] = [];\r\n const breadcrumbs: Array<{\r\n categoryId: number;\r\n categoryName: string;\r\n level: number;\r\n }> = [];\r\n \r\n // 递归查找父分类\r\n const buildPath = (currentCategory: Category, level: number = 0): void => {\r\n // 将当前分类添加到路径开头(因为我们要从根到叶子构建)\r\n path.unshift(currentCategory);\r\n breadcrumbs.unshift({\r\n categoryId: currentCategory.categoryId,\r\n categoryName: currentCategory.categoryName,\r\n level\r\n });\r\n \r\n // 如果有父分类,继续递归\r\n if (currentCategory.parentId && currentCategory.parentId !== 0) {\r\n const parentCategory = categories.find(cat => cat.categoryId === currentCategory.parentId);\r\n if (parentCategory) {\r\n buildPath(parentCategory, level + 1);\r\n }\r\n }\r\n };\r\n \r\n // 从目标分类开始构建路径\r\n buildPath(targetCategory);\r\n \r\n return {\r\n path,\r\n currentCategory: targetCategory,\r\n breadcrumbs\r\n };\r\n }\r\n\r\n /**\r\n * 7. 获取指定分类ID下的子分类\r\n * 支持递归获取所有层级的子分类\r\n */\r\n async getSubCategories(categoryId: number, options?: {\r\n recursive?: boolean; // 是否递归获取所有层级的子分类\r\n includeCurrent?: boolean; // 是否包含当前分类\r\n maxDepth?: number; // 最大递归深度,默认不限制\r\n }): Promise<{\r\n subCategories: Category[];\r\n currentCategory: Category | null;\r\n total: number;\r\n depth: number; // 实际递归深度\r\n }> {\r\n // 获取所有分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 查找目标分类\r\n const targetCategory = categories.find(cat => cat.categoryId === categoryId);\r\n \r\n if (!targetCategory) {\r\n return {\r\n subCategories: [],\r\n currentCategory: null,\r\n total: 0,\r\n depth: 0\r\n };\r\n }\r\n \r\n const subCategories: Category[] = [];\r\n let maxDepth = options?.maxDepth || Infinity;\r\n let actualDepth = 0;\r\n \r\n // 递归获取子分类的函数\r\n const collectSubCategories = (parentId: number, currentDepth: number = 0): void => {\r\n if (currentDepth >= maxDepth) {\r\n return;\r\n }\r\n \r\n // 查找直接子分类\r\n const children = categories.filter(cat => cat.parentId === parentId);\r\n \r\n children.forEach(child => {\r\n subCategories.push(child);\r\n \r\n // 如果需要递归且未达到最大深度,继续查找子分类\r\n if (options?.recursive && currentDepth < maxDepth - 1) {\r\n collectSubCategories(child.categoryId, currentDepth + 1);\r\n }\r\n });\r\n \r\n // 更新实际深度\r\n actualDepth = Math.max(actualDepth, currentDepth);\r\n };\r\n \r\n // 开始收集子分类\r\n collectSubCategories(categoryId);\r\n \r\n // 如果需要包含当前分类,添加到结果中\r\n if (options?.includeCurrent) {\r\n subCategories.unshift(targetCategory);\r\n }\r\n \r\n return {\r\n subCategories,\r\n currentCategory: targetCategory,\r\n total: subCategories.length,\r\n depth: actualDepth\r\n };\r\n }\r\n} ","import { GT6Client } from './core/client';\r\nimport { ArticlesAPI } from './modules/articles';\r\nimport { GT6Config } from './core/types';\r\n\r\n/**\r\n * GT6 SDK 主类\r\n * 提供文章管理相关的所有功能\r\n */\r\nexport class GT6SDK {\r\n public articles: ArticlesAPI;\r\n\r\n constructor(config: GT6Config) {\r\n const client = new GT6Client(config);\r\n this.articles = new ArticlesAPI(client);\r\n }\r\n\r\n /**\r\n * 获取客户端实例(用于高级用法)\r\n */\r\n getClient(): GT6Client {\r\n return (this.articles as any).client;\r\n }\r\n\r\n /**\r\n * 清除所有缓存\r\n */\r\n clearCache(): void {\r\n this.getClient().clearCache();\r\n }\r\n\r\n /**\r\n * 获取缓存统计信息\r\n */\r\n getCacheStats() {\r\n return this.getClient().getCacheStats();\r\n }\r\n\r\n /**\r\n * 1. 便捷方法:根据文章ID获取文章详情\r\n */\r\n async getArticle(articleId: number | string) {\r\n return this.articles.getArticle(articleId);\r\n }\r\n\r\n /**\r\n * 2. 便捷方法:获取文章分类列表\r\n */\r\n async getCategories(rootCategoryId?: number | string) {\r\n return this.articles.getCategories(rootCategoryId);\r\n }\r\n\r\n /**\r\n * 3. 便捷方法:获取文章标签列表\r\n */\r\n async getTags(tagAlias?: string) {\r\n return this.articles.getTags(tagAlias);\r\n }\r\n\r\n /**\r\n * 4. 便捷方法:根据分类ID获取文章列表\r\n */\r\n async getArticlesByCategory(categoryId: number | number[], options?: {\r\n offset?: number;\r\n limit?: number;\r\n status?: 'published' | 'draft' | 'archived';\r\n }) {\r\n return this.articles.getArticlesByCategory(categoryId, options);\r\n }\r\n\r\n /**\r\n * 5. 便捷方法:根据标签ID获取文章列表\r\n */\r\n async getArticlesByTag(tagId: number | number[], options?: {\r\n offset?: number;\r\n limit?: number;\r\n status?: 'published' | 'draft' | 'archived';\r\n }) {\r\n return this.articles.getArticlesByTag(tagId, options);\r\n }\r\n\r\n /**\r\n * 6. 便捷方法:根据分类ID获取该分类的层级路径\r\n */\r\n async getCategoryPath(categoryId: number) {\r\n return this.articles.getCategoryPath(categoryId);\r\n }\r\n\r\n /**\r\n * 7. 便捷方法:获取指定分类ID下的子分类\r\n */\r\n async getSubCategories(categoryId: number, options?: {\r\n recursive?: boolean;\r\n includeCurrent?: boolean;\r\n maxDepth?: number;\r\n }) {\r\n return this.articles.getSubCategories(categoryId, options);\r\n }\r\n}\r\n\r\n// 导出所有类型\r\nexport * from './core/types';\r\nexport * from './core/client';\r\nexport * from './modules/articles';\r\n\r\n// 默认导出\r\nexport default GT6SDK; "],"names":[],"mappings":";;;;AAgHA;AACM,MAAO,QAAS,SAAQ,KAAK,CAAA;AACjC,IAAA,WAAA,CACE,OAAe,EACR,MAAe,EACf,IAAa,EAAA;QAEpB,KAAK,CAAC,OAAO,CAAC;QAHP,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,IAAI,GAAJ,IAAI;AAGX,QAAA,IAAI,CAAC,IAAI,GAAG,UAAU;;AAEzB;;MCxHY,SAAS,CAAA;AAIpB,IAAA,WAAA,CAAY,MAAiB,EAAA;QAC3B,IAAI,CAAC,MAAM,GAAG;AACZ,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,MAAM;AACZ,aAAA;AACD,YAAA,GAAG;SACJ;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE;;AAGxB;;AAEG;AACH,IAAA,MAAM,OAAO,CAAI,QAAgB,EAAE,UAAuB,EAAE,EAAA;QAC1D,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA,EAAG,QAAQ,CAAA,CAAE;QAC/C,MAAM,QAAQ,GAAG,CAAA,EAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE;;QAGpD,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;YACtH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AACvC,YAAA,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;gBACnE,OAAO,MAAM,CAAC,IAAI;;;AAItB,QAAA,IAAI;AACF,YAAA,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE;AACxC,YAAA,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AAE3E,YAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;AAChC,gBAAA,GAAG,OAAO;AACV,gBAAA,OAAO,EAAE;AACP,oBAAA,cAAc,EAAE,kBAAkB;oBAClC,GAAG,OAAO,CAAC,OAAO;AACnB,iBAAA;gBACD,MAAM,EAAE,UAAU,CAAC;AACpB,aAAA,CAAC;YAEF,YAAY,CAAC,SAAS,CAAC;AAEvB,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AAChB,gBAAA,MAAM,IAAI,QAAQ,CAChB,CAAA,KAAA,EAAQ,QAAQ,CAAC,MAAM,CAAA,EAAA,EAAK,QAAQ,CAAC,UAAU,CAAA,CAAE,EACjD,QAAQ,CAAC,MAAM,CAChB;;AAGH,YAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;;YAGlC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;AACtH,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;;AAG3D,YAAA,OAAO,IAAI;;QACX,OAAO,KAAU,EAAE;AACnB,YAAA,IAAI,KAAK,YAAY,QAAQ,EAAE;AAC7B,gBAAA,MAAM,KAAK;;AAGb,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;AAC/B,gBAAA,MAAM,IAAI,QAAQ,CAAC,iBAAiB,EAAE,GAAG,CAAC;;YAG5C,MAAM,IAAI,QAAQ,CAAC,CAAA,eAAA,EAAkB,KAAK,CAAC,OAAO,CAAA,CAAE,CAAC;;;AAIzD;;AAEG;IACH,SAAS,GAAA;AACP,QAAA,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;;AAG3B;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;;AAGpB;;AAEG;IACH,aAAa,GAAA;QACX,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM;YACtE,GAAG;YACH,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;AACzB,SAAA,CAAC,CAAC;QAEH,OAAO;AACL,YAAA,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YACrB;SACD;;AAEJ;;MC/FY,WAAW,CAAA;AACtB,IAAA,WAAA,CAAoB,MAAiB,EAAA;QAAjB,IAAA,CAAA,MAAM,GAAN,MAAM;;AAE1B;;AAEG;IACH,MAAM,UAAU,CAAC,SAA0B,EAAA;QACzC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAU,CAAA,UAAA,EAAa,SAAS,CAAA,KAAA,CAAO,CAAC;;AAGpE;;AAEG;IACH,MAAM,aAAa,CAAC,cAAgC,EAAA;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;QACtC,MAAM,UAAU,GAAG,cAAc,IAAI,MAAM,CAAC,cAAc,IAAI,QAAQ;AAEtE,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACxC,CAAA,6BAAA,EAAgC,MAAM,CAAC,UAAU,SAAS,UAAU,CAAA,KAAA,CAAO,CAC5E;QAED,OAAO,QAAQ,CAAC,UAAU;;AAG5B;;AAEG;IACH,MAAM,OAAO,CAAC,QAAiB,EAAA;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;QACtC,MAAM,KAAK,GAAG,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,KAAK;AAElD,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACxC,CAAA,uBAAA,EAA0B,MAAM,CAAC,UAAU,IAAI,KAAK,CAAA,KAAA,CAAO,CAC5D;QAED,OAAO,QAAQ,CAAC,IAAI;;AAGtB;;;AAGG;AACH,IAAA,MAAM,qBAAqB,CAAC,UAA6B,EAAE,OAI1D,EAAA;;AAMC,QAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE;;AAG7C,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,CAAC,UAAU,CAAC;;QAGzE,MAAM,aAAa,GAAa,EAAE;AAElC,QAAA,WAAW,CAAC,OAAO,CAAC,EAAE,IAAG;AACvB,YAAA,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,EAAE,CAAC;YACpE,IAAI,cAAc,EAAE;gBAClB,aAAa,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC;;AAEpD,SAAC,CAAC;;QAGF,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;AAEpD,QAAA,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;YACjC,OAAO;AACL,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,KAAK,EAAE,CAAC;gBACR;aACD;;;AAIH,QAAA,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC;QACnC,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,gBAAgB,CAAC,MAAM;AACvD,QAAA,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;;QAG1E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,mBAAmB,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CACjE;;QAGD,IAAI,gBAAgB,GAAG,QAAQ;AAC/B,QAAA,IAAI,OAAO,EAAE,MAAM,EAAE;AACnB,YAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC;;QAGlF,OAAO;AACL,YAAA,QAAQ,EAAE,gBAAgB;AAC1B,YAAA,KAAK,EAAE,gBAAgB,CAAC,MAAM;YAC9B;SACD;;AAGH;;;AAGG;AACH,IAAA,MAAM,gBAAgB,CAAC,KAAwB,EAAE,OAIhD,EAAA;;AAMC,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;;AAGjC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC;;QAGrD,MAAM,aAAa,GAAa,EAAE;AAElC,QAAA,MAAM,CAAC,OAAO,CAAC,EAAE,IAAG;AAClB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;YACpD,IAAI,SAAS,EAAE;gBACb,aAAa,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,UAAU,CAAC;;AAE/C,SAAC,CAAC;;QAGF,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;AAEpD,QAAA,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;YACjC,OAAO;AACL,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,KAAK,EAAE,CAAC;gBACR;aACD;;;AAIH,QAAA,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC;QACnC,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,gBAAgB,CAAC,MAAM;AACvD,QAAA,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;;QAG1E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,mBAAmB,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CACjE;;QAGD,IAAI,gBAAgB,GAAG,QAAQ;AAC/B,QAAA,IAAI,OAAO,EAAE,MAAM,EAAE;AACnB,YAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC;;QAGlF,OAAO;AACL,YAAA,QAAQ,EAAE,gBAAgB;AAC1B,YAAA,KAAK,EAAE,gBAAgB,CAAC,MAAM;YAC9B;SACD;;AAGH;;;AAGG;IACH,MAAM,eAAe,CAAC,UAAkB,EAAA;;AAUtC,QAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE;;AAG7C,QAAA,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,UAAU,CAAC;QAE5E,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO;AACL,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,eAAe,EAAE,IAAI;AACrB,gBAAA,WAAW,EAAE;aACd;;;QAIH,MAAM,IAAI,GAAe,EAAE;QAC3B,MAAM,WAAW,GAIZ,EAAE;;QAGP,MAAM,SAAS,GAAG,CAAC,eAAyB,EAAE,KAAA,GAAgB,CAAC,KAAU;;AAEvE,YAAA,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;YAC7B,WAAW,CAAC,OAAO,CAAC;gBAClB,UAAU,EAAE,eAAe,CAAC,UAAU;gBACtC,YAAY,EAAE,eAAe,CAAC,YAAY;gBAC1C;AACD,aAAA,CAAC;;YAGF,IAAI,eAAe,CAAC,QAAQ,IAAI,eAAe,CAAC,QAAQ,KAAK,CAAC,EAAE;AAC9D,gBAAA,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,eAAe,CAAC,QAAQ,CAAC;gBAC1F,IAAI,cAAc,EAAE;AAClB,oBAAA,SAAS,CAAC,cAAc,EAAE,KAAK,GAAG,CAAC,CAAC;;;AAG1C,SAAC;;QAGD,SAAS,CAAC,cAAc,CAAC;QAEzB,OAAO;YACL,IAAI;AACJ,YAAA,eAAe,EAAE,cAAc;YAC/B;SACD;;AAGH;;;AAGG;AACH,IAAA,MAAM,gBAAgB,CAAC,UAAkB,EAAE,OAI1C,EAAA;;AAOC,QAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE;;AAG7C,QAAA,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,UAAU,CAAC;QAE5E,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO;AACL,gBAAA,aAAa,EAAE,EAAE;AACjB,gBAAA,eAAe,EAAE,IAAI;AACrB,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,KAAK,EAAE;aACR;;QAGH,MAAM,aAAa,GAAe,EAAE;AACpC,QAAA,IAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,QAAQ;QAC5C,IAAI,WAAW,GAAG,CAAC;;QAGnB,MAAM,oBAAoB,GAAG,CAAC,QAAgB,EAAE,YAAA,GAAuB,CAAC,KAAU;AAChF,YAAA,IAAI,YAAY,IAAI,QAAQ,EAAE;gBAC5B;;;AAIF,YAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC;AAEpE,YAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAG;AACvB,gBAAA,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;;gBAGzB,IAAI,OAAO,EAAE,SAAS,IAAI,YAAY,GAAG,QAAQ,GAAG,CAAC,EAAE;oBACrD,oBAAoB,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,GAAG,CAAC,CAAC;;AAE5D,aAAC,CAAC;;YAGF,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC;AACnD,SAAC;;QAGD,oBAAoB,CAAC,UAAU,CAAC;;AAGhC,QAAA,IAAI,OAAO,EAAE,cAAc,EAAE;AAC3B,YAAA,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC;;QAGvC,OAAO;YACL,aAAa;AACb,YAAA,eAAe,EAAE,cAAc;YAC/B,KAAK,EAAE,aAAa,CAAC,MAAM;AAC3B,YAAA,KAAK,EAAE;SACR;;AAEJ;;AC/SD;;;AAGG;MACU,MAAM,CAAA;AAGjB,IAAA,WAAA,CAAY,MAAiB,EAAA;AAC3B,QAAA,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC;;AAGzC;;AAEG;IACH,SAAS,GAAA;AACP,QAAA,OAAQ,IAAI,CAAC,QAAgB,CAAC,MAAM;;AAGtC;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE;;AAG/B;;AAEG;IACH,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,aAAa,EAAE;;AAGzC;;AAEG;IACH,MAAM,UAAU,CAAC,SAA0B,EAAA;QACzC,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;;AAG5C;;AAEG;IACH,MAAM,aAAa,CAAC,cAAgC,EAAA;QAClD,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC;;AAGpD;;AAEG;IACH,MAAM,OAAO,CAAC,QAAiB,EAAA;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;;AAGxC;;AAEG;AACH,IAAA,MAAM,qBAAqB,CAAC,UAA6B,EAAE,OAI1D,EAAA;QACC,OAAO,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,UAAU,EAAE,OAAO,CAAC;;AAGjE;;AAEG;AACH,IAAA,MAAM,gBAAgB,CAAC,KAAwB,EAAE,OAIhD,EAAA;QACC,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC;;AAGvD;;AAEG;IACH,MAAM,eAAe,CAAC,UAAkB,EAAA;QACtC,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,UAAU,CAAC;;AAGlD;;AAEG;AACH,IAAA,MAAM,gBAAgB,CAAC,UAAkB,EAAE,OAI1C,EAAA;QACC,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC;;AAE7D;;;;;;;;"}
|
1
|
+
{"version":3,"file":"gt6-sdk.cjs.js","sources":["../src/core/types.ts","../src/core/client.ts","../src/modules/articles.ts","../src/index.ts"],"sourcesContent":["// 基础配置类型\r\nexport interface GT6Config {\r\n baseUrl: string;\r\n apiKey?: string;\r\n timeout?: number;\r\n cache?: {\r\n enabled: boolean;\r\n ttl: number; // 缓存时间(毫秒)\r\n };\r\n platformId?: number;\r\n rootCategoryId?: string;\r\n tagAlias?: string;\r\n}\r\n\r\n// 分类相关类型\r\nexport interface Category {\r\n categoryId: number;\r\n categoryName: string;\r\n categoryDescription: string;\r\n metaKeywords: string;\r\n status: number;\r\n parentId: number;\r\n sortOrder: number;\r\n createdAt: any;\r\n updatedAt: any;\r\n platformId: number;\r\n articleIds: number[];\r\n children: Category[];\r\n}\r\n\r\nexport interface CategoryResponse {\r\n platformId: number;\r\n categories: Category[];\r\n generatedAt: string;\r\n}\r\n\r\n// 标签相关类型\r\nexport interface Tag {\r\n tagId: number;\r\n tagName: string;\r\n type: number;\r\n platformId: number;\r\n aliases: string;\r\n createdAt: any;\r\n articleIds: number[];\r\n}\r\n\r\nexport interface TagResponse {\r\n platformId: number;\r\n tags: Tag[];\r\n generatedAt: string;\r\n}\r\n\r\n// 文章元数据类型\r\nexport interface ArticleMetaData {\r\n metaId: number;\r\n articleId: number;\r\n metaKey: string;\r\n metaValue: string;\r\n type: number;\r\n templateId: number;\r\n groupId: number;\r\n sortOrder: number;\r\n aiId: number;\r\n fieldId: number;\r\n createdAt: any;\r\n updatedAt: any;\r\n}\r\n\r\n// 文章图片类型\r\nexport interface ArticleImage {\r\n imageId: number;\r\n articleId: number;\r\n metaId: number | null;\r\n imageUrl: string;\r\n imageType: 'cover' | 'content';\r\n sortOrder: number;\r\n createdAt: any;\r\n updatedAt: any;\r\n}\r\n\r\n// 文章类型\r\nexport interface Article {\r\n articleId: number;\r\n title: string;\r\n content: string;\r\n status: 'published' | 'draft' | 'archived';\r\n publishedAt: string;\r\n templateId: number;\r\n aiId: number;\r\n platformId: number;\r\n isVisible: boolean;\r\n displayTemplate: string;\r\n createdAt: any;\r\n updatedAt: any;\r\n categories: Category[];\r\n tags: Tag[];\r\n metaData: ArticleMetaData[];\r\n images: ArticleImage[];\r\n generatedAt: string;\r\n}\r\n\r\n// 文章列表项类型(简化版)\r\nexport interface ArticleListItem {\r\n articleId: number;\r\n title: string;\r\n status: string;\r\n publishedAt: string;\r\n categories: Category[];\r\n tags: Tag[];\r\n coverImage?: string;\r\n}\r\n\r\n// 错误类型\r\nexport class GT6Error extends Error {\r\n constructor(\r\n message: string,\r\n public statusCode?: number\r\n ) {\r\n super(message);\r\n this.name = 'GT6Error';\r\n }\r\n}\r\n\r\n// 查询参数类型\r\nexport interface ArticleQueryParams {\r\n categoryId?: number;\r\n tagId?: number;\r\n status?: string;\r\n limit?: number;\r\n offset?: number;\r\n sortBy?: 'publishedAt' | 'title' | 'sortOrder';\r\n sortOrder?: 'asc' | 'desc';\r\n}\r\n\r\n// 文章统计类型\r\nexport interface ArticleStats {\r\n total: number;\r\n published: number;\r\n draft: number;\r\n archived: number;\r\n byCategory: Record<number, number>;\r\n byTag: Record<number, number>;\r\n}\r\n\r\nexport interface GT6Response<T> {\r\n success: boolean;\r\n data: T;\r\n error?: string;\r\n} ","import { GT6Config, GT6Error } from './types';\r\n\r\nexport class GT6Client {\r\n private config: GT6Config;\r\n private cache: Map<string, { data: any; timestamp: number }>;\r\n\r\n constructor(config: GT6Config) {\r\n this.config = {\r\n timeout: 10000,\r\n cache: {\r\n enabled: true,\r\n ttl: 300000 // 5分钟默认缓存\r\n },\r\n ...config\r\n };\r\n this.cache = new Map();\r\n }\r\n\r\n /**\r\n * 发起HTTP请求\r\n */\r\n async request<T>(endpoint: string, options: RequestInit = {}): Promise<T> {\r\n const url = `${this.config.baseUrl}${endpoint}`;\r\n const cacheKey = `${options.method || 'GET'}:${url}`;\r\n\r\n // 检查缓存(只对GET请求缓存)\r\n if (this.config.cache?.enabled && options.method !== 'POST' && options.method !== 'PUT' && options.method !== 'DELETE') {\r\n const cached = this.cache.get(cacheKey);\r\n if (cached && Date.now() - cached.timestamp < this.config.cache.ttl) {\r\n return cached.data;\r\n }\r\n }\r\n\r\n try {\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\r\n\r\n const response = await fetch(url, {\r\n ...options,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n ...options.headers,\r\n },\r\n signal: controller.signal\r\n });\r\n\r\n clearTimeout(timeoutId);\r\n\r\n if (!response.ok) {\r\n throw new GT6Error(\r\n `HTTP ${response.status}: ${response.statusText}`,\r\n response.status\r\n );\r\n }\r\n\r\n const data = await response.json();\r\n\r\n // 更新缓存(只对GET请求缓存)\r\n if (this.config.cache?.enabled && options.method !== 'POST' && options.method !== 'PUT' && options.method !== 'DELETE') {\r\n this.cache.set(cacheKey, { data, timestamp: Date.now() });\r\n }\r\n\r\n return data;\r\n } catch (error: any) {\r\n if (error instanceof GT6Error) {\r\n throw error;\r\n }\r\n \r\n if (error.name === 'AbortError') {\r\n throw new GT6Error('Request timeout', 408);\r\n }\r\n \r\n throw new GT6Error(`Network error: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * 获取配置\r\n */\r\n getConfig(): GT6Config {\r\n return { ...this.config };\r\n }\r\n\r\n /**\r\n * 清除缓存\r\n */\r\n clearCache(): void {\r\n this.cache.clear();\r\n }\r\n\r\n /**\r\n * 获取缓存统计\r\n */\r\n getCacheStats(): { size: number; entries: Array<{ key: string; age: number }> } {\r\n const entries = Array.from(this.cache.entries()).map(([key, value]) => ({\r\n key,\r\n age: Date.now() - value.timestamp\r\n }));\r\n\r\n return {\r\n size: this.cache.size,\r\n entries\r\n };\r\n }\r\n} ","import { GT6Client } from '../core/client';\r\nimport {\r\n Article,\r\n Category,\r\n Tag,\r\n CategoryResponse,\r\n TagResponse\r\n} from '../core/types';\r\n\r\nexport class ArticlesAPI {\r\n constructor(private client: GT6Client) {}\r\n\r\n /**\r\n * 1. 根据文章ID获取文章详情\r\n */\r\n async getArticle(articleId: number | string): Promise<Article> {\r\n return this.client.request<Article>(`/articles/${articleId}.json`);\r\n }\r\n\r\n /**\r\n * 2. 获取文章分类列表\r\n */\r\n async getCategories(rootCategoryId?: number | string): Promise<Category[]> {\r\n const config = this.client.getConfig();\r\n const categoryId = rootCategoryId || config.rootCategoryId || '671920';\r\n \r\n const response = await this.client.request<CategoryResponse>(\r\n `/article-categories/platform-${config.platformId}-root-${categoryId}.json`\r\n );\r\n \r\n return response.categories;\r\n }\r\n\r\n /**\r\n * 3. 获取文章标签列表\r\n */\r\n async getTags(tagAlias?: string): Promise<Tag[]> {\r\n const config = this.client.getConfig();\r\n const alias = tagAlias || config.tagAlias || '001';\r\n \r\n const response = await this.client.request<TagResponse>(\r\n `/article-tags/platform-${config.platformId}-${alias}.json`\r\n );\r\n \r\n return response.tags;\r\n }\r\n\r\n /**\r\n * 4. 根据分类ID获取文章列表\r\n * 支持单个分类ID或分类ID数组\r\n */\r\n async getArticlesByCategory(categoryId: number | number[], options?: {\r\n page?: number;\r\n limit?: number;\r\n status?: 'published' | 'draft' | 'archived';\r\n }): Promise<{\r\n articles: Article[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 将单个分类ID转换为数组\r\n const categoryIds = Array.isArray(categoryId) ? categoryId : [categoryId];\r\n \r\n // 收集所有指定分类下的文章ID\r\n const allArticleIds: number[] = [];\r\n \r\n categoryIds.forEach(id => {\r\n const targetCategory = categories.find(cat => cat.categoryId === id);\r\n if (targetCategory) {\r\n allArticleIds.push(...targetCategory.articleIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueArticleIds = [...new Set(allArticleIds)];\r\n \r\n if (uniqueArticleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: uniqueArticleIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 5. 根据标签ID获取文章列表\r\n * 支持单个标签ID或标签ID数组\r\n */\r\n async getArticlesByTag(tagId: number | number[], options?: {\r\n page?: number;\r\n limit?: number;\r\n status?: 'published' | 'draft' | 'archived';\r\n }): Promise<{\r\n articles: Article[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取标签数据\r\n const tags = await this.getTags();\r\n \r\n // 将单个标签ID转换为数组\r\n const tagIds = Array.isArray(tagId) ? tagId : [tagId];\r\n \r\n // 收集所有指定标签下的文章ID\r\n const allArticleIds: number[] = [];\r\n \r\n tagIds.forEach(id => {\r\n const targetTag = tags.find(tag => tag.tagId === id);\r\n if (targetTag) {\r\n allArticleIds.push(...targetTag.articleIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueArticleIds = [...new Set(allArticleIds)];\r\n \r\n if (uniqueArticleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: uniqueArticleIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 6. 根据分类ID获取该分类的层级路径\r\n * 用于前端面包屑导航\r\n */\r\n async getCategoryPath(categoryId: number): Promise<{\r\n path: Category[];\r\n currentCategory: Category | null;\r\n breadcrumbs: Array<{\r\n categoryId: number;\r\n categoryName: string;\r\n level: number;\r\n }>;\r\n }> {\r\n // 获取所有分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 查找目标分类\r\n const targetCategory = categories.find(cat => cat.categoryId === categoryId);\r\n \r\n if (!targetCategory) {\r\n return {\r\n path: [],\r\n currentCategory: null,\r\n breadcrumbs: []\r\n };\r\n }\r\n \r\n // 构建分类路径\r\n const path: Category[] = [];\r\n const breadcrumbs: Array<{\r\n categoryId: number;\r\n categoryName: string;\r\n level: number;\r\n }> = [];\r\n \r\n // 递归查找父分类\r\n const buildPath = (currentCategory: Category, level: number = 0): void => {\r\n // 将当前分类添加到路径开头(因为我们要从根到叶子构建)\r\n path.unshift(currentCategory);\r\n breadcrumbs.unshift({\r\n categoryId: currentCategory.categoryId,\r\n categoryName: currentCategory.categoryName,\r\n level\r\n });\r\n \r\n // 如果有父分类,继续递归\r\n if (currentCategory.parentId && currentCategory.parentId !== 0) {\r\n const parentCategory = categories.find(cat => cat.categoryId === currentCategory.parentId);\r\n if (parentCategory) {\r\n buildPath(parentCategory, level + 1);\r\n }\r\n }\r\n };\r\n \r\n // 从目标分类开始构建路径\r\n buildPath(targetCategory);\r\n \r\n return {\r\n path,\r\n currentCategory: targetCategory,\r\n breadcrumbs\r\n };\r\n }\r\n\r\n /**\r\n * 7. 获取指定分类ID下的子分类\r\n * 支持递归获取所有层级的子分类\r\n */\r\n async getSubCategories(categoryId: number, options?: {\r\n recursive?: boolean; // 是否递归获取所有层级的子分类\r\n includeCurrent?: boolean; // 是否包含当前分类\r\n maxDepth?: number; // 最大递归深度,默认不限制\r\n }): Promise<{\r\n subCategories: Category[];\r\n currentCategory: Category | null;\r\n total: number;\r\n depth: number; // 实际递归深度\r\n }> {\r\n // 获取所有分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 查找目标分类\r\n const targetCategory = categories.find(cat => cat.categoryId === categoryId);\r\n \r\n if (!targetCategory) {\r\n return {\r\n subCategories: [],\r\n currentCategory: null,\r\n total: 0,\r\n depth: 0\r\n };\r\n }\r\n \r\n const subCategories: Category[] = [];\r\n let maxDepth = options?.maxDepth || Infinity;\r\n let actualDepth = 0;\r\n \r\n // 递归获取子分类的函数\r\n const collectSubCategories = (parentId: number, currentDepth: number = 0): void => {\r\n if (currentDepth >= maxDepth) {\r\n return;\r\n }\r\n \r\n // 查找直接子分类\r\n const children = categories.filter(cat => cat.parentId === parentId);\r\n \r\n children.forEach(child => {\r\n subCategories.push(child);\r\n \r\n // 如果需要递归且未达到最大深度,继续查找子分类\r\n if (options?.recursive && currentDepth < maxDepth - 1) {\r\n collectSubCategories(child.categoryId, currentDepth + 1);\r\n }\r\n });\r\n \r\n // 更新实际深度\r\n actualDepth = Math.max(actualDepth, currentDepth);\r\n };\r\n \r\n // 开始收集子分类\r\n collectSubCategories(categoryId);\r\n \r\n // 如果需要包含当前分类,添加到结果中\r\n if (options?.includeCurrent) {\r\n subCategories.unshift(targetCategory);\r\n }\r\n \r\n return {\r\n subCategories,\r\n currentCategory: targetCategory,\r\n total: subCategories.length,\r\n depth: actualDepth\r\n };\r\n }\r\n} ","import { GT6Client } from './core/client';\r\nimport { ArticlesAPI } from './modules/articles';\r\nimport { GT6Config } from './core/types';\r\n\r\n/**\r\n * GT6 SDK 主类\r\n * 提供文章管理相关的所有功能\r\n */\r\nexport class GT6SDK {\r\n public articles: ArticlesAPI;\r\n\r\n constructor(config: GT6Config) {\r\n const client = new GT6Client(config);\r\n this.articles = new ArticlesAPI(client);\r\n }\r\n\r\n /**\r\n * 获取客户端实例(用于高级用法)\r\n */\r\n getClient(): GT6Client {\r\n return (this.articles as any).client;\r\n }\r\n\r\n /**\r\n * 清除所有缓存\r\n */\r\n clearCache(): void {\r\n this.getClient().clearCache();\r\n }\r\n\r\n /**\r\n * 获取缓存统计信息\r\n */\r\n getCacheStats() {\r\n return this.getClient().getCacheStats();\r\n }\r\n\r\n /**\r\n * 1. 便捷方法:根据文章ID获取文章详情\r\n */\r\n async getArticle(articleId: number | string) {\r\n return this.articles.getArticle(articleId);\r\n }\r\n\r\n /**\r\n * 2. 便捷方法:获取文章分类列表\r\n */\r\n async getCategories(rootCategoryId?: number | string) {\r\n return this.articles.getCategories(rootCategoryId);\r\n }\r\n\r\n /**\r\n * 3. 便捷方法:获取文章标签列表\r\n */\r\n async getTags(tagAlias?: string) {\r\n return this.articles.getTags(tagAlias);\r\n }\r\n\r\n /**\r\n * 4. 便捷方法:根据分类ID获取文章列表\r\n */\r\n async getArticlesByCategory(categoryId: number | number[], options?: {\r\n offset?: number;\r\n limit?: number;\r\n status?: 'published' | 'draft' | 'archived';\r\n }) {\r\n return this.articles.getArticlesByCategory(categoryId, options);\r\n }\r\n\r\n /**\r\n * 5. 便捷方法:根据标签ID获取文章列表\r\n */\r\n async getArticlesByTag(tagId: number | number[], options?: {\r\n offset?: number;\r\n limit?: number;\r\n status?: 'published' | 'draft' | 'archived';\r\n }) {\r\n return this.articles.getArticlesByTag(tagId, options);\r\n }\r\n\r\n /**\r\n * 6. 便捷方法:根据分类ID获取该分类的层级路径\r\n */\r\n async getCategoryPath(categoryId: number) {\r\n return this.articles.getCategoryPath(categoryId);\r\n }\r\n\r\n /**\r\n * 7. 便捷方法:获取指定分类ID下的子分类\r\n */\r\n async getSubCategories(categoryId: number, options?: {\r\n recursive?: boolean;\r\n includeCurrent?: boolean;\r\n maxDepth?: number;\r\n }) {\r\n return this.articles.getSubCategories(categoryId, options);\r\n }\r\n}\r\n\r\n// 导出所有类型\r\nexport * from './core/types';\r\nexport * from './core/client';\r\nexport * from './modules/articles';\r\n\r\n// 默认导出\r\nexport default GT6SDK; "],"names":[],"mappings":"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"}
|
package/dist/gt6-sdk.esm.js
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
// 错误类型
|
2
2
|
class GT6Error extends Error {
|
3
|
-
constructor(message,
|
3
|
+
constructor(message, statusCode) {
|
4
4
|
super(message);
|
5
|
-
this.
|
6
|
-
this.code = code;
|
5
|
+
this.statusCode = statusCode;
|
7
6
|
this.name = 'GT6Error';
|
8
7
|
}
|
9
8
|
}
|
@@ -143,12 +142,14 @@ class ArticlesAPI {
|
|
143
142
|
return {
|
144
143
|
articles: [],
|
145
144
|
total: 0,
|
146
|
-
|
145
|
+
page: options?.page || 1,
|
146
|
+
limit: options?.limit || 10
|
147
147
|
};
|
148
148
|
}
|
149
149
|
// 应用分页
|
150
|
-
const
|
151
|
-
const limit = options?.limit ||
|
150
|
+
const page = options?.page || 1;
|
151
|
+
const limit = options?.limit || 10;
|
152
|
+
const offset = (page - 1) * limit;
|
152
153
|
const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);
|
153
154
|
// 获取文章详情
|
154
155
|
const articles = await Promise.all(paginatedArticleIds.map(articleId => this.getArticle(articleId)));
|
@@ -159,8 +160,9 @@ class ArticlesAPI {
|
|
159
160
|
}
|
160
161
|
return {
|
161
162
|
articles: filteredArticles,
|
162
|
-
total: uniqueArticleIds.length,
|
163
|
-
|
163
|
+
total: uniqueArticleIds.length,
|
164
|
+
page,
|
165
|
+
limit
|
164
166
|
};
|
165
167
|
}
|
166
168
|
/**
|
@@ -186,12 +188,14 @@ class ArticlesAPI {
|
|
186
188
|
return {
|
187
189
|
articles: [],
|
188
190
|
total: 0,
|
189
|
-
|
191
|
+
page: options?.page || 1,
|
192
|
+
limit: options?.limit || 10
|
190
193
|
};
|
191
194
|
}
|
192
195
|
// 应用分页
|
193
|
-
const
|
194
|
-
const limit = options?.limit ||
|
196
|
+
const page = options?.page || 1;
|
197
|
+
const limit = options?.limit || 10;
|
198
|
+
const offset = (page - 1) * limit;
|
195
199
|
const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);
|
196
200
|
// 获取文章详情
|
197
201
|
const articles = await Promise.all(paginatedArticleIds.map(articleId => this.getArticle(articleId)));
|
@@ -202,8 +206,9 @@ class ArticlesAPI {
|
|
202
206
|
}
|
203
207
|
return {
|
204
208
|
articles: filteredArticles,
|
205
|
-
total: uniqueArticleIds.length,
|
206
|
-
|
209
|
+
total: uniqueArticleIds.length,
|
210
|
+
page,
|
211
|
+
limit
|
207
212
|
};
|
208
213
|
}
|
209
214
|
/**
|
package/dist/gt6-sdk.esm.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"gt6-sdk.esm.js","sources":["../src/core/types.ts","../src/core/client.ts","../src/modules/articles.ts","../src/index.ts"],"sourcesContent":["// 基础配置类型\r\nexport interface GT6Config {\r\n baseUrl: string;\r\n platformId: string | number;\r\n rootCategoryId?: string | number;\r\n tagAlias?: string;\r\n timeout?: number;\r\n cache?: {\r\n enabled: boolean;\r\n ttl: number; // 缓存时间(毫秒)\r\n };\r\n}\r\n\r\n// 分类相关类型\r\nexport interface Category {\r\n categoryId: number;\r\n categoryName: string;\r\n categoryDescription: string;\r\n metaKeywords: string;\r\n status: number;\r\n parentId: number;\r\n sortOrder: number;\r\n createdAt: any;\r\n updatedAt: any;\r\n platformId: number;\r\n articleIds: number[];\r\n children: Category[];\r\n}\r\n\r\nexport interface CategoryResponse {\r\n platformId: number;\r\n categories: Category[];\r\n generatedAt: string;\r\n}\r\n\r\n// 标签相关类型\r\nexport interface Tag {\r\n tagId: number;\r\n tagName: string;\r\n type: number;\r\n platformId: number;\r\n aliases: string;\r\n createdAt: any;\r\n articleIds: number[];\r\n}\r\n\r\nexport interface TagResponse {\r\n platformId: number;\r\n tags: Tag[];\r\n generatedAt: string;\r\n}\r\n\r\n// 文章元数据类型\r\nexport interface ArticleMetaData {\r\n metaId: number;\r\n articleId: number;\r\n metaKey: string;\r\n metaValue: string;\r\n type: number;\r\n templateId: number;\r\n groupId: number;\r\n sortOrder: number;\r\n aiId: number;\r\n fieldId: number;\r\n createdAt: any;\r\n updatedAt: any;\r\n}\r\n\r\n// 文章图片类型\r\nexport interface ArticleImage {\r\n imageId: number;\r\n articleId: number;\r\n metaId: number | null;\r\n imageUrl: string;\r\n imageType: 'cover' | 'content';\r\n sortOrder: number;\r\n createdAt: any;\r\n updatedAt: any;\r\n}\r\n\r\n// 文章类型\r\nexport interface Article {\r\n articleId: number;\r\n title: string;\r\n content: string;\r\n status: 'published' | 'draft' | 'archived';\r\n publishedAt: string;\r\n templateId: number;\r\n aiId: number;\r\n platformId: number;\r\n isVisible: boolean;\r\n displayTemplate: string;\r\n createdAt: any;\r\n updatedAt: any;\r\n categories: Category[];\r\n tags: Tag[];\r\n metaData: ArticleMetaData[];\r\n images: ArticleImage[];\r\n generatedAt: string;\r\n}\r\n\r\n// 文章列表项类型(简化版)\r\nexport interface ArticleListItem {\r\n articleId: number;\r\n title: string;\r\n status: string;\r\n publishedAt: string;\r\n categories: Category[];\r\n tags: Tag[];\r\n coverImage?: string;\r\n}\r\n\r\n// 错误类型\r\nexport class GT6Error extends Error {\r\n constructor(\r\n message: string,\r\n public status?: number,\r\n public code?: string\r\n ) {\r\n super(message);\r\n this.name = 'GT6Error';\r\n }\r\n}\r\n\r\n// 查询参数类型\r\nexport interface ArticleQueryParams {\r\n categoryId?: number;\r\n tagId?: number;\r\n status?: string;\r\n limit?: number;\r\n offset?: number;\r\n sortBy?: 'publishedAt' | 'title' | 'sortOrder';\r\n sortOrder?: 'asc' | 'desc';\r\n}\r\n\r\n// 文章统计类型\r\nexport interface ArticleStats {\r\n total: number;\r\n published: number;\r\n draft: number;\r\n archived: number;\r\n byCategory: Record<number, number>;\r\n byTag: Record<number, number>;\r\n} ","import { GT6Config, GT6Error } from './types';\r\n\r\nexport class GT6Client {\r\n private config: GT6Config;\r\n private cache: Map<string, { data: any; timestamp: number }>;\r\n\r\n constructor(config: GT6Config) {\r\n this.config = {\r\n timeout: 10000,\r\n cache: {\r\n enabled: true,\r\n ttl: 300000 // 5分钟默认缓存\r\n },\r\n ...config\r\n };\r\n this.cache = new Map();\r\n }\r\n\r\n /**\r\n * 发起HTTP请求\r\n */\r\n async request<T>(endpoint: string, options: RequestInit = {}): Promise<T> {\r\n const url = `${this.config.baseUrl}${endpoint}`;\r\n const cacheKey = `${options.method || 'GET'}:${url}`;\r\n\r\n // 检查缓存(只对GET请求缓存)\r\n if (this.config.cache?.enabled && options.method !== 'POST' && options.method !== 'PUT' && options.method !== 'DELETE') {\r\n const cached = this.cache.get(cacheKey);\r\n if (cached && Date.now() - cached.timestamp < this.config.cache.ttl) {\r\n return cached.data;\r\n }\r\n }\r\n\r\n try {\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\r\n\r\n const response = await fetch(url, {\r\n ...options,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n ...options.headers,\r\n },\r\n signal: controller.signal\r\n });\r\n\r\n clearTimeout(timeoutId);\r\n\r\n if (!response.ok) {\r\n throw new GT6Error(\r\n `HTTP ${response.status}: ${response.statusText}`,\r\n response.status\r\n );\r\n }\r\n\r\n const data = await response.json();\r\n\r\n // 更新缓存(只对GET请求缓存)\r\n if (this.config.cache?.enabled && options.method !== 'POST' && options.method !== 'PUT' && options.method !== 'DELETE') {\r\n this.cache.set(cacheKey, { data, timestamp: Date.now() });\r\n }\r\n\r\n return data;\r\n } catch (error: any) {\r\n if (error instanceof GT6Error) {\r\n throw error;\r\n }\r\n \r\n if (error.name === 'AbortError') {\r\n throw new GT6Error('Request timeout', 408);\r\n }\r\n \r\n throw new GT6Error(`Network error: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * 获取配置\r\n */\r\n getConfig(): GT6Config {\r\n return { ...this.config };\r\n }\r\n\r\n /**\r\n * 清除缓存\r\n */\r\n clearCache(): void {\r\n this.cache.clear();\r\n }\r\n\r\n /**\r\n * 获取缓存统计\r\n */\r\n getCacheStats(): { size: number; entries: Array<{ key: string; age: number }> } {\r\n const entries = Array.from(this.cache.entries()).map(([key, value]) => ({\r\n key,\r\n age: Date.now() - value.timestamp\r\n }));\r\n\r\n return {\r\n size: this.cache.size,\r\n entries\r\n };\r\n }\r\n} ","import { GT6Client } from '../core/client';\r\nimport {\r\n Article,\r\n Category,\r\n Tag,\r\n CategoryResponse,\r\n TagResponse\r\n} from '../core/types';\r\n\r\nexport class ArticlesAPI {\r\n constructor(private client: GT6Client) {}\r\n\r\n /**\r\n * 1. 根据文章ID获取文章详情\r\n */\r\n async getArticle(articleId: number | string): Promise<Article> {\r\n return this.client.request<Article>(`/articles/${articleId}.json`);\r\n }\r\n\r\n /**\r\n * 2. 获取文章分类列表\r\n */\r\n async getCategories(rootCategoryId?: number | string): Promise<Category[]> {\r\n const config = this.client.getConfig();\r\n const categoryId = rootCategoryId || config.rootCategoryId || '671920';\r\n \r\n const response = await this.client.request<CategoryResponse>(\r\n `/article-categories/platform-${config.platformId}-root-${categoryId}.json`\r\n );\r\n \r\n return response.categories;\r\n }\r\n\r\n /**\r\n * 3. 获取文章标签列表\r\n */\r\n async getTags(tagAlias?: string): Promise<Tag[]> {\r\n const config = this.client.getConfig();\r\n const alias = tagAlias || config.tagAlias || '001';\r\n \r\n const response = await this.client.request<TagResponse>(\r\n `/article-tags/platform-${config.platformId}-${alias}.json`\r\n );\r\n \r\n return response.tags;\r\n }\r\n\r\n /**\r\n * 4. 根据分类ID获取文章列表\r\n * 支持单个分类ID或分类ID数组\r\n */\r\n async getArticlesByCategory(categoryId: number | number[], options?: {\r\n offset?: number;\r\n limit?: number;\r\n status?: 'published' | 'draft' | 'archived';\r\n }): Promise<{\r\n articles: Article[];\r\n total: number;\r\n categoryIds: number[];\r\n }> {\r\n // 获取分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 将单个分类ID转换为数组\r\n const categoryIds = Array.isArray(categoryId) ? categoryId : [categoryId];\r\n \r\n // 收集所有指定分类下的文章ID\r\n const allArticleIds: number[] = [];\r\n \r\n categoryIds.forEach(id => {\r\n const targetCategory = categories.find(cat => cat.categoryId === id);\r\n if (targetCategory) {\r\n allArticleIds.push(...targetCategory.articleIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueArticleIds = [...new Set(allArticleIds)];\r\n \r\n if (uniqueArticleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n categoryIds\r\n };\r\n }\r\n \r\n // 应用分页\r\n const offset = options?.offset || 0;\r\n const limit = options?.limit || uniqueArticleIds.length;\r\n const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: uniqueArticleIds.length, // 返回去重后的总文章数\r\n categoryIds\r\n };\r\n }\r\n\r\n /**\r\n * 5. 根据标签ID获取文章列表\r\n * 支持单个标签ID或标签ID数组\r\n */\r\n async getArticlesByTag(tagId: number | number[], options?: {\r\n offset?: number;\r\n limit?: number;\r\n status?: 'published' | 'draft' | 'archived';\r\n }): Promise<{\r\n articles: Article[];\r\n total: number;\r\n tagIds: number[];\r\n }> {\r\n // 获取标签数据\r\n const tags = await this.getTags();\r\n \r\n // 将单个标签ID转换为数组\r\n const tagIds = Array.isArray(tagId) ? tagId : [tagId];\r\n \r\n // 收集所有指定标签下的文章ID\r\n const allArticleIds: number[] = [];\r\n \r\n tagIds.forEach(id => {\r\n const targetTag = tags.find(tag => tag.tagId === id);\r\n if (targetTag) {\r\n allArticleIds.push(...targetTag.articleIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueArticleIds = [...new Set(allArticleIds)];\r\n \r\n if (uniqueArticleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n tagIds\r\n };\r\n }\r\n \r\n // 应用分页\r\n const offset = options?.offset || 0;\r\n const limit = options?.limit || uniqueArticleIds.length;\r\n const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: uniqueArticleIds.length, // 返回去重后的总文章数\r\n tagIds\r\n };\r\n }\r\n\r\n /**\r\n * 6. 根据分类ID获取该分类的层级路径\r\n * 用于前端面包屑导航\r\n */\r\n async getCategoryPath(categoryId: number): Promise<{\r\n path: Category[];\r\n currentCategory: Category | null;\r\n breadcrumbs: Array<{\r\n categoryId: number;\r\n categoryName: string;\r\n level: number;\r\n }>;\r\n }> {\r\n // 获取所有分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 查找目标分类\r\n const targetCategory = categories.find(cat => cat.categoryId === categoryId);\r\n \r\n if (!targetCategory) {\r\n return {\r\n path: [],\r\n currentCategory: null,\r\n breadcrumbs: []\r\n };\r\n }\r\n \r\n // 构建分类路径\r\n const path: Category[] = [];\r\n const breadcrumbs: Array<{\r\n categoryId: number;\r\n categoryName: string;\r\n level: number;\r\n }> = [];\r\n \r\n // 递归查找父分类\r\n const buildPath = (currentCategory: Category, level: number = 0): void => {\r\n // 将当前分类添加到路径开头(因为我们要从根到叶子构建)\r\n path.unshift(currentCategory);\r\n breadcrumbs.unshift({\r\n categoryId: currentCategory.categoryId,\r\n categoryName: currentCategory.categoryName,\r\n level\r\n });\r\n \r\n // 如果有父分类,继续递归\r\n if (currentCategory.parentId && currentCategory.parentId !== 0) {\r\n const parentCategory = categories.find(cat => cat.categoryId === currentCategory.parentId);\r\n if (parentCategory) {\r\n buildPath(parentCategory, level + 1);\r\n }\r\n }\r\n };\r\n \r\n // 从目标分类开始构建路径\r\n buildPath(targetCategory);\r\n \r\n return {\r\n path,\r\n currentCategory: targetCategory,\r\n breadcrumbs\r\n };\r\n }\r\n\r\n /**\r\n * 7. 获取指定分类ID下的子分类\r\n * 支持递归获取所有层级的子分类\r\n */\r\n async getSubCategories(categoryId: number, options?: {\r\n recursive?: boolean; // 是否递归获取所有层级的子分类\r\n includeCurrent?: boolean; // 是否包含当前分类\r\n maxDepth?: number; // 最大递归深度,默认不限制\r\n }): Promise<{\r\n subCategories: Category[];\r\n currentCategory: Category | null;\r\n total: number;\r\n depth: number; // 实际递归深度\r\n }> {\r\n // 获取所有分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 查找目标分类\r\n const targetCategory = categories.find(cat => cat.categoryId === categoryId);\r\n \r\n if (!targetCategory) {\r\n return {\r\n subCategories: [],\r\n currentCategory: null,\r\n total: 0,\r\n depth: 0\r\n };\r\n }\r\n \r\n const subCategories: Category[] = [];\r\n let maxDepth = options?.maxDepth || Infinity;\r\n let actualDepth = 0;\r\n \r\n // 递归获取子分类的函数\r\n const collectSubCategories = (parentId: number, currentDepth: number = 0): void => {\r\n if (currentDepth >= maxDepth) {\r\n return;\r\n }\r\n \r\n // 查找直接子分类\r\n const children = categories.filter(cat => cat.parentId === parentId);\r\n \r\n children.forEach(child => {\r\n subCategories.push(child);\r\n \r\n // 如果需要递归且未达到最大深度,继续查找子分类\r\n if (options?.recursive && currentDepth < maxDepth - 1) {\r\n collectSubCategories(child.categoryId, currentDepth + 1);\r\n }\r\n });\r\n \r\n // 更新实际深度\r\n actualDepth = Math.max(actualDepth, currentDepth);\r\n };\r\n \r\n // 开始收集子分类\r\n collectSubCategories(categoryId);\r\n \r\n // 如果需要包含当前分类,添加到结果中\r\n if (options?.includeCurrent) {\r\n subCategories.unshift(targetCategory);\r\n }\r\n \r\n return {\r\n subCategories,\r\n currentCategory: targetCategory,\r\n total: subCategories.length,\r\n depth: actualDepth\r\n };\r\n }\r\n} ","import { GT6Client } from './core/client';\r\nimport { ArticlesAPI } from './modules/articles';\r\nimport { GT6Config } from './core/types';\r\n\r\n/**\r\n * GT6 SDK 主类\r\n * 提供文章管理相关的所有功能\r\n */\r\nexport class GT6SDK {\r\n public articles: ArticlesAPI;\r\n\r\n constructor(config: GT6Config) {\r\n const client = new GT6Client(config);\r\n this.articles = new ArticlesAPI(client);\r\n }\r\n\r\n /**\r\n * 获取客户端实例(用于高级用法)\r\n */\r\n getClient(): GT6Client {\r\n return (this.articles as any).client;\r\n }\r\n\r\n /**\r\n * 清除所有缓存\r\n */\r\n clearCache(): void {\r\n this.getClient().clearCache();\r\n }\r\n\r\n /**\r\n * 获取缓存统计信息\r\n */\r\n getCacheStats() {\r\n return this.getClient().getCacheStats();\r\n }\r\n\r\n /**\r\n * 1. 便捷方法:根据文章ID获取文章详情\r\n */\r\n async getArticle(articleId: number | string) {\r\n return this.articles.getArticle(articleId);\r\n }\r\n\r\n /**\r\n * 2. 便捷方法:获取文章分类列表\r\n */\r\n async getCategories(rootCategoryId?: number | string) {\r\n return this.articles.getCategories(rootCategoryId);\r\n }\r\n\r\n /**\r\n * 3. 便捷方法:获取文章标签列表\r\n */\r\n async getTags(tagAlias?: string) {\r\n return this.articles.getTags(tagAlias);\r\n }\r\n\r\n /**\r\n * 4. 便捷方法:根据分类ID获取文章列表\r\n */\r\n async getArticlesByCategory(categoryId: number | number[], options?: {\r\n offset?: number;\r\n limit?: number;\r\n status?: 'published' | 'draft' | 'archived';\r\n }) {\r\n return this.articles.getArticlesByCategory(categoryId, options);\r\n }\r\n\r\n /**\r\n * 5. 便捷方法:根据标签ID获取文章列表\r\n */\r\n async getArticlesByTag(tagId: number | number[], options?: {\r\n offset?: number;\r\n limit?: number;\r\n status?: 'published' | 'draft' | 'archived';\r\n }) {\r\n return this.articles.getArticlesByTag(tagId, options);\r\n }\r\n\r\n /**\r\n * 6. 便捷方法:根据分类ID获取该分类的层级路径\r\n */\r\n async getCategoryPath(categoryId: number) {\r\n return this.articles.getCategoryPath(categoryId);\r\n }\r\n\r\n /**\r\n * 7. 便捷方法:获取指定分类ID下的子分类\r\n */\r\n async getSubCategories(categoryId: number, options?: {\r\n recursive?: boolean;\r\n includeCurrent?: boolean;\r\n maxDepth?: number;\r\n }) {\r\n return this.articles.getSubCategories(categoryId, options);\r\n }\r\n}\r\n\r\n// 导出所有类型\r\nexport * from './core/types';\r\nexport * from './core/client';\r\nexport * from './modules/articles';\r\n\r\n// 默认导出\r\nexport default GT6SDK; "],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"gt6-sdk.esm.js","sources":["../src/core/types.ts","../src/core/client.ts","../src/modules/articles.ts","../src/index.ts"],"sourcesContent":["// 基础配置类型\r\nexport interface GT6Config {\r\n baseUrl: string;\r\n apiKey?: string;\r\n timeout?: number;\r\n cache?: {\r\n enabled: boolean;\r\n ttl: number; // 缓存时间(毫秒)\r\n };\r\n platformId?: number;\r\n rootCategoryId?: string;\r\n tagAlias?: string;\r\n}\r\n\r\n// 分类相关类型\r\nexport interface Category {\r\n categoryId: number;\r\n categoryName: string;\r\n categoryDescription: string;\r\n metaKeywords: string;\r\n status: number;\r\n parentId: number;\r\n sortOrder: number;\r\n createdAt: any;\r\n updatedAt: any;\r\n platformId: number;\r\n articleIds: number[];\r\n children: Category[];\r\n}\r\n\r\nexport interface CategoryResponse {\r\n platformId: number;\r\n categories: Category[];\r\n generatedAt: string;\r\n}\r\n\r\n// 标签相关类型\r\nexport interface Tag {\r\n tagId: number;\r\n tagName: string;\r\n type: number;\r\n platformId: number;\r\n aliases: string;\r\n createdAt: any;\r\n articleIds: number[];\r\n}\r\n\r\nexport interface TagResponse {\r\n platformId: number;\r\n tags: Tag[];\r\n generatedAt: string;\r\n}\r\n\r\n// 文章元数据类型\r\nexport interface ArticleMetaData {\r\n metaId: number;\r\n articleId: number;\r\n metaKey: string;\r\n metaValue: string;\r\n type: number;\r\n templateId: number;\r\n groupId: number;\r\n sortOrder: number;\r\n aiId: number;\r\n fieldId: number;\r\n createdAt: any;\r\n updatedAt: any;\r\n}\r\n\r\n// 文章图片类型\r\nexport interface ArticleImage {\r\n imageId: number;\r\n articleId: number;\r\n metaId: number | null;\r\n imageUrl: string;\r\n imageType: 'cover' | 'content';\r\n sortOrder: number;\r\n createdAt: any;\r\n updatedAt: any;\r\n}\r\n\r\n// 文章类型\r\nexport interface Article {\r\n articleId: number;\r\n title: string;\r\n content: string;\r\n status: 'published' | 'draft' | 'archived';\r\n publishedAt: string;\r\n templateId: number;\r\n aiId: number;\r\n platformId: number;\r\n isVisible: boolean;\r\n displayTemplate: string;\r\n createdAt: any;\r\n updatedAt: any;\r\n categories: Category[];\r\n tags: Tag[];\r\n metaData: ArticleMetaData[];\r\n images: ArticleImage[];\r\n generatedAt: string;\r\n}\r\n\r\n// 文章列表项类型(简化版)\r\nexport interface ArticleListItem {\r\n articleId: number;\r\n title: string;\r\n status: string;\r\n publishedAt: string;\r\n categories: Category[];\r\n tags: Tag[];\r\n coverImage?: string;\r\n}\r\n\r\n// 错误类型\r\nexport class GT6Error extends Error {\r\n constructor(\r\n message: string,\r\n public statusCode?: number\r\n ) {\r\n super(message);\r\n this.name = 'GT6Error';\r\n }\r\n}\r\n\r\n// 查询参数类型\r\nexport interface ArticleQueryParams {\r\n categoryId?: number;\r\n tagId?: number;\r\n status?: string;\r\n limit?: number;\r\n offset?: number;\r\n sortBy?: 'publishedAt' | 'title' | 'sortOrder';\r\n sortOrder?: 'asc' | 'desc';\r\n}\r\n\r\n// 文章统计类型\r\nexport interface ArticleStats {\r\n total: number;\r\n published: number;\r\n draft: number;\r\n archived: number;\r\n byCategory: Record<number, number>;\r\n byTag: Record<number, number>;\r\n}\r\n\r\nexport interface GT6Response<T> {\r\n success: boolean;\r\n data: T;\r\n error?: string;\r\n} ","import { GT6Config, GT6Error } from './types';\r\n\r\nexport class GT6Client {\r\n private config: GT6Config;\r\n private cache: Map<string, { data: any; timestamp: number }>;\r\n\r\n constructor(config: GT6Config) {\r\n this.config = {\r\n timeout: 10000,\r\n cache: {\r\n enabled: true,\r\n ttl: 300000 // 5分钟默认缓存\r\n },\r\n ...config\r\n };\r\n this.cache = new Map();\r\n }\r\n\r\n /**\r\n * 发起HTTP请求\r\n */\r\n async request<T>(endpoint: string, options: RequestInit = {}): Promise<T> {\r\n const url = `${this.config.baseUrl}${endpoint}`;\r\n const cacheKey = `${options.method || 'GET'}:${url}`;\r\n\r\n // 检查缓存(只对GET请求缓存)\r\n if (this.config.cache?.enabled && options.method !== 'POST' && options.method !== 'PUT' && options.method !== 'DELETE') {\r\n const cached = this.cache.get(cacheKey);\r\n if (cached && Date.now() - cached.timestamp < this.config.cache.ttl) {\r\n return cached.data;\r\n }\r\n }\r\n\r\n try {\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\r\n\r\n const response = await fetch(url, {\r\n ...options,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n ...options.headers,\r\n },\r\n signal: controller.signal\r\n });\r\n\r\n clearTimeout(timeoutId);\r\n\r\n if (!response.ok) {\r\n throw new GT6Error(\r\n `HTTP ${response.status}: ${response.statusText}`,\r\n response.status\r\n );\r\n }\r\n\r\n const data = await response.json();\r\n\r\n // 更新缓存(只对GET请求缓存)\r\n if (this.config.cache?.enabled && options.method !== 'POST' && options.method !== 'PUT' && options.method !== 'DELETE') {\r\n this.cache.set(cacheKey, { data, timestamp: Date.now() });\r\n }\r\n\r\n return data;\r\n } catch (error: any) {\r\n if (error instanceof GT6Error) {\r\n throw error;\r\n }\r\n \r\n if (error.name === 'AbortError') {\r\n throw new GT6Error('Request timeout', 408);\r\n }\r\n \r\n throw new GT6Error(`Network error: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * 获取配置\r\n */\r\n getConfig(): GT6Config {\r\n return { ...this.config };\r\n }\r\n\r\n /**\r\n * 清除缓存\r\n */\r\n clearCache(): void {\r\n this.cache.clear();\r\n }\r\n\r\n /**\r\n * 获取缓存统计\r\n */\r\n getCacheStats(): { size: number; entries: Array<{ key: string; age: number }> } {\r\n const entries = Array.from(this.cache.entries()).map(([key, value]) => ({\r\n key,\r\n age: Date.now() - value.timestamp\r\n }));\r\n\r\n return {\r\n size: this.cache.size,\r\n entries\r\n };\r\n }\r\n} ","import { GT6Client } from '../core/client';\r\nimport {\r\n Article,\r\n Category,\r\n Tag,\r\n CategoryResponse,\r\n TagResponse\r\n} from '../core/types';\r\n\r\nexport class ArticlesAPI {\r\n constructor(private client: GT6Client) {}\r\n\r\n /**\r\n * 1. 根据文章ID获取文章详情\r\n */\r\n async getArticle(articleId: number | string): Promise<Article> {\r\n return this.client.request<Article>(`/articles/${articleId}.json`);\r\n }\r\n\r\n /**\r\n * 2. 获取文章分类列表\r\n */\r\n async getCategories(rootCategoryId?: number | string): Promise<Category[]> {\r\n const config = this.client.getConfig();\r\n const categoryId = rootCategoryId || config.rootCategoryId || '671920';\r\n \r\n const response = await this.client.request<CategoryResponse>(\r\n `/article-categories/platform-${config.platformId}-root-${categoryId}.json`\r\n );\r\n \r\n return response.categories;\r\n }\r\n\r\n /**\r\n * 3. 获取文章标签列表\r\n */\r\n async getTags(tagAlias?: string): Promise<Tag[]> {\r\n const config = this.client.getConfig();\r\n const alias = tagAlias || config.tagAlias || '001';\r\n \r\n const response = await this.client.request<TagResponse>(\r\n `/article-tags/platform-${config.platformId}-${alias}.json`\r\n );\r\n \r\n return response.tags;\r\n }\r\n\r\n /**\r\n * 4. 根据分类ID获取文章列表\r\n * 支持单个分类ID或分类ID数组\r\n */\r\n async getArticlesByCategory(categoryId: number | number[], options?: {\r\n page?: number;\r\n limit?: number;\r\n status?: 'published' | 'draft' | 'archived';\r\n }): Promise<{\r\n articles: Article[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 将单个分类ID转换为数组\r\n const categoryIds = Array.isArray(categoryId) ? categoryId : [categoryId];\r\n \r\n // 收集所有指定分类下的文章ID\r\n const allArticleIds: number[] = [];\r\n \r\n categoryIds.forEach(id => {\r\n const targetCategory = categories.find(cat => cat.categoryId === id);\r\n if (targetCategory) {\r\n allArticleIds.push(...targetCategory.articleIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueArticleIds = [...new Set(allArticleIds)];\r\n \r\n if (uniqueArticleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: uniqueArticleIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 5. 根据标签ID获取文章列表\r\n * 支持单个标签ID或标签ID数组\r\n */\r\n async getArticlesByTag(tagId: number | number[], options?: {\r\n page?: number;\r\n limit?: number;\r\n status?: 'published' | 'draft' | 'archived';\r\n }): Promise<{\r\n articles: Article[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取标签数据\r\n const tags = await this.getTags();\r\n \r\n // 将单个标签ID转换为数组\r\n const tagIds = Array.isArray(tagId) ? tagId : [tagId];\r\n \r\n // 收集所有指定标签下的文章ID\r\n const allArticleIds: number[] = [];\r\n \r\n tagIds.forEach(id => {\r\n const targetTag = tags.find(tag => tag.tagId === id);\r\n if (targetTag) {\r\n allArticleIds.push(...targetTag.articleIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueArticleIds = [...new Set(allArticleIds)];\r\n \r\n if (uniqueArticleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: uniqueArticleIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 6. 根据分类ID获取该分类的层级路径\r\n * 用于前端面包屑导航\r\n */\r\n async getCategoryPath(categoryId: number): Promise<{\r\n path: Category[];\r\n currentCategory: Category | null;\r\n breadcrumbs: Array<{\r\n categoryId: number;\r\n categoryName: string;\r\n level: number;\r\n }>;\r\n }> {\r\n // 获取所有分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 查找目标分类\r\n const targetCategory = categories.find(cat => cat.categoryId === categoryId);\r\n \r\n if (!targetCategory) {\r\n return {\r\n path: [],\r\n currentCategory: null,\r\n breadcrumbs: []\r\n };\r\n }\r\n \r\n // 构建分类路径\r\n const path: Category[] = [];\r\n const breadcrumbs: Array<{\r\n categoryId: number;\r\n categoryName: string;\r\n level: number;\r\n }> = [];\r\n \r\n // 递归查找父分类\r\n const buildPath = (currentCategory: Category, level: number = 0): void => {\r\n // 将当前分类添加到路径开头(因为我们要从根到叶子构建)\r\n path.unshift(currentCategory);\r\n breadcrumbs.unshift({\r\n categoryId: currentCategory.categoryId,\r\n categoryName: currentCategory.categoryName,\r\n level\r\n });\r\n \r\n // 如果有父分类,继续递归\r\n if (currentCategory.parentId && currentCategory.parentId !== 0) {\r\n const parentCategory = categories.find(cat => cat.categoryId === currentCategory.parentId);\r\n if (parentCategory) {\r\n buildPath(parentCategory, level + 1);\r\n }\r\n }\r\n };\r\n \r\n // 从目标分类开始构建路径\r\n buildPath(targetCategory);\r\n \r\n return {\r\n path,\r\n currentCategory: targetCategory,\r\n breadcrumbs\r\n };\r\n }\r\n\r\n /**\r\n * 7. 获取指定分类ID下的子分类\r\n * 支持递归获取所有层级的子分类\r\n */\r\n async getSubCategories(categoryId: number, options?: {\r\n recursive?: boolean; // 是否递归获取所有层级的子分类\r\n includeCurrent?: boolean; // 是否包含当前分类\r\n maxDepth?: number; // 最大递归深度,默认不限制\r\n }): Promise<{\r\n subCategories: Category[];\r\n currentCategory: Category | null;\r\n total: number;\r\n depth: number; // 实际递归深度\r\n }> {\r\n // 获取所有分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 查找目标分类\r\n const targetCategory = categories.find(cat => cat.categoryId === categoryId);\r\n \r\n if (!targetCategory) {\r\n return {\r\n subCategories: [],\r\n currentCategory: null,\r\n total: 0,\r\n depth: 0\r\n };\r\n }\r\n \r\n const subCategories: Category[] = [];\r\n let maxDepth = options?.maxDepth || Infinity;\r\n let actualDepth = 0;\r\n \r\n // 递归获取子分类的函数\r\n const collectSubCategories = (parentId: number, currentDepth: number = 0): void => {\r\n if (currentDepth >= maxDepth) {\r\n return;\r\n }\r\n \r\n // 查找直接子分类\r\n const children = categories.filter(cat => cat.parentId === parentId);\r\n \r\n children.forEach(child => {\r\n subCategories.push(child);\r\n \r\n // 如果需要递归且未达到最大深度,继续查找子分类\r\n if (options?.recursive && currentDepth < maxDepth - 1) {\r\n collectSubCategories(child.categoryId, currentDepth + 1);\r\n }\r\n });\r\n \r\n // 更新实际深度\r\n actualDepth = Math.max(actualDepth, currentDepth);\r\n };\r\n \r\n // 开始收集子分类\r\n collectSubCategories(categoryId);\r\n \r\n // 如果需要包含当前分类,添加到结果中\r\n if (options?.includeCurrent) {\r\n subCategories.unshift(targetCategory);\r\n }\r\n \r\n return {\r\n subCategories,\r\n currentCategory: targetCategory,\r\n total: subCategories.length,\r\n depth: actualDepth\r\n };\r\n }\r\n} ","import { GT6Client } from './core/client';\r\nimport { ArticlesAPI } from './modules/articles';\r\nimport { GT6Config } from './core/types';\r\n\r\n/**\r\n * GT6 SDK 主类\r\n * 提供文章管理相关的所有功能\r\n */\r\nexport class GT6SDK {\r\n public articles: ArticlesAPI;\r\n\r\n constructor(config: GT6Config) {\r\n const client = new GT6Client(config);\r\n this.articles = new ArticlesAPI(client);\r\n }\r\n\r\n /**\r\n * 获取客户端实例(用于高级用法)\r\n */\r\n getClient(): GT6Client {\r\n return (this.articles as any).client;\r\n }\r\n\r\n /**\r\n * 清除所有缓存\r\n */\r\n clearCache(): void {\r\n this.getClient().clearCache();\r\n }\r\n\r\n /**\r\n * 获取缓存统计信息\r\n */\r\n getCacheStats() {\r\n return this.getClient().getCacheStats();\r\n }\r\n\r\n /**\r\n * 1. 便捷方法:根据文章ID获取文章详情\r\n */\r\n async getArticle(articleId: number | string) {\r\n return this.articles.getArticle(articleId);\r\n }\r\n\r\n /**\r\n * 2. 便捷方法:获取文章分类列表\r\n */\r\n async getCategories(rootCategoryId?: number | string) {\r\n return this.articles.getCategories(rootCategoryId);\r\n }\r\n\r\n /**\r\n * 3. 便捷方法:获取文章标签列表\r\n */\r\n async getTags(tagAlias?: string) {\r\n return this.articles.getTags(tagAlias);\r\n }\r\n\r\n /**\r\n * 4. 便捷方法:根据分类ID获取文章列表\r\n */\r\n async getArticlesByCategory(categoryId: number | number[], options?: {\r\n offset?: number;\r\n limit?: number;\r\n status?: 'published' | 'draft' | 'archived';\r\n }) {\r\n return this.articles.getArticlesByCategory(categoryId, options);\r\n }\r\n\r\n /**\r\n * 5. 便捷方法:根据标签ID获取文章列表\r\n */\r\n async getArticlesByTag(tagId: number | number[], options?: {\r\n offset?: number;\r\n limit?: number;\r\n status?: 'published' | 'draft' | 'archived';\r\n }) {\r\n return this.articles.getArticlesByTag(tagId, options);\r\n }\r\n\r\n /**\r\n * 6. 便捷方法:根据分类ID获取该分类的层级路径\r\n */\r\n async getCategoryPath(categoryId: number) {\r\n return this.articles.getCategoryPath(categoryId);\r\n }\r\n\r\n /**\r\n * 7. 便捷方法:获取指定分类ID下的子分类\r\n */\r\n async getSubCategories(categoryId: number, options?: {\r\n recursive?: boolean;\r\n includeCurrent?: boolean;\r\n maxDepth?: number;\r\n }) {\r\n return this.articles.getSubCategories(categoryId, options);\r\n }\r\n}\r\n\r\n// 导出所有类型\r\nexport * from './core/types';\r\nexport * from './core/client';\r\nexport * from './modules/articles';\r\n\r\n// 默认导出\r\nexport default GT6SDK; "],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
@@ -48,7 +48,8 @@ export declare class GT6SDK {
|
|
48
48
|
}): Promise<{
|
49
49
|
articles: import("./core/types").Article[];
|
50
50
|
total: number;
|
51
|
-
|
51
|
+
page: number;
|
52
|
+
limit: number;
|
52
53
|
}>;
|
53
54
|
/**
|
54
55
|
* 5. 便捷方法:根据标签ID获取文章列表
|
@@ -60,7 +61,8 @@ export declare class GT6SDK {
|
|
60
61
|
}): Promise<{
|
61
62
|
articles: import("./core/types").Article[];
|
62
63
|
total: number;
|
63
|
-
|
64
|
+
page: number;
|
65
|
+
limit: number;
|
64
66
|
}>;
|
65
67
|
/**
|
66
68
|
* 6. 便捷方法:根据分类ID获取该分类的层级路径
|
package/dist/index.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC;;;GAGG;AACH,qBAAa,MAAM;IACV,QAAQ,EAAE,WAAW,CAAC;gBAEjB,MAAM,EAAE,SAAS;IAK7B;;OAEG;IACH,SAAS,IAAI,SAAS;IAItB;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,aAAa;;;;;;;IAIb;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAI3C;;OAEG;IACG,aAAa,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM;IAIpD;;OAEG;IACG,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM;IAI/B;;OAEG;IACG,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QACnE,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,UAAU,CAAC;KAC7C
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC;;;GAGG;AACH,qBAAa,MAAM;IACV,QAAQ,EAAE,WAAW,CAAC;gBAEjB,MAAM,EAAE,SAAS;IAK7B;;OAEG;IACH,SAAS,IAAI,SAAS;IAItB;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,aAAa;;;;;;;IAIb;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAI3C;;OAEG;IACG,aAAa,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM;IAIpD;;OAEG;IACG,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM;IAI/B;;OAEG;IACG,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QACnE,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,UAAU,CAAC;KAC7C;;;;;;IAID;;OAEG;IACG,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QACzD,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,UAAU,CAAC;KAC7C;;;;;;IAID;;OAEG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM;;;;;;;;;IAIxC;;OAEG;IACG,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QACnD,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;;;;;;CAGF;AAGD,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AAGnC,eAAe,MAAM,CAAC"}
|
@@ -20,26 +20,28 @@ export declare class ArticlesAPI {
|
|
20
20
|
* 支持单个分类ID或分类ID数组
|
21
21
|
*/
|
22
22
|
getArticlesByCategory(categoryId: number | number[], options?: {
|
23
|
-
|
23
|
+
page?: number;
|
24
24
|
limit?: number;
|
25
25
|
status?: 'published' | 'draft' | 'archived';
|
26
26
|
}): Promise<{
|
27
27
|
articles: Article[];
|
28
28
|
total: number;
|
29
|
-
|
29
|
+
page: number;
|
30
|
+
limit: number;
|
30
31
|
}>;
|
31
32
|
/**
|
32
33
|
* 5. 根据标签ID获取文章列表
|
33
34
|
* 支持单个标签ID或标签ID数组
|
34
35
|
*/
|
35
36
|
getArticlesByTag(tagId: number | number[], options?: {
|
36
|
-
|
37
|
+
page?: number;
|
37
38
|
limit?: number;
|
38
39
|
status?: 'published' | 'draft' | 'archived';
|
39
40
|
}): Promise<{
|
40
41
|
articles: Article[];
|
41
42
|
total: number;
|
42
|
-
|
43
|
+
page: number;
|
44
|
+
limit: number;
|
43
45
|
}>;
|
44
46
|
/**
|
45
47
|
* 6. 根据分类ID获取该分类的层级路径
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"articles.d.ts","sourceRoot":"","sources":["../../src/modules/articles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EACL,OAAO,EACP,QAAQ,EACR,GAAG,EAGJ,MAAM,eAAe,CAAC;AAEvB,qBAAa,WAAW;IACV,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,SAAS;IAErC;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI9D;;OAEG;IACG,aAAa,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAW1E;;OAEG;IACG,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAWhD;;;OAGG;IACG,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QACnE,
|
1
|
+
{"version":3,"file":"articles.d.ts","sourceRoot":"","sources":["../../src/modules/articles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EACL,OAAO,EACP,QAAQ,EACR,GAAG,EAGJ,MAAM,eAAe,CAAC;AAEvB,qBAAa,WAAW;IACV,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,SAAS;IAErC;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI9D;;OAEG;IACG,aAAa,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAW1E;;OAEG;IACG,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAWhD;;;OAGG;IACG,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QACnE,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,UAAU,CAAC;KAC7C,GAAG,OAAO,CAAC;QACV,QAAQ,EAAE,OAAO,EAAE,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IAsDF;;;OAGG;IACG,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QACzD,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,UAAU,CAAC;KAC7C,GAAG,OAAO,CAAC;QACV,QAAQ,EAAE,OAAO,EAAE,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IAsDF;;;OAGG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QACjD,IAAI,EAAE,QAAQ,EAAE,CAAC;QACjB,eAAe,EAAE,QAAQ,GAAG,IAAI,CAAC;QACjC,WAAW,EAAE,KAAK,CAAC;YACjB,UAAU,EAAE,MAAM,CAAC;YACnB,YAAY,EAAE,MAAM,CAAC;YACrB,KAAK,EAAE,MAAM,CAAC;SACf,CAAC,CAAC;KACJ,CAAC;IAoDF;;;OAGG;IACG,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QACnD,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC;QACV,aAAa,EAAE,QAAQ,EAAE,CAAC;QAC1B,eAAe,EAAE,QAAQ,GAAG,IAAI,CAAC;QACjC,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CAyDH"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@gt6/sdk",
|
3
|
-
"version": "1.0.
|
3
|
+
"version": "1.0.1",
|
4
4
|
"description": "GT6 SDK for articles management - A comprehensive JavaScript/TypeScript library for managing articles, categories, and tags in GT6 platform",
|
5
5
|
"type": "module",
|
6
6
|
"main": "dist/gt6-sdk.cjs.js",
|
@@ -35,6 +35,9 @@
|
|
35
35
|
"version:major:win": "scripts\\version.bat major",
|
36
36
|
"publish:sdk:win": "scripts\\publish.bat",
|
37
37
|
"publish:simple:win": "scripts\\publish-simple.bat",
|
38
|
+
"version:patch:simple:win": "scripts\\version-simple.bat patch",
|
39
|
+
"version:minor:simple:win": "scripts\\version-simple.bat minor",
|
40
|
+
"version:major:simple:win": "scripts\\version-simple.bat major",
|
38
41
|
"setup:npm": "scripts\\setup-npm.bat"
|
39
42
|
},
|
40
43
|
"keywords": [
|