@interopio/workspaces-api 3.2.2 → 3.3.0

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.
@@ -1,940 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- /* eslint-disable @typescript-eslint/no-use-before-define */
3
- import { Decoder, object, boolean, string, optional, array, oneOf, constant, lazy, number, anyJson, intersection } from "decoder-validate";
4
- import {
5
- IsWindowInSwimlaneResult,
6
- WorkspaceSnapshotResult,
7
- ChildSnapshotResult,
8
- WorkspaceConfigResult,
9
- FrameSummaryResult,
10
- WorkspaceCreateConfigProtocol,
11
- GetFrameSummaryConfig,
12
- WorkspaceSummaryResult,
13
- LayoutSummariesResult,
14
- LayoutSummary,
15
- OpenWorkspaceConfig,
16
- FrameSummariesResult,
17
- WorkspaceSummariesResult,
18
- ExportedLayoutsResult,
19
- DeleteLayoutConfig,
20
- SimpleItemConfig,
21
- ResizeItemConfig,
22
- MoveFrameConfig,
23
- FrameSnapshotResult,
24
- BaseChildSnapshotConfig,
25
- ParentSnapshotConfig,
26
- SwimlaneWindowSnapshotConfig,
27
- SimpleWindowOperationSuccessResult,
28
- SetItemTitleConfig,
29
- MoveWindowConfig,
30
- AddWindowConfig,
31
- AddContainerConfig,
32
- AddItemResult,
33
- BundleWorkspaceConfig,
34
- WorkspaceStreamData,
35
- FrameStreamData,
36
- ContainerStreamData,
37
- ContainerSummaryResult,
38
- WindowStreamData,
39
- PingResult,
40
- FrameStateConfig,
41
- FrameStateResult,
42
- LockWorkspaceConfig,
43
- LockWindowConfig,
44
- LockContainerConfig,
45
- SubParentSnapshotResult,
46
- WindowSnapshotResult,
47
- LockRowConfig,
48
- LockColumnConfig,
49
- LockGroupConfig,
50
- FrameBoundsResult,
51
- GetWorkspaceIconResult,
52
- PinWorkspaceConfig,
53
- SetWorkspaceIconConfig,
54
- FrameInitializationConfigProtocol,
55
- WorkspaceSelector,
56
- ShortcutClickedData,
57
- ShortcutConfig,
58
- FrameSnapshotConfig,
59
- FrameBounds,
60
- SetMaximizationBoundaryConfig,
61
- LoadingAnimationConfig,
62
- GetPlatformFrameIdResult,
63
- ItemBundleConfig,
64
- OperationCheckConfig,
65
- OperationCheckResult
66
- } from "../types/protocol";
67
- import { WorkspaceEventType, WorkspaceEventAction } from "../types/subscription";
68
- import { IOConnectWorkspaces } from "../../workspaces";
69
-
70
- export const nonEmptyStringDecoder: Decoder<string> = string().where((s) => s.length > 0, "Expected a non-empty string");
71
- export const nonNegativeNumberDecoder: Decoder<number> = number().where((num) => num >= 0, "Expected a non-negative number");
72
- export const positiveNumberDecoder: Decoder<number> = number().where((num) => num > 0, "Expected a positive number");
73
-
74
-
75
- export const isWindowInSwimlaneResultDecoder: Decoder<IsWindowInSwimlaneResult> = object({
76
- inWorkspace: boolean()
77
- });
78
-
79
- export const allParentDecoder: Decoder<"workspace" | "row" | "column" | "group"> = oneOf<"workspace" | "row" | "column" | "group">(
80
- constant("workspace"),
81
- constant("row"),
82
- constant("column"),
83
- constant("group")
84
- );
85
-
86
- export const subParentDecoder: Decoder<"row" | "column" | "group"> = oneOf<"row" | "column" | "group">(
87
- constant("row"),
88
- constant("column"),
89
- constant("group")
90
- );
91
-
92
- export const frameStateDecoder: Decoder<"maximized" | "minimized" | "normal"> = oneOf<"maximized" | "minimized" | "normal">(
93
- constant("maximized"),
94
- constant("minimized"),
95
- constant("normal")
96
- );
97
-
98
- export const loadingAnimationTypeDecoder: Decoder<"workspace"> = oneOf<"workspace">(
99
- constant("workspace")
100
- );
101
-
102
- export const checkThrowCallback = (callback: unknown, allowUndefined?: boolean): void => {
103
- const argumentType = typeof callback;
104
-
105
- if (allowUndefined && argumentType !== "function" && argumentType !== "undefined") {
106
- throw new Error(`Provided argument must be either undefined or of type function, provided: ${argumentType}`);
107
- }
108
-
109
- if (!allowUndefined && argumentType !== "function") {
110
- throw new Error(`Provided argument must be of type function, provided: ${argumentType}`);
111
- }
112
- };
113
-
114
- export const workspaceBuilderCreateConfigDecoder: Decoder<IOConnectWorkspaces.WorkspaceCreateConfig> = optional(object({
115
- saveLayout: optional(boolean())
116
- }));
117
-
118
- export const deleteLayoutConfigDecoder: Decoder<DeleteLayoutConfig> = object({
119
- name: nonEmptyStringDecoder
120
- });
121
-
122
- export const windowDefinitionConfigDecoder: Decoder<IOConnectWorkspaces.WorkspaceWindowDefinitionConfig> = object({
123
- minWidth: optional(number()),
124
- maxWidth: optional(number()),
125
- minHeight: optional(number()),
126
- maxHeight: optional(number()),
127
- allowExtract: optional(boolean()),
128
- allowReorder: optional(boolean()),
129
- showCloseButton: optional(boolean())
130
- });
131
-
132
- export const groupDefinitionConfigDecoder: Decoder<IOConnectWorkspaces.GroupDefinitionConfig> = object({
133
- minWidth: optional(number()),
134
- maxWidth: optional(number()),
135
- minHeight: optional(number()),
136
- maxHeight: optional(number()),
137
- allowExtract: optional(boolean()),
138
- allowReorder: optional(boolean()),
139
- allowDrop: optional(boolean()),
140
- allowDropHeader: optional(boolean()),
141
- allowDropLeft: optional(boolean()),
142
- allowDropRight: optional(boolean()),
143
- allowDropTop: optional(boolean()),
144
- allowDropBottom: optional(boolean()),
145
- showMaximizeButton: optional(boolean()),
146
- showEjectButton: optional(boolean()),
147
- showAddWindowButton: optional(boolean())
148
- });
149
-
150
- export const rowDefinitionConfigDecoder: Decoder<IOConnectWorkspaces.RowDefinitionConfig> = object({
151
- minHeight: optional(number()),
152
- maxHeight: optional(number()),
153
- allowDrop: optional(boolean()),
154
- allowSplitters: optional(boolean()),
155
- isPinned: optional(boolean()),
156
- maximizationBoundary: optional(boolean())
157
- });
158
-
159
- export const columnDefinitionConfigDecoder: Decoder<IOConnectWorkspaces.ColumnDefinitionConfig> = object({
160
- minWidth: optional(number()),
161
- maxWidth: optional(number()),
162
- allowDrop: optional(boolean()),
163
- allowSplitters: optional(boolean()),
164
- isPinned: optional(boolean()),
165
- maximizationBoundary: optional(boolean())
166
- });
167
-
168
- export const swimlaneWindowDefinitionDecoder: Decoder<IOConnectWorkspaces.WorkspaceWindowDefinition> = object({
169
- type: optional(constant("window")),
170
- appName: optional(nonEmptyStringDecoder),
171
- windowId: optional(nonEmptyStringDecoder),
172
- context: optional(anyJson()),
173
- config: optional(windowDefinitionConfigDecoder)
174
- });
175
-
176
- export const strictSwimlaneWindowDefinitionDecoder: Decoder<IOConnectWorkspaces.WorkspaceWindowDefinition> = object({
177
- type: constant("window"),
178
- appName: optional(nonEmptyStringDecoder),
179
- windowId: optional(nonEmptyStringDecoder),
180
- context: optional(anyJson()),
181
- config: optional(windowDefinitionConfigDecoder)
182
- });
183
-
184
- export const parentDefinitionDecoder: Decoder<IOConnectWorkspaces.BoxDefinition> = optional(object({
185
- type: optional(subParentDecoder),
186
- children: optional(
187
- lazy(() => array(
188
- oneOf<IOConnectWorkspaces.WorkspaceWindowDefinition | IOConnectWorkspaces.BoxDefinition>(
189
- swimlaneWindowDefinitionDecoder,
190
- parentDefinitionDecoder
191
- )
192
- ))
193
- ),
194
- config: optional(anyJson())
195
- }));
196
-
197
-
198
- export const strictColumnDefinitionDecoder: Decoder<IOConnectWorkspaces.BoxDefinition> = object({
199
- type: constant("column"),
200
- children: optional(
201
- lazy(() => array(
202
- oneOf<IOConnectWorkspaces.WorkspaceWindowDefinition | IOConnectWorkspaces.BoxDefinition>(
203
- strictSwimlaneWindowDefinitionDecoder,
204
- strictParentDefinitionDecoder
205
- )
206
- ))
207
- ),
208
- config: optional(columnDefinitionConfigDecoder)
209
- });
210
-
211
- export const strictRowDefinitionDecoder: Decoder<IOConnectWorkspaces.BoxDefinition> = object({
212
- type: constant("row"),
213
- children: optional(
214
- lazy(() => array(
215
- oneOf<IOConnectWorkspaces.WorkspaceWindowDefinition | IOConnectWorkspaces.BoxDefinition>(
216
- strictSwimlaneWindowDefinitionDecoder,
217
- strictParentDefinitionDecoder
218
- )
219
- ))
220
- ),
221
- config: optional(rowDefinitionConfigDecoder)
222
- });
223
-
224
- export const strictGroupDefinitionDecoder: Decoder<IOConnectWorkspaces.BoxDefinition> = object({
225
- type: constant("group"),
226
- children: optional(
227
- lazy(() => array(
228
- oneOf<IOConnectWorkspaces.WorkspaceWindowDefinition | IOConnectWorkspaces.BoxDefinition>(
229
- strictSwimlaneWindowDefinitionDecoder,
230
- strictParentDefinitionDecoder
231
- )
232
- ))
233
- ),
234
- config: optional(groupDefinitionConfigDecoder)
235
- });
236
-
237
- export const strictParentDefinitionDecoder: Decoder<IOConnectWorkspaces.BoxDefinition> = oneOf(strictGroupDefinitionDecoder, strictColumnDefinitionDecoder, strictRowDefinitionDecoder);
238
-
239
- export const stateDecoder: Decoder<"maximized" | "normal"> = oneOf<"maximized" | "normal">(
240
- (string().where((s) => s.toLowerCase() === "maximized", "Expected a case insensitive variation of 'maximized'") as Decoder<"maximized">),
241
- (string().where((s) => s.toLowerCase() === "normal", "Expected a case insensitive variation of 'normal'") as Decoder<"normal">)
242
- );
243
-
244
- export const newFrameConfigDecoder: Decoder<IOConnectWorkspaces.NewFrameConfig> = object({
245
- bounds: optional(object({
246
- left: optional(number()),
247
- top: optional(number()),
248
- width: optional(nonNegativeNumberDecoder),
249
- height: optional(nonNegativeNumberDecoder)
250
- })),
251
- frameId: optional(nonEmptyStringDecoder)
252
- });
253
-
254
- export const loadingStrategyDecoder: Decoder<IOConnectWorkspaces.LoadingStrategy> = oneOf<"direct" | "delayed" | "lazy">(
255
- constant("direct"),
256
- constant("delayed"),
257
- constant("lazy")
258
- );
259
-
260
- export const restoreWorkspaceConfigDecoder: Decoder<IOConnectWorkspaces.RestoreWorkspaceConfig> = optional(object({
261
- app: optional(nonEmptyStringDecoder),
262
- context: optional(anyJson()),
263
- loadingStrategy: optional(loadingStrategyDecoder),
264
- title: optional(nonEmptyStringDecoder),
265
- reuseWorkspaceId: optional(nonEmptyStringDecoder),
266
- frameId: optional(nonEmptyStringDecoder),
267
- applicationName: optional(nonEmptyStringDecoder),
268
- lockdown: optional(boolean()),
269
- activateFrame: optional(boolean()),
270
- newFrame: optional(oneOf<IOConnectWorkspaces.NewFrameConfig | boolean>(
271
- newFrameConfigDecoder,
272
- boolean()
273
- )),
274
- noTabHeader: optional(boolean()),
275
- inMemoryLayout: optional(boolean()),
276
- icon: optional(nonEmptyStringDecoder),
277
- isPinned: optional(boolean()),
278
- isSelected: optional(boolean()),
279
- positionIndex: optional(nonNegativeNumberDecoder),
280
- allowSystemHibernation: optional(boolean())
281
- }));
282
-
283
- export const openWorkspaceConfigDecoder: Decoder<OpenWorkspaceConfig> = object({
284
- name: nonEmptyStringDecoder,
285
- restoreOptions: optional(restoreWorkspaceConfigDecoder)
286
- });
287
-
288
- export const workspaceDefinitionDecoder: Decoder<IOConnectWorkspaces.WorkspaceDefinition> = object({
289
- children: optional(array(oneOf<IOConnectWorkspaces.WorkspaceWindowDefinition | IOConnectWorkspaces.BoxDefinition>(
290
- swimlaneWindowDefinitionDecoder,
291
- strictParentDefinitionDecoder
292
- ))),
293
- context: optional(anyJson()),
294
- config: optional(object({
295
- title: optional(nonEmptyStringDecoder),
296
- position: optional(nonNegativeNumberDecoder),
297
- isFocused: optional(boolean()),
298
- noTabHeader: optional(boolean()),
299
- reuseWorkspaceId: optional(nonEmptyStringDecoder),
300
- loadingStrategy: optional(loadingStrategyDecoder),
301
- allowDrop: optional(boolean()),
302
- allowDropLeft: optional(boolean()),
303
- allowDropTop: optional(boolean()),
304
- allowDropRight: optional(boolean()),
305
- allowDropBottom: optional(boolean()),
306
- allowSystemHibernation: optional(boolean()),
307
- allowExtract: optional(boolean()),
308
- allowWindowReorder: optional(boolean()),
309
- showSaveButton: optional(boolean()),
310
- allowWorkspaceTabReorder: optional(boolean()),
311
- allowWorkspaceTabExtract: optional(boolean()),
312
- showCloseButton: optional(boolean()),
313
- allowSplitters: optional(boolean()),
314
- showWindowCloseButtons: optional(boolean()),
315
- showEjectButtons: optional(boolean()),
316
- showAddWindowButtons: optional(boolean()),
317
- icon: optional(nonEmptyStringDecoder),
318
- isPinned: optional(boolean()),
319
- isSelected: optional(boolean()),
320
- positionIndex: optional(nonNegativeNumberDecoder)
321
- })),
322
- frame: optional(object({
323
- activate: optional(boolean()),
324
- reuseFrameId: optional(nonEmptyStringDecoder),
325
- applicationName: optional(nonEmptyStringDecoder),
326
- newFrame: optional(oneOf<boolean | IOConnectWorkspaces.NewFrameConfig>(
327
- boolean(),
328
- newFrameConfigDecoder
329
- ))
330
- }))
331
- });
332
-
333
- export const workspaceSelectorDecoder: Decoder<WorkspaceSelector> = object({
334
- workspaceId: nonEmptyStringDecoder
335
- });
336
-
337
- export const restoreWorkspaceDefinitionDecoder: Decoder<IOConnectWorkspaces.RestoreWorkspaceDefinition> = object({
338
- name: nonEmptyStringDecoder,
339
- restoreOptions: optional(restoreWorkspaceConfigDecoder)
340
- });
341
-
342
- export const emptyFrameDefinitionDecoder: Decoder<IOConnectWorkspaces.EmptyFrameDefinition> = optional(object({
343
- applicationName: optional(string()),
344
- frameConfig: optional(newFrameConfigDecoder),
345
- context: optional(object()),
346
- layoutComponentId: optional(nonEmptyStringDecoder)
347
- }));
348
-
349
- export const frameInitConfigDecoder: Decoder<IOConnectWorkspaces.FrameInitializationConfig> = object({
350
- workspaces: array(oneOf<IOConnectWorkspaces.WorkspaceDefinition | IOConnectWorkspaces.RestoreWorkspaceDefinition>(
351
- optional(workspaceDefinitionDecoder),
352
- optional(restoreWorkspaceDefinitionDecoder)
353
- ))
354
- });
355
-
356
- export const frameInitProtocolConfigDecoder: Decoder<FrameInitializationConfigProtocol> = object({
357
- frameId: nonEmptyStringDecoder,
358
- workspaces: array(oneOf<IOConnectWorkspaces.WorkspaceDefinition | IOConnectWorkspaces.RestoreWorkspaceDefinition>(
359
- workspaceDefinitionDecoder,
360
- restoreWorkspaceDefinitionDecoder
361
- ))
362
- });
363
-
364
- export const builderConfigDecoder: Decoder<IOConnectWorkspaces.BuilderConfig> = object({
365
- type: allParentDecoder,
366
- definition: optional(oneOf<IOConnectWorkspaces.WorkspaceDefinition | IOConnectWorkspaces.BoxDefinition>(
367
- workspaceDefinitionDecoder,
368
- parentDefinitionDecoder
369
- ))
370
- });
371
-
372
- export const workspaceCreateConfigDecoder: Decoder<WorkspaceCreateConfigProtocol> = intersection(
373
- workspaceDefinitionDecoder,
374
- object({
375
- saveConfig: optional(object({
376
- saveLayout: optional(boolean())
377
- }))
378
- })
379
- );
380
-
381
- export const getFrameSummaryConfigDecoder: Decoder<GetFrameSummaryConfig> = object({
382
- itemId: nonEmptyStringDecoder
383
- });
384
-
385
- export const frameInitializationContextDecoder: Decoder<IOConnectWorkspaces.FrameInitializationContext> = object({
386
- context: optional(object())
387
- });
388
-
389
- export const frameSummaryDecoder: Decoder<FrameSummaryResult> = object({
390
- id: nonEmptyStringDecoder,
391
- isFocused: optional(boolean()),
392
- isInitialized: optional(boolean()),
393
- initializationContext: optional(frameInitializationContextDecoder)
394
- });
395
-
396
- export const containerSummaryDecoder: Decoder<IOConnectWorkspaces.BoxSummary> = object({
397
- type: subParentDecoder,
398
- id: nonEmptyStringDecoder,
399
- frameId: nonEmptyStringDecoder,
400
- workspaceId: nonEmptyStringDecoder,
401
- positionIndex: number()
402
- });
403
-
404
- export const eventTypeDecoder: Decoder<WorkspaceEventType> = oneOf<"frame" | "workspace" | "container" | "window">(
405
- constant("frame"),
406
- constant("workspace"),
407
- constant("container"),
408
- constant("window")
409
- );
410
-
411
- export const streamRequestArgumentsDecoder: Decoder<{ type: WorkspaceEventType; branch: string }> = object({
412
- type: eventTypeDecoder,
413
- branch: nonEmptyStringDecoder
414
- });
415
-
416
- export const workspaceEventActionDecoder: Decoder<WorkspaceEventAction> = oneOf<"opened" | "closing" | "closed" | "focus" | "added" | "loaded" | "removed" | "childrenUpdate" | "containerChange" | "maximized" | "restored" | "minimized" | "normal" | "selected" | "lock-configuration-changed" | "hibernated" | "resumed">(
417
- constant("opened"),
418
- constant("closing"),
419
- constant("closed"),
420
- constant("focus"),
421
- constant("added"),
422
- constant("loaded"),
423
- constant("removed"),
424
- constant("childrenUpdate"),
425
- constant("containerChange"),
426
- constant("maximized"),
427
- constant("restored"),
428
- constant("minimized"),
429
- constant("normal"),
430
- constant("selected"),
431
- constant("lock-configuration-changed"),
432
- constant("hibernated"),
433
- constant("resumed")
434
- );
435
-
436
- export const workspaceConfigResultDecoder: Decoder<WorkspaceConfigResult> = object({
437
- frameId: nonEmptyStringDecoder,
438
- title: nonEmptyStringDecoder,
439
- positionIndex: nonNegativeNumberDecoder,
440
- name: nonEmptyStringDecoder,
441
- layoutName: optional(nonEmptyStringDecoder),
442
- isHibernated: optional(boolean()),
443
- isSelected: optional(boolean()),
444
- allowDrop: optional(boolean()),
445
- allowSystemHibernation: optional(boolean()),
446
- allowExtract: optional(boolean()),
447
- allowWindowReorder: optional(boolean()),
448
- allowSplitters: optional(boolean()),
449
- showCloseButton: optional(boolean()),
450
- showSaveButton: optional(boolean()),
451
- allowWorkspaceTabReorder: optional(boolean()),
452
- allowWorkspaceTabExtract: optional(boolean()),
453
- allowDropLeft: optional(boolean()),
454
- allowDropTop: optional(boolean()),
455
- allowDropRight: optional(boolean()),
456
- allowDropBottom: optional(boolean()),
457
- minWidth: optional(number()),
458
- maxWidth: optional(number()),
459
- minHeight: optional(number()),
460
- maxHeight: optional(number()),
461
- showAddWindowButtons: optional(boolean()),
462
- showEjectButtons: optional(boolean()),
463
- showWindowCloseButtons: optional(boolean()),
464
- widthInPx: optional(number()),
465
- heightInPx: optional(number()),
466
- isPinned: optional(boolean()),
467
- });
468
-
469
- // todo: remove number positionIndex when fixed
470
- export const baseChildSnapshotConfigDecoder: Decoder<BaseChildSnapshotConfig> = object({
471
- frameId: nonEmptyStringDecoder,
472
- workspaceId: nonEmptyStringDecoder,
473
- positionIndex: number(),
474
- minWidth: optional(number()),
475
- maxWidth: optional(number()),
476
- minHeight: optional(number()),
477
- maxHeight: optional(number())
478
- });
479
-
480
- export const parentSnapshotConfigDecoder: Decoder<ParentSnapshotConfig> = anyJson();
481
-
482
- export const swimlaneWindowSnapshotConfigDecoder: Decoder<SwimlaneWindowSnapshotConfig> = intersection(
483
- baseChildSnapshotConfigDecoder,
484
- object({
485
- windowId: optional(nonEmptyStringDecoder),
486
- isMaximized: optional(boolean()),
487
- isFocused: boolean(),
488
- isSelected: optional(boolean()),
489
- title: optional(string()),
490
- appName: optional(nonEmptyStringDecoder),
491
- allowExtract: optional(boolean()),
492
- allowReorder: optional(boolean()),
493
- showCloseButton: optional(boolean()),
494
- minWidth: optional(number()),
495
- minHeight: optional(number()),
496
- maxWidth: optional(number()),
497
- maxHeight: optional(number()),
498
- widthInPx: optional(number()),
499
- heightInPx: optional(number()),
500
- context: optional(anyJson())
501
- })
502
- ) as any;
503
-
504
- export const customWorkspaceSubParentSnapshotDecoder: Decoder<SubParentSnapshotResult> = object({
505
- id: optional(nonEmptyStringDecoder),
506
- config: parentSnapshotConfigDecoder,
507
- children: optional(lazy(() => array(customWorkspaceChildSnapshotDecoder))),
508
- type: oneOf<"row" | "column" | "group">(
509
- constant("row"),
510
- constant("column"),
511
- constant("group")
512
- )
513
- });
514
-
515
- export const customWorkspaceWindowSnapshotDecoder: Decoder<WindowSnapshotResult> = object({
516
- id: optional(nonEmptyStringDecoder),
517
- config: swimlaneWindowSnapshotConfigDecoder,
518
- type: constant("window")
519
- });
520
-
521
- export const customWorkspaceChildSnapshotDecoder: Decoder<ChildSnapshotResult> = oneOf<WindowSnapshotResult | SubParentSnapshotResult>(
522
- customWorkspaceWindowSnapshotDecoder,
523
- customWorkspaceSubParentSnapshotDecoder);
524
-
525
- export const childSnapshotResultDecoder: Decoder<ChildSnapshotResult> = customWorkspaceChildSnapshotDecoder;
526
-
527
- export const workspaceSnapshotResultDecoder: Decoder<WorkspaceSnapshotResult> = object({
528
- id: nonEmptyStringDecoder,
529
- config: workspaceConfigResultDecoder,
530
- children: array(childSnapshotResultDecoder),
531
- frameSummary: frameSummaryDecoder,
532
- context: optional(anyJson())
533
- });
534
-
535
- export const windowLayoutItemDecoder: Decoder<IOConnectWorkspaces.WindowLayoutItem> = object({
536
- type: constant("window"),
537
- config: object({
538
- appName: nonEmptyStringDecoder,
539
- windowId: optional(nonEmptyStringDecoder),
540
- context: optional(anyJson()),
541
- url: optional(nonEmptyStringDecoder),
542
- title: optional(string()),
543
- allowExtract: optional(boolean()),
544
- allowReorder: optional(boolean()),
545
- showCloseButton: optional(boolean()),
546
- minWidth: optional(number()),
547
- minHeight: optional(number()),
548
- maxWidth: optional(number()),
549
- maxHeight: optional(number()),
550
- isMaximized: optional(boolean())
551
- })
552
- });
553
-
554
- export const groupLayoutItemDecoder: Decoder<IOConnectWorkspaces.GroupLayoutItem> = object({
555
- type: constant("group"),
556
- config: anyJson(),
557
- children: array(oneOf<IOConnectWorkspaces.WindowLayoutItem>(
558
- windowLayoutItemDecoder
559
- ))
560
- });
561
-
562
- export const columnLayoutItemDecoder: Decoder<IOConnectWorkspaces.ColumnLayoutItem> = object({
563
- type: constant("column"),
564
- config: anyJson(),
565
- children: array(oneOf<IOConnectWorkspaces.RowLayoutItem | IOConnectWorkspaces.ColumnLayoutItem | IOConnectWorkspaces.GroupLayoutItem | IOConnectWorkspaces.WindowLayoutItem>(
566
- groupLayoutItemDecoder,
567
- windowLayoutItemDecoder,
568
- lazy(() => columnLayoutItemDecoder),
569
- lazy(() => rowLayoutItemDecoder)
570
- ))
571
- });
572
-
573
- export const rowLayoutItemDecoder: Decoder<IOConnectWorkspaces.RowLayoutItem> = object({
574
- type: constant("row"),
575
- config: anyJson(),
576
- children: array(oneOf<IOConnectWorkspaces.RowLayoutItem | IOConnectWorkspaces.ColumnLayoutItem | IOConnectWorkspaces.GroupLayoutItem | IOConnectWorkspaces.WindowLayoutItem>(
577
- columnLayoutItemDecoder,
578
- groupLayoutItemDecoder,
579
- windowLayoutItemDecoder,
580
- lazy(() => rowLayoutItemDecoder)
581
- ))
582
- });
583
-
584
- export const workspaceLayoutDecoder: Decoder<IOConnectWorkspaces.WorkspaceLayout> = object({
585
- name: nonEmptyStringDecoder,
586
- type: constant("Workspace"),
587
- metadata: optional(anyJson()),
588
- components: array(object({
589
- type: constant("Workspace"),
590
- application: optional(string()),
591
- state: object({
592
- config: anyJson(),
593
- context: anyJson(),
594
- children: array(oneOf<IOConnectWorkspaces.RowLayoutItem | IOConnectWorkspaces.ColumnLayoutItem | IOConnectWorkspaces.GroupLayoutItem | IOConnectWorkspaces.WindowLayoutItem>(
595
- rowLayoutItemDecoder,
596
- columnLayoutItemDecoder,
597
- groupLayoutItemDecoder,
598
- windowLayoutItemDecoder
599
- ))
600
- })
601
- }))
602
- });
603
-
604
- export const workspacesImportLayoutDecoder: Decoder<{ layout: IOConnectWorkspaces.WorkspaceLayout; mode: "replace" | "merge" }> = object({
605
- layout: workspaceLayoutDecoder,
606
- mode: oneOf<"replace" | "merge">(
607
- constant("replace"),
608
- constant("merge")
609
- )
610
- });
611
-
612
- export const workspacesImportLayoutsDecoder: Decoder<{ layouts: IOConnectWorkspaces.WorkspaceLayout[]; mode: "replace" | "merge" }> = object({
613
- layouts: array(workspaceLayoutDecoder),
614
- mode: oneOf<"replace" | "merge">(
615
- constant("replace"),
616
- constant("merge")
617
- )
618
- });
619
-
620
- export const exportedLayoutsResultDecoder: Decoder<ExportedLayoutsResult> = object({
621
- layouts: array(workspaceLayoutDecoder)
622
- });
623
-
624
- export const frameSummaryResultDecoder: Decoder<FrameSummaryResult> = object({
625
- id: nonEmptyStringDecoder,
626
- isFocused: optional(boolean()),
627
- isInitialized: optional(boolean()),
628
- initializationContext: optional(frameInitializationContextDecoder)
629
- });
630
-
631
- export const frameSummariesResultDecoder: Decoder<FrameSummariesResult> = object({
632
- summaries: array(frameSummaryResultDecoder)
633
- });
634
-
635
- export const workspaceSummaryResultDecoder: Decoder<WorkspaceSummaryResult> = object({
636
- id: nonEmptyStringDecoder,
637
- config: workspaceConfigResultDecoder
638
- });
639
-
640
- export const workspaceSummariesResultDecoder: Decoder<WorkspaceSummariesResult> = object({
641
- summaries: array(workspaceSummaryResultDecoder)
642
- });
643
-
644
- export const frameSnapshotResultDecoder: Decoder<FrameSnapshotResult> = object({
645
- id: nonEmptyStringDecoder,
646
- config: anyJson(),
647
- workspaces: array(workspaceSnapshotResultDecoder)
648
- });
649
-
650
- export const layoutSummaryDecoder: Decoder<LayoutSummary> = object({
651
- name: nonEmptyStringDecoder,
652
- applicationName: optional(string())
653
- });
654
-
655
- export const layoutSummariesDecoder: Decoder<LayoutSummariesResult> = object({
656
- summaries: array(layoutSummaryDecoder)
657
- });
658
-
659
- export const simpleWindowOperationSuccessResultDecoder: Decoder<SimpleWindowOperationSuccessResult> = object({
660
- windowId: nonEmptyStringDecoder
661
- });
662
-
663
- export const voidResultDecoder: Decoder<{}> = anyJson();
664
-
665
- export const frameStateResultDecoder: Decoder<FrameStateResult> = object({
666
- state: frameStateDecoder
667
- });
668
-
669
- export const frameBoundsDecoder: Decoder<FrameBounds> = object({
670
- top: number(),
671
- left: number(),
672
- width: nonNegativeNumberDecoder,
673
- height: nonNegativeNumberDecoder
674
- });
675
-
676
- export const frameBoundsResultDecoder: Decoder<FrameBoundsResult> = object({
677
- bounds: frameBoundsDecoder
678
- });
679
-
680
- export const getWorkspaceIconResultDecoder: Decoder<GetWorkspaceIconResult> = object({
681
- icon: optional(nonEmptyStringDecoder)
682
- });
683
-
684
- export const getPlatformFrameIdResultDecoder: Decoder<GetPlatformFrameIdResult> = object({
685
- id: optional(nonEmptyStringDecoder)
686
- });
687
-
688
- export const operationCheckResultDecoder: Decoder<OperationCheckResult> = object({
689
- isSupported: boolean()
690
- });
691
-
692
- export const resizeConfigDecoder: Decoder<IOConnectWorkspaces.ResizeConfig> = object({
693
- width: optional(positiveNumberDecoder),
694
- height: optional(positiveNumberDecoder),
695
- relative: optional(boolean())
696
- });
697
-
698
- export const moveConfigDecoder: Decoder<IOConnectWorkspaces.MoveConfig> = object({
699
- top: optional(number()),
700
- left: optional(number()),
701
- relative: optional(boolean())
702
- });
703
-
704
- export const simpleItemConfigDecoder: Decoder<SimpleItemConfig> = object({
705
- itemId: nonEmptyStringDecoder
706
- });
707
-
708
- export const frameSnapshotConfigDecoder: Decoder<FrameSnapshotConfig> = object({
709
- itemId: nonEmptyStringDecoder,
710
- excludeIds: optional(boolean())
711
- });
712
-
713
- export const frameStateConfigDecoder: Decoder<FrameStateConfig> = object({
714
- frameId: nonEmptyStringDecoder,
715
- requestedState: frameStateDecoder
716
- });
717
-
718
- export const setItemTitleConfigDecoder: Decoder<SetItemTitleConfig> = object({
719
- itemId: nonEmptyStringDecoder,
720
- title: nonEmptyStringDecoder
721
- });
722
-
723
- export const moveWindowConfigDecoder: Decoder<MoveWindowConfig> = object({
724
- itemId: nonEmptyStringDecoder,
725
- containerId: nonEmptyStringDecoder
726
- });
727
-
728
- export const resizeItemConfigDecoder: Decoder<ResizeItemConfig> = intersection(
729
- simpleItemConfigDecoder,
730
- resizeConfigDecoder
731
- );
732
-
733
- export const setMaximizationBoundaryConfigDecoder: Decoder<SetMaximizationBoundaryConfig> = object({
734
- itemId: nonEmptyStringDecoder,
735
- enabled: boolean()
736
- });
737
-
738
- export const moveFrameConfigDecoder: Decoder<MoveFrameConfig> = intersection(
739
- simpleItemConfigDecoder,
740
- moveConfigDecoder
741
- );
742
-
743
- export const simpleParentDecoder: Decoder<{ id: string; type: "row" | "column" | "group" }> = object({
744
- id: nonEmptyStringDecoder,
745
- type: subParentDecoder
746
- });
747
-
748
- export const addWindowConfigDecoder: Decoder<AddWindowConfig> = object({
749
- definition: swimlaneWindowDefinitionDecoder,
750
- parentId: nonEmptyStringDecoder,
751
- parentType: allParentDecoder
752
- });
753
-
754
- export const addContainerConfigDecoder: Decoder<AddContainerConfig> = object({
755
- definition: strictParentDefinitionDecoder,
756
- parentId: nonEmptyStringDecoder,
757
- parentType: allParentDecoder
758
- });
759
-
760
- export const addItemResultDecoder: Decoder<AddItemResult> = object({
761
- itemId: nonEmptyStringDecoder,
762
- windowId: optional(nonEmptyStringDecoder)
763
- });
764
-
765
- export const pingResultDecoder: Decoder<PingResult> = object({
766
- live: boolean()
767
- });
768
-
769
- export const bundleWorkspaceConfigDecoder: Decoder<BundleWorkspaceConfig> = object({
770
- type: oneOf<"row" | "column">(
771
- constant("row"),
772
- constant("column")
773
- ),
774
- workspaceId: nonEmptyStringDecoder
775
- });
776
-
777
- export const bundleItemConfigDecoder: Decoder<ItemBundleConfig> = object({
778
- type: oneOf<"row" | "column">(
779
- constant("row"),
780
- constant("column")
781
- ),
782
- itemId: nonEmptyStringDecoder
783
- });
784
-
785
- export const containerSummaryResultDecoder: Decoder<ContainerSummaryResult> = object({
786
- itemId: nonEmptyStringDecoder,
787
- config: parentSnapshotConfigDecoder
788
- });
789
-
790
- export const frameStreamDataDecoder: Decoder<FrameStreamData> = object({
791
- frameSummary: frameSummaryDecoder,
792
- frameBounds: optional(frameBoundsDecoder)
793
- });
794
-
795
- export const workspaceStreamDataDecoder: Decoder<WorkspaceStreamData> = object({
796
- workspaceSummary: workspaceSummaryResultDecoder,
797
- frameSummary: frameSummaryDecoder,
798
- workspaceSnapshot: optional(workspaceSnapshotResultDecoder),
799
- frameBounds: optional(frameBoundsDecoder)
800
- });
801
-
802
- export const containerStreamDataDecoder: Decoder<ContainerStreamData> = object({
803
- containerSummary: containerSummaryResultDecoder
804
- });
805
-
806
- export const windowStreamDataDecoder: Decoder<WindowStreamData> = object({
807
- windowSummary: object({
808
- itemId: nonEmptyStringDecoder,
809
- parentId: nonEmptyStringDecoder,
810
- config: swimlaneWindowSnapshotConfigDecoder
811
- })
812
- });
813
-
814
- export const workspaceLayoutSaveConfigDecoder: Decoder<IOConnectWorkspaces.WorkspaceLayoutSaveConfig> = object({
815
- name: nonEmptyStringDecoder,
816
- workspaceId: nonEmptyStringDecoder,
817
- saveContext: optional(boolean()),
818
- metadata: optional(object())
819
- });
820
-
821
- export const workspaceLockConfigDecoder: Decoder<IOConnectWorkspaces.WorkspaceLockConfig> = object({
822
- allowDrop: optional(boolean()),
823
- allowDropLeft: optional(boolean()),
824
- allowDropTop: optional(boolean()),
825
- allowDropRight: optional(boolean()),
826
- allowDropBottom: optional(boolean()),
827
- allowSystemHibernation: optional(boolean()),
828
- allowExtract: optional(boolean()),
829
- allowWindowReorder: optional(boolean()),
830
- allowSplitters: optional(boolean()),
831
- showCloseButton: optional(boolean()),
832
- showSaveButton: optional(boolean()),
833
- allowWorkspaceTabReorder: optional(boolean()),
834
- allowWorkspaceTabExtract: optional(boolean()),
835
- showWindowCloseButtons: optional(boolean()),
836
- showAddWindowButtons: optional(boolean()),
837
- showEjectButtons: optional(boolean()),
838
- });
839
-
840
- export const lockWorkspaceDecoder: Decoder<LockWorkspaceConfig> = object({
841
- workspaceId: nonEmptyStringDecoder,
842
- config: optional(workspaceLockConfigDecoder)
843
- });
844
-
845
- export const windowLockConfigDecoder: Decoder<IOConnectWorkspaces.WorkspaceWindowLockConfig> = object({
846
- allowExtract: optional(boolean()),
847
- allowReorder: optional(boolean()),
848
- showCloseButton: optional(boolean())
849
- });
850
-
851
- export const elementResizeConfigDecoder: Decoder<IOConnectWorkspaces.ElementResizeConfig> = object({
852
- width: optional(nonNegativeNumberDecoder),
853
- height: optional(nonNegativeNumberDecoder)
854
- });
855
-
856
- export const lockWindowDecoder: Decoder<LockWindowConfig> = object({
857
- windowPlacementId: nonEmptyStringDecoder,
858
- config: optional(windowLockConfigDecoder)
859
- });
860
-
861
- export const rowLockConfigDecoder: Decoder<IOConnectWorkspaces.RowLockConfig> = object({
862
- allowDrop: optional(boolean()),
863
- allowSplitters: optional(boolean()),
864
- });
865
-
866
- export const columnLockConfigDecoder: Decoder<IOConnectWorkspaces.ColumnLockConfig> = object({
867
- allowDrop: optional(boolean()),
868
- allowSplitters: optional(boolean()),
869
- });
870
-
871
- export const groupLockConfigDecoder: Decoder<IOConnectWorkspaces.GroupLockConfig> = object({
872
- allowExtract: optional(boolean()),
873
- allowReorder: optional(boolean()),
874
- allowDrop: optional(boolean()),
875
- allowDropLeft: optional(boolean()),
876
- allowDropRight: optional(boolean()),
877
- allowDropTop: optional(boolean()),
878
- allowDropBottom: optional(boolean()),
879
- allowDropHeader: optional(boolean()),
880
- showMaximizeButton: optional(boolean()),
881
- showEjectButton: optional(boolean()),
882
- showAddWindowButton: optional(boolean()),
883
- });
884
-
885
- export const lockRowDecoder: Decoder<LockRowConfig> = object({
886
- itemId: nonEmptyStringDecoder,
887
- type: constant("row"),
888
- config: optional(rowLockConfigDecoder)
889
- });
890
-
891
- export const lockColumnDecoder: Decoder<LockColumnConfig> = object({
892
- itemId: nonEmptyStringDecoder,
893
- type: constant("column"),
894
- config: optional(columnLockConfigDecoder)
895
- });
896
-
897
- export const lockGroupDecoder: Decoder<LockGroupConfig> = object({
898
- itemId: nonEmptyStringDecoder,
899
- type: constant("group"),
900
- config: optional(groupLockConfigDecoder)
901
- });
902
-
903
- export const lockContainerDecoder: Decoder<LockContainerConfig> = oneOf<LockGroupConfig | LockColumnConfig | LockRowConfig>(lockRowDecoder, lockColumnDecoder, lockGroupDecoder);
904
-
905
- export const pinWorkspaceDecoder: Decoder<PinWorkspaceConfig> = object({
906
- workspaceId: nonEmptyStringDecoder,
907
- icon: optional(nonEmptyStringDecoder)
908
- });
909
-
910
- export const setWorkspaceIconDecoder: Decoder<SetWorkspaceIconConfig> = object({
911
- workspaceId: nonEmptyStringDecoder,
912
- icon: optional(nonEmptyStringDecoder) // to enable the user to remove the icon from the workspace altogether
913
- });
914
-
915
- export const workspacePinOptionsDecoder: Decoder<IOConnectWorkspaces.WorkspacePinOptions> = optional(object({
916
- icon: optional(nonEmptyStringDecoder)
917
- }));
918
-
919
- export const shortcutConfigDecoder: Decoder<ShortcutConfig> = object({
920
- shortcut: nonEmptyStringDecoder,
921
- frameId: nonEmptyStringDecoder
922
- });
923
-
924
- export const shortcutClickedDataDecoder: Decoder<ShortcutClickedData> = object({
925
- shortcut: nonEmptyStringDecoder,
926
- frameId: nonEmptyStringDecoder
927
- });
928
-
929
- export const setMaximizationBoundaryAPIConfigDecoder: Decoder<IOConnectWorkspaces.SetMaximizationBoundaryConfig> = object({
930
- enabled: boolean()
931
- });
932
-
933
- export const loadingAnimationConfigDecoder: Decoder<LoadingAnimationConfig> = object({
934
- itemId: nonEmptyStringDecoder,
935
- type: loadingAnimationTypeDecoder
936
- });
937
-
938
- export const operationCheckConfigDecoder: Decoder<OperationCheckConfig> = object({
939
- operation: nonEmptyStringDecoder
940
- });