@dollhousemcp/mcp-server 1.4.1 → 1.4.3

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.
Files changed (46) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +90 -12
  3. package/dist/config/updateConfig.d.ts +84 -0
  4. package/dist/config/updateConfig.d.ts.map +1 -0
  5. package/dist/config/updateConfig.js +148 -0
  6. package/dist/generated/version.d.ts +9 -0
  7. package/dist/generated/version.d.ts.map +1 -0
  8. package/dist/generated/version.js +9 -0
  9. package/dist/index.d.ts +6 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +34 -6
  12. package/dist/portfolio/DefaultElementProvider.d.ts +78 -0
  13. package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -0
  14. package/dist/portfolio/DefaultElementProvider.js +386 -0
  15. package/dist/portfolio/PortfolioManager.d.ts +12 -0
  16. package/dist/portfolio/PortfolioManager.d.ts.map +1 -1
  17. package/dist/portfolio/PortfolioManager.js +107 -3
  18. package/dist/portfolio/types.d.ts +6 -6
  19. package/dist/portfolio/types.d.ts.map +1 -1
  20. package/dist/portfolio/types.js +7 -7
  21. package/dist/security/commandValidator.d.ts.map +1 -1
  22. package/dist/security/commandValidator.js +5 -2
  23. package/dist/security/securityMonitor.d.ts +2 -1
  24. package/dist/security/securityMonitor.d.ts.map +1 -1
  25. package/dist/security/securityMonitor.js +1 -1
  26. package/dist/server/tools/UpdateTools.d.ts.map +1 -1
  27. package/dist/server/tools/UpdateTools.js +22 -1
  28. package/dist/server/types.d.ts +1 -0
  29. package/dist/server/types.d.ts.map +1 -1
  30. package/dist/server/types.js +1 -1
  31. package/dist/update/BackupManager.d.ts +17 -0
  32. package/dist/update/BackupManager.d.ts.map +1 -1
  33. package/dist/update/BackupManager.js +112 -3
  34. package/dist/update/UpdateManager.d.ts +19 -0
  35. package/dist/update/UpdateManager.d.ts.map +1 -1
  36. package/dist/update/UpdateManager.js +485 -15
  37. package/dist/update/VersionManager.d.ts +1 -1
  38. package/dist/update/VersionManager.d.ts.map +1 -1
  39. package/dist/update/VersionManager.js +62 -15
  40. package/dist/utils/fileOperations.d.ts +83 -0
  41. package/dist/utils/fileOperations.d.ts.map +1 -0
  42. package/dist/utils/fileOperations.js +291 -0
  43. package/dist/utils/installation.d.ts +30 -0
  44. package/dist/utils/installation.d.ts.map +1 -0
  45. package/dist/utils/installation.js +160 -0
  46. package/package.json +3 -1
@@ -6,6 +6,7 @@ import * as fsSync from 'fs';
6
6
  import * as path from 'path';
7
7
  import { safeExec } from '../utils/git.js';
8
8
  import { logger } from '../utils/logger.js';
9
+ import { FileOperations } from '../utils/fileOperations.js';
9
10
  export class BackupManager {
10
11
  rootDir;
11
12
  backupsDir;
@@ -122,10 +123,20 @@ export class BackupManager {
122
123
  const nodeModulesPath = path.join(this.rootDir, 'node_modules');
123
124
  try {
124
125
  await fs.access(nodeModulesPath);
125
- await safeExec('cp', ['-r', 'node_modules', backupPath], { cwd: this.rootDir });
126
+ const destNodeModules = path.join(backupPath, 'node_modules');
127
+ // Use cross-platform file copy instead of Unix-specific cp -r
128
+ await FileOperations.copyDirectory(nodeModulesPath, destNodeModules, {
129
+ excludePatterns: ['.bin', '.cache'],
130
+ onProgress: (copied, total) => {
131
+ if (copied % 100 === 0) {
132
+ logger.debug(`[BackupManager] Backing up node_modules: ${copied}/${total} files`);
133
+ }
134
+ }
135
+ });
126
136
  }
127
- catch {
137
+ catch (error) {
128
138
  // node_modules doesn't exist or copy failed, that's okay
139
+ logger.debug('[BackupManager] Could not backup node_modules:', error);
129
140
  }
130
141
  // Backup all persona files (including user-created ones not in git)
131
142
  const personasDir = path.join(this.rootDir, 'personas');
@@ -160,6 +171,104 @@ export class BackupManager {
160
171
  version
161
172
  };
162
173
  }
174
+ /**
175
+ * Create a backup specifically for npm installations
176
+ */
177
+ async createNpmBackup(npmGlobalPath, version) {
178
+ try {
179
+ // Create npm-specific backup directory
180
+ const npmBackupsDir = path.join(path.dirname(this.backupsDir), '.dollhouse', 'backups', 'npm');
181
+ await fs.mkdir(npmBackupsDir, { recursive: true });
182
+ // Create timestamp-based backup directory
183
+ const timestamp = new Date().toISOString().replace(/:/g, '-').replace(/\./g, '-');
184
+ const backupName = `npm-backup-${timestamp}`;
185
+ const backupPath = path.join(npmBackupsDir, backupName);
186
+ logger.info(`[BackupManager] Creating npm backup at: ${backupPath}`);
187
+ // Create backup directory
188
+ await fs.mkdir(backupPath, { recursive: true });
189
+ // Copy the npm package directory
190
+ await this.copyDirectory(npmGlobalPath, path.join(backupPath, 'package'));
191
+ // Save backup metadata
192
+ const metadata = {
193
+ timestamp,
194
+ version,
195
+ npmGlobalPath,
196
+ installationType: 'npm',
197
+ createdAt: new Date().toISOString()
198
+ };
199
+ await fs.writeFile(path.join(backupPath, 'backup-metadata.json'), JSON.stringify(metadata, null, 2));
200
+ // Update manifest
201
+ await this.updateNpmBackupManifest(npmBackupsDir, {
202
+ backupName,
203
+ timestamp,
204
+ version,
205
+ path: backupPath
206
+ });
207
+ // Cleanup old npm backups (keep last 3)
208
+ await this.cleanupOldNpmBackups(npmBackupsDir, 3);
209
+ return backupPath;
210
+ }
211
+ catch (error) {
212
+ logger.error('[BackupManager] Failed to create npm backup:', error);
213
+ throw error;
214
+ }
215
+ }
216
+ /**
217
+ * Copy directory recursively with progress reporting
218
+ * @deprecated Use FileOperations.copyDirectory instead
219
+ */
220
+ async copyDirectory(src, dest) {
221
+ await FileOperations.copyDirectory(src, dest, {
222
+ excludePatterns: ['.git'],
223
+ onProgress: (copied, total, file) => {
224
+ if (copied % 50 === 0) {
225
+ logger.debug(`[BackupManager] Copying: ${copied}/${total} files`);
226
+ }
227
+ }
228
+ });
229
+ }
230
+ /**
231
+ * Update npm backup manifest
232
+ */
233
+ async updateNpmBackupManifest(npmBackupsDir, backupInfo) {
234
+ const manifestPath = path.join(npmBackupsDir, 'manifest.json');
235
+ let manifest = { backups: [] };
236
+ try {
237
+ const content = await fs.readFile(manifestPath, 'utf-8');
238
+ manifest = JSON.parse(content);
239
+ }
240
+ catch {
241
+ // File doesn't exist or is invalid, use default
242
+ }
243
+ // Add new backup to beginning of list
244
+ manifest.backups.unshift(backupInfo);
245
+ // Keep only last 10 entries in manifest
246
+ manifest.backups = manifest.backups.slice(0, 10);
247
+ await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2));
248
+ }
249
+ /**
250
+ * Clean up old npm backups
251
+ */
252
+ async cleanupOldNpmBackups(npmBackupsDir, keepCount) {
253
+ try {
254
+ const entries = await fs.readdir(npmBackupsDir, { withFileTypes: true });
255
+ const backupDirs = entries
256
+ .filter(e => e.isDirectory() && e.name.startsWith('npm-backup-'))
257
+ .map(e => e.name)
258
+ .sort()
259
+ .reverse();
260
+ // Remove old backups
261
+ const toRemove = backupDirs.slice(keepCount);
262
+ for (const dir of toRemove) {
263
+ const dirPath = path.join(npmBackupsDir, dir);
264
+ logger.info(`[BackupManager] Removing old npm backup: ${dir}`);
265
+ await fs.rm(dirPath, { recursive: true, force: true });
266
+ }
267
+ }
268
+ catch (error) {
269
+ logger.warn('[BackupManager] Failed to cleanup old npm backups:', error);
270
+ }
271
+ }
163
272
  /**
164
273
  * List available backups
165
274
  */
