@enactprotocol/secrets 2.0.0 → 2.0.2

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 (49) hide show
  1. package/dist/dagger/index.d.ts +8 -0
  2. package/dist/dagger/index.d.ts.map +1 -0
  3. package/dist/dagger/index.js +8 -0
  4. package/dist/dagger/index.js.map +1 -0
  5. package/dist/dagger/secret-object.d.ts +49 -0
  6. package/dist/dagger/secret-object.d.ts.map +1 -0
  7. package/dist/dagger/secret-object.js +100 -0
  8. package/dist/dagger/secret-object.js.map +1 -0
  9. package/dist/dagger/uri-parser.d.ts +36 -0
  10. package/dist/dagger/uri-parser.d.ts.map +1 -0
  11. package/dist/dagger/uri-parser.js +179 -0
  12. package/dist/dagger/uri-parser.js.map +1 -0
  13. package/dist/env/index.d.ts +10 -0
  14. package/dist/env/index.d.ts.map +1 -0
  15. package/dist/env/index.js +14 -0
  16. package/dist/env/index.js.map +1 -0
  17. package/dist/env/manager.d.ts +87 -0
  18. package/dist/env/manager.d.ts.map +1 -0
  19. package/dist/env/manager.js +204 -0
  20. package/dist/env/manager.js.map +1 -0
  21. package/dist/env/parser.d.ts +58 -0
  22. package/dist/env/parser.d.ts.map +1 -0
  23. package/dist/env/parser.js +211 -0
  24. package/dist/env/parser.js.map +1 -0
  25. package/dist/env/reader.d.ts +61 -0
  26. package/dist/env/reader.d.ts.map +1 -0
  27. package/dist/env/reader.js +92 -0
  28. package/dist/env/reader.js.map +1 -0
  29. package/dist/env/writer.d.ts +68 -0
  30. package/dist/env/writer.d.ts.map +1 -0
  31. package/dist/env/writer.js +108 -0
  32. package/dist/env/writer.js.map +1 -0
  33. package/dist/index.d.ts +14 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +33 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/keyring.d.ts +77 -0
  38. package/dist/keyring.d.ts.map +1 -0
  39. package/dist/keyring.js +123 -0
  40. package/dist/keyring.js.map +1 -0
  41. package/dist/resolver.d.ts +65 -0
  42. package/dist/resolver.d.ts.map +1 -0
  43. package/dist/resolver.js +144 -0
  44. package/dist/resolver.js.map +1 -0
  45. package/dist/types.d.ts +162 -0
  46. package/dist/types.d.ts.map +1 -0
  47. package/dist/types.js +9 -0
  48. package/dist/types.js.map +1 -0
  49. package/package.json +1 -1
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Unified environment variable manager
3
+ *
4
+ * Provides high-level functions for managing environment variables
5
+ * with priority resolution: local → global → default
6
+ */
7
+ import { getGlobalEnvPath, getLocalEnvPath, globalEnvExists, loadGlobalEnv, loadLocalEnv, localEnvExists, } from "./reader";
8
+ import { deleteGlobalEnvVar, deleteLocalEnvVar, setGlobalEnvVar, setLocalEnvVar } from "./writer";
9
+ /**
10
+ * Set an environment variable
11
+ *
12
+ * @param key - Variable key
13
+ * @param value - Variable value
14
+ * @param scope - Where to set: 'local' or 'global' (default: 'global')
15
+ * @param cwd - Current working directory for local scope
16
+ */
17
+ export function setEnv(key, value, scope = "global", cwd) {
18
+ if (scope === "local") {
19
+ setLocalEnvVar(key, value, cwd);
20
+ }
21
+ else {
22
+ setGlobalEnvVar(key, value);
23
+ }
24
+ }
25
+ /**
26
+ * Get an environment variable with priority resolution
27
+ *
28
+ * Priority: local → global → default
29
+ *
30
+ * @param key - Variable key
31
+ * @param defaultValue - Default value if not found
32
+ * @param cwd - Current working directory for local scope
33
+ * @returns Resolution result with value and source
34
+ */
35
+ export function getEnv(key, defaultValue, cwd) {
36
+ // Check local first
37
+ const localVars = loadLocalEnv(cwd);
38
+ const localValue = localVars[key];
39
+ if (localValue !== undefined) {
40
+ return {
41
+ key,
42
+ value: localValue,
43
+ source: "local",
44
+ filePath: getLocalEnvPath(cwd),
45
+ };
46
+ }
47
+ // Check global
48
+ const globalVars = loadGlobalEnv();
49
+ const globalValue = globalVars[key];
50
+ if (globalValue !== undefined) {
51
+ return {
52
+ key,
53
+ value: globalValue,
54
+ source: "global",
55
+ filePath: getGlobalEnvPath(),
56
+ };
57
+ }
58
+ // Use default
59
+ if (defaultValue !== undefined) {
60
+ return {
61
+ key,
62
+ value: defaultValue,
63
+ source: "default",
64
+ };
65
+ }
66
+ return null;
67
+ }
68
+ /**
69
+ * Get just the value of an environment variable
70
+ *
71
+ * @param key - Variable key
72
+ * @param defaultValue - Default value if not found
73
+ * @param cwd - Current working directory for local scope
74
+ * @returns The value, or default/undefined if not found
75
+ */
76
+ export function getEnvValue(key, defaultValue, cwd) {
77
+ const result = getEnv(key, defaultValue, cwd);
78
+ return result?.value;
79
+ }
80
+ /**
81
+ * Delete an environment variable
82
+ *
83
+ * @param key - Variable key
84
+ * @param scope - Where to delete from: 'local' or 'global' (default: 'global')
85
+ * @param cwd - Current working directory for local scope
86
+ * @returns true if variable existed and was deleted
87
+ */
88
+ export function deleteEnv(key, scope = "global", cwd) {
89
+ if (scope === "local") {
90
+ return deleteLocalEnvVar(key, cwd);
91
+ }
92
+ return deleteGlobalEnvVar(key);
93
+ }
94
+ /**
95
+ * List all environment variables from a scope
96
+ *
97
+ * @param scope - Which scope to list: 'local', 'global', or 'all'
98
+ * @param cwd - Current working directory for local scope
99
+ * @returns Array of environment variables with sources
100
+ */
101
+ export function listEnv(scope = "all", cwd) {
102
+ const results = [];
103
+ if (scope === "global" || scope === "all") {
104
+ const globalVars = loadGlobalEnv();
105
+ for (const [key, value] of Object.entries(globalVars)) {
106
+ results.push({ key, value, source: "global" });
107
+ }
108
+ }
109
+ if (scope === "local" || scope === "all") {
110
+ const localVars = loadLocalEnv(cwd);
111
+ for (const [key, value] of Object.entries(localVars)) {
112
+ // If 'all' scope, we might already have the key from global
113
+ // In that case, replace with local (higher priority)
114
+ if (scope === "all") {
115
+ const existingIndex = results.findIndex((v) => v.key === key);
116
+ if (existingIndex !== -1) {
117
+ results[existingIndex] = { key, value, source: "local" };
118
+ }
119
+ else {
120
+ results.push({ key, value, source: "local" });
121
+ }
122
+ }
123
+ else {
124
+ results.push({ key, value, source: "local" });
125
+ }
126
+ }
127
+ }
128
+ return results;
129
+ }
130
+ /**
131
+ * Get all environment variables with priority resolution
132
+ * Returns the effective value for each key (local overrides global)
133
+ *
134
+ * @param defaults - Default values for keys
135
+ * @param cwd - Current working directory for local scope
136
+ * @returns Map of key to resolution result
137
+ */
138
+ export function resolveAllEnv(defaults = {}, cwd) {
139
+ const results = new Map();
140
+ // Start with defaults
141
+ for (const [key, value] of Object.entries(defaults)) {
142
+ results.set(key, { key, value, source: "default" });
143
+ }
144
+ // Add global (overrides defaults)
145
+ const globalVars = loadGlobalEnv();
146
+ for (const [key, value] of Object.entries(globalVars)) {
147
+ results.set(key, {
148
+ key,
149
+ value,
150
+ source: "global",
151
+ filePath: getGlobalEnvPath(),
152
+ });
153
+ }
154
+ // Add local (overrides global and defaults)
155
+ const localVars = loadLocalEnv(cwd);
156
+ for (const [key, value] of Object.entries(localVars)) {
157
+ results.set(key, {
158
+ key,
159
+ value,
160
+ source: "local",
161
+ filePath: getLocalEnvPath(cwd),
162
+ });
163
+ }
164
+ return results;
165
+ }
166
+ /**
167
+ * Resolve environment variables for a tool manifest
168
+ * Checks that all required vars are present
169
+ *
170
+ * @param envDeclarations - Env declarations from manifest
171
+ * @param cwd - Current working directory
172
+ * @returns Object with resolved vars and any missing required vars
173
+ */
174
+ export function resolveToolEnv(envDeclarations, cwd) {
175
+ const resolved = new Map();
176
+ const missing = [];
177
+ for (const [key, declaration] of Object.entries(envDeclarations)) {
178
+ // Skip secrets - they're handled by the keyring
179
+ if (declaration.secret) {
180
+ continue;
181
+ }
182
+ const result = getEnv(key, declaration.default, cwd);
183
+ if (result) {
184
+ resolved.set(key, result);
185
+ }
186
+ else {
187
+ missing.push(key);
188
+ }
189
+ }
190
+ return { resolved, missing };
191
+ }
192
+ /**
193
+ * Check if local .env exists
194
+ */
195
+ export function hasLocalEnv(cwd) {
196
+ return localEnvExists(cwd);
197
+ }
198
+ /**
199
+ * Check if global .env exists
200
+ */
201
+ export function hasGlobalEnv() {
202
+ return globalEnvExists();
203
+ }
204
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/env/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * .env file parser
3
+ *
4
+ * Parses KEY=VALUE format with support for:
5
+ * - Comments (lines starting with #)
6
+ * - Empty lines
7
+ * - Quoted values (single and double quotes)
8
+ * - Inline comments
9
+ * - Values with = signs
10
+ */
11
+ import type { ParsedEnvFile } from "../types";
12
+ /**
13
+ * Parse .env file content
14
+ *
15
+ * @param content - The file content to parse
16
+ * @returns Parsed env file with vars and preserved lines
17
+ */
18
+ export declare function parseEnvFile(content: string): ParsedEnvFile;
19
+ /**
20
+ * Parse .env file content to simple key-value object
21
+ *
22
+ * @param content - The file content to parse
23
+ * @returns Object with key-value pairs
24
+ */
25
+ export declare function parseEnvContent(content: string): Record<string, string>;
26
+ /**
27
+ * Serialize an env file back to string format
28
+ * Preserves comments and formatting
29
+ *
30
+ * @param parsed - The parsed env file
31
+ * @returns String content for .env file
32
+ */
33
+ export declare function serializeEnvFile(parsed: ParsedEnvFile): string;
34
+ /**
35
+ * Create a new env file content from a vars object
36
+ *
37
+ * @param vars - Key-value pairs to serialize
38
+ * @returns String content for .env file
39
+ */
40
+ export declare function createEnvContent(vars: Record<string, string>): string;
41
+ /**
42
+ * Update a single variable in parsed env file
43
+ *
44
+ * @param parsed - The parsed env file
45
+ * @param key - The variable key
46
+ * @param value - The new value
47
+ * @returns Updated parsed env file
48
+ */
49
+ export declare function updateEnvVar(parsed: ParsedEnvFile, key: string, value: string): ParsedEnvFile;
50
+ /**
51
+ * Remove a variable from parsed env file
52
+ *
53
+ * @param parsed - The parsed env file
54
+ * @param key - The variable key to remove
55
+ * @returns Updated parsed env file
56
+ */
57
+ export declare function removeEnvVar(parsed: ParsedEnvFile, key: string): ParsedEnvFile;
58
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/env/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,UAAU,CAAC;AAqF3D;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAkB3D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEvE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAc9D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAarE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAoC7F;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAU9E"}
@@ -0,0 +1,211 @@
1
+ /**
2
+ * .env file parser
3
+ *
4
+ * Parses KEY=VALUE format with support for:
5
+ * - Comments (lines starting with #)
6
+ * - Empty lines
7
+ * - Quoted values (single and double quotes)
8
+ * - Inline comments
9
+ * - Values with = signs
10
+ */
11
+ /**
12
+ * Parse a single line from an .env file
13
+ */
14
+ function parseLine(line) {
15
+ const trimmed = line.trim();
16
+ // Empty line
17
+ if (trimmed === "") {
18
+ return { type: "empty", raw: line };
19
+ }
20
+ // Comment line
21
+ if (trimmed.startsWith("#")) {
22
+ return { type: "comment", raw: line };
23
+ }
24
+ // Variable line - find the first =
25
+ const eqIndex = trimmed.indexOf("=");
26
+ if (eqIndex === -1) {
27
+ // No = sign, treat as comment (invalid line)
28
+ return { type: "comment", raw: line };
29
+ }
30
+ const key = trimmed.slice(0, eqIndex).trim();
31
+ let value = trimmed.slice(eqIndex + 1);
32
+ // Handle inline comments (but not inside quotes)
33
+ value = parseValue(value);
34
+ return {
35
+ type: "variable",
36
+ raw: line,
37
+ key,
38
+ value,
39
+ };
40
+ }
41
+ /**
42
+ * Parse a value, handling quotes and inline comments
43
+ */
44
+ function parseValue(rawValue) {
45
+ let value = rawValue.trim();
46
+ // Handle quoted values
47
+ if (value.length > 1) {
48
+ const firstChar = value[0];
49
+ if (firstChar === '"' || firstChar === "'") {
50
+ const quote = firstChar;
51
+ // Find the end quote, accounting for escaped quotes
52
+ let endQuote = -1;
53
+ for (let i = 1; i < value.length; i++) {
54
+ if (value[i] === quote && value[i - 1] !== "\\") {
55
+ endQuote = i;
56
+ break;
57
+ }
58
+ }
59
+ if (endQuote !== -1) {
60
+ // Extract value between quotes
61
+ value = value.slice(1, endQuote);
62
+ // Handle escape sequences in double-quoted strings
63
+ if (quote === '"') {
64
+ value = value
65
+ .replace(/\\n/g, "\n")
66
+ .replace(/\\r/g, "\r")
67
+ .replace(/\\t/g, "\t")
68
+ .replace(/\\"/g, '"')
69
+ .replace(/\\\\/g, "\\");
70
+ }
71
+ return value;
72
+ }
73
+ }
74
+ }
75
+ // Handle inline comments for unquoted values
76
+ const commentIndex = value.indexOf(" #");
77
+ if (commentIndex !== -1) {
78
+ value = value.slice(0, commentIndex).trim();
79
+ }
80
+ return value;
81
+ }
82
+ /**
83
+ * Parse .env file content
84
+ *
85
+ * @param content - The file content to parse
86
+ * @returns Parsed env file with vars and preserved lines
87
+ */
88
+ export function parseEnvFile(content) {
89
+ const lines = content.split("\n");
90
+ const parsedLines = [];
91
+ const vars = {};
92
+ for (const line of lines) {
93
+ const parsed = parseLine(line);
94
+ parsedLines.push(parsed);
95
+ if (parsed.type === "variable" && parsed.key && parsed.value !== undefined) {
96
+ vars[parsed.key] = parsed.value;
97
+ }
98
+ }
99
+ return {
100
+ vars,
101
+ lines: parsedLines,
102
+ };
103
+ }
104
+ /**
105
+ * Parse .env file content to simple key-value object
106
+ *
107
+ * @param content - The file content to parse
108
+ * @returns Object with key-value pairs
109
+ */
110
+ export function parseEnvContent(content) {
111
+ return parseEnvFile(content).vars;
112
+ }
113
+ /**
114
+ * Serialize an env file back to string format
115
+ * Preserves comments and formatting
116
+ *
117
+ * @param parsed - The parsed env file
118
+ * @returns String content for .env file
119
+ */
120
+ export function serializeEnvFile(parsed) {
121
+ return parsed.lines
122
+ .map((line) => {
123
+ if (line.type === "variable" && line.key) {
124
+ const value = parsed.vars[line.key] ?? line.value ?? "";
125
+ // Quote values with spaces or special characters
126
+ if (value.includes(" ") || value.includes("=") || value.includes("#")) {
127
+ return `${line.key}="${value.replace(/"/g, '\\"')}"`;
128
+ }
129
+ return `${line.key}=${value}`;
130
+ }
131
+ return line.raw;
132
+ })
133
+ .join("\n");
134
+ }
135
+ /**
136
+ * Create a new env file content from a vars object
137
+ *
138
+ * @param vars - Key-value pairs to serialize
139
+ * @returns String content for .env file
140
+ */
141
+ export function createEnvContent(vars) {
142
+ const lines = [];
143
+ for (const [key, value] of Object.entries(vars)) {
144
+ // Quote values with spaces or special characters
145
+ if (value.includes(" ") || value.includes("=") || value.includes("#")) {
146
+ lines.push(`${key}="${value.replace(/"/g, '\\"')}"`);
147
+ }
148
+ else {
149
+ lines.push(`${key}=${value}`);
150
+ }
151
+ }
152
+ return lines.join("\n");
153
+ }
154
+ /**
155
+ * Update a single variable in parsed env file
156
+ *
157
+ * @param parsed - The parsed env file
158
+ * @param key - The variable key
159
+ * @param value - The new value
160
+ * @returns Updated parsed env file
161
+ */
162
+ export function updateEnvVar(parsed, key, value) {
163
+ // Update the vars
164
+ const newVars = { ...parsed.vars, [key]: value };
165
+ // Check if key exists in lines
166
+ const existingIndex = parsed.lines.findIndex((line) => line.type === "variable" && line.key === key);
167
+ let newLines;
168
+ if (existingIndex !== -1) {
169
+ // Update existing line
170
+ newLines = [...parsed.lines];
171
+ newLines[existingIndex] = {
172
+ type: "variable",
173
+ raw: `${key}=${value}`,
174
+ key,
175
+ value,
176
+ };
177
+ }
178
+ else {
179
+ // Add new line at end
180
+ newLines = [
181
+ ...parsed.lines,
182
+ {
183
+ type: "variable",
184
+ raw: `${key}=${value}`,
185
+ key,
186
+ value,
187
+ },
188
+ ];
189
+ }
190
+ return {
191
+ vars: newVars,
192
+ lines: newLines,
193
+ };
194
+ }
195
+ /**
196
+ * Remove a variable from parsed env file
197
+ *
198
+ * @param parsed - The parsed env file
199
+ * @param key - The variable key to remove
200
+ * @returns Updated parsed env file
201
+ */
202
+ export function removeEnvVar(parsed, key) {
203
+ const newVars = { ...parsed.vars };
204
+ delete newVars[key];
205
+ const newLines = parsed.lines.filter((line) => !(line.type === "variable" && line.key === key));
206
+ return {
207
+ vars: newVars,
208
+ lines: newLines,
209
+ };
210
+ }
211
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/env/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * .env file reader
3
+ *
4
+ * Reads .env files from global (~/.enact/.env) and local (.enact/.env) locations
5
+ */
6
+ import type { ParsedEnvFile } from "../types";
7
+ /**
8
+ * Get the path to the global .env file
9
+ */
10
+ export declare function getGlobalEnvPath(): string;
11
+ /**
12
+ * Get the path to the local (project) .env file
13
+ *
14
+ * @param cwd - Current working directory (defaults to process.cwd())
15
+ */
16
+ export declare function getLocalEnvPath(cwd?: string): string;
17
+ /**
18
+ * Read and parse an .env file
19
+ *
20
+ * @param path - Path to the .env file
21
+ * @returns Parsed env file, or empty if file doesn't exist
22
+ */
23
+ export declare function readEnvFile(path: string): ParsedEnvFile;
24
+ /**
25
+ * Read .env file to simple key-value object
26
+ *
27
+ * @param path - Path to the .env file
28
+ * @returns Object with key-value pairs, empty object if file doesn't exist
29
+ */
30
+ export declare function readEnvVars(path: string): Record<string, string>;
31
+ /**
32
+ * Load global environment variables from ~/.enact/.env
33
+ */
34
+ export declare function loadGlobalEnv(): Record<string, string>;
35
+ /**
36
+ * Load local (project) environment variables from .enact/.env
37
+ *
38
+ * @param cwd - Current working directory (defaults to process.cwd())
39
+ */
40
+ export declare function loadLocalEnv(cwd?: string): Record<string, string>;
41
+ /**
42
+ * Load global environment as parsed file (for updates)
43
+ */
44
+ export declare function loadGlobalEnvFile(): ParsedEnvFile;
45
+ /**
46
+ * Load local environment as parsed file (for updates)
47
+ *
48
+ * @param cwd - Current working directory (defaults to process.cwd())
49
+ */
50
+ export declare function loadLocalEnvFile(cwd?: string): ParsedEnvFile;
51
+ /**
52
+ * Check if global .env file exists
53
+ */
54
+ export declare function globalEnvExists(): boolean;
55
+ /**
56
+ * Check if local .env file exists
57
+ *
58
+ * @param cwd - Current working directory (defaults to process.cwd())
59
+ */
60
+ export declare function localEnvExists(cwd?: string): boolean;
61
+ //# sourceMappingURL=reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../src/env/reader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAOvD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOhE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,aAAa,CAE5D;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAEpD"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * .env file reader
3
+ *
4
+ * Reads .env files from global (~/.enact/.env) and local (.enact/.env) locations
5
+ */
6
+ import { existsSync, readFileSync } from "node:fs";
7
+ import { homedir } from "node:os";
8
+ import { join } from "node:path";
9
+ import { parseEnvContent, parseEnvFile } from "./parser";
10
+ /**
11
+ * Get the path to the global .env file
12
+ */
13
+ export function getGlobalEnvPath() {
14
+ return join(homedir(), ".enact", ".env");
15
+ }
16
+ /**
17
+ * Get the path to the local (project) .env file
18
+ *
19
+ * @param cwd - Current working directory (defaults to process.cwd())
20
+ */
21
+ export function getLocalEnvPath(cwd) {
22
+ return join(cwd ?? process.cwd(), ".enact", ".env");
23
+ }
24
+ /**
25
+ * Read and parse an .env file
26
+ *
27
+ * @param path - Path to the .env file
28
+ * @returns Parsed env file, or empty if file doesn't exist
29
+ */
30
+ export function readEnvFile(path) {
31
+ if (!existsSync(path)) {
32
+ return { vars: {}, lines: [] };
33
+ }
34
+ const content = readFileSync(path, "utf-8");
35
+ return parseEnvFile(content);
36
+ }
37
+ /**
38
+ * Read .env file to simple key-value object
39
+ *
40
+ * @param path - Path to the .env file
41
+ * @returns Object with key-value pairs, empty object if file doesn't exist
42
+ */
43
+ export function readEnvVars(path) {
44
+ if (!existsSync(path)) {
45
+ return {};
46
+ }
47
+ const content = readFileSync(path, "utf-8");
48
+ return parseEnvContent(content);
49
+ }
50
+ /**
51
+ * Load global environment variables from ~/.enact/.env
52
+ */
53
+ export function loadGlobalEnv() {
54
+ return readEnvVars(getGlobalEnvPath());
55
+ }
56
+ /**
57
+ * Load local (project) environment variables from .enact/.env
58
+ *
59
+ * @param cwd - Current working directory (defaults to process.cwd())
60
+ */
61
+ export function loadLocalEnv(cwd) {
62
+ return readEnvVars(getLocalEnvPath(cwd));
63
+ }
64
+ /**
65
+ * Load global environment as parsed file (for updates)
66
+ */
67
+ export function loadGlobalEnvFile() {
68
+ return readEnvFile(getGlobalEnvPath());
69
+ }
70
+ /**
71
+ * Load local environment as parsed file (for updates)
72
+ *
73
+ * @param cwd - Current working directory (defaults to process.cwd())
74
+ */
75
+ export function loadLocalEnvFile(cwd) {
76
+ return readEnvFile(getLocalEnvPath(cwd));
77
+ }
78
+ /**
79
+ * Check if global .env file exists
80
+ */
81
+ export function globalEnvExists() {
82
+ return existsSync(getGlobalEnvPath());
83
+ }
84
+ /**
85
+ * Check if local .env file exists
86
+ *
87
+ * @param cwd - Current working directory (defaults to process.cwd())
88
+ */
89
+ export function localEnvExists(cwd) {
90
+ return existsSync(getLocalEnvPath(cwd));
91
+ }
92
+ //# sourceMappingURL=reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.js","sourceRoot":"","sources":["../../src/env/reader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEzD;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,OAAO,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACzC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,OAAO,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACzC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,OAAO,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,OAAO,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1C,CAAC"}