aspire2coolify 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 (58) hide show
  1. package/README.md +202 -0
  2. package/dist/cli/index.d.ts +7 -0
  3. package/dist/cli/index.d.ts.map +1 -0
  4. package/dist/cli/index.js +221 -0
  5. package/dist/cli/index.js.map +1 -0
  6. package/dist/config/index.d.ts +29 -0
  7. package/dist/config/index.d.ts.map +1 -0
  8. package/dist/config/index.js +76 -0
  9. package/dist/config/index.js.map +1 -0
  10. package/dist/generators/coolify/application.d.ts +7 -0
  11. package/dist/generators/coolify/application.d.ts.map +1 -0
  12. package/dist/generators/coolify/application.js +65 -0
  13. package/dist/generators/coolify/application.js.map +1 -0
  14. package/dist/generators/coolify/database.d.ts +11 -0
  15. package/dist/generators/coolify/database.d.ts.map +1 -0
  16. package/dist/generators/coolify/database.js +60 -0
  17. package/dist/generators/coolify/database.js.map +1 -0
  18. package/dist/generators/coolify/index.d.ts +24 -0
  19. package/dist/generators/coolify/index.d.ts.map +1 -0
  20. package/dist/generators/coolify/index.js +105 -0
  21. package/dist/generators/coolify/index.js.map +1 -0
  22. package/dist/generators/coolify/service.d.ts +8 -0
  23. package/dist/generators/coolify/service.d.ts.map +1 -0
  24. package/dist/generators/coolify/service.js +75 -0
  25. package/dist/generators/coolify/service.js.map +1 -0
  26. package/dist/models/aspire.d.ts +87 -0
  27. package/dist/models/aspire.d.ts.map +1 -0
  28. package/dist/models/aspire.js +14 -0
  29. package/dist/models/aspire.js.map +1 -0
  30. package/dist/models/coolify.d.ts +41 -0
  31. package/dist/models/coolify.d.ts.map +1 -0
  32. package/dist/models/coolify.js +19 -0
  33. package/dist/models/coolify.js.map +1 -0
  34. package/dist/parser/extractors/application.d.ts +8 -0
  35. package/dist/parser/extractors/application.d.ts.map +1 -0
  36. package/dist/parser/extractors/application.js +150 -0
  37. package/dist/parser/extractors/application.js.map +1 -0
  38. package/dist/parser/extractors/container.d.ts +8 -0
  39. package/dist/parser/extractors/container.d.ts.map +1 -0
  40. package/dist/parser/extractors/container.js +141 -0
  41. package/dist/parser/extractors/container.js.map +1 -0
  42. package/dist/parser/extractors/database.d.ts +12 -0
  43. package/dist/parser/extractors/database.d.ts.map +1 -0
  44. package/dist/parser/extractors/database.js +128 -0
  45. package/dist/parser/extractors/database.js.map +1 -0
  46. package/dist/parser/extractors/index.d.ts +7 -0
  47. package/dist/parser/extractors/index.d.ts.map +1 -0
  48. package/dist/parser/extractors/index.js +7 -0
  49. package/dist/parser/extractors/index.js.map +1 -0
  50. package/dist/parser/index.d.ts +27 -0
  51. package/dist/parser/index.d.ts.map +1 -0
  52. package/dist/parser/index.js +201 -0
  53. package/dist/parser/index.js.map +1 -0
  54. package/dist/parser/tokenizer.d.ts +45 -0
  55. package/dist/parser/tokenizer.d.ts.map +1 -0
  56. package/dist/parser/tokenizer.js +166 -0
  57. package/dist/parser/tokenizer.js.map +1 -0
  58. package/package.json +51 -0
