@dollhousemcp/mcp-server 1.5.2 → 1.6.0
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 +56 -0
- package/README.md +494 -111
- package/data/agents/code-reviewer.md +8 -1
- package/data/agents/research-assistant.md +8 -1
- package/data/agents/task-manager.md +8 -1
- package/data/ensembles/business-advisor.md +8 -1
- package/data/ensembles/creative-studio.md +8 -1
- package/data/ensembles/development-team.md +8 -1
- package/data/ensembles/security-analysis-team.md +8 -1
- package/data/memories/conversation-history.md +8 -1
- package/data/memories/learning-progress.md +8 -1
- package/data/memories/project-context.md +8 -1
- package/data/personas/business-consultant.md +8 -1
- package/data/personas/creative-writer.md +8 -1
- package/data/personas/debug-detective.md +8 -1
- package/data/personas/eli5-explainer.md +8 -1
- package/data/personas/security-analyst.md +8 -1
- package/data/personas/technical-analyst.md +8 -1
- package/data/skills/code-review.md +8 -1
- package/data/skills/creative-writing.md +8 -1
- package/data/skills/data-analysis.md +8 -1
- package/data/skills/penetration-testing.md +8 -1
- package/data/skills/research.md +8 -1
- package/data/skills/threat-modeling.md +8 -1
- package/data/skills/translation.md +8 -1
- package/data/templates/code-documentation.md +8 -1
- package/data/templates/email-professional.md +8 -1
- package/data/templates/meeting-notes.md +8 -1
- package/data/templates/penetration-test-report.md +8 -1
- package/data/templates/project-brief.md +8 -1
- package/data/templates/report-executive.md +8 -1
- package/data/templates/security-vulnerability-report.md +8 -1
- package/data/templates/threat-assessment-report.md +8 -1
- package/dist/auth/GitHubAuthManager.d.ts +6 -1
- package/dist/auth/GitHubAuthManager.d.ts.map +1 -1
- package/dist/auth/GitHubAuthManager.js +45 -18
- package/dist/benchmarks/IndexPerformanceBenchmark.d.ts +98 -0
- package/dist/benchmarks/IndexPerformanceBenchmark.d.ts.map +1 -0
- package/dist/benchmarks/IndexPerformanceBenchmark.js +531 -0
- package/dist/cache/CollectionCache.d.ts.map +1 -1
- package/dist/cache/CollectionCache.js +13 -3
- package/dist/cache/CollectionIndexCache.d.ts +77 -0
- package/dist/cache/CollectionIndexCache.d.ts.map +1 -0
- package/dist/cache/CollectionIndexCache.js +349 -0
- package/dist/cache/LRUCache.d.ts +93 -0
- package/dist/cache/LRUCache.d.ts.map +1 -0
- package/dist/cache/LRUCache.js +299 -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 +21 -1
- package/dist/collection/CollectionBrowser.d.ts.map +1 -1
- package/dist/collection/CollectionBrowser.js +130 -10
- package/dist/collection/CollectionIndexManager.d.ts +151 -0
- package/dist/collection/CollectionIndexManager.d.ts.map +1 -0
- package/dist/collection/CollectionIndexManager.js +499 -0
- package/dist/collection/CollectionSearch.d.ts +55 -0
- package/dist/collection/CollectionSearch.d.ts.map +1 -1
- package/dist/collection/CollectionSearch.js +338 -13
- package/dist/collection/CollectionSeeder.d.ts.map +1 -1
- package/dist/collection/CollectionSeeder.js +38 -1
- package/dist/collection/ElementInstaller.d.ts +31 -0
- package/dist/collection/ElementInstaller.d.ts.map +1 -1
- package/dist/collection/ElementInstaller.js +77 -15
- package/dist/collection/PersonaSubmitter.d.ts +1 -1
- package/dist/collection/PersonaSubmitter.d.ts.map +1 -1
- package/dist/collection/PersonaSubmitter.js +2 -2
- 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/config/ConfigManager.d.ts +78 -0
- package/dist/config/ConfigManager.d.ts.map +1 -0
- package/dist/config/ConfigManager.js +216 -0
- package/dist/config/element-types.d.ts +135 -0
- package/dist/config/element-types.d.ts.map +1 -0
- package/dist/config/element-types.js +108 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +3 -1
- package/dist/config/portfolio-constants.d.ts +83 -0
- package/dist/config/portfolio-constants.d.ts.map +1 -0
- package/dist/config/portfolio-constants.js +99 -0
- package/dist/elements/BaseElement.d.ts +14 -2
- package/dist/elements/BaseElement.d.ts.map +1 -1
- package/dist/elements/BaseElement.js +88 -6
- package/dist/elements/agents/Agent.d.ts +10 -1
- package/dist/elements/agents/Agent.d.ts.map +1 -1
- package/dist/elements/agents/Agent.js +66 -19
- package/dist/elements/agents/AgentManager.d.ts +2 -0
- package/dist/elements/agents/AgentManager.d.ts.map +1 -1
- package/dist/elements/agents/AgentManager.js +12 -10
- package/dist/elements/skills/Skill.d.ts +10 -1
- package/dist/elements/skills/Skill.d.ts.map +1 -1
- package/dist/elements/skills/Skill.js +40 -3
- package/dist/elements/skills/SkillManager.d.ts +1 -0
- package/dist/elements/skills/SkillManager.d.ts.map +1 -1
- package/dist/elements/skills/SkillManager.js +10 -4
- package/dist/elements/templates/Template.d.ts +10 -1
- package/dist/elements/templates/Template.d.ts.map +1 -1
- package/dist/elements/templates/Template.js +35 -18
- package/dist/elements/templates/TemplateManager.d.ts +1 -1
- package/dist/elements/templates/TemplateManager.d.ts.map +1 -1
- package/dist/elements/templates/TemplateManager.js +6 -5
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/index.barrel.d.ts +1 -2
- package/dist/index.barrel.d.ts.map +1 -1
- package/dist/index.barrel.js +2 -4
- package/dist/index.d.ts +143 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1883 -310
- package/dist/persona/PersonaElement.d.ts +10 -0
- package/dist/persona/PersonaElement.d.ts.map +1 -1
- package/dist/persona/PersonaElement.js +55 -32
- package/dist/persona/PersonaElementManager.d.ts.map +1 -1
- package/dist/persona/PersonaElementManager.js +13 -11
- package/dist/persona/PersonaLoader.d.ts.map +1 -1
- package/dist/persona/PersonaLoader.js +8 -2
- package/dist/persona/export-import/PersonaImporter.d.ts.map +1 -1
- package/dist/persona/export-import/PersonaImporter.js +24 -5
- package/dist/persona/export-import/PersonaSharer.d.ts +21 -0
- package/dist/persona/export-import/PersonaSharer.d.ts.map +1 -1
- package/dist/persona/export-import/PersonaSharer.js +198 -22
- package/dist/portfolio/DefaultElementProvider.d.ts +90 -0
- package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
- package/dist/portfolio/DefaultElementProvider.js +499 -7
- package/dist/portfolio/GitHubPortfolioIndexer.d.ts +129 -0
- package/dist/portfolio/GitHubPortfolioIndexer.d.ts.map +1 -0
- package/dist/portfolio/GitHubPortfolioIndexer.js +475 -0
- package/dist/portfolio/MigrationManager.d.ts.map +1 -1
- package/dist/portfolio/MigrationManager.js +136 -3
- package/dist/portfolio/PortfolioIndexManager.d.ts +130 -0
- package/dist/portfolio/PortfolioIndexManager.d.ts.map +1 -0
- package/dist/portfolio/PortfolioIndexManager.js +478 -0
- package/dist/portfolio/PortfolioManager.d.ts +5 -0
- package/dist/portfolio/PortfolioManager.d.ts.map +1 -1
- package/dist/portfolio/PortfolioManager.js +61 -20
- package/dist/portfolio/PortfolioRepoManager.d.ts +75 -0
- package/dist/portfolio/PortfolioRepoManager.d.ts.map +1 -0
- package/dist/portfolio/PortfolioRepoManager.js +337 -0
- package/dist/portfolio/UnifiedIndexManager.d.ts +388 -0
- package/dist/portfolio/UnifiedIndexManager.d.ts.map +1 -0
- package/dist/portfolio/UnifiedIndexManager.js +1434 -0
- package/dist/portfolio/index.d.ts +15 -0
- package/dist/portfolio/index.d.ts.map +1 -0
- package/dist/portfolio/index.js +15 -0
- package/dist/portfolio/types.d.ts +7 -0
- package/dist/portfolio/types.d.ts.map +1 -1
- package/dist/portfolio/types.js +6 -1
- package/dist/security/InputValidator.d.ts.map +1 -1
- package/dist/security/InputValidator.js +50 -48
- package/dist/security/audit/SecurityAuditor.d.ts.map +1 -1
- package/dist/security/audit/SecurityAuditor.js +17 -9
- package/dist/security/audit/config/suppressions.d.ts.map +1 -1
- package/dist/security/audit/config/suppressions.js +19 -3
- package/dist/security/contentValidator.d.ts +2 -0
- package/dist/security/contentValidator.d.ts.map +1 -1
- package/dist/security/contentValidator.js +115 -4
- package/dist/security/secureYamlParser.d.ts +1 -0
- package/dist/security/secureYamlParser.d.ts.map +1 -1
- package/dist/security/secureYamlParser.js +29 -7
- package/dist/security/securityMonitor.d.ts +1 -1
- package/dist/security/securityMonitor.d.ts.map +1 -1
- package/dist/security/securityMonitor.js +1 -1
- package/dist/security/tokenManager.d.ts +1 -1
- package/dist/security/tokenManager.d.ts.map +1 -1
- package/dist/security/tokenManager.js +30 -10
- package/dist/server/ServerSetup.d.ts +22 -2
- package/dist/server/ServerSetup.d.ts.map +1 -1
- package/dist/server/ServerSetup.js +77 -12
- package/dist/server/tools/AuthTools.d.ts.map +1 -1
- package/dist/server/tools/AuthTools.js +33 -1
- package/dist/server/tools/BuildInfoTools.d.ts +25 -0
- package/dist/server/tools/BuildInfoTools.d.ts.map +1 -0
- package/dist/server/tools/BuildInfoTools.js +36 -0
- package/dist/server/tools/CollectionTools.d.ts.map +1 -1
- package/dist/server/tools/CollectionTools.js +55 -46
- package/dist/server/tools/ConfigTools.d.ts.map +1 -1
- package/dist/server/tools/ConfigTools.js +29 -1
- package/dist/server/tools/PersonaTools.d.ts +4 -2
- package/dist/server/tools/PersonaTools.d.ts.map +1 -1
- package/dist/server/tools/PersonaTools.js +5 -152
- package/dist/server/tools/PortfolioTools.d.ts +12 -0
- package/dist/server/tools/PortfolioTools.d.ts.map +1 -0
- package/dist/server/tools/PortfolioTools.js +221 -0
- package/dist/server/tools/index.d.ts +3 -1
- package/dist/server/tools/index.d.ts.map +1 -1
- package/dist/server/tools/index.js +4 -2
- package/dist/server/types.d.ts +40 -5
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +1 -1
- package/dist/services/BuildInfoService.d.ts +84 -0
- package/dist/services/BuildInfoService.d.ts.map +1 -0
- package/dist/services/BuildInfoService.js +271 -0
- package/dist/tools/portfolio/PortfolioElementAdapter.d.ts +54 -0
- package/dist/tools/portfolio/PortfolioElementAdapter.d.ts.map +1 -0
- package/dist/tools/portfolio/PortfolioElementAdapter.js +229 -0
- package/dist/tools/portfolio/submitToPortfolioTool.d.ts +164 -0
- package/dist/tools/portfolio/submitToPortfolioTool.d.ts.map +1 -0
- package/dist/tools/portfolio/submitToPortfolioTool.js +1523 -0
- package/dist/tools/portfolio/types.d.ts +41 -0
- package/dist/tools/portfolio/types.d.ts.map +1 -0
- package/dist/tools/portfolio/types.js +15 -0
- package/dist/types/collection.d.ts +51 -0
- package/dist/types/collection.d.ts.map +1 -1
- package/dist/types/collection.js +1 -1
- package/dist/utils/EarlyTerminationSearch.d.ts +41 -0
- package/dist/utils/EarlyTerminationSearch.d.ts.map +1 -0
- package/dist/utils/EarlyTerminationSearch.js +164 -0
- package/dist/utils/ErrorHandler.d.ts +86 -0
- package/dist/utils/ErrorHandler.d.ts.map +1 -0
- package/dist/utils/ErrorHandler.js +201 -0
- package/dist/utils/FileDiscoveryUtil.d.ts +53 -0
- package/dist/utils/FileDiscoveryUtil.d.ts.map +1 -0
- package/dist/utils/FileDiscoveryUtil.js +169 -0
- package/dist/utils/GitHubRateLimiter.d.ts +88 -0
- package/dist/utils/GitHubRateLimiter.d.ts.map +1 -0
- package/dist/utils/GitHubRateLimiter.js +315 -0
- package/dist/utils/PerformanceMonitor.d.ts +134 -0
- package/dist/utils/PerformanceMonitor.d.ts.map +1 -0
- package/dist/utils/PerformanceMonitor.js +347 -0
- package/dist/utils/RateLimiter.d.ts.map +1 -0
- package/dist/utils/RateLimiter.js +172 -0
- package/dist/utils/SecureDownloader.d.ts +241 -0
- package/dist/utils/SecureDownloader.d.ts.map +1 -0
- package/dist/utils/SecureDownloader.js +759 -0
- package/dist/utils/ToolCache.d.ts +82 -0
- package/dist/utils/ToolCache.d.ts.map +1 -0
- package/dist/utils/ToolCache.js +196 -0
- package/dist/utils/errorCodes.d.ts +136 -0
- package/dist/utils/errorCodes.d.ts.map +1 -0
- package/dist/utils/errorCodes.js +87 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -1
- package/dist/utils/installation.d.ts +1 -1
- package/dist/utils/installation.d.ts.map +1 -1
- package/dist/utils/installation.js +9 -8
- package/dist/utils/searchUtils.d.ts +31 -0
- package/dist/utils/searchUtils.d.ts.map +1 -1
- package/dist/utils/searchUtils.js +62 -1
- package/package.json +17 -7
- package/dist/config/updateConfig.d.ts +0 -84
- package/dist/config/updateConfig.d.ts.map +0 -1
- package/dist/config/updateConfig.js +0 -148
- package/dist/server/tools/UpdateTools.d.ts +0 -10
- package/dist/server/tools/UpdateTools.d.ts.map +0 -1
- package/dist/server/tools/UpdateTools.js +0 -85
- package/dist/update/BackupManager.d.ts +0 -63
- package/dist/update/BackupManager.d.ts.map +0 -1
- package/dist/update/BackupManager.js +0 -370
- package/dist/update/DependencyChecker.d.ts +0 -41
- package/dist/update/DependencyChecker.d.ts.map +0 -1
- package/dist/update/DependencyChecker.js +0 -132
- package/dist/update/RateLimiter.d.ts.map +0 -1
- package/dist/update/RateLimiter.js +0 -172
- package/dist/update/SignatureVerifier.d.ts +0 -71
- package/dist/update/SignatureVerifier.d.ts.map +0 -1
- package/dist/update/SignatureVerifier.js +0 -214
- package/dist/update/UpdateChecker.d.ts +0 -132
- package/dist/update/UpdateChecker.d.ts.map +0 -1
- package/dist/update/UpdateChecker.js +0 -506
- package/dist/update/UpdateManager.d.ts +0 -60
- package/dist/update/UpdateManager.d.ts.map +0 -1
- package/dist/update/UpdateManager.js +0 -730
- package/dist/update/VersionManager.d.ts +0 -31
- package/dist/update/VersionManager.d.ts.map +0 -1
- package/dist/update/VersionManager.js +0 -181
- package/dist/update/index.d.ts +0 -9
- package/dist/update/index.d.ts.map +0 -1
- package/dist/update/index.js +0 -9
- /package/dist/{update → utils}/RateLimiter.d.ts +0 -0
|
@@ -6,13 +6,10 @@ import * as fs from 'fs';
|
|
|
6
6
|
import * as path from 'path';
|
|
7
7
|
import { fileURLToPath } from 'url';
|
|
8
8
|
import { logger } from './logger.js';
|
|
9
|
-
import { UpdateConfigManager } from '../config/updateConfig.js';
|
|
10
9
|
export class InstallationDetector {
|
|
11
10
|
static cachedType = null;
|
|
12
11
|
// Maximum directory levels to search upward for .git directory
|
|
13
|
-
static
|
|
14
|
-
return UpdateConfigManager.getInstance().getMaxSearchDepth();
|
|
15
|
-
}
|
|
12
|
+
static MAX_SEARCH_DEPTH = 10;
|
|
16
13
|
/**
|
|
17
14
|
* Detect the installation type (npm global, git clone, or unknown)
|
|
18
15
|
*/
|
|
@@ -36,8 +33,10 @@ export class InstallationDetector {
|
|
|
36
33
|
}
|
|
37
34
|
// Check if we're in a node_modules directory (npm installation)
|
|
38
35
|
// Use path separator to ensure we match the exact package name
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
// Normalize the path to handle both Windows and Unix separators
|
|
37
|
+
const normalizedCurrentDir = path.normalize(currentDir);
|
|
38
|
+
const npmPattern = path.normalize(path.join('node_modules', '@dollhousemcp', 'mcp-server'));
|
|
39
|
+
if (normalizedCurrentDir.includes(npmPattern)) {
|
|
41
40
|
logger.debug('[InstallationDetector] Detected npm installation');
|
|
42
41
|
this.cachedType = 'npm';
|
|
43
42
|
return 'npm';
|
|
@@ -86,7 +85,9 @@ export class InstallationDetector {
|
|
|
86
85
|
const currentFilePath = fileURLToPath(currentFileUrl);
|
|
87
86
|
let currentDir = path.dirname(currentFilePath);
|
|
88
87
|
// Find the root of the npm package
|
|
89
|
-
|
|
88
|
+
// Normalize paths to handle Windows and Unix separators
|
|
89
|
+
const npmPackagePattern = path.normalize('node_modules/@dollhousemcp/mcp-server');
|
|
90
|
+
while (path.normalize(currentDir).includes(npmPackagePattern)) {
|
|
90
91
|
const packageJsonPath = path.join(currentDir, 'package.json');
|
|
91
92
|
if (fs.existsSync(packageJsonPath)) {
|
|
92
93
|
return currentDir;
|
|
@@ -157,4 +158,4 @@ export class InstallationDetector {
|
|
|
157
158
|
this.cachedType = null;
|
|
158
159
|
}
|
|
159
160
|
}
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2luc3RhbGxhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJaEUsTUFBTSxPQUFPLG9CQUFvQjtJQUN2QixNQUFNLENBQUMsVUFBVSxHQUE0QixJQUFJLENBQUM7SUFFMUQsK0RBQStEO0lBQ3ZELE1BQU0sS0FBSyxnQkFBZ0I7UUFDakMsT0FBTyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxtQkFBbUI7UUFDeEIsb0NBQW9DO1FBQ3BDLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDekIsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILCtDQUErQztZQUMvQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUN2QyxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDdEQsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUUvQyx3Q0FBd0M7WUFDeEMsSUFBSSxDQUFDO2dCQUNILFVBQVUsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzNDLENBQUM7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Q0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzNDLElBQUksU0FBUyxLQUFLLFVBQVU7b0JBQUUsTUFBTTtnQkFDcEMsVUFBVSxHQUFHLFNBQVMsQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ25GLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQywwQkFBMEI7UUFDL0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFeEMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssS0FBSztnQkFDUixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDeEMsT0FBTyxPQUFPO29CQUNaLENBQUMsQ0FBQyw4QkFBOEIsT0FBTyxFQUFFO29CQUN6QyxDQUFDLENBQUMseUJBQXlCLENBQUM7WUFFaEMsS0FBSyxLQUFLO2dCQUNSLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM1QyxPQUFPLE9BQU87b0JBQ1osQ0FBQyxDQUFDLHVCQUF1QixPQUFPLEVBQUU7b0JBQ2xDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztZQUV6QjtnQkFDRSxPQUFPLDJCQUEyQixDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsVUFBVTtRQUNmLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluc3RhbGxhdGlvbiBkZXRlY3Rpb24gdXRpbGl0aWVzXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFwcGxpY2F0aW9uIGlzIHJ1bm5pbmcgZnJvbSBucG0gb3IgZ2l0IGluc3RhbGxhdGlvblxuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAndXJsJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCB7IFVwZGF0ZUNvbmZpZ01hbmFnZXIgfSBmcm9tICcuLi9jb25maWcvdXBkYXRlQ29uZmlnLmpzJztcblxuZXhwb3J0IHR5cGUgSW5zdGFsbGF0aW9uVHlwZSA9ICducG0nIHwgJ2dpdCcgfCAndW5rbm93bic7XG5cbmV4cG9ydCBjbGFzcyBJbnN0YWxsYXRpb25EZXRlY3RvciB7XG4gIHByaXZhdGUgc3RhdGljIGNhY2hlZFR5cGU6IEluc3RhbGxhdGlvblR5cGUgfCBudWxsID0gbnVsbDtcbiAgXG4gIC8vIE1heGltdW0gZGlyZWN0b3J5IGxldmVscyB0byBzZWFyY2ggdXB3YXJkIGZvciAuZ2l0IGRpcmVjdG9yeVxuICBwcml2YXRlIHN0YXRpYyBnZXQgTUFYX1NFQVJDSF9ERVBUSCgpOiBudW1iZXIge1xuICAgIHJldHVybiBVcGRhdGVDb25maWdNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0TWF4U2VhcmNoRGVwdGgoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIERldGVjdCB0aGUgaW5zdGFsbGF0aW9uIHR5cGUgKG5wbSBnbG9iYWwsIGdpdCBjbG9uZSwgb3IgdW5rbm93bilcbiAgICovXG4gIHN0YXRpYyBnZXRJbnN0YWxsYXRpb25UeXBlKCk6IEluc3RhbGxhdGlvblR5cGUge1xuICAgIC8vIFJldHVybiBjYWNoZWQgcmVzdWx0IGlmIGF2YWlsYWJsZVxuICAgIGlmICh0aGlzLmNhY2hlZFR5cGUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlZFR5cGU7XG4gICAgfVxuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGlzIGZpbGUgaXMgbG9jYXRlZFxuICAgICAgY29uc3QgY3VycmVudEZpbGVVcmwgPSBpbXBvcnQubWV0YS51cmw7XG4gICAgICBjb25zdCBjdXJyZW50RmlsZVBhdGggPSBmaWxlVVJMVG9QYXRoKGN1cnJlbnRGaWxlVXJsKTtcbiAgICAgIGxldCBjdXJyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnRGaWxlUGF0aCk7XG4gICAgICBcbiAgICAgIC8vIFJlc29sdmUgc3ltbGlua3MgdG8gZ2V0IHRoZSByZWFsIHBhdGhcbiAgICAgIHRyeSB7XG4gICAgICAgIGN1cnJlbnREaXIgPSBmcy5yZWFscGF0aFN5bmMoY3VycmVudERpcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiByZWFscGF0aCBmYWlscywgY29udGludWUgd2l0aCBvcmlnaW5hbCBwYXRoXG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnW0luc3RhbGxhdGlvbkRldGVjdG9yXSBDb3VsZCBub3QgcmVzb2x2ZSByZWFsIHBhdGgsIHVzaW5nIG9yaWdpbmFsJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIGluIGEgbm9kZV9tb2R1bGVzIGRpcmVjdG9yeSAobnBtIGluc3RhbGxhdGlvbilcbiAgICAgIC8vIFVzZSBwYXRoIHNlcGFyYXRvciB0byBlbnN1cmUgd2UgbWF0Y2ggdGhlIGV4YWN0IHBhY2thZ2UgbmFtZVxuICAgICAgY29uc3QgbnBtUGF0dGVybiA9IHBhdGguc2VwICsgcGF0aC5qb2luKCdub2RlX21vZHVsZXMnLCAnQGRvbGxob3VzZW1jcCcsICdtY3Atc2VydmVyJykgKyBwYXRoLnNlcDtcbiAgICAgIGlmIChjdXJyZW50RGlyLmluY2x1ZGVzKG5wbVBhdHRlcm4pKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnW0luc3RhbGxhdGlvbkRldGVjdG9yXSBEZXRlY3RlZCBucG0gaW5zdGFsbGF0aW9uJyk7XG4gICAgICAgIHRoaXMuY2FjaGVkVHlwZSA9ICducG0nO1xuICAgICAgICByZXR1cm4gJ25wbSc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGZvciAuZ2l0IGRpcmVjdG9yeSAoZ2l0IGluc3RhbGxhdGlvbilcbiAgICAgIC8vIFNlYXJjaCB1cCBmcm9tIGN1cnJlbnQgZGlyZWN0b3J5XG4gICAgICBsZXQgc2VhcmNoRGlyID0gY3VycmVudERpcjtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5NQVhfU0VBUkNIX0RFUFRIOyBpKyspIHtcbiAgICAgICAgY29uc3QgZ2l0RGlyID0gcGF0aC5qb2luKHNlYXJjaERpciwgJy5naXQnKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhnaXREaXIpICYmIGZzLnN0YXRTeW5jKGdpdERpcikuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdbSW5zdGFsbGF0aW9uRGV0ZWN0b3JdIERldGVjdGVkIGdpdCBpbnN0YWxsYXRpb24nKTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVHlwZSA9ICdnaXQnO1xuICAgICAgICAgICAgcmV0dXJuICdnaXQnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBJZ25vcmUgZXJyb3JzIGFuZCBjb250aW51ZSBzZWFyY2hpbmdcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgcGFyZW50RGlyID0gcGF0aC5kaXJuYW1lKHNlYXJjaERpcik7XG4gICAgICAgIGlmIChwYXJlbnREaXIgPT09IHNlYXJjaERpcikge1xuICAgICAgICAgIC8vIFJlYWNoZWQgcm9vdCBkaXJlY3RvcnlcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzZWFyY2hEaXIgPSBwYXJlbnREaXI7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGxvZ2dlci53YXJuKCdbSW5zdGFsbGF0aW9uRGV0ZWN0b3JdIENvdWxkIG5vdCBkZXRlcm1pbmUgaW5zdGFsbGF0aW9uIHR5cGUnKTtcbiAgICAgIHRoaXMuY2FjaGVkVHlwZSA9ICd1bmtub3duJztcbiAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignW0luc3RhbGxhdGlvbkRldGVjdG9yXSBFcnJvciBkZXRlY3RpbmcgaW5zdGFsbGF0aW9uIHR5cGU6JywgZXJyb3IpO1xuICAgICAgdGhpcy5jYWNoZWRUeXBlID0gJ3Vua25vd24nO1xuICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgdGhlIG5wbSBnbG9iYWwgaW5zdGFsbGF0aW9uIHBhdGggaWYgcnVubmluZyBmcm9tIG5wbVxuICAgKi9cbiAgc3RhdGljIGdldE5wbUdsb2JhbFBhdGgoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuZ2V0SW5zdGFsbGF0aW9uVHlwZSgpICE9PSAnbnBtJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjdXJyZW50RmlsZVVybCA9IGltcG9ydC5tZXRhLnVybDtcbiAgICAgIGNvbnN0IGN1cnJlbnRGaWxlUGF0aCA9IGZpbGVVUkxUb1BhdGgoY3VycmVudEZpbGVVcmwpO1xuICAgICAgbGV0IGN1cnJlbnREaXIgPSBwYXRoLmRpcm5hbWUoY3VycmVudEZpbGVQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gRmluZCB0aGUgcm9vdCBvZiB0aGUgbnBtIHBhY2thZ2VcbiAgICAgIHdoaWxlIChjdXJyZW50RGlyLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvQGRvbGxob3VzZW1jcC9tY3Atc2VydmVyJykpIHtcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKGN1cnJlbnREaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocGFja2FnZUpzb25QYXRoKSkge1xuICAgICAgICAgIHJldHVybiBjdXJyZW50RGlyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudERpciA9IHBhdGguZGlybmFtZShjdXJyZW50RGlyKTtcbiAgICAgICAgaWYgKHBhcmVudERpciA9PT0gY3VycmVudERpcikgYnJlYWs7XG4gICAgICAgIGN1cnJlbnREaXIgPSBwYXJlbnREaXI7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignW0luc3RhbGxhdGlvbkRldGVjdG9yXSBFcnJvciBmaW5kaW5nIG5wbSBnbG9iYWwgcGF0aDonLCBlcnJvcik7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHRoZSBnaXQgcmVwb3NpdG9yeSByb290IHBhdGggaWYgcnVubmluZyBmcm9tIGdpdFxuICAgKi9cbiAgc3RhdGljIGdldEdpdFJlcG9zaXRvcnlQYXRoKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmdldEluc3RhbGxhdGlvblR5cGUoKSAhPT0gJ2dpdCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgY3VycmVudEZpbGVVcmwgPSBpbXBvcnQubWV0YS51cmw7XG4gICAgICBjb25zdCBjdXJyZW50RmlsZVBhdGggPSBmaWxlVVJMVG9QYXRoKGN1cnJlbnRGaWxlVXJsKTtcbiAgICAgIGxldCBjdXJyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnRGaWxlUGF0aCk7XG4gICAgICBcbiAgICAgIC8vIFNlYXJjaCB1cCBmb3IgLmdpdCBkaXJlY3RvcnlcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgICBjb25zdCBnaXREaXIgPSBwYXRoLmpvaW4oY3VycmVudERpciwgJy5naXQnKTtcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZ2l0RGlyKSAmJiBmcy5zdGF0U3luYyhnaXREaXIpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICByZXR1cm4gY3VycmVudERpcjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgcGFyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpO1xuICAgICAgICBpZiAocGFyZW50RGlyID09PSBjdXJyZW50RGlyKSBicmVhaztcbiAgICAgICAgY3VycmVudERpciA9IHBhcmVudERpcjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdbSW5zdGFsbGF0aW9uRGV0ZWN0b3JdIEVycm9yIGZpbmRpbmcgZ2l0IHJlcG9zaXRvcnkgcGF0aDonLCBlcnJvcik7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGluc3RhbGxhdGlvblxuICAgKi9cbiAgc3RhdGljIGdldEluc3RhbGxhdGlvbkRlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0SW5zdGFsbGF0aW9uVHlwZSgpO1xuICAgIFxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnbnBtJzpcbiAgICAgICAgY29uc3QgbnBtUGF0aCA9IHRoaXMuZ2V0TnBtR2xvYmFsUGF0aCgpO1xuICAgICAgICByZXR1cm4gbnBtUGF0aCBcbiAgICAgICAgICA/IGBucG0gZ2xvYmFsIGluc3RhbGxhdGlvbiBhdCAke25wbVBhdGh9YFxuICAgICAgICAgIDogJ25wbSBnbG9iYWwgaW5zdGFsbGF0aW9uJztcbiAgICAgICAgICBcbiAgICAgIGNhc2UgJ2dpdCc6XG4gICAgICAgIGNvbnN0IGdpdFBhdGggPSB0aGlzLmdldEdpdFJlcG9zaXRvcnlQYXRoKCk7XG4gICAgICAgIHJldHVybiBnaXRQYXRoXG4gICAgICAgICAgPyBgZ2l0IGluc3RhbGxhdGlvbiBhdCAke2dpdFBhdGh9YFxuICAgICAgICAgIDogJ2dpdCBpbnN0YWxsYXRpb24nO1xuICAgICAgICAgIFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duIGluc3RhbGxhdGlvbiB0eXBlJztcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgY2FjaGVkIGluc3RhbGxhdGlvbiB0eXBlIChtYWlubHkgZm9yIHRlc3RpbmcpXG4gICAqL1xuICBzdGF0aWMgY2xlYXJDYWNoZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlZFR5cGUgPSBudWxsO1xuICB9XG59Il19
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2luc3RhbGxhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFJckMsTUFBTSxPQUFPLG9CQUFvQjtJQUN2QixNQUFNLENBQUMsVUFBVSxHQUE0QixJQUFJLENBQUM7SUFFMUQsK0RBQStEO0lBQ3ZELE1BQU0sQ0FBVSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFFOUM7O09BRUc7SUFDSCxNQUFNLENBQUMsbUJBQW1CO1FBQ3hCLG9DQUFvQztRQUNwQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCwrQ0FBK0M7WUFDL0MsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDdkMsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3RELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFL0Msd0NBQXdDO1lBQ3hDLElBQUksQ0FBQztnQkFDSCxVQUFVLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMzQyxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixpREFBaUQ7Z0JBQ2pELE1BQU0sQ0FBQyxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQztZQUNyRixDQUFDO1lB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O29CQUMvRCxPQUFPLFVBQVUsQ0FBQztnQkFDcEIsQ0FBQztnQkFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLFNBQVMsS0FBSyxVQUFVO29CQUFFLE1BQU07Z0JBQ3BDLFVBQVUsR0FBRyxTQUFTLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQywyREFBMkQsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNuRixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsMEJBQTBCO1FBQy9CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRXhDLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLEtBQUs7Z0JBQ1IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3hDLE9BQU8sT0FBTztvQkFDWixDQUFDLENBQUMsOEJBQThCLE9BQU8sRUFBRTtvQkFDekMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDO1lBRWhDLEtBQUssS0FBSztnQkFDUixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDNUMsT0FBTyxPQUFPO29CQUNaLENBQUMsQ0FBQyx1QkFBdUIsT0FBTyxFQUFFO29CQUNsQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7WUFFekI7Z0JBQ0UsT0FBTywyQkFBMkIsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFVBQVU7UUFDZixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJbnN0YWxsYXRpb24gZGV0ZWN0aW9uIHV0aWxpdGllc1xuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhcHBsaWNhdGlvbiBpcyBydW5uaW5nIGZyb20gbnBtIG9yIGdpdCBpbnN0YWxsYXRpb25cbiAqL1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5cbmV4cG9ydCB0eXBlIEluc3RhbGxhdGlvblR5cGUgPSAnbnBtJyB8ICdnaXQnIHwgJ3Vua25vd24nO1xuXG5leHBvcnQgY2xhc3MgSW5zdGFsbGF0aW9uRGV0ZWN0b3Ige1xuICBwcml2YXRlIHN0YXRpYyBjYWNoZWRUeXBlOiBJbnN0YWxsYXRpb25UeXBlIHwgbnVsbCA9IG51bGw7XG4gIFxuICAvLyBNYXhpbXVtIGRpcmVjdG9yeSBsZXZlbHMgdG8gc2VhcmNoIHVwd2FyZCBmb3IgLmdpdCBkaXJlY3RvcnlcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTUFYX1NFQVJDSF9ERVBUSCA9IDEwO1xuICBcbiAgLyoqXG4gICAqIERldGVjdCB0aGUgaW5zdGFsbGF0aW9uIHR5cGUgKG5wbSBnbG9iYWwsIGdpdCBjbG9uZSwgb3IgdW5rbm93bilcbiAgICovXG4gIHN0YXRpYyBnZXRJbnN0YWxsYXRpb25UeXBlKCk6IEluc3RhbGxhdGlvblR5cGUge1xuICAgIC8vIFJldHVybiBjYWNoZWQgcmVzdWx0IGlmIGF2YWlsYWJsZVxuICAgIGlmICh0aGlzLmNhY2hlZFR5cGUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlZFR5cGU7XG4gICAgfVxuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGlzIGZpbGUgaXMgbG9jYXRlZFxuICAgICAgY29uc3QgY3VycmVudEZpbGVVcmwgPSBpbXBvcnQubWV0YS51cmw7XG4gICAgICBjb25zdCBjdXJyZW50RmlsZVBhdGggPSBmaWxlVVJMVG9QYXRoKGN1cnJlbnRGaWxlVXJsKTtcbiAgICAgIGxldCBjdXJyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnRGaWxlUGF0aCk7XG4gICAgICBcbiAgICAgIC8vIFJlc29sdmUgc3ltbGlua3MgdG8gZ2V0IHRoZSByZWFsIHBhdGhcbiAgICAgIHRyeSB7XG4gICAgICAgIGN1cnJlbnREaXIgPSBmcy5yZWFscGF0aFN5bmMoY3VycmVudERpcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiByZWFscGF0aCBmYWlscywgY29udGludWUgd2l0aCBvcmlnaW5hbCBwYXRoXG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnW0luc3RhbGxhdGlvbkRldGVjdG9yXSBDb3VsZCBub3QgcmVzb2x2ZSByZWFsIHBhdGgsIHVzaW5nIG9yaWdpbmFsJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIGluIGEgbm9kZV9tb2R1bGVzIGRpcmVjdG9yeSAobnBtIGluc3RhbGxhdGlvbilcbiAgICAgIC8vIFVzZSBwYXRoIHNlcGFyYXRvciB0byBlbnN1cmUgd2UgbWF0Y2ggdGhlIGV4YWN0IHBhY2thZ2UgbmFtZVxuICAgICAgLy8gTm9ybWFsaXplIHRoZSBwYXRoIHRvIGhhbmRsZSBib3RoIFdpbmRvd3MgYW5kIFVuaXggc2VwYXJhdG9yc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEN1cnJlbnREaXIgPSBwYXRoLm5vcm1hbGl6ZShjdXJyZW50RGlyKTtcbiAgICAgIGNvbnN0IG5wbVBhdHRlcm4gPSBwYXRoLm5vcm1hbGl6ZShwYXRoLmpvaW4oJ25vZGVfbW9kdWxlcycsICdAZG9sbGhvdXNlbWNwJywgJ21jcC1zZXJ2ZXInKSk7XG4gICAgICBpZiAobm9ybWFsaXplZEN1cnJlbnREaXIuaW5jbHVkZXMobnBtUGF0dGVybikpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdbSW5zdGFsbGF0aW9uRGV0ZWN0b3JdIERldGVjdGVkIG5wbSBpbnN0YWxsYXRpb24nKTtcbiAgICAgICAgdGhpcy5jYWNoZWRUeXBlID0gJ25wbSc7XG4gICAgICAgIHJldHVybiAnbnBtJztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgZm9yIC5naXQgZGlyZWN0b3J5IChnaXQgaW5zdGFsbGF0aW9uKVxuICAgICAgLy8gU2VhcmNoIHVwIGZyb20gY3VycmVudCBkaXJlY3RvcnlcbiAgICAgIGxldCBzZWFyY2hEaXIgPSBjdXJyZW50RGlyO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLk1BWF9TRUFSQ0hfREVQVEg7IGkrKykge1xuICAgICAgICBjb25zdCBnaXREaXIgPSBwYXRoLmpvaW4oc2VhcmNoRGlyLCAnLmdpdCcpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGdpdERpcikgJiYgZnMuc3RhdFN5bmMoZ2l0RGlyKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoJ1tJbnN0YWxsYXRpb25EZXRlY3Rvcl0gRGV0ZWN0ZWQgZ2l0IGluc3RhbGxhdGlvbicpO1xuICAgICAgICAgICAgdGhpcy5jYWNoZWRUeXBlID0gJ2dpdCc7XG4gICAgICAgICAgICByZXR1cm4gJ2dpdCc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIElnbm9yZSBlcnJvcnMgYW5kIGNvbnRpbnVlIHNlYXJjaGluZ1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCBwYXJlbnREaXIgPSBwYXRoLmRpcm5hbWUoc2VhcmNoRGlyKTtcbiAgICAgICAgaWYgKHBhcmVudERpciA9PT0gc2VhcmNoRGlyKSB7XG4gICAgICAgICAgLy8gUmVhY2hlZCByb290IGRpcmVjdG9yeVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHNlYXJjaERpciA9IHBhcmVudERpcjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgbG9nZ2VyLndhcm4oJ1tJbnN0YWxsYXRpb25EZXRlY3Rvcl0gQ291bGQgbm90IGRldGVybWluZSBpbnN0YWxsYXRpb24gdHlwZScpO1xuICAgICAgdGhpcy5jYWNoZWRUeXBlID0gJ3Vua25vd24nO1xuICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdbSW5zdGFsbGF0aW9uRGV0ZWN0b3JdIEVycm9yIGRldGVjdGluZyBpbnN0YWxsYXRpb24gdHlwZTonLCBlcnJvcik7XG4gICAgICB0aGlzLmNhY2hlZFR5cGUgPSAndW5rbm93bic7XG4gICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCB0aGUgbnBtIGdsb2JhbCBpbnN0YWxsYXRpb24gcGF0aCBpZiBydW5uaW5nIGZyb20gbnBtXG4gICAqL1xuICBzdGF0aWMgZ2V0TnBtR2xvYmFsUGF0aCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5nZXRJbnN0YWxsYXRpb25UeXBlKCkgIT09ICducG0nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRGaWxlVXJsID0gaW1wb3J0Lm1ldGEudXJsO1xuICAgICAgY29uc3QgY3VycmVudEZpbGVQYXRoID0gZmlsZVVSTFRvUGF0aChjdXJyZW50RmlsZVVybCk7XG4gICAgICBsZXQgY3VycmVudERpciA9IHBhdGguZGlybmFtZShjdXJyZW50RmlsZVBhdGgpO1xuICAgICAgXG4gICAgICAvLyBGaW5kIHRoZSByb290IG9mIHRoZSBucG0gcGFja2FnZVxuICAgICAgLy8gTm9ybWFsaXplIHBhdGhzIHRvIGhhbmRsZSBXaW5kb3dzIGFuZCBVbml4IHNlcGFyYXRvcnNcbiAgICAgIGNvbnN0IG5wbVBhY2thZ2VQYXR0ZXJuID0gcGF0aC5ub3JtYWxpemUoJ25vZGVfbW9kdWxlcy9AZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInKTtcbiAgICAgIHdoaWxlIChwYXRoLm5vcm1hbGl6ZShjdXJyZW50RGlyKS5pbmNsdWRlcyhucG1QYWNrYWdlUGF0dGVybikpIHtcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKGN1cnJlbnREaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocGFja2FnZUpzb25QYXRoKSkge1xuICAgICAgICAgIHJldHVybiBjdXJyZW50RGlyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudERpciA9IHBhdGguZGlybmFtZShjdXJyZW50RGlyKTtcbiAgICAgICAgaWYgKHBhcmVudERpciA9PT0gY3VycmVudERpcikgYnJlYWs7XG4gICAgICAgIGN1cnJlbnREaXIgPSBwYXJlbnREaXI7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignW0luc3RhbGxhdGlvbkRldGVjdG9yXSBFcnJvciBmaW5kaW5nIG5wbSBnbG9iYWwgcGF0aDonLCBlcnJvcik7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHRoZSBnaXQgcmVwb3NpdG9yeSByb290IHBhdGggaWYgcnVubmluZyBmcm9tIGdpdFxuICAgKi9cbiAgc3RhdGljIGdldEdpdFJlcG9zaXRvcnlQYXRoKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmdldEluc3RhbGxhdGlvblR5cGUoKSAhPT0gJ2dpdCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgY3VycmVudEZpbGVVcmwgPSBpbXBvcnQubWV0YS51cmw7XG4gICAgICBjb25zdCBjdXJyZW50RmlsZVBhdGggPSBmaWxlVVJMVG9QYXRoKGN1cnJlbnRGaWxlVXJsKTtcbiAgICAgIGxldCBjdXJyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnRGaWxlUGF0aCk7XG4gICAgICBcbiAgICAgIC8vIFNlYXJjaCB1cCBmb3IgLmdpdCBkaXJlY3RvcnlcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgICBjb25zdCBnaXREaXIgPSBwYXRoLmpvaW4oY3VycmVudERpciwgJy5naXQnKTtcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZ2l0RGlyKSAmJiBmcy5zdGF0U3luYyhnaXREaXIpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICByZXR1cm4gY3VycmVudERpcjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgcGFyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpO1xuICAgICAgICBpZiAocGFyZW50RGlyID09PSBjdXJyZW50RGlyKSBicmVhaztcbiAgICAgICAgY3VycmVudERpciA9IHBhcmVudERpcjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdbSW5zdGFsbGF0aW9uRGV0ZWN0b3JdIEVycm9yIGZpbmRpbmcgZ2l0IHJlcG9zaXRvcnkgcGF0aDonLCBlcnJvcik7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGluc3RhbGxhdGlvblxuICAgKi9cbiAgc3RhdGljIGdldEluc3RhbGxhdGlvbkRlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0SW5zdGFsbGF0aW9uVHlwZSgpO1xuICAgIFxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnbnBtJzpcbiAgICAgICAgY29uc3QgbnBtUGF0aCA9IHRoaXMuZ2V0TnBtR2xvYmFsUGF0aCgpO1xuICAgICAgICByZXR1cm4gbnBtUGF0aCBcbiAgICAgICAgICA/IGBucG0gZ2xvYmFsIGluc3RhbGxhdGlvbiBhdCAke25wbVBhdGh9YFxuICAgICAgICAgIDogJ25wbSBnbG9iYWwgaW5zdGFsbGF0aW9uJztcbiAgICAgICAgICBcbiAgICAgIGNhc2UgJ2dpdCc6XG4gICAgICAgIGNvbnN0IGdpdFBhdGggPSB0aGlzLmdldEdpdFJlcG9zaXRvcnlQYXRoKCk7XG4gICAgICAgIHJldHVybiBnaXRQYXRoXG4gICAgICAgICAgPyBgZ2l0IGluc3RhbGxhdGlvbiBhdCAke2dpdFBhdGh9YFxuICAgICAgICAgIDogJ2dpdCBpbnN0YWxsYXRpb24nO1xuICAgICAgICAgIFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duIGluc3RhbGxhdGlvbiB0eXBlJztcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgY2FjaGVkIGluc3RhbGxhdGlvbiB0eXBlIChtYWlubHkgZm9yIHRlc3RpbmcpXG4gICAqL1xuICBzdGF0aWMgY2xlYXJDYWNoZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlZFR5cGUgPSBudWxsO1xuICB9XG59Il19
|
|
@@ -11,6 +11,25 @@
|
|
|
11
11
|
* @throws Error if term exceeds maxLength
|
|
12
12
|
*/
|
|
13
13
|
export declare function normalizeSearchTerm(term: string, maxLength?: number): string;
|
|
14
|
+
/**
|
|
15
|
+
* Preserve original structure for partial matching
|
|
16
|
+
* Less aggressive normalization that keeps original separators for partial searches
|
|
17
|
+
*
|
|
18
|
+
* @param term - The search term to normalize
|
|
19
|
+
* @param maxLength - Maximum allowed length for the search term (default: 1000)
|
|
20
|
+
* @returns Normalized search term with preserved structure
|
|
21
|
+
* @throws Error if term exceeds maxLength
|
|
22
|
+
*/
|
|
23
|
+
export declare function normalizeForPartialMatch(term: string, maxLength?: number): string;
|
|
24
|
+
/**
|
|
25
|
+
* Check if a search term matches a target string with multiple strategies
|
|
26
|
+
* Uses both normalized matching and partial matching for better results
|
|
27
|
+
*
|
|
28
|
+
* @param searchTerm - The term being searched for
|
|
29
|
+
* @param targetString - The string to search in
|
|
30
|
+
* @returns true if there's a match
|
|
31
|
+
*/
|
|
32
|
+
export declare function isSearchMatch(searchTerm: string, targetString: string): boolean;
|
|
14
33
|
/**
|
|
15
34
|
* Validate search query length and content
|
|
16
35
|
*
|
|
@@ -20,4 +39,16 @@ export declare function normalizeSearchTerm(term: string, maxLength?: number): s
|
|
|
20
39
|
* @throws Error with descriptive message if invalid
|
|
21
40
|
*/
|
|
22
41
|
export declare function validateSearchQuery(query: string, maxLength?: number): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Debug function to show how search terms are normalized
|
|
44
|
+
* Helps troubleshoot search matching issues
|
|
45
|
+
*
|
|
46
|
+
* @param originalTerm - The original search term
|
|
47
|
+
* @returns Object with different normalization results
|
|
48
|
+
*/
|
|
49
|
+
export declare function debugNormalization(originalTerm: string): {
|
|
50
|
+
original: string;
|
|
51
|
+
normalized: string;
|
|
52
|
+
partialMatch: string;
|
|
53
|
+
};
|
|
23
54
|
//# sourceMappingURL=searchUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchUtils.d.ts","sourceRoot":"","sources":["../../src/utils/searchUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAa,GAAG,MAAM,CAclF;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,MAAa,GAAG,OAAO,CA0BpF"}
|
|
1
|
+
{"version":3,"file":"searchUtils.d.ts","sourceRoot":"","sources":["../../src/utils/searchUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAa,GAAG,MAAM,CAclF;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAa,GAAG,MAAM,CAavF;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAqB/E;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,MAAa,GAAG,OAAO,CA0BpF;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM;;;;EAMtD"}
|
|
@@ -24,6 +24,53 @@ export function normalizeSearchTerm(term, maxLength = 1000) {
|
|
|
24
24
|
.replace(/\.md$/, '') // Remove .md extension
|
|
25
25
|
.trim();
|
|
26
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Preserve original structure for partial matching
|
|
29
|
+
* Less aggressive normalization that keeps original separators for partial searches
|
|
30
|
+
*
|
|
31
|
+
* @param term - The search term to normalize
|
|
32
|
+
* @param maxLength - Maximum allowed length for the search term (default: 1000)
|
|
33
|
+
* @returns Normalized search term with preserved structure
|
|
34
|
+
* @throws Error if term exceeds maxLength
|
|
35
|
+
*/
|
|
36
|
+
export function normalizeForPartialMatch(term, maxLength = 1000) {
|
|
37
|
+
// SECURITY FIX: Normalize Unicode to prevent homograph attacks
|
|
38
|
+
const normalized = UnicodeValidator.normalize(term);
|
|
39
|
+
const cleanTerm = normalized.normalizedContent;
|
|
40
|
+
// Security: Limit input length to prevent DoS attacks
|
|
41
|
+
if (cleanTerm.length > maxLength) {
|
|
42
|
+
throw new Error(`Search term exceeds maximum length of ${maxLength} characters`);
|
|
43
|
+
}
|
|
44
|
+
return cleanTerm.toLowerCase()
|
|
45
|
+
.replace(/\.md$/, '') // Remove .md extension only
|
|
46
|
+
.trim();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Check if a search term matches a target string with multiple strategies
|
|
50
|
+
* Uses both normalized matching and partial matching for better results
|
|
51
|
+
*
|
|
52
|
+
* @param searchTerm - The term being searched for
|
|
53
|
+
* @param targetString - The string to search in
|
|
54
|
+
* @returns true if there's a match
|
|
55
|
+
*/
|
|
56
|
+
export function isSearchMatch(searchTerm, targetString) {
|
|
57
|
+
// Strategy 1: Exact normalized matching
|
|
58
|
+
const normalizedSearch = normalizeSearchTerm(searchTerm);
|
|
59
|
+
const normalizedTarget = normalizeSearchTerm(targetString);
|
|
60
|
+
if (normalizedTarget.includes(normalizedSearch)) {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
// Strategy 2: Partial matching with preserved structure
|
|
64
|
+
const partialSearch = normalizeForPartialMatch(searchTerm);
|
|
65
|
+
const partialTarget = normalizeForPartialMatch(targetString);
|
|
66
|
+
if (partialTarget.includes(partialSearch)) {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
// Strategy 3: Word-boundary matching
|
|
70
|
+
const searchWords = normalizedSearch.split(/\s+/);
|
|
71
|
+
const targetWords = normalizedTarget.split(/\s+/);
|
|
72
|
+
return searchWords.some(searchWord => targetWords.some(targetWord => targetWord.includes(searchWord)));
|
|
73
|
+
}
|
|
27
74
|
/**
|
|
28
75
|
* Validate search query length and content
|
|
29
76
|
*
|
|
@@ -54,4 +101,18 @@ export function validateSearchQuery(query, maxLength = 1000) {
|
|
|
54
101
|
}
|
|
55
102
|
return true;
|
|
56
103
|
}
|
|
57
|
-
|
|
104
|
+
/**
|
|
105
|
+
* Debug function to show how search terms are normalized
|
|
106
|
+
* Helps troubleshoot search matching issues
|
|
107
|
+
*
|
|
108
|
+
* @param originalTerm - The original search term
|
|
109
|
+
* @returns Object with different normalization results
|
|
110
|
+
*/
|
|
111
|
+
export function debugNormalization(originalTerm) {
|
|
112
|
+
return {
|
|
113
|
+
original: originalTerm,
|
|
114
|
+
normalized: normalizeSearchTerm(originalTerm),
|
|
115
|
+
partialMatch: normalizeForPartialMatch(originalTerm)
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoVXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvc2VhcmNoVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUU5RTs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxJQUFZLEVBQUUsWUFBb0IsSUFBSTtJQUN4RSwrREFBK0Q7SUFDL0QsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztJQUUvQyxzREFBc0Q7SUFDdEQsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLFNBQVMsYUFBYSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDLFdBQVcsRUFBRTtTQUMzQixPQUFPLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFFLHdDQUF3QztTQUNsRSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFPLHVCQUF1QjtTQUNsRCxJQUFJLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxJQUFZLEVBQUUsWUFBb0IsSUFBSTtJQUM3RSwrREFBK0Q7SUFDL0QsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztJQUUvQyxzREFBc0Q7SUFDdEQsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMs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ZnVuY3Rpb25hbGl0eVxuICovXG5cbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBzZWFyY2ggdGVybXMgZm9yIGJldHRlciBtYXRjaGluZ1xuICogSGFuZGxlcyBzcGFjZXMsIGRhc2hlcywgdW5kZXJzY29yZXMsIGFuZCBmaWxlIGV4dGVuc2lvbnNcbiAqIFxuICogQHBhcmFtIHRlcm0gLSBUaGUgc2VhcmNoIHRlcm0gdG8gbm9ybWFsaXplXG4gKiBAcGFyYW0gbWF4TGVuZ3RoIC0gTWF4aW11bSBhbGxvd2VkIGxlbmd0aCBmb3IgdGhlIHNlYXJjaCB0ZXJtIChkZWZhdWx0OiAxMDAwKVxuICogQHJldHVybnMgTm9ybWFsaXplZCBzZWFyY2ggdGVybVxuICogQHRocm93cyBFcnJvciBpZiB0ZXJtIGV4Y2VlZHMgbWF4TGVuZ3RoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTZWFyY2hUZXJtKHRlcm06IHN0cmluZywgbWF4TGVuZ3RoOiBudW1iZXIgPSAxMDAwKTogc3RyaW5nIHtcbiAgLy8gU0VDVVJJVFkgRklYOiBOb3JtYWxpemUgVW5pY29kZSB0byBwcmV2ZW50IGhvbW9ncmFwaCBhdHRhY2tzXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh0ZXJtKTtcbiAgY29uc3QgY2xlYW5UZXJtID0gbm9ybWFsaXplZC5ub3JtYWxpemVkQ29udGVudDtcbiAgXG4gIC8vIFNlY3VyaXR5OiBMaW1pdCBpbnB1dCBsZW5ndGggdG8gcHJldmVudCBEb1MgYXR0YWNrc1xuICBpZiAoY2xlYW5UZXJtLmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2VhcmNoIHRlcm0gZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAke21heExlbmd0aH0gY2hhcmFjdGVyc2ApO1xuICB9XG4gIFxuICByZXR1cm4gY2xlYW5UZXJtLnRvTG93ZXJDYXNlKClcbiAgICAucmVwbGFjZSgvWy1fXFxzXSsvZywgJyAnKSAgLy8gQ29udmVydCBkYXNoZXMsIHVuZGVyc2NvcmVzIHRvIHNwYWNlc1xuICAgIC5yZXBsYWNlKC9cXC5tZCQvLCAnJykgICAgICAgLy8gUmVtb3ZlIC5tZCBleHRlbnNpb25cbiAgICAudHJpbSgpO1xufVxuXG4vKipcbiAqIFByZXNlcnZlIG9yaWdpbmFsIHN0cnVjdHVyZSBmb3IgcGFydGlhbCBtYXRjaGluZ1xuICogTGVzcyBhZ2dyZXNzaXZlIG5vcm1hbGl6YXRpb24gdGhhdCBrZWVwcyBvcmlnaW5hbCBzZXBhcmF0b3JzIGZvciBwYXJ0aWFsIHNlYXJjaGVzXG4gKiBcbiAqIEBwYXJhbSB0ZXJtIC0gVGhlIHNlYXJjaCB0ZXJtIHRvIG5vcm1hbGl6ZVxuICogQHBhcmFtIG1heExlbmd0aCAtIE1heGltdW0gYWxsb3dlZCBsZW5ndGggZm9yIHRoZSBzZWFyY2ggdGVybSAoZGVmYXVsdDogMTAwMClcbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgc2VhcmNoIHRlcm0gd2l0aCBwcmVzZXJ2ZWQgc3RydWN0dXJlXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRlcm0gZXhjZWVkcyBtYXhMZW5ndGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUZvclBhcnRpYWxNYXRjaCh0ZXJtOiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyID0gMTAwMCk6IHN0cmluZyB7XG4gIC8vIFNFQ1VSSVRZIEZJWDogTm9ybWFsaXplIFVuaWNvZGUgdG8gcHJldmVudCBob21vZ3JhcGggYXR0YWNrc1xuICBjb25zdCBub3JtYWxpemVkID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUodGVybSk7XG4gIGNvbnN0IGNsZWFuVGVybSA9IG5vcm1hbGl6ZWQubm9ybWFsaXplZENvbnRlbnQ7XG4gIFxuICAvLyBTZWN1cml0eTogTGltaXQgaW5wdXQgbGVuZ3RoIHRvIHByZXZlbnQgRG9TIGF0dGFja3NcbiAgaWYgKGNsZWFuVGVybS5sZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNlYXJjaCB0ZXJtIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJHttYXhMZW5ndGh9IGNoYXJhY3RlcnNgKTtcbiAgfVxuICBcbiAgcmV0dXJuIGNsZWFuVGVybS50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL1xcLm1kJC8sICcnKSAgICAgICAvLyBSZW1vdmUgLm1kIGV4dGVuc2lvbiBvbmx5XG4gICAgLnRyaW0oKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHNlYXJjaCB0ZXJtIG1hdGNoZXMgYSB0YXJnZXQgc3RyaW5nIHdpdGggbXVsdGlwbGUgc3RyYXRlZ2llc1xuICogVXNlcyBib3RoIG5vcm1hbGl6ZWQgbWF0Y2hpbmcgYW5kIHBhcnRpYWwgbWF0Y2hpbmcgZm9yIGJldHRlciByZXN1bHRzXG4gKiBcbiAqIEBwYXJhbSBzZWFyY2hUZXJtIC0gVGhlIHRlcm0gYmVpbmcgc2VhcmNoZWQgZm9yXG4gKiBAcGFyYW0gdGFyZ2V0U3RyaW5nIC0gVGhlIHN0cmluZyB0byBzZWFyY2ggaW5cbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlcmUncyBhIG1hdGNoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NlYXJjaE1hdGNoKHNlYXJjaFRlcm06IHN0cmluZywgdGFyZ2V0U3RyaW5nOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gU3RyYXRlZ3kgMTogRXhhY3Qgbm9ybWFsaXplZCBtYXRjaGluZ1xuICBjb25zdCBub3JtYWxpemVkU2VhcmNoID0gbm9ybWFsaXplU2VhcmNoVGVybShzZWFyY2hUZXJtKTtcbiAgY29uc3Qgbm9ybWFsaXplZFRhcmdldCA9IG5vcm1hbGl6ZVNlYXJjaFRlcm0odGFyZ2V0U3RyaW5nKTtcbiAgaWYgKG5vcm1hbGl6ZWRUYXJnZXQuaW5jbHVkZXMobm9ybWFsaXplZFNlYXJjaCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBcbiAgLy8gU3RyYXRlZ3kgMjogUGFydGlhbCBtYXRjaGluZyB3aXRoIHByZXNlcnZlZCBzdHJ1Y3R1cmVcbiAgY29uc3QgcGFydGlhbFNlYXJjaCA9IG5vcm1hbGl6ZUZvclBhcnRpYWxNYXRjaChzZWFyY2hUZXJtKTtcbiAgY29uc3QgcGFydGlhbFRhcmdldCA9IG5vcm1hbGl6ZUZvclBhcnRpYWxNYXRjaCh0YXJnZXRTdHJpbmcpO1xuICBpZiAocGFydGlhbFRhcmdldC5pbmNsdWRlcyhwYXJ0aWFsU2VhcmNoKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIFxuICAvLyBTdHJhdGVneSAzOiBXb3JkLWJvdW5kYXJ5IG1hdGNoaW5nXG4gIGNvbnN0IHNlYXJjaFdvcmRzID0gbm9ybWFsaXplZFNlYXJjaC5zcGxpdCgvXFxzKy8pO1xuICBjb25zdCB0YXJnZXRXb3JkcyA9IG5vcm1hbGl6ZWRUYXJnZXQuc3BsaXQoL1xccysvKTtcbiAgcmV0dXJuIHNlYXJjaFdvcmRzLnNvbWUoc2VhcmNoV29yZCA9PiBcbiAgICB0YXJnZXRXb3Jkcy5zb21lKHRhcmdldFdvcmQgPT4gdGFyZ2V0V29yZC5pbmNsdWRlcyhzZWFyY2hXb3JkKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzZWFyY2ggcXVlcnkgbGVuZ3RoIGFuZCBjb250ZW50XG4gKiBcbiAqIEBwYXJhbSBxdWVyeSAtIFRoZSBzZWFyY2ggcXVlcnkgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBtYXhMZW5ndGggLSBNYXhpbXVtIGFsbG93ZWQgbGVuZ3RoIChkZWZhdWx0OiAxMDAwKVxuICogQHJldHVybnMgdHJ1ZSBpZiB2YWxpZFxuICogQHRocm93cyBFcnJvciB3aXRoIGRlc2NyaXB0aXZlIG1lc3NhZ2UgaWYgaW52YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTZWFyY2hRdWVyeShxdWVyeTogc3RyaW5nLCBtYXhMZW5ndGg6IG51bWJlciA9IDEwMDApOiBib29sZWFuIHtcbiAgaWYgKCFxdWVyeSB8fCBxdWVyeS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTZWFyY2ggcXVlcnkgY2Fubm90IGJlIGVtcHR5Jyk7XG4gIH1cbiAgXG4gIC8vIFNFQ1VSSVRZIEZJWDogTm9ybWFsaXplIFVuaWNvZGUgYmVmb3JlIHZhbGlkYXRpb25cbiAgY29uc3Qgbm9ybWFsaXplZCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHF1ZXJ5KTtcbiAgY29uc3QgY2xlYW5RdWVyeSA9IG5vcm1hbGl6ZWQubm9ybWFsaXplZENvbnRlbnQ7XG4gIFxuICBpZiAoY2xlYW5RdWVyeS5sZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNlYXJjaCBxdWVyeSBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mICR7bWF4TGVuZ3RofSBjaGFyYWN0ZXJzYCk7XG4gIH1cbiAgXG4gIC8vIENoZWNrIGZvciBwb3RlbnRpYWwgaW5qZWN0aW9uIHBhdHRlcm5zIChiYXNpYyB2YWxpZGF0aW9uKVxuICBjb25zdCBkYW5nZXJvdXNQYXR0ZXJucyA9IFtcbiAgICAvW1xceDAwLVxceDFGXFx4N0ZdLywgIC8vIENvbnRyb2wgY2hhcmFjdGVyc1xuICAgIC9bPD5dLywgICAgICAgICAgICAgLy8gUG90ZW50aWFsIEhUTUwvWE1MIGluamVjdGlvblxuICBdO1xuICBcbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGRhbmdlcm91c1BhdHRlcm5zKSB7XG4gICAgaWYgKHBhdHRlcm4udGVzdChjbGVhblF1ZXJ5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWFyY2ggcXVlcnkgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzJyk7XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBEZWJ1ZyBmdW5jdGlvbiB0byBzaG93IGhvdyBzZWFyY2ggdGVybXMgYXJlIG5vcm1hbGl6ZWRcbiAqIEhlbHBzIHRyb3VibGVzaG9vdCBzZWFyY2ggbWF0Y2hpbmcgaXNzdWVzXG4gKiBcbiAqIEBwYXJhbSBvcmlnaW5hbFRlcm0gLSBUaGUgb3JpZ2luYWwgc2VhcmNoIHRlcm1cbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIGRpZmZlcmVudCBub3JtYWxpemF0aW9uIHJlc3VsdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlYnVnTm9ybWFsaXphdGlvbihvcmlnaW5hbFRlcm06IHN0cmluZykge1xuICByZXR1cm4ge1xuICAgIG9yaWdpbmFsOiBvcmlnaW5hbFRlcm0sXG4gICAgbm9ybWFsaXplZDogbm9ybWFsaXplU2VhcmNoVGVybShvcmlnaW5hbFRlcm0pLFxuICAgIHBhcnRpYWxNYXRjaDogbm9ybWFsaXplRm9yUGFydGlhbE1hdGNoKG9yaWdpbmFsVGVybSlcbiAgfTtcbn0iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dollhousemcp/mcp-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -13,14 +13,12 @@
|
|
|
13
13
|
"build": "tsc",
|
|
14
14
|
"start": "node dist/index.js",
|
|
15
15
|
"dev": "tsx watch src/index.ts",
|
|
16
|
+
"inspector": "npx @modelcontextprotocol/inspector node dist/index.js",
|
|
17
|
+
"inspector:dev": "npx @modelcontextprotocol/inspector tsx src/index.ts",
|
|
16
18
|
"clean": "rm -rf dist",
|
|
17
19
|
"rebuild": "npm run clean && npm run build",
|
|
18
20
|
"setup": "npm install && npm run build",
|
|
19
21
|
"prepublishOnly": "BUILD_TYPE=npm npm run build",
|
|
20
|
-
"update:check": "echo 'Use check_for_updates MCP tool for interactive update checking'",
|
|
21
|
-
"update:pull": "git pull origin main && npm install && npm run build",
|
|
22
|
-
"update:backup": "cp -r . .backup-$(date +%s)",
|
|
23
|
-
"update:restore": "echo 'Use rollback_update MCP tool for interactive rollback'",
|
|
24
22
|
"test": "cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs",
|
|
25
23
|
"test:watch": "cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch",
|
|
26
24
|
"test:coverage": "cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage",
|
|
@@ -42,7 +40,17 @@
|
|
|
42
40
|
"security:audit": "tsx scripts/run-security-audit.ts",
|
|
43
41
|
"security:audit:json": "tsx scripts/run-security-audit.ts --json",
|
|
44
42
|
"security:audit:verbose": "tsx scripts/run-security-audit.ts --verbose",
|
|
45
|
-
"pre-commit": "npm run security:rapid && npm audit --audit-level=high"
|
|
43
|
+
"pre-commit": "npm run security:rapid && npm audit --audit-level=high",
|
|
44
|
+
"test:e2e": "cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs",
|
|
45
|
+
"test:e2e:watch": "cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch",
|
|
46
|
+
"test:e2e:verbose": "cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose",
|
|
47
|
+
"test:roundtrip": "npm run test:e2e",
|
|
48
|
+
"test:roundtrip:manual": "./scripts/test-roundtrip-workflow.sh",
|
|
49
|
+
"test:roundtrip:cleanup": "./scripts/test-roundtrip-workflow.sh cleanup",
|
|
50
|
+
"qa:direct": "node scripts/qa-direct-test.js",
|
|
51
|
+
"qa:inspector": "node scripts/qa-inspector-cli-test.js",
|
|
52
|
+
"qa:all": "npm run qa:direct && npm run qa:inspector",
|
|
53
|
+
"qa:simple": "node scripts/qa-simple-test.js"
|
|
46
54
|
},
|
|
47
55
|
"keywords": [
|
|
48
56
|
"mcp",
|
|
@@ -99,7 +107,7 @@
|
|
|
99
107
|
"url": "https://github.com/sponsors/mickdarling"
|
|
100
108
|
},
|
|
101
109
|
"dependencies": {
|
|
102
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
110
|
+
"@modelcontextprotocol/sdk": "^1.17.3",
|
|
103
111
|
"@types/dompurify": "^3.0.5",
|
|
104
112
|
"@types/uuid": "^10.0.0",
|
|
105
113
|
"dompurify": "^3.2.6",
|
|
@@ -107,11 +115,13 @@
|
|
|
107
115
|
"gray-matter": "^4.0.3",
|
|
108
116
|
"js-yaml": "^4.1.0",
|
|
109
117
|
"jsdom": "^26.1.0",
|
|
118
|
+
"node-fetch": "^3.3.2",
|
|
110
119
|
"uuid": "^11.1.0",
|
|
111
120
|
"zod": "^4.0.5"
|
|
112
121
|
},
|
|
113
122
|
"devDependencies": {
|
|
114
123
|
"@jest/globals": "^30.0.4",
|
|
124
|
+
"@modelcontextprotocol/inspector": "^0.16.5",
|
|
115
125
|
"@types/jest": "^30.0.0",
|
|
116
126
|
"@types/js-yaml": "^4.0.9",
|
|
117
127
|
"@types/jsdom": "^21.1.7",
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Configuration for update system
|
|
3
|
-
* Supports environment variables and XDG directories
|
|
4
|
-
*/
|
|
5
|
-
export interface UpdateConfig {
|
|
6
|
-
paths: {
|
|
7
|
-
backupDir: string;
|
|
8
|
-
npmBackupDir: string;
|
|
9
|
-
tempDir: string;
|
|
10
|
-
};
|
|
11
|
-
limits: {
|
|
12
|
-
maxSearchDepth: number;
|
|
13
|
-
maxBackupCount: number;
|
|
14
|
-
maxBackupSizeMB: number;
|
|
15
|
-
};
|
|
16
|
-
timeouts: {
|
|
17
|
-
gitCloneMs: number;
|
|
18
|
-
npmInstallMs: number;
|
|
19
|
-
npmUpdateMs: number;
|
|
20
|
-
buildMs: number;
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
export declare class UpdateConfigManager {
|
|
24
|
-
private static instance;
|
|
25
|
-
private config;
|
|
26
|
-
private constructor();
|
|
27
|
-
/**
|
|
28
|
-
* Get singleton instance
|
|
29
|
-
*/
|
|
30
|
-
static getInstance(): UpdateConfigManager;
|
|
31
|
-
/**
|
|
32
|
-
* Get configuration
|
|
33
|
-
*/
|
|
34
|
-
getConfig(): UpdateConfig;
|
|
35
|
-
/**
|
|
36
|
-
* Load configuration from environment and defaults
|
|
37
|
-
*/
|
|
38
|
-
private loadConfiguration;
|
|
39
|
-
/**
|
|
40
|
-
* Get base directory respecting XDG standards on Linux
|
|
41
|
-
*/
|
|
42
|
-
private getBaseDirectory;
|
|
43
|
-
/**
|
|
44
|
-
* Parse integer environment variable with default
|
|
45
|
-
*/
|
|
46
|
-
private parseIntEnv;
|
|
47
|
-
/**
|
|
48
|
-
* Get backup directory path
|
|
49
|
-
*/
|
|
50
|
-
getBackupDir(): string;
|
|
51
|
-
/**
|
|
52
|
-
* Get npm backup directory path
|
|
53
|
-
*/
|
|
54
|
-
getNpmBackupDir(): string;
|
|
55
|
-
/**
|
|
56
|
-
* Get temporary directory path
|
|
57
|
-
*/
|
|
58
|
-
getTempDir(): string;
|
|
59
|
-
/**
|
|
60
|
-
* Get max search depth for installation detection
|
|
61
|
-
*/
|
|
62
|
-
getMaxSearchDepth(): number;
|
|
63
|
-
/**
|
|
64
|
-
* Get max number of backups to keep
|
|
65
|
-
*/
|
|
66
|
-
getMaxBackupCount(): number;
|
|
67
|
-
/**
|
|
68
|
-
* Get timeout for git clone operations
|
|
69
|
-
*/
|
|
70
|
-
getGitCloneTimeout(): number;
|
|
71
|
-
/**
|
|
72
|
-
* Get timeout for npm install operations
|
|
73
|
-
*/
|
|
74
|
-
getNpmInstallTimeout(): number;
|
|
75
|
-
/**
|
|
76
|
-
* Get timeout for npm update operations
|
|
77
|
-
*/
|
|
78
|
-
getNpmUpdateTimeout(): number;
|
|
79
|
-
/**
|
|
80
|
-
* Get timeout for build operations
|
|
81
|
-
*/
|
|
82
|
-
getBuildTimeout(): number;
|
|
83
|
-
}
|
|
84
|
-
//# sourceMappingURL=updateConfig.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"updateConfig.d.ts","sourceRoot":"","sources":["../../src/config/updateConfig.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE;QACL,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,EAAE;QACN,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,QAAQ,EAAE;QACR,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAoC;IAC3D,OAAO,CAAC,MAAM,CAAe;IAE7B,OAAO;IAIP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,mBAAmB;IAOzC;;OAEG;IACH,SAAS,IAAI,YAAY;IAIzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoCzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAenB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;OAEG;IACH,kBAAkB,IAAI,MAAM;IAI5B;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAI9B;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;OAEG;IACH,eAAe,IAAI,MAAM;CAG1B"}
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import * as path from 'path';
|
|
2
|
-
import * as os from 'os';
|
|
3
|
-
import { logger } from '../utils/logger.js';
|
|
4
|
-
export class UpdateConfigManager {
|
|
5
|
-
static instance = null;
|
|
6
|
-
config;
|
|
7
|
-
constructor() {
|
|
8
|
-
this.config = this.loadConfiguration();
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Get singleton instance
|
|
12
|
-
*/
|
|
13
|
-
static getInstance() {
|
|
14
|
-
if (!UpdateConfigManager.instance) {
|
|
15
|
-
UpdateConfigManager.instance = new UpdateConfigManager();
|
|
16
|
-
}
|
|
17
|
-
return UpdateConfigManager.instance;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Get configuration
|
|
21
|
-
*/
|
|
22
|
-
getConfig() {
|
|
23
|
-
return this.config;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Load configuration from environment and defaults
|
|
27
|
-
*/
|
|
28
|
-
loadConfiguration() {
|
|
29
|
-
// Determine base directory (respects XDG on Linux)
|
|
30
|
-
const baseDir = this.getBaseDirectory();
|
|
31
|
-
// Load from environment or use defaults
|
|
32
|
-
const config = {
|
|
33
|
-
paths: {
|
|
34
|
-
backupDir: process.env.DOLLHOUSE_BACKUP_DIR ||
|
|
35
|
-
path.join(baseDir, 'backups'),
|
|
36
|
-
npmBackupDir: process.env.DOLLHOUSE_NPM_BACKUP_DIR ||
|
|
37
|
-
path.join(baseDir, 'backups', 'npm'),
|
|
38
|
-
tempDir: process.env.DOLLHOUSE_TEMP_DIR ||
|
|
39
|
-
path.join(os.tmpdir(), 'dollhouse-update')
|
|
40
|
-
},
|
|
41
|
-
limits: {
|
|
42
|
-
maxSearchDepth: this.parseIntEnv('DOLLHOUSE_MAX_SEARCH_DEPTH', 10),
|
|
43
|
-
maxBackupCount: this.parseIntEnv('DOLLHOUSE_MAX_BACKUP_COUNT', 5),
|
|
44
|
-
maxBackupSizeMB: this.parseIntEnv('DOLLHOUSE_MAX_BACKUP_SIZE_MB', 500)
|
|
45
|
-
},
|
|
46
|
-
timeouts: {
|
|
47
|
-
gitCloneMs: this.parseIntEnv('DOLLHOUSE_GIT_CLONE_TIMEOUT_MS', 300000), // 5 minutes
|
|
48
|
-
npmInstallMs: this.parseIntEnv('DOLLHOUSE_NPM_INSTALL_TIMEOUT_MS', 300000), // 5 minutes
|
|
49
|
-
npmUpdateMs: this.parseIntEnv('DOLLHOUSE_NPM_UPDATE_TIMEOUT_MS', 300000), // 5 minutes
|
|
50
|
-
buildMs: this.parseIntEnv('DOLLHOUSE_BUILD_TIMEOUT_MS', 120000) // 2 minutes
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
logger.info('[UpdateConfig] Configuration loaded:', {
|
|
54
|
-
baseDir,
|
|
55
|
-
backupDir: config.paths.backupDir,
|
|
56
|
-
maxSearchDepth: config.limits.maxSearchDepth
|
|
57
|
-
});
|
|
58
|
-
return config;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Get base directory respecting XDG standards on Linux
|
|
62
|
-
*/
|
|
63
|
-
getBaseDirectory() {
|
|
64
|
-
// Check for explicit override
|
|
65
|
-
if (process.env.DOLLHOUSE_BASE_DIR) {
|
|
66
|
-
return process.env.DOLLHOUSE_BASE_DIR;
|
|
67
|
-
}
|
|
68
|
-
// On Linux, respect XDG standards
|
|
69
|
-
if (process.platform === 'linux') {
|
|
70
|
-
const xdgDataHome = process.env.XDG_DATA_HOME;
|
|
71
|
-
if (xdgDataHome) {
|
|
72
|
-
return path.join(xdgDataHome, 'dollhouse');
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
// Default to home directory
|
|
76
|
-
return path.join(os.homedir(), '.dollhouse');
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Parse integer environment variable with default
|
|
80
|
-
*/
|
|
81
|
-
parseIntEnv(key, defaultValue) {
|
|
82
|
-
const value = process.env[key];
|
|
83
|
-
if (!value) {
|
|
84
|
-
return defaultValue;
|
|
85
|
-
}
|
|
86
|
-
const parsed = parseInt(value, 10);
|
|
87
|
-
if (isNaN(parsed)) {
|
|
88
|
-
logger.warn(`[UpdateConfig] Invalid integer value for ${key}: ${value}, using default: ${defaultValue}`);
|
|
89
|
-
return defaultValue;
|
|
90
|
-
}
|
|
91
|
-
return parsed;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Get backup directory path
|
|
95
|
-
*/
|
|
96
|
-
getBackupDir() {
|
|
97
|
-
return this.config.paths.backupDir;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Get npm backup directory path
|
|
101
|
-
*/
|
|
102
|
-
getNpmBackupDir() {
|
|
103
|
-
return this.config.paths.npmBackupDir;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Get temporary directory path
|
|
107
|
-
*/
|
|
108
|
-
getTempDir() {
|
|
109
|
-
return this.config.paths.tempDir;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Get max search depth for installation detection
|
|
113
|
-
*/
|
|
114
|
-
getMaxSearchDepth() {
|
|
115
|
-
return this.config.limits.maxSearchDepth;
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Get max number of backups to keep
|
|
119
|
-
*/
|
|
120
|
-
getMaxBackupCount() {
|
|
121
|
-
return this.config.limits.maxBackupCount;
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Get timeout for git clone operations
|
|
125
|
-
*/
|
|
126
|
-
getGitCloneTimeout() {
|
|
127
|
-
return this.config.timeouts.gitCloneMs;
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Get timeout for npm install operations
|
|
131
|
-
*/
|
|
132
|
-
getNpmInstallTimeout() {
|
|
133
|
-
return this.config.timeouts.npmInstallMs;
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Get timeout for npm update operations
|
|
137
|
-
*/
|
|
138
|
-
getNpmUpdateTimeout() {
|
|
139
|
-
return this.config.timeouts.npmUpdateMs;
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Get timeout for build operations
|
|
143
|
-
*/
|
|
144
|
-
getBuildTimeout() {
|
|
145
|
-
return this.config.timeouts.buildMs;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy91cGRhdGVDb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBeUI1QyxNQUFNLE9BQU8sbUJBQW1CO0lBQ3RCLE1BQU0sQ0FBQyxRQUFRLEdBQStCLElBQUksQ0FBQztJQUNuRCxNQUFNLENBQWU7SUFFN0I7UUFDRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxXQUFXO1FBQ2hCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQyxtQkFBbUIsQ0FBQyxRQUFRLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1FBQzNELENBQUM7UUFDRCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQjtRQUN2QixtREFBbUQ7UUFDbkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEMsd0NBQXdDO1FBQ3hDLE1BQU0sTUFBTSxHQUFpQjtZQUMzQixLQUFLLEVBQUU7Z0JBQ0wsU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CO29CQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUM7Z0JBQ3hDLFlBQVksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QjtvQkFDcEMs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Q0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQjtRQUNsQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7SUFDMUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB1cGRhdGUgc3lzdGVtXG4gKiBTdXBwb3J0cyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIFhERyBkaXJlY3Rvcmllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZUNvbmZpZyB7XG4gIHBhdGhzOiB7XG4gICAgYmFja3VwRGlyOiBzdHJpbmc7XG4gICAgbnBtQmFja3VwRGlyOiBzdHJpbmc7XG4gICAgdGVtcERpcjogc3RyaW5nO1xuICB9O1xuICBsaW1pdHM6IHtcbiAgICBtYXhTZWFyY2hEZXB0aDogbnVtYmVyO1xuICAgIG1heEJhY2t1cENvdW50OiBudW1iZXI7XG4gICAgbWF4QmFja3VwU2l6ZU1COiBudW1iZXI7XG4gIH07XG4gIHRpbWVvdXRzOiB7XG4gICAgZ2l0Q2xvbmVNczogbnVtYmVyO1xuICAgIG5wbUluc3RhbGxNczogbnVtYmVyO1xuICAgIG5wbVVwZGF0ZU1zOiBudW1iZXI7XG4gICAgYnVpbGRNczogbnVtYmVyO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlQ29uZmlnTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBVcGRhdGVDb25maWdNYW5hZ2VyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY29uZmlnOiBVcGRhdGVDb25maWc7XG4gIFxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29uZmlnID0gdGhpcy5sb2FkQ29uZmlndXJhdGlvbigpO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHNpbmdsZXRvbiBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGdldEluc3RhbmNlKCk6IFVwZGF0ZUNvbmZpZ01hbmFnZXIge1xuICAgIGlmICghVXBkYXRlQ29uZmlnTWFuYWdlci5pbnN0YW5jZSkge1xuICAgICAgVXBkYXRlQ29uZmlnTWFuYWdlci5pbnN0YW5jZSA9IG5ldyBVcGRhdGVDb25maWdNYW5hZ2VyKCk7XG4gICAgfVxuICAgIHJldHVybiBVcGRhdGVDb25maWdNYW5hZ2VyLmluc3RhbmNlO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGdldENvbmZpZygpOiBVcGRhdGVDb25maWcge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZztcbiAgfVxuICBcbiAgLyoqXG4gICAqIExvYWQgY29uZmlndXJhdGlvbiBmcm9tIGVudmlyb25tZW50IGFuZCBkZWZhdWx0c1xuICAgKi9cbiAgcHJpdmF0ZSBsb2FkQ29uZmlndXJhdGlvbigpOiBVcGRhdGVDb25maWcge1xuICAgIC8vIERldGVybWluZSBiYXNlIGRpcmVjdG9yeSAocmVzcGVjdHMgWERHIG9uIExpbnV4KVxuICAgIGNvbnN0IGJhc2VEaXIgPSB0aGlzLmdldEJhc2VEaXJlY3RvcnkoKTtcbiAgICBcbiAgICAvLyBMb2FkIGZyb20gZW52aXJvbm1lbnQgb3IgdXNlIGRlZmF1bHRzXG4gICAgY29uc3QgY29uZmlnOiBVcGRhdGVDb25maWcgPSB7XG4gICAgICBwYXRoczoge1xuICAgICAgICBiYWNrdXBEaXI6IHByb2Nlc3MuZW52LkRPTExIT1VTRV9CQUNLVVBfRElSIHx8IFxuICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihiYXNlRGlyLCAnYmFja3VwcycpLFxuICAgICAgICBucG1CYWNrdXBEaXI6IHByb2Nlc3MuZW52LkRPTExIT1VTRV9OUE1fQkFDS1VQX0RJUiB8fCBcbiAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4oYmFzZURpciwgJ2JhY2t1cHMnLCAnbnBtJyksXG4gICAgICAgIHRlbXBEaXI6IHByb2Nlc3MuZW52LkRPTExIT1VTRV9URU1QX0RJUiB8fCBcbiAgICAgICAgICAgICAgICAgcGF0aC5qb2luKG9zLnRtcGRpcigpLCAnZG9sbGhvdXNlLXVwZGF0ZScpXG4gICAgICB9LFxuICAgICAgbGltaXRzOiB7XG4gICAgICAgIG1heFNlYXJjaERlcHRoOiB0aGlzLnBhcnNlSW50RW52KCdET0xMSE9VU0VfTUFYX1NFQVJDSF9ERVBUSCcsIDEwKSxcbiAgICAgICAgbWF4QmFja3VwQ291bnQ6IHRoaXMucGFyc2VJbnRFbnYoJ0RPTExIT1VTRV9NQVhfQkFDS1VQX0NPVU5UJywgNSksXG4gICAgICAgIG1heEJhY2t1cFNpemVNQjogdGhpcy5wYXJzZUludEVudignRE9MTEhPVVNFX01BWF9CQUNLVVBfU0laRV9NQicsIDUwMClcbiAgICAgIH0sXG4gICAgICB0aW1lb3V0czoge1xuICAgICAgICBnaXRDbG9uZU1zOiB0aGlzLnBhcnNlSW50RW52KCdET0xMSE9VU0VfR0lUX0NMT05FX1RJTUVPVVRfTVMnLCAzMDAwMDApLCAvLyA1IG1pbnV0ZXNcbiAgICAgICAgbnBtSW5zdGFsbE1zOiB0aGlzLnBhcnNlSW50RW52KCdET0xMSE9VU0VfTlBNX0lOU1RBTExfVElNRU9VVF9NUycsIDMwMDAwMCksIC8vIDUgbWludXRlc1xuICAgICAgICBucG1VcGRhdGVNczogdGhpcy5wYXJzZUludEVudignRE9MTEhPVVNFX05QTV9VUERBVEVfVElNRU9VVF9NUycsIDMwMDAwMCksIC8vIDUgbWludXRlc1xuICAgICAgICBidWlsZE1zOiB0aGlzLnBhcnNlSW50RW52KCdET0xMSE9VU0VfQlVJTERfVElNRU9VVF9NUycsIDEyMDAwMCkgLy8gMiBtaW51dGVzXG4gICAgICB9XG4gICAgfTtcbiAgICBcbiAgICBsb2dnZXIuaW5mbygnW1VwZGF0ZUNvbmZpZ10gQ29uZmlndXJhdGlvbiBsb2FkZWQ6Jywge1xuICAgICAgYmFzZURpcixcbiAgICAgIGJhY2t1cERpcjogY29uZmlnLnBhdGhzLmJhY2t1cERpcixcbiAgICAgIG1heFNlYXJjaERlcHRoOiBjb25maWcubGltaXRzLm1heFNlYXJjaERlcHRoXG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBiYXNlIGRpcmVjdG9yeSByZXNwZWN0aW5nIFhERyBzdGFuZGFyZHMgb24gTGludXhcbiAgICovXG4gIHByaXZhdGUgZ2V0QmFzZURpcmVjdG9yeSgpOiBzdHJpbmcge1xuICAgIC8vIENoZWNrIGZvciBleHBsaWNpdCBvdmVycmlkZVxuICAgIGlmIChwcm9jZXNzLmVudi5ET0xMSE9VU0VfQkFTRV9ESVIpIHtcbiAgICAgIHJldHVybiBwcm9jZXNzLmVudi5ET0xMSE9VU0VfQkFTRV9ESVI7XG4gICAgfVxuICAgIFxuICAgIC8vIE9uIExpbnV4LCByZXNwZWN0IFhERyBzdGFuZGFyZHNcbiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2xpbnV4Jykge1xuICAgICAgY29uc3QgeGRnRGF0YUhvbWUgPSBwcm9jZXNzLmVudi5YREdfREFUQV9IT01FO1xuICAgICAgaWYgKHhkZ0RhdGFIb21lKSB7XG4gICAgICAgIHJldHVybiBwYXRoLmpvaW4oeGRnRGF0YUhvbWUsICdkb2xsaG91c2UnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gRGVmYXVsdCB0byBob21lIGRpcmVjdG9yeVxuICAgIHJldHVybiBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLmRvbGxob3VzZScpO1xuICB9XG4gIFxuICAvKipcbiAgICogUGFyc2UgaW50ZWdlciBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIGRlZmF1bHRcbiAgICovXG4gIHByaXZhdGUgcGFyc2VJbnRFbnYoa2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCB2YWx1ZSA9IHByb2Nlc3MuZW52W2tleV07XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICBpZiAoaXNOYU4ocGFyc2VkKSkge1xuICAgICAgbG9nZ2VyLndhcm4oYFtVcGRhdGVDb25maWddIEludmFsaWQgaW50ZWdlciB2YWx1ZSBmb3IgJHtrZXl9OiAke3ZhbHVlfSwgdXNpbmcgZGVmYXVsdDogJHtkZWZhdWx0VmFsdWV9YCk7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGJhY2t1cCBkaXJlY3RvcnkgcGF0aFxuICAgKi9cbiAgZ2V0QmFja3VwRGlyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnBhdGhzLmJhY2t1cERpcjtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBucG0gYmFja3VwIGRpcmVjdG9yeSBwYXRoXG4gICAqL1xuICBnZXROcG1CYWNrdXBEaXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucGF0aHMubnBtQmFja3VwRGlyO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHRlbXBvcmFyeSBkaXJlY3RvcnkgcGF0aFxuICAgKi9cbiAgZ2V0VGVtcERpcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5wYXRocy50ZW1wRGlyO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IG1heCBzZWFyY2ggZGVwdGggZm9yIGluc3RhbGxhdGlvbiBkZXRlY3Rpb25cbiAgICovXG4gIGdldE1heFNlYXJjaERlcHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmxpbWl0cy5tYXhTZWFyY2hEZXB0aDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBtYXggbnVtYmVyIG9mIGJhY2t1cHMgdG8ga2VlcFxuICAgKi9cbiAgZ2V0TWF4QmFja3VwQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcubGltaXRzLm1heEJhY2t1cENvdW50O1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHRpbWVvdXQgZm9yIGdpdCBjbG9uZSBvcGVyYXRpb25zXG4gICAqL1xuICBnZXRHaXRDbG9uZVRpbWVvdXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcudGltZW91dHMuZ2l0Q2xvbmVNcztcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCB0aW1lb3V0IGZvciBucG0gaW5zdGFsbCBvcGVyYXRpb25zXG4gICAqL1xuICBnZXROcG1JbnN0YWxsVGltZW91dCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy50aW1lb3V0cy5ucG1JbnN0YWxsTXM7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgdGltZW91dCBmb3IgbnBtIHVwZGF0ZSBvcGVyYXRpb25zXG4gICAqL1xuICBnZXROcG1VcGRhdGVUaW1lb3V0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnRpbWVvdXRzLm5wbVVwZGF0ZU1zO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHRpbWVvdXQgZm9yIGJ1aWxkIG9wZXJhdGlvbnNcbiAgICovXG4gIGdldEJ1aWxkVGltZW91dCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy50aW1lb3V0cy5idWlsZE1zO1xuICB9XG59Il19
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Update/maintenance-related tool definitions and handlers
|
|
3
|
-
*/
|
|
4
|
-
import { ToolDefinition } from './ToolRegistry.js';
|
|
5
|
-
import { IToolHandler } from '../types.js';
|
|
6
|
-
export declare function getUpdateTools(server: IToolHandler): Array<{
|
|
7
|
-
tool: ToolDefinition;
|
|
8
|
-
handler: any;
|
|
9
|
-
}>;
|
|
10
|
-
//# sourceMappingURL=UpdateTools.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UpdateTools.d.ts","sourceRoot":"","sources":["../../../src/server/tools/UpdateTools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,GAAG,CAAA;CAAE,CAAC,CAgFlG"}
|