@arronqzy/blueprint-dsl 1.0.16 → 1.0.17

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/index.js CHANGED
@@ -1,3 +1,144 @@
1
+ // src/messages.ts
2
+ var ZH_CN = {
3
+ invalidJson: "\u4E0D\u662F\u6709\u6548 JSON\uFF1A{reason}",
4
+ invalidFormat: "\u683C\u5F0F\u65E0\u6548",
5
+ jsonInvalid: "JSON \u683C\u5F0F\u65E0\u6548",
6
+ jsonEmpty: "JSON \u4E0D\u80FD\u4E3A\u7A7A",
7
+ jsonRootMustBeContainer: "JSON \u6839\u8282\u70B9\u5FC5\u987B\u662F object \u6216 array",
8
+ contentEmpty: "\u5185\u5BB9\u4E3A\u7A7A",
9
+ contentRequired: "\u5185\u5BB9\u4E0D\u80FD\u4E3A\u7A7A",
10
+ codeRequired: "\u4EE3\u7801\u4E0D\u80FD\u4E3A\u7A7A",
11
+ javascriptSyntaxError: "JavaScript \u8BED\u6CD5\u9519\u8BEF",
12
+ logicUpdateRequired: "\u9700\u8981\u5B9A\u4E49 update(input) \u51FD\u6570",
13
+ apiItemMustBeObject: "apis[{index}] \u5FC5\u987B\u662F\u5BF9\u8C61",
14
+ apiItemFieldRequired: "apis[{index}].{field} \u5FC5\u586B\u4E14\u4E3A\u975E\u7A7A\u5B57\u7B26\u4E32",
15
+ apiItemMethodInvalid: "apis[{index}].method \u5FC5\u987B\u662F {methods} \u4E4B\u4E00",
16
+ apiItemFieldStringMap: "apis[{index}].{field} \u5FC5\u987B\u662F string \u5B57\u5178",
17
+ apiItemFieldString: "apis[{index}].{field} \u5FC5\u987B\u662F\u5B57\u7B26\u4E32",
18
+ apiRootMustBeObject: "\u6839\u8282\u70B9\u5FC5\u987B\u662F\u5BF9\u8C61",
19
+ apiVersionMismatch: "version \u5FC5\u987B\u4E3A {version}",
20
+ apiNameRequired: "name \u5FC5\u586B\u4E14\u4E3A\u975E\u7A7A\u5B57\u7B26\u4E32",
21
+ apiBaseUrlString: "baseUrl \u5FC5\u987B\u662F\u5B57\u7B26\u4E32",
22
+ apiListMustBeArray: "apis \u5FC5\u987B\u662F\u6570\u7EC4",
23
+ apiListEmpty: "apis \u81F3\u5C11\u5305\u542B\u4E00\u6761\u63A5\u53E3",
24
+ apiNameDuplicated: "\u63A5\u53E3\u540D\u79F0\u91CD\u590D\uFF1A{name}",
25
+ apiTemplateName: "\u793A\u4F8B\u63A5\u53E3\u96C6\u5408",
26
+ apiTemplateListUsers: "\u83B7\u53D6\u7528\u6237\u5217\u8868",
27
+ apiTemplateListUsersDesc: "\u5206\u9875\u67E5\u8BE2\u7528\u6237\uFF1Bpage / tenant / token \u53EF\u7528 Scope \u6A21\u7248",
28
+ apiTemplateCreateUser: "\u521B\u5EFA\u7528\u6237",
29
+ apiTemplateCreateUserDesc: "\u521B\u5EFA\u7528\u6237\uFF1BURL \u4E0E body \u5747\u652F\u6301 Scope \u6A21\u7248",
30
+ apiTemplateGetUser: "\u83B7\u53D6\u7528\u6237\u8BE6\u60C5",
31
+ apiTemplateGetUserDesc: "\u6309 id \u67E5\u8BE2\uFF1B\u8DEF\u5F84\u91CC\u53EF\u76F4\u63A5\u5199 Scope \u6A21\u7248",
32
+ fetchUrlMissing: "\u8BF7\u6C42 URL \u672A\u914D\u7F6E",
33
+ fetchBodyInvalidJson: "\u8BF7\u6C42\u4F53\u4E0D\u662F\u6709\u6548 JSON\uFF1A{reason}",
34
+ fetchResponseInvalidJson: "\u54CD\u5E94\u4E0D\u662F\u6709\u6548\u7684 JSON",
35
+ fetchAborted: "\u8BF7\u6C42\u5DF2\u4E2D\u6B62",
36
+ fetchTimeout: "\u8BF7\u6C42\u8D85\u65F6\uFF08{ms}ms\uFF09",
37
+ headersTemplateNotObject: "\u8BF7\u6C42\u5934\u6A21\u677F\u89E3\u6790\u540E\u4E0D\u662F\u6709\u6548\u7684 JSON \u5BF9\u8C61",
38
+ headersNotObject: "\u8BF7\u6C42\u5934\u4E0D\u662F\u6709\u6548\u7684 JSON \u5BF9\u8C61",
39
+ swaggerInvalid: "Swagger \u6587\u6863\u683C\u5F0F\u65E0\u6548",
40
+ openApiNoOperations: "\u672A\u5728 OpenAPI \u6587\u6863\u4E2D\u627E\u5230\u63A5\u53E3",
41
+ swagger2NoOperations: "\u672A\u5728 Swagger 2.0 \u6587\u6863\u4E2D\u627E\u5230\u63A5\u53E3",
42
+ swaggerUnsupported: "\u4EC5\u652F\u6301 OpenAPI 3.x \u4E0E Swagger 2.0 \u6587\u6863",
43
+ storageUnsupported: "\u5F53\u524D\u73AF\u5883\u4E0D\u652F\u6301 {storage}",
44
+ storageKeyEmpty: "\u5B58\u50A8\u5199\u5165 key \u89E3\u6790\u4E3A\u7A7A",
45
+ clockCountPositive: "\u8F93\u51FA\u6B21\u6570\u987B\u5927\u4E8E 0",
46
+ clockIntervalPositive: "\u5F53\u524D\u914D\u7F6E\u4E0B\u65F6\u949F\u4FE1\u53F7\u95F4\u9694\u987B\u5927\u4E8E 0 \u79D2",
47
+ lifecycleSignalMissing: "\u751F\u547D\u5468\u671F\u4FE1\u53F7\u7F3A\u5931",
48
+ blueprintCycle: "\u84DD\u56FE\u5F15\u7528\u5B58\u5728\u6B7B\u5FAA\u73AF\uFF1A{path}",
49
+ debugMustStartFromLifecycle: "\u8C03\u8BD5\u4F1A\u8BDD\u53EA\u80FD\u4ECE\u751F\u547D\u5468\u671F\u8282\u70B9\u5F00\u59CB",
50
+ nodeRemoved: "\u8282\u70B9\u5DF2\u4ECE\u84DD\u56FE\u4E2D\u79FB\u9664",
51
+ clockNeedsTrue: "\u65F6\u949F\u8282\u70B9\u9700\u8981\u6536\u5230\u771F\u4FE1\u53F7\u540E\u624D\u4F1A\u542F\u52A8",
52
+ blueprintNeedsTrue: "\u84DD\u56FE\u8282\u70B9\u9700\u8981\u6536\u5230\u771F\u4FE1\u53F7\u540E\u624D\u4F1A\u6267\u884C",
53
+ blueprintNotSelected: "\u672A\u9009\u62E9\u84DD\u56FE\u5E93\u4E2D\u7684\u84DD\u56FE",
54
+ blueprintResolverMissing: "\u84DD\u56FE\u5E93\u89E3\u6790\u5668\u672A\u914D\u7F6E",
55
+ blueprintRecordMissing: "\u84DD\u56FE\u5E93\u8BB0\u5F55\u4E0D\u5B58\u5728: {id}",
56
+ fetchNoUpstream: "\u6570\u636E\u6E90\u8282\u70B9\u672A\u6536\u5230\u4E0A\u6E38\u8F93\u51FA\uFF0C\u8BF7\u786E\u8BA4\u8FDE\u7EBF\u4E0E\u4E0A\u6E38\u8282\u70B9\u5DF2\u6267\u884C",
57
+ fetchNeedsTrue: "\u6570\u636E\u6E90\u8282\u70B9\u9700\u8981\u6536\u5230\u771F\u4FE1\u53F7\u540E\u624D\u4F1A\u53D1\u8D77\u8BF7\u6C42",
58
+ jsonNeedsTrue: "JSON \u8282\u70B9\u9700\u8981\u6536\u5230\u771F\u4FE1\u53F7\u540E\u624D\u4F1A\u89E3\u6790",
59
+ storageNeedsTrue: "\u5B58\u50A8\u8282\u70B9\u9700\u8981\u6536\u5230\u771F\u4FE1\u53F7\u540E\u624D\u4F1A\u8BFB\u5199\u7F13\u5B58",
60
+ andNeedsBothTrue: "\u5E76\u8FD0\u7B97\uFF1A\u4E24\u4E2A\u8F93\u5165\u987B\u5747\u4E3A\u771F\u4FE1\u53F7"
61
+ };
62
+ var EN_US = {
63
+ invalidJson: "Invalid JSON: {reason}",
64
+ invalidFormat: "invalid format",
65
+ jsonInvalid: "Invalid JSON",
66
+ jsonEmpty: "JSON cannot be empty",
67
+ jsonRootMustBeContainer: "JSON root must be an object or array",
68
+ contentEmpty: "Content is empty",
69
+ contentRequired: "Content cannot be empty",
70
+ codeRequired: "Code cannot be empty",
71
+ javascriptSyntaxError: "JavaScript syntax error",
72
+ logicUpdateRequired: "An update(input) function is required",
73
+ apiItemMustBeObject: "apis[{index}] must be an object",
74
+ apiItemFieldRequired: "apis[{index}].{field} is required and must be a non-empty string",
75
+ apiItemMethodInvalid: "apis[{index}].method must be one of {methods}",
76
+ apiItemFieldStringMap: "apis[{index}].{field} must be a string map",
77
+ apiItemFieldString: "apis[{index}].{field} must be a string",
78
+ apiRootMustBeObject: "Root must be an object",
79
+ apiVersionMismatch: "version must be {version}",
80
+ apiNameRequired: "name is required and must be a non-empty string",
81
+ apiBaseUrlString: "baseUrl must be a string",
82
+ apiListMustBeArray: "apis must be an array",
83
+ apiListEmpty: "apis must contain at least one API",
84
+ apiNameDuplicated: "Duplicate API name: {name}",
85
+ apiTemplateName: "Sample API collection",
86
+ apiTemplateListUsers: "List users",
87
+ apiTemplateListUsersDesc: "Paged user query; page / tenant / token accept Scope templates",
88
+ apiTemplateCreateUser: "Create user",
89
+ apiTemplateCreateUserDesc: "Create a user; URL and body both accept Scope templates",
90
+ apiTemplateGetUser: "Get user detail",
91
+ apiTemplateGetUserDesc: "Query by id; Scope templates can be used directly in the path",
92
+ fetchUrlMissing: "Request URL is not configured",
93
+ fetchBodyInvalidJson: "Request body is not valid JSON: {reason}",
94
+ fetchResponseInvalidJson: "Response is not valid JSON",
95
+ fetchAborted: "Request aborted",
96
+ fetchTimeout: "Request timed out ({ms}ms)",
97
+ headersTemplateNotObject: "Headers template does not resolve to a JSON object",
98
+ headersNotObject: "Headers are not a valid JSON object",
99
+ swaggerInvalid: "Invalid Swagger document",
100
+ openApiNoOperations: "No operations found in the OpenAPI document",
101
+ swagger2NoOperations: "No operations found in the Swagger 2.0 document",
102
+ swaggerUnsupported: "Only OpenAPI 3.x and Swagger 2.0 documents are supported",
103
+ storageUnsupported: "{storage} is not available in this environment",
104
+ storageKeyEmpty: "Storage write key resolved to empty",
105
+ clockCountPositive: "Output count must be greater than 0",
106
+ clockIntervalPositive: "Clock interval must be greater than 0 seconds with the current config",
107
+ lifecycleSignalMissing: "Lifecycle signal is missing",
108
+ blueprintCycle: "Blueprint references form a cycle: {path}",
109
+ debugMustStartFromLifecycle: "A debug session can only start from a lifecycle node",
110
+ nodeRemoved: "Node was removed from the blueprint",
111
+ clockNeedsTrue: "Clock node starts only after receiving a true signal",
112
+ blueprintNeedsTrue: "Blueprint node runs only after receiving a true signal",
113
+ blueprintNotSelected: "No blueprint selected from the library",
114
+ blueprintResolverMissing: "Blueprint library resolver is not configured",
115
+ blueprintRecordMissing: "Blueprint library record not found: {id}",
116
+ fetchNoUpstream: "Data source node received no upstream output; check the connection and that upstream nodes ran",
117
+ fetchNeedsTrue: "Data source node sends the request only after receiving a true signal",
118
+ jsonNeedsTrue: "JSON node parses only after receiving a true signal",
119
+ storageNeedsTrue: "Storage node reads/writes only after receiving a true signal",
120
+ andNeedsBothTrue: "AND: both inputs must be true signals"
121
+ };
122
+ var CATALOGS = {
123
+ "zh-CN": ZH_CN,
124
+ "en-US": EN_US
125
+ };
126
+ var currentLocale = "zh-CN";
127
+ function setBlueprintDslLocale(locale) {
128
+ currentLocale = locale;
129
+ }
130
+ function getBlueprintDslLocale() {
131
+ return currentLocale;
132
+ }
133
+ function dslMessage(key, params) {
134
+ const template = CATALOGS[currentLocale][key];
135
+ if (!params) return template;
136
+ return template.replace(
137
+ /\{(\w+)\}/g,
138
+ (match, name) => name in params ? String(params[name]) : match
139
+ );
140
+ }
141
+
1
142
  // src/lifecycle.ts
