pnpm-catalog-updates 0.5.7 → 0.6.5
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/bin/pcu.js +1 -1
- package/dist/index.js +9559 -32
- package/dist/index.js.map +1 -1
- package/package.json +61 -103
- package/src/cli/commands/checkCommand.ts +227 -0
- package/src/cli/commands/initCommand.ts +394 -0
- package/src/cli/commands/securityCommand.ts +569 -0
- package/src/cli/commands/updateCommand.ts +245 -0
- package/src/cli/formatters/outputFormatter.ts +830 -0
- package/src/cli/formatters/progressBar.ts +700 -0
- package/src/cli/index.ts +565 -0
- package/src/cli/interactive/interactivePrompts.ts +517 -0
- package/src/cli/options/globalOptions.ts +380 -0
- package/src/cli/options/index.ts +5 -0
- package/src/cli/themes/colorTheme.ts +379 -0
- package/src/cli/validators/commandValidator.ts +395 -0
- package/src/cli/validators/index.ts +5 -0
- package/src/index.ts +4 -0
- package/LICENSE +0 -21
- package/README.ja.md +0 -587
- package/README.md +0 -694
- package/README.zh-CN.md +0 -634
- package/dist/application/services/CatalogUpdateService.d.ts +0 -209
- package/dist/application/services/CatalogUpdateService.d.ts.map +0 -1
- package/dist/application/services/CatalogUpdateService.js +0 -839
- package/dist/application/services/CatalogUpdateService.js.map +0 -1
- package/dist/application/services/WorkspaceService.d.ts +0 -139
- package/dist/application/services/WorkspaceService.d.ts.map +0 -1
- package/dist/application/services/WorkspaceService.js +0 -340
- package/dist/application/services/WorkspaceService.js.map +0 -1
- package/dist/cli/commands/CheckCommand.d.ts +0 -40
- package/dist/cli/commands/CheckCommand.d.ts.map +0 -1
- package/dist/cli/commands/CheckCommand.js +0 -177
- package/dist/cli/commands/CheckCommand.js.map +0 -1
- package/dist/cli/commands/InitCommand.d.ts +0 -53
- package/dist/cli/commands/InitCommand.d.ts.map +0 -1
- package/dist/cli/commands/InitCommand.js +0 -338
- package/dist/cli/commands/InitCommand.js.map +0 -1
- package/dist/cli/commands/SecurityCommand.d.ts +0 -113
- package/dist/cli/commands/SecurityCommand.d.ts.map +0 -1
- package/dist/cli/commands/SecurityCommand.js +0 -410
- package/dist/cli/commands/SecurityCommand.js.map +0 -1
- package/dist/cli/commands/UpdateCommand.d.ts +0 -44
- package/dist/cli/commands/UpdateCommand.d.ts.map +0 -1
- package/dist/cli/commands/UpdateCommand.js +0 -189
- package/dist/cli/commands/UpdateCommand.js.map +0 -1
- package/dist/cli/formatters/OutputFormatter.d.ts +0 -116
- package/dist/cli/formatters/OutputFormatter.d.ts.map +0 -1
- package/dist/cli/formatters/OutputFormatter.js +0 -664
- package/dist/cli/formatters/OutputFormatter.js.map +0 -1
- package/dist/cli/formatters/ProgressBar.d.ts +0 -195
- package/dist/cli/formatters/ProgressBar.d.ts.map +0 -1
- package/dist/cli/formatters/ProgressBar.js +0 -622
- package/dist/cli/formatters/ProgressBar.js.map +0 -1
- package/dist/cli/index.d.ts +0 -12
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -492
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/interactive/InteractivePrompts.d.ts +0 -85
- package/dist/cli/interactive/InteractivePrompts.d.ts.map +0 -1
- package/dist/cli/interactive/InteractivePrompts.js +0 -434
- package/dist/cli/interactive/InteractivePrompts.js.map +0 -1
- package/dist/cli/options/GlobalOptions.d.ts +0 -117
- package/dist/cli/options/GlobalOptions.d.ts.map +0 -1
- package/dist/cli/options/GlobalOptions.js +0 -278
- package/dist/cli/options/GlobalOptions.js.map +0 -1
- package/dist/cli/options/index.d.ts +0 -5
- package/dist/cli/options/index.d.ts.map +0 -1
- package/dist/cli/options/index.js +0 -5
- package/dist/cli/options/index.js.map +0 -1
- package/dist/cli/themes/ColorTheme.d.ts +0 -211
- package/dist/cli/themes/ColorTheme.d.ts.map +0 -1
- package/dist/cli/themes/ColorTheme.js +0 -267
- package/dist/cli/themes/ColorTheme.js.map +0 -1
- package/dist/cli/validators/CommandValidator.d.ts +0 -60
- package/dist/cli/validators/CommandValidator.d.ts.map +0 -1
- package/dist/cli/validators/CommandValidator.js +0 -319
- package/dist/cli/validators/CommandValidator.js.map +0 -1
- package/dist/cli/validators/index.d.ts +0 -5
- package/dist/cli/validators/index.d.ts.map +0 -1
- package/dist/cli/validators/index.js +0 -5
- package/dist/cli/validators/index.js.map +0 -1
- package/dist/common/config/Config.d.ts +0 -142
- package/dist/common/config/Config.d.ts.map +0 -1
- package/dist/common/config/Config.js +0 -382
- package/dist/common/config/Config.js.map +0 -1
- package/dist/common/config/ConfigLoader.d.ts +0 -49
- package/dist/common/config/ConfigLoader.d.ts.map +0 -1
- package/dist/common/config/ConfigLoader.js +0 -180
- package/dist/common/config/ConfigLoader.js.map +0 -1
- package/dist/common/config/PackageFilterConfig.d.ts +0 -56
- package/dist/common/config/PackageFilterConfig.d.ts.map +0 -1
- package/dist/common/config/PackageFilterConfig.js +0 -94
- package/dist/common/config/PackageFilterConfig.js.map +0 -1
- package/dist/common/config/index.d.ts +0 -8
- package/dist/common/config/index.d.ts.map +0 -1
- package/dist/common/config/index.js +0 -8
- package/dist/common/config/index.js.map +0 -1
- package/dist/common/error-handling/ErrorTracker.d.ts +0 -48
- package/dist/common/error-handling/ErrorTracker.d.ts.map +0 -1
- package/dist/common/error-handling/ErrorTracker.js +0 -93
- package/dist/common/error-handling/ErrorTracker.js.map +0 -1
- package/dist/common/error-handling/UserFriendlyErrorHandler.d.ts +0 -74
- package/dist/common/error-handling/UserFriendlyErrorHandler.d.ts.map +0 -1
- package/dist/common/error-handling/UserFriendlyErrorHandler.js +0 -703
- package/dist/common/error-handling/UserFriendlyErrorHandler.js.map +0 -1
- package/dist/common/error-handling/index.d.ts +0 -11
- package/dist/common/error-handling/index.d.ts.map +0 -1
- package/dist/common/error-handling/index.js +0 -9
- package/dist/common/error-handling/index.js.map +0 -1
- package/dist/common/logger/Logger.d.ts +0 -110
- package/dist/common/logger/Logger.d.ts.map +0 -1
- package/dist/common/logger/Logger.js +0 -289
- package/dist/common/logger/Logger.js.map +0 -1
- package/dist/common/logger/index.d.ts +0 -6
- package/dist/common/logger/index.d.ts.map +0 -1
- package/dist/common/logger/index.js +0 -6
- package/dist/common/logger/index.js.map +0 -1
- package/dist/common/types/cli.d.ts +0 -265
- package/dist/common/types/cli.d.ts.map +0 -1
- package/dist/common/types/cli.js +0 -5
- package/dist/common/types/cli.js.map +0 -1
- package/dist/common/types/core.d.ts +0 -270
- package/dist/common/types/core.d.ts.map +0 -1
- package/dist/common/types/core.js +0 -32
- package/dist/common/types/core.js.map +0 -1
- package/dist/common/types/index.d.ts +0 -8
- package/dist/common/types/index.d.ts.map +0 -1
- package/dist/common/types/index.js +0 -8
- package/dist/common/types/index.js.map +0 -1
- package/dist/common/utils/VersionChecker.d.ts +0 -54
- package/dist/common/utils/VersionChecker.d.ts.map +0 -1
- package/dist/common/utils/VersionChecker.js +0 -180
- package/dist/common/utils/VersionChecker.js.map +0 -1
- package/dist/common/utils/async.d.ts +0 -74
- package/dist/common/utils/async.d.ts.map +0 -1
- package/dist/common/utils/async.js +0 -228
- package/dist/common/utils/async.js.map +0 -1
- package/dist/common/utils/format.d.ts +0 -32
- package/dist/common/utils/format.d.ts.map +0 -1
- package/dist/common/utils/format.js +0 -121
- package/dist/common/utils/format.js.map +0 -1
- package/dist/common/utils/git.d.ts +0 -44
- package/dist/common/utils/git.d.ts.map +0 -1
- package/dist/common/utils/git.js +0 -147
- package/dist/common/utils/git.js.map +0 -1
- package/dist/common/utils/index.d.ts +0 -12
- package/dist/common/utils/index.d.ts.map +0 -1
- package/dist/common/utils/index.js +0 -12
- package/dist/common/utils/index.js.map +0 -1
- package/dist/common/utils/string.d.ts +0 -56
- package/dist/common/utils/string.d.ts.map +0 -1
- package/dist/common/utils/string.js +0 -134
- package/dist/common/utils/string.js.map +0 -1
- package/dist/common/utils/validation.d.ts +0 -88
- package/dist/common/utils/validation.d.ts.map +0 -1
- package/dist/common/utils/validation.js +0 -308
- package/dist/common/utils/validation.js.map +0 -1
- package/dist/domain/entities/Catalog.d.ts +0 -117
- package/dist/domain/entities/Catalog.d.ts.map +0 -1
- package/dist/domain/entities/Catalog.js +0 -240
- package/dist/domain/entities/Catalog.js.map +0 -1
- package/dist/domain/entities/Package.d.ts +0 -143
- package/dist/domain/entities/Package.d.ts.map +0 -1
- package/dist/domain/entities/Package.js +0 -272
- package/dist/domain/entities/Package.js.map +0 -1
- package/dist/domain/entities/Workspace.d.ts +0 -95
- package/dist/domain/entities/Workspace.d.ts.map +0 -1
- package/dist/domain/entities/Workspace.js +0 -173
- package/dist/domain/entities/Workspace.js.map +0 -1
- package/dist/domain/repositories/WorkspaceRepository.d.ts +0 -41
- package/dist/domain/repositories/WorkspaceRepository.d.ts.map +0 -1
- package/dist/domain/repositories/WorkspaceRepository.js +0 -8
- package/dist/domain/repositories/WorkspaceRepository.js.map +0 -1
- package/dist/domain/value-objects/CatalogCollection.d.ts +0 -106
- package/dist/domain/value-objects/CatalogCollection.d.ts.map +0 -1
- package/dist/domain/value-objects/CatalogCollection.js +0 -230
- package/dist/domain/value-objects/CatalogCollection.js.map +0 -1
- package/dist/domain/value-objects/PackageCollection.d.ts +0 -122
- package/dist/domain/value-objects/PackageCollection.d.ts.map +0 -1
- package/dist/domain/value-objects/PackageCollection.js +0 -263
- package/dist/domain/value-objects/PackageCollection.js.map +0 -1
- package/dist/domain/value-objects/Version.d.ts +0 -141
- package/dist/domain/value-objects/Version.d.ts.map +0 -1
- package/dist/domain/value-objects/Version.js +0 -268
- package/dist/domain/value-objects/Version.js.map +0 -1
- package/dist/domain/value-objects/WorkspaceConfig.d.ts +0 -144
- package/dist/domain/value-objects/WorkspaceConfig.d.ts.map +0 -1
- package/dist/domain/value-objects/WorkspaceConfig.js +0 -357
- package/dist/domain/value-objects/WorkspaceConfig.js.map +0 -1
- package/dist/domain/value-objects/WorkspaceId.d.ts +0 -51
- package/dist/domain/value-objects/WorkspaceId.d.ts.map +0 -1
- package/dist/domain/value-objects/WorkspaceId.js +0 -104
- package/dist/domain/value-objects/WorkspaceId.js.map +0 -1
- package/dist/domain/value-objects/WorkspacePath.d.ts +0 -75
- package/dist/domain/value-objects/WorkspacePath.d.ts.map +0 -1
- package/dist/domain/value-objects/WorkspacePath.js +0 -128
- package/dist/domain/value-objects/WorkspacePath.js.map +0 -1
- package/dist/index.d.ts +0 -25
- package/dist/index.d.ts.map +0 -1
- package/dist/infrastructure/cache/Cache.d.ts +0 -161
- package/dist/infrastructure/cache/Cache.d.ts.map +0 -1
- package/dist/infrastructure/cache/Cache.js +0 -398
- package/dist/infrastructure/cache/Cache.js.map +0 -1
- package/dist/infrastructure/cache/index.d.ts +0 -6
- package/dist/infrastructure/cache/index.d.ts.map +0 -1
- package/dist/infrastructure/cache/index.js +0 -6
- package/dist/infrastructure/cache/index.js.map +0 -1
- package/dist/infrastructure/external-services/NpmRegistryService.d.ts +0 -153
- package/dist/infrastructure/external-services/NpmRegistryService.d.ts.map +0 -1
- package/dist/infrastructure/external-services/NpmRegistryService.js +0 -511
- package/dist/infrastructure/external-services/NpmRegistryService.js.map +0 -1
- package/dist/infrastructure/file-system/FileSystemService.d.ts +0 -120
- package/dist/infrastructure/file-system/FileSystemService.d.ts.map +0 -1
- package/dist/infrastructure/file-system/FileSystemService.js +0 -663
- package/dist/infrastructure/file-system/FileSystemService.js.map +0 -1
- package/dist/infrastructure/repositories/FileWorkspaceRepository.d.ts +0 -57
- package/dist/infrastructure/repositories/FileWorkspaceRepository.d.ts.map +0 -1
- package/dist/infrastructure/repositories/FileWorkspaceRepository.js +0 -179
- package/dist/infrastructure/repositories/FileWorkspaceRepository.js.map +0 -1
- package/dist/infrastructure/utils/NpmrcParser.d.ts +0 -40
- package/dist/infrastructure/utils/NpmrcParser.d.ts.map +0 -1
- package/dist/infrastructure/utils/NpmrcParser.js +0 -157
- package/dist/infrastructure/utils/NpmrcParser.js.map +0 -1
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Version Checker Utility
|
|
3
|
-
*
|
|
4
|
-
* Checks for newer versions of the PCU tool and provides update prompts.
|
|
5
|
-
*/
|
|
6
|
-
import chalk from 'chalk';
|
|
7
|
-
import { exec } from 'child_process';
|
|
8
|
-
import { promisify } from 'util';
|
|
9
|
-
import { InteractivePrompts } from '../../cli/interactive/InteractivePrompts.js';
|
|
10
|
-
const execAsync = promisify(exec);
|
|
11
|
-
export class VersionChecker {
|
|
12
|
-
static DEFAULT_TIMEOUT = 5000; // 5 seconds
|
|
13
|
-
static DEFAULT_PACKAGE = 'pnpm-catalog-updates';
|
|
14
|
-
/**
|
|
15
|
-
* Check if current version is the latest
|
|
16
|
-
*/
|
|
17
|
-
static async checkVersion(currentVersion, options = {}) {
|
|
18
|
-
const { skipPrompt = false, timeout = this.DEFAULT_TIMEOUT, packageName = this.DEFAULT_PACKAGE, } = options;
|
|
19
|
-
try {
|
|
20
|
-
// Get latest version from npm with timeout
|
|
21
|
-
const latestVersion = await this.getLatestVersion(packageName, timeout);
|
|
22
|
-
const isLatest = this.compareVersions(currentVersion, latestVersion) >= 0;
|
|
23
|
-
return {
|
|
24
|
-
isLatest,
|
|
25
|
-
currentVersion,
|
|
26
|
-
latestVersion,
|
|
27
|
-
shouldPrompt: !isLatest && !skipPrompt,
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
catch (error) {
|
|
31
|
-
console.warn(chalk.yellow('⚠️ Failed to check for updates:'), error);
|
|
32
|
-
return {
|
|
33
|
-
isLatest: true, // Assume latest if check fails
|
|
34
|
-
currentVersion,
|
|
35
|
-
latestVersion: currentVersion,
|
|
36
|
-
shouldPrompt: false,
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Prompt user for update and execute if confirmed
|
|
42
|
-
*/
|
|
43
|
-
static async promptAndUpdate(versionResult) {
|
|
44
|
-
if (!versionResult.shouldPrompt) {
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
console.log();
|
|
48
|
-
console.log(chalk.cyan('📦 Update Available!'));
|
|
49
|
-
console.log(chalk.gray(`Current version: ${versionResult.currentVersion} → Latest: ${versionResult.latestVersion}`));
|
|
50
|
-
console.log();
|
|
51
|
-
const interactive = new InteractivePrompts();
|
|
52
|
-
const shouldUpdate = await interactive.confirmUpdate('Would you like to update to the latest version?');
|
|
53
|
-
if (shouldUpdate) {
|
|
54
|
-
console.log(chalk.blue('🔄 Updating pnpm-catalog-updates...'));
|
|
55
|
-
try {
|
|
56
|
-
await this.performUpdate();
|
|
57
|
-
console.log(chalk.green('✅ Successfully updated! Please restart the command.'));
|
|
58
|
-
return true;
|
|
59
|
-
}
|
|
60
|
-
catch (error) {
|
|
61
|
-
console.error(chalk.red('❌ Update failed:'), error);
|
|
62
|
-
console.log(chalk.gray('You can manually update with: npm install -g pnpm-catalog-updates@latest'));
|
|
63
|
-
return false;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Get latest version from npm registry
|
|
70
|
-
*/
|
|
71
|
-
static async getLatestVersion(packageName, timeout) {
|
|
72
|
-
const command = `npm view ${packageName} version`;
|
|
73
|
-
try {
|
|
74
|
-
const { stdout } = await this.executeWithTimeout(command, timeout);
|
|
75
|
-
return stdout.trim();
|
|
76
|
-
}
|
|
77
|
-
catch (error) {
|
|
78
|
-
// Fallback: try with different npm commands
|
|
79
|
-
try {
|
|
80
|
-
const { stdout } = await this.executeWithTimeout(`npm info ${packageName} version`, timeout);
|
|
81
|
-
return stdout.trim();
|
|
82
|
-
}
|
|
83
|
-
catch (fallbackError) {
|
|
84
|
-
throw new Error(`Failed to get latest version: ${error}`);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Execute update command
|
|
90
|
-
*/
|
|
91
|
-
static async performUpdate() {
|
|
92
|
-
// Try global update first, then fallback to different methods
|
|
93
|
-
const commands = [
|
|
94
|
-
'npm install -g pnpm-catalog-updates@latest',
|
|
95
|
-
'npm update -g pnpm-catalog-updates',
|
|
96
|
-
'pnpm add -g pnpm-catalog-updates@latest',
|
|
97
|
-
'yarn global add pnpm-catalog-updates@latest',
|
|
98
|
-
];
|
|
99
|
-
for (const command of commands) {
|
|
100
|
-
try {
|
|
101
|
-
console.log(chalk.gray(`Executing: ${command}`));
|
|
102
|
-
await execAsync(command, { timeout: 30000 });
|
|
103
|
-
return; // Success
|
|
104
|
-
}
|
|
105
|
-
catch (error) {
|
|
106
|
-
console.warn(chalk.yellow(`Command failed: ${command}`));
|
|
107
|
-
// Continue to next command
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
throw new Error('All update commands failed');
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Execute command with timeout
|
|
114
|
-
*/
|
|
115
|
-
static async executeWithTimeout(command, timeout) {
|
|
116
|
-
return new Promise((resolve, reject) => {
|
|
117
|
-
const child = exec(command, { timeout }, (error, stdout, stderr) => {
|
|
118
|
-
if (error) {
|
|
119
|
-
reject(error);
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
resolve({ stdout, stderr });
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
// Additional timeout handling
|
|
126
|
-
const timer = setTimeout(() => {
|
|
127
|
-
child.kill();
|
|
128
|
-
reject(new Error(`Command timed out after ${timeout}ms`));
|
|
129
|
-
}, timeout);
|
|
130
|
-
child.on('exit', () => {
|
|
131
|
-
clearTimeout(timer);
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Compare two version strings
|
|
137
|
-
* Returns: -1 if a < b, 0 if a === b, 1 if a > b
|
|
138
|
-
*/
|
|
139
|
-
static compareVersions(a, b) {
|
|
140
|
-
const cleanA = a.replace(/^v/, '').replace(/[^0-9.]/g, '');
|
|
141
|
-
const cleanB = b.replace(/^v/, '').replace(/[^0-9.]/g, '');
|
|
142
|
-
const partsA = cleanA.split('.').map(Number);
|
|
143
|
-
const partsB = cleanB.split('.').map(Number);
|
|
144
|
-
const maxLength = Math.max(partsA.length, partsB.length);
|
|
145
|
-
for (let i = 0; i < maxLength; i++) {
|
|
146
|
-
const partA = partsA[i] || 0;
|
|
147
|
-
const partB = partsB[i] || 0;
|
|
148
|
-
if (partA < partB)
|
|
149
|
-
return -1;
|
|
150
|
-
if (partA > partB)
|
|
151
|
-
return 1;
|
|
152
|
-
}
|
|
153
|
-
return 0;
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Check if running in CI environment where prompts should be skipped
|
|
157
|
-
*/
|
|
158
|
-
static isCI() {
|
|
159
|
-
return !!(process.env.CI ||
|
|
160
|
-
process.env.CONTINUOUS_INTEGRATION ||
|
|
161
|
-
process.env.BUILD_NUMBER ||
|
|
162
|
-
process.env.RUN_ID ||
|
|
163
|
-
process.env.GITHUB_ACTIONS);
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Get update frequency preference from environment
|
|
167
|
-
*/
|
|
168
|
-
static shouldCheckForUpdates() {
|
|
169
|
-
const skipCheck = process.env.PCU_SKIP_VERSION_CHECK;
|
|
170
|
-
if (skipCheck === 'true' || skipCheck === '1') {
|
|
171
|
-
return false;
|
|
172
|
-
}
|
|
173
|
-
// Skip in CI environments by default
|
|
174
|
-
if (this.isCI()) {
|
|
175
|
-
return false;
|
|
176
|
-
}
|
|
177
|
-
return true;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
//# sourceMappingURL=VersionChecker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VersionChecker.js","sourceRoot":"","sources":["../../../src/common/utils/VersionChecker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Async Utilities
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Delay execution for specified milliseconds
|
|
6
|
-
*/
|
|
7
|
-
export declare function delay(ms: number): Promise<void>;
|
|
8
|
-
/**
|
|
9
|
-
* Retry a function with exponential backoff
|
|
10
|
-
*/
|
|
11
|
-
export declare function retry<T>(fn: () => Promise<T>, options?: {
|
|
12
|
-
maxAttempts?: number;
|
|
13
|
-
baseDelay?: number;
|
|
14
|
-
maxDelay?: number;
|
|
15
|
-
backoffFactor?: number;
|
|
16
|
-
shouldRetry?: (error: any) => boolean;
|
|
17
|
-
}): Promise<T>;
|
|
18
|
-
/**
|
|
19
|
-
* Execute functions in parallel with concurrency limit
|
|
20
|
-
*/
|
|
21
|
-
export declare function parallelLimit<T, R>(items: T[], fn: (item: T, index: number) => Promise<R>, limit?: number): Promise<R[]>;
|
|
22
|
-
/**
|
|
23
|
-
* Race with timeout
|
|
24
|
-
*/
|
|
25
|
-
export declare function timeout<T>(promise: Promise<T>, ms: number, message?: string): Promise<T>;
|
|
26
|
-
/**
|
|
27
|
-
* Debounce async function
|
|
28
|
-
*/
|
|
29
|
-
export declare function debounce<T extends (...args: any[]) => Promise<any>>(fn: T, ms: number): T;
|
|
30
|
-
/**
|
|
31
|
-
* Throttle async function
|
|
32
|
-
*/
|
|
33
|
-
export declare function throttle<T extends (...args: any[]) => Promise<any>>(fn: T, ms: number): T;
|
|
34
|
-
/**
|
|
35
|
-
* Create a cancelable promise
|
|
36
|
-
*/
|
|
37
|
-
export declare function cancelable<T>(promise: Promise<T>): {
|
|
38
|
-
promise: Promise<T>;
|
|
39
|
-
cancel: () => void;
|
|
40
|
-
};
|
|
41
|
-
/**
|
|
42
|
-
* Execute async function with circuit breaker pattern
|
|
43
|
-
*/
|
|
44
|
-
export declare class CircuitBreaker<T extends (...args: any[]) => Promise<any>> {
|
|
45
|
-
private fn;
|
|
46
|
-
private options;
|
|
47
|
-
private failures;
|
|
48
|
-
private lastFailureTime;
|
|
49
|
-
private state;
|
|
50
|
-
constructor(fn: T, options?: {
|
|
51
|
-
failureThreshold?: number;
|
|
52
|
-
recoveryTimeout?: number;
|
|
53
|
-
monitoringPeriod?: number;
|
|
54
|
-
});
|
|
55
|
-
execute(...args: Parameters<T>): Promise<ReturnType<T>>;
|
|
56
|
-
private onSuccess;
|
|
57
|
-
private onFailure;
|
|
58
|
-
getState(): string;
|
|
59
|
-
reset(): void;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Async queue with concurrency control
|
|
63
|
-
*/
|
|
64
|
-
export declare class AsyncQueue<T = any> {
|
|
65
|
-
private concurrency;
|
|
66
|
-
private queue;
|
|
67
|
-
private running;
|
|
68
|
-
constructor(concurrency?: number);
|
|
69
|
-
add<R>(fn: () => Promise<R>): Promise<R>;
|
|
70
|
-
private process;
|
|
71
|
-
size(): number;
|
|
72
|
-
clear(): void;
|
|
73
|
-
}
|
|
74
|
-
//# sourceMappingURL=async.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../../../src/common/utils/async.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Async Utilities
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Delay execution for specified milliseconds
|
|
6
|
-
*/
|
|
7
|
-
export function delay(ms) {
|
|
8
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Retry a function with exponential backoff
|
|
12
|
-
*/
|
|
13
|
-
export async function retry(fn, options = {}) {
|
|
14
|
-
const { maxAttempts = 3, baseDelay = 1000, maxDelay = 30000, backoffFactor = 2, shouldRetry = () => true, } = options;
|
|
15
|
-
let lastError;
|
|
16
|
-
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
17
|
-
try {
|
|
18
|
-
return await fn();
|
|
19
|
-
}
|
|
20
|
-
catch (error) {
|
|
21
|
-
lastError = error;
|
|
22
|
-
if (attempt === maxAttempts || !shouldRetry(error)) {
|
|
23
|
-
throw error;
|
|
24
|
-
}
|
|
25
|
-
const delayMs = Math.min(baseDelay * Math.pow(backoffFactor, attempt - 1), maxDelay);
|
|
26
|
-
await delay(delayMs);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
throw lastError;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Execute functions in parallel with concurrency limit
|
|
33
|
-
*/
|
|
34
|
-
export async function parallelLimit(items, fn, limit = 5) {
|
|
35
|
-
const results = new Array(items.length);
|
|
36
|
-
const executing = [];
|
|
37
|
-
for (let i = 0; i < items.length; i++) {
|
|
38
|
-
const promise = fn(items[i], i).then((result) => {
|
|
39
|
-
results[i] = result;
|
|
40
|
-
});
|
|
41
|
-
executing.push(promise);
|
|
42
|
-
if (executing.length >= limit) {
|
|
43
|
-
await Promise.race(executing);
|
|
44
|
-
executing.splice(executing.findIndex((p) => p === promise), 1);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
await Promise.all(executing);
|
|
48
|
-
return results;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Race with timeout
|
|
52
|
-
*/
|
|
53
|
-
export async function timeout(promise, ms, message) {
|
|
54
|
-
const timeoutPromise = new Promise((_, reject) => {
|
|
55
|
-
setTimeout(() => {
|
|
56
|
-
reject(new Error(message || `Operation timed out after ${ms}ms`));
|
|
57
|
-
}, ms);
|
|
58
|
-
});
|
|
59
|
-
return Promise.race([promise, timeoutPromise]);
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Debounce async function
|
|
63
|
-
*/
|
|
64
|
-
export function debounce(fn, ms) {
|
|
65
|
-
let timeoutId;
|
|
66
|
-
let latestResolve;
|
|
67
|
-
let latestReject;
|
|
68
|
-
return ((...args) => {
|
|
69
|
-
return new Promise((resolve, reject) => {
|
|
70
|
-
latestResolve = resolve;
|
|
71
|
-
latestReject = reject;
|
|
72
|
-
clearTimeout(timeoutId);
|
|
73
|
-
timeoutId = setTimeout(async () => {
|
|
74
|
-
try {
|
|
75
|
-
const result = await fn(...args);
|
|
76
|
-
latestResolve?.(result);
|
|
77
|
-
}
|
|
78
|
-
catch (error) {
|
|
79
|
-
latestReject?.(error);
|
|
80
|
-
}
|
|
81
|
-
}, ms);
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Throttle async function
|
|
87
|
-
*/
|
|
88
|
-
export function throttle(fn, ms) {
|
|
89
|
-
let inThrottle = false;
|
|
90
|
-
let lastResult;
|
|
91
|
-
return (async (...args) => {
|
|
92
|
-
if (!inThrottle) {
|
|
93
|
-
inThrottle = true;
|
|
94
|
-
lastResult = await fn(...args);
|
|
95
|
-
setTimeout(() => {
|
|
96
|
-
inThrottle = false;
|
|
97
|
-
}, ms);
|
|
98
|
-
}
|
|
99
|
-
return lastResult;
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Create a cancelable promise
|
|
104
|
-
*/
|
|
105
|
-
export function cancelable(promise) {
|
|
106
|
-
let isCanceled = false;
|
|
107
|
-
const cancelablePromise = new Promise((resolve, reject) => {
|
|
108
|
-
promise
|
|
109
|
-
.then((value) => {
|
|
110
|
-
if (!isCanceled) {
|
|
111
|
-
resolve(value);
|
|
112
|
-
}
|
|
113
|
-
})
|
|
114
|
-
.catch((error) => {
|
|
115
|
-
if (!isCanceled) {
|
|
116
|
-
reject(error);
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
return {
|
|
121
|
-
promise: cancelablePromise,
|
|
122
|
-
cancel: () => {
|
|
123
|
-
isCanceled = true;
|
|
124
|
-
},
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Execute async function with circuit breaker pattern
|
|
129
|
-
*/
|
|
130
|
-
export class CircuitBreaker {
|
|
131
|
-
fn;
|
|
132
|
-
options;
|
|
133
|
-
failures = 0;
|
|
134
|
-
lastFailureTime = 0;
|
|
135
|
-
state = 'closed';
|
|
136
|
-
constructor(fn, options = {}) {
|
|
137
|
-
this.fn = fn;
|
|
138
|
-
this.options = options;
|
|
139
|
-
const { failureThreshold = 5, recoveryTimeout = 60000, monitoringPeriod = 10000 } = options;
|
|
140
|
-
this.options = { failureThreshold, recoveryTimeout, monitoringPeriod };
|
|
141
|
-
}
|
|
142
|
-
async execute(...args) {
|
|
143
|
-
if (this.state === 'open') {
|
|
144
|
-
if (Date.now() - this.lastFailureTime > this.options.recoveryTimeout) {
|
|
145
|
-
this.state = 'half-open';
|
|
146
|
-
}
|
|
147
|
-
else {
|
|
148
|
-
throw new Error('Circuit breaker is open');
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
try {
|
|
152
|
-
const result = await this.fn(...args);
|
|
153
|
-
this.onSuccess();
|
|
154
|
-
return result;
|
|
155
|
-
}
|
|
156
|
-
catch (error) {
|
|
157
|
-
this.onFailure();
|
|
158
|
-
throw error;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
onSuccess() {
|
|
162
|
-
this.failures = 0;
|
|
163
|
-
this.state = 'closed';
|
|
164
|
-
}
|
|
165
|
-
onFailure() {
|
|
166
|
-
this.failures++;
|
|
167
|
-
this.lastFailureTime = Date.now();
|
|
168
|
-
if (this.failures >= this.options.failureThreshold) {
|
|
169
|
-
this.state = 'open';
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
getState() {
|
|
173
|
-
return this.state;
|
|
174
|
-
}
|
|
175
|
-
reset() {
|
|
176
|
-
this.failures = 0;
|
|
177
|
-
this.state = 'closed';
|
|
178
|
-
this.lastFailureTime = 0;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Async queue with concurrency control
|
|
183
|
-
*/
|
|
184
|
-
export class AsyncQueue {
|
|
185
|
-
concurrency;
|
|
186
|
-
queue = [];
|
|
187
|
-
running = 0;
|
|
188
|
-
constructor(concurrency = 1) {
|
|
189
|
-
this.concurrency = concurrency;
|
|
190
|
-
}
|
|
191
|
-
async add(fn) {
|
|
192
|
-
return new Promise((resolve, reject) => {
|
|
193
|
-
this.queue.push(async () => {
|
|
194
|
-
try {
|
|
195
|
-
const result = await fn();
|
|
196
|
-
resolve(result);
|
|
197
|
-
return result;
|
|
198
|
-
}
|
|
199
|
-
catch (error) {
|
|
200
|
-
reject(error);
|
|
201
|
-
throw error;
|
|
202
|
-
}
|
|
203
|
-
});
|
|
204
|
-
this.process();
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
async process() {
|
|
208
|
-
if (this.running >= this.concurrency || this.queue.length === 0) {
|
|
209
|
-
return;
|
|
210
|
-
}
|
|
211
|
-
this.running++;
|
|
212
|
-
const fn = this.queue.shift();
|
|
213
|
-
try {
|
|
214
|
-
await fn();
|
|
215
|
-
}
|
|
216
|
-
finally {
|
|
217
|
-
this.running--;
|
|
218
|
-
this.process();
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
size() {
|
|
222
|
-
return this.queue.length;
|
|
223
|
-
}
|
|
224
|
-
clear() {
|
|
225
|
-
this.queue.length = 0;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
//# sourceMappingURL=async.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"async.js","sourceRoot":"","sources":["../../../src/common/utils/async.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Format Utilities
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Format bytes to human readable string
|
|
6
|
-
*/
|
|
7
|
-
export declare function formatBytes(bytes: number, decimals?: number): string;
|
|
8
|
-
/**
|
|
9
|
-
* Format duration in milliseconds to human readable string
|
|
10
|
-
*/
|
|
11
|
-
export declare function formatDuration(ms: number): string;
|
|
12
|
-
/**
|
|
13
|
-
* Format number with thousands separator
|
|
14
|
-
*/
|
|
15
|
-
export declare function formatNumber(num: number, separator?: string): string;
|
|
16
|
-
/**
|
|
17
|
-
* Format percentage
|
|
18
|
-
*/
|
|
19
|
-
export declare function formatPercentage(value: number, total: number, decimals?: number): string;
|
|
20
|
-
/**
|
|
21
|
-
* Format timestamp to relative time
|
|
22
|
-
*/
|
|
23
|
-
export declare function formatRelativeTime(timestamp: number | Date): string;
|
|
24
|
-
/**
|
|
25
|
-
* Format table data
|
|
26
|
-
*/
|
|
27
|
-
export declare function formatTable(headers: string[], rows: string[][], options?: {
|
|
28
|
-
padding?: number;
|
|
29
|
-
align?: Array<'left' | 'center' | 'right'>;
|
|
30
|
-
borders?: boolean;
|
|
31
|
-
}): string;
|
|
32
|
-
//# sourceMappingURL=format.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/common/utils/format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,MAAM,CAUvE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM,CAEzE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,MAAM,CAI3F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAcnE;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,EAAE,EAAE,EAChB,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAC;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;CACd,GACL,MAAM,CAiER"}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Format Utilities
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Format bytes to human readable string
|
|
6
|
-
*/
|
|
7
|
-
export function formatBytes(bytes, decimals = 2) {
|
|
8
|
-
if (bytes === 0)
|
|
9
|
-
return '0 Bytes';
|
|
10
|
-
const k = 1024;
|
|
11
|
-
const dm = decimals < 0 ? 0 : decimals;
|
|
12
|
-
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
|
13
|
-
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
14
|
-
return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Format duration in milliseconds to human readable string
|
|
18
|
-
*/
|
|
19
|
-
export function formatDuration(ms) {
|
|
20
|
-
if (ms < 1000)
|
|
21
|
-
return `${ms}ms`;
|
|
22
|
-
if (ms < 60000)
|
|
23
|
-
return `${(ms / 1000).toFixed(1)}s`;
|
|
24
|
-
if (ms < 3600000)
|
|
25
|
-
return `${(ms / 60000).toFixed(1)}m`;
|
|
26
|
-
return `${(ms / 3600000).toFixed(1)}h`;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Format number with thousands separator
|
|
30
|
-
*/
|
|
31
|
-
export function formatNumber(num, separator = ',') {
|
|
32
|
-
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, separator);
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Format percentage
|
|
36
|
-
*/
|
|
37
|
-
export function formatPercentage(value, total, decimals = 1) {
|
|
38
|
-
if (total === 0)
|
|
39
|
-
return '0%';
|
|
40
|
-
const percentage = (value / total) * 100;
|
|
41
|
-
return `${percentage.toFixed(decimals)}%`;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Format timestamp to relative time
|
|
45
|
-
*/
|
|
46
|
-
export function formatRelativeTime(timestamp) {
|
|
47
|
-
const now = Date.now();
|
|
48
|
-
const time = typeof timestamp === 'number' ? timestamp : timestamp.getTime();
|
|
49
|
-
const diff = now - time;
|
|
50
|
-
const seconds = Math.floor(diff / 1000);
|
|
51
|
-
const minutes = Math.floor(seconds / 60);
|
|
52
|
-
const hours = Math.floor(minutes / 60);
|
|
53
|
-
const days = Math.floor(hours / 24);
|
|
54
|
-
if (days > 0)
|
|
55
|
-
return `${days} day${days === 1 ? '' : 's'} ago`;
|
|
56
|
-
if (hours > 0)
|
|
57
|
-
return `${hours} hour${hours === 1 ? '' : 's'} ago`;
|
|
58
|
-
if (minutes > 0)
|
|
59
|
-
return `${minutes} minute${minutes === 1 ? '' : 's'} ago`;
|
|
60
|
-
return `${seconds} second${seconds === 1 ? '' : 's'} ago`;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Format table data
|
|
64
|
-
*/
|
|
65
|
-
export function formatTable(headers, rows, options = {}) {
|
|
66
|
-
const { padding = 1, align = [], borders = true } = options;
|
|
67
|
-
if (rows.length === 0)
|
|
68
|
-
return '';
|
|
69
|
-
// Calculate column widths
|
|
70
|
-
const widths = headers.map((header, i) => {
|
|
71
|
-
const columnValues = [header, ...rows.map((row) => row[i] || '')];
|
|
72
|
-
return Math.max(...columnValues.map((val) => val.length));
|
|
73
|
-
});
|
|
74
|
-
// Format row function
|
|
75
|
-
const formatRow = (cells, _isHeader = false) => {
|
|
76
|
-
const formattedCells = cells.map((cell, i) => {
|
|
77
|
-
const width = widths[i] || 0;
|
|
78
|
-
const alignment = align[i] || 'left';
|
|
79
|
-
let formatted = cell;
|
|
80
|
-
if (alignment === 'center') {
|
|
81
|
-
const totalPad = width - cell.length;
|
|
82
|
-
const leftPad = Math.floor(totalPad / 2);
|
|
83
|
-
const rightPad = totalPad - leftPad;
|
|
84
|
-
formatted = ' '.repeat(leftPad) + cell + ' '.repeat(rightPad);
|
|
85
|
-
}
|
|
86
|
-
else if (alignment === 'right') {
|
|
87
|
-
formatted = cell.padStart(width);
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
formatted = cell.padEnd(width);
|
|
91
|
-
}
|
|
92
|
-
return ' '.repeat(padding) + formatted + ' '.repeat(padding);
|
|
93
|
-
});
|
|
94
|
-
return borders ? `|${formattedCells.join('|')}|` : formattedCells.join(' ');
|
|
95
|
-
};
|
|
96
|
-
// Build table
|
|
97
|
-
const lines = [];
|
|
98
|
-
if (borders) {
|
|
99
|
-
// Top border
|
|
100
|
-
const topBorder = widths.map((w) => '-'.repeat(w + padding * 2)).join('+');
|
|
101
|
-
lines.push(`+${topBorder}+`);
|
|
102
|
-
}
|
|
103
|
-
// Header
|
|
104
|
-
lines.push(formatRow(headers, true));
|
|
105
|
-
if (borders) {
|
|
106
|
-
// Header separator
|
|
107
|
-
const headerSep = widths.map((w) => '-'.repeat(w + padding * 2)).join('+');
|
|
108
|
-
lines.push(`+${headerSep}+`);
|
|
109
|
-
}
|
|
110
|
-
// Rows
|
|
111
|
-
rows.forEach((row) => {
|
|
112
|
-
lines.push(formatRow(row));
|
|
113
|
-
});
|
|
114
|
-
if (borders) {
|
|
115
|
-
// Bottom border
|
|
116
|
-
const bottomBorder = widths.map((w) => '-'.repeat(w + padding * 2)).join('+');
|
|
117
|
-
lines.push(`+${bottomBorder}+`);
|
|
118
|
-
}
|
|
119
|
-
return lines.join('\n');
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=format.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/common/utils/format.ts"],"names":[],"mappings":"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"}
|