@sfdxy/mule-build 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +301 -0
  2. package/dist/bin/mule-build.d.ts +8 -0
  3. package/dist/bin/mule-build.d.ts.map +1 -0
  4. package/dist/bin/mule-build.js +12 -0
  5. package/dist/bin/mule-build.js.map +1 -0
  6. package/dist/src/api/enforce.d.ts +11 -0
  7. package/dist/src/api/enforce.d.ts.map +1 -0
  8. package/dist/src/api/enforce.js +58 -0
  9. package/dist/src/api/enforce.js.map +1 -0
  10. package/dist/src/api/index.d.ts +12 -0
  11. package/dist/src/api/index.d.ts.map +1 -0
  12. package/dist/src/api/index.js +12 -0
  13. package/dist/src/api/index.js.map +1 -0
  14. package/dist/src/api/package.d.ts +15 -0
  15. package/dist/src/api/package.d.ts.map +1 -0
  16. package/dist/src/api/package.js +242 -0
  17. package/dist/src/api/package.js.map +1 -0
  18. package/dist/src/api/release.d.ts +11 -0
  19. package/dist/src/api/release.d.ts.map +1 -0
  20. package/dist/src/api/release.js +102 -0
  21. package/dist/src/api/release.js.map +1 -0
  22. package/dist/src/api/run.d.ts +11 -0
  23. package/dist/src/api/run.d.ts.map +1 -0
  24. package/dist/src/api/run.js +44 -0
  25. package/dist/src/api/run.js.map +1 -0
  26. package/dist/src/api/strip.d.ts +11 -0
  27. package/dist/src/api/strip.d.ts.map +1 -0
  28. package/dist/src/api/strip.js +57 -0
  29. package/dist/src/api/strip.js.map +1 -0
  30. package/dist/src/cli.d.ts +15 -0
  31. package/dist/src/cli.d.ts.map +1 -0
  32. package/dist/src/cli.js +174 -0
  33. package/dist/src/cli.js.map +1 -0
  34. package/dist/src/config/ConfigLoader.d.ts +19 -0
  35. package/dist/src/config/ConfigLoader.d.ts.map +1 -0
  36. package/dist/src/config/ConfigLoader.js +84 -0
  37. package/dist/src/config/ConfigLoader.js.map +1 -0
  38. package/dist/src/config/SystemChecker.d.ts +29 -0
  39. package/dist/src/config/SystemChecker.d.ts.map +1 -0
  40. package/dist/src/config/SystemChecker.js +85 -0
  41. package/dist/src/config/SystemChecker.js.map +1 -0
  42. package/dist/src/config/defaults.d.ts +17 -0
  43. package/dist/src/config/defaults.d.ts.map +1 -0
  44. package/dist/src/config/defaults.js +37 -0
  45. package/dist/src/config/defaults.js.map +1 -0
  46. package/dist/src/engine/LocalRuntime.d.ts +41 -0
  47. package/dist/src/engine/LocalRuntime.d.ts.map +1 -0
  48. package/dist/src/engine/LocalRuntime.js +132 -0
  49. package/dist/src/engine/LocalRuntime.js.map +1 -0
  50. package/dist/src/engine/MavenBuilder.d.ts +49 -0
  51. package/dist/src/engine/MavenBuilder.d.ts.map +1 -0
  52. package/dist/src/engine/MavenBuilder.js +126 -0
  53. package/dist/src/engine/MavenBuilder.js.map +1 -0
  54. package/dist/src/engine/PomParser.d.ts +53 -0
  55. package/dist/src/engine/PomParser.d.ts.map +1 -0
  56. package/dist/src/engine/PomParser.js +175 -0
  57. package/dist/src/engine/PomParser.js.map +1 -0
  58. package/dist/src/engine/XmlProcessor.d.ts +47 -0
  59. package/dist/src/engine/XmlProcessor.d.ts.map +1 -0
  60. package/dist/src/engine/XmlProcessor.js +213 -0
  61. package/dist/src/engine/XmlProcessor.js.map +1 -0
  62. package/dist/src/index.d.ts +11 -0
  63. package/dist/src/index.d.ts.map +1 -0
  64. package/dist/src/index.js +13 -0
  65. package/dist/src/index.js.map +1 -0
  66. package/dist/src/types/index.d.ts +209 -0
  67. package/dist/src/types/index.d.ts.map +1 -0
  68. package/dist/src/types/index.js +16 -0
  69. package/dist/src/types/index.js.map +1 -0
  70. package/dist/src/utils/exec.d.ts +20 -0
  71. package/dist/src/utils/exec.d.ts.map +1 -0
  72. package/dist/src/utils/exec.js +57 -0
  73. package/dist/src/utils/exec.js.map +1 -0
  74. package/dist/src/utils/git.d.ts +26 -0
  75. package/dist/src/utils/git.d.ts.map +1 -0
  76. package/dist/src/utils/git.js +71 -0
  77. package/dist/src/utils/git.js.map +1 -0
  78. package/dist/src/utils/logger.d.ts +21 -0
  79. package/dist/src/utils/logger.d.ts.map +1 -0
  80. package/dist/src/utils/logger.js +59 -0
  81. package/dist/src/utils/logger.js.map +1 -0
  82. package/package.json +80 -0