@@ -258,4 +367,4 @@ export class BackupManager {
258
367
  return deletedCount;
259
368
  }
260
369
  }
261
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFja3VwTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cGRhdGUvQmFja3VwTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxNQUFNLE1BQU0sSUFBSSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFRNUMsTUFBTSxPQUFPLGFBQWE7SUFDaEIsT0FBTyxDQUFTO0lBQ2hCLFVBQVUsQ0FBUztJQUUzQixZQUFZLE9BQWdCO1FBQzFCLHlDQUF5QztRQUN6QyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osdUNBQXVDO1lBQ3ZDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3hELE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztZQUNyRSxDQUFDO1lBQ0QsOEJBQThCO1lBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztZQUN0RCxDQUFDO1FBQ0gsQ0FBQztRQUVELHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFeEMsZ0ZBQWdGO1FBQ2hGLG9FQUFvRTtRQUNwRSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQztZ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QUFDO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNYW5hZ2UgYmFja3VwcyBkdXJpbmcgdXBkYXRlc1xuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIGZzU3luYyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgc2FmZUV4ZWMgfSBmcm9tICcuLi91dGlscy9naXQuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBCYWNrdXBJbmZvIHtcbiAgcGF0aDogc3RyaW5nO1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdmVyc2lvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEJhY2t1cE1hbmFnZXIge1xuICBwcml2YXRlIHJvb3REaXI6IHN0cmluZztcbiAgcHJpdmF0ZSBiYWNrdXBzRGlyOiBzdHJpbmc7XG4gIFxuICBjb25zdHJ1Y3Rvcihyb290RGlyPzogc3RyaW5nKSB7XG4gICAgLy8gVmFsaWRhdGUgcm9vdERpciBwYXJhbWV0ZXIgaWYgcHJvdmlkZWRcbiAgICBpZiAocm9vdERpcikge1xuICAgICAgLy8gUHJldmVudCBwYXRoIHRyYXZlcnNhbCBhdHRhY2tzIGZpcnN0XG4gICAgICBpZiAocm9vdERpci5pbmNsdWRlcygnLi4vJykgfHwgcm9vdERpci5pbmNsdWRlcygnLi5cXFxcJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb290RGlyIGNhbm5vdCBjb250YWluIHBhdGggdHJhdmVyc2FsIHNlcXVlbmNlcycpO1xuICAgICAgfVxuICAgICAgLy8gVGhlbiBjaGVjayBpZiBpdCdzIGFic29sdXRlXG4gICAgICBpZiAoIXBhdGguaXNBYnNvbHV0ZShyb290RGlyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jvb3REaXIgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoJyk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIEFsbG93IG92ZXJyaWRlIGZvciB0ZXN0aW5nLCBkZWZhdWx0IHRvIHByb2Nlc3MuY3dkKClcbiAgICB0aGlzLnJvb3REaXIgPSByb290RGlyIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgXG4gICAgLy8gU2FmZXR5IGNoZWNrOiBEb24ndCBhbGxvdyBvcGVyYXRpb25zIG9uIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgY3JpdGljYWwgZmlsZXNcbiAgICAvLyBUaGlzIHByZXZlbnRzIGFjY2lkZW50YWwgZGVsZXRpb24gb2YgdGhlIGFjdHVhbCBwcm9qZWN0IGRpcmVjdG9yeVxuICAgIGlmICh0aGlzLmhhc1Byb2R1Y3Rpb25GaWxlcygpICYmICF0aGlzLmlzU2FmZVRlc3REaXJlY3RvcnkoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCYWNrdXBNYW5hZ2VyIGNhbm5vdCBvcGVyYXRlIG9uIHByb2R1Y3Rpb24gZGlyZWN0b3J5LiBQYXNzIGEgc2FmZSB0ZXN0IGRpcmVjdG9yeSB0byB0aGUgY29uc3RydWN0b3IuJyk7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuYmFja3Vwc0RpciA9IHBhdGguam9pbih0aGlzLnJvb3REaXIsIFwiLi5cIiwgXCJkb2xsaG91c2VtY3AtYmFja3Vwc1wiKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBkaXJlY3RvcnkgY29udGFpbnMgcHJvZHVjdGlvbiBmaWxlc1xuICAgKi9cbiAgcHJpdmF0ZSBoYXNQcm9kdWN0aW9uRmlsZXMoKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHByb2R1Y3Rpb25JbmRpY2F0b3JzID0gW1xuICAgICAgICAncGFja2FnZS5qc29uJyxcbiAgICAgICAgJ3RzY29uZmlnLmpzb24nLFxuICAgICAgICAnLmdpdCcsXG4gICAgICAgICdzcmMnLFxuICAgICAgICAnTElDRU5TRSdcbiAgICAgIF07XG4gICAgICBcbiAgICAgIGNvbnN0IGZpbGVzID0gZnNTeW5jLnJlYWRkaXJTeW5jKHRoaXMucm9vdERpcik7XG4gICAgICBjb25zdCBoYXNQcm9kdWN0aW9uRmlsZSA9IHByb2R1Y3Rpb25JbmRpY2F0b3JzLnNvbWUoaW5kaWNhdG9yID0+IFxuICAgICAgICBmaWxlcy5pbmNsdWRlcyhpbmRpY2F0b3IpXG4gICAgICApO1xuICAgICAgXG4gICAgICAvLyBBZGRpdGlvbmFsIGNoZWNrOiBpZiBwYWNrYWdlLmpzb24gZXhpc3RzLCBjaGVjayBpZiBpdCdzIGEgcmVhbCBwcm9qZWN0XG4gICAgICBpZiAoaGFzUHJvZHVjdGlvbkZpbGUgJiYgZmlsZXMuaW5jbHVkZXMoJ3BhY2thZ2UuanNvbicpKSB7XG4gICAgICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHBhdGguam9pbih0aGlzLnJvb3REaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGZzU3luYy5yZWFkRmlsZVN5bmMocGFja2FnZUpzb25QYXRoLCAndXRmLTgnKSk7XG4gICAgICAgIC8vIElmIGl0IGhhcyBhIG5hbWUgYW5kIGRlcGVuZGVuY2llcywgaXQncyBsaWtlbHkgYSByZWFsIHByb2plY3RcbiAgICAgICAgcmV0dXJuICEhKHBhY2thZ2VKc29uLm5hbWUgJiYgcGFja2FnZUpzb24uZGVwZW5kZW5jaWVzKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIGhhc1Byb2R1Y3Rpb25GaWxlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSWYgd2UgY2FuJ3QgcmVhZCB0aGUgZGlyZWN0b3J5LCBhc3N1bWUgaXQncyBzYWZlXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhpcyBhcHBlYXJzIHRvIGJlIGEgc2FmZSB0ZXN0IGRpcmVjdG9yeVxuICAgKi9cbiAgcHJpdmF0ZSBpc1NhZmVUZXN0RGlyZWN0b3J5KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNhZmVQYXRocyA9IFsndGVzdCcsICd0bXAnLCAndGVtcCcsICcudGVzdCcsICdfX3Rlc3RfXyddO1xuICAgIGNvbnN0IGRpclBhdGggPSB0aGlzLnJvb3REaXIudG9Mb3dlckNhc2UoKTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiBydW5uaW5nIGluIERvY2tlciBjb250YWluZXJcbiAgICBpZiAodGhpcy5pc0RvY2tlckVudmlyb25tZW50KCkpIHtcbiAgICAgIHJldHVybiB0cnVlOyAvLyBEb2NrZXIgY29udGFpbmVycyBhcmUgaW1tdXRhYmxlLCB1cGRhdGVzIGRvbid0IGFwcGx5XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBzYWZlUGF0aHMuc29tZShzYWZlID0+IGRpclBhdGguaW5jbHVkZXMoc2FmZSkpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgcnVubmluZyBpbiBhIERvY2tlciBjb250YWluZXJcbiAgICovXG4gIHByaXZhdGUgaXNEb2NrZXJFbnZpcm9ubWVudCgpOiBib29sZWFuIHtcbiAgICAvLyBDaGVjayBjb21tb24gRG9ja2VyIGluZGljYXRvcnNcbiAgICBpZiAocHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0RJU0FCTEVfVVBEQVRFUyA9PT0gJ3RydWUnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgcnVubmluZyBmcm9tIC9hcHAgZGlyZWN0b3J5IChjb21tb24gRG9ja2VyIHByYWN0aWNlKVxuICAgIGlmICh0aGlzLnJvb3REaXIgPT09ICcvYXBwJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIFxuICAgIC8vIENoZWNrIGZvciBEb2NrZXItc3BlY2lmaWMgZmlsZXNcbiAgICB0cnkge1xuICAgICAgY29uc3QgaGFzRG9ja2VyRW52ID0gZnNTeW5jLmV4aXN0c1N5bmMoJy8uZG9ja2VyZW52Jyk7XG4gICAgICBpZiAoaGFzRG9ja2VyRW52KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSWdub3JlIGVycm9yc1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBiYWNrdXAgb2YgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uXG4gICAqL1xuICBhc3luYyBjcmVhdGVCYWNrdXAodmVyc2lvbj86IHN0cmluZyk6IFByb21pc2U8QmFja3VwSW5mbz4ge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9bOi5dL2csICctJyk7XG4gICAgY29uc3QgYmFja3VwTmFtZSA9IGBiYWNrdXAtJHt0aW1lc3RhbXB9YDtcbiAgICBjb25zdCBiYWNrdXBQYXRoID0gcGF0aC5qb2luKHRoaXMuYmFja3Vwc0RpciwgYmFja3VwTmFtZSk7XG4gICAgXG4gICAgLy8gRW5zdXJlIGJhY2t1cHMgZGlyZWN0b3J5IGV4aXN0c1xuICAgIGF3YWl0IGZzLm1rZGlyKHRoaXMuYmFja3Vwc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgXG4gICAgLy8gVXNlIGdpdCB0byBjcmVhdGUgYSBjbGVhbiBjb3B5IChyZXNwZWN0aW5nIC5naXRpZ25vcmUpXG4gICAgYXdhaXQgc2FmZUV4ZWMoJ2dpdCcsIFtcbiAgICAgICdhcmNoaXZlJyxcbiAgICAgICctLWZvcm1hdD10YXInLFxuICAgICAgJ0hFQUQnXG4gICAgXSwgeyBjd2Q6IHRoaXMucm9vdERpciB9KS50aGVuKGFzeW5jICh7IHN0ZG91dCB9KSA9PiB7XG4gICAgICAvLyBDcmVhdGUgYmFja3VwIGRpcmVjdG9yeVxuICAgICAgYXdhaXQgZnMubWtkaXIoYmFja3VwUGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBcbiAgICAgIC8vIEV4dHJhY3QgdGFyIHRvIGJhY2t1cCBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IHRhclBhdGggPSBwYXRoLmpvaW4oYmFja3VwUGF0aCwgJ2FyY2hpdmUudGFyJyk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUodGFyUGF0aCwgc3Rkb3V0KTtcbiAgICAgIFxuICAgICAgLy8gRXh0cmFjdCB1c2luZyB0YXIgY29tbWFuZFxuICAgICAgYXdhaXQgc2FmZUV4ZWMoJ3RhcicsIFsnLXhmJywgJ2FyY2hpdmUudGFyJ10sIHsgY3dkOiBiYWNrdXBQYXRoIH0pO1xuICAgICAgYXdhaXQgZnMudW5saW5rKHRhclBhdGgpO1xuICAgIH0pO1xuICAgIFxuICAgIC8vIEFsc28gYmFja3VwIG5vZGVfbW9kdWxlcyBpZiBpdCBleGlzdHNcbiAgICBjb25zdCBub2RlTW9kdWxlc1BhdGggPSBwYXRoLmpvaW4odGhpcy5yb290RGlyLCAnbm9kZV9tb2R1bGVzJyk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLmFjY2Vzcyhub2RlTW9kdWxlc1BhdGgpO1xuICAgICAgYXdhaXQgc2FmZUV4ZWMoJ2NwJywgWyctcicsICdub2RlX21vZHVsZXMnLCBiYWNrdXBQYXRoXSwgeyBjd2Q6IHRoaXMucm9vdERpciB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIG5vZGVfbW9kdWxlcyBkb2Vzbid0IGV4aXN0IG9yIGNvcHkgZmFpbGVkLCB0aGF0J3Mgb2theVxuICAgIH1cbiAgICBcbiAgICAvLyBCYWNrdXAgYWxsIHBlcnNvbmEgZmlsZXMgKGluY2x1ZGluZyB1c2VyLWNyZWF0ZWQgb25lcyBub3QgaW4gZ2l0KVxuICAgIGNvbnN0IHBlcnNvbmFzRGlyID0gcGF0aC5qb2luKHRoaXMucm9vdERpciwgJ3BlcnNvbmFzJyk7XG4gICAgY29uc3QgYmFja3VwUGVyc29uYXNEaXIgPSBwYXRoLmpvaW4oYmFja3VwUGF0aCwgJ3BlcnNvbmFzJyk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLmFjY2VzcyhwZXJzb25hc0Rpcik7XG4gICAgICBhd2FpdCBmcy5ta2RpcihiYWNrdXBQZXJzb25hc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHBlcnNvbmFGaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIocGVyc29uYXNEaXIpO1xuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHBlcnNvbmFGaWxlcykge1xuICAgICAgICBpZiAoZmlsZS5lbmRzV2l0aCgnLm1kJykpIHtcbiAgICAgICAgICBjb25zdCBzb3VyY2VQYXRoID0gcGF0aC5qb2luKHBlcnNvbmFzRGlyLCBmaWxlKTtcbiAgICAgICAgICBjb25zdCBkZXN0UGF0aCA9IHBhdGguam9pbihiYWNrdXBQZXJzb25hc0RpciwgZmlsZSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ29weSB0aGUgZmlsZSwgb3ZlcndyaXRpbmcgaWYgaXQgYWxyZWFkeSBleGlzdHMgZnJvbSBnaXQgYXJjaGl2ZVxuICAgICAgICAgIGF3YWl0IGZzLmNvcHlGaWxlKHNvdXJjZVBhdGgsIGRlc3RQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBMb2cgd2FybmluZyBidXQgZG9uJ3QgZmFpbCB0aGUgYmFja3VwXG4gICAgICBsb2dnZXIud2FybignQ291bGQgbm90IGJhY2t1cCBhbGwgcGVyc29uYXM6JywgZXJyb3IpO1xuICAgIH1cbiAgICBcbiAgICAvLyBTYXZlIGJhY2t1cCBtZXRhZGF0YVxuICAgIGNvbnN0IG1ldGFkYXRhID0ge1xuICAgICAgdGltZXN0YW1wLFxuICAgICAgdmVyc2lvbixcbiAgICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgfTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICBwYXRoLmpvaW4oYmFja3VwUGF0aCwgJ2JhY2t1cC1tZXRhZGF0YS5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeShtZXRhZGF0YSwgbnVsbCwgMilcbiAgICApO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBwYXRoOiBiYWNrdXBQYXRoLFxuICAgICAgdGltZXN0YW1wLFxuICAgICAgdmVyc2lvblxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBMaXN0IGF2YWlsYWJsZSBiYWNrdXBzXG4gICAqL1xuICBhc3luYyBsaXN0QmFja3VwcygpOiBQcm9taXNlPEJhY2t1cEluZm9bXT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZnMucmVhZGRpcih0aGlzLmJhY2t1cHNEaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IGJhY2t1cHM6IEJhY2t1cEluZm9bXSA9IFtdO1xuICAgICAgXG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkgJiYgZW50cnkubmFtZS5zdGFydHNXaXRoKCdiYWNrdXAtJykpIHtcbiAgICAgICAgICBjb25zdCBiYWNrdXBQYXRoID0gcGF0aC5qb2luKHRoaXMuYmFja3Vwc0RpciwgZW50cnkubmFtZSk7XG4gICAgICAgICAgY29uc3QgdGltZXN0YW1wID0gZW50cnkubmFtZS5yZXBsYWNlKCdiYWNrdXAtJywgJycpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFRyeSB0byByZWFkIG1ldGFkYXRhXG4gICAgICAgICAgbGV0IHZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGFQYXRoID0gcGF0aC5qb2luKGJhY2t1cFBhdGgsICdiYWNrdXAtbWV0YWRhdGEuanNvbicpO1xuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKG1ldGFkYXRhUGF0aCwgJ3V0Zi04JykpO1xuICAgICAgICAgICAgdmVyc2lvbiA9IG1ldGFkYXRhLnZlcnNpb247XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBObyBtZXRhZGF0YSBmaWxlLCB0aGF0J3Mgb2theVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBiYWNrdXBzLnB1c2goe1xuICAgICAgICAgICAgcGF0aDogYmFja3VwUGF0aCxcbiAgICAgICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgICAgIHZlcnNpb25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTb3J0IGJ5IHRpbWVzdGFtcCBkZXNjZW5kaW5nIChuZXdlc3QgZmlyc3QpXG4gICAgICByZXR1cm4gYmFja3Vwcy5zb3J0KChhLCBiKSA9PiBiLnRpbWVzdGFtcC5sb2NhbGVDb21wYXJlKGEudGltZXN0YW1wKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHRoZSBtb3N0IHJlY2VudCBiYWNrdXBcbiAgICovXG4gIGFzeW5jIGdldExhdGVzdEJhY2t1cCgpOiBQcm9taXNlPEJhY2t1cEluZm8gfCBudWxsPiB7XG4gICAgY29uc3QgYmFja3VwcyA9IGF3YWl0IHRoaXMubGlzdEJhY2t1cHMoKTtcbiAgICByZXR1cm4gYmFja3Vwcy5sZW5ndGggPiAwID8gYmFja3Vwc1swXSA6IG51bGw7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBSZXN0b3JlIGZyb20gYSBiYWNrdXBcbiAgICovXG4gIGFzeW5jIHJlc3RvcmVCYWNrdXAoYmFja3VwUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVmVyaWZ5IGJhY2t1cCBleGlzdHNcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKGJhY2t1cFBhdGgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWNrdXAgbm90IGZvdW5kOiAke2JhY2t1cFBhdGh9YCk7XG4gICAgfVxuICAgIFxuICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIHRoZSBjdXJyZW50IHN0YXRlXG4gICAgY29uc3QgdGVtcERpciA9IHBhdGguam9pbih0aGlzLmJhY2t1cHNEaXIsICd0ZW1wLWN1cnJlbnQnKTtcbiAgICBhd2FpdCBmcy5ta2Rpcih0ZW1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBcbiAgICAvLyBNb3ZlIGN1cnJlbnQgZmlsZXMgdG8gdGVtcCAoZXhjZXB0IC5naXQgYW5kIG5vZGVfbW9kdWxlcylcbiAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZnMucmVhZGRpcih0aGlzLnJvb3REaXIpO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgaWYgKGVudHJ5ICE9PSAnLmdpdCcgJiYgZW50cnkgIT09ICdub2RlX21vZHVsZXMnICYmIGVudHJ5ICE9PSAnZGlzdCcpIHtcbiAgICAgICAgY29uc3Qgc291cmNlUGF0aCA9IHBhdGguam9pbih0aGlzLnJvb3REaXIsIGVudHJ5KTtcbiAgICAgICAgY29uc3QgZGVzdFBhdGggPSBwYXRoLmpvaW4odGVtcERpciwgZW50cnkpO1xuICAgICAgICBhd2FpdCBmcy5yZW5hbWUoc291cmNlUGF0aCwgZGVzdFBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBDb3B5IGJhY2t1cCBmaWxlcyB0byByb290XG4gICAgY29uc3QgYmFja3VwRW50cmllcyA9IGF3YWl0IGZzLnJlYWRkaXIoYmFja3VwUGF0aCk7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBiYWNrdXBFbnRyaWVzKSB7XG4gICAgICBpZiAoZW50cnkgIT09ICdiYWNrdXAtbWV0YWRhdGEuanNvbicgJiYgZW50cnkgIT09ICcuZ2l0Jykge1xuICAgICAgICBjb25zdCBzb3VyY2VQYXRoID0gcGF0aC5qb2luKGJhY2t1cFBhdGgsIGVudHJ5KTtcbiAgICAgICAgY29uc3QgZGVzdFBhdGggPSBwYXRoLmpvaW4odGhpcy5yb290RGlyLCBlbnRyeSk7XG4gICAgICAgIGF3YWl0IHNhZmVFeGVjKCdjcCcsIFsnLXInLCBzb3VyY2VQYXRoLCBkZXN0UGF0aF0pO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBDbGVhbiB1cCB0ZW1wIGRpcmVjdG9yeVxuICAgIGF3YWl0IGZzLnJtKHRlbXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENsZWFuIHVwIG9sZCBiYWNrdXBzIChrZWVwIHRoZSA1IG1vc3QgcmVjZW50KVxuICAgKi9cbiAgYXN5bmMgY2xlYW51cE9sZEJhY2t1cHMoa2VlcENvdW50OiBudW1iZXIgPSA1KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBiYWNrdXBzID0gYXdhaXQgdGhpcy5saXN0QmFja3VwcygpO1xuICAgIGxldCBkZWxldGVkQ291bnQgPSAwO1xuICAgIFxuICAgIGlmIChiYWNrdXBzLmxlbmd0aCA+IGtlZXBDb3VudCkge1xuICAgICAgY29uc3QgYmFja3Vwc1RvRGVsZXRlID0gYmFja3Vwcy5zbGljZShrZWVwQ291bnQpO1xuICAgICAgXG4gICAgICBmb3IgKGNvbnN0IGJhY2t1cCBvZiBiYWNrdXBzVG9EZWxldGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBmcy5ybShiYWNrdXAucGF0aCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgIGRlbGV0ZWRDb3VudCsrO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSBiYWNrdXAgJHtiYWNrdXAucGF0aH06YCwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBkZWxldGVkQ291bnQ7XG4gIH1cbn0iXX0=
370
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFja3VwTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cGRhdGUvQmFja3VwTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxNQUFNLE1BQU0sSUFBSSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBUTVELE1BQU0sT0FBTyxhQUFhO0lBQ2hCLE9BQU8sQ0FBUztJQUNoQixVQUFVLENBQVM7SUFFM0IsWUFBWSxPQUFnQjtRQUMxQix5Q0FBeUM7UUFDekMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLHVDQUF1QztZQUN2QyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN4RCxNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7WUFDckUsQ0FBQztZQUNELDhCQUE4QjtZQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7WUFDdEQsQ0FBQztRQUNILENBQUM7UUFFRCx1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXhDLGdGQUFnRjtRQUNoRixvRUFBb0U7UUFDcEUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUs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Q0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNYW5hZ2UgYmFja3VwcyBkdXJpbmcgdXBkYXRlc1xuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIGZzU3luYyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgc2FmZUV4ZWMgfSBmcm9tICcuLi91dGlscy9naXQuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IEZpbGVPcGVyYXRpb25zIH0gZnJvbSAnLi4vdXRpbHMvZmlsZU9wZXJhdGlvbnMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhY2t1cEluZm8ge1xuICBwYXRoOiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQmFja3VwTWFuYWdlciB7XG4gIHByaXZhdGUgcm9vdERpcjogc3RyaW5nO1xuICBwcml2YXRlIGJhY2t1cHNEaXI6IHN0cmluZztcbiAgXG4gIGNvbnN0cnVjdG9yKHJvb3REaXI/OiBzdHJpbmcpIHtcbiAgICAvLyBWYWxpZGF0ZSByb290RGlyIHBhcmFtZXRlciBpZiBwcm92aWRlZFxuICAgIGlmIChyb290RGlyKSB7XG4gICAgICAvLyBQcmV2ZW50IHBhdGggdHJhdmVyc2FsIGF0dGFja3MgZmlyc3RcbiAgICAgIGlmIChyb290RGlyLmluY2x1ZGVzKCcuLi8nKSB8fCByb290RGlyLmluY2x1ZGVzKCcuLlxcXFwnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jvb3REaXIgY2Fubm90IGNvbnRhaW4gcGF0aCB0cmF2ZXJzYWwgc2VxdWVuY2VzJyk7XG4gICAgICB9XG4gICAgICAvLyBUaGVuIGNoZWNrIGlmIGl0J3MgYWJzb2x1dGVcbiAgICAgIGlmICghcGF0aC5pc0Fic29sdXRlKHJvb3REaXIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncm9vdERpciBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGgnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGUgZm9yIHRlc3RpbmcsIGRlZmF1bHQgdG8gcHJvY2Vzcy5jd2QoKVxuICAgIHRoaXMucm9vdERpciA9IHJvb3REaXIgfHwgcHJvY2Vzcy5jd2QoKTtcbiAgICBcbiAgICAvLyBTYWZldHkgY2hlY2s6IERvbid0IGFsbG93IG9wZXJhdGlvbnMgb24gZGlyZWN0b3JpZXMgY29udGFpbmluZyBjcml0aWNhbCBmaWxlc1xuICAgIC8vIFRoaXMgcHJldmVudHMgYWNjaWRlbnRhbCBkZWxldGlvbiBvZiB0aGUgYWN0dWFsIHByb2plY3QgZGlyZWN0b3J5XG4gICAgaWYgKHRoaXMuaGFzUHJvZHVjdGlvbkZpbGVzKCkgJiYgIXRoaXMuaXNTYWZlVGVzdERpcmVjdG9yeSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JhY2t1cE1hbmFnZXIgY2Fubm90IG9wZXJhdGUgb24gcHJvZHVjdGlvbiBkaXJlY3RvcnkuIFBhc3MgYSBzYWZlIHRlc3QgZGlyZWN0b3J5IHRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5iYWNrdXBzRGlyID0gcGF0aC5qb2luKHRoaXMucm9vdERpciwgXCIuLlwiLCBcImRvbGxob3VzZW1jcC1iYWNrdXBzXCIpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIGRpcmVjdG9yeSBjb250YWlucyBwcm9kdWN0aW9uIGZpbGVzXG4gICAqL1xuICBwcml2YXRlIGhhc1Byb2R1Y3Rpb25GaWxlcygpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcHJvZHVjdGlvbkluZGljYXRvcnMgPSBbXG4gICAgICAgICdwYWNrYWdlLmpzb24nLFxuICAgICAgICAndHNjb25maWcuanNvbicsXG4gICAgICAgICcuZ2l0JyxcbiAgICAgICAgJ3NyYycsXG4gICAgICAgICdMSUNFTlNFJ1xuICAgICAgXTtcbiAgICAgIFxuICAgICAgY29uc3QgZmlsZXMgPSBmc1N5bmMucmVhZGRpclN5bmModGhpcy5yb290RGlyKTtcbiAgICAgIGNvbnN0IGhhc1Byb2R1Y3Rpb25GaWxlID0gcHJvZHVjdGlvbkluZGljYXRvcnMuc29tZShpbmRpY2F0b3IgPT4gXG4gICAgICAgIGZpbGVzLmluY2x1ZGVzKGluZGljYXRvcilcbiAgICAgICk7XG4gICAgICBcbiAgICAgIC8vIEFkZGl0aW9uYWwgY2hlY2s6IGlmIHBhY2thZ2UuanNvbiBleGlzdHMsIGNoZWNrIGlmIGl0J3MgYSByZWFsIHByb2plY3RcbiAgICAgIGlmIChoYXNQcm9kdWN0aW9uRmlsZSAmJiBmaWxlcy5pbmNsdWRlcygncGFja2FnZS5qc29uJykpIHtcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKHRoaXMucm9vdERpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoZnNTeW5jLnJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgsICd1dGYtOCcpKTtcbiAgICAgICAgLy8gSWYgaXQgaGFzIGEgbmFtZSBhbmQgZGVwZW5kZW5jaWVzLCBpdCdzIGxpa2VseSBhIHJlYWwgcHJvamVjdFxuICAgICAgICByZXR1cm4gISEocGFja2FnZUpzb24ubmFtZSAmJiBwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXMpO1xuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4gaGFzUHJvZHVjdGlvbkZpbGU7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBJZiB3ZSBjYW4ndCByZWFkIHRoZSBkaXJlY3RvcnksIGFzc3VtZSBpdCdzIHNhZmVcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGlzIGFwcGVhcnMgdG8gYmUgYSBzYWZlIHRlc3QgZGlyZWN0b3J5XG4gICAqL1xuICBwcml2YXRlIGlzU2FmZVRlc3REaXJlY3RvcnkoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2FmZVBhdGhzID0gWyd0ZXN0JywgJ3RtcCcsICd0ZW1wJywgJy50ZXN0JywgJ19fdGVzdF9fJ107XG4gICAgY29uc3QgZGlyUGF0aCA9IHRoaXMucm9vdERpci50b0xvd2VyQ2FzZSgpO1xuICAgIFxuICAgIC8vIENoZWNrIGlmIHJ1bm5pbmcgaW4gRG9ja2VyIGNvbnRhaW5lclxuICAgIGlmICh0aGlzLmlzRG9ja2VyRW52aXJvbm1lbnQoKSkge1xuICAgICAgcmV0dXJuIHRydWU7IC8vIERvY2tlciBjb250YWluZXJzIGFyZSBpbW11dGFibGUsIHVwZGF0ZXMgZG9uJ3QgYXBwbHlcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHNhZmVQYXRocy5zb21lKHNhZmUgPT4gZGlyUGF0aC5pbmNsdWRlcyhzYWZlKSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBydW5uaW5nIGluIGEgRG9ja2VyIGNvbnRhaW5lclxuICAgKi9cbiAgcHJpdmF0ZSBpc0RvY2tlckVudmlyb25tZW50KCk6IGJvb2xlYW4ge1xuICAgIC8vIENoZWNrIGNvbW1vbiBEb2NrZXIgaW5kaWNhdG9yc1xuICAgIGlmIChwcm9jZXNzLmVudi5ET0xMSE9VU0VfRElTQUJMRV9VUERBVEVTID09PSAndHJ1ZScpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBpZiBydW5uaW5nIGZyb20gL2FwcCBkaXJlY3RvcnkgKGNvbW1vbiBEb2NrZXIgcHJhY3RpY2UpXG4gICAgaWYgKHRoaXMucm9vdERpciA9PT0gJy9hcHAnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgZm9yIERvY2tlci1zcGVjaWZpYyBmaWxlc1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBoYXNEb2NrZXJFbnYgPSBmc1N5bmMuZXhpc3RzU3luYygnLy5kb2NrZXJlbnYnKTtcbiAgICAgIGlmIChoYXNEb2NrZXJFbnYpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBJZ25vcmUgZXJyb3JzXG4gICAgfVxuICAgIFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGJhY2t1cCBvZiB0aGUgY3VycmVudCBpbnN0YWxsYXRpb25cbiAgICovXG4gIGFzeW5jIGNyZWF0ZUJhY2t1cCh2ZXJzaW9uPzogc3RyaW5nKTogUHJvbWlzZTxCYWNrdXBJbmZvPiB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1s6Ll0vZywgJy0nKTtcbiAgICBjb25zdCBiYWNrdXBOYW1lID0gYGJhY2t1cC0ke3RpbWVzdGFtcH1gO1xuICAgIGNvbnN0IGJhY2t1cFBhdGggPSBwYXRoLmpvaW4odGhpcy5iYWNrdXBzRGlyLCBiYWNrdXBOYW1lKTtcbiAgICBcbiAgICAvLyBFbnN1cmUgYmFja3VwcyBkaXJlY3RvcnkgZXhpc3RzXG4gICAgYXdhaXQgZnMubWtkaXIodGhpcy5iYWNrdXBzRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBcbiAgICAvLyBVc2UgZ2l0IHRvIGNyZWF0ZSBhIGNsZWFuIGNvcHkgKHJlc3BlY3RpbmcgLmdpdGlnbm9yZSlcbiAgICBhd2FpdCBzYWZlRXhlYygnZ2l0JywgW1xuICAgICAgJ2FyY2hpdmUnLFxuICAgICAgJy0tZm9ybWF0PXRhcicsXG4gICAgICAnSEVBRCdcbiAgICBdLCB7IGN3ZDogdGhpcy5yb290RGlyIH0pLnRoZW4oYXN5bmMgKHsgc3Rkb3V0IH0pID0+IHtcbiAgICAgIC8vIENyZWF0ZSBiYWNrdXAgZGlyZWN0b3J5XG4gICAgICBhd2FpdCBmcy5ta2RpcihiYWNrdXBQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIFxuICAgICAgLy8gRXh0cmFjdCB0YXIgdG8gYmFja3VwIGRpcmVjdG9yeVxuICAgICAgY29uc3QgdGFyUGF0aCA9IHBhdGguam9pbihiYWNrdXBQYXRoLCAnYXJjaGl2ZS50YXInKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0YXJQYXRoLCBzdGRvdXQpO1xuICAgICAgXG4gICAgICAvLyBFeHRyYWN0IHVzaW5nIHRhciBjb21tYW5kXG4gICAgICBhd2FpdCBzYWZlRXhlYygndGFyJywgWycteGYnLCAnYXJjaGl2ZS50YXInXSwgeyBjd2Q6IGJhY2t1cFBhdGggfSk7XG4gICAgICBhd2FpdCBmcy51bmxpbmsodGFyUGF0aCk7XG4gICAgfSk7XG4gICAgXG4gICAgLy8gQWxzbyBiYWNrdXAgbm9kZV9tb2R1bGVzIGlmIGl0IGV4aXN0c1xuICAgIGNvbnN0IG5vZGVNb2R1bGVzUGF0aCA9IHBhdGguam9pbih0aGlzLnJvb3REaXIsICdub2RlX21vZHVsZXMnKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKG5vZGVNb2R1bGVzUGF0aCk7XG4gICAgICBjb25zdCBkZXN0Tm9kZU1vZHVsZXMgPSBwYXRoLmpvaW4oYmFja3VwUGF0aCwgJ25vZGVfbW9kdWxlcycpO1xuICAgICAgXG4gICAgICAvLyBVc2UgY3Jvc3MtcGxhdGZvcm0gZmlsZSBjb3B5IGluc3RlYWQgb2YgVW5peC1zcGVjaWZpYyBjcCAtclxuICAgICAgYXdhaXQgRmlsZU9wZXJhdGlvbnMuY29weURpcmVjdG9yeShub2RlTW9kdWxlc1BhdGgsIGRlc3ROb2RlTW9kdWxlcywge1xuICAgICAgICBleGNsdWRlUGF0dGVybnM6IFsnLmJpbicsICcuY2FjaGUnXSxcbiAgICAgICAgb25Qcm9ncmVzczogKGNvcGllZCwgdG90YWwpID0+IHtcbiAgICAgICAgICBpZiAoY29waWVkICUgMTAwID09PSAwKSB7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYFtCYWNrdXBNYW5hZ2VyXSBCYWNraW5nIHVwIG5vZGVfbW9kdWxlczogJHtjb3BpZWR9LyR7dG90YWx9IGZpbGVzYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gbm9kZV9tb2R1bGVzIGRvZXNuJ3QgZXhpc3Qgb3IgY29weSBmYWlsZWQsIHRoYXQncyBva2F5XG4gICAgICBsb2dnZXIuZGVidWcoJ1tCYWNrdXBNYW5hZ2VyXSBDb3VsZCBub3QgYmFja3VwIG5vZGVfbW9kdWxlczonLCBlcnJvcik7XG4gICAgfVxuICAgIFxuICAgIC8vIEJhY2t1cCBhbGwgcGVyc29uYSBmaWxlcyAoaW5jbHVkaW5nIHVzZXItY3JlYXRlZCBvbmVzIG5vdCBpbiBnaXQpXG4gICAgY29uc3QgcGVyc29uYXNEaXIgPSBwYXRoLmpvaW4odGhpcy5yb290RGlyLCAncGVyc29uYXMnKTtcbiAgICBjb25zdCBiYWNrdXBQZXJzb25hc0RpciA9IHBhdGguam9pbihiYWNrdXBQYXRoLCAncGVyc29uYXMnKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKHBlcnNvbmFzRGlyKTtcbiAgICAgIGF3YWl0IGZzLm1rZGlyKGJhY2t1cFBlcnNvbmFzRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIFxuICAgICAgY29uc3QgcGVyc29uYUZpbGVzID0gYXdhaXQgZnMucmVhZGRpcihwZXJzb25hc0Rpcik7XG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgcGVyc29uYUZpbGVzKSB7XG4gICAgICAgIGlmIChmaWxlLmVuZHNXaXRoKCcubWQnKSkge1xuICAgICAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBwYXRoLmpvaW4ocGVyc29uYXNEaXIsIGZpbGUpO1xuICAgICAgICAgIGNvbnN0IGRlc3RQYXRoID0gcGF0aC5qb2luKGJhY2t1cFBlcnNvbmFzRGlyLCBmaWxlKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBDb3B5IHRoZSBmaWxlLCBvdmVyd3JpdGluZyBpZiBpdCBhbHJlYWR5IGV4aXN0cyBmcm9tIGdpdCBhcmNoaXZlXG4gICAgICAgICAgYXdhaXQgZnMuY29weUZpbGUoc291cmNlUGF0aCwgZGVzdFBhdGgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIExvZyB3YXJuaW5nIGJ1dCBkb24ndCBmYWlsIHRoZSBiYWNrdXBcbiAgICAgIGxvZ2dlci53YXJuKCdDb3VsZCBub3QgYmFja3VwIGFsbCBwZXJzb25hczonLCBlcnJvcik7XG4gICAgfVxuICAgIFxuICAgIC8vIFNhdmUgYmFja3VwIG1ldGFkYXRhXG4gICAgY29uc3QgbWV0YWRhdGEgPSB7XG4gICAgICB0aW1lc3RhbXAsXG4gICAgICB2ZXJzaW9uLFxuICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICB9O1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICAgIHBhdGguam9pbihiYWNrdXBQYXRoLCAnYmFja3VwLW1ldGFkYXRhLmpzb24nKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KG1ldGFkYXRhLCBudWxsLCAyKVxuICAgICk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGg6IGJhY2t1cFBhdGgsXG4gICAgICB0aW1lc3RhbXAsXG4gICAgICB2ZXJzaW9uXG4gICAgfTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGJhY2t1cCBzcGVjaWZpY2FsbHkgZm9yIG5wbSBpbnN0YWxsYXRpb25zXG4gICAqL1xuICBhc3luYyBjcmVhdGVOcG1CYWNrdXAobnBtR2xvYmFsUGF0aDogc3RyaW5nLCB2ZXJzaW9uPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgLy8gQ3JlYXRlIG5wbS1zcGVjaWZpYyBiYWNrdXAgZGlyZWN0b3J5XG4gICAgICBjb25zdCBucG1CYWNrdXBzRGlyID0gcGF0aC5qb2luKHBhdGguZGlybmFtZSh0aGlzLmJhY2t1cHNEaXIpLCAnLmRvbGxob3VzZScsICdiYWNrdXBzJywgJ25wbScpO1xuICAgICAgYXdhaXQgZnMubWtkaXIobnBtQmFja3Vwc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSB0aW1lc3RhbXAtYmFzZWQgYmFja3VwIGRpcmVjdG9yeVxuICAgICAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnJlcGxhY2UoLzovZywgJy0nKS5yZXBsYWNlKC9cXC4vZywgJy0nKTtcbiAgICAgIGNvbnN0IGJhY2t1cE5hbWUgPSBgbnBtLWJhY2t1cC0ke3RpbWVzdGFtcH1gO1xuICAgICAgY29uc3QgYmFja3VwUGF0aCA9IHBhdGguam9pbihucG1CYWNrdXBzRGlyLCBiYWNrdXBOYW1lKTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmluZm8oYFtCYWNrdXBNYW5hZ2VyXSBDcmVhdGluZyBucG0gYmFja3VwIGF0OiAke2JhY2t1cFBhdGh9YCk7XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSBiYWNrdXAgZGlyZWN0b3J5XG4gICAgICBhd2FpdCBmcy5ta2RpcihiYWNrdXBQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIFxuICAgICAgLy8gQ29weSB0aGUgbnBtIHBhY2thZ2UgZGlyZWN0b3J5XG4gICAgICBhd2FpdCB0aGlzLmNvcHlEaXJlY3RvcnkobnBtR2xvYmFsUGF0aCwgcGF0aC5qb2luKGJhY2t1cFBhdGgsICdwYWNrYWdlJykpO1xuICAgICAgXG4gICAgICAvLyBTYXZlIGJhY2t1cCBtZXRhZGF0YVxuICAgICAgY29uc3QgbWV0YWRhdGEgPSB7XG4gICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgbnBtR2xvYmFsUGF0aCxcbiAgICAgICAgaW5zdGFsbGF0aW9uVHlwZTogJ25wbScsXG4gICAgICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9O1xuICAgICAgXG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICAgIHBhdGguam9pbihiYWNrdXBQYXRoLCAnYmFja3VwLW1ldGFkYXRhLmpzb24nKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkobWV0YWRhdGEsIG51bGwsIDIpXG4gICAgICApO1xuICAgICAgXG4gICAgICAvLyBVcGRhdGUgbWFuaWZlc3RcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlTnBtQmFja3VwTWFuaWZlc3QobnBtQmFja3Vwc0Rpciwge1xuICAgICAgICBiYWNrdXBOYW1lLFxuICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHBhdGg6IGJhY2t1cFBhdGhcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBDbGVhbnVwIG9sZCBucG0gYmFja3VwcyAoa2VlcCBsYXN0IDMpXG4gICAgICBhd2FpdCB0aGlzLmNsZWFudXBPbGROcG1CYWNrdXBzKG5wbUJhY2t1cHNEaXIsIDMpO1xuICAgICAgXG4gICAgICByZXR1cm4gYmFja3VwUGF0aDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdbQmFja3VwTWFuYWdlcl0gRmFpbGVkIHRvIGNyZWF0ZSBucG0gYmFja3VwOicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIENvcHkgZGlyZWN0b3J5IHJlY3Vyc2l2ZWx5IHdpdGggcHJvZ3Jlc3MgcmVwb3J0aW5nXG4gICAqIEBkZXByZWNhdGVkIFVzZSBGaWxlT3BlcmF0aW9ucy5jb3B5RGlyZWN0b3J5IGluc3RlYWRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY29weURpcmVjdG9yeShzcmM6IHN0cmluZywgZGVzdDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgRmlsZU9wZXJhdGlvbnMuY29weURpcmVjdG9yeShzcmMsIGRlc3QsIHtcbiAgICAgIGV4Y2x1ZGVQYXR0ZXJuczogWycuZ2l0J10sXG4gICAgICBvblByb2dyZXNzOiAoY29waWVkLCB0b3RhbCwgZmlsZSkgPT4ge1xuICAgICAgICBpZiAoY29waWVkICUgNTAgPT09IDApIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYFtCYWNrdXBNYW5hZ2VyXSBDb3B5aW5nOiAke2NvcGllZH0vJHt0b3RhbH0gZmlsZXNgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogVXBkYXRlIG5wbSBiYWNrdXAgbWFuaWZlc3RcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlTnBtQmFja3VwTWFuaWZlc3QobnBtQmFja3Vwc0Rpcjogc3RyaW5nLCBiYWNrdXBJbmZvOiB7XG4gICAgYmFja3VwTmFtZTogc3RyaW5nO1xuICAgIHRpbWVzdGFtcDogc3RyaW5nO1xuICAgIHZlcnNpb24/OiBzdHJpbmc7XG4gICAgcGF0aDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWFuaWZlc3RQYXRoID0gcGF0aC5qb2luKG5wbUJhY2t1cHNEaXIsICdtYW5pZmVzdC5qc29uJyk7XG4gICAgXG4gICAgbGV0IG1hbmlmZXN0OiB7IGJhY2t1cHM6IEFycmF5PHtcbiAgICAgIGJhY2t1cE5hbWU6IHN0cmluZztcbiAgICAgIHRpbWVzdGFtcDogc3RyaW5nO1xuICAgICAgdmVyc2lvbj86IHN0cmluZztcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICB9PiB9ID0geyBiYWNrdXBzOiBbXSB9O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUobWFuaWZlc3RQYXRoLCAndXRmLTgnKTtcbiAgICAgIG1hbmlmZXN0ID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZpbGUgZG9lc24ndCBleGlzdCBvciBpcyBpbnZhbGlkLCB1c2UgZGVmYXVsdFxuICAgIH1cbiAgICBcbiAgICAvLyBBZGQgbmV3IGJhY2t1cCB0byBiZWdpbm5pbmcgb2YgbGlzdFxuICAgIG1hbmlmZXN0LmJhY2t1cHMudW5zaGlmdChiYWNrdXBJbmZvKTtcbiAgICBcbiAgICAvLyBLZWVwIG9ubHkgbGFzdCAxMCBlbnRyaWVzIGluIG1hbmlmZXN0XG4gICAgbWFuaWZlc3QuYmFja3VwcyA9IG1hbmlmZXN0LmJhY2t1cHMuc2xpY2UoMCwgMTApO1xuICAgIFxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShtYW5pZmVzdFBhdGgsIEpTT04uc3RyaW5naWZ5KG1hbmlmZXN0LCBudWxsLCAyKSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhbiB1cCBvbGQgbnBtIGJhY2t1cHNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY2xlYW51cE9sZE5wbUJhY2t1cHMobnBtQmFja3Vwc0Rpcjogc3RyaW5nLCBrZWVwQ291bnQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZnMucmVhZGRpcihucG1CYWNrdXBzRGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgICBjb25zdCBiYWNrdXBEaXJzID0gZW50cmllc1xuICAgICAgICAuZmlsdGVyKGUgPT4gZS5pc0RpcmVjdG9yeSgpICYmIGUubmFtZS5zdGFydHNXaXRoKCducG0tYmFja3VwLScpKVxuICAgICAgICAubWFwKGUgPT4gZS5uYW1lKVxuICAgICAgICAuc29ydCgpXG4gICAgICAgIC5yZXZlcnNlKCk7XG4gICAgICBcbiAgICAgIC8vIFJlbW92ZSBvbGQgYmFja3Vwc1xuICAgICAgY29uc3QgdG9SZW1vdmUgPSBiYWNrdXBEaXJzLnNsaWNlKGtlZXBDb3VudCk7XG4gICAgICBmb3IgKGNvbnN0IGRpciBvZiB0b1JlbW92ZSkge1xuICAgICAgICBjb25zdCBkaXJQYXRoID0gcGF0aC5qb2luKG5wbUJhY2t1cHNEaXIsIGRpcik7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBbQmFja3VwTWFuYWdlcl0gUmVtb3Zpbmcgb2xkIG5wbSBiYWNrdXA6ICR7ZGlyfWApO1xuICAgICAgICBhd2FpdCBmcy5ybShkaXJQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbQmFja3VwTWFuYWdlcl0gRmFpbGVkIHRvIGNsZWFudXAgb2xkIG5wbSBiYWNrdXBzOicsIGVycm9yKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBMaXN0IGF2YWlsYWJsZSBiYWNrdXBzXG4gICAqL1xuICBhc3luYyBsaXN0QmFja3VwcygpOiBQcm9taXNlPEJhY2t1cEluZm9bXT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZnMucmVhZGRpcih0aGlzLmJhY2t1cHNEaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IGJhY2t1cHM6IEJhY2t1cEluZm9bXSA9IFtdO1xuICAgICAgXG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkgJiYgZW50cnkubmFtZS5zdGFydHNXaXRoKCdiYWNrdXAtJykpIHtcbiAgICAgICAgICBjb25zdCBiYWNrdXBQYXRoID0gcGF0aC5qb2luKHRoaXMuYmFja3Vwc0RpciwgZW50cnkubmFtZSk7XG4gICAgICAgICAgY29uc3QgdGltZXN0YW1wID0gZW50cnkubmFtZS5yZXBsYWNlKCdiYWNrdXAtJywgJycpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFRyeSB0byByZWFkIG1ldGFkYXRhXG4gICAgICAgICAgbGV0IHZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGFQYXRoID0gcGF0aC5qb2luKGJhY2t1cFBhdGgsICdiYWNrdXAtbWV0YWRhdGEuanNvbicpO1xuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKG1ldGFkYXRhUGF0aCwgJ3V0Zi04JykpO1xuICAgICAgICAgICAgdmVyc2lvbiA9IG1ldGFkYXRhLnZlcnNpb247XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBObyBtZXRhZGF0YSBmaWxlLCB0aGF0J3Mgb2theVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBiYWNrdXBzLnB1c2goe1xuICAgICAgICAgICAgcGF0aDogYmFja3VwUGF0aCxcbiAgICAgICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgICAgIHZlcnNpb25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTb3J0IGJ5IHRpbWVzdGFtcCBkZXNjZW5kaW5nIChuZXdlc3QgZmlyc3QpXG4gICAgICByZXR1cm4gYmFja3Vwcy5zb3J0KChhLCBiKSA9PiBiLnRpbWVzdGFtcC5sb2NhbGVDb21wYXJlKGEudGltZXN0YW1wKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHRoZSBtb3N0IHJlY2VudCBiYWNrdXBcbiAgICovXG4gIGFzeW5jIGdldExhdGVzdEJhY2t1cCgpOiBQcm9taXNlPEJhY2t1cEluZm8gfCBudWxsPiB7XG4gICAgY29uc3QgYmFja3VwcyA9IGF3YWl0IHRoaXMubGlzdEJhY2t1cHMoKTtcbiAgICByZXR1cm4gYmFja3Vwcy5sZW5ndGggPiAwID8gYmFja3Vwc1swXSA6IG51bGw7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBSZXN0b3JlIGZyb20gYSBiYWNrdXBcbiAgICovXG4gIGFzeW5jIHJlc3RvcmVCYWNrdXAoYmFja3VwUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVmVyaWZ5IGJhY2t1cCBleGlzdHNcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKGJhY2t1cFBhdGgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWNrdXAgbm90IGZvdW5kOiAke2JhY2t1cFBhdGh9YCk7XG4gICAgfVxuICAgIFxuICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIHRoZSBjdXJyZW50IHN0YXRlXG4gICAgY29uc3QgdGVtcERpciA9IHBhdGguam9pbih0aGlzLmJhY2t1cHNEaXIsICd0ZW1wLWN1cnJlbnQnKTtcbiAgICBhd2FpdCBmcy5ta2Rpcih0ZW1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBcbiAgICAvLyBNb3ZlIGN1cnJlbnQgZmlsZXMgdG8gdGVtcCAoZXhjZXB0IC5naXQgYW5kIG5vZGVfbW9kdWxlcylcbiAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZnMucmVhZGRpcih0aGlzLnJvb3REaXIpO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgaWYgKGVudHJ5ICE9PSAnLmdpdCcgJiYgZW50cnkgIT09ICdub2RlX21vZHVsZXMnICYmIGVudHJ5ICE9PSAnZGlzdCcpIHtcbiAgICAgICAgY29uc3Qgc291cmNlUGF0aCA9IHBhdGguam9pbih0aGlzLnJvb3REaXIsIGVudHJ5KTtcbiAgICAgICAgY29uc3QgZGVzdFBhdGggPSBwYXRoLmpvaW4odGVtcERpciwgZW50cnkpO1xuICAgICAgICBhd2FpdCBmcy5yZW5hbWUoc291cmNlUGF0aCwgZGVzdFBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBDb3B5IGJhY2t1cCBmaWxlcyB0byByb290XG4gICAgY29uc3QgYmFja3VwRW50cmllcyA9IGF3YWl0IGZzLnJlYWRkaXIoYmFja3VwUGF0aCk7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBiYWNrdXBFbnRyaWVzKSB7XG4gICAgICBpZiAoZW50cnkgIT09ICdiYWNrdXAtbWV0YWRhdGEuanNvbicgJiYgZW50cnkgIT09ICcuZ2l0Jykge1xuICAgICAgICBjb25zdCBzb3VyY2VQYXRoID0gcGF0aC5qb2luKGJhY2t1cFBhdGgsIGVudHJ5KTtcbiAgICAgICAgY29uc3QgZGVzdFBhdGggPSBwYXRoLmpvaW4odGhpcy5yb290RGlyLCBlbnRyeSk7XG4gICAgICAgIGF3YWl0IHNhZmVFeGVjKCdjcCcsIFsnLXInLCBzb3VyY2VQYXRoLCBkZXN0UGF0aF0pO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBDbGVhbiB1cCB0ZW1wIGRpcmVjdG9yeVxuICAgIGF3YWl0IGZzLnJtKHRlbXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENsZWFuIHVwIG9sZCBiYWNrdXBzIChrZWVwIHRoZSA1IG1vc3QgcmVjZW50KVxuICAgKi9cbiAgYXN5bmMgY2xlYW51cE9sZEJhY2t1cHMoa2VlcENvdW50OiBudW1iZXIgPSA1KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBiYWNrdXBzID0gYXdhaXQgdGhpcy5saXN0QmFja3VwcygpO1xuICAgIGxldCBkZWxldGVkQ291bnQgPSAwO1xuICAgIFxuICAgIGlmIChiYWNrdXBzLmxlbmd0aCA+IGtlZXBDb3VudCkge1xuICAgICAgY29uc3QgYmFja3Vwc1RvRGVsZXRlID0gYmFja3Vwcy5zbGljZShrZWVwQ291bnQpO1xuICAgICAgXG4gICAgICBmb3IgKGNvbnN0IGJhY2t1cCBvZiBiYWNrdXBzVG9EZWxldGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBmcy5ybShiYWNrdXAucGF0aCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgIGRlbGV0ZWRDb3VudCsrO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSBiYWNrdXAgJHtiYWNrdXAucGF0aH06YCwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBkZWxldGVkQ291bnQ7XG4gIH1cbn0iXX0=
@@ -31,6 +31,25 @@ export declare class UpdateManager {
31
31
  rollbackUpdate(force?: boolean, personaIndicator?: string): Promise<{
32
32
  text: string;
33
33
  }>;
34
+ /**
35
+ * Update npm installation
36
+ */
37
+ private updateNpmInstallation;
38
+ /**
39
+ * Rollback npm installation
40
+ */
41
+ private rollbackNpmInstallation;
42
+ /**
43
+ * Copy directory recursively with progress reporting
44
+ * @deprecated Use FileOperations.copyDirectory instead
45
+ */
46
+ private copyDirectory;
47
+ /**
48
+ * Convert npm installation to git installation
49
+ */
50
+ convertToGitInstallation(targetDir?: string, confirm?: boolean, personaIndicator?: string): Promise<{
51
+ text: string;
52
+ }>;
34
53
  /**
35
54
  * Get current server status
36
55
  */
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateManager.d.ts","sourceRoot":"","sources":["../../src/update/UpdateManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,CAAC,EAAE,MAAM;IAQ5B;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAWlD;;OAEG;IACG,YAAY,CAAC,YAAY,GAAE,OAAc,EAAE,gBAAgB,GAAE,MAAW,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IA4H1G;;OAEG;IACG,cAAc,CAAC,KAAK,GAAE,OAAe,EAAE,gBAAgB,GAAE,MAAW,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAuEtG;;OAEG;IACG,eAAe,CAAC,gBAAgB,GAAE,MAAW,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAyEhF"}
1
+ {"version":3,"file":"UpdateManager.d.ts","sourceRoot":"","sources":["../../src/update/UpdateManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,CAAC,EAAE,MAAM;IAQ5B;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAWlD;;OAEG;IACG,YAAY,CAAC,YAAY,GAAE,OAAc,EAAE,gBAAgB,GAAE,MAAW,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAsI1G;;OAEG;IACG,cAAc,CAAC,KAAK,GAAE,OAAe,EAAE,gBAAgB,GAAE,MAAW,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IA+EtG;;OAEG;YACW,qBAAqB;IAgJnC;;OAEG;YACW,uBAAuB;IAsKrC;;;OAGG;YACW,aAAa;IAS3B;;OAEG;IACG,wBAAwB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe,EAAE,gBAAgB,GAAE,MAAW,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IA0KtI;;OAEG;IACG,eAAe,CAAC,gBAAgB,GAAE,MAAW,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAgFhF"}