@simon_he/vue-tui 0.0.5 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/dist/index.cjs +2262 -266
  2. package/dist/index.d.ts +180 -106
  3. package/dist/index.js +1966 -217
  4. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import * as vue15 from "vue";
2
- import * as vue16 from "vue";
1
+ import * as vue12 from "vue";
2
+ import * as vue13 from "vue";
3
3
  import { App, Component as Component$1, ComputedRef, InjectionKey, Ref, VNode } from "vue";
4
4
 
5
5
  //#region src/core/render-plane.d.ts
@@ -39,9 +39,16 @@ type TerminalSize = Readonly<{
39
39
  cols: number;
40
40
  rows: number;
41
41
  }>;
42
+ type TerminalScrollOperation = Readonly<{
43
+ startY: number;
44
+ endY: number;
45
+ delta: number;
46
+ }>;
42
47
  type TerminalCommitEvent = Readonly<{
43
48
  dirtyRows: readonly number[] | null;
44
49
  planes: TerminalRenderPlanes | null;
50
+ sync?: boolean;
51
+ scrollOperations?: readonly TerminalScrollOperation[] | null;
45
52
  }>;
46
53
  type TerminalResizeEvent = Readonly<{
47
54
  cols: number;
@@ -70,6 +77,7 @@ interface Terminal {
70
77
  batch: <T>(fn: () => T) => T;
71
78
  commit: (meta?: {
72
79
  planes?: TerminalRenderPlanes | null;
80
+ sync?: boolean;
73
81
  }) => readonly number[] | null;
74
82
  on: <K extends keyof TerminalEventMap>(event: K, cb: (payload: TerminalEventMap[K]) => void) => () => void;
75
83
  dispose: () => void;
@@ -79,6 +87,10 @@ interface Terminal {
79
87
  getRow: (y: number) => readonly Cell[];
80
88
  setScrollbackLimit: (limit: number) => void;
81
89
  getScrollbackLines: (count?: number) => readonly string[];
90
+ /** Register fingerprint function for SoA pre-computation on the composite buffer. */
91
+ setFingerprintFn: (fn: (ch: string, style: Style) => number) => void;
92
+ /** Get pre-computed fingerprints for a composite buffer row (null if not enabled). */
93
+ getRowFingerprints: (y: number) => Uint32Array | null;
82
94
  } //#endregion
83
95
  //#region src/core/ansi/colors.d.ts
84
96
  type TerminalColorMode = 'ansi8' | 'ansi16' | 'ansi256' | 'truecolor';
@@ -341,6 +353,7 @@ type TerminalEventRecord = Readonly<{
341
353
  //#endregion
342
354
  //#region src/cli/input.d.ts
343
355
  type Stdin = NodeJS.ReadStream;
356
+ type KeyboardProtocol = 'auto' | 'kitty' | 'xterm' | 'off';
344
357
  type StdinDriver = Readonly<{
345
358
  dispose: () => void;
346
359
  }>;
@@ -348,7 +361,9 @@ declare function createStdinDriver(options: Readonly<{
348
361
  dispatch: (event: TerminalEventRecord) => boolean | void;
349
362
  stdin?: Stdin;
350
363
  stdout?: NodeJS.WriteStream;
364
+ env?: Readonly<Record<string, unknown>>;
351
365
  enableMouse?: boolean;
366
+ keyboardProtocol?: KeyboardProtocol;
352
367
  /**
353
368
  * Enable "any-motion" mouse tracking (xterm DECSET ?1003).
354
369
  * This is required for hover interactions in the CLI, but can increase event volume.
@@ -473,6 +488,11 @@ interface DomRenderer {
473
488
  readonly metrics: CellMetrics;
474
489
  dispose: () => void;
475
490
  refresh: () => void;
491
+ setPlaneOffset: (plane: TerminalRenderPlane, offsetPx: number) => void;
492
+ setPlaneViewport: (plane: TerminalRenderPlane, viewport: Readonly<{
493
+ topPx: number;
494
+ heightPx: number;
495
+ }> | null) => void;
476
496
  }
477
497
  declare function createDomRenderer(terminal: Terminal, container: HTMLElement): DomRenderer;
478
498
 
@@ -626,106 +646,6 @@ declare function createEventManager(container: HTMLElement, metrics: CellMetrics
626
646
  onFocusChange?: (prev: string | null, next: string | null) => void;
627
647
  }>): EventManager;
628
648
 
629
- //#endregion
630
- //#region src/vue/components/input/host.d.ts
631
- type ResolveTInputPathInfo = Readonly<{
632
- workspace: string;
633
- input: string;
634
- preserveBackslash?: boolean;
635
- homeDir?: string;
636
- }>;
637
- type TInputHostAdapter = Readonly<{
638
- isTerminalLike?: boolean;
639
- resolvePath?: (info: ResolveTInputPathInfo) => string;
640
- pathToHref?: (pathLike: string) => string | undefined;
641
- readClipboardText?: () => Promise<string>;
642
- writeClipboardText?: (text: string) => Promise<boolean>;
643
- showToast?: (message: string) => void;
644
- }>;
645
-
646
- //#endregion
647
- //#region src/vue/components/input/plugins/types.d.ts
648
- type PromptSuggestion = Readonly<{
649
- value: string;
650
- insert?: string;
651
- label?: string;
652
- detail?: string;
653
- keywords?: readonly string[];
654
- mentionValue?: string;
655
- mentionBehavior?: 'collect' | 'inline';
656
- onSelect?: (info: Readonly<{
657
- value: string;
658
- query: string;
659
- }>) => void | boolean;
660
- }>;
661
- type TInputPluginContext = Readonly<{
662
- getProps: () => Readonly<{
663
- zIndex: number;
664
- style?: Style;
665
- promptSuggestions: readonly PromptSuggestion[];
666
- promptTrigger: string;
667
- promptTriggers?: readonly string[];
668
- promptMaxItems: number;
669
- promptAlign: 'input' | 'center';
670
- promptSelectedStyle?: Style;
671
- mentionTrigger: string;
672
- mentionWorkspace: string;
673
- mentionMode: PathPickMode;
674
- mentionShowHidden: boolean;
675
- mentionSuggestions: readonly PromptSuggestion[];
676
- mentionMaxItems: number;
677
- collectMentions: boolean;
678
- mentions: readonly string[];
679
- skillTrigger?: string;
680
- skillSuggestions?: readonly PromptSuggestion[];
681
- }>;
682
- emit: (event: string, ...args: any[]) => void;
683
- terminal: Terminal;
684
- scheduler: Readonly<{
685
- invalidate: () => void;
686
- }>;
687
- defaultStyle: Ref<Style>;
688
- render: Readonly<{
689
- rootStack: any;
690
- createStack: (parent: any, z: number) => any;
691
- }>;
692
- visible: Ref<boolean>;
693
- rawAbsRect: ComputedRef<Rect>;
694
- eventZ: ComputedRef<number>;
695
- focused: Ref<boolean>;
696
- cursor: Ref<number>;
697
- getValue: () => string;
698
- insertText: (text: string) => void;
699
- pushUndoSnapshot: (nextValue: string) => void;
700
- applyEdit: (nextValue: string, nextCursor: number) => void;
701
- registerKeydownInterceptor: (fn: (e: TerminalKeyboardEvent) => boolean) => void;
702
- registerTextFilter: (fn: (info: Readonly<{
703
- text: string;
704
- value: string;
705
- cursor: number;
706
- selection: null | Readonly<{
707
- start: number;
708
- end: number;
709
- }>;
710
- }>) => string) => void;
711
- registerChipStyleProvider: (provider: Readonly<{
712
- getStyle: (baseStyle: Style, chip: Readonly<{
713
- kind: 'multiline' | 'mention';
714
- absPath?: string;
715
- }>) => Style | null | undefined;
716
- version: Ref<number>;
717
- }> | null) => void;
718
- registerHostAdapter: (adapter: TInputHostAdapter | null) => void;
719
- resolvePath: (input: string, opts?: Readonly<{
720
- preserveBackslash?: boolean;
721
- }>) => string;
722
- mentionToken: string;
723
- }>;
724
- type TInputPlugin = Readonly<{
725
- name: string;
726
- install: (ctx: TInputPluginContext) => void;
727
- }>;
728
-
729
649
  //#endregion
730
650
  //#region src/observability/trace.d.ts
731
651
  type TraceRecord = Readonly<{
@@ -825,6 +745,8 @@ type RenderNode = Readonly<{
825
745
  type RenderManager = Readonly<{
826
746
  rootStack: RenderStack;
827
747
  createStack: (parent: RenderStack, zIndex: number) => RenderStack;
748
+ invalidatePlane: (plane: TerminalRenderPlane) => void;
749
+ scrollPlane: (plane: TerminalRenderPlane, startY: number, endY: number, delta: number) => void;
828
750
  register: (node: {
829
751
  stack: RenderStack;
830
752
  plane?: TerminalRenderPlane;
@@ -837,6 +759,7 @@ type RenderManager = Readonly<{
837
759
  plane: TerminalRenderPlane;
838
760
  zIndex: number;
839
761
  rect: RenderRect | null;
762
+ dirtyRowsHint: readonly number[];
840
763
  paint: (dirtyRows?: readonly number[]) => void;
841
764
  }>) => void;
842
765
  unregister: (id: string) => void;
@@ -897,6 +820,105 @@ type TerminalContext = Readonly<{
897
820
  }>;
898
821
  declare const TInputPluginsContextKey: InjectionKey<Readonly<Ref<readonly TInputPlugin[]>>>;
899
822
 
823
+ //#endregion
824
+ //#region src/vue/components/input/host.d.ts
825
+ type ResolveTInputPathInfo = Readonly<{
826
+ workspace: string;
827
+ input: string;
828
+ preserveBackslash?: boolean;
829
+ homeDir?: string;
830
+ }>;
831
+ type TInputHostAdapter = Readonly<{
832
+ isTerminalLike?: boolean;
833
+ resolvePath?: (info: ResolveTInputPathInfo) => string;
834
+ pathToHref?: (pathLike: string) => string | undefined;
835
+ readClipboardText?: () => Promise<string>;
836
+ writeClipboardText?: (text: string) => Promise<boolean>;
837
+ showToast?: (message: string) => void;
838
+ }>;
839
+
840
+ //#endregion
841
+ //#region src/vue/components/input/plugins/types.d.ts
842
+ type PromptSuggestion = Readonly<{
843
+ value: string;
844
+ insert?: string;
845
+ label?: string;
846
+ detail?: string;
847
+ keywords?: readonly string[];
848
+ mentionValue?: string;
849
+ mentionBehavior?: 'collect' | 'inline';
850
+ onSelect?: (info: Readonly<{
851
+ value: string;
852
+ query: string;
853
+ }>) => void | boolean;
854
+ }>;
855
+ type TInputPluginContext = Readonly<{
856
+ getProps: () => Readonly<{
857
+ zIndex: number;
858
+ style?: Style;
859
+ promptSuggestions: readonly PromptSuggestion[];
860
+ promptTrigger: string;
861
+ promptTriggers?: readonly string[];
862
+ promptMaxItems: number;
863
+ promptAlign: 'input' | 'center';
864
+ promptSelectedStyle?: Style;
865
+ mentionTrigger: string;
866
+ mentionWorkspace: string;
867
+ mentionMode: PathPickMode;
868
+ mentionShowHidden: boolean;
869
+ mentionSuggestions: readonly PromptSuggestion[];
870
+ mentionMaxItems: number;
871
+ collectMentions: boolean;
872
+ mentions: readonly string[];
873
+ skillTrigger?: string;
874
+ skillSuggestions?: readonly PromptSuggestion[];
875
+ }>;
876
+ emit: (event: string, ...args: any[]) => void;
877
+ terminal: Terminal;
878
+ scheduler: TerminalScheduler;
879
+ defaultStyle: Ref<Style>;
880
+ render: Readonly<{
881
+ rootStack: any;
882
+ createStack: (parent: any, z: number) => any;
883
+ invalidatePlane: (plane: TerminalRenderPlane) => void;
884
+ }>;
885
+ visible: Ref<boolean>;
886
+ rawAbsRect: ComputedRef<Rect>;
887
+ eventZ: ComputedRef<number>;
888
+ focused: Ref<boolean>;
889
+ cursor: Ref<number>;
890
+ getValue: () => string;
891
+ insertText: (text: string) => void;
892
+ pushUndoSnapshot: (nextValue: string) => void;
893
+ applyEdit: (nextValue: string, nextCursor: number) => void;
894
+ registerKeydownInterceptor: (fn: (e: TerminalKeyboardEvent) => boolean) => void;
895
+ registerTextFilter: (fn: (info: Readonly<{
896
+ text: string;
897
+ value: string;
898
+ cursor: number;
899
+ selection: null | Readonly<{
900
+ start: number;
901
+ end: number;
902
+ }>;
903
+ }>) => string) => void;
904
+ registerChipStyleProvider: (provider: Readonly<{
905
+ getStyle: (baseStyle: Style, chip: Readonly<{
906
+ kind: 'multiline' | 'mention';
907
+ absPath?: string;
908
+ }>) => Style | null | undefined;
909
+ version: Ref<number>;
910
+ }> | null) => void;
911
+ registerHostAdapter: (adapter: TInputHostAdapter | null) => void;
912
+ resolvePath: (input: string, opts?: Readonly<{
913
+ preserveBackslash?: boolean;
914
+ }>) => string;
915
+ mentionToken: string;
916
+ }>;
917
+ type TInputPlugin = Readonly<{
918
+ name: string;
919
+ install: (ctx: TInputPluginContext) => void;
920
+ }>;
921
+
900
922
  //#endregion
901
923
  //#region src/create-terminal-app.d.ts
902
924
  type TerminalApp = Readonly<{
@@ -925,6 +947,51 @@ type CreateTerminalAppOptions = Readonly<{
925
947
  }>;
926
948
  declare function createTerminalApp(options: CreateTerminalAppOptions): TerminalApp;
927
949
 
950
+ //#endregion
951
+ //#region src/observability/cli-latency.d.ts
952
+ type StageEvent = Readonly<Record<string, unknown>> & {
953
+ type?: unknown;
954
+ key?: unknown;
955
+ code?: unknown;
956
+ };
957
+ type CliLatencyProfiler = Readonly<{
958
+ enabled: true;
959
+ recordRawInput: (info?: Readonly<{
960
+ bytes?: number;
961
+ }>) => void;
962
+ recordStdinDispatch: (event: StageEvent, info?: Readonly<{
963
+ parser?: string | null;
964
+ }>) => void;
965
+ recordEventDispatchStart: (event: StageEvent) => void;
966
+ recordEventDispatchEnd: (event: StageEvent, info: Readonly<{
967
+ defaultPrevented: boolean;
968
+ }>) => void;
969
+ recordSchedulerInvalidate: (info?: Readonly<{
970
+ priority?: string | null;
971
+ plane?: string | null;
972
+ }>) => void;
973
+ recordFlushStart: (info?: Readonly<{
974
+ sync?: boolean;
975
+ activePlanes?: readonly string[] | null;
976
+ }>) => void;
977
+ recordFlushEnd: () => void;
978
+ recordCommit: (info?: Readonly<{
979
+ sync?: boolean;
980
+ dirtyRows?: readonly number[] | null;
981
+ planes?: readonly string[] | null;
982
+ }>) => void;
983
+ recordStdoutQueued: (delayMs: number) => void;
984
+ recordStdoutRenderStart: () => void;
985
+ recordStdoutNoOutput: () => void;
986
+ recordStdoutWrite: (info: Readonly<{
987
+ durationMs: number;
988
+ bytes: number;
989
+ mode: string;
990
+ }>) => void;
991
+ markOperation: (operation: string) => void;
992
+ }>;
993
+ declare function getCliLatencyProfiler(): CliLatencyProfiler | null;
994
+
928
995
  //#endregion
929
996
  //#region src/renderer/cli/stdout-metrics.d.ts
930
997
  type StdoutRendererWriteMode = 'stream' | 'sync' | 'chunked';
@@ -1152,6 +1219,8 @@ interface RenderNodeOptions {
1152
1219
  zIndex?: number;
1153
1220
  stack?: RenderStack;
1154
1221
  rect?: RenderRect | null;
1222
+ dirtyRowsHint?: readonly number[];
1223
+ priority?: TerminalSchedulerPriority;
1155
1224
  deps?: unknown;
1156
1225
  paint: (dirtyRows?: readonly number[]) => void;
1157
1226
  }
@@ -1220,14 +1289,14 @@ type TerminalRouteLocationRaw = string | Readonly<{
1220
1289
  type NavigationGuardReturn = void | boolean | TerminalRouteLocationRaw;
1221
1290
  type NavigationGuard = (to: TerminalRoute, from: TerminalRoute | null) => NavigationGuardReturn | Promise<NavigationGuardReturn>;
1222
1291
  type TerminalRouter = Readonly<{
1223
- currentRoute: vue15.Ref<TerminalRoute>;
1292
+ currentRoute: vue12.Ref<TerminalRoute>;
1224
1293
  push: (to: TerminalRouteLocationRaw) => Promise<void>;
1225
1294
  replace: (to: TerminalRouteLocationRaw) => Promise<void>;
1226
1295
  back: () => Promise<void>;
1227
1296
  beforeEach: (guard: NavigationGuard) => () => void;
1228
1297
  beforeResolve: (guard: NavigationGuard) => () => void;
1229
1298
  afterEach: (guard: (to: TerminalRoute, from: TerminalRoute | null) => void) => () => void;
1230
- install: (app: vue16.App) => void;
1299
+ install: (app: vue13.App) => void;
1231
1300
  }>;
1232
1301
 
1233
1302
  //#endregion
@@ -1266,14 +1335,19 @@ interface WheelScrollState {
1266
1335
  lastAt: number;
1267
1336
  lastEdgeDir: number;
1268
1337
  lastEdgeAt: number;
1338
+ lastLineUnitDir: number;
1269
1339
  }
1270
1340
  interface WheelScrollResult {
1271
1341
  nextTop: number;
1272
1342
  dir: -1 | 0 | 1;
1273
1343
  lines: number;
1274
1344
  }
1345
+ type WheelDeltaMode = 'auto' | 'line' | 'pixel';
1346
+ interface WheelScrollOptions {
1347
+ disableAcceleration?: boolean;
1348
+ }
1275
1349
  declare function createWheelScrollState(): WheelScrollState;
1276
- declare function applyWheelScroll(state: WheelScrollState, deltaY: number, scrollTop: number, maxTop: number, now?: number): WheelScrollResult;
1350
+ declare function applyWheelScroll(state: WheelScrollState, deltaY: number, scrollTop: number, maxTop: number, now?: number, deltaMode?: WheelDeltaMode, options?: WheelScrollOptions): WheelScrollResult;
1277
1351
 
1278
1352
  //#endregion
1279
- export { ANSI16_COLORS, ANSI256_COLORS, ANSI8_COLORS, AnsiColorName, BufferSnapshot, Cell, CellMetrics, CliEventManager, ClipboardApi, CreateTerminalAppOptions, DomRenderer, EventManager, FsDirEntry, FsEntryKind, FsStat, LayoutContext, MentionPathProvider, MentionSuggestionProvider, PathPickMode, PathPickerProvider, PathSuggestion, PromptMentionPluginOptions, PromptSuggestion, RafApi, Rect, Runtime, RuntimeEnv, SGR_RESET, StdinDriver, StdoutRenderer, StdoutRendererMetrics, Style, SuggestPathsResult, TAnchor, TBox, TDebugOverlay, TDialog, TERMINAL_RENDER_PLANES, TFlow, TInput, TInputBox, TInputHostAdapter, TInputPlugin, TInputPluginContext, TInputPluginsContextKey, TJsonEditor, TList, TMultilineModal, TPathPicker, TRenderLayer, TRenderPlane, TRouterView, TSelect, TText, TTransition, TView, Terminal, TerminalApp, TerminalBaseEvent, TerminalColorCapability, TerminalColorLevel, TerminalColorMode, TerminalCommitEvent, TerminalContext, TerminalDebugNode, TerminalEventHandlerMap, TerminalEventMap, TerminalEventRecord, TerminalEventType, TerminalInputEvent, TerminalKeyboardEvent, TerminalNode, TerminalPointerEvent, TerminalProvider, TerminalRenderPlane, TerminalRenderPlanes, TerminalResizeEvent, TerminalRoute, TerminalRouteLocationRaw, TerminalRouteRecord, TerminalRouter, TerminalRuntime, TerminalRuntimeHandle, TerminalScheduler, TerminalSchedulerInvalidateOptions, TimerApi, TraceRecord, TraceStore, ansiColors, ansiStyles, applyWheelScroll, charCellWidth, clearTextCaches, createCliEventManager, createDefaultTInputHostAdapter, createDomRenderer, createEventManager, createNodeMentionPathProvider, createNodePathPickerProvider, createPromptMentionPlugin, createRuntime, createStdinDriver, createStdoutRenderer, createTInputHostPlugin, createTerminal, createTerminalApp, createTerminalRouter, createTextRestrictionPlugin, createTraceStore, createWheelScrollState, defaultTInputHostPlugin, detectTerminalColorCapability, formatInlineCellLine, getStdoutRendererMetrics, lintJsonText, normalizeNewlines, padEndByCells, parseAnsiSgr, readEventLog, resolveUserPath, rgbToAnsi256, sanitizeInlineText, sanitizeTextBlock, sliceByCells, sliceByCellsRange, spaces, suggestPaths, textCellWidth, truecolorBgOpen, truecolorFgOpen, useLayout, useRenderNode, useRoute, useRouter, useTerminal, useTerminalNode, useTerminalRuntime, useVisibility, wrapByCells, writeEventLog, writeSnapshot };
1353
+ export { ANSI16_COLORS, ANSI256_COLORS, ANSI8_COLORS, AnsiColorName, BufferSnapshot, Cell, CellMetrics, CliEventManager, ClipboardApi, CreateTerminalAppOptions, DomRenderer, EventManager, FsDirEntry, FsEntryKind, FsStat, LayoutContext, MentionPathProvider, MentionSuggestionProvider, PathPickMode, PathPickerProvider, PathSuggestion, PromptMentionPluginOptions, PromptSuggestion, RafApi, Rect, Runtime, RuntimeEnv, SGR_RESET, StdinDriver, StdoutRenderer, StdoutRendererMetrics, Style, SuggestPathsResult, TAnchor, TBox, TDebugOverlay, TDialog, TERMINAL_RENDER_PLANES, TFlow, TInput, TInputBox, TInputHostAdapter, TInputPlugin, TInputPluginContext, TInputPluginsContextKey, TJsonEditor, TList, TMultilineModal, TPathPicker, TRenderLayer, TRenderPlane, TRouterView, TSelect, TText, TTransition, TView, Terminal, TerminalApp, TerminalBaseEvent, TerminalColorCapability, TerminalColorLevel, TerminalColorMode, TerminalCommitEvent, TerminalContext, TerminalDebugNode, TerminalEventHandlerMap, TerminalEventMap, TerminalEventRecord, TerminalEventType, TerminalInputEvent, TerminalKeyboardEvent, TerminalNode, TerminalPointerEvent, TerminalProvider, TerminalRenderPlane, TerminalRenderPlanes, TerminalResizeEvent, TerminalRoute, TerminalRouteLocationRaw, TerminalRouteRecord, TerminalRouter, TerminalRuntime, TerminalRuntimeHandle, TerminalScheduler, TerminalSchedulerInvalidateOptions, TerminalScrollOperation, TimerApi, TraceRecord, TraceStore, ansiColors, ansiStyles, applyWheelScroll, charCellWidth, clearTextCaches, createCliEventManager, createDefaultTInputHostAdapter, createDomRenderer, createEventManager, createNodeMentionPathProvider, createNodePathPickerProvider, createPromptMentionPlugin, createRuntime, createStdinDriver, createStdoutRenderer, createTInputHostPlugin, createTerminal, createTerminalApp, createTerminalRouter, createTextRestrictionPlugin, createTraceStore, createWheelScrollState, defaultTInputHostPlugin, detectTerminalColorCapability, formatInlineCellLine, getCliLatencyProfiler, getStdoutRendererMetrics, lintJsonText, normalizeNewlines, padEndByCells, parseAnsiSgr, readEventLog, resolveUserPath, rgbToAnsi256, sanitizeInlineText, sanitizeTextBlock, sliceByCells, sliceByCellsRange, spaces, suggestPaths, textCellWidth, truecolorBgOpen, truecolorFgOpen, useLayout, useRenderNode, useRoute, useRouter, useTerminal, useTerminalNode, useTerminalRuntime, useVisibility, wrapByCells, writeEventLog, writeSnapshot };