@@ -0,0 +1,242 @@
1
+ /**
2
+ * Package API
3
+ *
4
+ * Programmatic interface for building MuleSoft projects.
5
+ */
6
+ import { existsSync, copyFileSync, writeFileSync, readFileSync, mkdirSync, unlinkSync, rmSync, } from 'fs';
7
+ import { join, basename, relative, dirname } from 'path';
8
+ import { hostname, userInfo } from 'os';
9
+ import { ok, err } from '../types/index.js';
10
+ import { loadConfig, getProfileConfig } from '../config/ConfigLoader.js';
11
+ import { canBuild } from '../config/SystemChecker.js';
12
+ import { stripSecure, enforceSecure, removeSecurePropertiesConfig, getXmlFiles, } from '../engine/XmlProcessor.js';
13
+ import { mavenBuild, findBuiltJar, mavenClean } from '../engine/MavenBuilder.js';
14
+ import { getProjectName, getVersion, setName, backupPom, restorePom } from '../engine/PomParser.js';
15
+ import { logger } from '../utils/logger.js';
16
+ /**
17
+ * Backup XML files from a directory to a backup location
18
+ */
19
+ function backupXmlFiles(sourceDir, backupDir) {
20
+ const backedUpFiles = [];
21
+ if (!existsSync(sourceDir)) {
22
+ return backedUpFiles;
23
+ }
24
+ // Create backup directory
25
+ mkdirSync(backupDir, { recursive: true });
26
+ // Get all XML files
27
+ const xmlFiles = getXmlFiles(sourceDir);
28
+ for (const file of xmlFiles) {
29
+ const relativePath = relative(sourceDir, file);
30
+ const backupPath = join(backupDir, relativePath);
31
+ // Create subdirectories in backup if needed
32
+ const backupSubDir = dirname(backupPath);
33
+ mkdirSync(backupSubDir, { recursive: true });
34
+ // Copy file to backup
35
+ copyFileSync(file, backupPath);
36
+ backedUpFiles.push(file);
37
+ }
38
+ return backedUpFiles;
39
+ }
40
+ /**
41
+ * Restore XML files from backup
42
+ */
43
+ function restoreXmlFiles(sourceDir, backupDir) {
44
+ if (!existsSync(backupDir)) {
45
+ return;
46
+ }
47
+ const xmlFiles = getXmlFiles(backupDir);
48
+ for (const backupFile of xmlFiles) {
49
+ const relativePath = relative(backupDir, backupFile);
50
+ const originalPath = join(sourceDir, relativePath);
51
+ // Restore the file
52
+ copyFileSync(backupFile, originalPath);
53
+ }
54
+ // Clean up backup directory
55
+ try {
56
+ rmSync(backupDir, { recursive: true, force: true });
57
+ }
58
+ catch {
59
+ // Ignore cleanup errors
60
+ }
61
+ }
62
+ /**
63
+ * Build a MuleSoft project package
64
+ *
65
+ * By default, builds without modifying any files.
66
+ * Use `stripSecure: true` to strip secure:: prefixes for local development.
67
+ * Use `environment: 'production'` to enforce secure:: prefixes.
68
+ */
69
+ export async function packageProject(options = {}) {
70
+ const cwd = options.cwd ?? process.cwd();
71
+ const configChanges = [];
72
+ const muleDir = join(cwd, 'src', 'main', 'mule');
73
+ const backupDir = join(cwd, '.mule-build-backup');
74
+ // Pre-flight check
75
+ const checkResult = await canBuild(cwd);
76
+ if (!checkResult.success) {
77
+ return err(checkResult.error ?? new Error('Build requirements not met'));
78
+ }
79
+ // Load configuration
80
+ const configResult = loadConfig(cwd);
81
+ if (!configResult.success || !configResult.data) {
82
+ return err(configResult.error ?? new Error('Failed to load configuration'));
83
+ }
84
+ const config = configResult.data;
85
+ const profile = options.environment
86
+ ? getProfileConfig(config, options.environment)
87
+ : { mavenProfile: undefined, includeSource: options.withSource, secureProperties: undefined };
88
+ // Get project info
89
+ const nameResult = getProjectName(cwd);
90
+ const projectName = nameResult.success && nameResult.data ? nameResult.data : 'mule-app';
91
+ const versionResult = getVersion(cwd);
92
+ const version = options.version ?? (versionResult.success && versionResult.data ? versionResult.data : '1.0.0');
93
+ // Determine build mode
94
+ const buildMode = options.stripSecure
95
+ ? 'strip-secure'
96
+ : options.environment === 'production'
97
+ ? 'production'
98
+ : 'default';
99
+ logger.info(`Building ${projectName} (mode: ${buildMode})...`);
100
+ // Backup pom.xml
101
+ const pomBackupResult = backupPom(cwd);
102
+ if (!pomBackupResult.success) {
103
+ logger.warn('Could not backup pom.xml, proceeding anyway');
104
+ }
105
+ // Backup XML files before modification (only if stripping)
106
+ let xmlFilesBackedUp = false;
107
+ if (options.stripSecure) {
108
+ logger.step('Backing up XML files...');
109
+ const backedUp = backupXmlFiles(muleDir, backupDir);
110
+ xmlFilesBackedUp = backedUp.length > 0;
111
+ if (xmlFilesBackedUp) {
112
+ logger.debug(`Backed up ${backedUp.length} XML files`);
113
+ }
114
+ }
115
+ try {
116
+ // Clean first
117
+ logger.step('Cleaning previous build...');
118
+ const cleanResult = await mavenClean(cwd);
119
+ if (!cleanResult.success) {
120
+ logger.warn(`Maven clean failed: ${cleanResult.error?.message}, continuing anyway`);
121
+ }
122
+ // Handle stripping for local development (explicit opt-in)
123
+ if (options.stripSecure) {
124
+ logger.step('Stripping secure:: prefixes (--strip-secure)...');
125
+ const stripResult = await stripSecure(muleDir, { cwd });
126
+ if (stripResult.success && stripResult.data) {
127
+ configChanges.push(`Stripped secure:: prefixes from ${stripResult.data.filesProcessed.length} files`);
128
+ configChanges.push(`Total replacements: ${stripResult.data.replacementCount}`);
129
+ }
130
+ // Remove secure-properties:config from global.xml
131
+ const globalXmlPath = join(muleDir, 'global.xml');
132
+ if (existsSync(globalXmlPath)) {
133
+ const content = readFileSync(globalXmlPath, 'utf-8');
134
+ const newContent = removeSecurePropertiesConfig(content);
135
+ if (content !== newContent) {
136
+ writeFileSync(globalXmlPath, newContent);
137
+ configChanges.push('Removed secure-properties:config from global.xml');
138
+ }
139
+ }
140
+ }
141
+ // Handle production enforcement
142
+ if (options.environment === 'production') {
143
+ logger.step('Validating secure:: enforcement for production...');
144
+ const enforceResult = await enforceSecure(muleDir, { cwd });
145
+ if (enforceResult.success && enforceResult.data && !enforceResult.data.valid) {
146
+ const violations = enforceResult.data.violations;
147
+ logger.error(`Found ${violations.length} unsecured sensitive properties:`);
148
+ for (const v of violations.slice(0, 5)) {
149
+ logger.error(` ${v.file}:${v.line} - ${v.value}`);
150
+ }
151
+ if (violations.length > 5) {
152
+ logger.error(` ... and ${violations.length - 5} more`);
153
+ }
154
+ return err(new Error('Security validation failed. Use secure:: prefix for sensitive properties.'));
155
+ }
156
+ configChanges.push('Validated all sensitive properties have secure:: prefix');
157
+ }
158
+ // Build package name
159
+ const envSuffix = options.environment ? `-${options.environment}` : '';
160
+ const stripSuffix = options.stripSecure && !options.environment ? '-local' : '';
161
+ const envName = `${projectName}${envSuffix}${stripSuffix}-${version}`;
162
+ setName(envName, cwd);
163
+ configChanges.push(`Set package name to: ${envName}`);
164
+ // Run Maven build
165
+ logger.step('Running Maven build...');
166
+ const buildResult = await mavenBuild({
167
+ cwd,
168
+ profile: profile.mavenProfile,
169
+ withSource: options.withSource ?? profile.includeSource ?? false,
170
+ skipTests: options.skipTests ?? false,
171
+ });
172
+ if (!buildResult.success) {
173
+ return err(buildResult.error ?? new Error('Maven build failed'));
174
+ }
175
+ // Find the built JAR
176
+ const jarResult = findBuiltJar(cwd);
177
+ if (!jarResult.success || !jarResult.data) {
178
+ return err(jarResult.error ?? new Error('Could not find built JAR'));
179
+ }
180
+ const jarPath = jarResult.data;
181
+ const originalJarName = basename(jarPath);
182
+ // Copy and rename the JAR
183
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
184
+ const finalJarName = `${projectName}${envSuffix}${stripSuffix}-${version}-${timestamp}.jar`;
185
+ const finalJarPath = join(cwd, 'target', finalJarName);
186
+ copyFileSync(jarPath, finalJarPath);
187
+ // Create deployment info
188
+ const deploymentInfo = {
189
+ environment: options.environment,
190
+ packageName: finalJarName,
191
+ version,
192
+ buildDate: new Date().toISOString(),
193
+ builtBy: userInfo().username,
194
+ machine: hostname(),
195
+ configChanges,
196
+ };
197
+ // Write deployment info file
198
+ const infoPath = join(cwd, 'target', 'deployment-info.txt');
199
+ const infoContent = [
200
+ 'Package Information:',
201
+ '-------------------',
202
+ `Environment: ${deploymentInfo.environment ?? 'default'}`,
203
+ `Package Name: ${deploymentInfo.packageName}`,
204
+ `Build Date: ${deploymentInfo.buildDate}`,
205
+ `Version: ${deploymentInfo.version}`,
206
+ `Built By: ${deploymentInfo.builtBy}`,
207
+ `Machine: ${deploymentInfo.machine}`,
208
+ '',
209
+ 'Configuration Changes Applied:',
210
+ ...configChanges.map((c) => `- ${c}`),
211
+ '',
212
+ `Original JAR: ${originalJarName}`,
213
+ `Final Package: ${finalJarName}`,
214
+ ].join('\n');
215
+ writeFileSync(infoPath, infoContent);
216
+ logger.success(`Package built successfully: ${finalJarName}`);
217
+ return ok({
218
+ jarPath: finalJarPath,
219
+ deploymentInfo,
220
+ });
221
+ }
222
+ finally {
223
+ // Restore pom.xml
224
+ restorePom(cwd);
225
+ // Clean up pom.xml backup
226
+ try {
227
+ const pomBackupPath = join(cwd, 'pom.xml.bak');
228
+ if (existsSync(pomBackupPath)) {
229
+ unlinkSync(pomBackupPath);
230
+ }
231
+ }
232
+ catch {
233
+ // Ignore cleanup errors
234
+ }
235
+ // Restore XML files if they were backed up
236
+ if (xmlFilesBackedUp) {
237
+ logger.step('Restoring XML files...');
238
+ restoreXmlFiles(muleDir, backupDir);
239
+ }
240
+ }
241
+ }
242
+ //# sourceMappingURL=package.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.js","sourceRoot":"","sources":["../../../src/api/package.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Release API
3
+ *
4
+ * Programmatic interface for version management and releases.
5
+ */
6
+ import { Result, ReleaseOptions, ReleaseResult } from '../types/index.js';
7
+ /**
8
+ * Bump version and create a release
9
+ */
10
+ export declare function releaseVersion(options: ReleaseOptions): Promise<Result<ReleaseResult>>;
11
+ //# sourceMappingURL=release.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../../src/api/release.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,MAAM,EAAW,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAOnF;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAoG5F"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Release API
3
+ *
4
+ * Programmatic interface for version management and releases.
5
+ */
6
+ import * as semver from 'semver';
7
+ import { ok, err } from '../types/index.js';
8
+ import { canBuild } from '../config/SystemChecker.js';
9
+ import { packageProject } from './package.js';
10
+ import { getVersion, setVersion } from '../engine/PomParser.js';
11
+ import { isGitRepo, isWorkingTreeClean, commit, createTag, pushWithTags } from '../utils/git.js';
12
+ import { logger } from '../utils/logger.js';
13
+ /**
14
+ * Bump version and create a release
15
+ */
16
+ export async function releaseVersion(options) {
17
+ const cwd = options.cwd ?? process.cwd();
18
+ const shouldTag = options.tag !== false;
19
+ const shouldPush = options.push !== false;
20
+ // Pre-flight checks
21
+ const buildCheck = await canBuild(cwd);
22
+ if (!buildCheck.success) {
23
+ return err(buildCheck.error ?? new Error('Build requirements not met'));
24
+ }
25
+ // Check git repository
26
+ const isRepo = await isGitRepo(cwd);
27
+ if (!isRepo) {
28
+ return err(new Error('Not a git repository'));
29
+ }
30
+ // Check for clean working tree
31
+ const isClean = await isWorkingTreeClean(cwd);
32
+ if (!isClean) {
33
+ return err(new Error('Working tree is not clean. Commit or stash changes first.'));
34
+ }
35
+ // Get current version
36
+ const currentVersionResult = getVersion(cwd);
37
+ if (!currentVersionResult.success || !currentVersionResult.data) {
38
+ return err(currentVersionResult.error ?? new Error('Could not read current version'));
39
+ }
40
+ const currentVersion = currentVersionResult.data;
41
+ // Bump version
42
+ const newVersion = semver.inc(currentVersion, options.bump);
43
+ if (!newVersion) {
44
+ return err(new Error(`Invalid version: ${currentVersion}`));
45
+ }
46
+ logger.info(`Bumping version: ${currentVersion} → ${newVersion}`);
47
+ // Update pom.xml
48
+ const updateResult = setVersion(newVersion, cwd);
49
+ if (!updateResult.success) {
50
+ return err(updateResult.error ?? new Error('Failed to update version in pom.xml'));
51
+ }
52
+ logger.success(`Updated pom.xml version to ${newVersion}`);
53
+ // Build production package
54
+ logger.step('Building production package...');
55
+ const packageResult = await packageProject({
56
+ environment: 'production',
57
+ version: newVersion,
58
+ cwd,
59
+ });
60
+ if (!packageResult.success) {
61
+ // Rollback version change
62
+ setVersion(currentVersion, cwd);
63
+ return err(packageResult.error ?? new Error('Production build failed'));
64
+ }
65
+ // Commit changes
66
+ logger.step('Committing changes...');
67
+ const commitMessage = `Release v${newVersion}`;
68
+ const commitResult = await commit(commitMessage, cwd);
69
+ if (!commitResult.success) {
70
+ return err(commitResult.error ?? new Error('Failed to commit changes'));
71
+ }
72
+ // Create tag
73
+ let tagName;
74
+ if (shouldTag) {
75
+ tagName = `v${newVersion}`;
76
+ logger.step(`Creating tag: ${tagName}...`);
77
+ const tagResult = await createTag(tagName, `Release ${newVersion}`, cwd);
78
+ if (!tagResult.success) {
79
+ return err(tagResult.error ?? new Error('Failed to create tag'));
80
+ }
81
+ }
82
+ // Push to remote
83
+ let pushed = false;
84
+ if (shouldPush) {
85
+ logger.step('Pushing to remote...');
86
+ const pushResult = await pushWithTags(cwd);
87
+ if (!pushResult.success) {
88
+ logger.warn(`Push failed: ${pushResult.error?.message}. You can push manually.`);
89
+ }
90
+ else {
91
+ pushed = true;
92
+ }
93
+ }
94
+ logger.success(`Released version ${newVersion}`);
95
+ return ok({
96
+ previousVersion: currentVersion,
97
+ newVersion,
98
+ tagName,
99
+ pushed,
100
+ });
101
+ }
102
+ //# sourceMappingURL=release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.js","sourceRoot":"","sources":["../../../src/api/release.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Run API
3
+ *
4
+ * Programmatic interface for local Mule development.
5
+ */
6
+ import { Result, RunOptions, RunResult } from '../types/index.js';
7
+ /**
8
+ * Build and deploy to local Mule runtime
9
+ */
10
+ export declare function runLocal(options?: RunOptions): Promise<Result<RunResult>>;
11
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/api/run.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAW,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAM3E;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAuCnF"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Run API
3
+ *
4
+ * Programmatic interface for local Mule development.
5
+ */
6
+ import { ok, err } from '../types/index.js';
7
+ import { canRun } from '../config/SystemChecker.js';
8
+ import { packageProject } from './package.js';
9
+ import { deployToLocal } from '../engine/LocalRuntime.js';
10
+ import { logger } from '../utils/logger.js';
11
+ /**
12
+ * Build and deploy to local Mule runtime
13
+ */
14
+ export async function runLocal(options = {}) {
15
+ const cwd = options.cwd ?? process.cwd();
16
+ // Pre-flight check
17
+ const checkResult = await canRun(cwd);
18
+ if (!checkResult.success) {
19
+ return err(checkResult.error ?? new Error('Run requirements not met'));
20
+ }
21
+ logger.info('Building and deploying to local Mule runtime...');
22
+ // Build with stripped secure prefixes for local development
23
+ const packageResult = await packageProject({
24
+ stripSecure: true, // Strip secure:: for local runtime
25
+ skipTests: true, // Skip tests for local development
26
+ cwd,
27
+ });
28
+ if (!packageResult.success || !packageResult.data) {
29
+ return err(packageResult.error ?? new Error('Package build failed'));
30
+ }
31
+ const jarPath = packageResult.data.jarPath;
32
+ // Deploy to local runtime
33
+ const deployResult = await deployToLocal(jarPath);
34
+ if (!deployResult.success || !deployResult.data) {
35
+ return err(deployResult.error ?? new Error('Deployment failed'));
36
+ }
37
+ logger.success('Application deployed successfully');
38
+ logger.info(deployResult.data.message);
39
+ if (options.debug) {
40
+ logger.info('Debug mode enabled. Connect remote debugger to port 5005.');
41
+ }
42
+ return ok(deployResult.data);
43
+ }
44
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/api/run.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAU,EAAE,EAAE,GAAG,EAAyB,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,UAAsB,EAAE;IACrD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEzC,mBAAmB;IACnB,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IAE/D,4DAA4D;IAC5D,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC;QACzC,WAAW,EAAE,IAAI,EAAE,mCAAmC;QACtD,SAAS,EAAE,IAAI,EAAE,mCAAmC;QACpD,GAAG;KACJ,CAAC,CAAC;IAEH,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAClD,OAAO,GAAG,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;IAE3C,0BAA0B;IAC1B,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAElD,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAChD,OAAO,GAAG,CAAC,YAAY,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;IACpD,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEvC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Strip API
3
+ *
4
+ * Programmatic interface for stripping secure:: prefixes.
5
+ */
6
+ import { Result, StripOptions, StripResult } from '../types/index.js';
7
+ /**
8
+ * Strip secure:: prefixes from files
9
+ */
10
+ export declare function stripSecure(options?: StripOptions): Promise<Result<StripResult>>;
11
+ //# sourceMappingURL=strip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strip.d.ts","sourceRoot":"","sources":["../../../src/api/strip.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,MAAM,EAAW,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAI/E;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CA8C1F"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Strip API
3
+ *
4
+ * Programmatic interface for stripping secure:: prefixes.
5
+ */
6
+ import { join } from 'path';
7
+ import { existsSync } from 'fs';
8
+ import { ok, err } from '../types/index.js';
9
+ import { stripSecure as stripSecureEngine } from '../engine/XmlProcessor.js';
10
+ import { logger } from '../utils/logger.js';
11
+ /**
12
+ * Strip secure:: prefixes from files
13
+ */
14
+ export async function stripSecure(options = {}) {
15
+ const cwd = options.cwd ?? process.cwd();
16
+ // Determine target
17
+ let target;
18
+ if (options.file) {
19
+ target = options.file.startsWith('/') ? options.file : join(cwd, options.file);
20
+ if (!existsSync(target)) {
21
+ return err(new Error(`File not found: ${target}`));
22
+ }
23
+ }
24
+ else if (options.directory) {
25
+ target = options.directory.startsWith('/') ? options.directory : join(cwd, options.directory);
26
+ if (!existsSync(target)) {
27
+ return err(new Error(`Directory not found: ${target}`));
28
+ }
29
+ }
30
+ else {
31
+ // Default to src/main/mule
32
+ target = join(cwd, 'src', 'main', 'mule');
33
+ if (!existsSync(target)) {
34
+ return err(new Error(`Default directory not found: ${target}`));
35
+ }
36
+ }
37
+ if (options.dryRun) {
38
+ logger.info('Running in dry-run mode. No files will be modified.');
39
+ }
40
+ const result = await stripSecureEngine(target, {
41
+ dryRun: options.dryRun,
42
+ cwd,
43
+ });
44
+ if (!result.success || !result.data) {
45
+ return err(result.error ?? new Error('Strip operation failed'));
46
+ }
47
+ if (options.dryRun) {
48
+ logger.info(`Would process ${result.data.filesProcessed.length} files`);
49
+ logger.info(`Would make ${result.data.replacementCount} replacements`);
50
+ }
51
+ else {
52
+ logger.success(`Processed ${result.data.filesProcessed.length} files`);
53
+ logger.success(`Made ${result.data.replacementCount} replacements`);
54
+ }
55
+ return ok(result.data);
56
+ }
57
+ //# sourceMappingURL=strip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strip.js","sourceRoot":"","sources":["../../../src/api/strip.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Mule-Build CLI
3
+ *
4
+ * Command-line interface for MuleSoft build automation.
5
+ */
6
+ import { Command } from 'commander';
7
+ /**
8
+ * Create and configure the CLI program
9
+ */
10
+ export declare function createProgram(): Command;
11
+ /**
12
+ * Run the CLI
13
+ */
14
+ export declare function run(args?: string[]): Promise<void>;
15
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CA8JvC;AAED;;GAEG;AACH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGtE"}