@arronqzy/blueprint-dsl 1.0.14 → 1.0.16

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.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ /// <reference path="../vendor/dayjs/esm/locale/index.d.ts" />
1
2
  type Value = any;
2
3
  type PortSpec = {
3
4
  name: string;
@@ -163,7 +164,15 @@ declare const FETCH_CREDENTIALS: readonly ["omit", "same-origin", "include"];
163
164
  declare const FETCH_MODES: readonly ["cors", "no-cors", "same-origin", "navigate"];
164
165
  declare const FETCH_CACHES: readonly ["default", "no-store", "reload", "no-cache", "force-cache", "only-if-cached"];
165
166
  declare const FETCH_REDIRECTS: readonly ["follow", "error", "manual"];
166
- type FetchUrlInputMode = "swagger" | "manual";
167
+ type FetchUrlInputMode = "swagger" | "manual" | "collection";
168
+ type ApiCollectionSyncNotice = {
169
+ source: "api-collection-sync";
170
+ collectionName: string;
171
+ endpointName: string;
172
+ /** 机器字段名:url / method / headers / body / apiBaseUrl */
173
+ changedFields: string[];
174
+ updatedAt: number;
175
+ };
167
176
  type FetchRequestConfig = {
168
177
  url: string;
169
178
  method?: FetchHttpMethod;
@@ -186,8 +195,17 @@ type FetchRequestConfig = {
186
195
  apiBaseUrl?: string;
187
196
  /** 从 Swagger 文档解析出的接口列表 */
188
197
  swaggerEndpoints?: SwaggerApiEndpoint[];
189
- /** 请求 URL 输入方式:接口联想或手动输入 */
198
+ /** 请求 URL 输入方式:接口联想、手动输入,或接口集合回填 */
190
199
  urlInputMode?: FetchUrlInputMode;
200
+ /** 接口集合记录 id(urlInputMode=collection) */
201
+ apiCollectionId?: string;
202
+ /** 集合内选中的接口名称 */
203
+ apiCollectionEndpointName?: string;
204
+ /**
205
+ * 接口集合同步后的配置区提示;用户可关闭。
206
+ * source 固定为 api-collection-sync,表示来源是数据集合更新。
207
+ */
208
+ apiCollectionSyncNotice?: ApiCollectionSyncNotice | null;
191
209
  };
192
210
  declare const DEFAULT_FETCH_REQUEST_CONFIG: FetchRequestConfig;
193
211
  /** 合并默认项与节点上保存的 fetch 配置,供运行时发起请求 */
@@ -207,29 +225,501 @@ type ExecuteFetchOptions = {
207
225
  };
208
226
  declare function executeFetch(config: FetchRequestConfig, options?: ExecuteFetchOptions): Promise<FetchResultValue>;
209
227
 
228
+ declare function dayjs (date?: dayjs.ConfigType): dayjs.Dayjs
229
+
230
+ declare function dayjs (date?: dayjs.ConfigType, format?: dayjs.OptionType, strict?: boolean): dayjs.Dayjs
231
+
232
+ declare function dayjs (date?: dayjs.ConfigType, format?: dayjs.OptionType, locale?: string, strict?: boolean): dayjs.Dayjs
233
+
234
+ declare namespace dayjs {
235
+ interface ConfigTypeMap {
236
+ default: string | number | Date | Dayjs | null | undefined
237
+ }
238
+
239
+ export type ConfigType = ConfigTypeMap[keyof ConfigTypeMap]
240
+
241
+ export interface FormatObject { locale?: string, format?: string, utc?: boolean }
242
+
243
+ export type OptionType = FormatObject | string | string[]
244
+
245
+ export type UnitTypeShort = 'd' | 'D' | 'M' | 'y' | 'h' | 'm' | 's' | 'ms'
246
+
247
+ export type UnitTypeLong = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year' | 'date'
248
+
249
+ export type UnitTypeLongPlural = 'milliseconds' | 'seconds' | 'minutes' | 'hours' | 'days' | 'months' | 'years' | 'dates'
250
+
251
+ export type UnitType = UnitTypeLong | UnitTypeLongPlural | UnitTypeShort;
252
+
253
+ export type OpUnitType = UnitType | "week" | "weeks" | 'w';
254
+ export type QUnitType = UnitType | "quarter" | "quarters" | 'Q';
255
+ export type ManipulateType = Exclude<OpUnitType, 'date' | 'dates'>;
256
+ class Dayjs {
257
+ constructor (config?: ConfigType)
258
+ /**
259
+ * All Day.js objects are immutable. Still, `dayjs#clone` can create a clone of the current object if you need one.
260
+ * ```
261
+ * dayjs().clone()// => Dayjs
262
+ * dayjs(dayjs('2019-01-25')) // passing a Dayjs object to a constructor will also clone it
263
+ * ```
264
+ * Docs: https://day.js.org/docs/en/parse/dayjs-clone
265
+ */
266
+ clone(): Dayjs
267
+ /**
268
+ * This returns a `boolean` indicating whether the Day.js object contains a valid date or not.
269
+ * ```
270
+ * dayjs().isValid()// => boolean
271
+ * ```
272
+ * Docs: https://day.js.org/docs/en/parse/is-valid
273
+ */
274
+ isValid(): boolean
275
+ /**
276
+ * Get the year.
277
+ * ```
278
+ * dayjs().year()// => 2020
279
+ * ```
280
+ * Docs: https://day.js.org/docs/en/get-set/year
281
+ */
282
+ year(): number
283
+ /**
284
+ * Set the year.
285
+ * ```
286
+ * dayjs().year(2000)// => Dayjs
287
+ * ```
288
+ * Docs: https://day.js.org/docs/en/get-set/year
289
+ */
290
+ year(value: number): Dayjs
291
+ /**
292
+ * Get the month.
293
+ *
294
+ * Months are zero indexed, so January is month 0.
295
+ * ```
296
+ * dayjs().month()// => 0-11
297
+ * ```
298
+ * Docs: https://day.js.org/docs/en/get-set/month
299
+ */
300
+ month(): number
301
+ /**
302
+ * Set the month.
303
+ *
304
+ * Months are zero indexed, so January is month 0.
305
+ *
306
+ * Accepts numbers from 0 to 11. If the range is exceeded, it will bubble up to the next year.
307
+ * ```
308
+ * dayjs().month(0)// => Dayjs
309
+ * ```
310
+ * Docs: https://day.js.org/docs/en/get-set/month
311
+ */
312
+ month(value: number): Dayjs
313
+ /**
314
+ * Get the date of the month.
315
+ * ```
316
+ * dayjs().date()// => 1-31
317
+ * ```
318
+ * Docs: https://day.js.org/docs/en/get-set/date
319
+ */
320
+ date(): number
321
+ /**
322
+ * Set the date of the month.
323
+ *
324
+ * Accepts numbers from 1 to 31. If the range is exceeded, it will bubble up to the next months.
325
+ * ```
326
+ * dayjs().date(1)// => Dayjs
327
+ * ```
328
+ * Docs: https://day.js.org/docs/en/get-set/date
329
+ */
330
+ date(value: number): Dayjs
331
+ /**
332
+ * Get the day of the week.
333
+ *
334
+ * Returns numbers from 0 (Sunday) to 6 (Saturday).
335
+ * ```
336
+ * dayjs().day()// 0-6
337
+ * ```
338
+ * Docs: https://day.js.org/docs/en/get-set/day
339
+ */
340
+ day(): 0 | 1 | 2 | 3 | 4 | 5 | 6
341
+ /**
342
+ * Set the day of the week.
343
+ *
344
+ * Accepts numbers from 0 (Sunday) to 6 (Saturday). If the range is exceeded, it will bubble up to next weeks.
345
+ * ```
346
+ * dayjs().day(0)// => Dayjs
347
+ * ```
348
+ * Docs: https://day.js.org/docs/en/get-set/day
349
+ */
350
+ day(value: number): Dayjs
351
+ /**
352
+ * Get the hour.
353
+ * ```
354
+ * dayjs().hour()// => 0-23
355
+ * ```
356
+ * Docs: https://day.js.org/docs/en/get-set/hour
357
+ */
358
+ hour(): number
359
+ /**
360
+ * Set the hour.
361
+ *
362
+ * Accepts numbers from 0 to 23. If the range is exceeded, it will bubble up to the next day.
363
+ * ```
364
+ * dayjs().hour(12)// => Dayjs
365
+ * ```
366
+ * Docs: https://day.js.org/docs/en/get-set/hour
367
+ */
368
+ hour(value: number): Dayjs
369
+ /**
370
+ * Get the minutes.
371
+ * ```
372
+ * dayjs().minute()// => 0-59
373
+ * ```
374
+ * Docs: https://day.js.org/docs/en/get-set/minute
375
+ */
376
+ minute(): number
377
+ /**
378
+ * Set the minutes.
379
+ *
380
+ * Accepts numbers from 0 to 59. If the range is exceeded, it will bubble up to the next hour.
381
+ * ```
382
+ * dayjs().minute(59)// => Dayjs
383
+ * ```
384
+ * Docs: https://day.js.org/docs/en/get-set/minute
385
+ */
386
+ minute(value: number): Dayjs
387
+ /**
388
+ * Get the seconds.
389
+ * ```
390
+ * dayjs().second()// => 0-59
391
+ * ```
392
+ * Docs: https://day.js.org/docs/en/get-set/second
393
+ */
394
+ second(): number
395
+ /**
396
+ * Set the seconds.
397
+ *
398
+ * Accepts numbers from 0 to 59. If the range is exceeded, it will bubble up to the next minutes.
399
+ * ```
400
+ * dayjs().second(1)// Dayjs
401
+ * ```
402
+ */
403
+ second(value: number): Dayjs
404
+ /**
405
+ * Get the milliseconds.
406
+ * ```
407
+ * dayjs().millisecond()// => 0-999
408
+ * ```
409
+ * Docs: https://day.js.org/docs/en/get-set/millisecond
410
+ */
411
+ millisecond(): number
412
+ /**
413
+ * Set the milliseconds.
414
+ *
415
+ * Accepts numbers from 0 to 999. If the range is exceeded, it will bubble up to the next seconds.
416
+ * ```
417
+ * dayjs().millisecond(1)// => Dayjs
418
+ * ```
419
+ * Docs: https://day.js.org/docs/en/get-set/millisecond
420
+ */
421
+ millisecond(value: number): Dayjs
422
+ /**
423
+ * Generic setter, accepting unit as first argument, and value as second, returns a new instance with the applied changes.
424
+ *
425
+ * In general:
426
+ * ```
427
+ * dayjs().set(unit, value) === dayjs()[unit](value)
428
+ * ```
429
+ * Units are case insensitive, and support plural and short forms.
430
+ * ```
431
+ * dayjs().set('date', 1)
432
+ * dayjs().set('month', 3) // April
433
+ * dayjs().set('second', 30)
434
+ * ```
435
+ * Docs: https://day.js.org/docs/en/get-set/set
436
+ */
437
+ set(unit: UnitType, value: number): Dayjs
438
+ /**
439
+ * String getter, returns the corresponding information getting from Day.js object.
440
+ *
441
+ * In general:
442
+ * ```
443
+ * dayjs().get(unit) === dayjs()[unit]()
444
+ * ```
445
+ * Units are case insensitive, and support plural and short forms.
446
+ * ```
447
+ * dayjs().get('year')
448
+ * dayjs().get('month') // start 0
449
+ * dayjs().get('date')
450
+ * ```
451
+ * Docs: https://day.js.org/docs/en/get-set/get
452
+ */
453
+ get(unit: UnitType): number
454
+ /**
455
+ * Returns a cloned Day.js object with a specified amount of time added.
456
+ * ```
457
+ * dayjs().add(7, 'day')// => Dayjs
458
+ * ```
459
+ * Units are case insensitive, and support plural and short forms.
460
+ *
461
+ * Docs: https://day.js.org/docs/en/manipulate/add
462
+ */
463
+ add(value: number, unit?: ManipulateType): Dayjs
464
+ /**
465
+ * Returns a cloned Day.js object with a specified amount of time subtracted.
466
+ * ```
467
+ * dayjs().subtract(7, 'year')// => Dayjs
468
+ * ```
469
+ * Units are case insensitive, and support plural and short forms.
470
+ *
471
+ * Docs: https://day.js.org/docs/en/manipulate/subtract
472
+ */
473
+ subtract(value: number, unit?: ManipulateType): Dayjs
474
+ /**
475
+ * Returns a cloned Day.js object and set it to the start of a unit of time.
476
+ * ```
477
+ * dayjs().startOf('year')// => Dayjs
478
+ * ```
479
+ * Units are case insensitive, and support plural and short forms.
480
+ *
481
+ * Docs: https://day.js.org/docs/en/manipulate/start-of
482
+ */
483
+ startOf(unit: OpUnitType): Dayjs
484
+ /**
485
+ * Returns a cloned Day.js object and set it to the end of a unit of time.
486
+ * ```
487
+ * dayjs().endOf('month')// => Dayjs
488
+ * ```
489
+ * Units are case insensitive, and support plural and short forms.
490
+ *
491
+ * Docs: https://day.js.org/docs/en/manipulate/end-of
492
+ */
493
+ endOf(unit: OpUnitType): Dayjs
494
+ /**
495
+ * Get the formatted date according to the string of tokens passed in.
496
+ *
497
+ * To escape characters, wrap them in square brackets (e.g. [MM]).
498
+ * ```
499
+ * dayjs().format()// => current date in ISO8601, without fraction seconds e.g. '2020-04-02T08:02:17-05:00'
500
+ * dayjs('2019-01-25').format('[YYYYescape] YYYY-MM-DDTHH:mm:ssZ[Z]')// 'YYYYescape 2019-01-25T00:00:00-02:00Z'
501
+ * dayjs('2019-01-25').format('DD/MM/YYYY') // '25/01/2019'
502
+ * ```
503
+ * Docs: https://day.js.org/docs/en/display/format
504
+ */
505
+ format(template?: string): string
506
+ /**
507
+ * This indicates the difference between two date-time in the specified unit.
508
+ *
509
+ * To get the difference in milliseconds, use `dayjs#diff`
510
+ * ```
511
+ * const date1 = dayjs('2019-01-25')
512
+ * const date2 = dayjs('2018-06-05')
513
+ * date1.diff(date2) // 20214000000 default milliseconds
514
+ * date1.diff() // milliseconds to current time
515
+ * ```
516
+ *
517
+ * To get the difference in another unit of measurement, pass that measurement as the second argument.
518
+ * ```
519
+ * const date1 = dayjs('2019-01-25')
520
+ * date1.diff('2018-06-05', 'month') // 7
521
+ * ```
522
+ * Units are case insensitive, and support plural and short forms.
523
+ *
524
+ * Docs: https://day.js.org/docs/en/display/difference
525
+ */
526
+ diff(date?: ConfigType, unit?: QUnitType | OpUnitType, float?: boolean): number
527
+ /**
528
+ * This returns the number of **milliseconds** since the Unix Epoch of the Day.js object.
529
+ * ```
530
+ * dayjs('2019-01-25').valueOf() // 1548381600000
531
+ * +dayjs(1548381600000) // 1548381600000
532
+ * ```
533
+ * To get a Unix timestamp (the number of seconds since the epoch) from a Day.js object, you should use Unix Timestamp `dayjs#unix()`.
534
+ *
535
+ * Docs: https://day.js.org/docs/en/display/unix-timestamp-milliseconds
536
+ */
537
+ valueOf(): number
538
+ /**
539
+ * This returns the Unix timestamp (the number of **seconds** since the Unix Epoch) of the Day.js object.
540
+ * ```
541
+ * dayjs('2019-01-25').unix() // 1548381600
542
+ * ```
543
+ * This value is floored to the nearest second, and does not include a milliseconds component.
544
+ *
545
+ * Docs: https://day.js.org/docs/en/display/unix-timestamp
546
+ */
547
+ unix(): number
548
+ /**
549
+ * Get the number of days in the current month.
550
+ * ```
551
+ * dayjs('2019-01-25').daysInMonth() // 31
552
+ * ```
553
+ * Docs: https://day.js.org/docs/en/display/days-in-month
554
+ */
555
+ daysInMonth(): number
556
+ /**
557
+ * To get a copy of the native `Date` object parsed from the Day.js object use `dayjs#toDate`.
558
+ * ```
559
+ * dayjs('2019-01-25').toDate()// => Date
560
+ * ```
561
+ */
562
+ toDate(): Date
563
+ /**
564
+ * To serialize as an ISO 8601 string.
565
+ * ```
566
+ * dayjs('2019-01-25').toJSON() // '2019-01-25T02:00:00.000Z'
567
+ * ```
568
+ * Docs: https://day.js.org/docs/en/display/as-json
569
+ */
570
+ toJSON(): string
571
+ /**
572
+ * To format as an ISO 8601 string.
573
+ * ```
574
+ * dayjs('2019-01-25').toISOString() // '2019-01-25T02:00:00.000Z'
575
+ * ```
576
+ * Docs: https://day.js.org/docs/en/display/as-iso-string
577
+ */
578
+ toISOString(): string
579
+ /**
580
+ * Returns a string representation of the date.
581
+ * ```
582
+ * dayjs('2019-01-25').toString() // 'Fri, 25 Jan 2019 02:00:00 GMT'
583
+ * ```
584
+ * Docs: https://day.js.org/docs/en/display/as-string
585
+ */
586
+ toString(): string
587
+ /**
588
+ * Get the UTC offset in minutes.
589
+ * ```
590
+ * dayjs().utcOffset()
591
+ * ```
592
+ * Docs: https://day.js.org/docs/en/manipulate/utc-offset
593
+ */
594
+ utcOffset(): number
595
+ /**
596
+ * This indicates whether the Day.js object is before the other supplied date-time.
597
+ * ```
598
+ * dayjs().isBefore(dayjs('2011-01-01')) // default milliseconds
599
+ * ```
600
+ * If you want to limit the granularity to a unit other than milliseconds, pass it as the second parameter.
601
+ * ```
602
+ * dayjs().isBefore('2011-01-01', 'year')// => boolean
603
+ * ```
604
+ * Units are case insensitive, and support plural and short forms.
605
+ *
606
+ * Docs: https://day.js.org/docs/en/query/is-before
607
+ */
608
+ isBefore(date?: ConfigType, unit?: OpUnitType): boolean
609
+ /**
610
+ * This indicates whether the Day.js object is the same as the other supplied date-time.
611
+ * ```
612
+ * dayjs().isSame(dayjs('2011-01-01')) // default milliseconds
613
+ * ```
614
+ * If you want to limit the granularity to a unit other than milliseconds, pass it as the second parameter.
615
+ * ```
616
+ * dayjs().isSame('2011-01-01', 'year')// => boolean
617
+ * ```
618
+ * Docs: https://day.js.org/docs/en/query/is-same
619
+ */
620
+ isSame(date?: ConfigType, unit?: OpUnitType): boolean
621
+ /**
622
+ * This indicates whether the Day.js object is after the other supplied date-time.
623
+ * ```
624
+ * dayjs().isAfter(dayjs('2011-01-01')) // default milliseconds
625
+ * ```
626
+ * If you want to limit the granularity to a unit other than milliseconds, pass it as the second parameter.
627
+ * ```
628
+ * dayjs().isAfter('2011-01-01', 'year')// => boolean
629
+ * ```
630
+ * Units are case insensitive, and support plural and short forms.
631
+ *
632
+ * Docs: https://day.js.org/docs/en/query/is-after
633
+ */
634
+ isAfter(date?: ConfigType, unit?: OpUnitType): boolean
635
+
636
+ locale(): string
637
+
638
+ locale(preset: string | ILocale, object?: Partial<ILocale>): Dayjs
639
+ }
640
+
641
+ export type PluginFunc<T = unknown> = (option: T, c: typeof Dayjs, d: typeof dayjs) => void
642
+
643
+ export function extend<T = unknown>(plugin: PluginFunc<T>, option?: T): Dayjs
644
+
645
+ export function locale(preset?: string | ILocale, object?: Partial<ILocale>, isLocal?: boolean): string
646
+
647
+ export function isDayjs(d: any): d is Dayjs
648
+
649
+ export function unix(t: number): Dayjs
650
+
651
+ const Ls : { [key: string] : ILocale }
652
+ }
653
+
654
+ /** 模版根:`scope` 为流程数据,`system` 为系统内置工具 */
655
+ type TemplateRootName = "scope" | "system";
656
+ declare const TEMPLATE_ROOT_NAMES: TemplateRootName[];
657
+ /** dayjs 实例常用方法(用于联想;运行时走真实 dayjs 原型) */
658
+ declare const SYSTEM_TIME_METHOD_NAMES: readonly ["add", "subtract", "set", "get", "millisecond", "second", "minute", "hour", "date", "day", "weekday", "isoWeekday", "dayOfYear", "week", "isoWeek", "month", "quarter", "year", "weekYear", "isoWeekYear", "startOf", "endOf", "format", "fromNow", "toNow", "from", "to", "calendar", "diff", "valueOf", "unix", "daysInMonth", "toDate", "toArray", "toJSON", "toISOString", "toObject", "toString", "isBefore", "isSame", "isAfter", "isSameOrBefore", "isSameOrAfter", "isBetween", "isLeapYear", "isValid", "clone", "locale", "utcOffset", "local", "utc", "isUTC"];
659
+ /** Math 静态成员(联想用) */
660
+ declare const SYSTEM_MATH_KEYS: readonly ["E", "LN10", "LN2", "LOG10E", "LOG2E", "PI", "SQRT1_2", "SQRT2", "abs", "acos", "acosh", "asin", "asinh", "atan", "atan2", "atanh", "cbrt", "ceil", "clz32", "cos", "cosh", "exp", "expm1", "floor", "fround", "hypot", "imul", "log", "log10", "log1p", "log2", "max", "min", "pow", "random", "round", "sign", "sin", "sinh", "sqrt", "tan", "tanh", "trunc"];
661
+ /** Location 常用属性 / 方法(联想用) */
662
+ declare const SYSTEM_LOCATION_KEYS: readonly ["href", "protocol", "host", "hostname", "port", "pathname", "search", "hash", "origin", "ancestorOrigins", "assign", "reload", "replace", "toString"];
663
+ type SystemTime = ReturnType<typeof dayjs>;
664
+ type SystemRoot = {
665
+ /** 当前时间的 dayjs 对象(每次 createSystemRoot 取「此刻」) */
666
+ time: SystemTime;
667
+ /** JS Math */
668
+ math: Math;
669
+ /** 当前页 Location;非浏览器环境为只读占位 */
670
+ location: Location | SystemLocationStub;
671
+ };
672
+ type SystemLocationStub = {
673
+ href: string;
674
+ protocol: string;
675
+ host: string;
676
+ hostname: string;
677
+ port: string;
678
+ pathname: string;
679
+ search: string;
680
+ hash: string;
681
+ origin: string;
682
+ assign: (url: string) => void;
683
+ reload: () => void;
684
+ replace: (url: string) => void;
685
+ toString: () => string;
686
+ };
687
+ /** 每次求值新建,保证 `time` 为当前时刻 */
688
+ declare function createSystemRoot(): SystemRoot;
689
+ /** 联想用静态树(不依赖运行时实例) */
690
+ declare function getSystemAutocompleteTree(): Record<string, unknown>;
691
+ declare function isDayjsValue(value: unknown): value is SystemTime;
692
+
693
+ /** @deprecated 名称保留兼容;实际同时识别 scope 与 system */
210
694
  declare function hasScopeTemplate(value: string): boolean;
211
- declare function evaluateScopeExpression(expression: string, scope: unknown): unknown;
695
+ declare const hasTemplateExpression: typeof hasScopeTemplate;
696
+ declare function evaluateScopeExpression(expression: string, scope: unknown, system?: SystemRoot): unknown;
212
697
  declare function stringifyScopeValue(value: unknown): string;
213
- /** 将 `{scope?.a}` 替换为求值结果;无模板时原样返回 */
214
- declare function evaluateScopeTemplate(template: string, scope: unknown): string;
698
+ /** 将 `{scope?...}` / `{system?...}` 替换为求值结果;无模板时原样返回 */
699
+ declare function evaluateScopeTemplate(template: string, scope: unknown, system?: SystemRoot): string;
215
700
  /**
216
- * 在 JSON 文本中替换 `{scope?...}`:
701
+ * 在 JSON 文本中替换模板:
217
702
  * - 位于字符串内时写入转义后的内容
218
703
  * - 位于值位置时写入 JSON 字面量(对象/数组/字符串/数字)
219
704
  */
220
- declare function evaluateScopeTemplateInJson(template: string, scope: unknown): string;
705
+ declare function evaluateScopeTemplateInJson(template: string, scope: unknown, system?: SystemRoot): string;
221
706
  declare function looksLikeJsonText(text: string): boolean;
707
+ /** 编码时保留未解析的 scope/system 模版片段 */
708
+ declare function preserveTemplateTokensInEncode(value: string): boolean;
222
709
 
223
710
  type ScopeAutocompleteState = {
224
711
  templateStart: number;
225
712
  cursor: number;
713
+ /** 正在补全根名 scope / system */
714
+ suggestingRoot: boolean;
715
+ root: TemplateRootName | null;
226
716
  path: string[];
227
717
  partialKey: string;
228
718
  };
229
- /** 解析光标处未闭合的 scope 模版表达式 */
719
+ /** 解析光标处未闭合的 scope / system 模版表达式 */
230
720
  declare function parseScopeAutocomplete(text: string, cursor: number, scope: unknown): ScopeAutocompleteState | null;
231
721
  declare function getScopeAutocompleteSuggestions(scope: unknown, state: ScopeAutocompleteState): string[];
232
- declare function buildScopeExpression(path: string[], selectedKey: string): string;
722
+ declare function buildScopeExpression(path: string[], selectedKey: string, root?: TemplateRootName): string;
233
723
  declare function applyScopeAutocompleteSelection(text: string, state: ScopeAutocompleteState, selectedKey: string): {
234
724
  value: string;
235
725
  cursor: number;
@@ -306,26 +796,78 @@ declare function getFetchBodyValidationError(body: string | undefined, resolvedB
306
796
  declare function getFetchHeadersValidationError(config: FetchRequestConfig, scope?: unknown): string | null;
307
797
  /** `{scope?...}` 整段表达式,区别于 JSON 对象 `{ "Authorization": "..." }` */
308
798
  declare function isWholeScopeExpression(text: string): boolean;
309
- /** 将请求头编辑器原文解析为对象;支持 JSON 内模板,也支持整段 `{scope?...}` */
799
+ /** 将请求头编辑器原文解析为对象;支持 JSON 内模板,也支持整段 `{scope?...}` / `{system?...}` */
310
800
  declare function parseFetchHeadersJson(text: string, scope?: unknown): Record<string, string> | undefined;
311
801
  declare function draftFetchHeadersText(config: FetchRequestConfig): string;
312
802
  declare function resolveFetchHeaders(config: FetchRequestConfig, scope?: unknown): Record<string, string> | undefined;
313
- /** 用上游 scope 解析 fetch 表单中的 URL / Base URL / headers / body */
803
+ /** 用上游 scope / 系统 system 解析 fetch 表单中的 URL / Base URL / headers / body */
314
804
  declare function applyFetchConfigScope(config: FetchRequestConfig, scope: unknown): FetchRequestConfig;
315
805
  declare function fetchConfigHasScopeTemplate(config: FetchRequestConfig): boolean;
316
806
 
807
+ /**
808
+ * JSON 文本静态检查:解析失败位置 + 常见全角/中文标点嫌疑字符。
809
+ */
810
+ type JsonErrorRange = {
811
+ /** 含头不含尾的 UTF-16 下标 */
812
+ start: number;
813
+ end: number;
814
+ /** suspect = 全角/中文标点;parse = 解析器报错位置 */
815
+ kind: "suspect" | "parse";
816
+ };
817
+ type JsonLintResult = {
818
+ ok: true;
819
+ value: unknown;
820
+ } | {
821
+ ok: false;
822
+ error: string;
823
+ ranges: JsonErrorRange[];
824
+ };
825
+ /** 从引擎错误信息中尽量取出出错下标 */
826
+ declare function extractJsonErrorPosition(message: string, text: string): number | null;
827
+ /**
828
+ * 轻量扫描:找到第一个非法 token 的起始下标。
829
+ * 用于 V8 等只报 `Unexpected token 'a'`、不带 position 的场景。
830
+ */
831
+ declare function findJsonSyntaxErrorOffset(text: string): number | null;
832
+ declare function findSuspectCharRanges(text: string): JsonErrorRange[];
833
+ /**
834
+ * 检查 JSON 文本。失败时尽量给出可高亮的区间(含中文引号等嫌疑字符)。
835
+ */
836
+ declare function lintJsonString(jsonString: string): JsonLintResult;
837
+ /** 将错误区间应用到文本,生成带 <mark> 的 HTML(调用方需保证样式) */
838
+ declare function renderJsonWithErrorHighlights(text: string, ranges: JsonErrorRange[], markClass?: string): string;
839
+
317
840
  type JsonNodeConfig = {
318
841
  jsonString: string;
319
842
  };
320
843
  declare const DEFAULT_JSON_NODE_CONFIG: JsonNodeConfig;
844
+
321
845
  declare function validateJsonString(jsonString: string): {
322
846
  ok: true;
323
847
  value: unknown;
324
848
  } | {
325
849
  ok: false;
326
850
  error: string;
851
+ ranges?: JsonErrorRange[];
852
+ };
853
+ /**
854
+ * 配置期校验:
855
+ * - 先做语法 lint(含错误区间)
856
+ * - 语法通过且含 scope/system 模版时标记 deferred(运行时再替换)
857
+ */
858
+ declare function validateJsonStringAllowingScope(jsonString: string): {
859
+ ok: true;
860
+ value: unknown;
861
+ deferred?: false;
862
+ } | {
863
+ ok: true;
864
+ deferred: true;
865
+ } | {
866
+ ok: false;
867
+ error: string;
868
+ ranges: JsonErrorRange[];
327
869
  };
328
- declare function parseJsonConfig(config: JsonNodeConfig): unknown;
870
+ declare function parseJsonConfig(config: JsonNodeConfig, scope?: unknown): unknown;
329
871
 
330
872
  type StorageKind = "session" | "local";
331
873
  type StorageReadConfig = {
@@ -356,8 +898,14 @@ declare function normalizeStorageConfig(config?: Partial<StorageNodeConfig> | nu
356
898
  declare function isStorageReadConfigured(config: Pick<StorageNodeConfig, "read">): boolean;
357
899
  declare function isStorageSetConfigured(config: Pick<StorageNodeConfig, "set">): boolean;
358
900
  declare function resolveStorageWriteValue(template: string, scope: unknown): unknown;
901
+ /** Resolve a storage key that may contain `{scope...}` templates. */
902
+ declare function resolveStorageKey(key: string, scope: unknown): string;
359
903
  declare function serializeStorageValue(value: unknown): string;
360
904
  declare function deserializeStorageValue(raw: string | null): unknown;
905
+ /** Enumerate keys currently present in sessionStorage / localStorage. */
906
+ declare function listBrowserStorageKeys(kind: StorageKind | readonly StorageKind[]): string[];
907
+ /** Empty query returns all keys; otherwise case-insensitive substring match. */
908
+ declare function filterStorageKeySuggestions(keys: readonly string[], query: string): string[];
361
909
  /** 先设置再读取。未配置设置则不写入;未配置读取则返回空。 */
362
910
  declare function executeStorageConfig(config: StorageNodeConfig, incomingScope: unknown, accessors?: StorageAccessors | null): unknown;
363
911
 
@@ -529,6 +1077,116 @@ declare function collectViewEventBindings(nodes: Array<{
529
1077
  eventConfig?: Partial<ViewEventNodeConfig> | null;
530
1078
  }>, eventNodeType: string, armedNodeIds?: ReadonlySet<string>): Map<string, Set<ViewEventType>>;
531
1079
 
1080
+ declare const API_COLLECTION_DOCUMENT_VERSION: 1;
1081
+ /** 集合内单条接口 */
1082
+ type ApiCollectionEndpoint = {
1083
+ /** 下拉展示名,集合内建议唯一 */
1084
+ name: string;
1085
+ /** 请求路径或完整 URL,可含 `{scope?...}` */
1086
+ url: string;
1087
+ method: FetchHttpMethod;
1088
+ /** 查询参数;选中后会拼进 url;value 可含 `{scope?...}` */
1089
+ params?: Record<string, string>;
1090
+ /** 请求头;value 可含 `{scope?...}` */
1091
+ headers?: Record<string, string>;
1092
+ /** 请求体原文(多为 JSON 字符串),可含 `{scope?...}` */
1093
+ body?: string;
1094
+ /** 接口说明;配置侧栏选中时气泡展示 */
1095
+ description?: string;
1096
+ };
1097
+ /** 用户上传 / 编辑的 JSON 文档形状 */
1098
+ type ApiCollectionDocument = {
1099
+ version: typeof API_COLLECTION_DOCUMENT_VERSION;
1100
+ /** 集合显示名 */
1101
+ name: string;
1102
+ /** 可选 API 主机,写入 Fetch 的 apiBaseUrl;可含 `{scope?...}` */
1103
+ baseUrl?: string;
1104
+ apis: ApiCollectionEndpoint[];
1105
+ };
1106
+ /** 运行时 / IndexedDB 记录 */
1107
+ type ApiCollectionRecord = {
1108
+ id: string;
1109
+ name: string;
1110
+ /** true 时写入 IndexedDB;false 仅内存,刷新丢失 */
1111
+ persistLocal: boolean;
1112
+ document: ApiCollectionDocument;
1113
+ /** 编辑器里的原文,便于再编辑 */
1114
+ rawJson: string;
1115
+ createdAt: number;
1116
+ updatedAt: number;
1117
+ };
1118
+ type ApiCollectionListItem = {
1119
+ id: string;
1120
+ name: string;
1121
+ persistLocal: boolean;
1122
+ apiCount: number;
1123
+ updatedAt: number;
1124
+ };
1125
+ type ApiCollectionParseResult = {
1126
+ ok: true;
1127
+ document: ApiCollectionDocument;
1128
+ rawJson: string;
1129
+ } | {
1130
+ ok: false;
1131
+ error: string;
1132
+ };
1133
+ /** 校验并规范化集合文档(对象或已 parse 的 JSON) */
1134
+ declare function validateApiCollectionDocument(input: unknown): {
1135
+ ok: true;
1136
+ document: ApiCollectionDocument;
1137
+ } | {
1138
+ ok: false;
1139
+ error: string;
1140
+ };
1141
+ /** 解析上传 / 编辑框里的 JSON 文本 */
1142
+ declare function parseApiCollectionJson(text: string): ApiCollectionParseResult;
1143
+ declare function createApiCollectionId(): string;
1144
+ declare function apiCollectionToListItem(record: ApiCollectionRecord): ApiCollectionListItem;
1145
+ /** 可下载的示例模版(已通过校验;value 可写 `{scope?...}`) */
1146
+ declare function getApiCollectionTemplateDocument(): ApiCollectionDocument;
1147
+ declare function getApiCollectionTemplateJson(): string;
1148
+ declare function downloadApiCollectionTemplate(filename?: string): void;
1149
+ /** 把 params 拼进 url(params 的 value 支持 Scope 模版) */
1150
+ declare function buildApiCollectionEndpointUrl(endpoint: ApiCollectionEndpoint): string;
1151
+ /** 同步匹配用:去掉 query / hash,忽略末尾斜杠 */
1152
+ declare function normalizeApiCollectionUrlKey(url: string): string;
1153
+ type ApiCollectionFetchNodeLike = {
1154
+ id: string;
1155
+ label?: string;
1156
+ fetchConfig?: FetchRequestConfig | null;
1157
+ };
1158
+ type ApiCollectionSyncChangedField = "url" | "method" | "headers" | "body" | "apiBaseUrl";
1159
+ type ApiCollectionSyncNodePatch = {
1160
+ nodeId: string;
1161
+ nodeLabel: string;
1162
+ changedFields: ApiCollectionSyncChangedField[];
1163
+ fetchConfigPatch: Partial<FetchRequestConfig>;
1164
+ };
1165
+ type ApiCollectionSyncResult = {
1166
+ updatedCount: number;
1167
+ nodes: Array<{
1168
+ id: string;
1169
+ label: string;
1170
+ changedFields: ApiCollectionSyncChangedField[];
1171
+ }>;
1172
+ };
1173
+ /**
1174
+ * 按 URL(忽略 query)匹配 Fetch 节点,生成回填 patch。
1175
+ * URL 对不上的节点不会出现在结果里。
1176
+ */
1177
+ declare function buildApiCollectionSyncPatches(options: {
1178
+ collectionId: string;
1179
+ document: ApiCollectionDocument;
1180
+ nodes: ApiCollectionFetchNodeLike[];
1181
+ }): ApiCollectionSyncNodePatch[];
1182
+ declare function toApiCollectionSyncResult(patches: ApiCollectionSyncNodePatch[]): ApiCollectionSyncResult;
1183
+ /** 选中集合接口后回填到 Fetch 配置 */
1184
+ declare function applyApiCollectionEndpointToFetchConfig(options: {
1185
+ collectionId: string;
1186
+ document: ApiCollectionDocument;
1187
+ endpoint: ApiCollectionEndpoint;
1188
+ }): Partial<FetchRequestConfig>;
1189
+
532
1190
  type ExecutionTraceEntry = {
533
1191
  id: string;
534
1192
  nodeId: string;
@@ -782,4 +1440,4 @@ declare function isClockNodeActive(nodeId: string): boolean;
782
1440
  declare function getActiveClockNodeIds(): string[];
783
1441
  declare function subscribeActiveClockNodes(listener: () => void): () => boolean;
784
1442
 
785
- export { AND_NODE_TYPE, BLUEPRINT_ACTIVATION_INPUT_KEY, BLUEPRINT_CALL_STACK_KEY, BLUEPRINT_NODE_TYPE, type Behavior, type BehaviorContext, type BehaviorFn, BehaviorRegistry, type BlueprintCycleCheckOptions, type BlueprintCycleCheckResult, BlueprintCycleError, BlueprintGraphRunner, type BlueprintNodeOutputs, type BlueprintRefOutput, CLOCK_NODE_TYPE, type ClockNodeConfig, type ClockSignalOutput, 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, type ExecuteFetchOptions, type ExecutionRunRecord, type ExecutionToken, type ExecutionTraceEntry, Executor, type ExecutorDeps, FETCH_CACHES, FETCH_CREDENTIALS, FETCH_HTTP_METHODS, FETCH_MODES, FETCH_NODE_TYPE, FETCH_REDIRECTS, FETCH_RESPONSE_TYPES, FETCH_SCOPE_AUTOCOMPLETE_FALLBACK, type FalseSignal, type FetchHttpMethod, type FetchRequestConfig, type FetchResponseType, type FetchResultValue, type FetchUrlInputMode, type IncomingGraphEdge, type IncomingNodeScope, type IncomingNodeScopeEntry, type IncomingNodeSource, JSON_NODE_TYPE, type JsonNodeConfig, LIFECYCLE_NODE_TYPE, LIFECYCLE_SIGNAL_KEY, type LibraryBlueprintResolver, type LifecycleSignal, type LogicNodeConfig, type NodeDefinition, type NodeSignal, PAGE_LIFECYCLE_LABELS, PAGE_LIFECYCLE_PHASES, type PageLifecyclePhase, type ParsedSwaggerDocument, type PortSpec, type RunnableGraph, type RunnableGraphEdge, type RunnableGraphNode, STORAGE_KINDS, STORAGE_NODE_TYPE, type Scope, type ScopeAutocompleteState, type StorageAccessors, type StorageKind, type StorageNodeConfig, type StorageReadConfig, type StorageSetConfig, type SwaggerApiEndpoint, type TrueSignal, UI_EVENT_PAYLOAD_KEY, VIEW_EVENT_SIGNAL_KEY, VIEW_EVENT_TYPES, VIEW_NODE_TYPE, type Value, type ViewEventNodeConfig, type ViewEventNodeSnapshot, type ViewEventSignal, type ViewEventSnapshot, type ViewEventType, type ViewScopeUpdateCallback, type WebStorageLike, abortClockNode, abortClockSession, andLogicNodeDefinition, appStorageKey, applyFetchConfigScope, applyScopeAutocompleteSelection, assertNoBlueprintReferenceCycle, blueprintNodeDefinition, buildClockSessionKey, buildClockSignalValue, buildEndpointFullUrl, buildEndpointSuggestions, buildIncomingNodeScope, buildScopeExpression, clearClockSessionAbort, clockNodeDefinition, collectArmedViewEventBindings, collectArmedViewEventNodeIds, collectBlueprintLibraryRefs, collectIncomingNodeScopeEntries, collectViewEventBindings, combinePortSignalsOr, createClockOutputValue, createFalseSignal, createIncomingNodeScopeEntry, createLifecycleSignal, createTraceEntryId, createTrueSignal, createViewEventSignal, defaultLogicNodeDefinition, deserializeStorageValue, detectBlueprintReferenceCycle, detectRuntimeBlueprintCycle, draftFetchHeadersText, evaluateScopeExpression, evaluateScopeTemplate, evaluateScopeTemplateInJson, executeFetch, executeLogicConfig, executeStorageConfig, fetchConfigHasScopeTemplate, fetchNodeDefinition, filterEndpointSuggestions, formatBlueprintCycleMessage, formatClockTime, getActiveClockNodeIds, getClockTickDelayOffsetMs, getClockTickWaitMs, getFetchBodyValidationError, getFetchHeadersValidationError, getNodeDefinition, getScopeAutocompleteSuggestions, hasScopeTemplate, isClockNodeActive, isClockScheduleActive, isClockSessionAborted, isFalseSignal, isStorageReadConfigured, isStorageSetConfigured, isTrueSignal, isViewEventType, isWholeScopeExpression, jsonNodeDefinition, latestTraceOutputsByNode, lifecycleNodeDefinition, looksLikeJsonText, nodeDefinitionRegistry, normalizeAppNameSpace, normalizeClockConfig, normalizeFetchRequestConfig, normalizeStorageConfig, normalizeViewEventConfig, parseFetchHeadersJson, parseJsonConfig, parseJsonText, parseScopeAutocomplete, parseSwaggerDocument, registerDefaultBehaviors, resolveBlueprintCallStack, resolveFetchBody, resolveFetchHeaders, resolveFetchIncomingScope, resolveFetchRequestUrl, resolveFetchScopeAutocompleteRoot, resolveStorageWriteValue, scheduleClockOutputs, serializeStorageValue, serializeTraceValue, snapshotDomEvent, snapshotViewEventNode, startClockSchedule, stopAllClockSchedules, stopClockSchedule, storageNodeDefinition, stringifyScopeValue, subscribeActiveClockNodes, uniqueStorageKinds, validateClockScheduleConfig, validateFetchJsonText, validateJsonString, validateLogicSourceCode, viewBindNodeDefinition, viewEventNodeDefinition };
1443
+ export { AND_NODE_TYPE, API_COLLECTION_DOCUMENT_VERSION, type ApiCollectionDocument, type ApiCollectionEndpoint, type ApiCollectionFetchNodeLike, type ApiCollectionListItem, type ApiCollectionParseResult, type ApiCollectionRecord, type ApiCollectionSyncChangedField, type ApiCollectionSyncNodePatch, type ApiCollectionSyncNotice, type ApiCollectionSyncResult, BLUEPRINT_ACTIVATION_INPUT_KEY, BLUEPRINT_CALL_STACK_KEY, BLUEPRINT_NODE_TYPE, type Behavior, type BehaviorContext, type BehaviorFn, BehaviorRegistry, type BlueprintCycleCheckOptions, type BlueprintCycleCheckResult, BlueprintCycleError, BlueprintGraphRunner, type BlueprintNodeOutputs, type BlueprintRefOutput, CLOCK_NODE_TYPE, type ClockNodeConfig, type ClockSignalOutput, 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, type ExecuteFetchOptions, type ExecutionRunRecord, type ExecutionToken, type ExecutionTraceEntry, Executor, type ExecutorDeps, FETCH_CACHES, FETCH_CREDENTIALS, FETCH_HTTP_METHODS, FETCH_MODES, FETCH_NODE_TYPE, FETCH_REDIRECTS, FETCH_RESPONSE_TYPES, FETCH_SCOPE_AUTOCOMPLETE_FALLBACK, type FalseSignal, type FetchHttpMethod, type FetchRequestConfig, type FetchResponseType, type FetchResultValue, type FetchUrlInputMode, type IncomingGraphEdge, type IncomingNodeScope, type IncomingNodeScopeEntry, type IncomingNodeSource, JSON_NODE_TYPE, type JsonErrorRange, type JsonNodeConfig, LIFECYCLE_NODE_TYPE, LIFECYCLE_SIGNAL_KEY, type LibraryBlueprintResolver, type LifecycleSignal, type LogicNodeConfig, type NodeDefinition, type NodeSignal, PAGE_LIFECYCLE_LABELS, PAGE_LIFECYCLE_PHASES, type PageLifecyclePhase, type ParsedSwaggerDocument, type PortSpec, type RunnableGraph, type RunnableGraphEdge, type RunnableGraphNode, STORAGE_KINDS, STORAGE_NODE_TYPE, SYSTEM_LOCATION_KEYS, SYSTEM_MATH_KEYS, SYSTEM_TIME_METHOD_NAMES, type Scope, type ScopeAutocompleteState, type StorageAccessors, type StorageKind, type StorageNodeConfig, type StorageReadConfig, type StorageSetConfig, type SwaggerApiEndpoint, type SystemLocationStub, type SystemRoot, type SystemTime, TEMPLATE_ROOT_NAMES, type TemplateRootName, type TrueSignal, UI_EVENT_PAYLOAD_KEY, VIEW_EVENT_SIGNAL_KEY, VIEW_EVENT_TYPES, VIEW_NODE_TYPE, type Value, type ViewEventNodeConfig, type ViewEventNodeSnapshot, type ViewEventSignal, type ViewEventSnapshot, type ViewEventType, type ViewScopeUpdateCallback, type WebStorageLike, 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 };