@dollhousemcp/mcp-server 1.5.1 → 1.5.2
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/CHANGELOG.md +34 -0
- package/README.md +9 -5
- package/dist/auth/GitHubAuthManager.js +2 -2
- package/dist/cache/CollectionCache.d.ts +65 -0
- package/dist/cache/CollectionCache.d.ts.map +1 -0
- package/dist/cache/CollectionCache.js +162 -0
- package/dist/cache/index.d.ts +1 -0
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +2 -1
- package/dist/collection/CollectionBrowser.d.ts +24 -1
- package/dist/collection/CollectionBrowser.d.ts.map +1 -1
- package/dist/collection/CollectionBrowser.js +135 -23
- package/dist/collection/CollectionSearch.d.ts +20 -1
- package/dist/collection/CollectionSearch.d.ts.map +1 -1
- package/dist/collection/CollectionSearch.js +110 -6
- package/dist/collection/CollectionSeeder.d.ts +36 -0
- package/dist/collection/CollectionSeeder.d.ts.map +1 -0
- package/dist/collection/CollectionSeeder.js +230 -0
- package/dist/collection/PersonaSubmitter.d.ts +48 -1
- package/dist/collection/PersonaSubmitter.d.ts.map +1 -1
- package/dist/collection/PersonaSubmitter.js +170 -34
- package/dist/collection/index.d.ts +1 -0
- package/dist/collection/index.d.ts.map +1 -1
- package/dist/collection/index.js +2 -1
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +139 -25
- package/dist/server/tools/CollectionTools.d.ts.map +1 -1
- package/dist/server/tools/CollectionTools.js +12 -1
- package/dist/server/types.d.ts +1 -0
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +1 -1
- package/dist/utils/searchUtils.d.ts +23 -0
- package/dist/utils/searchUtils.d.ts.map +1 -0
- package/dist/utils/searchUtils.js +57 -0
- package/package.json +1 -1
|
@@ -1,47 +1,159 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Browse collection content from GitHub
|
|
3
3
|
*/
|
|
4
|
+
import { CollectionCache } from '../cache/CollectionCache.js';
|
|
5
|
+
import { CollectionSeeder } from './CollectionSeeder.js';
|
|
6
|
+
import { logger } from '../utils/logger.js';
|
|
4
7
|
export class CollectionBrowser {
|
|
5
8
|
githubClient;
|
|
9
|
+
collectionCache;
|
|
6
10
|
baseUrl = 'https://api.github.com/repos/DollhouseMCP/collection/contents';
|
|
7
|
-
constructor(githubClient) {
|
|
11
|
+
constructor(githubClient, collectionCache) {
|
|
8
12
|
this.githubClient = githubClient;
|
|
13
|
+
this.collectionCache = collectionCache || new CollectionCache();
|
|
9
14
|
}
|
|
10
15
|
/**
|
|
11
16
|
* Browse collection content by section and type
|
|
17
|
+
* Falls back to cached data when GitHub API is not available or not authenticated
|
|
12
18
|
* @param section - Top level section: library, showcase, or catalog
|
|
13
19
|
* @param type - Optional content type within the library section (personas, skills, etc.)
|
|
14
20
|
*/
|
|
15
21
|
async browseCollection(section, type) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
22
|
+
try {
|
|
23
|
+
// Try GitHub API first
|
|
24
|
+
let url = this.baseUrl;
|
|
25
|
+
// If no section provided, show top-level sections
|
|
26
|
+
if (!section) {
|
|
27
|
+
const data = await this.githubClient.fetchFromGitHub(url, false);
|
|
28
|
+
if (!Array.isArray(data)) {
|
|
29
|
+
throw new Error('Invalid collection response. Expected directory listing.');
|
|
30
|
+
}
|
|
31
|
+
// Filter to only show content directories
|
|
32
|
+
const sections = data.filter((item) => item.type === 'dir' && ['library', 'showcase', 'catalog'].includes(item.name));
|
|
33
|
+
return { items: [], categories: [], sections };
|
|
34
|
+
}
|
|
35
|
+
// Browse within a section
|
|
36
|
+
url = type
|
|
37
|
+
? `${this.baseUrl}/${section}/${type}`
|
|
38
|
+
: `${this.baseUrl}/${section}`;
|
|
39
|
+
const data = await this.githubClient.fetchFromGitHub(url, false);
|
|
20
40
|
if (!Array.isArray(data)) {
|
|
21
41
|
throw new Error('Invalid collection response. Expected directory listing.');
|
|
22
42
|
}
|
|
23
|
-
//
|
|
24
|
-
|
|
25
|
-
|
|
43
|
+
// In the library section, we have content type directories
|
|
44
|
+
if (section === 'library' && !type) {
|
|
45
|
+
const contentTypes = data.filter((item) => item.type === 'dir' && ['personas', 'skills', 'agents', 'prompts', 'templates', 'tools', 'ensembles', 'memories'].includes(item.name));
|
|
46
|
+
return { items: [], categories: contentTypes };
|
|
47
|
+
}
|
|
48
|
+
// For library content types, show files directly (flat structure)
|
|
49
|
+
const items = data.filter((item) => item.type === 'file' && item.name.endsWith('.md'));
|
|
50
|
+
// For non-library sections, they might still have subdirectories
|
|
51
|
+
const categories = section === 'library' ? [] : data.filter((item) => item.type === 'dir');
|
|
52
|
+
return { items, categories };
|
|
26
53
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
54
|
+
catch (error) {
|
|
55
|
+
logger.debug(`GitHub API browse failed, falling back to cache: ${error}`);
|
|
56
|
+
// Fallback to cached data
|
|
57
|
+
return this.browseFromCache(section, type);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Browse collection from cached data
|
|
62
|
+
*/
|
|
63
|
+
async browseFromCache(section, type) {
|
|
64
|
+
try {
|
|
65
|
+
// If no section provided, show available sections from seed data
|
|
66
|
+
if (!section) {
|
|
67
|
+
const sections = [
|
|
68
|
+
{ name: 'library', type: 'dir' }
|
|
69
|
+
];
|
|
70
|
+
return { items: [], categories: [], sections };
|
|
71
|
+
}
|
|
72
|
+
// Get cached or seed data
|
|
73
|
+
let cachedItems = await this.collectionCache.loadCache();
|
|
74
|
+
if (!cachedItems || cachedItems.items.length === 0) {
|
|
75
|
+
// Use seed data if cache is empty
|
|
76
|
+
const seedData = CollectionSeeder.getSeedData();
|
|
77
|
+
await this.collectionCache.saveCache(seedData);
|
|
78
|
+
cachedItems = { items: seedData, timestamp: Date.now() };
|
|
79
|
+
logger.debug('Using seed data for collection browsing');
|
|
80
|
+
}
|
|
81
|
+
// In the library section, we have content type directories
|
|
82
|
+
if (section === 'library' && !type) {
|
|
83
|
+
const contentTypes = this.getContentTypesFromItems(cachedItems.items);
|
|
84
|
+
return { items: [], categories: contentTypes };
|
|
85
|
+
}
|
|
86
|
+
// Get items for specific type or all items in section
|
|
87
|
+
const items = this.filterItemsBySection(cachedItems.items, section, type);
|
|
88
|
+
const formattedItems = this.convertCacheItemsToGitHubFormat(items);
|
|
89
|
+
return { items: formattedItems, categories: [] };
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
logger.error(`Cache browse failed: ${error}`);
|
|
93
|
+
// Last resort: use seed data directly
|
|
94
|
+
return this.browseFromSeedData(section, type);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Browse collection from seed data as last resort
|
|
99
|
+
*/
|
|
100
|
+
browseFromSeedData(section, type) {
|
|
101
|
+
if (!section) {
|
|
102
|
+
const sections = [{ name: 'library', type: 'dir' }];
|
|
103
|
+
return { items: [], categories: [], sections };
|
|
34
104
|
}
|
|
35
|
-
|
|
105
|
+
const seedData = CollectionSeeder.getSeedData();
|
|
36
106
|
if (section === 'library' && !type) {
|
|
37
|
-
const contentTypes =
|
|
107
|
+
const contentTypes = this.getContentTypesFromItems(seedData);
|
|
38
108
|
return { items: [], categories: contentTypes };
|
|
39
109
|
}
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
110
|
+
const items = this.filterItemsBySection(seedData, section, type);
|
|
111
|
+
const formattedItems = this.convertCacheItemsToGitHubFormat(items);
|
|
112
|
+
return { items: formattedItems, categories: [] };
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get unique content types from items
|
|
116
|
+
*/
|
|
117
|
+
getContentTypesFromItems(items) {
|
|
118
|
+
const types = new Set();
|
|
119
|
+
items.forEach(item => {
|
|
120
|
+
const pathParts = item.path.split('/');
|
|
121
|
+
if (pathParts.length >= 2 && pathParts[0] === 'library') {
|
|
122
|
+
types.add(pathParts[1]);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
return Array.from(types).map(type => ({
|
|
126
|
+
name: type,
|
|
127
|
+
type: 'dir'
|
|
128
|
+
}));
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Filter items by section and type
|
|
132
|
+
*/
|
|
133
|
+
filterItemsBySection(items, section, type) {
|
|
134
|
+
return items.filter(item => {
|
|
135
|
+
const pathParts = item.path.split('/');
|
|
136
|
+
if (pathParts[0] !== section) {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
if (type && pathParts[1] !== type) {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
return true;
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Convert cache items to GitHub API format
|
|
147
|
+
*/
|
|
148
|
+
convertCacheItemsToGitHubFormat(items) {
|
|
149
|
+
return items.map(item => ({
|
|
150
|
+
name: item.name,
|
|
151
|
+
path: item.path,
|
|
152
|
+
sha: item.sha,
|
|
153
|
+
type: 'file',
|
|
154
|
+
url: `https://api.github.com/repos/DollhouseMCP/collection/contents/${item.path}`,
|
|
155
|
+
html_url: `https://github.com/DollhouseMCP/collection/blob/main/${item.path}`
|
|
156
|
+
}));
|
|
45
157
|
}
|
|
46
158
|
/**
|
|
47
159
|
* Format collection browse results
|
|
@@ -117,4 +229,4 @@ export class CollectionBrowser {
|
|
|
117
229
|
return textParts.join('');
|
|
118
230
|
}
|
|
119
231
|
}
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbkJyb3dzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29sbGVjdGlvbi9Db2xsZWN0aW9uQnJvd3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUtILE1BQU0sT0FBTyxpQkFBaUI7SUFDcEIsWUFBWSxDQUFlO0lBQzNCLE9BQU8sR0FBRywrREFBK0QsQ0FBQztJQUVsRixZQUFZLFlBQTBCO1FBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE9BQWdCLEVBQUUsSUFBYTtRQUNwRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBRXZCLGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztZQUM5RSxDQUFDO1lBRUQsMENBQTBDO1lBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUN6QyxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDOUUsQ0FBQztZQUVGLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDakQsQ0FBQztRQUVELDBCQUEwQjtRQUMxQixHQUFHLEdBQUcs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SixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQzFCLE1BQU0sUUFBUSxHQUFHLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3RFLFNBQVMsQ0FBQyxJQUFJLENBQ1osV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFDN0Msd0NBQXdDLFFBQVEsT0FBTyxFQUN2RCxnREFBZ0QsUUFBUSxTQUFTLENBQ2xFLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCcm93c2UgY29sbGVjdGlvbiBjb250ZW50IGZyb20gR2l0SHViXG4gKi9cblxuaW1wb3J0IHsgR2l0SHViQ2xpZW50IH0gZnJvbSAnLi9HaXRIdWJDbGllbnQuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25Ccm93c2VyIHtcbiAgcHJpdmF0ZSBnaXRodWJDbGllbnQ6IEdpdEh1YkNsaWVudDtcbiAgcHJpdmF0ZSBiYXNlVXJsID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vY29udGVudHMnO1xuICBcbiAgY29uc3RydWN0b3IoZ2l0aHViQ2xpZW50OiBHaXRIdWJDbGllbnQpIHtcbiAgICB0aGlzLmdpdGh1YkNsaWVudCA9IGdpdGh1YkNsaWVudDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEJyb3dzZSBjb2xsZWN0aW9uIGNvbnRlbnQgYnkgc2VjdGlvbiBhbmQgdHlwZVxuICAgKiBAcGFyYW0gc2VjdGlvbiAtIFRvcCBsZXZlbCBzZWN0aW9uOiBsaWJyYXJ5LCBzaG93Y2FzZSwgb3IgY2F0YWxvZ1xuICAgKiBAcGFyYW0gdHlwZSAtIE9wdGlvbmFsIGNvbnRlbnQgdHlwZSB3aXRoaW4gdGhlIGxpYnJhcnkgc2VjdGlvbiAocGVyc29uYXMsIHNraWxscywgZXRjLilcbiAgICovXG4gIGFzeW5jIGJyb3dzZUNvbGxlY3Rpb24oc2VjdGlvbj86IHN0cmluZywgdHlwZT86IHN0cmluZyk6IFByb21pc2U8eyBpdGVtczogYW55W10sIGNhdGVnb3JpZXM6IGFueVtdLCBzZWN0aW9ucz86IGFueVtdIH0+IHtcbiAgICBsZXQgdXJsID0gdGhpcy5iYXNlVXJsO1xuICAgIFxuICAgIC8vIElmIG5vIHNlY3Rpb24gcHJvdmlkZWQsIHNob3cgdG9wLWxldmVsIHNlY3Rpb25zXG4gICAgaWYgKCFzZWN0aW9uKSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5naXRodWJDbGllbnQuZmV0Y2hGcm9tR2l0SHViKHVybCk7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvbGxlY3Rpb24gcmVzcG9uc2UuIEV4cGVjdGVkIGRpcmVjdG9yeSBsaXN0aW5nLicpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBGaWx0ZXIgdG8gb25seSBzaG93IGNvbnRlbnQgZGlyZWN0b3JpZXNcbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gZGF0YS5maWx0ZXIoKGl0ZW06IGFueSkgPT4gXG4gICAgICAgIGl0ZW0udHlwZSA9PT0gJ2RpcicgJiYgWydsaWJyYXJ5JywgJ3Nob3djYXNlJywgJ2NhdGFsb2cnXS5pbmNsdWRlcyhpdGVtLm5hbWUpXG4gICAgICApO1xuICAgICAgXG4gICAgICByZXR1cm4geyBpdGVtczogW10sIGNhdGVnb3JpZXM6IFtdLCBzZWN0aW9ucyB9O1xuICAgIH1cbiAgICBcbiAgICAvLyBCcm93c2Ugd2l0aGluIGEgc2VjdGlvblxuICAgIHVybCA9IHR5cGUgXG4gICAgICA/IGAke3RoaXMuYmFzZVVybH0vJHtzZWN0aW9ufS8ke3R5cGV9YCBcbiAgICAgIDogYCR7dGhpcy5iYXNlVXJsfS8ke3NlY3Rpb259YDtcbiAgICBcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5naXRodWJDbGllbnQuZmV0Y2hGcm9tR2l0SHViKHVybCk7XG4gICAgXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29sbGVjdGlvbiByZXNwb25zZS4gRXhwZWN0ZWQgZGlyZWN0b3J5IGxpc3RpbmcuJyk7XG4gICAgfVxuICAgIFxuICAgIC8vIEluIHRoZSBsaWJyYXJ5IHNlY3Rpb24sIHdlIGhhdmUgY29udGVudCB0eXBlIGRpcmVjdG9yaWVzXG4gICAgaWYgKHNlY3Rpb24gPT09ICdsaWJyYXJ5JyAmJiAhdHlwZSkge1xuICAgICAgY29uc3QgY29udGVudFR5cGVzID0gZGF0YS5maWx0ZXIoKGl0ZW06IGFueSkgPT4gXG4gICAgICAgIGl0ZW0udHlwZSA9PT0gJ2RpcicgJiYgWydwZXJzb25hcycsICdza2lsbHMnLCAnYWdlbnRzJywgJ3Byb21wdHMnLCAndGVtcGxhdGVzJywgJ3Rvb2xzJywgJ2Vuc2VtYmxlcycsICdtZW1vcmllcyddLmluY2x1ZGVzKGl0ZW0ubmFtZSlcbiAgICAgICk7XG4gICAgICByZXR1cm4geyBpdGVtczogW10sIGNhdGVnb3JpZXM6IGNvbnRlbnRUeXBlcyB9O1xuICAgIH1cbiAgICBcbiAgICAvLyBGb3IgbGlicmFyeSBjb250ZW50IHR5cGVzLCBzaG93IGZpbGVzIGRpcmVjdGx5IChmbGF0IHN0cnVjdHVyZSlcbiAgICBjb25zdCBpdGVtcyA9IGRhdGEuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0udHlwZSA9PT0gJ2ZpbGUnICYmIGl0ZW0ubmFtZS5lbmRzV2l0aCgnLm1kJykpO1xuICAgIC8vIEZvciBub24tbGlicmFyeSBzZWN0aW9ucywgdGhleSBtaWdodCBzdGlsbCBoYXZlIHN1YmRpcmVjdG9yaWVzXG4gICAgY29uc3QgY2F0ZWdvcmllcyA9IHNlY3Rpb24gPT09ICdsaWJyYXJ5JyA/IFtdIDogZGF0YS5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS50eXBlID09PSAnZGlyJyk7XG4gICAgXG4gICAgcmV0dXJuIHsgaXRlbXMsIGNhdGVnb3JpZXMgfTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEZvcm1hdCBjb2xsZWN0aW9uIGJyb3dzZSByZXN1bHRzXG4gICAqL1xuICBmb3JtYXRCcm93c2VSZXN1bHRzKGl0ZW1zOiBhbnlbXSwgY2F0ZWdvcmllczogYW55W10sIHNlY3Rpb24/OiBzdHJpbmcsIHR5cGU/OiBzdHJpbmcsIHBlcnNvbmFJbmRpY2F0b3I6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgICBjb25zdCB0ZXh0UGFydHMgPSBbYCR7cGVyc29uYUluZGljYXRvcn3wn4+qICoqRG9sbGhvdXNlTUNQIENvbGxlY3Rpb24qKlxcblxcbmBdO1xuICAgIFxuICAgIC8vIFNob3cgdG9wLWxldmVsIHNlY3Rpb25zIGlmIG5vIHNlY3Rpb24gc3BlY2lmaWVkXG4gICAgaWYgKCFzZWN0aW9uICYmIGNhdGVnb3JpZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGV4dFBhcnRzLnB1c2goYCoq8J+TmiBDb2xsZWN0aW9uIFNlY3Rpb25zICgke2NhdGVnb3JpZXMubGVuZ3RofSk6KipcXG5gKTtcbiAgICAgIGNhdGVnb3JpZXMuZm9yRWFjaCgoc2VjOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgc2VjdGlvbkljb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICdsaWJyYXJ5JzogJ/Cfk5YnLFxuICAgICAgICAgICdzaG93Y2FzZSc6ICfirZAnLFxuICAgICAgICAgICdjYXRhbG9nJzogJ/Cfko4nXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGljb24gPSBzZWN0aW9uSWNvbnNbc2VjLm5hbWVdIHx8ICfwn5OBJztcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICdsaWJyYXJ5JzogJ0ZyZWUgY29tbXVuaXR5IGNvbnRlbnQnLFxuICAgICAgICAgICdzaG93Y2FzZSc6ICdGZWF0dXJlZCBoaWdoLXF1YWxpdHkgY29udGVudCcsXG4gICAgICAgICAgJ2NhdGFsb2cnOiAnUHJlbWl1bSBjb250ZW50IChjb21pbmcgc29vbiknXG4gICAgICAgIH07XG4gICAgICAgIHRleHRQYXJ0cy5wdXNoKFxuICAgICAgICAgIGAgICAke2ljb259ICoqJHtzZWMubmFtZX0qKiAtICR7ZGVzY3JpcHRpb25zW3NlYy5uYW1lXSB8fCAnQ29udGVudCBjb2xsZWN0aW9uJ31cXG5gLFxuICAgICAgICAgIGAgICAgICBCcm93c2U6IFxcYGJyb3dzZV9jb2xsZWN0aW9uIFwiJHtzZWMubmFtZX1cIlxcYFxcblxcbmBcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRleHRQYXJ0cy5qb2luKCcnKTtcbiAgICB9XG4gICAgXG4gICAgLy8gU2hvdyBjb250ZW50IHR5cGVzIHdpdGhpbiBsaWJyYXJ5IHNlY3Rpb25cbiAgICBpZiAoc2VjdGlvbiA9PT0gJ2xpYnJhcnknICYmICF0eXBlICYmIGNhdGVnb3JpZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGV4dFBhcnRzLnB1c2goYCoq8J+TliBMaWJyYXJ5IENvbnRlbnQgVHlwZXMgKCR7Y2F0ZWdvcmllcy5sZW5ndGh9KToqKlxcbmApO1xuICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB0eXBlSWNvbnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICAgJ3BlcnNvbmFzJzogJ/Cfjq0nLFxuICAgICAgICAgICdza2lsbHMnOiAn8J+boO+4jycsXG4gICAgICAgICAgJ2FnZW50cyc6ICfwn6SWJyxcbiAgICAgICAgICAncHJvbXB0cyc6ICfwn5KsJyxcbiAgICAgICAgICAndGVtcGxhdGVzJzogJ/Cfk4QnLFxuICAgICAgICAgICd0b29scyc6ICfwn5SnJyxcbiAgICAgICAgICAnZW5zZW1ibGVzJzogJ/CfjrwnLFxuICAgICAgICAgICdtZW1vcmllcyc6ICfwn6egJ1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpY29uID0gdHlwZUljb25zW2NhdC5uYW1lXSB8fCAn8J+TgSc7XG4gICAgICAgIHRleHRQYXJ0cy5wdXNoKGAgICAke2ljb259ICoqJHtjYXQubmFtZX0qKiAtIEJyb3dzZTogXFxgYnJvd3NlX2NvbGxlY3Rpb24gXCJsaWJyYXJ5XCIgXCIke2NhdC5uYW1lfVwiXFxgXFxuYCk7XG4gICAgICB9KTtcbiAgICAgIHRleHRQYXJ0cy5wdXNoKCdcXG4nKTtcbiAgICB9IGVsc2UgaWYgKGNhdGVnb3JpZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gT25seSBzaG93IGNhdGVnb3J5IG5hdmlnYXRpb24gZm9yIG5vbi1saWJyYXJ5IHNlY3Rpb25zIChzaG93Y2FzZSwgY2F0YWxvZylcbiAgICAgIHRleHRQYXJ0cy5wdXNoKGAqKvCfk4EgU3ViZGlyZWN0b3JpZXMgaW4gJHtzZWN0aW9ufSR7dHlwZSA/IGAvJHt0eXBlfWAgOiAnJ30gKCR7Y2F0ZWdvcmllcy5sZW5ndGh9KToqKlxcbmApO1xuICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBicm93c2VQYXRoID0gdHlwZSA/IGBcIiR7c2VjdGlvbn1cIiBcIiR7dHlwZX0vJHtjYXQubmFtZX1cImAgOiBgXCIke3NlY3Rpb259XCIgXCIke2NhdC5uYW1lfVwiYDtcbiAgICAgICAgdGV4dFBhcnRzLnB1c2goYCAgIPCfk4IgKioke2NhdC5uYW1lfSoqIC0gQnJvd3NlOiBcXGBicm93c2VfY29sbGVjdGlvbiAke2Jyb3dzZVBhdGh9XFxgXFxuYCk7XG4gICAgICB9KTtcbiAgICAgIHRleHRQYXJ0cy5wdXNoKCdcXG4nKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gdHlwZSB8fCAnY29udGVudCc7XG4gICAgICBjb25zdCBjb250ZW50SWNvbnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICdwZXJzb25hcyc6ICfwn46tJyxcbiAgICAgICAgJ3NraWxscyc6ICfwn5ug77iPJyxcbiAgICAgICAgJ2FnZW50cyc6ICfwn6SWJyxcbiAgICAgICAgJ3Byb21wdHMnOiAn8J+SrCcsXG4gICAgICAgICd0ZW1wbGF0ZXMnOiAn8J+ThCcsXG4gICAgICAgICd0b29scyc6ICfwn5SnJyxcbiAgICAgICAgJ2Vuc2VtYmxlcyc6ICfwn468JyxcbiAgICAgICAgJ21lbW9yaWVzJzogJ/Cfp6AnXG4gICAgICB9O1xuICAgICAgY29uc3QgaWNvbiA9IGNvbnRlbnRJY29uc1tjb250ZW50VHlwZV0gfHwgJ/Cfk4QnO1xuICAgICAgXG4gICAgICB0ZXh0UGFydHMucHVzaChgKioke2ljb259ICR7Y29udGVudFR5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBjb250ZW50VHlwZS5zbGljZSgxKX0gaW4gJHtzZWN0aW9ufSR7dHlwZSA/IGAvJHt0eXBlfWAgOiAnJ30gKCR7aXRlbXMubGVuZ3RofSk6KipcXG5gKTtcbiAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHNlY3Rpb24gKyAodHlwZSA/IGAvJHt0eXBlfWAgOiAnJykgKyBgLyR7aXRlbS5uYW1lfWA7XG4gICAgICAgIHRleHRQYXJ0cy5wdXNoKFxuICAgICAgICAgIGAgICDilqvvuI8gKioke2l0ZW0ubmFtZS5yZXBsYWNlKCcubWQnLCAnJyl9KipcXG5gLFxuICAgICAgICAgIGAgICAgICDwn5OlIEluc3RhbGw6IFxcYGluc3RhbGxfY29udGVudCBcIiR7ZnVsbFBhdGh9XCJcXGBcXG5gLFxuICAgICAgICAgIGAgICAgICDwn5GB77iPIERldGFpbHM6IFxcYGdldF9jb2xsZWN0aW9uX2NvbnRlbnQgXCIke2Z1bGxQYXRofVwiXFxgXFxuXFxuYFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB0ZXh0UGFydHMuam9pbignJyk7XG4gIH1cbn0iXX0=
|
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbkJyb3dzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29sbGVjdGlvbi9Db2xsZWN0aW9uQnJvd3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUdILE9BQU8sRUFBRSxlQUFlLEVBQWtCLE1BQU0sNkJBQTZCLENBQUM7QUFDOUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVDLE1BQU0sT0FBTyxpQkFBaUI7SUFDcEIsWUFBWSxDQUFlO0lBQzNCLGVBQWUsQ0FBa0I7SUFDakMsT0FBTyxHQUFHLCtEQUErRCxDQUFDO0lBRWxGLFlBQVksWUFBMEIsRUFBRSxlQUFpQztRQUN2RSxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsSUFBSSxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFnQixFQUFFLElBQWE7UUFDcEQsSUFBSSxDQUFDO1lBQ0gsdUJBQXVCO1lBQ3ZCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFFdkIsa0RBQWtEO1lBQ2xELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDYixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDakUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDO2dCQUM5RSxDQUFDO2dCQUVELDBDQUEwQztnQkFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxD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QUM7WUFDeEosS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUMxQixNQUFNLFFBQVEsR0FBRyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0RSxTQUFTLENBQUMsSUFBSSxDQUNaLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQzdDLHdDQUF3QyxRQUFRLE9BQU8sRUFDdkQsZ0RBQWdELFFBQVEsU0FBUyxDQUNsRSxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnJvd3NlIGNvbGxlY3Rpb24gY29udGVudCBmcm9tIEdpdEh1YlxuICovXG5cbmltcG9ydCB7IEdpdEh1YkNsaWVudCB9IGZyb20gJy4vR2l0SHViQ2xpZW50LmpzJztcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgQ29sbGVjdGlvbkl0ZW0gfSBmcm9tICcuLi9jYWNoZS9Db2xsZWN0aW9uQ2FjaGUuanMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvblNlZWRlciB9IGZyb20gJy4vQ29sbGVjdGlvblNlZWRlci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkJyb3dzZXIge1xuICBwcml2YXRlIGdpdGh1YkNsaWVudDogR2l0SHViQ2xpZW50O1xuICBwcml2YXRlIGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlO1xuICBwcml2YXRlIGJhc2VVcmwgPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9jb250ZW50cyc7XG4gIFxuICBjb25zdHJ1Y3RvcihnaXRodWJDbGllbnQ6IEdpdEh1YkNsaWVudCwgY29sbGVjdGlvbkNhY2hlPzogQ29sbGVjdGlvbkNhY2hlKSB7XG4gICAgdGhpcy5naXRodWJDbGllbnQgPSBnaXRodWJDbGllbnQ7XG4gICAgdGhpcy5jb2xsZWN0aW9uQ2FjaGUgPSBjb2xsZWN0aW9uQ2FjaGUgfHwgbmV3IENvbGxlY3Rpb25DYWNoZSgpO1xuICB9XG4gIFxuICAvKipcbiAgICogQnJvd3NlIGNvbGxlY3Rpb24gY29udGVudCBieSBzZWN0aW9uIGFuZCB0eXBlXG4gICAqIEZhbGxzIGJhY2sgdG8gY2FjaGVkIGRhdGEgd2hlbiBHaXRIdWIgQVBJIGlzIG5vdCBhdmFpbGFibGUgb3Igbm90IGF1dGhlbnRpY2F0ZWRcbiAgICogQHBhcmFtIHNlY3Rpb24gLSBUb3AgbGV2ZWwgc2VjdGlvbjogbGlicmFyeSwgc2hvd2Nhc2UsIG9yIGNhdGFsb2dcbiAgICogQHBhcmFtIHR5cGUgLSBPcHRpb25hbCBjb250ZW50IHR5cGUgd2l0aGluIHRoZSBsaWJyYXJ5IHNlY3Rpb24gKHBlcnNvbmFzLCBza2lsbHMsIGV0Yy4pXG4gICAqL1xuICBhc3luYyBicm93c2VDb2xsZWN0aW9uKHNlY3Rpb24/OiBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpOiBQcm9taXNlPHsgaXRlbXM6IGFueVtdLCBjYXRlZ29yaWVzOiBhbnlbXSwgc2VjdGlvbnM/OiBhbnlbXSB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyeSBHaXRIdWIgQVBJIGZpcnN0XG4gICAgICBsZXQgdXJsID0gdGhpcy5iYXNlVXJsO1xuICAgICAgXG4gICAgICAvLyBJZiBubyBzZWN0aW9uIHByb3ZpZGVkLCBzaG93IHRvcC1sZXZlbCBzZWN0aW9uc1xuICAgICAgaWYgKCFzZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdpdGh1YkNsaWVudC5mZXRjaEZyb21HaXRIdWIodXJsLCBmYWxzZSk7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2xsZWN0aW9uIHJlc3BvbnNlLiBFeHBlY3RlZCBkaXJlY3RvcnkgbGlzdGluZy4nKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gRmlsdGVyIHRvIG9ubHkgc2hvdyBjb250ZW50IGRpcmVjdG9yaWVzXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gZGF0YS5maWx0ZXIoKGl0ZW06IGFueSkgPT4gXG4gICAgICAgICAgaXRlbS50eXBlID09PSAnZGlyJyAmJiBbJ2xpYnJhcnknLCAnc2hvd2Nhc2UnLCAnY2F0YWxvZyddLmluY2x1ZGVzKGl0ZW0ubmFtZSlcbiAgICAgICAgKTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB7IGl0ZW1zOiBbXSwgY2F0ZWdvcmllczogW10sIHNlY3Rpb25zIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEJyb3dzZSB3aXRoaW4gYSBzZWN0aW9uXG4gICAgICB1cmwgPSB0eXBlIFxuICAgICAgICA/IGAke3RoaXMuYmFzZVVybH0vJHtzZWN0aW9ufS8ke3R5cGV9YCBcbiAgICAgICAgOiBgJHt0aGlzLmJhc2VVcmx9LyR7c2VjdGlvbn1gO1xuICAgICAgXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5naXRodWJDbGllbnQuZmV0Y2hGcm9tR2l0SHViKHVybCwgZmFsc2UpO1xuICAgICAgXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvbGxlY3Rpb24gcmVzcG9uc2UuIEV4cGVjdGVkIGRpcmVjdG9yeSBsaXN0aW5nLicpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBJbiB0aGUgbGlicmFyeSBzZWN0aW9uLCB3ZSBoYXZlIGNvbnRlbnQgdHlwZSBkaXJlY3Rvcmllc1xuICAgICAgaWYgKHNlY3Rpb24gPT09ICdsaWJyYXJ5JyAmJiAhdHlwZSkge1xuICAgICAgICBjb25zdCBjb250ZW50VHlwZXMgPSBkYXRhLmZpbHRlcigoaXRlbTogYW55KSA9PiBcbiAgICAgICAgICBpdGVtLnR5cGUgPT09ICdkaXInICYmIFsncGVyc29uYXMnLCAnc2tpbGxzJywgJ2FnZW50cycsICdwcm9tcHRzJywgJ3RlbXBsYXRlcycsICd0b29scycsICdlbnNlbWJsZXMnLCAnbWVtb3JpZXMnXS5pbmNsdWRlcyhpdGVtLm5hbWUpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7IGl0ZW1zOiBbXSwgY2F0ZWdvcmllczogY29udGVudFR5cGVzIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZvciBsaWJyYXJ5IGNvbnRlbnQgdHlwZXMsIHNob3cgZmlsZXMgZGlyZWN0bHkgKGZsYXQgc3RydWN0dXJlKVxuICAgICAgY29uc3QgaXRlbXMgPSBkYXRhLmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLnR5cGUgPT09ICdmaWxlJyAmJiBpdGVtLm5hbWUuZW5kc1dpdGgoJy5tZCcpKTtcbiAgICAgIC8vIEZvciBub24tbGlicmFyeSBzZWN0aW9ucywgdGhleSBtaWdodCBzdGlsbCBoYXZlIHN1YmRpcmVjdG9yaWVzXG4gICAgICBjb25zdCBjYXRlZ29yaWVzID0gc2VjdGlvbiA9PT0gJ2xpYnJhcnknID8gW10gOiBkYXRhLmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLnR5cGUgPT09ICdkaXInKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHsgaXRlbXMsIGNhdGVnb3JpZXMgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBHaXRIdWIgQVBJIGJyb3dzZSBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBjYWNoZTogJHtlcnJvcn1gKTtcbiAgICAgIFxuICAgICAgLy8gRmFsbGJhY2sgdG8gY2FjaGVkIGRhdGFcbiAgICAgIHJldHVybiB0aGlzLmJyb3dzZUZyb21DYWNoZShzZWN0aW9uLCB0eXBlKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBCcm93c2UgY29sbGVjdGlvbiBmcm9tIGNhY2hlZCBkYXRhXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGJyb3dzZUZyb21DYWNoZShzZWN0aW9uPzogc3RyaW5nLCB0eXBlPzogc3RyaW5nKTogUHJvbWlzZTx7IGl0ZW1zOiBhbnlbXSwgY2F0ZWdvcmllczogYW55W10sIHNlY3Rpb25zPzogYW55W10gfT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBJZiBubyBzZWN0aW9uIHByb3ZpZGVkLCBzaG93IGF2YWlsYWJsZSBzZWN0aW9ucyBmcm9tIHNlZWQgZGF0YVxuICAgICAgaWYgKCFzZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gW1xuICAgICAgICAgIHsgbmFtZTogJ2xpYnJhcnknLCB0eXBlOiAnZGlyJyB9XG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiB7IGl0ZW1zOiBbXSwgY2F0ZWdvcmllczogW10sIHNlY3Rpb25zIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEdldCBjYWNoZWQgb3Igc2VlZCBkYXRhXG4gICAgICBsZXQgY2FjaGVkSXRlbXMgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb25DYWNoZS5sb2FkQ2FjaGUoKTtcbiAgICAgIFxuICAgICAgaWYgKCFjYWNoZWRJdGVtcyB8fCBjYWNoZWRJdGVtcy5pdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gVXNlIHNlZWQgZGF0YSBpZiBjYWNoZSBpcyBlbXB0eVxuICAgICAgICBjb25zdCBzZWVkRGF0YSA9IENvbGxlY3Rpb25TZWVkZXIuZ2V0U2VlZERhdGEoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uQ2FjaGUuc2F2ZUNhY2hlKHNlZWREYXRhKTtcbiAgICAgICAgY2FjaGVkSXRlbXMgPSB7IGl0ZW1zOiBzZWVkRGF0YSwgdGltZXN0YW1wOiBEYXRlLm5vdygpIH07XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnVXNpbmcgc2VlZCBkYXRhIGZvciBjb2xsZWN0aW9uIGJyb3dzaW5nJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEluIHRoZSBsaWJyYXJ5IHNlY3Rpb24sIHdlIGhhdmUgY29udGVudCB0eXBlIGRpcmVjdG9yaWVzXG4gICAgICBpZiAoc2VjdGlvbiA9PT0gJ2xpYnJhcnknICYmICF0eXBlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlcyA9IHRoaXMuZ2V0Q29udGVudFR5cGVzRnJvbUl0ZW1zKGNhY2hlZEl0ZW1zLml0ZW1zKTtcbiAgICAgICAgcmV0dXJuIHsgaXRlbXM6IFtdLCBjYXRlZ29yaWVzOiBjb250ZW50VHlwZXMgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gR2V0IGl0ZW1zIGZvciBzcGVjaWZpYyB0eXBlIG9yIGFsbCBpdGVtcyBpbiBzZWN0aW9uXG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMuZmlsdGVySXRlbXNCeVNlY3Rpb24oY2FjaGVkSXRlbXMuaXRlbXMsIHNlY3Rpb24sIHR5cGUpO1xuICAgICAgY29uc3QgZm9ybWF0dGVkSXRlbXMgPSB0aGlzLmNvbnZlcnRDYWNoZUl0ZW1zVG9HaXRIdWJGb3JtYXQoaXRlbXMpO1xuICAgICAgXG4gICAgICByZXR1cm4geyBpdGVtczogZm9ybWF0dGVkSXRlbXMsIGNhdGVnb3JpZXM6IFtdIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgQ2FjaGUgYnJvd3NlIGZhaWxlZDogJHtlcnJvcn1gKTtcbiAgICAgIFxuICAgICAgLy8gTGFzdCByZXNvcnQ6IHVzZSBzZWVkIGRhdGEgZGlyZWN0bHlcbiAgICAgIHJldHVybiB0aGlzLmJyb3dzZUZyb21TZWVkRGF0YShzZWN0aW9uLCB0eXBlKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBCcm93c2UgY29sbGVjdGlvbiBmcm9tIHNlZWQgZGF0YSBhcyBsYXN0IHJlc29ydFxuICAgKi9cbiAgcHJpdmF0ZSBicm93c2VGcm9tU2VlZERhdGEoc2VjdGlvbj86IHN0cmluZywgdHlwZT86IHN0cmluZyk6IHsgaXRlbXM6IGFueVtdLCBjYXRlZ29yaWVzOiBhbnlbXSwgc2VjdGlvbnM/OiBhbnlbXSB9IHtcbiAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gW3sgbmFtZTogJ2xpYnJhcnknLCB0eXBlOiAnZGlyJyB9XTtcbiAgICAgIHJldHVybiB7IGl0ZW1zOiBbXSwgY2F0ZWdvcmllczogW10sIHNlY3Rpb25zIH07XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHNlZWREYXRhID0gQ29sbGVjdGlvblNlZWRlci5nZXRTZWVkRGF0YSgpO1xuICAgIFxuICAgIGlmIChzZWN0aW9uID09PSAnbGlicmFyeScgJiYgIXR5cGUpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlcyA9IHRoaXMuZ2V0Q29udGVudFR5cGVzRnJvbUl0ZW1zKHNlZWREYXRhKTtcbiAgICAgIHJldHVybiB7IGl0ZW1zOiBbXSwgY2F0ZWdvcmllczogY29udGVudFR5cGVzIH07XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5maWx0ZXJJdGVtc0J5U2VjdGlvbihzZWVkRGF0YSwgc2VjdGlvbiwgdHlwZSk7XG4gICAgY29uc3QgZm9ybWF0dGVkSXRlbXMgPSB0aGlzLmNvbnZlcnRDYWNoZUl0ZW1zVG9HaXRIdWJGb3JtYXQoaXRlbXMpO1xuICAgIFxuICAgIHJldHVybiB7IGl0ZW1zOiBmb3JtYXR0ZWRJdGVtcywgY2F0ZWdvcmllczogW10gfTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCB1bmlxdWUgY29udGVudCB0eXBlcyBmcm9tIGl0ZW1zXG4gICAqL1xuICBwcml2YXRlIGdldENvbnRlbnRUeXBlc0Zyb21JdGVtcyhpdGVtczogQ29sbGVjdGlvbkl0ZW1bXSk6IGFueVtdIHtcbiAgICBjb25zdCB0eXBlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIFxuICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBwYXRoUGFydHMgPSBpdGVtLnBhdGguc3BsaXQoJy8nKTtcbiAgICAgIGlmIChwYXRoUGFydHMubGVuZ3RoID49IDIgJiYgcGF0aFBhcnRzWzBdID09PSAnbGlicmFyeScpIHtcbiAgICAgICAgdHlwZXMuYWRkKHBhdGhQYXJ0c1sxXSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIEFycmF5LmZyb20odHlwZXMpLm1hcCh0eXBlID0+ICh7XG4gICAgICBuYW1lOiB0eXBlLFxuICAgICAgdHlwZTogJ2RpcidcbiAgICB9KSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGaWx0ZXIgaXRlbXMgYnkgc2VjdGlvbiBhbmQgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBmaWx0ZXJJdGVtc0J5U2VjdGlvbihpdGVtczogQ29sbGVjdGlvbkl0ZW1bXSwgc2VjdGlvbjogc3RyaW5nLCB0eXBlPzogc3RyaW5nKTogQ29sbGVjdGlvbkl0ZW1bXSB7XG4gICAgcmV0dXJuIGl0ZW1zLmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IGl0ZW0ucGF0aC5zcGxpdCgnLycpO1xuICAgICAgXG4gICAgICBpZiAocGF0aFBhcnRzWzBdICE9PSBzZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKHR5cGUgJiYgcGF0aFBhcnRzWzFdICE9PSB0eXBlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDb252ZXJ0IGNhY2hlIGl0ZW1zIHRvIEdpdEh1YiBBUEkgZm9ybWF0XG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRDYWNoZUl0ZW1zVG9HaXRIdWJGb3JtYXQoaXRlbXM6IENvbGxlY3Rpb25JdGVtW10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICBwYXRoOiBpdGVtLnBhdGgsXG4gICAgICBzaGE6IGl0ZW0uc2hhLFxuICAgICAgdHlwZTogJ2ZpbGUnLFxuICAgICAgdXJsOiBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9jb250ZW50cy8ke2l0ZW0ucGF0aH1gLFxuICAgICAgaHRtbF91cmw6IGBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vYmxvYi9tYWluLyR7aXRlbS5wYXRofWBcbiAgICB9KSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGb3JtYXQgY29sbGVjdGlvbiBicm93c2UgcmVzdWx0c1xuICAgKi9cbiAgZm9ybWF0QnJvd3NlUmVzdWx0cyhpdGVtczogYW55W10sIGNhdGVnb3JpZXM6IGFueVtdLCBzZWN0aW9uPzogc3RyaW5nLCB0eXBlPzogc3RyaW5nLCBwZXJzb25hSW5kaWNhdG9yOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgY29uc3QgdGV4dFBhcnRzID0gW2Ake3BlcnNvbmFJbmRpY2F0b3J98J+PqiAqKkRvbGxob3VzZU1DUCBDb2xsZWN0aW9uKipcXG5cXG5gXTtcbiAgICBcbiAgICAvLyBTaG93IHRvcC1sZXZlbCBzZWN0aW9ucyBpZiBubyBzZWN0aW9uIHNwZWNpZmllZFxuICAgIGlmICghc2VjdGlvbiAmJiBjYXRlZ29yaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRleHRQYXJ0cy5wdXNoKGAqKvCfk5ogQ29sbGVjdGlvbiBTZWN0aW9ucyAoJHtjYXRlZ29yaWVzLmxlbmd0aH0pOioqXFxuYCk7XG4gICAgICBjYXRlZ29yaWVzLmZvckVhY2goKHNlYzogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25JY29uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgICAnbGlicmFyeSc6ICfwn5OWJyxcbiAgICAgICAgICAnc2hvd2Nhc2UnOiAn4q2QJyxcbiAgICAgICAgICAnY2F0YWxvZyc6ICfwn5KOJ1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpY29uID0gc2VjdGlvbkljb25zW3NlYy5uYW1lXSB8fCAn8J+TgSc7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgICAnbGlicmFyeSc6ICdGcmVlIGNvbW11bml0eSBjb250ZW50JyxcbiAgICAgICAgICAnc2hvd2Nhc2UnOiAnRmVhdHVyZWQgaGlnaC1xdWFsaXR5IGNvbnRlbnQnLFxuICAgICAgICAgICdjYXRhbG9nJzogJ1ByZW1pdW0gY29udGVudCAoY29taW5nIHNvb24pJ1xuICAgICAgICB9O1xuICAgICAgICB0ZXh0UGFydHMucHVzaChcbiAgICAgICAgICBgICAgJHtpY29ufSAqKiR7c2VjLm5hbWV9KiogLSAke2Rlc2NyaXB0aW9uc1tzZWMubmFtZV0gfHwgJ0NvbnRlbnQgY29sbGVjdGlvbid9XFxuYCxcbiAgICAgICAgICBgICAgICAgQnJvd3NlOiBcXGBicm93c2VfY29sbGVjdGlvbiBcIiR7c2VjLm5hbWV9XCJcXGBcXG5cXG5gXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0ZXh0UGFydHMuam9pbignJyk7XG4gICAgfVxuICAgIFxuICAgIC8vIFNob3cgY29udGVudCB0eXBlcyB3aXRoaW4gbGlicmFyeSBzZWN0aW9uXG4gICAgaWYgKHNlY3Rpb24gPT09ICdsaWJyYXJ5JyAmJiAhdHlwZSAmJiBjYXRlZ29yaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRleHRQYXJ0cy5wdXNoKGAqKvCfk5YgTGlicmFyeSBDb250ZW50IFR5cGVzICgke2NhdGVnb3JpZXMubGVuZ3RofSk6KipcXG5gKTtcbiAgICAgIGNhdGVnb3JpZXMuZm9yRWFjaCgoY2F0OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgdHlwZUljb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICdwZXJzb25hcyc6ICfwn46tJyxcbiAgICAgICAgICAnc2tpbGxzJzogJ/Cfm6DvuI8nLFxuICAgICAgICAgICdhZ2VudHMnOiAn8J+klicsXG4gICAgICAgICAgJ3Byb21wdHMnOiAn8J+SrCcsXG4gICAgICAgICAgJ3RlbXBsYXRlcyc6ICfwn5OEJyxcbiAgICAgICAgICAndG9vbHMnOiAn8J+UpycsXG4gICAgICAgICAgJ2Vuc2VtYmxlcyc6ICfwn468JyxcbiAgICAgICAgICAnbWVtb3JpZXMnOiAn8J+noCdcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaWNvbiA9IHR5cGVJY29uc1tjYXQubmFtZV0gfHwgJ/Cfk4EnO1xuICAgICAgICB0ZXh0UGFydHMucHVzaChgICAgJHtpY29ufSAqKiR7Y2F0Lm5hbWV9KiogLSBCcm93c2U6IFxcYGJyb3dzZV9jb2xsZWN0aW9uIFwibGlicmFyeVwiIFwiJHtjYXQubmFtZX1cIlxcYFxcbmApO1xuICAgICAgfSk7XG4gICAgICB0ZXh0UGFydHMucHVzaCgnXFxuJyk7XG4gICAgfSBlbHNlIGlmIChjYXRlZ29yaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIE9ubHkgc2hvdyBjYXRlZ29yeSBuYXZpZ2F0aW9uIGZvciBub24tbGlicmFyeSBzZWN0aW9ucyAoc2hvd2Nhc2UsIGNhdGFsb2cpXG4gICAgICB0ZXh0UGFydHMucHVzaChgKirwn5OBIFN1YmRpcmVjdG9yaWVzIGluICR7c2VjdGlvbn0ke3R5cGUgPyBgLyR7dHlwZX1gIDogJyd9ICgke2NhdGVnb3JpZXMubGVuZ3RofSk6KipcXG5gKTtcbiAgICAgIGNhdGVnb3JpZXMuZm9yRWFjaCgoY2F0OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgYnJvd3NlUGF0aCA9IHR5cGUgPyBgXCIke3NlY3Rpb259XCIgXCIke3R5cGV9LyR7Y2F0Lm5hbWV9XCJgIDogYFwiJHtzZWN0aW9ufVwiIFwiJHtjYXQubmFtZX1cImA7XG4gICAgICAgIHRleHRQYXJ0cy5wdXNoKGAgICDwn5OCICoqJHtjYXQubmFtZX0qKiAtIEJyb3dzZTogXFxgYnJvd3NlX2NvbGxlY3Rpb24gJHticm93c2VQYXRofVxcYFxcbmApO1xuICAgICAgfSk7XG4gICAgICB0ZXh0UGFydHMucHVzaCgnXFxuJyk7XG4gICAgfVxuICAgIFxuICAgIGlmIChpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHR5cGUgfHwgJ2NvbnRlbnQnO1xuICAgICAgY29uc3QgY29udGVudEljb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAncGVyc29uYXMnOiAn8J+OrScsXG4gICAgICAgICdza2lsbHMnOiAn8J+boO+4jycsXG4gICAgICAgICdhZ2VudHMnOiAn8J+klicsXG4gICAgICAgICdwcm9tcHRzJzogJ/CfkqwnLFxuICAgICAgICAndGVtcGxhdGVzJzogJ/Cfk4QnLFxuICAgICAgICAndG9vbHMnOiAn8J+UpycsXG4gICAgICAgICdlbnNlbWJsZXMnOiAn8J+OvCcsXG4gICAgICAgICdtZW1vcmllcyc6ICfwn6egJ1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGljb24gPSBjb250ZW50SWNvbnNbY29udGVudFR5cGVdIHx8ICfwn5OEJztcbiAgICAgIFxuICAgICAgdGV4dFBhcnRzLnB1c2goYCoqJHtpY29ufSAke2NvbnRlbnRUeXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgY29udGVudFR5cGUuc2xpY2UoMSl9IGluICR7c2VjdGlvbn0ke3R5cGUgPyBgLyR7dHlwZX1gIDogJyd9ICgke2l0ZW1zLmxlbmd0aH0pOioqXFxuYCk7XG4gICAgICBpdGVtcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBzZWN0aW9uICsgKHR5cGUgPyBgLyR7dHlwZX1gIDogJycpICsgYC8ke2l0ZW0ubmFtZX1gO1xuICAgICAgICB0ZXh0UGFydHMucHVzaChcbiAgICAgICAgICBgICAg4par77iPICoqJHtpdGVtLm5hbWUucmVwbGFjZSgnLm1kJywgJycpfSoqXFxuYCxcbiAgICAgICAgICBgICAgICAg8J+TpSBJbnN0YWxsOiBcXGBpbnN0YWxsX2NvbnRlbnQgXCIke2Z1bGxQYXRofVwiXFxgXFxuYCxcbiAgICAgICAgICBgICAgICAg8J+Rge+4jyBEZXRhaWxzOiBcXGBnZXRfY29sbGVjdGlvbl9jb250ZW50IFwiJHtmdWxsUGF0aH1cIlxcYFxcblxcbmBcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gdGV4dFBhcnRzLmpvaW4oJycpO1xuICB9XG59Il19
|
|
@@ -2,14 +2,33 @@
|
|
|
2
2
|
* Search for content in the collection
|
|
3
3
|
*/
|
|
4
4
|
import { GitHubClient } from './GitHubClient.js';
|
|
5
|
+
import { CollectionCache } from '../cache/CollectionCache.js';
|
|
5
6
|
export declare class CollectionSearch {
|
|
6
7
|
private githubClient;
|
|
8
|
+
private collectionCache;
|
|
7
9
|
private searchBaseUrl;
|
|
8
|
-
constructor(githubClient: GitHubClient);
|
|
10
|
+
constructor(githubClient: GitHubClient, collectionCache?: CollectionCache);
|
|
9
11
|
/**
|
|
10
12
|
* Search collection for content matching query
|
|
13
|
+
* Falls back to cached data when GitHub API is not available or not authenticated
|
|
11
14
|
*/
|
|
12
15
|
searchCollection(query: string): Promise<any[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Search cached collection items
|
|
18
|
+
*/
|
|
19
|
+
private searchFromCache;
|
|
20
|
+
/**
|
|
21
|
+
* Search seed data for matching items with fuzzy matching
|
|
22
|
+
*/
|
|
23
|
+
private searchSeedData;
|
|
24
|
+
/**
|
|
25
|
+
* Convert cache items to GitHub API format for consistent response structure
|
|
26
|
+
*/
|
|
27
|
+
private convertCacheItemsToGitHubFormat;
|
|
28
|
+
/**
|
|
29
|
+
* Update cache with fresh data from GitHub API items
|
|
30
|
+
*/
|
|
31
|
+
private updateCacheFromGitHubItems;
|
|
13
32
|
/**
|
|
14
33
|
* Format search results
|
|
15
34
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CollectionSearch.d.ts","sourceRoot":"","sources":["../../src/collection/CollectionSearch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"CollectionSearch.d.ts","sourceRoot":"","sources":["../../src/collection/CollectionSearch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAkB,MAAM,6BAA6B,CAAC;AAK9E,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,aAAa,CAAwC;gBAEjD,YAAY,EAAE,YAAY,EAAE,eAAe,CAAC,EAAE,eAAe;IAKzE;;;OAGG;IACG,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAgCrD;;OAEG;YACW,eAAe;IA+B7B;;OAEG;IACH,OAAO,CAAC,cAAc;IActB;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAcvC;;OAEG;YACW,0BAA0B;IAiBxC;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,GAAE,MAAW,GAAG,MAAM;CAiCxF"}
|
|
@@ -1,22 +1,126 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Search for content in the collection
|
|
3
3
|
*/
|
|
4
|
+
import { CollectionCache } from '../cache/CollectionCache.js';
|
|
5
|
+
import { CollectionSeeder } from './CollectionSeeder.js';
|
|
6
|
+
import { logger } from '../utils/logger.js';
|
|
7
|
+
import { normalizeSearchTerm, validateSearchQuery } from '../utils/searchUtils.js';
|
|
4
8
|
export class CollectionSearch {
|
|
5
9
|
githubClient;
|
|
10
|
+
collectionCache;
|
|
6
11
|
searchBaseUrl = 'https://api.github.com/search/code';
|
|
7
|
-
constructor(githubClient) {
|
|
12
|
+
constructor(githubClient, collectionCache) {
|
|
8
13
|
this.githubClient = githubClient;
|
|
14
|
+
this.collectionCache = collectionCache || new CollectionCache();
|
|
9
15
|
}
|
|
10
16
|
/**
|
|
11
17
|
* Search collection for content matching query
|
|
18
|
+
* Falls back to cached data when GitHub API is not available or not authenticated
|
|
12
19
|
*/
|
|
13
20
|
async searchCollection(query) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
21
|
+
// Validate search query for security
|
|
22
|
+
try {
|
|
23
|
+
validateSearchQuery(query, 1000);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
logger.warn(`Invalid search query: ${error}`);
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
// First, try GitHub API search if authenticated
|
|
31
|
+
const searchUrl = `${this.searchBaseUrl}?q=${encodeURIComponent(query)}+repo:DollhouseMCP/collection+path:library+extension:md`;
|
|
32
|
+
const data = await this.githubClient.fetchFromGitHub(searchUrl, false); // Don't require auth for search
|
|
33
|
+
if (data.items && Array.isArray(data.items)) {
|
|
34
|
+
logger.debug(`Found ${data.items.length} items via GitHub API search`);
|
|
35
|
+
// Update cache with fresh data from API
|
|
36
|
+
await this.updateCacheFromGitHubItems(data.items);
|
|
37
|
+
return data.items;
|
|
38
|
+
}
|
|
17
39
|
return [];
|
|
18
40
|
}
|
|
19
|
-
|
|
41
|
+
catch (error) {
|
|
42
|
+
logger.debug(`GitHub API search failed, falling back to cache: ${error}`);
|
|
43
|
+
// Fallback to cached search
|
|
44
|
+
return this.searchFromCache(query);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Search cached collection items
|
|
49
|
+
*/
|
|
50
|
+
async searchFromCache(query) {
|
|
51
|
+
try {
|
|
52
|
+
// Try to load from cache first
|
|
53
|
+
const cachedItems = await this.collectionCache.searchCache(query);
|
|
54
|
+
if (cachedItems.length > 0) {
|
|
55
|
+
logger.debug(`Found ${cachedItems.length} items from cache`);
|
|
56
|
+
return this.convertCacheItemsToGitHubFormat(cachedItems);
|
|
57
|
+
}
|
|
58
|
+
// If cache is empty or no results, use seed data
|
|
59
|
+
const seedItems = this.searchSeedData(query);
|
|
60
|
+
if (seedItems.length > 0) {
|
|
61
|
+
logger.debug(`Found ${seedItems.length} items from seed data`);
|
|
62
|
+
// Save seed data to cache for future use
|
|
63
|
+
await this.collectionCache.saveCache(CollectionSeeder.getSeedData());
|
|
64
|
+
return this.convertCacheItemsToGitHubFormat(seedItems);
|
|
65
|
+
}
|
|
66
|
+
logger.debug('No items found in cache or seed data');
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
logger.error(`Cache search failed: ${error}`);
|
|
71
|
+
// Last resort: search seed data without cache
|
|
72
|
+
const seedItems = this.searchSeedData(query);
|
|
73
|
+
logger.debug(`Fallback to seed data found ${seedItems.length} items`);
|
|
74
|
+
return this.convertCacheItemsToGitHubFormat(seedItems);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Search seed data for matching items with fuzzy matching
|
|
79
|
+
*/
|
|
80
|
+
searchSeedData(query) {
|
|
81
|
+
const seedData = CollectionSeeder.getSeedData();
|
|
82
|
+
const normalizedQuery = normalizeSearchTerm(query);
|
|
83
|
+
return seedData.filter(item => {
|
|
84
|
+
const normalizedName = normalizeSearchTerm(item.name);
|
|
85
|
+
const normalizedPath = normalizeSearchTerm(item.path);
|
|
86
|
+
return normalizedName.includes(normalizedQuery) ||
|
|
87
|
+
normalizedPath.includes(normalizedQuery);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Convert cache items to GitHub API format for consistent response structure
|
|
92
|
+
*/
|
|
93
|
+
convertCacheItemsToGitHubFormat(cacheItems) {
|
|
94
|
+
return cacheItems.map(item => ({
|
|
95
|
+
name: item.name,
|
|
96
|
+
path: item.path,
|
|
97
|
+
sha: item.sha,
|
|
98
|
+
url: `https://api.github.com/repos/DollhouseMCP/collection/contents/${item.path}`,
|
|
99
|
+
html_url: `https://github.com/DollhouseMCP/collection/blob/main/${item.path}`,
|
|
100
|
+
repository: {
|
|
101
|
+
name: 'collection',
|
|
102
|
+
full_name: 'DollhouseMCP/collection'
|
|
103
|
+
}
|
|
104
|
+
}));
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Update cache with fresh data from GitHub API items
|
|
108
|
+
*/
|
|
109
|
+
async updateCacheFromGitHubItems(githubItems) {
|
|
110
|
+
try {
|
|
111
|
+
const cacheItems = githubItems.map(item => ({
|
|
112
|
+
name: item.name,
|
|
113
|
+
path: item.path,
|
|
114
|
+
sha: item.sha,
|
|
115
|
+
last_modified: new Date().toISOString()
|
|
116
|
+
}));
|
|
117
|
+
await this.collectionCache.saveCache(cacheItems);
|
|
118
|
+
logger.debug(`Updated cache with ${cacheItems.length} items from GitHub API`);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
logger.debug(`Failed to update cache: ${error}`);
|
|
122
|
+
// Don't throw - cache update failures shouldn't break functionality
|
|
123
|
+
}
|
|
20
124
|
}
|
|
21
125
|
/**
|
|
22
126
|
* Format search results
|
|
@@ -45,4 +149,4 @@ export class CollectionSearch {
|
|
|
45
149
|
return textParts.join('');
|
|
46
150
|
}
|
|
47
151
|
}
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvblNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL0NvbGxlY3Rpb25TZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFJSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ25CLFlBQVksQ0FBZTtJQUMzQixhQUFhLEdBQUcsb0NBQW9DLENBQUM7SUFFN0QsWUFBWSxZQUEwQjtRQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBYTtRQUNsQyxNQUFNLFNBQVMsR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLE1BQU0sa0JBQWtCLENBQUMsS0FBSyxDQUFDLHlEQUF5RCxDQUFDO1FBRWhJLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CLENBQUMsS0FBWSxFQUFFLEtBQWEsRUFBRSxtQkFBMkIsRUFBRTtRQUM1RSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxHQUFHLGdCQUFnQixtQ0FBbUMsS0FBSyxHQUFHLENBQUM7UUFDeEUsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsNEJBQTRCLEtBQUssUUFBUSxLQUFLLENBQUMsTUFBTSxhQUFhLENBQUMsQ0FBQztRQUUxRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDMUIsbUZBQW1GO1lBQ25GLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUM7WUFFOUMsTUFBTSxZQUFZLEdBQThCO2dCQUM5QyxVQUFVLEVBQUUsSUFBSTtnQkFDaEIsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFdBQVcsRUFBRSxJQUFJO2FBQ2xCLENBQUM7WUFDRixNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDO1lBRS9DLFNBQVMsQ0FBQyxJQUFJLENBQ1osTUFBTSxJQUFJLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQ2xELGtCQUFrQixJQUFJLENBQUMsSUFBSSxJQUFJLEVBQy9CLHdDQUF3QyxJQUFJLENBQUMsSUFBSSxPQUFPLEVBQ3hELGdEQUFnRCxJQUFJLENBQUMsSUFBSSxTQUFTLENBQ25FLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlYXJjaCBmb3IgY29udGVudCBpbiB0aGUgY29sbGVjdGlvblxuICovXG5cbmltcG9ydCB7IEdpdEh1YkNsaWVudCB9IGZyb20gJy4vR2l0SHViQ2xpZW50LmpzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25TZWFyY2gge1xuICBwcml2YXRlIGdpdGh1YkNsaWVudDogR2l0SHViQ2xpZW50O1xuICBwcml2YXRlIHNlYXJjaEJhc2VVcmwgPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9zZWFyY2gvY29kZSc7XG4gIFxuICBjb25zdHJ1Y3RvcihnaXRodWJDbGllbnQ6IEdpdEh1YkNsaWVudCkge1xuICAgIHRoaXMuZ2l0aHViQ2xpZW50ID0gZ2l0aHViQ2xpZW50O1xuICB9XG4gIFxuICAvKipcbiAgICogU2VhcmNoIGNvbGxlY3Rpb24gZm9yIGNvbnRlbnQgbWF0Y2hpbmcgcXVlcnlcbiAgICovXG4gIGFzeW5jIHNlYXJjaENvbGxlY3Rpb24ocXVlcnk6IHN0cmluZyk6IFByb21pc2U8YW55W10+IHtcbiAgICBjb25zdCBzZWFyY2hVcmwgPSBgJHt0aGlzLnNlYXJjaEJhc2VVcmx9P3E9JHtlbmNvZGVVUklDb21wb25lbnQocXVlcnkpfStyZXBvOkRvbGxob3VzZU1DUC9jb2xsZWN0aW9uK3BhdGg6bGlicmFyeStleHRlbnNpb246bWRgO1xuICAgIFxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdpdGh1YkNsaWVudC5mZXRjaEZyb21HaXRIdWIoc2VhcmNoVXJsKTtcbiAgICBcbiAgICBpZiAoIWRhdGEuaXRlbXMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGRhdGEuaXRlbXM7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGb3JtYXQgc2VhcmNoIHJlc3VsdHNcbiAgICovXG4gIGZvcm1hdFNlYXJjaFJlc3VsdHMoaXRlbXM6IGFueVtdLCBxdWVyeTogc3RyaW5nLCBwZXJzb25hSW5kaWNhdG9yOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGAke3BlcnNvbmFJbmRpY2F0b3J98J+UjSBObyBjb250ZW50IGZvdW5kIGZvciBxdWVyeTogXCIke3F1ZXJ5fVwiYDtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgdGV4dFBhcnRzID0gW2Ake3BlcnNvbmFJbmRpY2F0b3J98J+UjSAqKlNlYXJjaCBSZXN1bHRzIGZvciBcIiR7cXVlcnl9XCIqKiAoJHtpdGVtcy5sZW5ndGh9IGZvdW5kKVxcblxcbmBdO1xuICAgIFxuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgLy8gRXh0cmFjdCBjb250ZW50IHR5cGUgZnJvbSBwYXRoIChsaWJyYXJ5L3BlcnNvbmFzL2NyZWF0aXZlL3dyaXRlci5tZCAtPiBwZXJzb25hcylcbiAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IGl0ZW0ucGF0aC5zcGxpdCgnLycpO1xuICAgICAgY29uc3QgY29udGVudFR5cGUgPSBwYXRoUGFydHNbMV0gfHwgJ2NvbnRlbnQnO1xuICAgICAgXG4gICAgICBjb25zdCBjb250ZW50SWNvbnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICdwZXJzb25hcyc6ICfwn46tJyxcbiAgICAgICAgJ3NraWxscyc6ICfwn5ug77iPJyxcbiAgICAgICAgJ2FnZW50cyc6ICfwn6SWJyxcbiAgICAgICAgJ3Byb21wdHMnOiAn8J+SrCcsXG4gICAgICAgICd0ZW1wbGF0ZXMnOiAn8J+ThCcsXG4gICAgICAgICd0b29scyc6ICfwn5SnJyxcbiAgICAgICAgJ2Vuc2VtYmxlcyc6ICfwn468J1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGljb24gPSBjb250ZW50SWNvbnNbY29udGVudFR5cGVdIHx8ICfwn5OEJztcbiAgICAgIFxuICAgICAgdGV4dFBhcnRzLnB1c2goXG4gICAgICAgIGAgICAke2ljb259ICoqJHtpdGVtLm5hbWUucmVwbGFjZSgnLm1kJywgJycpfSoqXFxuYCxcbiAgICAgICAgYCAgICAgIPCfk4IgUGF0aDogJHtpdGVtLnBhdGh9XFxuYCxcbiAgICAgICAgYCAgICAgIPCfk6UgSW5zdGFsbDogXFxgaW5zdGFsbF9jb250ZW50IFwiJHtpdGVtLnBhdGh9XCJcXGBcXG5gLFxuICAgICAgICBgICAgICAg8J+Rge+4jyBEZXRhaWxzOiBcXGBnZXRfY29sbGVjdGlvbl9jb250ZW50IFwiJHtpdGVtLnBhdGh9XCJcXGBcXG5cXG5gXG4gICAgICApO1xuICAgIH0pO1xuICAgIFxuICAgIHJldHVybiB0ZXh0UGFydHMuam9pbignJyk7XG4gIH1cbn0iXX0=
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvblNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL0NvbGxlY3Rpb25TZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFHSCxPQUFPLEVBQUUsZUFBZSxFQUFrQixNQUFNLDZCQUE2QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRixNQUFNLE9BQU8sZ0JBQWdCO0lBQ25CLFlBQVksQ0FBZTtJQUMzQixlQUFlLENBQWtCO0lBQ2pDLGFBQWEsR0FBRyxvQ0FBb0MsQ0FBQztJQUU3RCxZQUFZLFlBQTBCLEVBQUUsZUFBaUM7UUFDdkUsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLElBQUksSUFBSSxlQUFlLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQWE7UUFDbEMscUNBQXFDO1FBQ3JDLElBQUksQ0FBQztZQUNILG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMseUJBQXlCLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDOUMsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsZ0RBQWdEO1lBQ2hELE1BQU0sU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMseURBQXlELENBQUM7WUFDaEksTUFB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QUksQ0FBQyxJQUFJLElBQUksRUFDL0Isd0NBQXdDLElBQUksQ0FBQyxJQUFJLE9BQU8sRUFDeEQsZ0RBQWdELElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FDbkUsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2VhcmNoIGZvciBjb250ZW50IGluIHRoZSBjb2xsZWN0aW9uXG4gKi9cblxuaW1wb3J0IHsgR2l0SHViQ2xpZW50IH0gZnJvbSAnLi9HaXRIdWJDbGllbnQuanMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uSXRlbSB9IGZyb20gJy4uL2NhY2hlL0NvbGxlY3Rpb25DYWNoZS5qcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uU2VlZGVyIH0gZnJvbSAnLi9Db2xsZWN0aW9uU2VlZGVyLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBub3JtYWxpemVTZWFyY2hUZXJtLCB2YWxpZGF0ZVNlYXJjaFF1ZXJ5IH0gZnJvbSAnLi4vdXRpbHMvc2VhcmNoVXRpbHMuanMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblNlYXJjaCB7XG4gIHByaXZhdGUgZ2l0aHViQ2xpZW50OiBHaXRIdWJDbGllbnQ7XG4gIHByaXZhdGUgY29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGU7XG4gIHByaXZhdGUgc2VhcmNoQmFzZVVybCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3NlYXJjaC9jb2RlJztcbiAgXG4gIGNvbnN0cnVjdG9yKGdpdGh1YkNsaWVudDogR2l0SHViQ2xpZW50LCBjb2xsZWN0aW9uQ2FjaGU/OiBDb2xsZWN0aW9uQ2FjaGUpIHtcbiAgICB0aGlzLmdpdGh1YkNsaWVudCA9IGdpdGh1YkNsaWVudDtcbiAgICB0aGlzLmNvbGxlY3Rpb25DYWNoZSA9IGNvbGxlY3Rpb25DYWNoZSB8fCBuZXcgQ29sbGVjdGlvbkNhY2hlKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTZWFyY2ggY29sbGVjdGlvbiBmb3IgY29udGVudCBtYXRjaGluZyBxdWVyeVxuICAgKiBGYWxscyBiYWNrIHRvIGNhY2hlZCBkYXRhIHdoZW4gR2l0SHViIEFQSSBpcyBub3QgYXZhaWxhYmxlIG9yIG5vdCBhdXRoZW50aWNhdGVkXG4gICAqL1xuICBhc3luYyBzZWFyY2hDb2xsZWN0aW9uKHF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgLy8gVmFsaWRhdGUgc2VhcmNoIHF1ZXJ5IGZvciBzZWN1cml0eVxuICAgIHRyeSB7XG4gICAgICB2YWxpZGF0ZVNlYXJjaFF1ZXJ5KHF1ZXJ5LCAxMDAwKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oYEludmFsaWQgc2VhcmNoIHF1ZXJ5OiAke2Vycm9yfWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gRmlyc3QsIHRyeSBHaXRIdWIgQVBJIHNlYXJjaCBpZiBhdXRoZW50aWNhdGVkXG4gICAgICBjb25zdCBzZWFyY2hVcmwgPSBgJHt0aGlzLnNlYXJjaEJhc2VVcmx9P3E9JHtlbmNvZGVVUklDb21wb25lbnQocXVlcnkpfStyZXBvOkRvbGxob3VzZU1DUC9jb2xsZWN0aW9uK3BhdGg6bGlicmFyeStleHRlbnNpb246bWRgO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZ2l0aHViQ2xpZW50LmZldGNoRnJvbUdpdEh1YihzZWFyY2hVcmwsIGZhbHNlKTsgLy8gRG9uJ3QgcmVxdWlyZSBhdXRoIGZvciBzZWFyY2hcbiAgICAgIFxuICAgICAgaWYgKGRhdGEuaXRlbXMgJiYgQXJyYXkuaXNBcnJheShkYXRhLml0ZW1zKSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYEZvdW5kICR7ZGF0YS5pdGVtcy5sZW5ndGh9IGl0ZW1zIHZpYSBHaXRIdWIgQVBJIHNlYXJjaGApO1xuICAgICAgICBcbiAgICAgICAgLy8gVXBkYXRlIGNhY2hlIHdpdGggZnJlc2ggZGF0YSBmcm9tIEFQSVxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNhY2hlRnJvbUdpdEh1Ykl0ZW1zKGRhdGEuaXRlbXMpO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIGRhdGEuaXRlbXM7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiBbXTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBHaXRIdWIgQVBJIHNlYXJjaCBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBjYWNoZTogJHtlcnJvcn1gKTtcbiAgICAgIFxuICAgICAgLy8gRmFsbGJhY2sgdG8gY2FjaGVkIHNlYXJjaFxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoRnJvbUNhY2hlKHF1ZXJ5KTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTZWFyY2ggY2FjaGVkIGNvbGxlY3Rpb24gaXRlbXNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2VhcmNoRnJvbUNhY2hlKHF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyeSB0byBsb2FkIGZyb20gY2FjaGUgZmlyc3RcbiAgICAgIGNvbnN0IGNhY2hlZEl0ZW1zID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uQ2FjaGUuc2VhcmNoQ2FjaGUocXVlcnkpO1xuICAgICAgXG4gICAgICBpZiAoY2FjaGVkSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYEZvdW5kICR7Y2FjaGVkSXRlbXMubGVuZ3RofSBpdGVtcyBmcm9tIGNhY2hlYCk7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRDYWNoZUl0ZW1zVG9HaXRIdWJGb3JtYXQoY2FjaGVkSXRlbXMpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBJZiBjYWNoZSBpcyBlbXB0eSBvciBubyByZXN1bHRzLCB1c2Ugc2VlZCBkYXRhXG4gICAgICBjb25zdCBzZWVkSXRlbXMgPSB0aGlzLnNlYXJjaFNlZWREYXRhKHF1ZXJ5KTtcbiAgICAgIGlmIChzZWVkSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYEZvdW5kICR7c2VlZEl0ZW1zLmxlbmd0aH0gaXRlbXMgZnJvbSBzZWVkIGRhdGFgKTtcbiAgICAgICAgLy8gU2F2ZSBzZWVkIGRhdGEgdG8gY2FjaGUgZm9yIGZ1dHVyZSB1c2VcbiAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uQ2FjaGUuc2F2ZUNhY2hlKENvbGxlY3Rpb25TZWVkZXIuZ2V0U2VlZERhdGEoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRDYWNoZUl0ZW1zVG9HaXRIdWJGb3JtYXQoc2VlZEl0ZW1zKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKCdObyBpdGVtcyBmb3VuZCBpbiBjYWNoZSBvciBzZWVkIGRhdGEnKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBDYWNoZSBzZWFyY2ggZmFpbGVkOiAke2Vycm9yfWApO1xuICAgICAgXG4gICAgICAvLyBMYXN0IHJlc29ydDogc2VhcmNoIHNlZWQgZGF0YSB3aXRob3V0IGNhY2hlXG4gICAgICBjb25zdCBzZWVkSXRlbXMgPSB0aGlzLnNlYXJjaFNlZWREYXRhKHF1ZXJ5KTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgRmFsbGJhY2sgdG8gc2VlZCBkYXRhIGZvdW5kICR7c2VlZEl0ZW1zLmxlbmd0aH0gaXRlbXNgKTtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRDYWNoZUl0ZW1zVG9HaXRIdWJGb3JtYXQoc2VlZEl0ZW1zKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTZWFyY2ggc2VlZCBkYXRhIGZvciBtYXRjaGluZyBpdGVtcyB3aXRoIGZ1enp5IG1hdGNoaW5nXG4gICAqL1xuICBwcml2YXRlIHNlYXJjaFNlZWREYXRhKHF1ZXJ5OiBzdHJpbmcpOiBDb2xsZWN0aW9uSXRlbVtdIHtcbiAgICBjb25zdCBzZWVkRGF0YSA9IENvbGxlY3Rpb25TZWVkZXIuZ2V0U2VlZERhdGEoKTtcbiAgICBjb25zdCBub3JtYWxpemVkUXVlcnkgPSBub3JtYWxpemVTZWFyY2hUZXJtKHF1ZXJ5KTtcbiAgICBcbiAgICByZXR1cm4gc2VlZERhdGEuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemVTZWFyY2hUZXJtKGl0ZW0ubmFtZSk7XG4gICAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZVNlYXJjaFRlcm0oaXRlbS5wYXRoKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIG5vcm1hbGl6ZWROYW1lLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSkgfHwgXG4gICAgICAgICAgICAgbm9ybWFsaXplZFBhdGguaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KTtcbiAgICB9KTtcbiAgfVxuICBcbiAgXG4gIC8qKlxuICAgKiBDb252ZXJ0IGNhY2hlIGl0ZW1zIHRvIEdpdEh1YiBBUEkgZm9ybWF0IGZvciBjb25zaXN0ZW50IHJlc3BvbnNlIHN0cnVjdHVyZVxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0Q2FjaGVJdGVtc1RvR2l0SHViRm9ybWF0KGNhY2hlSXRlbXM6IENvbGxlY3Rpb25JdGVtW10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGNhY2hlSXRlbXMubWFwKGl0ZW0gPT4gKHtcbiAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgIHBhdGg6IGl0ZW0ucGF0aCxcbiAgICAgIHNoYTogaXRlbS5zaGEsXG4gICAgICB1cmw6IGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL0RvbGxob3VzZU1DUC9jb2xsZWN0aW9uL2NvbnRlbnRzLyR7aXRlbS5wYXRofWAsXG4gICAgICBodG1sX3VybDogYGh0dHBzOi8vZ2l0aHViLmNvbS9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9ibG9iL21haW4vJHtpdGVtLnBhdGh9YCxcbiAgICAgIHJlcG9zaXRvcnk6IHtcbiAgICAgICAgbmFtZTogJ2NvbGxlY3Rpb24nLFxuICAgICAgICBmdWxsX25hbWU6ICdEb2xsaG91c2VNQ1AvY29sbGVjdGlvbidcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBVcGRhdGUgY2FjaGUgd2l0aCBmcmVzaCBkYXRhIGZyb20gR2l0SHViIEFQSSBpdGVtc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVDYWNoZUZyb21HaXRIdWJJdGVtcyhnaXRodWJJdGVtczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2FjaGVJdGVtczogQ29sbGVjdGlvbkl0ZW1bXSA9IGdpdGh1Ykl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgcGF0aDogaXRlbS5wYXRoLFxuICAgICAgICBzaGE6IGl0ZW0uc2hhLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0pKTtcbiAgICAgIFxuICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uQ2FjaGUuc2F2ZUNhY2hlKGNhY2hlSXRlbXMpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBVcGRhdGVkIGNhY2hlIHdpdGggJHtjYWNoZUl0ZW1zLmxlbmd0aH0gaXRlbXMgZnJvbSBHaXRIdWIgQVBJYCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgRmFpbGVkIHRvIHVwZGF0ZSBjYWNoZTogJHtlcnJvcn1gKTtcbiAgICAgIC8vIERvbid0IHRocm93IC0gY2FjaGUgdXBkYXRlIGZhaWx1cmVzIHNob3VsZG4ndCBicmVhayBmdW5jdGlvbmFsaXR5XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogRm9ybWF0IHNlYXJjaCByZXN1bHRzXG4gICAqL1xuICBmb3JtYXRTZWFyY2hSZXN1bHRzKGl0ZW1zOiBhbnlbXSwgcXVlcnk6IHN0cmluZywgcGVyc29uYUluZGljYXRvcjogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBgJHtwZXJzb25hSW5kaWNhdG9yffCflI0gTm8gY29udGVudCBmb3VuZCBmb3IgcXVlcnk6IFwiJHtxdWVyeX1cImA7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHRleHRQYXJ0cyA9IFtgJHtwZXJzb25hSW5kaWNhdG9yffCflI0gKipTZWFyY2ggUmVzdWx0cyBmb3IgXCIke3F1ZXJ5fVwiKiogKCR7aXRlbXMubGVuZ3RofSBmb3VuZClcXG5cXG5gXTtcbiAgICBcbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICAgIC8vIEV4dHJhY3QgY29udGVudCB0eXBlIGZyb20gcGF0aCAobGlicmFyeS9wZXJzb25hcy9jcmVhdGl2ZS93cml0ZXIubWQgLT4gcGVyc29uYXMpXG4gICAgICBjb25zdCBwYXRoUGFydHMgPSBpdGVtLnBhdGguc3BsaXQoJy8nKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGF0aFBhcnRzWzFdIHx8ICdjb250ZW50JztcbiAgICAgIFxuICAgICAgY29uc3QgY29udGVudEljb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAncGVyc29uYXMnOiAn8J+OrScsXG4gICAgICAgICdza2lsbHMnOiAn8J+boO+4jycsXG4gICAgICAgICdhZ2VudHMnOiAn8J+klicsXG4gICAgICAgICdwcm9tcHRzJzogJ/CfkqwnLFxuICAgICAgICAndGVtcGxhdGVzJzogJ/Cfk4QnLFxuICAgICAgICAndG9vbHMnOiAn8J+UpycsXG4gICAgICAgICdlbnNlbWJsZXMnOiAn8J+OvCdcbiAgICAgIH07XG4gICAgICBjb25zdCBpY29uID0gY29udGVudEljb25zW2NvbnRlbnRUeXBlXSB8fCAn8J+ThCc7XG4gICAgICBcbiAgICAgIHRleHRQYXJ0cy5wdXNoKFxuICAgICAgICBgICAgJHtpY29ufSAqKiR7aXRlbS5uYW1lLnJlcGxhY2UoJy5tZCcsICcnKX0qKlxcbmAsXG4gICAgICAgIGAgICAgICDwn5OCIFBhdGg6ICR7aXRlbS5wYXRofVxcbmAsXG4gICAgICAgIGAgICAgICDwn5OlIEluc3RhbGw6IFxcYGluc3RhbGxfY29udGVudCBcIiR7aXRlbS5wYXRofVwiXFxgXFxuYCxcbiAgICAgICAgYCAgICAgIPCfkYHvuI8gRGV0YWlsczogXFxgZ2V0X2NvbGxlY3Rpb25fY29udGVudCBcIiR7aXRlbS5wYXRofVwiXFxgXFxuXFxuYFxuICAgICAgKTtcbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gdGV4dFBhcnRzLmpvaW4oJycpO1xuICB9XG59Il19
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collection seeder for anonymous/offline browsing
|
|
3
|
+
* Provides basic collection data that doesn't require GitHub authentication
|
|
4
|
+
*/
|
|
5
|
+
import { CollectionItem } from '../cache/CollectionCache.js';
|
|
6
|
+
/**
|
|
7
|
+
* Basic collection data that can be used without GitHub API access
|
|
8
|
+
* This provides a minimal set of well-known collection items
|
|
9
|
+
*/
|
|
10
|
+
export declare class CollectionSeeder {
|
|
11
|
+
private static cachedSeedData;
|
|
12
|
+
/**
|
|
13
|
+
* Get seed data for the collection cache
|
|
14
|
+
* This includes popular/essential items that are commonly requested
|
|
15
|
+
* Data is cached as a static property to avoid recreation on every call
|
|
16
|
+
*/
|
|
17
|
+
static getSeedData(): CollectionItem[];
|
|
18
|
+
/**
|
|
19
|
+
* Get collection statistics from seed data
|
|
20
|
+
*/
|
|
21
|
+
static getSeedStats(): {
|
|
22
|
+
total: number;
|
|
23
|
+
byType: {
|
|
24
|
+
[k: string]: number;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Check if an item is available in seed data
|
|
29
|
+
*/
|
|
30
|
+
static isItemInSeedData(path: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Get seed item by path
|
|
33
|
+
*/
|
|
34
|
+
static getSeedItem(path: string): CollectionItem | undefined;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=CollectionSeeder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollectionSeeder.d.ts","sourceRoot":"","sources":["../../src/collection/CollectionSeeder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D;;;GAGG;AACH,qBAAa,gBAAgB;IAE3B,OAAO,CAAC,MAAM,CAAC,cAAc,CAAiC;IAE9D;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,cAAc,EAAE;IA8LtC;;OAEG;IACH,MAAM,CAAC,YAAY;;;;;;IAiBnB;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9C;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;CAG7D"}
|