vaulter 0.2.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 (145) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +490 -0
  3. package/dist/bin/minienv-mcp.cjs +17 -0
  4. package/dist/bin/minienv.cjs +146 -0
  5. package/dist/cli/commands/delete.d.ts +22 -0
  6. package/dist/cli/commands/delete.d.ts.map +1 -0
  7. package/dist/cli/commands/delete.js +85 -0
  8. package/dist/cli/commands/delete.js.map +1 -0
  9. package/dist/cli/commands/export.d.ts +21 -0
  10. package/dist/cli/commands/export.d.ts.map +1 -0
  11. package/dist/cli/commands/export.js +126 -0
  12. package/dist/cli/commands/export.js.map +1 -0
  13. package/dist/cli/commands/get.d.ts +21 -0
  14. package/dist/cli/commands/get.d.ts.map +1 -0
  15. package/dist/cli/commands/get.js +62 -0
  16. package/dist/cli/commands/get.js.map +1 -0
  17. package/dist/cli/commands/init.d.ts +20 -0
  18. package/dist/cli/commands/init.d.ts.map +1 -0
  19. package/dist/cli/commands/init.js +98 -0
  20. package/dist/cli/commands/init.js.map +1 -0
  21. package/dist/cli/commands/integrations/helm.d.ts +21 -0
  22. package/dist/cli/commands/integrations/helm.d.ts.map +1 -0
  23. package/dist/cli/commands/integrations/helm.js +113 -0
  24. package/dist/cli/commands/integrations/helm.js.map +1 -0
  25. package/dist/cli/commands/integrations/kubernetes.d.ts +25 -0
  26. package/dist/cli/commands/integrations/kubernetes.d.ts.map +1 -0
  27. package/dist/cli/commands/integrations/kubernetes.js +199 -0
  28. package/dist/cli/commands/integrations/kubernetes.js.map +1 -0
  29. package/dist/cli/commands/integrations/terraform.d.ts +25 -0
  30. package/dist/cli/commands/integrations/terraform.d.ts.map +1 -0
  31. package/dist/cli/commands/integrations/terraform.js +131 -0
  32. package/dist/cli/commands/integrations/terraform.js.map +1 -0
  33. package/dist/cli/commands/key.d.ts +19 -0
  34. package/dist/cli/commands/key.d.ts.map +1 -0
  35. package/dist/cli/commands/key.js +247 -0
  36. package/dist/cli/commands/key.js.map +1 -0
  37. package/dist/cli/commands/list.d.ts +21 -0
  38. package/dist/cli/commands/list.d.ts.map +1 -0
  39. package/dist/cli/commands/list.js +94 -0
  40. package/dist/cli/commands/list.js.map +1 -0
  41. package/dist/cli/commands/pull.d.ts +22 -0
  42. package/dist/cli/commands/pull.d.ts.map +1 -0
  43. package/dist/cli/commands/pull.js +142 -0
  44. package/dist/cli/commands/pull.js.map +1 -0
  45. package/dist/cli/commands/push.d.ts +22 -0
  46. package/dist/cli/commands/push.d.ts.map +1 -0
  47. package/dist/cli/commands/push.js +181 -0
  48. package/dist/cli/commands/push.js.map +1 -0
  49. package/dist/cli/commands/services.d.ts +18 -0
  50. package/dist/cli/commands/services.d.ts.map +1 -0
  51. package/dist/cli/commands/services.js +92 -0
  52. package/dist/cli/commands/services.js.map +1 -0
  53. package/dist/cli/commands/set.d.ts +22 -0
  54. package/dist/cli/commands/set.d.ts.map +1 -0
  55. package/dist/cli/commands/set.js +93 -0
  56. package/dist/cli/commands/set.js.map +1 -0
  57. package/dist/cli/commands/sync.d.ts +23 -0
  58. package/dist/cli/commands/sync.d.ts.map +1 -0
  59. package/dist/cli/commands/sync.js +362 -0
  60. package/dist/cli/commands/sync.js.map +1 -0
  61. package/dist/cli/index.d.ts +7 -0
  62. package/dist/cli/index.d.ts.map +1 -0
  63. package/dist/cli/index.js +266 -0
  64. package/dist/cli/index.js.map +1 -0
  65. package/dist/cli/lib/create-client.d.ts +21 -0
  66. package/dist/cli/lib/create-client.d.ts.map +1 -0
  67. package/dist/cli/lib/create-client.js +68 -0
  68. package/dist/cli/lib/create-client.js.map +1 -0
  69. package/dist/cli/lib/hooks.d.ts +5 -0
  70. package/dist/cli/lib/hooks.d.ts.map +1 -0
  71. package/dist/cli/lib/hooks.js +17 -0
  72. package/dist/cli/lib/hooks.js.map +1 -0
  73. package/dist/cli/preload.d.ts +6 -0
  74. package/dist/cli/preload.d.ts.map +1 -0
  75. package/dist/cli/preload.js +7 -0
  76. package/dist/cli/preload.js.map +1 -0
  77. package/dist/client.d.ts +89 -0
  78. package/dist/client.d.ts.map +1 -0
  79. package/dist/client.js +350 -0
  80. package/dist/client.js.map +1 -0
  81. package/dist/index.d.ts +20 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +33 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/lib/batch-runner.d.ts +39 -0
  86. package/dist/lib/batch-runner.d.ts.map +1 -0
  87. package/dist/lib/batch-runner.js +117 -0
  88. package/dist/lib/batch-runner.js.map +1 -0
  89. package/dist/lib/config-loader.d.ts +45 -0
  90. package/dist/lib/config-loader.d.ts.map +1 -0
  91. package/dist/lib/config-loader.js +357 -0
  92. package/dist/lib/config-loader.js.map +1 -0
  93. package/dist/lib/env-parser.d.ts +38 -0
  94. package/dist/lib/env-parser.d.ts.map +1 -0
  95. package/dist/lib/env-parser.js +281 -0
  96. package/dist/lib/env-parser.js.map +1 -0
  97. package/dist/lib/monorepo.d.ts +39 -0
  98. package/dist/lib/monorepo.d.ts.map +1 -0
  99. package/dist/lib/monorepo.js +181 -0
  100. package/dist/lib/monorepo.js.map +1 -0
  101. package/dist/lib/pattern-matcher.d.ts +5 -0
  102. package/dist/lib/pattern-matcher.d.ts.map +1 -0
  103. package/dist/lib/pattern-matcher.js +18 -0
  104. package/dist/lib/pattern-matcher.js.map +1 -0
  105. package/dist/lib/s3-key-loader.d.ts +33 -0
  106. package/dist/lib/s3-key-loader.d.ts.map +1 -0
  107. package/dist/lib/s3-key-loader.js +83 -0
  108. package/dist/lib/s3-key-loader.js.map +1 -0
  109. package/dist/lib/secret-patterns.d.ts +10 -0
  110. package/dist/lib/secret-patterns.d.ts.map +1 -0
  111. package/dist/lib/secret-patterns.js +27 -0
  112. package/dist/lib/secret-patterns.js.map +1 -0
  113. package/dist/load.d.ts +14 -0
  114. package/dist/load.d.ts.map +1 -0
  115. package/dist/load.js +15 -0
  116. package/dist/load.js.map +1 -0
  117. package/dist/loader.d.ts +63 -0
  118. package/dist/loader.d.ts.map +1 -0
  119. package/dist/loader.js +50 -0
  120. package/dist/loader.js.map +1 -0
  121. package/dist/mcp/index.d.ts +8 -0
  122. package/dist/mcp/index.d.ts.map +1 -0
  123. package/dist/mcp/index.js +14 -0
  124. package/dist/mcp/index.js.map +1 -0
  125. package/dist/mcp/preload.d.ts +6 -0
  126. package/dist/mcp/preload.d.ts.map +1 -0
  127. package/dist/mcp/preload.js +7 -0
  128. package/dist/mcp/preload.js.map +1 -0
  129. package/dist/mcp/resources.d.ts +23 -0
  130. package/dist/mcp/resources.d.ts.map +1 -0
  131. package/dist/mcp/resources.js +112 -0
  132. package/dist/mcp/resources.js.map +1 -0
  133. package/dist/mcp/server.d.ts +16 -0
  134. package/dist/mcp/server.d.ts.map +1 -0
  135. package/dist/mcp/server.js +81 -0
  136. package/dist/mcp/server.js.map +1 -0
  137. package/dist/mcp/tools.d.ts +20 -0
  138. package/dist/mcp/tools.d.ts.map +1 -0
  139. package/dist/mcp/tools.js +405 -0
  140. package/dist/mcp/tools.js.map +1 -0
  141. package/dist/types.d.ts +182 -0
  142. package/dist/types.d.ts.map +1 -0
  143. package/dist/types.js +37 -0
  144. package/dist/types.js.map +1 -0
  145. package/package.json +114 -0
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Vaulter CLI - Init Command
3
+ *
4
+ * Initialize a new .vaulter configuration in the current directory
5
+ */
6
+ import fs from 'node:fs';
7
+ import path from 'node:path';
8
+ import { createDefaultConfig, configExists, findConfigDir } from '../../lib/config-loader.js';
9
+ /**
10
+ * Run the init command
11
+ */
12
+ export async function runInit(context) {
13
+ const { args, verbose, dryRun, jsonOutput } = context;
14
+ // Check if already initialized
15
+ if (configExists()) {
16
+ const existingDir = findConfigDir();
17
+ if (!args.force) {
18
+ if (jsonOutput) {
19
+ console.log(JSON.stringify({ error: 'already_initialized', path: existingDir }));
20
+ }
21
+ else {
22
+ console.error(`Vaulter already initialized at ${existingDir}`);
23
+ console.error('Use --force to reinitialize');
24
+ }
25
+ process.exit(1);
26
+ }
27
+ }
28
+ // Determine project name
29
+ const projectName = args.project || args.p || path.basename(process.cwd());
30
+ // Config directory path
31
+ const configDir = path.join(process.cwd(), '.vaulter');
32
+ if (verbose) {
33
+ console.log(`Initializing vaulter for project: ${projectName}`);
34
+ console.log(`Config directory: ${configDir}`);
35
+ }
36
+ if (dryRun) {
37
+ if (jsonOutput) {
38
+ console.log(JSON.stringify({
39
+ action: 'init',
40
+ project: projectName,
41
+ configDir,
42
+ dryRun: true
43
+ }));
44
+ }
45
+ else {
46
+ console.log('Dry run - would create:');
47
+ console.log(` ${configDir}/config.yaml`);
48
+ console.log(` ${configDir}/environments/`);
49
+ }
50
+ return;
51
+ }
52
+ // Create configuration
53
+ createDefaultConfig(configDir, projectName);
54
+ // Create .gitignore for sensitive files
55
+ const gitignorePath = path.join(configDir, '.gitignore');
56
+ if (!fs.existsSync(gitignorePath)) {
57
+ fs.writeFileSync(gitignorePath, `# Vaulter sensitive files
58
+ .key
59
+ *.key
60
+ *.pem
61
+ `);
62
+ }
63
+ // Create placeholder environment files
64
+ const envDir = path.join(configDir, 'environments');
65
+ const environments = ['dev', 'stg', 'prd', 'sbx', 'dr'];
66
+ for (const env of environments) {
67
+ const envFile = path.join(envDir, `${env}.env`);
68
+ if (!fs.existsSync(envFile)) {
69
+ fs.writeFileSync(envFile, `# ${env.toUpperCase()} Environment Variables
70
+ # Add your ${env} environment variables here
71
+ # Example: DATABASE_URL=postgres://localhost/${env}_db
72
+ `);
73
+ }
74
+ }
75
+ if (jsonOutput) {
76
+ console.log(JSON.stringify({
77
+ success: true,
78
+ project: projectName,
79
+ configDir,
80
+ files: [
81
+ 'config.yaml',
82
+ '.gitignore',
83
+ ...environments.map(e => `environments/${e}.env`)
84
+ ]
85
+ }));
86
+ }
87
+ else {
88
+ console.log(`✓ Initialized vaulter for project: ${projectName}`);
89
+ console.log(` Config: ${configDir}/config.yaml`);
90
+ console.log(` Environments: ${envDir}/`);
91
+ console.log('');
92
+ console.log('Next steps:');
93
+ console.log(' 1. Edit .vaulter/config.yaml to configure your backend');
94
+ console.log(' 2. Add environment variables to .vaulter/environments/*.env');
95
+ console.log(' 3. Run "vaulter sync -e dev" to sync with backend');
96
+ }
97
+ }
98
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Vaulter CLI - Helm Integration Commands
3
+ *
4
+ * Generate Helm values.yaml
5
+ */
6
+ import type { CLIArgs, VaulterConfig, Environment } from '../../../types.js';
7
+ interface HelmContext {
8
+ args: CLIArgs;
9
+ config: VaulterConfig | null;
10
+ project: string;
11
+ service?: string;
12
+ environment: Environment;
13
+ verbose: boolean;
14
+ jsonOutput: boolean;
15
+ }
16
+ /**
17
+ * Generate Helm values.yaml
18
+ */
19
+ export declare function runHelmValues(context: HelmContext): Promise<void>;
20
+ export {};
21
+ //# sourceMappingURL=helm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helm.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/integrations/helm.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAI5E,UAAU,WAAW;IACnB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,WAAW,CAAA;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,OAAO,CAAA;CACpB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CvE"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Vaulter CLI - Helm Integration Commands
3
+ *
4
+ * Generate Helm values.yaml
5
+ */
6
+ import { createClientFromConfig } from '../../lib/create-client.js';
7
+ import { getSecretPatterns, splitVarsBySecret } from '../../../lib/secret-patterns.js';
8
+ /**
9
+ * Generate Helm values.yaml
10
+ */
11
+ export async function runHelmValues(context) {
12
+ const { args, config, project, service, environment, verbose, jsonOutput } = context;
13
+ if (!project) {
14
+ console.error('Error: Project not specified');
15
+ process.exit(1);
16
+ }
17
+ if (verbose) {
18
+ console.error(`Generating Helm values for ${project}/${environment}`);
19
+ }
20
+ const client = await createClientFromConfig({ args, config, verbose });
21
+ try {
22
+ await client.connect();
23
+ const vars = await client.export(project, environment, service);
24
+ if (Object.keys(vars).length === 0) {
25
+ console.error('Warning: No variables found');
26
+ return;
27
+ }
28
+ if (jsonOutput) {
29
+ console.log(JSON.stringify({
30
+ format: 'helm-values',
31
+ project,
32
+ environment,
33
+ variableCount: Object.keys(vars).length
34
+ }));
35
+ }
36
+ else {
37
+ const patterns = getSecretPatterns(config);
38
+ const { plain, secrets } = splitVarsBySecret(vars, patterns);
39
+ // Generate Helm values YAML
40
+ const yaml = generateHelmValuesYaml(plain, secrets, {
41
+ project,
42
+ service,
43
+ environment
44
+ });
45
+ console.log(yaml);
46
+ }
47
+ }
48
+ finally {
49
+ await client.disconnect();
50
+ }
51
+ }
52
+ /**
53
+ * Generate Helm values YAML string
54
+ *
55
+ * Creates a structure like:
56
+ * env:
57
+ * PUBLIC_URL: "..."
58
+ *
59
+ * secrets:
60
+ * DATABASE_URL: "..."
61
+ * API_KEY: "..."
62
+ */
63
+ function generateHelmValuesYaml(plainVars, secretVars, metadata) {
64
+ const lines = [
65
+ '# Generated by vaulter',
66
+ `# Project: ${metadata.project}`,
67
+ `# Environment: ${metadata.environment}`,
68
+ metadata.service ? `# Service: ${metadata.service}` : null,
69
+ '# DO NOT EDIT - changes will be overwritten',
70
+ '',
71
+ '# Environment variables (plain)',
72
+ 'env:'
73
+ ].filter(Boolean);
74
+ // Add env vars
75
+ for (const [key, value] of Object.entries(plainVars)) {
76
+ lines.push(` ${key}: ${formatYamlValue(value)}`);
77
+ }
78
+ lines.push('');
79
+ lines.push('# Secrets (matching patterns, for use with secretKeyRef)');
80
+ lines.push('secrets:');
81
+ for (const [key, value] of Object.entries(secretVars)) {
82
+ lines.push(` ${key}: ${formatYamlValue(value)}`);
83
+ }
84
+ return lines.join('\n');
85
+ }
86
+ /**
87
+ * Format value for YAML
88
+ */
89
+ function formatYamlValue(value) {
90
+ // Check if value needs quoting
91
+ const needsQuote = value === '' ||
92
+ value === 'true' ||
93
+ value === 'false' ||
94
+ value === 'null' ||
95
+ value === 'yes' ||
96
+ value === 'no' ||
97
+ !isNaN(Number(value)) ||
98
+ value.includes(':') ||
99
+ value.includes('#') ||
100
+ value.includes('\n') ||
101
+ value.includes('"') ||
102
+ value.includes("'") ||
103
+ value.startsWith(' ') ||
104
+ value.endsWith(' ') ||
105
+ value.startsWith('{') ||
106
+ value.startsWith('[');
107
+ if (needsQuote) {
108
+ // Use double quotes and escape special chars
109
+ return `"${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n')}"`;
110
+ }
111
+ return value;
112
+ }
113
+ //# sourceMappingURL=helm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helm.js","sourceRoot":"","sources":["../../../../src/cli/commands/integrations/helm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Vaulter CLI - Kubernetes Integration Commands
3
+ *
4
+ * Generate Kubernetes Secret and ConfigMap YAML
5
+ */
6
+ import type { CLIArgs, VaulterConfig, Environment } from '../../../types.js';
7
+ interface K8sContext {
8
+ args: CLIArgs;
9
+ config: VaulterConfig | null;
10
+ project: string;
11
+ service?: string;
12
+ environment: Environment;
13
+ verbose: boolean;
14
+ jsonOutput: boolean;
15
+ }
16
+ /**
17
+ * Generate Kubernetes Secret YAML
18
+ */
19
+ export declare function runK8sSecret(context: K8sContext): Promise<void>;
20
+ /**
21
+ * Generate Kubernetes ConfigMap YAML
22
+ */
23
+ export declare function runK8sConfigMap(context: K8sContext): Promise<void>;
24
+ export {};
25
+ //# sourceMappingURL=kubernetes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubernetes.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/integrations/kubernetes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAI5E,UAAU,UAAU;IAClB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,WAAW,CAAA;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,OAAO,CAAA;CACpB;AAoBD;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAkErE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAiExE"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Vaulter CLI - Kubernetes Integration Commands
3
+ *
4
+ * Generate Kubernetes Secret and ConfigMap YAML
5
+ */
6
+ import { createClientFromConfig } from '../../lib/create-client.js';
7
+ import { getSecretPatterns, splitVarsBySecret } from '../../../lib/secret-patterns.js';
8
+ /**
9
+ * Encode value to base64
10
+ */
11
+ function base64Encode(value) {
12
+ return Buffer.from(value).toString('base64');
13
+ }
14
+ /**
15
+ * Sanitize name for Kubernetes (lowercase, alphanumeric, hyphens)
16
+ */
17
+ function sanitizeK8sName(name) {
18
+ return name
19
+ .toLowerCase()
20
+ .replace(/[^a-z0-9-]/g, '-')
21
+ .replace(/--+/g, '-')
22
+ .replace(/^-|-$/g, '');
23
+ }
24
+ /**
25
+ * Generate Kubernetes Secret YAML
26
+ */
27
+ export async function runK8sSecret(context) {
28
+ const { args, config, project, service, environment, verbose, jsonOutput } = context;
29
+ if (!project) {
30
+ console.error('Error: Project not specified');
31
+ process.exit(1);
32
+ }
33
+ // Determine secret name and namespace
34
+ const namespace = args.namespace || args.n ||
35
+ config?.integrations?.kubernetes?.namespace ||
36
+ `${project}-${environment}`;
37
+ const secretName = config?.integrations?.kubernetes?.secret_name ||
38
+ (service ? `${service}-secrets` : `${project}-secrets`);
39
+ if (verbose) {
40
+ console.error(`Generating K8s Secret: ${namespace}/${secretName}`);
41
+ }
42
+ const client = await createClientFromConfig({ args, config, verbose });
43
+ try {
44
+ await client.connect();
45
+ const vars = await client.export(project, environment, service);
46
+ if (Object.keys(vars).length === 0) {
47
+ console.error('Warning: No variables found');
48
+ return;
49
+ }
50
+ const patterns = getSecretPatterns(config);
51
+ const { secrets } = splitVarsBySecret(vars, patterns);
52
+ const secretVars = Object.keys(secrets).length > 0 ? secrets : vars;
53
+ if (Object.keys(secrets).length === 0 && patterns.length > 0) {
54
+ console.error('Warning: No variables matched secret patterns, exporting all variables');
55
+ }
56
+ // Generate YAML
57
+ const yaml = generateSecretYaml(sanitizeK8sName(secretName), sanitizeK8sName(namespace), secretVars, {
58
+ project,
59
+ service,
60
+ environment,
61
+ managedBy: 'vaulter'
62
+ });
63
+ if (jsonOutput) {
64
+ console.log(JSON.stringify({
65
+ kind: 'Secret',
66
+ name: secretName,
67
+ namespace,
68
+ variableCount: Object.keys(secretVars).length
69
+ }));
70
+ }
71
+ else {
72
+ console.log(yaml);
73
+ }
74
+ }
75
+ finally {
76
+ await client.disconnect();
77
+ }
78
+ }
79
+ /**
80
+ * Generate Kubernetes ConfigMap YAML
81
+ */
82
+ export async function runK8sConfigMap(context) {
83
+ const { args, config, project, service, environment, verbose, jsonOutput } = context;
84
+ if (!project) {
85
+ console.error('Error: Project not specified');
86
+ process.exit(1);
87
+ }
88
+ // Determine configmap name and namespace
89
+ const namespace = args.namespace || args.n ||
90
+ config?.integrations?.kubernetes?.namespace ||
91
+ `${project}-${environment}`;
92
+ const configMapName = config?.integrations?.kubernetes?.configmap_name ||
93
+ (service ? `${service}-config` : `${project}-config`);
94
+ if (verbose) {
95
+ console.error(`Generating K8s ConfigMap: ${namespace}/${configMapName}`);
96
+ }
97
+ const client = await createClientFromConfig({ args, config, verbose });
98
+ try {
99
+ await client.connect();
100
+ const vars = await client.export(project, environment, service);
101
+ if (Object.keys(vars).length === 0) {
102
+ console.error('Warning: No variables found');
103
+ return;
104
+ }
105
+ const patterns = getSecretPatterns(config);
106
+ const { plain } = splitVarsBySecret(vars, patterns);
107
+ if (Object.keys(plain).length === 0) {
108
+ console.error('Warning: No non-secret variables found for ConfigMap');
109
+ return;
110
+ }
111
+ // Generate YAML
112
+ const yaml = generateConfigMapYaml(sanitizeK8sName(configMapName), sanitizeK8sName(namespace), plain, {
113
+ project,
114
+ service,
115
+ environment,
116
+ managedBy: 'vaulter'
117
+ });
118
+ if (jsonOutput) {
119
+ console.log(JSON.stringify({
120
+ kind: 'ConfigMap',
121
+ name: configMapName,
122
+ namespace,
123
+ variableCount: Object.keys(plain).length
124
+ }));
125
+ }
126
+ else {
127
+ console.log(yaml);
128
+ }
129
+ }
130
+ finally {
131
+ await client.disconnect();
132
+ }
133
+ }
134
+ /**
135
+ * Generate Secret YAML string
136
+ */
137
+ function generateSecretYaml(name, namespace, data, labels) {
138
+ const lines = [
139
+ '# Generated by vaulter',
140
+ '# DO NOT EDIT - changes will be overwritten',
141
+ 'apiVersion: v1',
142
+ 'kind: Secret',
143
+ 'metadata:',
144
+ ` name: ${name}`,
145
+ ` namespace: ${namespace}`,
146
+ ' labels:'
147
+ ];
148
+ // Add labels
149
+ for (const [key, value] of Object.entries(labels)) {
150
+ if (value) {
151
+ lines.push(` app.kubernetes.io/${key}: "${value}"`);
152
+ }
153
+ }
154
+ lines.push('type: Opaque');
155
+ lines.push('data:');
156
+ // Add base64-encoded data
157
+ for (const [key, value] of Object.entries(data)) {
158
+ lines.push(` ${key}: ${base64Encode(value)}`);
159
+ }
160
+ return lines.join('\n');
161
+ }
162
+ /**
163
+ * Generate ConfigMap YAML string
164
+ */
165
+ function generateConfigMapYaml(name, namespace, data, labels) {
166
+ const lines = [
167
+ '# Generated by vaulter',
168
+ '# DO NOT EDIT - changes will be overwritten',
169
+ 'apiVersion: v1',
170
+ 'kind: ConfigMap',
171
+ 'metadata:',
172
+ ` name: ${name}`,
173
+ ` namespace: ${namespace}`,
174
+ ' labels:'
175
+ ];
176
+ // Add labels
177
+ for (const [key, value] of Object.entries(labels)) {
178
+ if (value) {
179
+ lines.push(` app.kubernetes.io/${key}: "${value}"`);
180
+ }
181
+ }
182
+ lines.push('data:');
183
+ // Add string data (quote values that need it)
184
+ for (const [key, value] of Object.entries(data)) {
185
+ const needsQuote = value.includes(':') ||
186
+ value.includes('#') ||
187
+ value.includes('\n') ||
188
+ value.startsWith(' ') ||
189
+ value.endsWith(' ');
190
+ if (needsQuote) {
191
+ lines.push(` ${key}: "${value.replace(/"/g, '\\"').replace(/\n/g, '\\n')}"`);
192
+ }
193
+ else {
194
+ lines.push(` ${key}: ${value}`);
195
+ }
196
+ }
197
+ return lines.join('\n');
198
+ }
199
+ //# sourceMappingURL=kubernetes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubernetes.js","sourceRoot":"","sources":["../../../../src/cli/commands/integrations/kubernetes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAYtF;;GAEG;AACH,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC9C,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAmB;IACpD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;IAEpF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,sCAAsC;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;QACxC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS;QAC3C,GAAG,OAAO,IAAI,WAAW,EAAE,CAAA;IAE7B,MAAM,UAAU,GAAG,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW;QAC9D,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,UAAU,CAAC,CAAA;IAEzD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,0BAA0B,SAAS,IAAI,UAAU,EAAE,CAAC,CAAA;IACpE,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;IAEtE,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;QAEtB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAA;QAE/D,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;YAC5C,OAAM;QACR,CAAC;QAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAC1C,MAAM,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QACrD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;QAEnE,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7D,OAAO,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAA;QACzF,CAAC;QAED,gBAAgB;QAChB,MAAM,IAAI,GAAG,kBAAkB,CAC7B,eAAe,CAAC,UAAU,CAAC,EAC3B,eAAe,CAAC,SAAS,CAAC,EAC1B,UAAU,EACV;YACE,OAAO;YACP,OAAO;YACP,WAAW;YACX,SAAS,EAAE,SAAS;SACrB,CACF,CAAA;QAED,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACzB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,UAAU;gBAChB,SAAS;gBACT,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM;aAC9C,CAAC,CAAC,CAAA;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,UAAU,EAAE,CAAA;IAC3B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAmB;IACvD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;IAEpF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,yCAAyC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;QACxC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS;QAC3C,GAAG,OAAO,IAAI,WAAW,EAAE,CAAA;IAE7B,MAAM,aAAa,GAAG,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc;QACpE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,SAAS,CAAC,CAAA;IAEvD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,6BAA6B,SAAS,IAAI,aAAa,EAAE,CAAC,CAAA;IAC1E,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;IAEtE,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;QAEtB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAA;QAE/D,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;YAC5C,OAAM;QACR,CAAC;QAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAC1C,MAAM,EAAE,KAAK,EAAE,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QACnD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAA;YACrE,OAAM;QACR,CAAC;QAED,gBAAgB;QAChB,MAAM,IAAI,GAAG,qBAAqB,CAChC,eAAe,CAAC,aAAa,CAAC,EAC9B,eAAe,CAAC,SAAS,CAAC,EAC1B,KAAK,EACL;YACE,OAAO;YACP,OAAO;YACP,WAAW;YACX,SAAS,EAAE,SAAS;SACrB,CACF,CAAA;QAED,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACzB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,aAAa;gBACnB,SAAS;gBACT,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM;aACzC,CAAC,CAAC,CAAA;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,UAAU,EAAE,CAAA;IAC3B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CACzB,IAAY,EACZ,SAAiB,EACjB,IAA4B,EAC5B,MAA0C;IAE1C,MAAM,KAAK,GAAa;QACtB,wBAAwB;QACxB,6CAA6C;QAC7C,gBAAgB;QAChB,cAAc;QACd,WAAW;QACX,WAAW,IAAI,EAAE;QACjB,gBAAgB,SAAS,EAAE;QAC3B,WAAW;KACZ,CAAA;IAED,aAAa;IACb,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,IAAI,CAAC,yBAAyB,GAAG,MAAM,KAAK,GAAG,CAAC,CAAA;QACxD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC1B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEnB,0BAA0B;IAC1B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAChD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAC5B,IAAY,EACZ,SAAiB,EACjB,IAA4B,EAC5B,MAA0C;IAE1C,MAAM,KAAK,GAAa;QACtB,wBAAwB;QACxB,6CAA6C;QAC7C,gBAAgB;QAChB,iBAAiB;QACjB,WAAW;QACX,WAAW,IAAI,EAAE;QACjB,gBAAgB,SAAS,EAAE;QAC3B,WAAW;KACZ,CAAA;IAED,aAAa;IACb,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,IAAI,CAAC,yBAAyB,GAAG,MAAM,KAAK,GAAG,CAAC,CAAA;QACxD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEnB,8CAA8C;IAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YACpC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YACnB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YACpB,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YACrB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAErB,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;QAC/E,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,KAAK,EAAE,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Vaulter CLI - Terraform Integration Commands
3
+ *
4
+ * Generate Terraform .tfvars and JSON files
5
+ */
6
+ import type { CLIArgs, VaulterConfig, Environment } from '../../../types.js';
7
+ interface TerraformContext {
8
+ args: CLIArgs;
9
+ config: VaulterConfig | null;
10
+ project: string;
11
+ service?: string;
12
+ environment: Environment;
13
+ verbose: boolean;
14
+ jsonOutput: boolean;
15
+ }
16
+ /**
17
+ * Generate Terraform .tfvars file
18
+ */
19
+ export declare function runTfVars(context: TerraformContext): Promise<void>;
20
+ /**
21
+ * Generate Terraform JSON variables file
22
+ */
23
+ export declare function runTfJson(context: TerraformContext): Promise<void>;
24
+ export {};
25
+ //# sourceMappingURL=terraform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terraform.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/integrations/terraform.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG5E,UAAU,gBAAgB;IACxB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,WAAW,CAAA;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,OAAO,CAAA;CACpB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2CxE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CxE"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Vaulter CLI - Terraform Integration Commands
3
+ *
4
+ * Generate Terraform .tfvars and JSON files
5
+ */
6
+ import { createClientFromConfig } from '../../lib/create-client.js';
7
+ /**
8
+ * Generate Terraform .tfvars file
9
+ */
10
+ export async function runTfVars(context) {
11
+ const { args, config, project, service, environment, verbose, jsonOutput } = context;
12
+ if (!project) {
13
+ console.error('Error: Project not specified');
14
+ process.exit(1);
15
+ }
16
+ if (verbose) {
17
+ console.error(`Generating Terraform tfvars for ${project}/${environment}`);
18
+ }
19
+ const client = await createClientFromConfig({ args, config, verbose });
20
+ try {
21
+ await client.connect();
22
+ const vars = await client.export(project, environment, service);
23
+ if (Object.keys(vars).length === 0) {
24
+ console.error('Warning: No variables found');
25
+ return;
26
+ }
27
+ if (jsonOutput) {
28
+ console.log(JSON.stringify({
29
+ format: 'tfvars',
30
+ project,
31
+ environment,
32
+ variableCount: Object.keys(vars).length
33
+ }));
34
+ }
35
+ else {
36
+ // Generate .tfvars content
37
+ const tfvars = generateTfVars(vars, {
38
+ project,
39
+ service,
40
+ environment
41
+ });
42
+ console.log(tfvars);
43
+ }
44
+ }
45
+ finally {
46
+ await client.disconnect();
47
+ }
48
+ }
49
+ /**
50
+ * Generate Terraform JSON variables file
51
+ */
52
+ export async function runTfJson(context) {
53
+ const { args, config, project, service, environment, verbose, jsonOutput } = context;
54
+ if (!project) {
55
+ console.error('Error: Project not specified');
56
+ process.exit(1);
57
+ }
58
+ if (verbose) {
59
+ console.error(`Generating Terraform JSON for ${project}/${environment}`);
60
+ }
61
+ const client = await createClientFromConfig({ args, config, verbose });
62
+ try {
63
+ await client.connect();
64
+ const vars = await client.export(project, environment, service);
65
+ if (Object.keys(vars).length === 0) {
66
+ console.error('Warning: No variables found');
67
+ return;
68
+ }
69
+ // Generate JSON output
70
+ // Terraform expects variable names in lowercase with underscores
71
+ const tfVars = {};
72
+ for (const [key, value] of Object.entries(vars)) {
73
+ // Convert to terraform-friendly name
74
+ const tfKey = key.toLowerCase();
75
+ tfVars[tfKey] = value;
76
+ }
77
+ // Also include an env_vars map for convenience
78
+ const output = {
79
+ // Individual variables
80
+ ...tfVars,
81
+ // Full map for use with for_each
82
+ env_vars: vars
83
+ };
84
+ console.log(JSON.stringify(output, null, 2));
85
+ }
86
+ finally {
87
+ await client.disconnect();
88
+ }
89
+ }
90
+ /**
91
+ * Generate .tfvars content
92
+ */
93
+ function generateTfVars(vars, metadata) {
94
+ const lines = [
95
+ '# Generated by vaulter',
96
+ `# Project: ${metadata.project}`,
97
+ `# Environment: ${metadata.environment}`,
98
+ metadata.service ? `# Service: ${metadata.service}` : null,
99
+ '# DO NOT EDIT - changes will be overwritten',
100
+ ''
101
+ ].filter(Boolean);
102
+ // Add individual variables (lowercase names for Terraform convention)
103
+ for (const [key, value] of Object.entries(vars)) {
104
+ const tfKey = key.toLowerCase();
105
+ lines.push(`${tfKey} = ${formatTfValue(value)}`);
106
+ }
107
+ // Add a map variable containing all env vars
108
+ lines.push('');
109
+ lines.push('# All environment variables as a map');
110
+ lines.push('env_vars = {');
111
+ for (const [key, value] of Object.entries(vars)) {
112
+ lines.push(` "${key}" = ${formatTfValue(value)}`);
113
+ }
114
+ lines.push('}');
115
+ return lines.join('\n');
116
+ }
117
+ /**
118
+ * Format value for Terraform HCL
119
+ */
120
+ function formatTfValue(value) {
121
+ // Always use double quotes for strings in Terraform
122
+ // Escape special characters
123
+ const escaped = value
124
+ .replace(/\\/g, '\\\\')
125
+ .replace(/"/g, '\\"')
126
+ .replace(/\n/g, '\\n')
127
+ .replace(/\r/g, '\\r')
128
+ .replace(/\t/g, '\\t');
129
+ return `"${escaped}"`;
130
+ }
131
+ //# sourceMappingURL=terraform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terraform.js","sourceRoot":"","sources":["../../../../src/cli/commands/integrations/terraform.ts"],"names":[],"mappings":"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"}