2
143
  var PAGE_LIFECYCLE_PHASES = [
3
144
  "created",
@@ -137,7 +278,7 @@ function registerDefaultBehaviors(registry) {
137
278
  registry.registerJS("lifecycle-emit", async ({ token, io }) => {
138
279
  const lifecycle = token.scope.vars.get(LIFECYCLE_SIGNAL_KEY);
139
280
  if (!lifecycle) {
140
- io.setOutput("out", createFalseSignal("\u751F\u547D\u5468\u671F\u4FE1\u53F7\u7F3A\u5931"));
281
+ io.setOutput("out", createFalseSignal(dslMessage("lifecycleSignalMissing")));
141
282
  } else if (lifecycle.phase === "blueprintActivated") {
142
283
  io.setOutput(
143
284
  "out",
@@ -972,7 +1113,7 @@ function hasExplicitUrlScheme(url) {
972
1113
  function resolveFetchRequestUrl(config) {
973
1114
  const rawUrl = config.url?.trim() ?? "";
974
1115
  if (!rawUrl) {
975
- throw new Error("\u8BF7\u6C42 URL \u672A\u914D\u7F6E");
1116
+ throw new Error(dslMessage("fetchUrlMissing"));
976
1117
  }
977
1118
  if (hasExplicitUrlScheme(rawUrl)) {
978
1119
  return rawUrl;
@@ -1002,7 +1143,7 @@ function linkAbortSignal(controller, external) {
1002
1143
  async function executeFetch(config, options) {
1003
1144
  const rawUrl = config.url?.trim();
1004
1145
  if (!rawUrl) {
1005
- throw new Error("\u8BF7\u6C42 URL \u672A\u914D\u7F6E");
1146
+ throw new Error(dslMessage("fetchUrlMissing"));
1006
1147
  }
1007
1148
  const url = resolveFetchRequestUrl(config);
1008
1149
  const method = config.method ?? "GET";
@@ -1013,7 +1154,9 @@ async function executeFetch(config, options) {
1013
1154
  JSON.parse(body);
1014
1155
  } catch (error) {
1015
1156
  throw new Error(
1016
- `\u8BF7\u6C42\u4F53\u4E0D\u662F\u6709\u6548 JSON\uFF1A${error instanceof Error ? error.message : "\u683C\u5F0F\u65E0\u6548"}`
1157
+ dslMessage("fetchBodyInvalidJson", {
1158
+ reason: error instanceof Error ? error.message : dslMessage("invalidFormat")
1159
+ })
1017
1160
  );
1018
1161
  }
1019
1162
  }
@@ -1054,7 +1197,7 @@ async function executeFetch(config, options) {
1054
1197
  if (options?.allowHttpError) {
1055
1198
  data = text;
1056
1199
  } else {
1057
- throw new Error("\u54CD\u5E94\u4E0D\u662F\u6709\u6548\u7684 JSON");
1200
+ throw new Error(dslMessage("fetchResponseInvalidJson"));
1058
1201
  }
1059
1202
  }
1060
1203
  }
@@ -1074,9 +1217,9 @@ async function executeFetch(config, options) {
1074
1217
  } catch (error) {
1075
1218
  if (error instanceof Error && error.name === "AbortError") {
1076
1219
  if (options?.signal?.aborted) {
1077
- throw new Error("\u8BF7\u6C42\u5DF2\u4E2D\u6B62");
1220
+ throw new Error(dslMessage("fetchAborted"));
1078
1221
  }
1079
- throw new Error(`\u8BF7\u6C42\u8D85\u65F6\uFF08${timeoutMs}ms\uFF09`);
1222
+ throw new Error(dslMessage("fetchTimeout", { ms: timeoutMs }));
1080
1223
  }
1081
1224
  throw error;
1082
1225
  } finally {
@@ -1422,7 +1565,7 @@ function parseJsonText(text) {
1422
1565
  } catch (error) {
1423
1566
  return {
1424
1567
  ok: false,
1425
- error: error instanceof Error ? error.message : "JSON \u683C\u5F0F\u65E0\u6548"
1568
+ error: error instanceof Error ? error.message : dslMessage("jsonInvalid")
1426
1569
  };
1427
1570
  }
1428
1571
  }
@@ -1430,7 +1573,7 @@ function validateFetchJsonText(text, options) {
1430
1573
  const trimmed = text.trim();
1431
1574
  if (!trimmed) {
1432
1575
  if (options?.allowEmpty === false) {
1433
- return { ok: false, error: "\u5185\u5BB9\u4E0D\u80FD\u4E3A\u7A7A" };
1576
+ return { ok: false, error: dslMessage("contentRequired") };
1434
1577
  }
1435
1578
  return { ok: true };
1436
1579
  }
@@ -1475,13 +1618,13 @@ function getFetchHeadersValidationError(config, scope) {
1475
1618
  if (isWholeScopeExpression(raw) || hasScopeTemplate(raw)) {
1476
1619
  if (scope === void 0) return null;
1477
1620
  const parsed2 = parseFetchHeadersJson(raw, scope);
1478
- if (!parsed2) return "\u8BF7\u6C42\u5934\u6A21\u677F\u89E3\u6790\u540E\u4E0D\u662F\u6709\u6548\u7684 JSON \u5BF9\u8C61";
1621
+ if (!parsed2) return dslMessage("headersTemplateNotObject");
1479
1622
  return null;
1480
1623
  }
1481
1624
  const result = validateFetchJsonText(raw);
1482
1625
  if (!result.ok) return result.error;
1483
1626
  const parsed = parseFetchHeadersJson(raw, scope);
1484
- if (!parsed) return "\u8BF7\u6C42\u5934\u4E0D\u662F\u6709\u6548\u7684 JSON \u5BF9\u8C61";
1627
+ if (!parsed) return dslMessage("headersNotObject");
1485
1628
  return null;
1486
1629
  }
1487
1630
  function isWholeScopeExpression(text) {
@@ -1806,7 +1949,7 @@ function lintJsonString(jsonString) {
1806
1949
  const raw = jsonString ?? "";
1807
1950
  const trimmed = raw.trim();
1808
1951
  if (!trimmed) {
1809
- return { ok: false, error: "JSON \u4E0D\u80FD\u4E3A\u7A7A", ranges: [] };
1952
+ return { ok: false, error: dslMessage("jsonEmpty"), ranges: [] };
1810
1953
  }
1811
1954
  const suspectRanges = findSuspectCharRanges(raw);
1812
1955
  const trimStart = raw.indexOf(trimmed);
@@ -1816,13 +1959,13 @@ function lintJsonString(jsonString) {
1816
1959
  if (value === null || typeof value !== "object") {
1817
1960
  return {
1818
1961
  ok: false,
1819
- error: "JSON \u6839\u8282\u70B9\u5FC5\u987B\u662F object \u6216 array",
1962
+ error: dslMessage("jsonRootMustBeContainer"),
1820
1963
  ranges: mergeRanges(suspectRanges)
1821
1964
  };
1822
1965
  }
1823
1966
  return { ok: true, value };
1824
1967
  } catch (error) {
1825
- const message = error instanceof Error ? error.message : "JSON \u683C\u5F0F\u65E0\u6548";
1968
+ const message = error instanceof Error ? error.message : dslMessage("jsonInvalid");
1826
1969
  const ranges = [...suspectRanges];
1827
1970
  const fromEngine = extractJsonErrorPosition(message, trimmed);
1828
1971
  const fromScan = findJsonSyntaxErrorOffset(trimmed);
@@ -2023,7 +2166,7 @@ function requireStorage(accessors, kind) {
2023
2166
  const target = kind === "session" ? accessors?.session : accessors?.local;
2024
2167
  if (!target) {
2025
2168
  throw new Error(
2026
- kind === "session" ? "\u5F53\u524D\u73AF\u5883\u4E0D\u652F\u6301 sessionStorage" : "\u5F53\u524D\u73AF\u5883\u4E0D\u652F\u6301 localStorage"
2169
+ kind === "session" ? dslMessage("storageUnsupported", { storage: "sessionStorage" }) : dslMessage("storageUnsupported", { storage: "localStorage" })
2027
2170
  );
2028
2171
  }
2029
2172
  return target;
@@ -2036,7 +2179,7 @@ function executeStorageConfig(config, incomingScope, accessors) {
2036
2179
  const serialized = serializeStorageValue(value);
2037
2180
  const key = resolveStorageKey(normalized.set.key, incomingScope);
2038
2181
  if (!key) {
2039
- throw new Error("\u5B58\u50A8\u5199\u5165 key \u89E3\u6790\u4E3A\u7A7A");
2182
+ throw new Error(dslMessage("storageKeyEmpty"));
2040
2183
  }
2041
2184
  for (const kind of normalized.set.storages) {
2042
2185
  requireStorage(store, kind).setItem(key, serialized);
@@ -2076,7 +2219,7 @@ function compileLogicRunner(sourceCode) {
2076
2219
  `"use strict";
2077
2220
  ${sourceCode}
2078
2221
  if (typeof update !== "function") {
2079
- throw new TypeError("\u9700\u8981\u5B9A\u4E49 update(input) \u51FD\u6570");
2222
+ throw new TypeError(dslMessage("logicUpdateRequired"));
2080
2223
  }
2081
2224
  return update(input);`
2082
2225
  );
@@ -2084,7 +2227,7 @@ return update(input);`
2084
2227
  function validateLogicSourceCode(sourceCode) {
2085
2228
  const raw = sourceCode?.trim();
2086
2229
  if (!raw) {
2087
- return { ok: false, error: "\u4EE3\u7801\u4E0D\u80FD\u4E3A\u7A7A" };
2230
+ return { ok: false, error: dslMessage("codeRequired") };
2088
2231
  }
2089
2232
  try {
2090
2233
  compileLogicRunner(raw);
@@ -2092,7 +2235,7 @@ function validateLogicSourceCode(sourceCode) {
2092
2235
  } catch (error) {
2093
2236
  return {
2094
2237
  ok: false,
2095
- error: error instanceof Error ? error.message : "JavaScript \u8BED\u6CD5\u9519\u8BEF"
2238
+ error: error instanceof Error ? error.message : dslMessage("javascriptSyntaxError")
2096
2239
  };
2097
2240
  }
2098
2241
  }
@@ -2128,11 +2271,11 @@ function normalizeClockConfig(config) {
2128
2271
  function validateClockScheduleConfig(config) {
2129
2272
  const normalized = normalizeClockConfig(config);
2130
2273
  if (normalized.outputCount <= 0) {
2131
- return { ok: false, error: "\u8F93\u51FA\u6B21\u6570\u987B\u5927\u4E8E 0" };
2274
+ return { ok: false, error: dslMessage("clockCountPositive") };
2132
2275
  }
2133
2276
  const needsInterval = normalized.outputCount > 1 || normalized.outputCount === 1 && !normalized.emitImmediately;
2134
2277
  if (needsInterval && normalized.intervalSeconds <= 0) {
2135
- return { ok: false, error: "\u5F53\u524D\u914D\u7F6E\u4E0B\u65F6\u949F\u4FE1\u53F7\u95F4\u9694\u987B\u5927\u4E8E 0 \u79D2" };
2278
+ return { ok: false, error: dslMessage("clockIntervalPositive") };
2136
2279
  }
2137
2280
  return { ok: true };
2138
2281
  }
@@ -2421,24 +2564,24 @@ function parseSwaggerV2(spec, docsUrl) {
2421
2564
  }
2422
2565
  function parseSwaggerDocument(spec, docsUrl) {
2423
2566
  if (!spec || typeof spec !== "object") {
2424
- throw new Error("Swagger \u6587\u6863\u683C\u5F0F\u65E0\u6548");
2567
+ throw new Error(dslMessage("swaggerInvalid"));
2425
2568
  }
2426
2569
  const document2 = spec;
2427
2570
  if (typeof document2.openapi === "string") {
2428
2571
  const parsed = parseOpenApiV3(document2, docsUrl);
2429
2572
  if (parsed.endpoints.length === 0) {
2430
- throw new Error("\u672A\u5728 OpenAPI \u6587\u6863\u4E2D\u627E\u5230\u63A5\u53E3");
2573
+ throw new Error(dslMessage("openApiNoOperations"));
2431
2574
  }
2432
2575
  return parsed;
2433
2576
  }
2434
2577
  if (document2.swagger === "2.0" || document2.swagger === 2) {
2435
2578
  const parsed = parseSwaggerV2(document2, docsUrl);
2436
2579
  if (parsed.endpoints.length === 0) {
2437
- throw new Error("\u672A\u5728 Swagger 2.0 \u6587\u6863\u4E2D\u627E\u5230\u63A5\u53E3");
2580
+ throw new Error(dslMessage("swagger2NoOperations"));
2438
2581
  }
2439
2582
  return parsed;
2440
2583
  }
2441
- throw new Error("\u4EC5\u652F\u6301 OpenAPI 3.x \u4E0E Swagger 2.0 \u6587\u6863");
2584
+ throw new Error(dslMessage("swaggerUnsupported"));
2442
2585
  }
2443
2586
  function buildEndpointFullUrl(apiBaseUrl, pathOrEndpoint) {
2444
2587
  const path = typeof pathOrEndpoint === "string" ? pathOrEndpoint : pathOrEndpoint.path;
@@ -2478,28 +2621,28 @@ function isPlainStringRecord(value) {
2478
2621
  }
2479
2622
  function normalizeEndpoint(raw, index) {
2480
2623
  if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
2481
- return `apis[${index}] \u5FC5\u987B\u662F\u5BF9\u8C61`;
2624
+ return dslMessage("apiItemMustBeObject", { index });
2482
2625
  }
2483
2626
  const item = raw;
2484
2627
  const name = typeof item.name === "string" ? item.name.trim() : "";
2485
- if (!name) return `apis[${index}].name \u5FC5\u586B\u4E14\u4E3A\u975E\u7A7A\u5B57\u7B26\u4E32`;
2628
+ if (!name) return dslMessage("apiItemFieldRequired", { index, field: "name" });
2486
2629
  const url = typeof item.url === "string" ? item.url.trim() : "";
2487
- if (!url) return `apis[${index}].url \u5FC5\u586B\u4E14\u4E3A\u975E\u7A7A\u5B57\u7B26\u4E32`;
2630
+ if (!url) return dslMessage("apiItemFieldRequired", { index, field: "url" });
2488
2631
  const methodRaw = typeof item.method === "string" ? item.method.trim().toUpperCase() : "";
2489
2632
  if (!HTTP_METHOD_SET.has(methodRaw)) {
2490
- return `apis[${index}].method \u5FC5\u987B\u662F ${FETCH_HTTP_METHODS.join(" / ")} \u4E4B\u4E00`;
2633
+ return dslMessage("apiItemMethodInvalid", { index, methods: FETCH_HTTP_METHODS.join(" / ") });
2491
2634
  }
2492
2635
  if (item.params !== void 0 && !isPlainStringRecord(item.params)) {
2493
- return `apis[${index}].params \u5FC5\u987B\u662F string \u5B57\u5178`;
2636
+ return dslMessage("apiItemFieldStringMap", { index, field: "params" });
2494
2637
  }
2495
2638
  if (item.headers !== void 0 && !isPlainStringRecord(item.headers)) {
2496
- return `apis[${index}].headers \u5FC5\u987B\u662F string \u5B57\u5178`;
2639
+ return dslMessage("apiItemFieldStringMap", { index, field: "headers" });
2497
2640
  }
2498
2641
  if (item.body !== void 0 && typeof item.body !== "string") {
2499
- return `apis[${index}].body \u5FC5\u987B\u662F\u5B57\u7B26\u4E32`;
2642
+ return dslMessage("apiItemFieldString", { index, field: "body" });
2500
2643
  }
2501
2644
  if (item.description !== void 0 && typeof item.description !== "string") {
2502
- return `apis[${index}].description \u5FC5\u987B\u662F\u5B57\u7B26\u4E32`;
2645
+ return dslMessage("apiItemFieldString", { index, field: "description" });
2503
2646
  }
2504
2647
  return {
2505
2648
  name,
@@ -2513,26 +2656,26 @@ function normalizeEndpoint(raw, index) {
2513
2656
  }
2514
2657
  function validateApiCollectionDocument(input) {
2515
2658
  if (!input || typeof input !== "object" || Array.isArray(input)) {
2516
- return { ok: false, error: "\u6839\u8282\u70B9\u5FC5\u987B\u662F\u5BF9\u8C61" };
2659
+ return { ok: false, error: dslMessage("apiRootMustBeObject") };
2517
2660
  }
2518
2661
  const root = input;
2519
2662
  const version = root.version;
2520
2663
  if (version !== API_COLLECTION_DOCUMENT_VERSION && version !== "1") {
2521
2664
  return {
2522
2665
  ok: false,
2523
- error: `version \u5FC5\u987B\u4E3A ${API_COLLECTION_DOCUMENT_VERSION}`
2666
+ error: dslMessage("apiVersionMismatch", { version: API_COLLECTION_DOCUMENT_VERSION })
2524
2667
  };
2525
2668
  }
2526
2669
  const name = typeof root.name === "string" ? root.name.trim() : "";
2527
- if (!name) return { ok: false, error: "name \u5FC5\u586B\u4E14\u4E3A\u975E\u7A7A\u5B57\u7B26\u4E32" };
2670
+ if (!name) return { ok: false, error: dslMessage("apiNameRequired") };
2528
2671
  if (root.baseUrl !== void 0 && typeof root.baseUrl !== "string") {
2529
- return { ok: false, error: "baseUrl \u5FC5\u987B\u662F\u5B57\u7B26\u4E32" };
2672
+ return { ok: false, error: dslMessage("apiBaseUrlString") };
2530
2673
  }
2531
2674
  if (!Array.isArray(root.apis)) {
2532
- return { ok: false, error: "apis \u5FC5\u987B\u662F\u6570\u7EC4" };
2675
+ return { ok: false, error: dslMessage("apiListMustBeArray") };
2533
2676
  }
2534
2677
  if (root.apis.length === 0) {
2535
- return { ok: false, error: "apis \u81F3\u5C11\u5305\u542B\u4E00\u6761\u63A5\u53E3" };
2678
+ return { ok: false, error: dslMessage("apiListEmpty") };
2536
2679
  }
2537
2680
  const apis = [];
2538
2681
  const nameSet = /* @__PURE__ */ new Set();
@@ -2542,7 +2685,7 @@ function validateApiCollectionDocument(input) {
2542
2685
  return { ok: false, error: normalized };
2543
2686
  }
2544
2687
  if (nameSet.has(normalized.name)) {
2545
- return { ok: false, error: `\u63A5\u53E3\u540D\u79F0\u91CD\u590D\uFF1A${normalized.name}` };
2688
+ return { ok: false, error: dslMessage("apiNameDuplicated", { name: normalized.name }) };
2546
2689
  }
2547
2690
  nameSet.add(normalized.name);
2548
2691
  apis.push(normalized);
@@ -2559,14 +2702,16 @@ function validateApiCollectionDocument(input) {
2559
2702
  }
2560
2703
  function parseApiCollectionJson(text) {
2561
2704
  const trimmed = text.trim();
2562
- if (!trimmed) return { ok: false, error: "\u5185\u5BB9\u4E3A\u7A7A" };
2705
+ if (!trimmed) return { ok: false, error: dslMessage("contentEmpty") };
2563
2706
  let parsed;
2564
2707
  try {
2565
2708
  parsed = JSON.parse(trimmed);
2566
2709
  } catch (error) {
2567
2710
  return {
2568
2711
  ok: false,
2569
- error: `\u4E0D\u662F\u6709\u6548 JSON\uFF1A${error instanceof Error ? error.message : "\u683C\u5F0F\u65E0\u6548"}`
2712
+ error: dslMessage("invalidJson", {
2713
+ reason: error instanceof Error ? error.message : dslMessage("invalidFormat")
2714
+ })
2570
2715
  };
2571
2716
  }
2572
2717
  const validated = validateApiCollectionDocument(parsed);
@@ -2592,11 +2737,11 @@ function apiCollectionToListItem(record) {
2592
2737
  function getApiCollectionTemplateDocument() {
2593
2738
  return {
2594
2739
  version: API_COLLECTION_DOCUMENT_VERSION,
2595
- name: "\u793A\u4F8B\u63A5\u53E3\u96C6\u5408",
2740
+ name: dslMessage("apiTemplateName"),
2596
2741
  baseUrl: "https://api.example.com",
2597
2742
  apis: [
2598
2743
  {
2599
- name: "\u83B7\u53D6\u7528\u6237\u5217\u8868",
2744
+ name: dslMessage("apiTemplateListUsers"),
2600
2745
  method: "GET",
2601
2746
  url: "/users",
2602
2747
  params: {
@@ -2608,22 +2753,22 @@ function getApiCollectionTemplateDocument() {
2608
2753
  Accept: "application/json",
2609
2754
  Authorization: "Bearer {scope?.value?.token}"
2610
2755
  },
2611
- description: "\u5206\u9875\u67E5\u8BE2\u7528\u6237\uFF1Bpage / tenant / token \u53EF\u7528 Scope \u6A21\u7248"
2756
+ description: dslMessage("apiTemplateListUsersDesc")
2612
2757
  },
2613
2758
  {
2614
- name: "\u521B\u5EFA\u7528\u6237",
2759
+ name: dslMessage("apiTemplateCreateUser"),
2615
2760
  method: "POST",
2616
2761
  url: "/tenants/{scope?.value?.tenant}/users",
2617
2762
  headers: { "Content-Type": "application/json" },
2618
2763
  body: '{\n "name": "{scope?.value?.name}",\n "role": "member"\n}',
2619
- description: "\u521B\u5EFA\u7528\u6237\uFF1BURL \u4E0E body \u5747\u652F\u6301 Scope \u6A21\u7248"
2764
+ description: dslMessage("apiTemplateCreateUserDesc")
2620
2765
  },
2621
2766
  {
2622
- name: "\u83B7\u53D6\u7528\u6237\u8BE6\u60C5",
2767
+ name: dslMessage("apiTemplateGetUser"),
2623
2768
  method: "GET",
2624
2769
  url: "/users/{scope?.value?.id}",
2625
2770
  headers: { Accept: "application/json" },
2626
- description: "\u6309 id \u67E5\u8BE2\uFF1B\u8DEF\u5F84\u91CC\u53EF\u76F4\u63A5\u5199 Scope \u6A21\u7248"
2771
+ description: dslMessage("apiTemplateGetUserDesc")
2627
2772
  }
2628
2773
  ]
2629
2774
  };
@@ -2928,7 +3073,7 @@ function collectBlueprintLibraryRefs(graph) {
2928
3073
  }
2929
3074
  function formatBlueprintCycleMessage(cycleIds, resolveName) {
2930
3075
  const labels = cycleIds.map((id) => resolveName?.(id) ?? id);
2931
- return `\u84DD\u56FE\u5F15\u7528\u5B58\u5728\u6B7B\u5FAA\u73AF\uFF1A${labels.join(" \u2192 ")}`;
3076
+ return dslMessage("blueprintCycle", { path: labels.join(" \u2192 ") });
2932
3077
  }
2933
3078
  async function detectBlueprintReferenceCycle(options) {
2934
3079
  const {
@@ -3388,7 +3533,7 @@ var BlueprintGraphRunner = class _BlueprintGraphRunner {
3388
3533
  stopAllClockSchedules();
3389
3534
  const node = this.requireNode(lifecycleNodeId);
3390
3535
  if (node.nodeType !== LIFECYCLE_NODE_TYPE) {
3391
- throw new Error("\u8C03\u8BD5\u4F1A\u8BDD\u53EA\u80FD\u4ECE\u751F\u547D\u5468\u671F\u8282\u70B9\u5F00\u59CB");
3536
+ throw new Error(dslMessage("debugMustStartFromLifecycle"));
3392
3537
  }
3393
3538
  this.outputs.clear();
3394
3539
  this.traceEntries = [];
@@ -3589,7 +3734,7 @@ var BlueprintGraphRunner = class _BlueprintGraphRunner {
3589
3734
  const runExecutor = executor ?? this.debugExecutor ?? this.createExecutor(this.debugQueue ?? []);
3590
3735
  if (!this.syncTokenFromGraph(token)) {
3591
3736
  return this.appendDebugTraceEntry(token, nodeLabelById, startedAt, {
3592
- error: "\u8282\u70B9\u5DF2\u4ECE\u84DD\u56FE\u4E2D\u79FB\u9664"
3737
+ error: dslMessage("nodeRemoved")
3593
3738
  });
3594
3739
  }
3595
3740
  try {
@@ -3650,7 +3795,7 @@ var BlueprintGraphRunner = class _BlueprintGraphRunner {
3650
3795
  }
3651
3796
  if (!isTrueSignal(input)) {
3652
3797
  return finishWithOutput(
3653
- createFalseSignal("\u65F6\u949F\u8282\u70B9\u9700\u8981\u6536\u5230\u771F\u4FE1\u53F7\u540E\u624D\u4F1A\u542F\u52A8")
3798
+ createFalseSignal(dslMessage("clockNeedsTrue"))
3654
3799
  );
3655
3800
  }
3656
3801
  const validation = validateClockScheduleConfig(normalized);
@@ -3725,19 +3870,19 @@ var BlueprintGraphRunner = class _BlueprintGraphRunner {
3725
3870
  if (!isTrueSignal(input)) {
3726
3871
  io.setOutput(
3727
3872
  "out",
3728
- createFalseSignal("\u84DD\u56FE\u8282\u70B9\u9700\u8981\u6536\u5230\u771F\u4FE1\u53F7\u540E\u624D\u4F1A\u6267\u884C")
3873
+ createFalseSignal(dslMessage("blueprintNeedsTrue"))
3729
3874
  );
3730
3875
  io.emitFlow("out");
3731
3876
  return;
3732
3877
  }
3733
3878
  const libraryId = node.libraryBlueprintId;
3734
3879
  if (!libraryId) {
3735
- io.setOutput("out", createFalseSignal("\u672A\u9009\u62E9\u84DD\u56FE\u5E93\u4E2D\u7684\u84DD\u56FE"));
3880
+ io.setOutput("out", createFalseSignal(dslMessage("blueprintNotSelected")));
3736
3881
  io.emitFlow("out");
3737
3882
  return;
3738
3883
  }
3739
3884
  if (!runner.resolveLibraryBlueprint) {
3740
- io.setOutput("out", createFalseSignal("\u84DD\u56FE\u5E93\u89E3\u6790\u5668\u672A\u914D\u7F6E"));
3885
+ io.setOutput("out", createFalseSignal(dslMessage("blueprintResolverMissing")));
3741
3886
  io.emitFlow("out");
3742
3887
  return;
3743
3888
  }
@@ -3760,7 +3905,7 @@ var BlueprintGraphRunner = class _BlueprintGraphRunner {
3760
3905
  if (!nestedGraph) {
3761
3906
  io.setOutput(
3762
3907
  "out",
3763
- createFalseSignal(`\u84DD\u56FE\u5E93\u8BB0\u5F55\u4E0D\u5B58\u5728: ${libraryId}`)
3908
+ createFalseSignal(dslMessage("blueprintRecordMissing", { id: libraryId }))
3764
3909
  );
3765
3910
  io.emitFlow("out");
3766
3911
  return;
@@ -3812,7 +3957,7 @@ var BlueprintGraphRunner = class _BlueprintGraphRunner {
3812
3957
  io.setOutput(
3813
3958
  "out",
3814
3959
  createFalseSignal(
3815
- input === void 0 ? "\u6570\u636E\u6E90\u8282\u70B9\u672A\u6536\u5230\u4E0A\u6E38\u8F93\u51FA\uFF0C\u8BF7\u786E\u8BA4\u8FDE\u7EBF\u4E0E\u4E0A\u6E38\u8282\u70B9\u5DF2\u6267\u884C" : "\u6570\u636E\u6E90\u8282\u70B9\u9700\u8981\u6536\u5230\u771F\u4FE1\u53F7\u540E\u624D\u4F1A\u53D1\u8D77\u8BF7\u6C42"
3960
+ input === void 0 ? dslMessage("fetchNoUpstream") : dslMessage("fetchNeedsTrue")
3816
3961
  )
3817
3962
  );
3818
3963
  io.emitFlow("out");
@@ -3833,7 +3978,7 @@ var BlueprintGraphRunner = class _BlueprintGraphRunner {
3833
3978
  }
3834
3979
  const bodyError = getFetchBodyValidationError(config.body, config.body);
3835
3980
  if (bodyError) {
3836
- throw new Error(`\u8BF7\u6C42\u4F53\u4E0D\u662F\u6709\u6548 JSON\uFF1A${bodyError}`);
3981
+ throw new Error(dslMessage("fetchBodyInvalidJson", { reason: bodyError }));
3837
3982
  }
3838
3983
  resolveFetchRequestUrl(config);
3839
3984
  const result = await executeFetch(config, {
@@ -3889,7 +4034,7 @@ var BlueprintGraphRunner = class _BlueprintGraphRunner {
3889
4034
  if (!isTrueSignal(input)) {
3890
4035
  io.setOutput(
3891
4036
  "out",
3892
- createFalseSignal("JSON \u8282\u70B9\u9700\u8981\u6536\u5230\u771F\u4FE1\u53F7\u540E\u624D\u4F1A\u89E3\u6790")
4037
+ createFalseSignal(dslMessage("jsonNeedsTrue"))
3893
4038
  );
3894
4039
  io.emitFlow("out");
3895
4040
  return;
@@ -3931,7 +4076,7 @@ var BlueprintGraphRunner = class _BlueprintGraphRunner {
3931
4076
  if (!isTrueSignal(input)) {
3932
4077
  io.setOutput(
3933
4078
  "out",
3934
- createFalseSignal("\u5B58\u50A8\u8282\u70B9\u9700\u8981\u6536\u5230\u771F\u4FE1\u53F7\u540E\u624D\u4F1A\u8BFB\u5199\u7F13\u5B58")
4079
+ createFalseSignal(dslMessage("storageNeedsTrue"))
3935
4080
  );
3936
4081
  io.emitFlow("out");
3937
4082
  return;
@@ -3976,7 +4121,7 @@ var BlueprintGraphRunner = class _BlueprintGraphRunner {
3976
4121
  if (!isTrueSignal(input)) {
3977
4122
  io.setOutput(
3978
4123
  "out",
3979
- createFalseSignal("\u65F6\u949F\u8282\u70B9\u9700\u8981\u6536\u5230\u771F\u4FE1\u53F7\u540E\u624D\u4F1A\u542F\u52A8")
4124
+ createFalseSignal(dslMessage("clockNeedsTrue"))
3980
4125
  );
3981
4126
  io.emitFlow("out");
3982
4127
  return;
@@ -4014,7 +4159,7 @@ var BlueprintGraphRunner = class _BlueprintGraphRunner {
4014
4159
  } else {
4015
4160
  io.setOutput(
4016
4161
  "out",
4017
- createFalseSignal("\u5E76\u8FD0\u7B97\uFF1A\u4E24\u4E2A\u8F93\u5165\u987B\u5747\u4E3A\u771F\u4FE1\u53F7")
4162
+ createFalseSignal(dslMessage("andNeedsBothTrue"))
4018
4163
  );
4019
4164
  }
4020
4165
  io.emitFlow("out");
@@ -4213,6 +4358,6 @@ var BlueprintGraphRunner = class _BlueprintGraphRunner {
4213
4358
  }
4214
4359
  };
4215
4360
 
4216
- export { AND_NODE_TYPE, API_COLLECTION_DOCUMENT_VERSION, BLUEPRINT_ACTIVATION_INPUT_KEY, BLUEPRINT_CALL_STACK_KEY, BLUEPRINT_NODE_TYPE, BehaviorRegistry, BlueprintCycleError, BlueprintGraphRunner, CLOCK_NODE_TYPE, DEFAULT_CLOCK_NODE_CONFIG, DEFAULT_FETCH_REQUEST_CONFIG, DEFAULT_JSON_NODE_CONFIG, DEFAULT_LOGIC_NODE_CONFIG, DEFAULT_LOGIC_NODE_TYPE, DEFAULT_STORAGE_NODE_CONFIG, DEFAULT_VIEW_EVENT_NODE_CONFIG, EVENT_NODE_TYPE, Executor, FETCH_CACHES, FETCH_CREDENTIALS, FETCH_HTTP_METHODS, FETCH_MODES, FETCH_NODE_TYPE, FETCH_REDIRECTS, FETCH_RESPONSE_TYPES, FETCH_SCOPE_AUTOCOMPLETE_FALLBACK, JSON_NODE_TYPE, LIFECYCLE_NODE_TYPE, LIFECYCLE_SIGNAL_KEY, PAGE_LIFECYCLE_LABELS, PAGE_LIFECYCLE_PHASES, STORAGE_KINDS, STORAGE_NODE_TYPE, SYSTEM_LOCATION_KEYS, SYSTEM_MATH_KEYS, SYSTEM_TIME_METHOD_NAMES, TEMPLATE_ROOT_NAMES, UI_EVENT_PAYLOAD_KEY, VIEW_EVENT_SIGNAL_KEY, VIEW_EVENT_TYPES, VIEW_NODE_TYPE, abortClockNode, abortClockSession, andLogicNodeDefinition, apiCollectionToListItem, appStorageKey, applyApiCollectionEndpointToFetchConfig, applyFetchConfigScope, applyScopeAutocompleteSelection, assertNoBlueprintReferenceCycle, blueprintNodeDefinition, buildApiCollectionEndpointUrl, buildApiCollectionSyncPatches, buildClockSessionKey, buildClockSignalValue, buildEndpointFullUrl, buildEndpointSuggestions, buildIncomingNodeScope, buildScopeExpression, clearClockSessionAbort, clockNodeDefinition, collectArmedViewEventBindings, collectArmedViewEventNodeIds, collectBlueprintLibraryRefs, collectIncomingNodeScopeEntries, collectViewEventBindings, combinePortSignalsOr, createApiCollectionId, createClockOutputValue, createFalseSignal, createIncomingNodeScopeEntry, createLifecycleSignal, createSystemRoot, createTraceEntryId, createTrueSignal, createViewEventSignal, defaultLogicNodeDefinition, deserializeStorageValue, detectBlueprintReferenceCycle, detectRuntimeBlueprintCycle, downloadApiCollectionTemplate, draftFetchHeadersText, evaluateScopeExpression, evaluateScopeTemplate, evaluateScopeTemplateInJson, executeFetch, executeLogicConfig, executeStorageConfig, extractJsonErrorPosition, fetchConfigHasScopeTemplate, fetchNodeDefinition, filterEndpointSuggestions, filterStorageKeySuggestions, findJsonSyntaxErrorOffset, findSuspectCharRanges, formatBlueprintCycleMessage, formatClockTime, getActiveClockNodeIds, getApiCollectionTemplateDocument, getApiCollectionTemplateJson, getClockTickDelayOffsetMs, getClockTickWaitMs, getFetchBodyValidationError, getFetchHeadersValidationError, getNodeDefinition, getScopeAutocompleteSuggestions, getSystemAutocompleteTree, hasScopeTemplate, hasTemplateExpression, isClockNodeActive, isClockScheduleActive, isClockSessionAborted, isDayjsValue, isFalseSignal, isStorageReadConfigured, isStorageSetConfigured, isTrueSignal, isViewEventType, isWholeScopeExpression, jsonNodeDefinition, latestTraceOutputsByNode, lifecycleNodeDefinition, lintJsonString, listBrowserStorageKeys, looksLikeJsonText, nodeDefinitionRegistry, normalizeApiCollectionUrlKey, normalizeAppNameSpace, normalizeClockConfig, normalizeFetchRequestConfig, normalizeStorageConfig, normalizeViewEventConfig, parseApiCollectionJson, parseFetchHeadersJson, parseJsonConfig, parseJsonText, parseScopeAutocomplete, parseSwaggerDocument, preserveTemplateTokensInEncode, registerDefaultBehaviors, renderJsonWithErrorHighlights, resolveBlueprintCallStack, resolveFetchBody, resolveFetchHeaders, resolveFetchIncomingScope, resolveFetchRequestUrl, resolveFetchScopeAutocompleteRoot, resolveStorageKey, resolveStorageWriteValue, scheduleClockOutputs, serializeStorageValue, serializeTraceValue, snapshotDomEvent, snapshotViewEventNode, startClockSchedule, stopAllClockSchedules, stopClockSchedule, storageNodeDefinition, stringifyScopeValue, subscribeActiveClockNodes, toApiCollectionSyncResult, uniqueStorageKinds, validateApiCollectionDocument, validateClockScheduleConfig, validateFetchJsonText, validateJsonString, validateJsonStringAllowingScope, validateLogicSourceCode, viewBindNodeDefinition, viewEventNodeDefinition };
4361
+ export { AND_NODE_TYPE, API_COLLECTION_DOCUMENT_VERSION, BLUEPRINT_ACTIVATION_INPUT_KEY, BLUEPRINT_CALL_STACK_KEY, BLUEPRINT_NODE_TYPE, BehaviorRegistry, BlueprintCycleError, BlueprintGraphRunner, CLOCK_NODE_TYPE, DEFAULT_CLOCK_NODE_CONFIG, DEFAULT_FETCH_REQUEST_CONFIG, DEFAULT_JSON_NODE_CONFIG, DEFAULT_LOGIC_NODE_CONFIG, DEFAULT_LOGIC_NODE_TYPE, DEFAULT_STORAGE_NODE_CONFIG, DEFAULT_VIEW_EVENT_NODE_CONFIG, EVENT_NODE_TYPE, Executor, FETCH_CACHES, FETCH_CREDENTIALS, FETCH_HTTP_METHODS, FETCH_MODES, FETCH_NODE_TYPE, FETCH_REDIRECTS, FETCH_RESPONSE_TYPES, FETCH_SCOPE_AUTOCOMPLETE_FALLBACK, JSON_NODE_TYPE, LIFECYCLE_NODE_TYPE, LIFECYCLE_SIGNAL_KEY, PAGE_LIFECYCLE_LABELS, PAGE_LIFECYCLE_PHASES, STORAGE_KINDS, STORAGE_NODE_TYPE, SYSTEM_LOCATION_KEYS, SYSTEM_MATH_KEYS, SYSTEM_TIME_METHOD_NAMES, TEMPLATE_ROOT_NAMES, UI_EVENT_PAYLOAD_KEY, VIEW_EVENT_SIGNAL_KEY, VIEW_EVENT_TYPES, VIEW_NODE_TYPE, abortClockNode, abortClockSession, andLogicNodeDefinition, apiCollectionToListItem, appStorageKey, applyApiCollectionEndpointToFetchConfig, applyFetchConfigScope, applyScopeAutocompleteSelection, assertNoBlueprintReferenceCycle, blueprintNodeDefinition, buildApiCollectionEndpointUrl, buildApiCollectionSyncPatches, buildClockSessionKey, buildClockSignalValue, buildEndpointFullUrl, buildEndpointSuggestions, buildIncomingNodeScope, buildScopeExpression, clearClockSessionAbort, clockNodeDefinition, collectArmedViewEventBindings, collectArmedViewEventNodeIds, collectBlueprintLibraryRefs, collectIncomingNodeScopeEntries, collectViewEventBindings, combinePortSignalsOr, createApiCollectionId, createClockOutputValue, createFalseSignal, createIncomingNodeScopeEntry, createLifecycleSignal, createSystemRoot, createTraceEntryId, createTrueSignal, createViewEventSignal, defaultLogicNodeDefinition, deserializeStorageValue, detectBlueprintReferenceCycle, detectRuntimeBlueprintCycle, downloadApiCollectionTemplate, draftFetchHeadersText, dslMessage, evaluateScopeExpression, evaluateScopeTemplate, evaluateScopeTemplateInJson, executeFetch, executeLogicConfig, executeStorageConfig, extractJsonErrorPosition, fetchConfigHasScopeTemplate, fetchNodeDefinition, filterEndpointSuggestions, filterStorageKeySuggestions, findJsonSyntaxErrorOffset, findSuspectCharRanges, formatBlueprintCycleMessage, formatClockTime, getActiveClockNodeIds, getApiCollectionTemplateDocument, getApiCollectionTemplateJson, getBlueprintDslLocale, getClockTickDelayOffsetMs, getClockTickWaitMs, getFetchBodyValidationError, getFetchHeadersValidationError, getNodeDefinition, getScopeAutocompleteSuggestions, getSystemAutocompleteTree, hasScopeTemplate, hasTemplateExpression, isClockNodeActive, isClockScheduleActive, isClockSessionAborted, isDayjsValue, isFalseSignal, isStorageReadConfigured, isStorageSetConfigured, isTrueSignal, isViewEventType, isWholeScopeExpression, jsonNodeDefinition, latestTraceOutputsByNode, lifecycleNodeDefinition, lintJsonString, listBrowserStorageKeys, looksLikeJsonText, nodeDefinitionRegistry, normalizeApiCollectionUrlKey, normalizeAppNameSpace, normalizeClockConfig, normalizeFetchRequestConfig, normalizeStorageConfig, normalizeViewEventConfig, parseApiCollectionJson, parseFetchHeadersJson, parseJsonConfig, parseJsonText, parseScopeAutocomplete, parseSwaggerDocument, preserveTemplateTokensInEncode, registerDefaultBehaviors, renderJsonWithErrorHighlights, resolveBlueprintCallStack, resolveFetchBody, resolveFetchHeaders, resolveFetchIncomingScope, resolveFetchRequestUrl, resolveFetchScopeAutocompleteRoot, resolveStorageKey, resolveStorageWriteValue, scheduleClockOutputs, serializeStorageValue, serializeTraceValue, setBlueprintDslLocale, snapshotDomEvent, snapshotViewEventNode, startClockSchedule, stopAllClockSchedules, stopClockSchedule, storageNodeDefinition, stringifyScopeValue, subscribeActiveClockNodes, toApiCollectionSyncResult, uniqueStorageKinds, validateApiCollectionDocument, validateClockScheduleConfig, validateFetchJsonText, validateJsonString, validateJsonStringAllowingScope, validateLogicSourceCode, viewBindNodeDefinition, viewEventNodeDefinition };
4217
4362
  //# sourceMappingURL=index.js.map
4218
4363
  //# sourceMappingURL=index.js.map