package/README.md ADDED
@@ -0,0 +1,202 @@
1
+ # aspire2coolify
2
+
3
+ CLI tool to convert .NET Aspire configurations to Coolify CLI commands.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install -g aspire2coolify
9
+ ```
10
+
11
+ Or run locally:
12
+
13
+ ```bash
14
+ npm install
15
+ npm run build
16
+ ```
17
+
18
+ ## Usage
19
+
20
+ ### Parse Command
21
+
22
+ Parse an Aspire Program.cs file and display the extracted model:
23
+
24
+ ```bash
25
+ aspire2coolify parse ./AppHost/Program.cs
26
+
27
+ # Output to file
28
+ aspire2coolify parse ./AppHost/Program.cs -o model.json
29
+ ```
30
+
31
+ ### Generate Command
32
+
33
+ Generate Coolify CLI commands from an Aspire Program.cs file:
34
+
35
+ ```bash
36
+ aspire2coolify generate ./AppHost/Program.cs
37
+
38
+ # Output to file
39
+ aspire2coolify generate ./AppHost/Program.cs -o deploy.sh
40
+
41
+ # With Coolify project/server IDs
42
+ aspire2coolify generate ./AppHost/Program.cs \
43
+ --project-id proj-123 \
44
+ --server-id srv-456
45
+
46
+ # Output as JSON
47
+ aspire2coolify generate ./AppHost/Program.cs --json
48
+ ```
49
+
50
+ ### Deploy Command
51
+
52
+ Parse and execute Coolify commands (requires `coolify` CLI to be installed):
53
+
54
+ ```bash
55
+ # Dry run (shows commands without executing)
56
+ aspire2coolify deploy ./AppHost/Program.cs --dry-run
57
+
58
+ # Execute commands
59
+ aspire2coolify deploy ./AppHost/Program.cs
60
+ ```
61
+
62
+ ### Init Command
63
+
64
+ Create a configuration file:
65
+
66
+ ```bash
67
+ aspire2coolify init
68
+ ```
69
+
70
+ ## Example
71
+
72
+ ### Input (Program.cs)
73
+
74
+ ```csharp
75
+ var builder = DistributedApplication.CreateBuilder(args);
76
+
77
+ var postgres = builder.AddAzurePostgresFlexibleServer("postgreServer")
78
+ .RunAsContainer(a => a
79
+ .WithImage("pgvector/pgvector")
80
+ .WithImageTag("pg17")
81
+ .WithDataVolume()
82
+ .WithHostPort(5432)
83
+ );
84
+ var db = postgres.AddDatabase("db");
85
+
86
+ builder.AddNpmApp("svelte", "../VibeCode.SvelteKit")
87
+ .WithEnvironment("BODY_SIZE_LIMIT", "10M")
88
+ .WithHttpEndpoint(env: "PORT")
89
+ .WithReference(db)
90
+ .PublishAsDockerFile();
91
+
92
+ builder.Build().Run();
93
+ ```
94
+
95
+ ### Output (Coolify Commands)
96
+
97
+ ```bash
98
+ #!/bin/bash
99
+ # Generated by aspire2coolify
100
+
101
+ # Database: postgreServer (postgres)
102
+ coolify \
103
+ database:create \
104
+ --name "postgreServer" \
105
+ --type postgres \
106
+ --image "pgvector/pgvector:pg17" \
107
+ --public-port 5432
108
+
109
+ # Database: db (postgres)
110
+ coolify \
111
+ database:create \
112
+ --name "db" \
113
+ --type postgres
114
+
115
+ # Application: svelte (npm)
116
+ coolify \
117
+ application:create \
118
+ --name "svelte" \
119
+ --build-pack dockerfile \
120
+ --source "../VibeCode.SvelteKit" \
121
+ --env "BODY_SIZE_LIMIT=10M" \
122
+ --env "DATABASE_URL=${db.connectionString}" \
123
+ --env "PORT=3000"
124
+ ```
125
+
126
+ ## Configuration
127
+
128
+ Create an `aspire2coolify.config.js` file:
129
+
130
+ ```javascript
131
+ export default {
132
+ coolify: {
133
+ projectId: 'your-project-id',
134
+ serverId: 'your-server-id',
135
+ environmentId: 'your-environment-id',
136
+ },
137
+ defaults: {
138
+ buildPack: 'nixpacks',
139
+ },
140
+ output: {
141
+ includeComments: true,
142
+ format: 'shell',
143
+ },
144
+ };
145
+ ```
146
+
147
+ ## Supported Aspire Methods
148
+
149
+ ### Databases
150
+ - `AddPostgres`, `AddAzurePostgresFlexibleServer`
151
+ - `AddSqlServer`, `AddAzureSqlServer`
152
+ - `AddMySql`
153
+ - `AddMongoDB`
154
+ - `AddRedis`
155
+
156
+ ### Services
157
+ - `AddRabbitMQ`
158
+ - `AddKafka`
159
+ - `AddKeycloak`
160
+ - `AddSeq`
161
+ - `AddMailDev`
162
+ - `AddElasticsearch`
163
+
164
+ ### Storage
165
+ - `AddMinioContainer`
166
+
167
+ ### Applications
168
+ - `AddNpmApp`, `AddNodeApp`
169
+ - `AddProject<T>`
170
+ - `AddDockerfile`
171
+ - `AddContainer`
172
+
173
+ ### Configuration Methods
174
+ - `WithEnvironment(key, value)`
175
+ - `WithReference(resource)`
176
+ - `WithHttpEndpoint()`, `WithHttpsEndpoint()`
177
+ - `WithExternalHttpEndpoints()`
178
+ - `WithHostPort(port)`
179
+ - `WithImage(image)`, `WithImageTag(tag)`
180
+ - `WithDataVolume()`
181
+ - `PublishAsDockerFile()`
182
+ - `RunAsContainer()`
183
+
184
+ ## Development
185
+
186
+ ```bash
187
+ # Install dependencies
188
+ npm install
189
+
190
+ # Build
191
+ npm run build
192
+
193
+ # Run tests
194
+ npm test
195
+
196
+ # Watch mode
197
+ npm run dev
198
+ ```
199
+
200
+ ## License
201
+
202
+ MIT
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * aspire2coolify CLI
4
+ * Convert .NET Aspire configurations to Coolify CLI commands
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
@@ -0,0 +1,221 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * aspire2coolify CLI
4
+ * Convert .NET Aspire configurations to Coolify CLI commands
5
+ */
6
+ import { Command } from 'commander';
7
+ import { writeFileSync, existsSync } from 'node:fs';
8
+ import { resolve } from 'node:path';
9
+ import { execSync } from 'node:child_process';
10
+ import { parseFile } from '../parser/index.js';
11
+ import { generate } from '../generators/coolify/index.js';
12
+ import { loadConfig, createConfigTemplate } from '../config/index.js';
13
+ const program = new Command();
14
+ program
15
+ .name('aspire2coolify')
16
+ .description('Convert .NET Aspire configurations to Coolify CLI commands')
17
+ .version('1.0.0');
18
+ // Parse command
19
+ program
20
+ .command('parse <file>')
21
+ .description('Parse an Aspire Program.cs file and display the extracted model')
22
+ .option('-o, --output <file>', 'Output file for the JSON model')
23
+ .option('--pretty', 'Pretty print JSON output', true)
24
+ .action(async (file, options) => {
25
+ try {
26
+ const filePath = resolve(file);
27
+ if (!existsSync(filePath)) {
28
+ console.error(`Error: File not found: ${filePath}`);
29
+ process.exit(1);
30
+ }
31
+ console.log(`Parsing: ${filePath}`);
32
+ const result = parseFile(filePath);
33
+ if (result.errors.length > 0) {
34
+ console.error('\nErrors:');
35
+ for (const error of result.errors) {
36
+ console.error(` - ${error.message}`);
37
+ }
38
+ }
39
+ if (result.warnings.length > 0) {
40
+ console.warn('\nWarnings:');
41
+ for (const warning of result.warnings) {
42
+ console.warn(` - ${warning}`);
43
+ }
44
+ }
45
+ const jsonOutput = options.pretty
46
+ ? JSON.stringify(result.app, null, 2)
47
+ : JSON.stringify(result.app);
48
+ if (options.output) {
49
+ writeFileSync(options.output, jsonOutput);
50
+ console.log(`\nModel saved to: ${options.output}`);
51
+ }
52
+ else {
53
+ console.log('\nExtracted Model:');
54
+ console.log(jsonOutput);
55
+ }
56
+ // Summary
57
+ console.log('\nSummary:');
58
+ console.log(` Databases: ${result.app.databases.length}`);
59
+ console.log(` Services: ${result.app.services.length}`);
60
+ console.log(` Storage: ${result.app.storage.length}`);
61
+ console.log(` Applications: ${result.app.applications.length}`);
62
+ console.log(` References: ${result.app.references.length}`);
63
+ }
64
+ catch (err) {
65
+ console.error(`Error: ${err instanceof Error ? err.message : err}`);
66
+ process.exit(1);
67
+ }
68
+ });
69
+ // Generate command
70
+ program
71
+ .command('generate <file>')
72
+ .description('Generate Coolify CLI commands from an Aspire Program.cs file')
73
+ .option('-o, --output <file>', 'Output file for the generated script')
74
+ .option('-c, --config <file>', 'Config file path')
75
+ .option('--no-comments', 'Exclude comments from output')
76
+ .option('--project-id <id>', 'Coolify project ID')
77
+ .option('--server-id <id>', 'Coolify server ID')
78
+ .option('--environment-id <id>', 'Coolify environment ID')
79
+ .option('--json', 'Output as JSON instead of shell script')
80
+ .action(async (file, options) => {
81
+ try {
82
+ const filePath = resolve(file);
83
+ if (!existsSync(filePath)) {
84
+ console.error(`Error: File not found: ${filePath}`);
85
+ process.exit(1);
86
+ }
87
+ // Load config
88
+ const config = options.config
89
+ ? await import(resolve(options.config)).then((m) => m.default || m)
90
+ : await loadConfig();
91
+ console.log(`Parsing: ${filePath}`);
92
+ const parseResult = parseFile(filePath);
93
+ if (parseResult.errors.length > 0) {
94
+ console.error('\nParse Errors:');
95
+ for (const error of parseResult.errors) {
96
+ console.error(` - ${error.message}`);
97
+ }
98
+ }
99
+ // Generate commands
100
+ const generateResult = generate(parseResult.app, {
101
+ includeComments: options.comments !== false,
102
+ projectId: options.projectId || config.coolify?.projectId,
103
+ serverId: options.serverId || config.coolify?.serverId,
104
+ environmentId: options.environmentId || config.coolify?.environmentId,
105
+ });
106
+ if (generateResult.errors.length > 0) {
107
+ console.error('\nGeneration Errors:');
108
+ for (const error of generateResult.errors) {
109
+ console.error(` - ${error}`);
110
+ }
111
+ }
112
+ // Output
113
+ let output;
114
+ if (options.json) {
115
+ output = JSON.stringify(generateResult.commands, null, 2);
116
+ }
117
+ else {
118
+ output = generateResult.script;
119
+ }
120
+ if (options.output) {
121
+ writeFileSync(options.output, output);
122
+ console.log(`\nScript saved to: ${options.output}`);
123
+ }
124
+ else {
125
+ console.log('\nGenerated Commands:');
126
+ console.log('─'.repeat(50));
127
+ console.log(output);
128
+ }
129
+ // Summary
130
+ console.log('\nGenerated:');
131
+ console.log(` ${generateResult.commands.length} Coolify commands`);
132
+ }
133
+ catch (err) {
134
+ console.error(`Error: ${err instanceof Error ? err.message : err}`);
135
+ process.exit(1);
136
+ }
137
+ });
138
+ // Deploy command
139
+ program
140
+ .command('deploy <file>')
141
+ .description('Parse and execute Coolify commands (requires coolify CLI)')
142
+ .option('-c, --config <file>', 'Config file path')
143
+ .option('--dry-run', 'Print commands without executing')
144
+ .option('--project-id <id>', 'Coolify project ID')
145
+ .option('--server-id <id>', 'Coolify server ID')
146
+ .option('--environment-id <id>', 'Coolify environment ID')
147
+ .action(async (file, options) => {
148
+ try {
149
+ const filePath = resolve(file);
150
+ if (!existsSync(filePath)) {
151
+ console.error(`Error: File not found: ${filePath}`);
152
+ process.exit(1);
153
+ }
154
+ // Load config
155
+ const config = options.config
156
+ ? await import(resolve(options.config)).then((m) => m.default || m)
157
+ : await loadConfig();
158
+ console.log(`Parsing: ${filePath}`);
159
+ const parseResult = parseFile(filePath);
160
+ if (parseResult.errors.length > 0) {
161
+ console.error('\nParse Errors:');
162
+ for (const error of parseResult.errors) {
163
+ console.error(` - ${error.message}`);
164
+ }
165
+ process.exit(1);
166
+ }
167
+ // Generate commands
168
+ const generateResult = generate(parseResult.app, {
169
+ includeComments: false,
170
+ projectId: options.projectId || config.coolify?.projectId,
171
+ serverId: options.serverId || config.coolify?.serverId,
172
+ environmentId: options.environmentId || config.coolify?.environmentId,
173
+ });
174
+ if (generateResult.errors.length > 0) {
175
+ console.error('\nGeneration Errors:');
176
+ for (const error of generateResult.errors) {
177
+ console.error(` - ${error}`);
178
+ }
179
+ process.exit(1);
180
+ }
181
+ // Execute commands
182
+ console.log(`\nDeploying ${generateResult.commands.length} resources...`);
183
+ for (const cmd of generateResult.commands) {
184
+ const fullCommand = `coolify ${cmd.command} ${cmd.args.join(' ')}`;
185
+ if (options.dryRun) {
186
+ console.log(`[DRY RUN] ${fullCommand}`);
187
+ }
188
+ else {
189
+ console.log(`Executing: ${fullCommand}`);
190
+ try {
191
+ const output = execSync(fullCommand, { encoding: 'utf-8' });
192
+ console.log(output);
193
+ }
194
+ catch (execErr) {
195
+ console.error(`Command failed: ${execErr instanceof Error ? execErr.message : execErr}`);
196
+ }
197
+ }
198
+ }
199
+ console.log('\nDeployment complete!');
200
+ }
201
+ catch (err) {
202
+ console.error(`Error: ${err instanceof Error ? err.message : err}`);
203
+ process.exit(1);
204
+ }
205
+ });
206
+ // Init command
207
+ program
208
+ .command('init')
209
+ .description('Create a configuration file')
210
+ .option('-f, --force', 'Overwrite existing config file')
211
+ .action((options) => {
212
+ const configPath = resolve('aspire2coolify.config.js');
213
+ if (existsSync(configPath) && !options.force) {
214
+ console.error('Config file already exists. Use --force to overwrite.');
215
+ process.exit(1);
216
+ }
217
+ writeFileSync(configPath, createConfigTemplate());
218
+ console.log(`Created: ${configPath}`);
219
+ });
220
+ program.parse();
221
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Configuration loader using cosmiconfig
3
+ */
4
+ export interface Aspire2CoolifyConfig {
5
+ coolify?: {
6
+ projectId?: string;
7
+ serverId?: string;
8
+ environmentId?: string;
9
+ apiUrl?: string;
10
+ };
11
+ mappings?: {
12
+ databases?: Record<string, string>;
13
+ services?: Record<string, string>;
14
+ buildPacks?: Record<string, string>;
15
+ };
16
+ defaults?: {
17
+ buildPack?: string;
18
+ region?: string;
19
+ };
20
+ output?: {
21
+ includeComments?: boolean;
22
+ format?: 'shell' | 'json' | 'yaml';
23
+ };
24
+ }
25
+ export declare function loadConfig(searchFrom?: string): Promise<Aspire2CoolifyConfig>;
26
+ export declare function loadConfigFile(filePath: string): Promise<Aspire2CoolifyConfig>;
27
+ export declare function getDefaultConfig(): Aspire2CoolifyConfig;
28
+ export declare function createConfigTemplate(): string;
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACrC,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;KACpC,CAAC;CACH;AAcD,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAOnF;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAOpF;AAED,wBAAgB,gBAAgB,IAAI,oBAAoB,CAYvD;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CA4B7C"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Configuration loader using cosmiconfig
3
+ */
4
+ import { cosmiconfig } from 'cosmiconfig';
5
+ const explorer = cosmiconfig('aspire2coolify', {
6
+ searchPlaces: [
7
+ 'aspire2coolify.config.js',
8
+ 'aspire2coolify.config.mjs',
9
+ 'aspire2coolify.config.cjs',
10
+ 'aspire2coolify.config.json',
11
+ '.aspire2coolifyrc',
12
+ '.aspire2coolifyrc.json',
13
+ 'package.json',
14
+ ],
15
+ });
16
+ export async function loadConfig(searchFrom) {
17
+ try {
18
+ const result = await explorer.search(searchFrom);
19
+ return result?.config || {};
20
+ }
21
+ catch {
22
+ return {};
23
+ }
24
+ }
25
+ export async function loadConfigFile(filePath) {
26
+ try {
27
+ const result = await explorer.load(filePath);
28
+ return result?.config || {};
29
+ }
30
+ catch {
31
+ return {};
32
+ }
33
+ }
34
+ export function getDefaultConfig() {
35
+ return {
36
+ coolify: {},
37
+ mappings: {},
38
+ defaults: {
39
+ buildPack: 'nixpacks',
40
+ },
41
+ output: {
42
+ includeComments: true,
43
+ format: 'shell',
44
+ },
45
+ };
46
+ }
47
+ export function createConfigTemplate() {
48
+ return `// aspire2coolify.config.js
49
+ export default {
50
+ coolify: {
51
+ // projectId: 'your-project-id',
52
+ // serverId: 'your-server-id',
53
+ // environmentId: 'your-environment-id',
54
+ // apiUrl: 'https://your-coolify-instance.com',
55
+ },
56
+ mappings: {
57
+ // Custom database type mappings
58
+ databases: {
59
+ // 'sqlserver': 'postgres', // Map SQL Server to PostgreSQL
60
+ },
61
+ // Custom service type mappings
62
+ services: {
63
+ // 'maildev': 'mailpit',
64
+ },
65
+ },
66
+ defaults: {
67
+ buildPack: 'nixpacks',
68
+ },
69
+ output: {
70
+ includeComments: true,
71
+ format: 'shell', // 'shell' | 'json'
72
+ },
73
+ };
74
+ `;
75
+ }
76
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAwB1C,MAAM,QAAQ,GAAG,WAAW,CAAC,gBAAgB,EAAE;IAC7C,YAAY,EAAE;QACZ,0BAA0B;QAC1B,2BAA2B;QAC3B,2BAA2B;QAC3B,4BAA4B;QAC5B,mBAAmB;QACnB,wBAAwB;QACxB,cAAc;KACf;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAmB;IAClD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACjD,OAAO,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,OAAO,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE;YACR,SAAS,EAAE,UAAU;SACtB;QACD,MAAM,EAAE;YACN,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE,OAAO;SAChB;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BR,CAAC;AACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Application command generator for Coolify
3
+ */
4
+ import type { Application, AspireApp } from '../../models/aspire.js';
5
+ import type { CoolifyApplicationCommand } from '../../models/coolify.js';
6
+ export declare function generateApplicationCommand(app: Application, aspireApp: AspireApp): CoolifyApplicationCommand;
7
+ //# sourceMappingURL=application.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../../src/generators/coolify/application.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAa,MAAM,wBAAwB,CAAC;AAChF,OAAO,KAAK,EAAE,yBAAyB,EAAoB,MAAM,yBAAyB,CAAC;AAS3F,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,SAAS,GACnB,yBAAyB,CA8D3B"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Application command generator for Coolify
3
+ */
4
+ const ASPIRE_TO_COOLIFY_BUILDPACK = {
5
+ nixpacks: 'nixpacks',
6
+ dockerfile: 'dockerfile',
7
+ static: 'static',
8
+ node: 'nixpacks',
9
+ };
10
+ export function generateApplicationCommand(app, aspireApp) {
11
+ const buildPack = ASPIRE_TO_COOLIFY_BUILDPACK[app.buildPack] || 'nixpacks';
12
+ const args = [
13
+ `--name "${app.name}"`,
14
+ `--build-pack ${buildPack}`,
15
+ ];
16
+ // Add source path if available
17
+ if (app.sourcePath) {
18
+ args.push(`--source "${app.sourcePath}"`);
19
+ }
20
+ // Build environment variables map
21
+ const envVars = {};
22
+ // Add explicit environment variables
23
+ for (const env of app.environment) {
24
+ if (!env.isExpression) {
25
+ envVars[env.key] = env.value;
26
+ args.push(`--env "${env.key}=${env.value}"`);
27
+ }
28
+ }
29
+ // Add reference-based environment variables
30
+ const references = aspireApp.references.filter((ref) => ref.from === app.name);
31
+ for (const ref of references) {
32
+ const envName = ref.connectionStringEnv || 'CONNECTION_STRING';
33
+ const envValue = `\${${ref.to}.connectionString}`;
34
+ envVars[envName] = envValue;
35
+ args.push(`--env "${envName}=${envValue}"`);
36
+ }
37
+ // Add port configuration from endpoints
38
+ const ports = [];
39
+ for (const endpoint of app.endpoints) {
40
+ if (endpoint.port) {
41
+ ports.push(endpoint.port);
42
+ }
43
+ if (endpoint.envVariable) {
44
+ // The endpoint exposes a port via environment variable
45
+ envVars[endpoint.envVariable] = endpoint.port?.toString() || '3000';
46
+ args.push(`--env "${endpoint.envVariable}=${endpoint.port || 3000}"`);
47
+ }
48
+ }
49
+ // Add external endpoint configuration
50
+ const hasExternalEndpoint = app.endpoints.some((e) => e.isExternal);
51
+ if (hasExternalEndpoint) {
52
+ args.push('--expose');
53
+ }
54
+ return {
55
+ command: 'application:create',
56
+ name: app.name,
57
+ buildPack,
58
+ source: app.sourcePath,
59
+ envVars,
60
+ ports: ports.length > 0 ? ports : undefined,
61
+ args,
62
+ comment: `Application: ${app.name} (${app.type})`,
63
+ };
64
+ }
65
+ //# sourceMappingURL=application.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application.js","sourceRoot":"","sources":["../../../src/generators/coolify/application.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,2BAA2B,GAAqC;IACpE,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,UAAU;CACjB,CAAC;AAEF,MAAM,UAAU,0BAA0B,CACxC,GAAgB,EAChB,SAAoB;IAEpB,MAAM,SAAS,GAAG,2BAA2B,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC;IAE3E,MAAM,IAAI,GAAa;QACrB,WAAW,GAAG,CAAC,IAAI,GAAG;QACtB,gBAAgB,SAAS,EAAE;KAC5B,CAAC;IAEF,+BAA+B;IAC/B,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;IAC5C,CAAC;IAED,kCAAkC;IAClC,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,qCAAqC;IACrC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/E,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB,IAAI,mBAAmB,CAAC;QAC/D,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,EAAE,oBAAoB,CAAC;QAClD,OAAO,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,OAAO,IAAI,QAAQ,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,wCAAwC;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QACrC,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;YACzB,uDAAuD;YACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,MAAM,CAAC;YACpE,IAAI,CAAC,IAAI,CAAC,UAAU,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,MAAM,mBAAmB,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACpE,IAAI,mBAAmB,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC;IAED,OAAO;QACL,OAAO,EAAE,oBAAoB;QAC7B,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,SAAS;QACT,MAAM,EAAE,GAAG,CAAC,UAAU;QACtB,OAAO;QACP,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QAC3C,IAAI;QACJ,OAAO,EAAE,gBAAgB,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG;KAClD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Database command generator for Coolify
3
+ */
4
+ import type { Database } from '../../models/aspire.js';
5
+ import type { CoolifyDatabaseCommand } from '../../models/coolify.js';
6
+ export declare function generateDatabaseCommand(db: Database): CoolifyDatabaseCommand;
7
+ /**
8
+ * Generate connection string placeholder for a database
9
+ */
10
+ export declare function getDatabaseConnectionString(db: Database): string;
11
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../src/generators/coolify/database.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,sBAAsB,EAAuB,MAAM,yBAAyB,CAAC;AAU3F,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,QAAQ,GAAG,sBAAsB,CAoC5E;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,CAahE"}