claude-flow-novice 2.2.4 → 2.2.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/package.json +9 -8
- package/scripts/.claude-flow/metrics/agent-metrics.json +1 -0
- package/scripts/.claude-flow/metrics/performance.json +9 -0
- package/scripts/.claude-flow/metrics/task-metrics.json +10 -0
- package/scripts/CLEANUP_OPTIMIZATION_REPORT.json +312 -0
- package/scripts/CLEANUP_PERFORMANCE_OPTIMIZATION.md +387 -0
- package/scripts/CLEANUP_QUICK_START.md +268 -0
- package/scripts/CLEANUP_TEST_RESULTS.md +205 -0
- package/scripts/README.md +339 -0
- package/scripts/ace-query.sh +384 -0
- package/scripts/agent-token-analysis.js +430 -0
- package/scripts/auto-setup.js +332 -0
- package/scripts/build/README.md +167 -0
- package/scripts/build/build-config.js +27 -0
- package/scripts/build/build-prompt-copier.sh +30 -0
- package/scripts/build/performance-monitor.js +869 -0
- package/scripts/build/prepare-publish.js +150 -0
- package/scripts/build/typescript-fixer.js +621 -0
- package/scripts/build/unified-builder.sh +428 -0
- package/scripts/build/update-bin-version.js +32 -0
- package/scripts/build/validate-agents.js +238 -0
- package/scripts/build-index.js +43 -0
- package/scripts/build-orchestrator.js +320 -0
- package/scripts/check-routing-stats.cjs +122 -0
- package/scripts/ci-validation.js +375 -0
- package/scripts/cleanup-blocking-coordination.sh +420 -0
- package/scripts/cleanup-idle-sessions.sh +59 -0
- package/scripts/collect-build-metrics.js +65 -0
- package/scripts/demo/README.md +79 -0
- package/scripts/demo/autoscaling-demo-simplified.js +963 -0
- package/scripts/demo/comprehensive-dashboard-test.js +693 -0
- package/scripts/demo/confidence-log.js +87 -0
- package/scripts/demo/confidence-report.js +82 -0
- package/scripts/demo/demo-multi-swarm-coordination.js +325 -0
- package/scripts/demo/demo-production-deployment.js +399 -0
- package/scripts/demo/demo-visualization-system.js +149 -0
- package/scripts/demo/performance-analysis.cjs +71 -0
- package/scripts/demo/performance-analysis.js +71 -0
- package/scripts/demo/test-autoscaling-demo.js +314 -0
- package/scripts/dependency-optimizer.js +349 -0
- package/scripts/dependency-security-assessment.js +331 -0
- package/scripts/deploy-sdk.sh +176 -0
- package/scripts/deployment-readiness-report.json +179 -0
- package/scripts/dev/README.md +264 -0
- package/scripts/dev/claude-flow-wrapper.sh +35 -0
- package/scripts/dev/claude-monitor.py +419 -0
- package/scripts/dev/claude-sparc.sh +562 -0
- package/scripts/dev/claude-wrapper.sh +17 -0
- package/scripts/dev/demo-phase3-compliance.js +172 -0
- package/scripts/dev/demo-task-system.ts +224 -0
- package/scripts/dev/deployment-validator.js +315 -0
- package/scripts/dev/spawn-claude-terminal.sh +32 -0
- package/scripts/dev/start-portal.sh +506 -0
- package/scripts/dev/start-web-ui.js +15 -0
- package/scripts/dev/stop-portal.sh +311 -0
- package/scripts/dev/validate-examples.ts +288 -0
- package/scripts/dev/validate-phase2.cjs +451 -0
- package/scripts/dev/validate-phase2.js +785 -0
- package/scripts/dev/validate-phase3.cjs +208 -0
- package/scripts/dev/validate-security-remediation.js +1 -0
- package/scripts/ecosystem.config.cjs +90 -0
- package/scripts/fix-js-extensions.js +167 -0
- package/scripts/generate-basic-types.js +73 -0
- package/scripts/generate-changelog.js +318 -0
- package/scripts/git-hooks/pre-commit.sh +143 -0
- package/scripts/health-checks.js +634 -0
- package/scripts/hook-wrapper.sh +54 -0
- package/scripts/install/README.md +375 -0
- package/scripts/install/REDIS_SETUP_VALIDATION.json +245 -0
- package/scripts/install/check-prerequisites.js +303 -0
- package/scripts/install/config-wizard.js +606 -0
- package/scripts/install/dependency-checker.js +385 -0
- package/scripts/install/health-check.js +765 -0
- package/scripts/install/install.js +256 -0
- package/scripts/install/installation-benchmark.js +461 -0
- package/scripts/install/quick-install.js +720 -0
- package/scripts/install/quick-start-wizard.js +295 -0
- package/scripts/install/redis-cli.js +289 -0
- package/scripts/install/redis-install-guides.md +407 -0
- package/scripts/install/redis-setup.js +559 -0
- package/scripts/install/redis-test.js +278 -0
- package/scripts/install/service-manager.js +672 -0
- package/scripts/install/setup.js +832 -0
- package/scripts/install/uninstall.js +526 -0
- package/scripts/install/update.js +461 -0
- package/scripts/install-pre-commit-hook.sh +127 -0
- package/scripts/legacy/README.md +272 -0
- package/scripts/legacy/batch-fix-ts.sh +54 -0
- package/scripts/legacy/build-migration.sh +105 -0
- package/scripts/legacy/build-monitor.js +209 -0
- package/scripts/legacy/build-with-filter.sh +84 -0
- package/scripts/legacy/build-workaround.sh +71 -0
- package/scripts/legacy/fix-ts-advanced.js +358 -0
- package/scripts/legacy/fix-ts-final.sh +50 -0
- package/scripts/legacy/fix-ts-targeted.sh +49 -0
- package/scripts/legacy/fix-typescript-errors.js +305 -0
- package/scripts/legacy/force-build.sh +63 -0
- package/scripts/legacy/optimize-performance.js +400 -0
- package/scripts/legacy/performance-monitor.js +263 -0
- package/scripts/legacy/performance-monitoring.js +532 -0
- package/scripts/legacy/performance-test-runner.js +645 -0
- package/scripts/legacy/quick-fix-ts.js +281 -0
- package/scripts/legacy/safe-build.sh +63 -0
- package/scripts/memory-monitor-coordinator.js +322 -0
- package/scripts/migrate-to-sdk.sh +520 -0
- package/scripts/migration/QUICK-START.md +189 -0
- package/scripts/migration/QUICK-START.md.backup-1760135091363 +189 -0
- package/scripts/migration/README.md +464 -0
- package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md +500 -0
- package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md.backup-1760135091348 +500 -0
- package/scripts/migration/UPDATE-PATHS-README.md +464 -0
- package/scripts/migration/UPDATE-PATHS-README.md.backup-1760135091337 +464 -0
- package/scripts/migration/example-patterns.json +19 -0
- package/scripts/migration/install-arm64.js +78 -0
- package/scripts/migration/install.js +83 -0
- package/scripts/migration/migrate-hooks.js +173 -0
- package/scripts/migration/migration-examples.ts +318 -0
- package/scripts/migration/reorganize-workspace.js +504 -0
- package/scripts/migration/test-update-paths.js +359 -0
- package/scripts/migration/update-paths.js +664 -0
- package/scripts/migration/validate-migration.js +647 -0
- package/scripts/monitor-loop.sh +65 -0
- package/scripts/monitor-memory.sh +47 -0
- package/scripts/monitor-migration.js +339 -0
- package/scripts/monitor.py +43 -0
- package/scripts/monitoring/README.md +178 -0
- package/scripts/monitoring/alert-monitor.sh +220 -0
- package/scripts/monitoring/analyze-resources.sh +199 -0
- package/scripts/monitoring/dashboards/rate-limiting-dashboard.json +211 -0
- package/scripts/monitoring/dynamic-monitor.sh +85 -0
- package/scripts/monitoring/launch-stability-test.sh +184 -0
- package/scripts/monitoring/monitor-test.sh +93 -0
- package/scripts/monitoring/pre-test-validation.sh +208 -0
- package/scripts/monitoring/quick-test-alerting.sh +118 -0
- package/scripts/monitoring/quick-test-rate-limiting.sh +206 -0
- package/scripts/monitoring/rate-limiting-monitor.sh +380 -0
- package/scripts/monitoring/resource-monitor.sh +126 -0
- package/scripts/monitoring/stability-monitor.js +429 -0
- package/scripts/monitoring/test-monitor-quick.sh +54 -0
- package/scripts/monitoring/view-alerts.sh +307 -0
- package/scripts/npm-metrics-collector.js +482 -0
- package/scripts/npm-package-validation.cjs +299 -0
- package/scripts/optimization/build-optimizer.js +438 -0
- package/scripts/optimization/config-validator.js +761 -0
- package/scripts/optimization/test-optimization.js +432 -0
- package/scripts/optimization/unified-activation.js +839 -0
- package/scripts/optimize-package-swarm.js +54 -0
- package/scripts/performance/ACTIVATION_COMMANDS.md +292 -0
- package/scripts/performance/sqlite-enhanced-activation.sh +583 -0
- package/scripts/performance/test-enhanced-backend.sh +504 -0
- package/scripts/performance-monitor.js +644 -0
- package/scripts/performance-test-runner.js +698 -0
- package/scripts/post-deployment-monitoring.js +350 -0
- package/scripts/post-edit-pipeline.js +2091 -0
- package/scripts/post-install-claude-md.js +78 -0
- package/scripts/postinstall.js +79 -0
- package/scripts/pre-publish-validation.cjs +212 -0
- package/scripts/pre-publish-validation.js +429 -0
- package/scripts/redis-lua/cleanup-blocking-coordination.lua +198 -0
- package/scripts/release-announcement.js +425 -0
- package/scripts/release-notification.js +248 -0
- package/scripts/release-rollback.js +376 -0
- package/scripts/release-validation.js +460 -0
- package/scripts/rollback-sdk.sh +66 -0
- package/scripts/run-production-validation.ts +590 -0
- package/scripts/run-stability-validation.sh +687 -0
- package/scripts/security/README.md +339 -0
- package/scripts/security/deployment-validation.cjs +279 -0
- package/scripts/security/envelope-encryption-confidence-report.cjs +422 -0
- package/scripts/security/install-git-hooks.sh +132 -0
- package/scripts/security/install-git-secrets.sh +295 -0
- package/scripts/security/rotate-api-keys.js +469 -0
- package/scripts/security/ruv-swarm-safe.js +74 -0
- package/scripts/security/security-audit.cjs +538 -0
- package/scripts/security/setup-redis-auth.sh +397 -0
- package/scripts/security/validate-envelope-encryption.cjs +340 -0
- package/scripts/security-scan.js +492 -0
- package/scripts/src/web/frontend/.claude-flow/metrics/agent-metrics.json +1 -0
- package/scripts/src/web/frontend/.claude-flow/metrics/performance.json +9 -0
- package/scripts/src/web/frontend/.claude-flow/metrics/task-metrics.json +10 -0
- package/scripts/switch-api.sh +158 -0
- package/scripts/sync-agents.js +290 -0
- package/scripts/test/50-agent-test.js +625 -0
- package/scripts/test/NEW_STABILITY_TEST_GUIDE.md +407 -0
- package/scripts/test/README.md +236 -0
- package/scripts/test/STABILITY_TEST_EXAMPLE.md +347 -0
- package/scripts/test/STABILITY_TEST_README.md +480 -0
- package/scripts/test/agent-worker.js +309 -0
- package/scripts/test/ai-coordination-test.js +650 -0
- package/scripts/test/ai-mesh-coordination-test.js +416 -0
- package/scripts/test/check-links.ts +274 -0
- package/scripts/test/check-performance-regression.ts +168 -0
- package/scripts/test/cli-agent-coordination-test.js +313 -0
- package/scripts/test/coordinator-multilingual-test.js +396 -0
- package/scripts/test/coordinator-transparency-demo.js +585 -0
- package/scripts/test/coverage-report.ts +692 -0
- package/scripts/test/generate-swarm-tests.js +633 -0
- package/scripts/test/integration-test-validation.cjs +253 -0
- package/scripts/test/load-test-swarm.js +576 -0
- package/scripts/test/mesh-coordination-zero-overlap-test.js +740 -0
- package/scripts/test/multilingual-hello-world-test.js +390 -0
- package/scripts/test/quick-multilingual-demo.js +464 -0
- package/scripts/test/real-agent-test.js +312 -0
- package/scripts/test/run-phase3-compliance-tests.js +427 -0
- package/scripts/test/run-stability-test-examples.sh +292 -0
- package/scripts/test/stability-results/stability-metrics.jsonl +83 -0
- package/scripts/test/stability-results/stability-test-report.json +128 -0
- package/scripts/test/stability-results/stability-test.log +1827 -0
- package/scripts/test/stability-test-50-agents.js +734 -0
- package/scripts/test/test-batch-tasks.ts +29 -0
- package/scripts/test/test-byzantine-resolution.js +246 -0
- package/scripts/test/test-claude-spawn-options.sh +63 -0
- package/scripts/test/test-cli-wizard.js +331 -0
- package/scripts/test/test-comprehensive.js +401 -0
- package/scripts/test/test-coordination-features.ts +238 -0
- package/scripts/test/test-fallback-systems.js +276 -0
- package/scripts/test/test-init-command.ts +302 -0
- package/scripts/test/test-mcp.ts +251 -0
- package/scripts/test/test-runner.ts +568 -0
- package/scripts/test/test-swarm-integration.sh +92 -0
- package/scripts/test/test-swarm.ts +142 -0
- package/scripts/test/validation-summary.ts +408 -0
- package/scripts/test-cleanup-performance.sh +416 -0
- package/scripts/test-dashboard-auth.cjs +203 -0
- package/scripts/test-docker-deployment.sh +207 -0
- package/scripts/test-npm-package.cjs +167 -0
- package/scripts/test-provider-routing.cjs +226 -0
- package/scripts/test-routing-telemetry.cjs +147 -0
- package/scripts/test-runner.cjs +154 -0
- package/scripts/test-zai-10k.cjs +81 -0
- package/scripts/test-zai-api.cjs +191 -0
- package/scripts/test-zai-diagnostic.cjs +151 -0
- package/scripts/test-zai-final.cjs +128 -0
- package/scripts/test-zai-with-env.cjs +85 -0
- package/scripts/utils/README.md +261 -0
- package/scripts/utils/clean-build-artifacts.sh +94 -0
- package/scripts/utils/cleanup-root.sh +69 -0
- package/scripts/utils/fix-cliffy-imports.js +307 -0
- package/scripts/utils/fix-duplicate-imports.js +114 -0
- package/scripts/utils/fix-error-handling.cjs +70 -0
- package/scripts/utils/fix-import-paths.js +104 -0
- package/scripts/utils/fix-imports.js +116 -0
- package/scripts/utils/fix-shebang.js +78 -0
- package/scripts/utils/fix-test-modules.js +27 -0
- package/scripts/utils/fix-timezone-issue-246.js +200 -0
- package/scripts/utils/fix-ts-comprehensive.py +182 -0
- package/scripts/utils/fix-ts-targeted-batch.js +250 -0
- package/scripts/utils/remove-benchmark-conflicts.sh +140 -0
- package/scripts/utils/simple-test-fixer.js +190 -0
- package/scripts/utils/validate-metrics-structure.cjs +144 -0
- package/scripts/validate-agent-hooks.js +506 -0
- package/scripts/validate-changelog.js +241 -0
- package/scripts/validate-coordination-cli.js +69 -0
- package/scripts/validate-coordination-toggle-integration.cjs +501 -0
- package/scripts/validate-docker-infrastructure.sh +502 -0
- package/scripts/validate-entry-points.js +300 -0
- package/scripts/validate-stage3-performance.ts +377 -0
- package/scripts/validate-template-bundling.js +180 -0
- package/scripts/validation/README.md +33 -0
- package/scripts/validation/acl-security-validation.cjs +214 -0
- package/scripts/validation/acl-security-validation.js +402 -0
- package/scripts/validation/byzantine-verification.js +407 -0
- package/scripts/validation/final-phase-2-consensus.cjs +219 -0
- package/scripts/validation/final-security-validation.js +791 -0
- package/scripts/validation/final-wasm-validation.cjs +840 -0
- package/scripts/validation/integration-test-analysis.js +105 -0
- package/scripts/validation/phase-0-comprehensive-validation.js +474 -0
- package/scripts/validation/phase-0-consensus-report.js +139 -0
- package/scripts/validation/phase-0-final-report.js +112 -0
- package/scripts/validation/phase-0-redis-consensus-report.js +129 -0
- package/scripts/validation/phase-0-validation-improved.js +490 -0
- package/scripts/validation/phase-0-validation-test.js +65 -0
- package/scripts/validation/phase-1-consensus-report.cjs +342 -0
- package/scripts/validation/phase-1-consensus-validation.cjs +551 -0
- package/scripts/validation/phase-1-consensus-validation.js +551 -0
- package/scripts/validation/phase-2-consensus-report.cjs +186 -0
- package/scripts/validation/phase-2-validation.cjs +171 -0
- package/scripts/validation/phase-2-validation.js +171 -0
- package/scripts/validation/phase-4-consensus-report.js +181 -0
- package/scripts/validation/phase-4-final-validation.js +351 -0
- package/scripts/validation/phase-5-consensus-report.cjs +113 -0
- package/scripts/validation/phase-5-consensus-report.js +113 -0
- package/scripts/validation/security-analysis.js +49 -0
- package/scripts/validation/security-validation.js +492 -0
- package/scripts/validation/simple-security-validation.js +464 -0
- package/scripts/verify-installation.js +112 -0
- package/scripts/verify-mcp-server.js +86 -0
- package/scripts/verify-sdk-phase1.cjs +293 -0
|
@@ -0,0 +1,664 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Path Update Automation Script
|
|
5
|
+
*
|
|
6
|
+
* Automated search/replace path updates with validation and safety features.
|
|
7
|
+
* Supports JSON, YAML, JavaScript, and Markdown files with syntax validation.
|
|
8
|
+
*
|
|
9
|
+
* Features:
|
|
10
|
+
* - Regex pattern-based path updates
|
|
11
|
+
* - JSON/YAML/JavaScript syntax validation after updates
|
|
12
|
+
* - Backup creation before modifications
|
|
13
|
+
* - Dry-run mode
|
|
14
|
+
* - File type filtering
|
|
15
|
+
* - Pattern configuration via JSON file or CLI args
|
|
16
|
+
* - Detailed change reporting
|
|
17
|
+
*
|
|
18
|
+
* Usage:
|
|
19
|
+
* node scripts/migration/update-paths.js --pattern "node test-" --replacement "node tests/manual/test-" --types yml,json,js,md
|
|
20
|
+
* node scripts/migration/update-paths.js --config patterns.json --dry-run
|
|
21
|
+
* node scripts/migration/update-paths.js --pattern "\.claude-flow-novice/dist" --replacement "dist/" --regex
|
|
22
|
+
*
|
|
23
|
+
* @module scripts/migration/update-paths
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import { promises as fs } from 'fs';
|
|
27
|
+
import path from 'path';
|
|
28
|
+
import { glob } from 'glob';
|
|
29
|
+
import yaml from 'yaml';
|
|
30
|
+
|
|
31
|
+
// ANSI color codes for terminal output
|
|
32
|
+
const colors = {
|
|
33
|
+
reset: '\x1b[0m',
|
|
34
|
+
bright: '\x1b[1m',
|
|
35
|
+
red: '\x1b[31m',
|
|
36
|
+
green: '\x1b[32m',
|
|
37
|
+
yellow: '\x1b[33m',
|
|
38
|
+
blue: '\x1b[34m',
|
|
39
|
+
cyan: '\x1b[36m',
|
|
40
|
+
magenta: '\x1b[35m'
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Validates JSON syntax by attempting to parse
|
|
45
|
+
* @param {string} content - File content to validate
|
|
46
|
+
* @returns {Object} Validation result with success flag and error if any
|
|
47
|
+
*/
|
|
48
|
+
function validateJSON(content) {
|
|
49
|
+
try {
|
|
50
|
+
JSON.parse(content);
|
|
51
|
+
return { valid: true };
|
|
52
|
+
} catch (error) {
|
|
53
|
+
return { valid: false, error: error.message };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Validates YAML syntax by attempting to parse
|
|
59
|
+
* @param {string} content - File content to validate
|
|
60
|
+
* @returns {Object} Validation result with success flag and error if any
|
|
61
|
+
*/
|
|
62
|
+
function validateYAML(content) {
|
|
63
|
+
try {
|
|
64
|
+
yaml.parse(content);
|
|
65
|
+
return { valid: true };
|
|
66
|
+
} catch (error) {
|
|
67
|
+
return { valid: false, error: error.message };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Validates JavaScript syntax using basic checks
|
|
73
|
+
* Full AST parsing would require additional dependencies
|
|
74
|
+
* @param {string} content - File content to validate
|
|
75
|
+
* @returns {Object} Validation result with success flag and error if any
|
|
76
|
+
*/
|
|
77
|
+
function validateJavaScript(content) {
|
|
78
|
+
try {
|
|
79
|
+
// Basic syntax validation - check for common syntax errors
|
|
80
|
+
// This is a simplified check - full AST parsing would be more comprehensive
|
|
81
|
+
|
|
82
|
+
// Check for balanced braces/brackets/parentheses
|
|
83
|
+
const braceBalance = (content.match(/\{/g) || []).length - (content.match(/\}/g) || []).length;
|
|
84
|
+
const bracketBalance = (content.match(/\[/g) || []).length - (content.match(/\]/g) || []).length;
|
|
85
|
+
const parenBalance = (content.match(/\(/g) || []).length - (content.match(/\)/g) || []).length;
|
|
86
|
+
|
|
87
|
+
if (braceBalance !== 0) {
|
|
88
|
+
return { valid: false, error: 'Unbalanced curly braces' };
|
|
89
|
+
}
|
|
90
|
+
if (bracketBalance !== 0) {
|
|
91
|
+
return { valid: false, error: 'Unbalanced square brackets' };
|
|
92
|
+
}
|
|
93
|
+
if (parenBalance !== 0) {
|
|
94
|
+
return { valid: false, error: 'Unbalanced parentheses' };
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Try to use Function constructor for basic syntax check (not executed)
|
|
98
|
+
// This is a limited check but catches many syntax errors
|
|
99
|
+
try {
|
|
100
|
+
new Function(content);
|
|
101
|
+
} catch (error) {
|
|
102
|
+
// Function constructor error indicates syntax issue
|
|
103
|
+
return { valid: false, error: error.message };
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return { valid: true };
|
|
107
|
+
} catch (error) {
|
|
108
|
+
return { valid: false, error: error.message };
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Validates Markdown syntax (basic structure check)
|
|
114
|
+
* @param {string} content - File content to validate
|
|
115
|
+
* @returns {Object} Validation result with success flag and error if any
|
|
116
|
+
*/
|
|
117
|
+
function validateMarkdown(content) {
|
|
118
|
+
// Markdown is more forgiving, but we can check for common issues
|
|
119
|
+
try {
|
|
120
|
+
// Check for balanced code fences
|
|
121
|
+
const codeFences = (content.match(/```/g) || []).length;
|
|
122
|
+
if (codeFences % 2 !== 0) {
|
|
123
|
+
return { valid: false, error: 'Unbalanced code fences (```)' };
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Check for balanced inline code
|
|
127
|
+
const lines = content.split('\n');
|
|
128
|
+
for (let i = 0; i < lines.length; i++) {
|
|
129
|
+
const line = lines[i];
|
|
130
|
+
// Skip code fence lines
|
|
131
|
+
if (line.trim().startsWith('```')) continue;
|
|
132
|
+
|
|
133
|
+
const backticks = (line.match(/`/g) || []).length;
|
|
134
|
+
if (backticks % 2 !== 0) {
|
|
135
|
+
return { valid: false, error: `Unbalanced backticks on line ${i + 1}` };
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return { valid: true };
|
|
140
|
+
} catch (error) {
|
|
141
|
+
return { valid: false, error: error.message };
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Get validator function based on file extension
|
|
147
|
+
* @param {string} filePath - Path to file
|
|
148
|
+
* @returns {Function|null} Validator function or null if no validator
|
|
149
|
+
*/
|
|
150
|
+
function getValidator(filePath) {
|
|
151
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
152
|
+
|
|
153
|
+
const validators = {
|
|
154
|
+
'.json': validateJSON,
|
|
155
|
+
'.yml': validateYAML,
|
|
156
|
+
'.yaml': validateYAML,
|
|
157
|
+
'.js': validateJavaScript,
|
|
158
|
+
'.mjs': validateJavaScript,
|
|
159
|
+
'.cjs': validateJavaScript,
|
|
160
|
+
'.md': validateMarkdown
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
return validators[ext] || null;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Create backup of file before modification
|
|
168
|
+
* @param {string} filePath - Path to file to backup
|
|
169
|
+
* @returns {Promise<string>} Path to backup file
|
|
170
|
+
*/
|
|
171
|
+
async function createBackup(filePath) {
|
|
172
|
+
const backupPath = `${filePath}.backup-${Date.now()}`;
|
|
173
|
+
await fs.copyFile(filePath, backupPath);
|
|
174
|
+
return backupPath;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Apply pattern replacement to file content
|
|
179
|
+
* @param {string} content - Original file content
|
|
180
|
+
* @param {Object} pattern - Pattern configuration
|
|
181
|
+
* @param {boolean} isRegex - Whether pattern is regex
|
|
182
|
+
* @returns {Object} Result with updated content and match count
|
|
183
|
+
*/
|
|
184
|
+
function applyPattern(content, pattern, isRegex = false) {
|
|
185
|
+
let updatedContent;
|
|
186
|
+
let matchCount = 0;
|
|
187
|
+
|
|
188
|
+
if (isRegex) {
|
|
189
|
+
// Use regex pattern
|
|
190
|
+
const regex = new RegExp(pattern.pattern, 'g');
|
|
191
|
+
const matches = content.match(regex);
|
|
192
|
+
matchCount = matches ? matches.length : 0;
|
|
193
|
+
updatedContent = content.replace(regex, pattern.replacement);
|
|
194
|
+
} else {
|
|
195
|
+
// Use string literal pattern
|
|
196
|
+
const parts = content.split(pattern.pattern);
|
|
197
|
+
matchCount = parts.length - 1;
|
|
198
|
+
updatedContent = parts.join(pattern.replacement);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return {
|
|
202
|
+
content: updatedContent,
|
|
203
|
+
matchCount,
|
|
204
|
+
changed: matchCount > 0
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Process a single file with pattern updates
|
|
210
|
+
* @param {string} filePath - Path to file to process
|
|
211
|
+
* @param {Array<Object>} patterns - Array of pattern configurations
|
|
212
|
+
* @param {Object} options - Processing options
|
|
213
|
+
* @returns {Promise<Object>} Processing result
|
|
214
|
+
*/
|
|
215
|
+
async function processFile(filePath, patterns, options = {}) {
|
|
216
|
+
const { dryRun = false, createBackups = true, verbose = false } = options;
|
|
217
|
+
|
|
218
|
+
try {
|
|
219
|
+
// Read original content
|
|
220
|
+
const originalContent = await fs.readFile(filePath, 'utf8');
|
|
221
|
+
let currentContent = originalContent;
|
|
222
|
+
|
|
223
|
+
const changes = [];
|
|
224
|
+
let totalMatches = 0;
|
|
225
|
+
|
|
226
|
+
// Apply all patterns
|
|
227
|
+
for (const pattern of patterns) {
|
|
228
|
+
const result = applyPattern(currentContent, pattern, options.regex);
|
|
229
|
+
|
|
230
|
+
if (result.changed) {
|
|
231
|
+
changes.push({
|
|
232
|
+
pattern: pattern.pattern,
|
|
233
|
+
replacement: pattern.replacement,
|
|
234
|
+
matches: result.matchCount
|
|
235
|
+
});
|
|
236
|
+
totalMatches += result.matchCount;
|
|
237
|
+
currentContent = result.content;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// If no changes, return early
|
|
242
|
+
if (totalMatches === 0) {
|
|
243
|
+
return {
|
|
244
|
+
filePath,
|
|
245
|
+
processed: true,
|
|
246
|
+
changed: false,
|
|
247
|
+
changes: [],
|
|
248
|
+
validated: true
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// Validate updated content
|
|
253
|
+
const validator = getValidator(filePath);
|
|
254
|
+
let validationResult = { valid: true };
|
|
255
|
+
|
|
256
|
+
if (validator) {
|
|
257
|
+
validationResult = validator(currentContent);
|
|
258
|
+
|
|
259
|
+
if (!validationResult.valid) {
|
|
260
|
+
return {
|
|
261
|
+
filePath,
|
|
262
|
+
processed: false,
|
|
263
|
+
changed: false,
|
|
264
|
+
changes,
|
|
265
|
+
validated: false,
|
|
266
|
+
error: `Validation failed: ${validationResult.error}`,
|
|
267
|
+
totalMatches
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// Create backup and write updated content (unless dry-run)
|
|
273
|
+
if (!dryRun) {
|
|
274
|
+
if (createBackups) {
|
|
275
|
+
const backupPath = await createBackup(filePath);
|
|
276
|
+
if (verbose) {
|
|
277
|
+
console.log(`${colors.cyan}Backup created: ${backupPath}${colors.reset}`);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
await fs.writeFile(filePath, currentContent, 'utf8');
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
return {
|
|
285
|
+
filePath,
|
|
286
|
+
processed: true,
|
|
287
|
+
changed: true,
|
|
288
|
+
changes,
|
|
289
|
+
validated: validationResult.valid,
|
|
290
|
+
totalMatches,
|
|
291
|
+
dryRun
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
} catch (error) {
|
|
295
|
+
return {
|
|
296
|
+
filePath,
|
|
297
|
+
processed: false,
|
|
298
|
+
changed: false,
|
|
299
|
+
error: error.message
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Find files matching type filters
|
|
306
|
+
* @param {Array<string>} types - File extensions to include
|
|
307
|
+
* @param {string} basePath - Base directory to search
|
|
308
|
+
* @returns {Promise<Array<string>>} Array of matching file paths
|
|
309
|
+
*/
|
|
310
|
+
async function findFiles(types, basePath = process.cwd()) {
|
|
311
|
+
const patterns = types.map(type => {
|
|
312
|
+
const ext = type.startsWith('.') ? type : `.${type}`;
|
|
313
|
+
return `**/*${ext}`;
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
const allFiles = [];
|
|
317
|
+
|
|
318
|
+
for (const pattern of patterns) {
|
|
319
|
+
const files = await glob(pattern, {
|
|
320
|
+
cwd: basePath,
|
|
321
|
+
absolute: true,
|
|
322
|
+
ignore: [
|
|
323
|
+
'**/node_modules/**',
|
|
324
|
+
'**/.git/**',
|
|
325
|
+
'**/dist/**',
|
|
326
|
+
'**/.claude-flow-novice/**',
|
|
327
|
+
'**/backup-*/**',
|
|
328
|
+
'**/*.backup-*'
|
|
329
|
+
]
|
|
330
|
+
});
|
|
331
|
+
allFiles.push(...files);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// Remove duplicates
|
|
335
|
+
return [...new Set(allFiles)];
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Generate detailed report of changes
|
|
340
|
+
* @param {Array<Object>} results - Processing results
|
|
341
|
+
* @param {boolean} dryRun - Whether this was a dry run
|
|
342
|
+
*/
|
|
343
|
+
function generateReport(results, dryRun = false) {
|
|
344
|
+
const processed = results.filter(r => r.processed);
|
|
345
|
+
const changed = results.filter(r => r.changed);
|
|
346
|
+
const errors = results.filter(r => r.error);
|
|
347
|
+
const validationErrors = results.filter(r => !r.validated);
|
|
348
|
+
|
|
349
|
+
console.log(`\n${colors.bright}${colors.blue}=== Path Update Report ===${colors.reset}\n`);
|
|
350
|
+
|
|
351
|
+
if (dryRun) {
|
|
352
|
+
console.log(`${colors.yellow}${colors.bright}DRY RUN MODE - No files were modified${colors.reset}\n`);
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
console.log(`${colors.bright}Summary:${colors.reset}`);
|
|
356
|
+
console.log(` Total files processed: ${processed.length}`);
|
|
357
|
+
console.log(` Files with changes: ${changed.length}`);
|
|
358
|
+
console.log(` Files with errors: ${errors.length}`);
|
|
359
|
+
console.log(` Validation failures: ${validationErrors.length}`);
|
|
360
|
+
|
|
361
|
+
if (changed.length > 0) {
|
|
362
|
+
console.log(`\n${colors.bright}${colors.green}Changed Files:${colors.reset}`);
|
|
363
|
+
changed.forEach(result => {
|
|
364
|
+
console.log(`\n ${colors.cyan}${result.filePath}${colors.reset}`);
|
|
365
|
+
console.log(` Total matches: ${result.totalMatches}`);
|
|
366
|
+
result.changes.forEach(change => {
|
|
367
|
+
console.log(` - "${change.pattern}" → "${change.replacement}" (${change.matches} matches)`);
|
|
368
|
+
});
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
if (errors.length > 0) {
|
|
373
|
+
console.log(`\n${colors.bright}${colors.red}Errors:${colors.reset}`);
|
|
374
|
+
errors.forEach(result => {
|
|
375
|
+
console.log(` ${colors.red}${result.filePath}${colors.reset}`);
|
|
376
|
+
console.log(` ${result.error}`);
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
if (validationErrors.length > 0) {
|
|
381
|
+
console.log(`\n${colors.bright}${colors.yellow}Validation Failures:${colors.reset}`);
|
|
382
|
+
validationErrors.forEach(result => {
|
|
383
|
+
console.log(` ${colors.yellow}${result.filePath}${colors.reset}`);
|
|
384
|
+
console.log(` ${result.error}`);
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
console.log('');
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* Parse command line arguments
|
|
393
|
+
* @param {Array<string>} argv - Command line arguments
|
|
394
|
+
* @returns {Object} Parsed options
|
|
395
|
+
*/
|
|
396
|
+
function parseArgs(argv) {
|
|
397
|
+
const args = argv.slice(2);
|
|
398
|
+
const options = {
|
|
399
|
+
patterns: [],
|
|
400
|
+
types: ['yml', 'yaml', 'json', 'js', 'mjs', 'cjs', 'md'],
|
|
401
|
+
dryRun: false,
|
|
402
|
+
regex: false,
|
|
403
|
+
verbose: false,
|
|
404
|
+
configFile: null,
|
|
405
|
+
createBackups: true
|
|
406
|
+
};
|
|
407
|
+
|
|
408
|
+
for (let i = 0; i < args.length; i++) {
|
|
409
|
+
const arg = args[i];
|
|
410
|
+
|
|
411
|
+
switch (arg) {
|
|
412
|
+
case '--pattern':
|
|
413
|
+
case '-p':
|
|
414
|
+
if (i + 1 < args.length) {
|
|
415
|
+
options.patternString = args[++i];
|
|
416
|
+
}
|
|
417
|
+
break;
|
|
418
|
+
|
|
419
|
+
case '--replacement':
|
|
420
|
+
case '-r':
|
|
421
|
+
if (i + 1 < args.length) {
|
|
422
|
+
options.replacementString = args[++i];
|
|
423
|
+
}
|
|
424
|
+
break;
|
|
425
|
+
|
|
426
|
+
case '--config':
|
|
427
|
+
case '-c':
|
|
428
|
+
if (i + 1 < args.length) {
|
|
429
|
+
options.configFile = args[++i];
|
|
430
|
+
}
|
|
431
|
+
break;
|
|
432
|
+
|
|
433
|
+
case '--types':
|
|
434
|
+
case '-t':
|
|
435
|
+
if (i + 1 < args.length) {
|
|
436
|
+
options.types = args[++i].split(',').map(t => t.trim());
|
|
437
|
+
}
|
|
438
|
+
break;
|
|
439
|
+
|
|
440
|
+
case '--dry-run':
|
|
441
|
+
case '-d':
|
|
442
|
+
options.dryRun = true;
|
|
443
|
+
break;
|
|
444
|
+
|
|
445
|
+
case '--regex':
|
|
446
|
+
options.regex = true;
|
|
447
|
+
break;
|
|
448
|
+
|
|
449
|
+
case '--verbose':
|
|
450
|
+
case '-v':
|
|
451
|
+
options.verbose = true;
|
|
452
|
+
break;
|
|
453
|
+
|
|
454
|
+
case '--no-backup':
|
|
455
|
+
options.createBackups = false;
|
|
456
|
+
break;
|
|
457
|
+
|
|
458
|
+
case '--help':
|
|
459
|
+
case '-h':
|
|
460
|
+
options.showHelp = true;
|
|
461
|
+
break;
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
// Build patterns array
|
|
466
|
+
if (options.patternString && options.replacementString) {
|
|
467
|
+
options.patterns.push({
|
|
468
|
+
pattern: options.patternString,
|
|
469
|
+
replacement: options.replacementString
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
return options;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* Load patterns from configuration file
|
|
478
|
+
* @param {string} configPath - Path to config file
|
|
479
|
+
* @returns {Promise<Array<Object>>} Array of pattern configurations
|
|
480
|
+
*/
|
|
481
|
+
async function loadConfig(configPath) {
|
|
482
|
+
try {
|
|
483
|
+
const content = await fs.readFile(configPath, 'utf8');
|
|
484
|
+
const config = JSON.parse(content);
|
|
485
|
+
|
|
486
|
+
if (!Array.isArray(config.patterns)) {
|
|
487
|
+
throw new Error('Config file must contain a "patterns" array');
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
return config.patterns;
|
|
491
|
+
} catch (error) {
|
|
492
|
+
throw new Error(`Failed to load config file: ${error.message}`);
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
/**
|
|
497
|
+
* Display help message
|
|
498
|
+
*/
|
|
499
|
+
function showHelp() {
|
|
500
|
+
console.log(`
|
|
501
|
+
${colors.bright}${colors.blue}Path Update Automation Script${colors.reset}
|
|
502
|
+
|
|
503
|
+
${colors.bright}Usage:${colors.reset}
|
|
504
|
+
node scripts/migration/update-paths.js [options]
|
|
505
|
+
|
|
506
|
+
${colors.bright}Options:${colors.reset}
|
|
507
|
+
-p, --pattern <pattern> Search pattern (string or regex)
|
|
508
|
+
-r, --replacement <replacement> Replacement string
|
|
509
|
+
-c, --config <file> Load patterns from JSON config file
|
|
510
|
+
-t, --types <types> Comma-separated file types (default: yml,yaml,json,js,mjs,cjs,md)
|
|
511
|
+
-d, --dry-run Preview changes without modifying files
|
|
512
|
+
--regex Treat pattern as regex
|
|
513
|
+
-v, --verbose Verbose output
|
|
514
|
+
--no-backup Skip backup creation
|
|
515
|
+
-h, --help Show this help message
|
|
516
|
+
|
|
517
|
+
${colors.bright}Examples:${colors.reset}
|
|
518
|
+
# Simple string replacement
|
|
519
|
+
node scripts/migration/update-paths.js \\
|
|
520
|
+
--pattern "node test-" \\
|
|
521
|
+
--replacement "node tests/manual/test-" \\
|
|
522
|
+
--types yml,json,js
|
|
523
|
+
|
|
524
|
+
# Regex replacement
|
|
525
|
+
node scripts/migration/update-paths.js \\
|
|
526
|
+
--pattern "\\.claude-flow-novice/dist" \\
|
|
527
|
+
--replacement "dist/" \\
|
|
528
|
+
--regex
|
|
529
|
+
|
|
530
|
+
# Load patterns from config file
|
|
531
|
+
node scripts/migration/update-paths.js \\
|
|
532
|
+
--config patterns.json \\
|
|
533
|
+
--dry-run
|
|
534
|
+
|
|
535
|
+
# Process only YAML files with verbose output
|
|
536
|
+
node scripts/migration/update-paths.js \\
|
|
537
|
+
--pattern "test-results/" \\
|
|
538
|
+
--replacement ".artifacts/test-results/" \\
|
|
539
|
+
--types yml \\
|
|
540
|
+
--verbose
|
|
541
|
+
|
|
542
|
+
${colors.bright}Config File Format (JSON):${colors.reset}
|
|
543
|
+
{
|
|
544
|
+
"patterns": [
|
|
545
|
+
{
|
|
546
|
+
"pattern": "node test-",
|
|
547
|
+
"replacement": "node tests/manual/test-"
|
|
548
|
+
},
|
|
549
|
+
{
|
|
550
|
+
"pattern": "\\\\.claude-flow-novice/dist",
|
|
551
|
+
"replacement": "dist/"
|
|
552
|
+
}
|
|
553
|
+
]
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
${colors.bright}Supported File Types:${colors.reset}
|
|
557
|
+
- .yml, .yaml (YAML validation)
|
|
558
|
+
- .json (JSON validation)
|
|
559
|
+
- .js, .mjs, .cjs (JavaScript validation)
|
|
560
|
+
- .md (Markdown validation)
|
|
561
|
+
|
|
562
|
+
${colors.bright}Safety Features:${colors.reset}
|
|
563
|
+
- Automatic backups before modification
|
|
564
|
+
- Syntax validation after updates
|
|
565
|
+
- Dry-run mode for preview
|
|
566
|
+
- Detailed change reporting
|
|
567
|
+
`);
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
/**
|
|
571
|
+
* Main execution function
|
|
572
|
+
*/
|
|
573
|
+
async function main() {
|
|
574
|
+
const options = parseArgs(process.argv);
|
|
575
|
+
|
|
576
|
+
if (options.showHelp) {
|
|
577
|
+
showHelp();
|
|
578
|
+
process.exit(0);
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
try {
|
|
582
|
+
// Load patterns from config file if specified
|
|
583
|
+
if (options.configFile) {
|
|
584
|
+
const configPatterns = await loadConfig(options.configFile);
|
|
585
|
+
options.patterns.push(...configPatterns);
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
// Validate we have patterns to apply
|
|
589
|
+
if (options.patterns.length === 0) {
|
|
590
|
+
console.error(`${colors.red}Error: No patterns specified. Use --pattern/--replacement or --config${colors.reset}`);
|
|
591
|
+
console.log(`Run with --help for usage information`);
|
|
592
|
+
process.exit(1);
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
console.log(`${colors.bright}${colors.blue}Path Update Automation${colors.reset}\n`);
|
|
596
|
+
|
|
597
|
+
if (options.dryRun) {
|
|
598
|
+
console.log(`${colors.yellow}Running in DRY RUN mode - no files will be modified${colors.reset}\n`);
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
console.log(`${colors.bright}Configuration:${colors.reset}`);
|
|
602
|
+
console.log(` File types: ${options.types.join(', ')}`);
|
|
603
|
+
console.log(` Patterns: ${options.patterns.length}`);
|
|
604
|
+
console.log(` Regex mode: ${options.regex ? 'enabled' : 'disabled'}`);
|
|
605
|
+
console.log(` Backups: ${options.createBackups ? 'enabled' : 'disabled'}`);
|
|
606
|
+
|
|
607
|
+
// Find files to process
|
|
608
|
+
console.log(`\n${colors.cyan}Scanning for files...${colors.reset}`);
|
|
609
|
+
const files = await findFiles(options.types);
|
|
610
|
+
console.log(`Found ${files.length} files to process\n`);
|
|
611
|
+
|
|
612
|
+
// Process all files
|
|
613
|
+
const results = [];
|
|
614
|
+
for (const file of files) {
|
|
615
|
+
if (options.verbose) {
|
|
616
|
+
console.log(`Processing: ${file}`);
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
const result = await processFile(file, options.patterns, {
|
|
620
|
+
dryRun: options.dryRun,
|
|
621
|
+
createBackups: options.createBackups,
|
|
622
|
+
verbose: options.verbose,
|
|
623
|
+
regex: options.regex
|
|
624
|
+
});
|
|
625
|
+
|
|
626
|
+
results.push(result);
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
// Generate report
|
|
630
|
+
generateReport(results, options.dryRun);
|
|
631
|
+
|
|
632
|
+
// Exit with error code if there were errors
|
|
633
|
+
const hasErrors = results.some(r => r.error || !r.validated);
|
|
634
|
+
process.exit(hasErrors ? 1 : 0);
|
|
635
|
+
|
|
636
|
+
} catch (error) {
|
|
637
|
+
console.error(`${colors.red}${colors.bright}Fatal Error:${colors.reset} ${error.message}`);
|
|
638
|
+
if (options.verbose) {
|
|
639
|
+
console.error(error.stack);
|
|
640
|
+
}
|
|
641
|
+
process.exit(1);
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
// Run if executed directly
|
|
646
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
647
|
+
main();
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
// Export for testing
|
|
651
|
+
export {
|
|
652
|
+
validateJSON,
|
|
653
|
+
validateYAML,
|
|
654
|
+
validateJavaScript,
|
|
655
|
+
validateMarkdown,
|
|
656
|
+
getValidator,
|
|
657
|
+
createBackup,
|
|
658
|
+
applyPattern,
|
|
659
|
+
processFile,
|
|
660
|
+
findFiles,
|
|
661
|
+
generateReport,
|
|
662
|
+
parseArgs,
|
|
663
|
+
loadConfig
|
|
664
|
+
};
|