mmt-mcp 1.48.4 → 1.49.0-pre
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/server.cjs +98 -22
- package/dist/server.js +98 -22
- package/package.json +1 -1
package/dist/server.cjs
CHANGED
|
@@ -12210,7 +12210,11 @@ function currentValueForToken(spec) {
|
|
|
12210
12210
|
return void 0;
|
|
12211
12211
|
}
|
|
12212
12212
|
if (alias) {
|
|
12213
|
-
const
|
|
12213
|
+
const raw = String(match[2] || "").trim();
|
|
12214
|
+
if (/^[+-]/.test(raw)) {
|
|
12215
|
+
return void 0;
|
|
12216
|
+
}
|
|
12217
|
+
const duration = parseRelativeAmountMs(raw);
|
|
12214
12218
|
if (duration === void 0) {
|
|
12215
12219
|
return void 0;
|
|
12216
12220
|
}
|
|
@@ -12234,7 +12238,7 @@ var ACCESSOR_SEGMENT_RE = "(?:\\.[A-Za-z_][A-Za-z0-9_]*|\\[(?:-?\\d+(?::-?\\d*)?
|
|
|
12234
12238
|
var ACCESSOR_PATH_RE = `${ACCESSOR_SEGMENT_RE}*`;
|
|
12235
12239
|
var RANDOM_TOKEN_ARGUMENTS_RE = "\\(\\s*[^(),\\s]+(?:\\s*,\\s*[^(),\\s]+)?\\s*\\)";
|
|
12236
12240
|
var RANDOM_TOKEN_SPEC_RE = `${TOKEN_NAME_RE}(?:${RANDOM_TOKEN_ARGUMENTS_RE})?`;
|
|
12237
|
-
var CURRENT_TOKEN_ARGUMENTS_RE = "\\([
|
|
12241
|
+
var CURRENT_TOKEN_ARGUMENTS_RE = "\\([^()]*\\)";
|
|
12238
12242
|
var CURRENT_TOKEN_SPEC_RE = `${TOKEN_NAME_RE}(?:${CURRENT_TOKEN_ARGUMENTS_RE})?`;
|
|
12239
12243
|
var RUNTIME_ARGS_LOOSE_RE = "(?:\\([^)]*\\))?";
|
|
12240
12244
|
var RUNTIME_SPEC_RE = `${TOKEN_NAME_RE}${RUNTIME_ARGS_LOOSE_RE}`;
|
|
@@ -12874,7 +12878,7 @@ function isNonEmptyList(value) {
|
|
|
12874
12878
|
var TOKEN_NAME_RE2 = "[A-Za-z_][A-Za-z0-9_\\-]*";
|
|
12875
12879
|
var RANDOM_TOKEN_ARGUMENTS_RE2 = "\\(\\s*[^(),\\s]+(?:\\s*,\\s*[^(),\\s]+)?\\s*\\)";
|
|
12876
12880
|
var RANDOM_TOKEN_SPEC_RE2 = `${TOKEN_NAME_RE2}(?:${RANDOM_TOKEN_ARGUMENTS_RE2})?`;
|
|
12877
|
-
var CURRENT_TOKEN_ARGUMENTS_RE2 = "\\([
|
|
12881
|
+
var CURRENT_TOKEN_ARGUMENTS_RE2 = "\\([^()]*\\)";
|
|
12878
12882
|
var CURRENT_TOKEN_SPEC_RE2 = `${TOKEN_NAME_RE2}(?:${CURRENT_TOKEN_ARGUMENTS_RE2})?`;
|
|
12879
12883
|
var ACCESSOR_SEGMENT_RE2 = "(?:\\.[A-Za-z_][A-Za-z0-9_]*|\\[(?:-?\\d+(?::-?\\d*)?|:-?\\d*|[A-Za-z_][A-Za-z0-9_]*)\\])";
|
|
12880
12884
|
var ACCESSOR_PATH_RE2 = `${ACCESSOR_SEGMENT_RE2}*`;
|
|
@@ -13146,6 +13150,10 @@ function toTemplateValueJs(value, options) {
|
|
|
13146
13150
|
if (isLiteralTokenValue(s)) {
|
|
13147
13151
|
return JSON.stringify(unwrapLiteralToken(s));
|
|
13148
13152
|
}
|
|
13153
|
+
const trimmed = s.trim();
|
|
13154
|
+
if (/^\$\{[\s\S]*\}$/.test(trimmed)) {
|
|
13155
|
+
return trimmed.slice(2, -1).trim() || "undefined";
|
|
13156
|
+
}
|
|
13149
13157
|
const fullEnvAngle = new RegExp(`^<<\\s*e:(${TOKEN_NAME_RE2})(${ACCESSOR_PATH_RE2})\\s*>>$`);
|
|
13150
13158
|
const fullEnvCurly = new RegExp(`^\\{\\{\\s*e:(${TOKEN_NAME_RE2})(${ACCESSOR_PATH_RE2})\\s*\\}\\}$`, "i");
|
|
13151
13159
|
const fullEnvPlain = new RegExp(`^e:(${TOKEN_NAME_RE2})(${ACCESSOR_PATH_RE2})$`);
|
|
@@ -13816,7 +13824,7 @@ var PARSE_DURATION_JS_FN = `(function __parseDurationMs(v) {
|
|
|
13816
13824
|
}
|
|
13817
13825
|
return Math.round(total);
|
|
13818
13826
|
})`;
|
|
13819
|
-
function durationToJsMsExpr(value) {
|
|
13827
|
+
function durationToJsMsExpr(value, tokenOptions) {
|
|
13820
13828
|
if (typeof value === "number") {
|
|
13821
13829
|
return String(Math.round(value));
|
|
13822
13830
|
}
|
|
@@ -13828,7 +13836,8 @@ function durationToJsMsExpr(value) {
|
|
|
13828
13836
|
if (/^\d+(?:\.\d+)?$/.test(trimmed)) {
|
|
13829
13837
|
return String(Math.round(Number(trimmed)));
|
|
13830
13838
|
}
|
|
13831
|
-
|
|
13839
|
+
const resolved = toTemplateValueJs(trimmed, tokenOptions);
|
|
13840
|
+
return `${PARSE_DURATION_JS_FN}(${resolved})`;
|
|
13832
13841
|
}
|
|
13833
13842
|
function toLowerUnderscore(input) {
|
|
13834
13843
|
if (input === void 0 || input === null) {
|
|
@@ -20027,7 +20036,7 @@ var toConditionJsExpr = (value, knownInputNames) => {
|
|
|
20027
20036
|
return "undefined";
|
|
20028
20037
|
}
|
|
20029
20038
|
if (/^\$\{[\s\S]+\}$/.test(trimmed)) {
|
|
20030
|
-
return trimmed.slice(2, -1).trim() || "undefined";
|
|
20039
|
+
return normalizeRuntimeActualExpression(trimmed.slice(2, -1).trim()) || "undefined";
|
|
20031
20040
|
}
|
|
20032
20041
|
try {
|
|
20033
20042
|
const parsed = YAML5.parse(trimmed);
|
|
@@ -20311,14 +20320,46 @@ var repeatToJSfunc = async (loop, useExternalReport, importTitleMap, hoistedIds,
|
|
|
20311
20320
|
${indentLines(loopBody)}
|
|
20312
20321
|
}`;
|
|
20313
20322
|
}
|
|
20314
|
-
|
|
20323
|
+
if (loopCondition.toLowerCase() === "inf") {
|
|
20324
|
+
return `for (;;) {
|
|
20325
|
+
${indentLines(loopBody)}
|
|
20326
|
+
}`;
|
|
20327
|
+
}
|
|
20328
|
+
if (typeof loop.repeat === "number" || /^\d+$/.test(loopCondition)) {
|
|
20329
|
+
return `for (let i = 0; i < ${loopCondition}; i++) {
|
|
20315
20330
|
${indentLines(loopBody)}
|
|
20331
|
+
}`;
|
|
20332
|
+
}
|
|
20333
|
+
const rawExpr = toTemplateValueJs(
|
|
20334
|
+
loopCondition,
|
|
20335
|
+
jsTokenOptions(knownInputNames)
|
|
20336
|
+
);
|
|
20337
|
+
const indentedBody = indentLines(loopBody);
|
|
20338
|
+
return `{
|
|
20339
|
+
const __repeatRaw = ${rawExpr};
|
|
20340
|
+
const __repeatStr = String(__repeatRaw ?? '').trim();
|
|
20341
|
+
const __repeatLower = __repeatStr.toLowerCase();
|
|
20342
|
+
if (__repeatLower === 'inf') {
|
|
20343
|
+
for (;;) {
|
|
20344
|
+
${indentedBody}
|
|
20345
|
+
}
|
|
20346
|
+
} else if (/^((?:\\d+(?:\\.\\d+)?)(?:ns|ms|s|m|h))+$/i.test(__repeatLower)) {
|
|
20347
|
+
const __repeatMs = ${PARSE_DURATION_JS_FN}(__repeatStr);
|
|
20348
|
+
for (const __repeatStart = Date.now(); Date.now() < __repeatStart + __repeatMs; ) {
|
|
20349
|
+
${indentedBody}
|
|
20350
|
+
}
|
|
20351
|
+
} else {
|
|
20352
|
+
const __repeatN = Number(__repeatRaw);
|
|
20353
|
+
for (let i = 0; i < __repeatN; i++) {
|
|
20354
|
+
${indentedBody}
|
|
20355
|
+
}
|
|
20356
|
+
}
|
|
20316
20357
|
}`;
|
|
20317
20358
|
};
|
|
20318
20359
|
var DELAY_ABORT_CHECK_MS = 2e3;
|
|
20319
|
-
function delayToJSfunc(d) {
|
|
20360
|
+
function delayToJSfunc(d, knownInputNames) {
|
|
20320
20361
|
return `{
|
|
20321
|
-
let __delayLeft = ${durationToJsMsExpr(d)};
|
|
20362
|
+
let __delayLeft = ${durationToJsMsExpr(d, jsTokenOptions(knownInputNames))};
|
|
20322
20363
|
while (__delayLeft > 0) {
|
|
20323
20364
|
await checkAbort_();
|
|
20324
20365
|
const __wait = Math.min(__delayLeft, ${DELAY_ABORT_CHECK_MS});
|
|
@@ -20383,8 +20424,9 @@ var checkToJSfunc = (check, useExternalReport, knownInputNames) => comparisonToJ
|
|
|
20383
20424
|
var assertToJSfunc = (assert, useExternalReport, knownInputNames) => comparisonToJSfunc("assert", assert, useExternalReport, knownInputNames);
|
|
20384
20425
|
var judgeValueToJs = (value, knownInputNames) => {
|
|
20385
20426
|
if (typeof value === "string") {
|
|
20386
|
-
|
|
20387
|
-
|
|
20427
|
+
const trimmed = value.trim();
|
|
20428
|
+
if (/^\$\{[\s\S]+\}$/.test(trimmed)) {
|
|
20429
|
+
return normalizeRuntimeActualExpression(trimmed.slice(2, -1).trim()) || "undefined";
|
|
20388
20430
|
}
|
|
20389
20431
|
return toTemplateValueJs(value, jsTokenOptions(knownInputNames));
|
|
20390
20432
|
}
|
|
@@ -20450,7 +20492,14 @@ var isExplicitMultiCheckArray = (value) => {
|
|
|
20450
20492
|
};
|
|
20451
20493
|
var expectValueToJs = (value, knownInputNames) => {
|
|
20452
20494
|
const normalized = normalizeOmitToNull(value);
|
|
20453
|
-
|
|
20495
|
+
if (typeof normalized === "string") {
|
|
20496
|
+
const trimmed = normalized.trim();
|
|
20497
|
+
if (/^\$\{[\s\S]+\}$/.test(trimmed)) {
|
|
20498
|
+
return normalizeRuntimeActualExpression(trimmed.slice(2, -1).trim()) || "undefined";
|
|
20499
|
+
}
|
|
20500
|
+
return toTemplateValueJs(normalized, jsTokenOptions(knownInputNames));
|
|
20501
|
+
}
|
|
20502
|
+
return JSON.stringify(normalized);
|
|
20454
20503
|
};
|
|
20455
20504
|
var comparisonFromPartsToJSfunc = (actualExpr, operator, expected, knownInputNames) => {
|
|
20456
20505
|
if (isOmitSentinel(expected) || expected === null) {
|
|
@@ -20793,17 +20842,17 @@ try {
|
|
|
20793
20842
|
);
|
|
20794
20843
|
return result;
|
|
20795
20844
|
};
|
|
20796
|
-
var varToJSfunc = (decl, step, rewriteOutputKeys = false) => {
|
|
20845
|
+
var varToJSfunc = (decl, step, rewriteOutputKeys = false, knownInputNames) => {
|
|
20797
20846
|
return Object.entries(step).map(([varName, value]) => {
|
|
20798
20847
|
const lhs = rewriteOutputKeys ? rewriteOutputSetKey(varName) ?? varName : varName;
|
|
20799
20848
|
if (typeof value === "string") {
|
|
20800
|
-
return `${decl}${lhs} =
|
|
20849
|
+
return `${decl}${lhs} = ${toTemplateValueJs(value, jsTokenOptions(knownInputNames))};`;
|
|
20801
20850
|
} else {
|
|
20802
20851
|
return `${decl}${lhs} = ${value};`;
|
|
20803
20852
|
}
|
|
20804
20853
|
}).join("\n");
|
|
20805
20854
|
};
|
|
20806
|
-
var setenvToJSfunc = (setenv, enabled) => {
|
|
20855
|
+
var setenvToJSfunc = (setenv, enabled, knownInputNames) => {
|
|
20807
20856
|
if (!enabled) {
|
|
20808
20857
|
return "";
|
|
20809
20858
|
}
|
|
@@ -20812,7 +20861,10 @@ var setenvToJSfunc = (setenv, enabled) => {
|
|
|
20812
20861
|
return "";
|
|
20813
20862
|
}
|
|
20814
20863
|
const objEntries = entries.map(([envKey, outputKeyOrValue]) => {
|
|
20815
|
-
const valueExpr = typeof outputKeyOrValue === "string" ?
|
|
20864
|
+
const valueExpr = typeof outputKeyOrValue === "string" ? toTemplateValueJs(
|
|
20865
|
+
outputKeyOrValue,
|
|
20866
|
+
jsTokenOptions(knownInputNames)
|
|
20867
|
+
) : JSON.stringify(outputKeyOrValue);
|
|
20816
20868
|
return `${JSON.stringify(envKey)}: ${valueExpr}`;
|
|
20817
20869
|
});
|
|
20818
20870
|
return `setenv_({ ${objEntries.join(", ")} });`;
|
|
@@ -20894,7 +20946,7 @@ var flowStepsToJsfunc = async (flow, root, useExternalReport = !root, importTitl
|
|
|
20894
20946
|
);
|
|
20895
20947
|
break;
|
|
20896
20948
|
case "delay":
|
|
20897
|
-
stepJs = delayToJSfunc(step.delay);
|
|
20949
|
+
stepJs = delayToJSfunc(step.delay, knownInputNames);
|
|
20898
20950
|
break;
|
|
20899
20951
|
case "for":
|
|
20900
20952
|
stepJs = await forToJSfunc(
|
|
@@ -20918,19 +20970,43 @@ var flowStepsToJsfunc = async (flow, root, useExternalReport = !root, importTitl
|
|
|
20918
20970
|
}
|
|
20919
20971
|
break;
|
|
20920
20972
|
case "set":
|
|
20921
|
-
stepJs = varToJSfunc(
|
|
20973
|
+
stepJs = varToJSfunc(
|
|
20974
|
+
"",
|
|
20975
|
+
step.set,
|
|
20976
|
+
true,
|
|
20977
|
+
knownInputNames
|
|
20978
|
+
);
|
|
20922
20979
|
break;
|
|
20923
20980
|
case "var":
|
|
20924
|
-
stepJs = varToJSfunc(
|
|
20981
|
+
stepJs = varToJSfunc(
|
|
20982
|
+
"var ",
|
|
20983
|
+
step.var,
|
|
20984
|
+
false,
|
|
20985
|
+
knownInputNames
|
|
20986
|
+
);
|
|
20925
20987
|
break;
|
|
20926
20988
|
case "const":
|
|
20927
|
-
stepJs = varToJSfunc(
|
|
20989
|
+
stepJs = varToJSfunc(
|
|
20990
|
+
"const ",
|
|
20991
|
+
step.const,
|
|
20992
|
+
false,
|
|
20993
|
+
knownInputNames
|
|
20994
|
+
);
|
|
20928
20995
|
break;
|
|
20929
20996
|
case "let":
|
|
20930
|
-
stepJs = varToJSfunc(
|
|
20997
|
+
stepJs = varToJSfunc(
|
|
20998
|
+
"let ",
|
|
20999
|
+
step.let,
|
|
21000
|
+
false,
|
|
21001
|
+
knownInputNames
|
|
21002
|
+
);
|
|
20931
21003
|
break;
|
|
20932
21004
|
case "setenv":
|
|
20933
|
-
stepJs = setenvToJSfunc(
|
|
21005
|
+
stepJs = setenvToJSfunc(
|
|
21006
|
+
step.setenv,
|
|
21007
|
+
emitSetenv,
|
|
21008
|
+
knownInputNames
|
|
21009
|
+
);
|
|
20934
21010
|
break;
|
|
20935
21011
|
default:
|
|
20936
21012
|
stepJs = "";
|
package/dist/server.js
CHANGED
|
@@ -12210,7 +12210,11 @@ function currentValueForToken(spec) {
|
|
|
12210
12210
|
return void 0;
|
|
12211
12211
|
}
|
|
12212
12212
|
if (alias) {
|
|
12213
|
-
const
|
|
12213
|
+
const raw = String(match[2] || "").trim();
|
|
12214
|
+
if (/^[+-]/.test(raw)) {
|
|
12215
|
+
return void 0;
|
|
12216
|
+
}
|
|
12217
|
+
const duration = parseRelativeAmountMs(raw);
|
|
12214
12218
|
if (duration === void 0) {
|
|
12215
12219
|
return void 0;
|
|
12216
12220
|
}
|
|
@@ -12234,7 +12238,7 @@ var ACCESSOR_SEGMENT_RE = "(?:\\.[A-Za-z_][A-Za-z0-9_]*|\\[(?:-?\\d+(?::-?\\d*)?
|
|
|
12234
12238
|
var ACCESSOR_PATH_RE = `${ACCESSOR_SEGMENT_RE}*`;
|
|
12235
12239
|
var RANDOM_TOKEN_ARGUMENTS_RE = "\\(\\s*[^(),\\s]+(?:\\s*,\\s*[^(),\\s]+)?\\s*\\)";
|
|
12236
12240
|
var RANDOM_TOKEN_SPEC_RE = `${TOKEN_NAME_RE}(?:${RANDOM_TOKEN_ARGUMENTS_RE})?`;
|
|
12237
|
-
var CURRENT_TOKEN_ARGUMENTS_RE = "\\([
|
|
12241
|
+
var CURRENT_TOKEN_ARGUMENTS_RE = "\\([^()]*\\)";
|
|
12238
12242
|
var CURRENT_TOKEN_SPEC_RE = `${TOKEN_NAME_RE}(?:${CURRENT_TOKEN_ARGUMENTS_RE})?`;
|
|
12239
12243
|
var RUNTIME_ARGS_LOOSE_RE = "(?:\\([^)]*\\))?";
|
|
12240
12244
|
var RUNTIME_SPEC_RE = `${TOKEN_NAME_RE}${RUNTIME_ARGS_LOOSE_RE}`;
|
|
@@ -12874,7 +12878,7 @@ function isNonEmptyList(value) {
|
|
|
12874
12878
|
var TOKEN_NAME_RE2 = "[A-Za-z_][A-Za-z0-9_\\-]*";
|
|
12875
12879
|
var RANDOM_TOKEN_ARGUMENTS_RE2 = "\\(\\s*[^(),\\s]+(?:\\s*,\\s*[^(),\\s]+)?\\s*\\)";
|
|
12876
12880
|
var RANDOM_TOKEN_SPEC_RE2 = `${TOKEN_NAME_RE2}(?:${RANDOM_TOKEN_ARGUMENTS_RE2})?`;
|
|
12877
|
-
var CURRENT_TOKEN_ARGUMENTS_RE2 = "\\([
|
|
12881
|
+
var CURRENT_TOKEN_ARGUMENTS_RE2 = "\\([^()]*\\)";
|
|
12878
12882
|
var CURRENT_TOKEN_SPEC_RE2 = `${TOKEN_NAME_RE2}(?:${CURRENT_TOKEN_ARGUMENTS_RE2})?`;
|
|
12879
12883
|
var ACCESSOR_SEGMENT_RE2 = "(?:\\.[A-Za-z_][A-Za-z0-9_]*|\\[(?:-?\\d+(?::-?\\d*)?|:-?\\d*|[A-Za-z_][A-Za-z0-9_]*)\\])";
|
|
12880
12884
|
var ACCESSOR_PATH_RE2 = `${ACCESSOR_SEGMENT_RE2}*`;
|
|
@@ -13146,6 +13150,10 @@ function toTemplateValueJs(value, options) {
|
|
|
13146
13150
|
if (isLiteralTokenValue(s)) {
|
|
13147
13151
|
return JSON.stringify(unwrapLiteralToken(s));
|
|
13148
13152
|
}
|
|
13153
|
+
const trimmed = s.trim();
|
|
13154
|
+
if (/^\$\{[\s\S]*\}$/.test(trimmed)) {
|
|
13155
|
+
return trimmed.slice(2, -1).trim() || "undefined";
|
|
13156
|
+
}
|
|
13149
13157
|
const fullEnvAngle = new RegExp(`^<<\\s*e:(${TOKEN_NAME_RE2})(${ACCESSOR_PATH_RE2})\\s*>>$`);
|
|
13150
13158
|
const fullEnvCurly = new RegExp(`^\\{\\{\\s*e:(${TOKEN_NAME_RE2})(${ACCESSOR_PATH_RE2})\\s*\\}\\}$`, "i");
|
|
13151
13159
|
const fullEnvPlain = new RegExp(`^e:(${TOKEN_NAME_RE2})(${ACCESSOR_PATH_RE2})$`);
|
|
@@ -13816,7 +13824,7 @@ var PARSE_DURATION_JS_FN = `(function __parseDurationMs(v) {
|
|
|
13816
13824
|
}
|
|
13817
13825
|
return Math.round(total);
|
|
13818
13826
|
})`;
|
|
13819
|
-
function durationToJsMsExpr(value) {
|
|
13827
|
+
function durationToJsMsExpr(value, tokenOptions) {
|
|
13820
13828
|
if (typeof value === "number") {
|
|
13821
13829
|
return String(Math.round(value));
|
|
13822
13830
|
}
|
|
@@ -13828,7 +13836,8 @@ function durationToJsMsExpr(value) {
|
|
|
13828
13836
|
if (/^\d+(?:\.\d+)?$/.test(trimmed)) {
|
|
13829
13837
|
return String(Math.round(Number(trimmed)));
|
|
13830
13838
|
}
|
|
13831
|
-
|
|
13839
|
+
const resolved = toTemplateValueJs(trimmed, tokenOptions);
|
|
13840
|
+
return `${PARSE_DURATION_JS_FN}(${resolved})`;
|
|
13832
13841
|
}
|
|
13833
13842
|
function toLowerUnderscore(input) {
|
|
13834
13843
|
if (input === void 0 || input === null) {
|
|
@@ -20027,7 +20036,7 @@ var toConditionJsExpr = (value, knownInputNames) => {
|
|
|
20027
20036
|
return "undefined";
|
|
20028
20037
|
}
|
|
20029
20038
|
if (/^\$\{[\s\S]+\}$/.test(trimmed)) {
|
|
20030
|
-
return trimmed.slice(2, -1).trim() || "undefined";
|
|
20039
|
+
return normalizeRuntimeActualExpression(trimmed.slice(2, -1).trim()) || "undefined";
|
|
20031
20040
|
}
|
|
20032
20041
|
try {
|
|
20033
20042
|
const parsed = YAML5.parse(trimmed);
|
|
@@ -20311,14 +20320,46 @@ var repeatToJSfunc = async (loop, useExternalReport, importTitleMap, hoistedIds,
|
|
|
20311
20320
|
${indentLines(loopBody)}
|
|
20312
20321
|
}`;
|
|
20313
20322
|
}
|
|
20314
|
-
|
|
20323
|
+
if (loopCondition.toLowerCase() === "inf") {
|
|
20324
|
+
return `for (;;) {
|
|
20325
|
+
${indentLines(loopBody)}
|
|
20326
|
+
}`;
|
|
20327
|
+
}
|
|
20328
|
+
if (typeof loop.repeat === "number" || /^\d+$/.test(loopCondition)) {
|
|
20329
|
+
return `for (let i = 0; i < ${loopCondition}; i++) {
|
|
20315
20330
|
${indentLines(loopBody)}
|
|
20331
|
+
}`;
|
|
20332
|
+
}
|
|
20333
|
+
const rawExpr = toTemplateValueJs(
|
|
20334
|
+
loopCondition,
|
|
20335
|
+
jsTokenOptions(knownInputNames)
|
|
20336
|
+
);
|
|
20337
|
+
const indentedBody = indentLines(loopBody);
|
|
20338
|
+
return `{
|
|
20339
|
+
const __repeatRaw = ${rawExpr};
|
|
20340
|
+
const __repeatStr = String(__repeatRaw ?? '').trim();
|
|
20341
|
+
const __repeatLower = __repeatStr.toLowerCase();
|
|
20342
|
+
if (__repeatLower === 'inf') {
|
|
20343
|
+
for (;;) {
|
|
20344
|
+
${indentedBody}
|
|
20345
|
+
}
|
|
20346
|
+
} else if (/^((?:\\d+(?:\\.\\d+)?)(?:ns|ms|s|m|h))+$/i.test(__repeatLower)) {
|
|
20347
|
+
const __repeatMs = ${PARSE_DURATION_JS_FN}(__repeatStr);
|
|
20348
|
+
for (const __repeatStart = Date.now(); Date.now() < __repeatStart + __repeatMs; ) {
|
|
20349
|
+
${indentedBody}
|
|
20350
|
+
}
|
|
20351
|
+
} else {
|
|
20352
|
+
const __repeatN = Number(__repeatRaw);
|
|
20353
|
+
for (let i = 0; i < __repeatN; i++) {
|
|
20354
|
+
${indentedBody}
|
|
20355
|
+
}
|
|
20356
|
+
}
|
|
20316
20357
|
}`;
|
|
20317
20358
|
};
|
|
20318
20359
|
var DELAY_ABORT_CHECK_MS = 2e3;
|
|
20319
|
-
function delayToJSfunc(d) {
|
|
20360
|
+
function delayToJSfunc(d, knownInputNames) {
|
|
20320
20361
|
return `{
|
|
20321
|
-
let __delayLeft = ${durationToJsMsExpr(d)};
|
|
20362
|
+
let __delayLeft = ${durationToJsMsExpr(d, jsTokenOptions(knownInputNames))};
|
|
20322
20363
|
while (__delayLeft > 0) {
|
|
20323
20364
|
await checkAbort_();
|
|
20324
20365
|
const __wait = Math.min(__delayLeft, ${DELAY_ABORT_CHECK_MS});
|
|
@@ -20383,8 +20424,9 @@ var checkToJSfunc = (check, useExternalReport, knownInputNames) => comparisonToJ
|
|
|
20383
20424
|
var assertToJSfunc = (assert, useExternalReport, knownInputNames) => comparisonToJSfunc("assert", assert, useExternalReport, knownInputNames);
|
|
20384
20425
|
var judgeValueToJs = (value, knownInputNames) => {
|
|
20385
20426
|
if (typeof value === "string") {
|
|
20386
|
-
|
|
20387
|
-
|
|
20427
|
+
const trimmed = value.trim();
|
|
20428
|
+
if (/^\$\{[\s\S]+\}$/.test(trimmed)) {
|
|
20429
|
+
return normalizeRuntimeActualExpression(trimmed.slice(2, -1).trim()) || "undefined";
|
|
20388
20430
|
}
|
|
20389
20431
|
return toTemplateValueJs(value, jsTokenOptions(knownInputNames));
|
|
20390
20432
|
}
|
|
@@ -20450,7 +20492,14 @@ var isExplicitMultiCheckArray = (value) => {
|
|
|
20450
20492
|
};
|
|
20451
20493
|
var expectValueToJs = (value, knownInputNames) => {
|
|
20452
20494
|
const normalized = normalizeOmitToNull(value);
|
|
20453
|
-
|
|
20495
|
+
if (typeof normalized === "string") {
|
|
20496
|
+
const trimmed = normalized.trim();
|
|
20497
|
+
if (/^\$\{[\s\S]+\}$/.test(trimmed)) {
|
|
20498
|
+
return normalizeRuntimeActualExpression(trimmed.slice(2, -1).trim()) || "undefined";
|
|
20499
|
+
}
|
|
20500
|
+
return toTemplateValueJs(normalized, jsTokenOptions(knownInputNames));
|
|
20501
|
+
}
|
|
20502
|
+
return JSON.stringify(normalized);
|
|
20454
20503
|
};
|
|
20455
20504
|
var comparisonFromPartsToJSfunc = (actualExpr, operator, expected, knownInputNames) => {
|
|
20456
20505
|
if (isOmitSentinel(expected) || expected === null) {
|
|
@@ -20793,17 +20842,17 @@ try {
|
|
|
20793
20842
|
);
|
|
20794
20843
|
return result;
|
|
20795
20844
|
};
|
|
20796
|
-
var varToJSfunc = (decl, step, rewriteOutputKeys = false) => {
|
|
20845
|
+
var varToJSfunc = (decl, step, rewriteOutputKeys = false, knownInputNames) => {
|
|
20797
20846
|
return Object.entries(step).map(([varName, value]) => {
|
|
20798
20847
|
const lhs = rewriteOutputKeys ? rewriteOutputSetKey(varName) ?? varName : varName;
|
|
20799
20848
|
if (typeof value === "string") {
|
|
20800
|
-
return `${decl}${lhs} =
|
|
20849
|
+
return `${decl}${lhs} = ${toTemplateValueJs(value, jsTokenOptions(knownInputNames))};`;
|
|
20801
20850
|
} else {
|
|
20802
20851
|
return `${decl}${lhs} = ${value};`;
|
|
20803
20852
|
}
|
|
20804
20853
|
}).join("\n");
|
|
20805
20854
|
};
|
|
20806
|
-
var setenvToJSfunc = (setenv, enabled) => {
|
|
20855
|
+
var setenvToJSfunc = (setenv, enabled, knownInputNames) => {
|
|
20807
20856
|
if (!enabled) {
|
|
20808
20857
|
return "";
|
|
20809
20858
|
}
|
|
@@ -20812,7 +20861,10 @@ var setenvToJSfunc = (setenv, enabled) => {
|
|
|
20812
20861
|
return "";
|
|
20813
20862
|
}
|
|
20814
20863
|
const objEntries = entries.map(([envKey, outputKeyOrValue]) => {
|
|
20815
|
-
const valueExpr = typeof outputKeyOrValue === "string" ?
|
|
20864
|
+
const valueExpr = typeof outputKeyOrValue === "string" ? toTemplateValueJs(
|
|
20865
|
+
outputKeyOrValue,
|
|
20866
|
+
jsTokenOptions(knownInputNames)
|
|
20867
|
+
) : JSON.stringify(outputKeyOrValue);
|
|
20816
20868
|
return `${JSON.stringify(envKey)}: ${valueExpr}`;
|
|
20817
20869
|
});
|
|
20818
20870
|
return `setenv_({ ${objEntries.join(", ")} });`;
|
|
@@ -20894,7 +20946,7 @@ var flowStepsToJsfunc = async (flow, root, useExternalReport = !root, importTitl
|
|
|
20894
20946
|
);
|
|
20895
20947
|
break;
|
|
20896
20948
|
case "delay":
|
|
20897
|
-
stepJs = delayToJSfunc(step.delay);
|
|
20949
|
+
stepJs = delayToJSfunc(step.delay, knownInputNames);
|
|
20898
20950
|
break;
|
|
20899
20951
|
case "for":
|
|
20900
20952
|
stepJs = await forToJSfunc(
|
|
@@ -20918,19 +20970,43 @@ var flowStepsToJsfunc = async (flow, root, useExternalReport = !root, importTitl
|
|
|
20918
20970
|
}
|
|
20919
20971
|
break;
|
|
20920
20972
|
case "set":
|
|
20921
|
-
stepJs = varToJSfunc(
|
|
20973
|
+
stepJs = varToJSfunc(
|
|
20974
|
+
"",
|
|
20975
|
+
step.set,
|
|
20976
|
+
true,
|
|
20977
|
+
knownInputNames
|
|
20978
|
+
);
|
|
20922
20979
|
break;
|
|
20923
20980
|
case "var":
|
|
20924
|
-
stepJs = varToJSfunc(
|
|
20981
|
+
stepJs = varToJSfunc(
|
|
20982
|
+
"var ",
|
|
20983
|
+
step.var,
|
|
20984
|
+
false,
|
|
20985
|
+
knownInputNames
|
|
20986
|
+
);
|
|
20925
20987
|
break;
|
|
20926
20988
|
case "const":
|
|
20927
|
-
stepJs = varToJSfunc(
|
|
20989
|
+
stepJs = varToJSfunc(
|
|
20990
|
+
"const ",
|
|
20991
|
+
step.const,
|
|
20992
|
+
false,
|
|
20993
|
+
knownInputNames
|
|
20994
|
+
);
|
|
20928
20995
|
break;
|
|
20929
20996
|
case "let":
|
|
20930
|
-
stepJs = varToJSfunc(
|
|
20997
|
+
stepJs = varToJSfunc(
|
|
20998
|
+
"let ",
|
|
20999
|
+
step.let,
|
|
21000
|
+
false,
|
|
21001
|
+
knownInputNames
|
|
21002
|
+
);
|
|
20931
21003
|
break;
|
|
20932
21004
|
case "setenv":
|
|
20933
|
-
stepJs = setenvToJSfunc(
|
|
21005
|
+
stepJs = setenvToJSfunc(
|
|
21006
|
+
step.setenv,
|
|
21007
|
+
emitSetenv,
|
|
21008
|
+
knownInputNames
|
|
21009
|
+
);
|
|
20934
21010
|
break;
|
|
20935
21011
|
default:
|
|
20936
21012
|
stepJs = "";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mmt-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.49.0-pre",
|
|
4
4
|
"description": "Multimeter MCP server for Cursor, Copilot, and Claude. Scaffold, validate, format, and run YAML .mmt API tests. Do not invent .mmt syntax.",
|
|
5
5
|
"mcpName": "io.github.mshobeyri/multimeter",
|
|
6
6
|
"type": "module",
|