@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,174 @@
1
+ /**
2
+ * Mule-Build CLI
3
+ *
4
+ * Command-line interface for MuleSoft build automation.
5
+ */
6
+ import { Command } from 'commander';
7
+ import chalk from 'chalk';
8
+ import { packageProject } from './api/package.js';
9
+ import { runLocal } from './api/run.js';
10
+ import { releaseVersion } from './api/release.js';
11
+ import { stripSecure } from './api/strip.js';
12
+ import { enforceSecure } from './api/enforce.js';
13
+ import { setLogLevel } from './utils/logger.js';
14
+ // Package info
15
+ const VERSION = '1.0.0';
16
+ const NAME = 'mule-build';
17
+ /**
18
+ * Create and configure the CLI program
19
+ */
20
+ export function createProgram() {
21
+ const program = new Command();
22
+ program
23
+ .name(NAME)
24
+ .description('MuleSoft build automation CLI')
25
+ .version(VERSION)
26
+ .option('-v, --verbose', 'Enable verbose output')
27
+ .hook('preAction', (thisCommand) => {
28
+ const opts = thisCommand.opts();
29
+ if (opts.verbose) {
30
+ setLogLevel('debug');
31
+ }
32
+ });
33
+ // Package command
34
+ program
35
+ .command('package')
36
+ .description('Build the MuleSoft application package')
37
+ .option('--strip-secure', 'Strip secure:: prefixes for local development (explicit opt-in)')
38
+ .option('-e, --env <environment>', 'Target environment: production (enforces secure::)')
39
+ .option('-s, --with-source', 'Include source code in package (Studio importable)')
40
+ .option('-S, --skip-tests', 'Skip MUnit tests')
41
+ .option('--version <version>', 'Override version')
42
+ .action(async (options) => {
43
+ // Validate environment if provided
44
+ if (options.env && options.env !== 'production') {
45
+ console.error(chalk.red(`Invalid environment: ${options.env}. Only 'production' is supported.`));
46
+ process.exit(1);
47
+ }
48
+ // Warn about incompatible options
49
+ if (options.stripSecure && options.env === 'production') {
50
+ console.error(chalk.red('Cannot use --strip-secure with -e production'));
51
+ process.exit(1);
52
+ }
53
+ const result = await packageProject({
54
+ environment: options.env,
55
+ stripSecure: options.stripSecure,
56
+ withSource: options.withSource,
57
+ skipTests: options.skipTests,
58
+ version: options.version,
59
+ });
60
+ if (!result.success) {
61
+ console.error(chalk.red(`Build failed: ${result.error?.message}`));
62
+ process.exit(1);
63
+ }
64
+ console.log(chalk.green(`\n✓ Package built successfully: ${result.data?.jarPath}`));
65
+ });
66
+ // Run command
67
+ program
68
+ .command('run')
69
+ .description('Build and deploy to local Mule runtime (strips secure:: automatically)')
70
+ .option('-d, --debug', 'Enable remote debugging on port 5005')
71
+ .option('-c, --clean', 'Run mvn clean before building')
72
+ .action(async (options) => {
73
+ const result = await runLocal({
74
+ debug: options.debug,
75
+ clean: options.clean,
76
+ });
77
+ if (!result.success) {
78
+ console.error(chalk.red(`Run failed: ${result.error?.message}`));
79
+ process.exit(1);
80
+ }
81
+ console.log(chalk.green('\n✓ Application deployed to local runtime'));
82
+ });
83
+ // Release command
84
+ program
85
+ .command('release')
86
+ .description('Bump version and create a release')
87
+ .requiredOption('-b, --bump <type>', 'Version bump type: major | minor | patch')
88
+ .option('--no-tag', 'Skip git tag creation')
89
+ .option('--no-push', 'Skip git push')
90
+ .action(async (options) => {
91
+ const bump = options.bump;
92
+ if (!['major', 'minor', 'patch'].includes(bump)) {
93
+ console.error(chalk.red(`Invalid bump type: ${bump}. Use 'major', 'minor', or 'patch'.`));
94
+ process.exit(1);
95
+ }
96
+ const result = await releaseVersion({
97
+ bump,
98
+ tag: options.tag,
99
+ push: options.push,
100
+ });
101
+ if (!result.success) {
102
+ console.error(chalk.red(`Release failed: ${result.error?.message}`));
103
+ process.exit(1);
104
+ }
105
+ console.log(chalk.green(`\n✓ Released version ${result.data?.newVersion}`));
106
+ if (result.data?.tagName) {
107
+ console.log(chalk.blue(` Tag: ${result.data.tagName}`));
108
+ }
109
+ });
110
+ // Strip command
111
+ program
112
+ .command('strip')
113
+ .description('Strip secure:: prefixes from XML files')
114
+ .option('-f, --file <path>', 'Process single file')
115
+ .option('-d, --dir <path>', 'Process all XML files in directory (default: src/main/mule)')
116
+ .option('--dry-run', 'Show changes without modifying files')
117
+ .action(async (options) => {
118
+ const result = await stripSecure({
119
+ file: options.file,
120
+ directory: options.dir,
121
+ dryRun: options.dryRun,
122
+ });
123
+ if (!result.success) {
124
+ console.error(chalk.red(`Strip failed: ${result.error?.message}`));
125
+ process.exit(1);
126
+ }
127
+ if (options.dryRun) {
128
+ console.log(chalk.yellow('\nDry run complete. No files were modified.'));
129
+ }
130
+ else {
131
+ console.log(chalk.green('\n✓ Secure prefixes stripped successfully'));
132
+ }
133
+ });
134
+ // Enforce command
135
+ program
136
+ .command('enforce')
137
+ .description('Check for unsecured sensitive properties')
138
+ .option('-f, --file <path>', 'Check single file')
139
+ .option('-d, --dir <path>', 'Check all XML files in directory (default: src/main/mule)')
140
+ .action(async (options) => {
141
+ const result = await enforceSecure({
142
+ file: options.file,
143
+ directory: options.dir,
144
+ });
145
+ if (!result.success) {
146
+ console.error(chalk.red(`Enforce failed: ${result.error?.message}`));
147
+ process.exit(1);
148
+ }
149
+ if (result.data?.valid) {
150
+ console.log(chalk.green('\n✓ All sensitive properties are properly secured'));
151
+ }
152
+ else {
153
+ console.log(chalk.red(`\n✗ Found ${result.data?.violations.length} unsecured properties`));
154
+ process.exit(1);
155
+ }
156
+ });
157
+ return program;
158
+ }
159
+ /**
160
+ * Run the CLI
161
+ */
162
+ export async function run(args = process.argv) {
163
+ const program = createProgram();
164
+ await program.parseAsync(args);
165
+ }
166
+ // Run CLI if this is the main module
167
+ const isMainModule = process.argv[1]?.includes('cli');
168
+ if (isMainModule) {
169
+ run().catch((error) => {
170
+ console.error(chalk.red(`Fatal error: ${error.message}`));
171
+ process.exit(1);
172
+ });
173
+ }
174
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Configuration Loader
3
+ *
4
+ * Loads and merges configuration from mule-build.yaml with defaults.
5
+ */
6
+ import { Result, MuleBuildConfig, ProfileConfig } from '../types/index.js';
7
+ /**
8
+ * Load configuration from mule-build.yaml or use defaults
9
+ */
10
+ export declare function loadConfig(cwd?: string): Result<MuleBuildConfig>;
11
+ /**
12
+ * Get profile configuration for an environment
13
+ */
14
+ export declare function getProfileConfig(config: MuleBuildConfig, environment: string): ProfileConfig;
15
+ /**
16
+ * Check if configuration file exists
17
+ */
18
+ export declare function configExists(cwd?: string): boolean;
19
+ //# sourceMappingURL=ConfigLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigLoader.d.ts","sourceRoot":"","sources":["../../../src/config/ConfigLoader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,MAAM,EAAW,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMpF;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAAC,eAAe,CAAC,CAiC/E;AAkBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa,CAoB5F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAEjE"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Configuration Loader
3
+ *
4
+ * Loads and merges configuration from mule-build.yaml with defaults.
5
+ */
6
+ import { readFileSync, existsSync } from 'fs';
7
+ import { join } from 'path';
8
+ import { parse } from 'yaml';
9
+ import { ok, err } from '../types/index.js';
10
+ import { DEFAULT_CONFIG, getDefaultProfile } from './defaults.js';
11
+ import { getProjectName } from '../engine/PomParser.js';
12
+ const CONFIG_FILENAME = 'mule-build.yaml';
13
+ /**
14
+ * Load configuration from mule-build.yaml or use defaults
15
+ */
16
+ export function loadConfig(cwd = process.cwd()) {
17
+ const configPath = join(cwd, CONFIG_FILENAME);
18
+ // Start with defaults
19
+ let config = { ...DEFAULT_CONFIG };
20
+ // Try to load config file
21
+ if (existsSync(configPath)) {
22
+ try {
23
+ const content = readFileSync(configPath, 'utf-8');
24
+ const fileConfig = parse(content);
25
+ // Merge with defaults
26
+ config = mergeConfig(config, fileConfig);
27
+ }
28
+ catch (error) {
29
+ return err(new Error(`Failed to parse ${CONFIG_FILENAME}: ${error instanceof Error ? error.message : String(error)}`));
30
+ }
31
+ }
32
+ // Auto-detect project name if not set
33
+ if (!config.project?.name) {
34
+ const nameResult = getProjectName(cwd);
35
+ if (nameResult.success && nameResult.data) {
36
+ config.project = config.project ?? {};
37
+ config.project.name = nameResult.data;
38
+ }
39
+ }
40
+ return ok(config);
41
+ }
42
+ /**
43
+ * Merge two configurations, with override taking precedence
44
+ */
45
+ function mergeConfig(base, override) {
46
+ return {
47
+ project: {
48
+ ...base.project,
49
+ ...override.project,
50
+ },
51
+ profiles: {
52
+ ...base.profiles,
53
+ ...override.profiles,
54
+ },
55
+ };
56
+ }
57
+ /**
58
+ * Get profile configuration for an environment
59
+ */
60
+ export function getProfileConfig(config, environment) {
61
+ const profile = config.profiles?.[environment];
62
+ if (profile) {
63
+ return profile;
64
+ }
65
+ // Fall back to defaults for production
66
+ if (environment === 'production') {
67
+ return getDefaultProfile('production');
68
+ }
69
+ // Unknown environment, return empty profile
70
+ return {
71
+ description: 'Default',
72
+ mavenProfile: undefined,
73
+ secureProperties: undefined,
74
+ includeSource: false,
75
+ enforceGitClean: false,
76
+ };
77
+ }
78
+ /**
79
+ * Check if configuration file exists
80
+ */
81
+ export function configExists(cwd = process.cwd()) {
82
+ return existsSync(join(cwd, CONFIG_FILENAME));
83
+ }
84
+ //# sourceMappingURL=ConfigLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigLoader.js","sourceRoot":"","sources":["../../../src/config/ConfigLoader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * System Checker
3
+ *
4
+ * Pre-flight validation for mule-build operations.
5
+ */
6
+ import { Result } from '../types/index.js';
7
+ export interface SystemCheckResult {
8
+ maven: boolean;
9
+ muleHome: boolean;
10
+ pomXml: boolean;
11
+ muleSourceDir: boolean;
12
+ }
13
+ export interface SystemCheckError {
14
+ component: string;
15
+ message: string;
16
+ }
17
+ /**
18
+ * Run all system checks
19
+ */
20
+ export declare function runSystemChecks(cwd?: string): Promise<Result<SystemCheckResult>>;
21
+ /**
22
+ * Check if basic requirements for build are met
23
+ */
24
+ export declare function canBuild(cwd?: string): Promise<Result<void>>;
25
+ /**
26
+ * Check if requirements for local run are met
27
+ */
28
+ export declare function canRun(cwd?: string): Promise<Result<void>>;
29
+ //# sourceMappingURL=SystemChecker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemChecker.d.ts","sourceRoot":"","sources":["../../../src/config/SystemChecker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,MAAM,EAAW,MAAM,mBAAmB,CAAC;AAKpD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CA+CpC;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAWjF;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAc/E"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * System Checker
3
+ *
4
+ * Pre-flight validation for mule-build operations.
5
+ */
6
+ import { existsSync } from 'fs';
7
+ import { join } from 'path';
8
+ import { ok, err } from '../types/index.js';
9
+ import { isMavenInstalled } from '../engine/MavenBuilder.js';
10
+ import { validateMuleHome } from '../engine/LocalRuntime.js';
11
+ import { pomExists } from '../engine/PomParser.js';
12
+ /**
13
+ * Run all system checks
14
+ */
15
+ export async function runSystemChecks(cwd = process.cwd()) {
16
+ const errors = [];
17
+ // Check Maven
18
+ const mavenInstalled = await isMavenInstalled();
19
+ if (!mavenInstalled) {
20
+ errors.push({
21
+ component: 'maven',
22
+ message: 'Maven is not installed or not in PATH',
23
+ });
24
+ }
25
+ // Check MULE_HOME (optional, only needed for run command)
26
+ const muleHomeResult = validateMuleHome();
27
+ const muleHomeValid = muleHomeResult.success;
28
+ // Check pom.xml
29
+ const pomValid = pomExists(cwd);
30
+ if (!pomValid) {
31
+ errors.push({
32
+ component: 'pom.xml',
33
+ message: 'pom.xml not found in current directory',
34
+ });
35
+ }
36
+ // Check src/main/mule directory
37
+ const muleSourceDir = join(cwd, 'src', 'main', 'mule');
38
+ const muleSourceExists = existsSync(muleSourceDir);
39
+ if (!muleSourceExists) {
40
+ errors.push({
41
+ component: 'mule source',
42
+ message: 'src/main/mule directory not found',
43
+ });
44
+ }
45
+ const result = {
46
+ maven: mavenInstalled,
47
+ muleHome: muleHomeValid,
48
+ pomXml: pomValid,
49
+ muleSourceDir: muleSourceExists,
50
+ };
51
+ if (errors.length > 0) {
52
+ return err(new Error(errors.map((e) => `${e.component}: ${e.message}`).join('; ')));
53
+ }
54
+ return ok(result);
55
+ }
56
+ /**
57
+ * Check if basic requirements for build are met
58
+ */
59
+ export async function canBuild(cwd = process.cwd()) {
60
+ const mavenInstalled = await isMavenInstalled();
61
+ if (!mavenInstalled) {
62
+ return err(new Error('Maven is not installed or not in PATH'));
63
+ }
64
+ if (!pomExists(cwd)) {
65
+ return err(new Error('pom.xml not found in current directory'));
66
+ }
67
+ return ok(undefined);
68
+ }
69
+ /**
70
+ * Check if requirements for local run are met
71
+ */
72
+ export async function canRun(cwd = process.cwd()) {
73
+ // First check build requirements
74
+ const buildCheck = await canBuild(cwd);
75
+ if (!buildCheck.success) {
76
+ return buildCheck;
77
+ }
78
+ // Check MULE_HOME
79
+ const muleHomeResult = validateMuleHome();
80
+ if (!muleHomeResult.success) {
81
+ return err(muleHomeResult.error ?? new Error('MULE_HOME is not configured'));
82
+ }
83
+ return ok(undefined);
84
+ }
85
+ //# sourceMappingURL=SystemChecker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemChecker.js","sourceRoot":"","sources":["../../../src/config/SystemChecker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Default configuration values
3
+ */
4
+ import { MuleBuildConfig, ProfileConfig, BuildEnvironment } from '../types/index.js';
5
+ /**
6
+ * Default profile configurations
7
+ */
8
+ export declare const DEFAULT_PROFILES: Record<string, ProfileConfig>;
9
+ /**
10
+ * Default configuration when no config file is found
11
+ */
12
+ export declare const DEFAULT_CONFIG: MuleBuildConfig;
13
+ /**
14
+ * Get the default profile for an environment
15
+ */
16
+ export declare function getDefaultProfile(environment: BuildEnvironment): ProfileConfig;
17
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAQ1D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,eAK5B,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,GAAG,aAAa,CAU9E"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Default configuration values
3
+ */
4
+ /**
5
+ * Default profile configurations
6
+ */
7
+ export const DEFAULT_PROFILES = {
8
+ production: {
9
+ description: 'CI/CD Artifacts',
10
+ mavenProfile: 'prod',
11
+ secureProperties: 'enforce',
12
+ includeSource: false,
13
+ enforceGitClean: true,
14
+ },
15
+ };
16
+ /**
17
+ * Default configuration when no config file is found
18
+ */
19
+ export const DEFAULT_CONFIG = {
20
+ project: {
21
+ name: undefined, // Auto-detected from pom.xml
22
+ },
23
+ profiles: DEFAULT_PROFILES,
24
+ };
25
+ /**
26
+ * Get the default profile for an environment
27
+ */
28
+ export function getDefaultProfile(environment) {
29
+ return (DEFAULT_PROFILES[environment] ?? {
30
+ description: 'Default',
31
+ mavenProfile: undefined,
32
+ secureProperties: undefined,
33
+ includeSource: false,
34
+ enforceGitClean: false,
35
+ });
36
+ }
37
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAkC;IAC7D,UAAU,EAAE;QACV,WAAW,EAAE,iBAAiB;QAC9B,YAAY,EAAE,MAAM;QACpB,gBAAgB,EAAE,SAAS;QAC3B,aAAa,EAAE,KAAK;QACpB,eAAe,EAAE,IAAI;KACtB;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,OAAO,EAAE;QACP,IAAI,EAAE,SAAS,EAAE,6BAA6B;KAC/C;IACD,QAAQ,EAAE,gBAAgB;CAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAA6B;IAC7D,OAAO,CACL,gBAAgB,CAAC,WAAW,CAAC,IAAI;QAC/B,WAAW,EAAE,SAAS;QACtB,YAAY,EAAE,SAAS;QACvB,gBAAgB,EAAE,SAAS;QAC3B,aAAa,EAAE,KAAK;QACpB,eAAe,EAAE,KAAK;KACvB,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Local Runtime Engine
3
+ *
4
+ * Handles local Mule runtime interactions for development.
5
+ */
6
+ import { Result, RunResult } from '../types/index.js';
7
+ /**
8
+ * Get MULE_HOME from environment
9
+ */
10
+ export declare function getMuleHome(): string | undefined;
11
+ /**
12
+ * Validate MULE_HOME is set and valid
13
+ */
14
+ export declare function validateMuleHome(): Result<string>;
15
+ /**
16
+ * Get the apps directory path
17
+ */
18
+ export declare function getAppsDir(muleHome: string): string;
19
+ /**
20
+ * Get the logs directory path
21
+ */
22
+ export declare function getLogsDir(muleHome: string): string;
23
+ /**
24
+ * Check if a port is in use
25
+ */
26
+ export declare function isPortInUse(port: number): Promise<boolean>;
27
+ /**
28
+ * Deploy a JAR to the local Mule runtime
29
+ */
30
+ export declare function deployToLocal(jarPath: string): Promise<Result<RunResult>>;
31
+ /**
32
+ * Start the Mule runtime with optional debug mode
33
+ */
34
+ export declare function startMuleRuntime(options?: {
35
+ debug?: boolean;
36
+ }): Promise<Result<void>>;
37
+ /**
38
+ * Stop the Mule runtime
39
+ */
40
+ export declare function stopMuleRuntime(): Promise<Result<void>>;
41
+ //# sourceMappingURL=LocalRuntime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalRuntime.d.ts","sourceRoot":"","sources":["../../../src/engine/LocalRuntime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,MAAM,EAAW,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAI/D;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,GAAG,SAAS,CAEhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,MAAM,CAAC,CAiBjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQhE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAsC/E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAyB/F;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAkB7D"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Local Runtime Engine
3
+ *
4
+ * Handles local Mule runtime interactions for development.
5
+ */
6
+ import { existsSync, copyFileSync } from 'fs';
7
+ import { join, basename } from 'path';
8
+ import { ok, err } from '../types/index.js';
9
+ import { exec } from '../utils/exec.js';
10
+ import { logger } from '../utils/logger.js';
11
+ /**
12
+ * Get MULE_HOME from environment
13
+ */
14
+ export function getMuleHome() {
15
+ return process.env.MULE_HOME;
16
+ }
17
+ /**
18
+ * Validate MULE_HOME is set and valid
19
+ */
20
+ export function validateMuleHome() {
21
+ const muleHome = getMuleHome();
22
+ if (!muleHome) {
23
+ return err(new Error('MULE_HOME environment variable is not set'));
24
+ }
25
+ if (!existsSync(muleHome)) {
26
+ return err(new Error(`MULE_HOME directory does not exist: ${muleHome}`));
27
+ }
28
+ const muleBin = join(muleHome, 'bin', 'mule');
29
+ if (!existsSync(muleBin)) {
30
+ return err(new Error(`Mule executable not found at: ${muleBin}`));
31
+ }
32
+ return ok(muleHome);
33
+ }
34
+ /**
35
+ * Get the apps directory path
36
+ */
37
+ export function getAppsDir(muleHome) {
38
+ return join(muleHome, 'apps');
39
+ }
40
+ /**
41
+ * Get the logs directory path
42
+ */
43
+ export function getLogsDir(muleHome) {
44
+ return join(muleHome, 'logs');
45
+ }
46
+ /**
47
+ * Check if a port is in use
48
+ */
49
+ export async function isPortInUse(port) {
50
+ const result = await exec('lsof', ['-i', `:${port}`]);
51
+ if (!result.success) {
52
+ return false;
53
+ }
54
+ return result.data?.stdout.trim() !== '';
55
+ }
56
+ /**
57
+ * Deploy a JAR to the local Mule runtime
58
+ */
59
+ export async function deployToLocal(jarPath) {
60
+ // Validate MULE_HOME
61
+ const muleHomeResult = validateMuleHome();
62
+ if (!muleHomeResult.success || !muleHomeResult.data) {
63
+ return err(muleHomeResult.error ?? new Error('Invalid MULE_HOME'));
64
+ }
65
+ const muleHome = muleHomeResult.data;
66
+ // Validate JAR exists
67
+ if (!existsSync(jarPath)) {
68
+ return err(new Error(`JAR file not found: ${jarPath}`));
69
+ }
70
+ // Check port 8081
71
+ const portInUse = await isPortInUse(8081);
72
+ if (portInUse) {
73
+ return err(new Error('Port 8081 is already in use. Stop the existing Mule runtime first.'));
74
+ }
75
+ // Copy JAR to apps directory
76
+ const appsDir = getAppsDir(muleHome);
77
+ const jarName = basename(jarPath);
78
+ const targetPath = join(appsDir, jarName);
79
+ try {
80
+ logger.step(`Deploying ${jarName} to ${appsDir}...`);
81
+ copyFileSync(jarPath, targetPath);
82
+ logger.success(`Deployed ${jarName}`);
83
+ return ok({
84
+ deployed: true,
85
+ jarPath: targetPath,
86
+ message: `Application deployed to ${targetPath}. Mule runtime will auto-detect and deploy.`,
87
+ });
88
+ }
89
+ catch (error) {
90
+ return err(error instanceof Error ? error : new Error(String(error)));
91
+ }
92
+ }
93
+ /**
94
+ * Start the Mule runtime with optional debug mode
95
+ */
96
+ export async function startMuleRuntime(options = {}) {
97
+ const muleHomeResult = validateMuleHome();
98
+ if (!muleHomeResult.success || !muleHomeResult.data) {
99
+ return err(muleHomeResult.error ?? new Error('Invalid MULE_HOME'));
100
+ }
101
+ const muleHome = muleHomeResult.data;
102
+ const muleBin = join(muleHome, 'bin', 'mule');
103
+ const args = ['start'];
104
+ if (options.debug) {
105
+ args.push('-debug');
106
+ logger.info('Starting Mule with debug enabled on port 5005');
107
+ }
108
+ logger.step('Starting Mule runtime...');
109
+ const result = await exec(muleBin, args, { cwd: muleHome });
110
+ if (!result.success) {
111
+ return err(result.error ?? new Error('Failed to start Mule'));
112
+ }
113
+ return ok(undefined);
114
+ }
115
+ /**
116
+ * Stop the Mule runtime
117
+ */
118
+ export async function stopMuleRuntime() {
119
+ const muleHomeResult = validateMuleHome();
120
+ if (!muleHomeResult.success || !muleHomeResult.data) {
121
+ return err(muleHomeResult.error ?? new Error('Invalid MULE_HOME'));
122
+ }
123
+ const muleHome = muleHomeResult.data;
124
+ const muleBin = join(muleHome, 'bin', 'mule');
125
+ logger.step('Stopping Mule runtime...');
126
+ const result = await exec(muleBin, ['stop'], { cwd: muleHome });
127
+ if (!result.success) {
128
+ return err(result.error ?? new Error('Failed to stop Mule'));
129
+ }
130
+ return ok(undefined);
131
+ }
132
+ //# sourceMappingURL=LocalRuntime.js.map