@enactprotocol/shared 2.0.5 → 2.0.9
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.
- package/dist/execution/command.d.ts +31 -0
- package/dist/execution/command.d.ts.map +1 -1
- package/dist/execution/command.js +86 -10
- package/dist/execution/command.js.map +1 -1
- package/dist/execution/index.d.ts +1 -1
- package/dist/execution/index.d.ts.map +1 -1
- package/dist/execution/index.js.map +1 -1
- package/dist/execution/types.d.ts +21 -0
- package/dist/execution/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/execution/command.ts +100 -10
- package/src/execution/index.ts +2 -0
- package/src/execution/types.ts +24 -1
- package/tests/execution/command.test.ts +155 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -2,11 +2,37 @@
|
|
|
2
2
|
* Command interpolation and parsing
|
|
3
3
|
*
|
|
4
4
|
* Handles ${parameter} substitution in command templates with proper escaping.
|
|
5
|
+
*
|
|
6
|
+
* ## Quoting Behavior
|
|
7
|
+
*
|
|
8
|
+
* Enact automatically applies shell-escaping (quoting) to parameter values
|
|
9
|
+
* that contain special characters. This means you should NOT add quotes
|
|
10
|
+
* around parameters in your command templates:
|
|
11
|
+
*
|
|
12
|
+
* ✅ Correct: `command: "node script.js ${input}"`
|
|
13
|
+
* ❌ Incorrect: `command: "node script.js '${input}'"` (causes double-quoting)
|
|
14
|
+
*
|
|
15
|
+
* ### Modifiers
|
|
16
|
+
*
|
|
17
|
+
* - `${param}` - Normal substitution with auto-quoting
|
|
18
|
+
* - `${param:raw}` - Raw substitution without any quoting (use with caution)
|
|
19
|
+
*
|
|
20
|
+
* ### Smart Quote Detection
|
|
21
|
+
*
|
|
22
|
+
* If a parameter is surrounded by quotes in the template (e.g., `'${param}'`),
|
|
23
|
+
* Enact will:
|
|
24
|
+
* 1. Strip the surrounding quotes from the template
|
|
25
|
+
* 2. Apply its own quoting as needed
|
|
26
|
+
* 3. Emit a warning to help tool authors fix their templates
|
|
5
27
|
*/
|
|
6
28
|
import type { InterpolationOptions, ParsedCommand } from "./types";
|
|
7
29
|
/**
|
|
8
30
|
* Parse a command template into tokens
|
|
9
31
|
*
|
|
32
|
+
* Detects:
|
|
33
|
+
* - Parameters with modifiers: ${param:raw}
|
|
34
|
+
* - Parameters surrounded by quotes: '${param}' or "${param}"
|
|
35
|
+
*
|
|
10
36
|
* @param command - Command template with ${parameter} placeholders
|
|
11
37
|
* @returns Parsed command with tokens and parameter list
|
|
12
38
|
*/
|
|
@@ -39,6 +65,11 @@ export declare function valueToString(value: unknown, jsonifyObjects?: boolean):
|
|
|
39
65
|
/**
|
|
40
66
|
* Interpolate a command template with parameter values
|
|
41
67
|
*
|
|
68
|
+
* Handles:
|
|
69
|
+
* - Normal parameters: `${param}` - auto-quoted as needed
|
|
70
|
+
* - Raw parameters: `${param:raw}` - no quoting applied
|
|
71
|
+
* - Quoted parameters: `'${param}'` - quotes stripped, warning emitted
|
|
72
|
+
*
|
|
42
73
|
* @param command - Command template or parsed command
|
|
43
74
|
* @param params - Parameter values
|
|
44
75
|
* @param options - Interpolation options
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/execution/command.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/execution/command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAgB,oBAAoB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAQjF;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAoF3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAejD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,UAAO,GAAG,MAAM,CAkB3E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,GAAG,aAAa,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,GAAE,oBAAyB,GACjC,MAAM,CAyDR;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAgD1D;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAEvD;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,GAAE,oBAAyB,GACjC,MAAM,EAAE,CAWV;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,GAAG,aAAa,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,EAAE,CAIV;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAE1D"}
|
|
@@ -2,14 +2,41 @@
|
|
|
2
2
|
* Command interpolation and parsing
|
|
3
3
|
*
|
|
4
4
|
* Handles ${parameter} substitution in command templates with proper escaping.
|
|
5
|
+
*
|
|
6
|
+
* ## Quoting Behavior
|
|
7
|
+
*
|
|
8
|
+
* Enact automatically applies shell-escaping (quoting) to parameter values
|
|
9
|
+
* that contain special characters. This means you should NOT add quotes
|
|
10
|
+
* around parameters in your command templates:
|
|
11
|
+
*
|
|
12
|
+
* ✅ Correct: `command: "node script.js ${input}"`
|
|
13
|
+
* ❌ Incorrect: `command: "node script.js '${input}'"` (causes double-quoting)
|
|
14
|
+
*
|
|
15
|
+
* ### Modifiers
|
|
16
|
+
*
|
|
17
|
+
* - `${param}` - Normal substitution with auto-quoting
|
|
18
|
+
* - `${param:raw}` - Raw substitution without any quoting (use with caution)
|
|
19
|
+
*
|
|
20
|
+
* ### Smart Quote Detection
|
|
21
|
+
*
|
|
22
|
+
* If a parameter is surrounded by quotes in the template (e.g., `'${param}'`),
|
|
23
|
+
* Enact will:
|
|
24
|
+
* 1. Strip the surrounding quotes from the template
|
|
25
|
+
* 2. Apply its own quoting as needed
|
|
26
|
+
* 3. Emit a warning to help tool authors fix their templates
|
|
5
27
|
*/
|
|
6
28
|
/**
|
|
7
|
-
* Pattern to match ${parameter} in command strings
|
|
29
|
+
* Pattern to match ${parameter} or ${parameter:modifier} in command strings
|
|
30
|
+
* Captures: paramName and optional modifier (e.g., "raw")
|
|
8
31
|
*/
|
|
9
|
-
const PARAM_PATTERN = /\$\{([^}]+)
|
|
32
|
+
const PARAM_PATTERN = /\$\{([^}:]+)(?::([^}]+))?\}/g;
|
|
10
33
|
/**
|
|
11
34
|
* Parse a command template into tokens
|
|
12
35
|
*
|
|
36
|
+
* Detects:
|
|
37
|
+
* - Parameters with modifiers: ${param:raw}
|
|
38
|
+
* - Parameters surrounded by quotes: '${param}' or "${param}"
|
|
39
|
+
*
|
|
13
40
|
* @param command - Command template with ${parameter} placeholders
|
|
14
41
|
* @returns Parsed command with tokens and parameter list
|
|
15
42
|
*/
|
|
@@ -22,25 +49,53 @@ export function parseCommand(command) {
|
|
|
22
49
|
PARAM_PATTERN.lastIndex = 0;
|
|
23
50
|
match = PARAM_PATTERN.exec(command);
|
|
24
51
|
while (match !== null) {
|
|
25
|
-
|
|
26
|
-
|
|
52
|
+
const paramName = match[1];
|
|
53
|
+
const modifier = match[2]; // e.g., "raw"
|
|
54
|
+
const isRaw = modifier === "raw";
|
|
55
|
+
// Check if preceded by a quote
|
|
56
|
+
let startIndex = match.index;
|
|
57
|
+
let surroundingQuotes;
|
|
58
|
+
// Look for surrounding quotes pattern: '${param}' or "${param}"
|
|
59
|
+
const charBefore = startIndex > 0 ? command[startIndex - 1] : "";
|
|
60
|
+
const charAfter = command[startIndex + match[0].length];
|
|
61
|
+
if (charBefore === "'" && charAfter === "'") {
|
|
62
|
+
surroundingQuotes = "single";
|
|
63
|
+
startIndex--; // Include the opening quote in the consumed range
|
|
64
|
+
}
|
|
65
|
+
else if (charBefore === '"' && charAfter === '"') {
|
|
66
|
+
surroundingQuotes = "double";
|
|
67
|
+
startIndex--; // Include the opening quote in the consumed range
|
|
68
|
+
}
|
|
69
|
+
// Add literal text before this match (excluding any opening quote we're consuming)
|
|
70
|
+
if (startIndex > lastIndex) {
|
|
27
71
|
tokens.push({
|
|
28
72
|
type: "literal",
|
|
29
|
-
value: command.slice(lastIndex,
|
|
73
|
+
value: command.slice(lastIndex, startIndex),
|
|
30
74
|
});
|
|
31
75
|
}
|
|
32
76
|
// Add the parameter token
|
|
33
|
-
const paramName = match[1];
|
|
34
77
|
if (paramName) {
|
|
35
|
-
|
|
78
|
+
const token = {
|
|
36
79
|
type: "parameter",
|
|
37
80
|
name: paramName,
|
|
38
|
-
}
|
|
81
|
+
};
|
|
82
|
+
// Only add optional properties if they have values
|
|
83
|
+
if (isRaw) {
|
|
84
|
+
token.raw = true;
|
|
85
|
+
}
|
|
86
|
+
if (surroundingQuotes) {
|
|
87
|
+
token.surroundingQuotes = surroundingQuotes;
|
|
88
|
+
}
|
|
89
|
+
tokens.push(token);
|
|
39
90
|
if (!parameters.includes(paramName)) {
|
|
40
91
|
parameters.push(paramName);
|
|
41
92
|
}
|
|
42
93
|
}
|
|
94
|
+
// Update lastIndex, skipping the closing quote if we detected surrounding quotes
|
|
43
95
|
lastIndex = match.index + match[0].length;
|
|
96
|
+
if (surroundingQuotes) {
|
|
97
|
+
lastIndex++; // Skip the closing quote
|
|
98
|
+
}
|
|
44
99
|
match = PARAM_PATTERN.exec(command);
|
|
45
100
|
}
|
|
46
101
|
// Add any remaining literal text
|
|
@@ -111,6 +166,11 @@ export function valueToString(value, jsonifyObjects = true) {
|
|
|
111
166
|
/**
|
|
112
167
|
* Interpolate a command template with parameter values
|
|
113
168
|
*
|
|
169
|
+
* Handles:
|
|
170
|
+
* - Normal parameters: `${param}` - auto-quoted as needed
|
|
171
|
+
* - Raw parameters: `${param:raw}` - no quoting applied
|
|
172
|
+
* - Quoted parameters: `'${param}'` - quotes stripped, warning emitted
|
|
173
|
+
*
|
|
114
174
|
* @param command - Command template or parsed command
|
|
115
175
|
* @param params - Parameter values
|
|
116
176
|
* @param options - Interpolation options
|
|
@@ -118,7 +178,7 @@ export function valueToString(value, jsonifyObjects = true) {
|
|
|
118
178
|
* @throws Error if required parameter is missing and onMissing is "error"
|
|
119
179
|
*/
|
|
120
180
|
export function interpolateCommand(command, params, options = {}) {
|
|
121
|
-
const { escape: shouldEscape = true, jsonifyObjects = true, onMissing = "error" } = options;
|
|
181
|
+
const { escape: shouldEscape = true, jsonifyObjects = true, onMissing = "error", onWarning, } = options;
|
|
122
182
|
const parsed = typeof command === "string" ? parseCommand(command) : command;
|
|
123
183
|
const parts = [];
|
|
124
184
|
for (const token of parsed.tokens) {
|
|
@@ -128,6 +188,18 @@ export function interpolateCommand(command, params, options = {}) {
|
|
|
128
188
|
else {
|
|
129
189
|
const paramName = token.name;
|
|
130
190
|
const value = params[paramName];
|
|
191
|
+
const isRaw = token.raw === true;
|
|
192
|
+
const hadSurroundingQuotes = token.surroundingQuotes;
|
|
193
|
+
// Emit warning if surrounding quotes were detected and stripped
|
|
194
|
+
if (hadSurroundingQuotes && onWarning) {
|
|
195
|
+
const quoteChar = hadSurroundingQuotes === "single" ? "'" : '"';
|
|
196
|
+
onWarning({
|
|
197
|
+
code: "DOUBLE_QUOTING",
|
|
198
|
+
message: `Parameter '${paramName}' was surrounded by ${hadSurroundingQuotes} quotes in the command template. This would cause double-quoting. The quotes have been automatically removed.`,
|
|
199
|
+
parameter: paramName,
|
|
200
|
+
suggestion: `Change ${quoteChar}\${${paramName}}${quoteChar} to \${${paramName}} in your command template.`,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
131
203
|
if (value === undefined) {
|
|
132
204
|
switch (onMissing) {
|
|
133
205
|
case "error":
|
|
@@ -142,7 +214,11 @@ export function interpolateCommand(command, params, options = {}) {
|
|
|
142
214
|
}
|
|
143
215
|
else {
|
|
144
216
|
const stringValue = valueToString(value, jsonifyObjects);
|
|
145
|
-
|
|
217
|
+
// Determine if we should escape this value
|
|
218
|
+
// - Raw modifier (${param:raw}) disables escaping
|
|
219
|
+
// - Global escape option can disable escaping
|
|
220
|
+
const shouldEscapeThis = shouldEscape && !isRaw;
|
|
221
|
+
parts.push(shouldEscapeThis ? shellEscape(stringValue) : stringValue);
|
|
146
222
|
}
|
|
147
223
|
}
|
|
148
224
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/execution/command.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/execution/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Provides containerized tool execution using the Dagger SDK.
|
|
5
5
|
* This is the main entry point for Phase 3 of Enact CLI 2.0.
|
|
6
6
|
*/
|
|
7
|
-
export type { ExecutionInput, FileInput, ExecutionOutput, ExecutionResult, ExecutionMetadata, ExecutionError, ExecutionErrorCode, ExecutionOptions, RetryConfig, ContainerRuntime, RuntimeDetection, RuntimeStatus, EngineHealth, EngineState, ExecutionProvider, ParsedCommand, CommandToken, InterpolationOptions, InputValidationResult, InputValidationError, DryRunResult, } from "./types.js";
|
|
7
|
+
export type { ExecutionInput, FileInput, ExecutionOutput, ExecutionResult, ExecutionMetadata, ExecutionError, ExecutionErrorCode, ExecutionOptions, RetryConfig, ContainerRuntime, RuntimeDetection, RuntimeStatus, EngineHealth, EngineState, ExecutionProvider, ParsedCommand, CommandToken, InterpolationOptions, CommandWarning, CommandWarningCode, InputValidationResult, InputValidationError, DryRunResult, } from "./types.js";
|
|
8
8
|
export { DEFAULT_RETRY_CONFIG } from "./types.js";
|
|
9
9
|
export { detectRuntime, clearRuntimeCache, isRuntimeAvailable, getAvailableRuntimes, RuntimeStatusTracker, createRuntimeTracker, } from "./runtime.js";
|
|
10
10
|
export { parseCommand, interpolateCommand, shellEscape, parseCommandArgs, prepareCommand, getMissingParams, } from "./command.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/execution/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EAEV,cAAc,EACd,SAAS,EACT,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAElB,gBAAgB,EAChB,WAAW,EAEX,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EAEb,YAAY,EACZ,WAAW,EAEX,iBAAiB,EAEjB,aAAa,EACb,YAAY,EACZ,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/execution/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EAEV,cAAc,EACd,SAAS,EACT,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAElB,gBAAgB,EAChB,WAAW,EAEX,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EAEb,YAAY,EACZ,WAAW,EAEX,iBAAiB,EAEjB,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAElB,qBAAqB,EACrB,oBAAoB,EAEpB,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGlD,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,YAAY,GACb,MAAM,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/execution/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/execution/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqCH,YAAY;AACZ,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,oBAAoB;AACpB,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,wBAAwB;AACxB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,mBAAmB;AACnB,OAAO,EACL,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB,kEAAkE;AAClE,2EAA2E"}
|
|
@@ -243,6 +243,8 @@ export type CommandToken = {
|
|
|
243
243
|
} | {
|
|
244
244
|
type: "parameter";
|
|
245
245
|
name: string;
|
|
246
|
+
raw?: boolean;
|
|
247
|
+
surroundingQuotes?: "single" | "double";
|
|
246
248
|
};
|
|
247
249
|
/**
|
|
248
250
|
* Command interpolation options
|
|
@@ -254,6 +256,25 @@ export interface InterpolationOptions {
|
|
|
254
256
|
jsonifyObjects?: boolean;
|
|
255
257
|
/** Missing parameter handling */
|
|
256
258
|
onMissing?: "error" | "empty" | "keep";
|
|
259
|
+
/** Callback for warnings (e.g., potential double-quoting) */
|
|
260
|
+
onWarning?: (warning: CommandWarning) => void;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Warning types for command processing
|
|
264
|
+
*/
|
|
265
|
+
export type CommandWarningCode = "DOUBLE_QUOTING" | "RAW_MODIFIER_USED";
|
|
266
|
+
/**
|
|
267
|
+
* Warning about command processing issues
|
|
268
|
+
*/
|
|
269
|
+
export interface CommandWarning {
|
|
270
|
+
/** Warning code for programmatic handling */
|
|
271
|
+
code: CommandWarningCode;
|
|
272
|
+
/** Human-readable warning message */
|
|
273
|
+
message: string;
|
|
274
|
+
/** Parameter name that triggered the warning */
|
|
275
|
+
parameter: string;
|
|
276
|
+
/** Suggested fix */
|
|
277
|
+
suggestion?: string;
|
|
257
278
|
}
|
|
258
279
|
/**
|
|
259
280
|
* Result of input validation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/execution/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/execution/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@enactprotocol/shared",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.9",
|
|
4
4
|
"description": "Core business logic and utilities for Enact",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"typecheck": "tsc --noEmit"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@enactprotocol/trust": "2.0.
|
|
21
|
+
"@enactprotocol/trust": "2.0.9",
|
|
22
22
|
"js-yaml": "^4.1.1",
|
|
23
23
|
"zod": "^4.1.13"
|
|
24
24
|
},
|
package/src/execution/command.ts
CHANGED
|
@@ -2,18 +2,45 @@
|
|
|
2
2
|
* Command interpolation and parsing
|
|
3
3
|
*
|
|
4
4
|
* Handles ${parameter} substitution in command templates with proper escaping.
|
|
5
|
+
*
|
|
6
|
+
* ## Quoting Behavior
|
|
7
|
+
*
|
|
8
|
+
* Enact automatically applies shell-escaping (quoting) to parameter values
|
|
9
|
+
* that contain special characters. This means you should NOT add quotes
|
|
10
|
+
* around parameters in your command templates:
|
|
11
|
+
*
|
|
12
|
+
* ✅ Correct: `command: "node script.js ${input}"`
|
|
13
|
+
* ❌ Incorrect: `command: "node script.js '${input}'"` (causes double-quoting)
|
|
14
|
+
*
|
|
15
|
+
* ### Modifiers
|
|
16
|
+
*
|
|
17
|
+
* - `${param}` - Normal substitution with auto-quoting
|
|
18
|
+
* - `${param:raw}` - Raw substitution without any quoting (use with caution)
|
|
19
|
+
*
|
|
20
|
+
* ### Smart Quote Detection
|
|
21
|
+
*
|
|
22
|
+
* If a parameter is surrounded by quotes in the template (e.g., `'${param}'`),
|
|
23
|
+
* Enact will:
|
|
24
|
+
* 1. Strip the surrounding quotes from the template
|
|
25
|
+
* 2. Apply its own quoting as needed
|
|
26
|
+
* 3. Emit a warning to help tool authors fix their templates
|
|
5
27
|
*/
|
|
6
28
|
|
|
7
29
|
import type { CommandToken, InterpolationOptions, ParsedCommand } from "./types";
|
|
8
30
|
|
|
9
31
|
/**
|
|
10
|
-
* Pattern to match ${parameter} in command strings
|
|
32
|
+
* Pattern to match ${parameter} or ${parameter:modifier} in command strings
|
|
33
|
+
* Captures: paramName and optional modifier (e.g., "raw")
|
|
11
34
|
*/
|
|
12
|
-
const PARAM_PATTERN = /\$\{([^}]+)
|
|
35
|
+
const PARAM_PATTERN = /\$\{([^}:]+)(?::([^}]+))?\}/g;
|
|
13
36
|
|
|
14
37
|
/**
|
|
15
38
|
* Parse a command template into tokens
|
|
16
39
|
*
|
|
40
|
+
* Detects:
|
|
41
|
+
* - Parameters with modifiers: ${param:raw}
|
|
42
|
+
* - Parameters surrounded by quotes: '${param}' or "${param}"
|
|
43
|
+
*
|
|
17
44
|
* @param command - Command template with ${parameter} placeholders
|
|
18
45
|
* @returns Parsed command with tokens and parameter list
|
|
19
46
|
*/
|
|
@@ -29,28 +56,62 @@ export function parseCommand(command: string): ParsedCommand {
|
|
|
29
56
|
|
|
30
57
|
match = PARAM_PATTERN.exec(command);
|
|
31
58
|
while (match !== null) {
|
|
32
|
-
|
|
33
|
-
|
|
59
|
+
const paramName = match[1];
|
|
60
|
+
const modifier = match[2]; // e.g., "raw"
|
|
61
|
+
const isRaw = modifier === "raw";
|
|
62
|
+
|
|
63
|
+
// Check if preceded by a quote
|
|
64
|
+
let startIndex = match.index;
|
|
65
|
+
let surroundingQuotes: "single" | "double" | undefined;
|
|
66
|
+
|
|
67
|
+
// Look for surrounding quotes pattern: '${param}' or "${param}"
|
|
68
|
+
const charBefore = startIndex > 0 ? command[startIndex - 1] : "";
|
|
69
|
+
const charAfter = command[startIndex + match[0].length];
|
|
70
|
+
|
|
71
|
+
if (charBefore === "'" && charAfter === "'") {
|
|
72
|
+
surroundingQuotes = "single";
|
|
73
|
+
startIndex--; // Include the opening quote in the consumed range
|
|
74
|
+
} else if (charBefore === '"' && charAfter === '"') {
|
|
75
|
+
surroundingQuotes = "double";
|
|
76
|
+
startIndex--; // Include the opening quote in the consumed range
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Add literal text before this match (excluding any opening quote we're consuming)
|
|
80
|
+
if (startIndex > lastIndex) {
|
|
34
81
|
tokens.push({
|
|
35
82
|
type: "literal",
|
|
36
|
-
value: command.slice(lastIndex,
|
|
83
|
+
value: command.slice(lastIndex, startIndex),
|
|
37
84
|
});
|
|
38
85
|
}
|
|
39
86
|
|
|
40
87
|
// Add the parameter token
|
|
41
|
-
const paramName = match[1];
|
|
42
88
|
if (paramName) {
|
|
43
|
-
|
|
89
|
+
const token: CommandToken = {
|
|
44
90
|
type: "parameter",
|
|
45
91
|
name: paramName,
|
|
46
|
-
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
// Only add optional properties if they have values
|
|
95
|
+
if (isRaw) {
|
|
96
|
+
token.raw = true;
|
|
97
|
+
}
|
|
98
|
+
if (surroundingQuotes) {
|
|
99
|
+
token.surroundingQuotes = surroundingQuotes;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
tokens.push(token);
|
|
47
103
|
|
|
48
104
|
if (!parameters.includes(paramName)) {
|
|
49
105
|
parameters.push(paramName);
|
|
50
106
|
}
|
|
51
107
|
}
|
|
52
108
|
|
|
109
|
+
// Update lastIndex, skipping the closing quote if we detected surrounding quotes
|
|
53
110
|
lastIndex = match.index + match[0].length;
|
|
111
|
+
if (surroundingQuotes) {
|
|
112
|
+
lastIndex++; // Skip the closing quote
|
|
113
|
+
}
|
|
114
|
+
|
|
54
115
|
match = PARAM_PATTERN.exec(command);
|
|
55
116
|
}
|
|
56
117
|
|
|
@@ -132,6 +193,11 @@ export function valueToString(value: unknown, jsonifyObjects = true): string {
|
|
|
132
193
|
/**
|
|
133
194
|
* Interpolate a command template with parameter values
|
|
134
195
|
*
|
|
196
|
+
* Handles:
|
|
197
|
+
* - Normal parameters: `${param}` - auto-quoted as needed
|
|
198
|
+
* - Raw parameters: `${param:raw}` - no quoting applied
|
|
199
|
+
* - Quoted parameters: `'${param}'` - quotes stripped, warning emitted
|
|
200
|
+
*
|
|
135
201
|
* @param command - Command template or parsed command
|
|
136
202
|
* @param params - Parameter values
|
|
137
203
|
* @param options - Interpolation options
|
|
@@ -143,7 +209,12 @@ export function interpolateCommand(
|
|
|
143
209
|
params: Record<string, unknown>,
|
|
144
210
|
options: InterpolationOptions = {}
|
|
145
211
|
): string {
|
|
146
|
-
const {
|
|
212
|
+
const {
|
|
213
|
+
escape: shouldEscape = true,
|
|
214
|
+
jsonifyObjects = true,
|
|
215
|
+
onMissing = "error",
|
|
216
|
+
onWarning,
|
|
217
|
+
} = options;
|
|
147
218
|
|
|
148
219
|
const parsed = typeof command === "string" ? parseCommand(command) : command;
|
|
149
220
|
|
|
@@ -155,6 +226,19 @@ export function interpolateCommand(
|
|
|
155
226
|
} else {
|
|
156
227
|
const paramName = token.name;
|
|
157
228
|
const value = params[paramName];
|
|
229
|
+
const isRaw = token.raw === true;
|
|
230
|
+
const hadSurroundingQuotes = token.surroundingQuotes;
|
|
231
|
+
|
|
232
|
+
// Emit warning if surrounding quotes were detected and stripped
|
|
233
|
+
if (hadSurroundingQuotes && onWarning) {
|
|
234
|
+
const quoteChar = hadSurroundingQuotes === "single" ? "'" : '"';
|
|
235
|
+
onWarning({
|
|
236
|
+
code: "DOUBLE_QUOTING",
|
|
237
|
+
message: `Parameter '${paramName}' was surrounded by ${hadSurroundingQuotes} quotes in the command template. This would cause double-quoting. The quotes have been automatically removed.`,
|
|
238
|
+
parameter: paramName,
|
|
239
|
+
suggestion: `Change ${quoteChar}\${${paramName}}${quoteChar} to \${${paramName}} in your command template.`,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
158
242
|
|
|
159
243
|
if (value === undefined) {
|
|
160
244
|
switch (onMissing) {
|
|
@@ -169,7 +253,13 @@ export function interpolateCommand(
|
|
|
169
253
|
}
|
|
170
254
|
} else {
|
|
171
255
|
const stringValue = valueToString(value, jsonifyObjects);
|
|
172
|
-
|
|
256
|
+
|
|
257
|
+
// Determine if we should escape this value
|
|
258
|
+
// - Raw modifier (${param:raw}) disables escaping
|
|
259
|
+
// - Global escape option can disable escaping
|
|
260
|
+
const shouldEscapeThis = shouldEscape && !isRaw;
|
|
261
|
+
|
|
262
|
+
parts.push(shouldEscapeThis ? shellEscape(stringValue) : stringValue);
|
|
173
263
|
}
|
|
174
264
|
}
|
|
175
265
|
}
|
package/src/execution/index.ts
CHANGED
package/src/execution/types.ts
CHANGED
|
@@ -308,7 +308,9 @@ export interface ParsedCommand {
|
|
|
308
308
|
/**
|
|
309
309
|
* A token in a parsed command
|
|
310
310
|
*/
|
|
311
|
-
export type CommandToken =
|
|
311
|
+
export type CommandToken =
|
|
312
|
+
| { type: "literal"; value: string }
|
|
313
|
+
| { type: "parameter"; name: string; raw?: boolean; surroundingQuotes?: "single" | "double" };
|
|
312
314
|
|
|
313
315
|
/**
|
|
314
316
|
* Command interpolation options
|
|
@@ -320,6 +322,27 @@ export interface InterpolationOptions {
|
|
|
320
322
|
jsonifyObjects?: boolean;
|
|
321
323
|
/** Missing parameter handling */
|
|
322
324
|
onMissing?: "error" | "empty" | "keep";
|
|
325
|
+
/** Callback for warnings (e.g., potential double-quoting) */
|
|
326
|
+
onWarning?: (warning: CommandWarning) => void;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* Warning types for command processing
|
|
331
|
+
*/
|
|
332
|
+
export type CommandWarningCode = "DOUBLE_QUOTING" | "RAW_MODIFIER_USED";
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* Warning about command processing issues
|
|
336
|
+
*/
|
|
337
|
+
export interface CommandWarning {
|
|
338
|
+
/** Warning code for programmatic handling */
|
|
339
|
+
code: CommandWarningCode;
|
|
340
|
+
/** Human-readable warning message */
|
|
341
|
+
message: string;
|
|
342
|
+
/** Parameter name that triggered the warning */
|
|
343
|
+
parameter: string;
|
|
344
|
+
/** Suggested fix */
|
|
345
|
+
suggestion?: string;
|
|
323
346
|
}
|
|
324
347
|
|
|
325
348
|
// ============================================================================
|