@league-of-foundry-developers/foundry-vtt-types 9.255.2 → 9.255.3

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.
@@ -25,22 +25,37 @@ declare global {
25
25
  protected _validPosition: { x: number; y: number };
26
26
 
27
27
  /**
28
- * Track the set of User entities which are currently targeting this Token
28
+ * Track the set of User documents which are currently targeting this Token
29
29
  */
30
30
  targeted: Set<User>;
31
31
 
32
32
  /**
33
- * A reference to the PointSource object which defines this vision source area of effect
33
+ * A reference to the VisionSource object which defines this vision source area of effect
34
34
  */
35
35
  vision: VisionSource;
36
36
 
37
37
  /**
38
- * A reference to the PointSource object which defines this light source area of effect
38
+ * A reference to the LightSource object which defines this light source area of effect
39
39
  */
40
40
  light: LightSource;
41
41
 
42
+ /**
43
+ * A linked ObjectHUD element which is synchronized with the location and visibility of this Token
44
+ * @defaultValue `new ObjectHUD(this);`
45
+ */
46
+ hud: Token.ObjectHUD;
47
+
48
+ /** @defaultValue `undefined` */
49
+ texture?: PIXI.Texture | null;
50
+
51
+ /** @defaultValue `undefined` */
52
+ border?: PIXI.Graphics;
53
+
54
+ /** @defaultValue `undefined` */
55
+ icon?: PIXI.Sprite;
56
+
42
57
  /** @override */
43
- static get embeddedName(): 'Token';
58
+ static embeddedName: 'Token';
44
59
 
45
60
  /**
46
61
  * Establish an initial velocity of the token based on it's direction of facing.
@@ -95,6 +110,16 @@ declare global {
95
110
  */
96
111
  get center(): ReturnType<this['getCenter']>;
97
112
 
113
+ /**
114
+ * The HTML source element for the primary Tile texture
115
+ */
116
+ get sourceElement(): HTMLImageElement | HTMLVideoElement | undefined;
117
+
118
+ /**
119
+ * Does this Tile depict an animated video texture?
120
+ */
121
+ get isVideo(): boolean;
122
+
98
123
  /**
99
124
  * An indicator for whether or not this token is currently involved in the active combat encounter.
100
125
  */
@@ -121,6 +146,11 @@ declare global {
121
146
  */
122
147
  get isVisible(): boolean;
123
148
 
149
+ /**
150
+ * The animation name used for Token movement
151
+ */
152
+ get movementAnimationName(): string;
153
+
124
154
  /**
125
155
  * Test whether the Token has sight (or blindness) at any radius
126
156
  */
@@ -155,23 +185,43 @@ declare global {
155
185
 
156
186
  /**
157
187
  * Update the light and vision source objects associated with this Token
158
- * @param defer - Defer refreshing the SightLayer to manually call that refresh later.
159
- * (default: `false`)
160
- * @param deleted - Indicate that this light source has been deleted.
161
- * (default: `false`)
162
- * @param noUpdateFog - Never update the Fog exploration progress for this update.
163
- * (default: `false`)
188
+ * @param options - (default: `{}}`)
189
+ */
190
+ updateSource(options?: Token.UpdateSourceOptions | undefined): void;
191
+
192
+ /**
193
+ * Update an emitted light source associated with this Token.
194
+ * @param options - (default `{}`)
195
+ */
196
+ updateLightSource(options?: Token.UpdateLightSourceOptions | undefined): void;
197
+
198
+ /**
199
+ * Update an Token vision source associated for this token.
200
+ * @param options - (default `{}`)
164
201
  */
165
- updateSource({ defer, deleted, noUpdateFog }?: { defer?: boolean; deleted?: boolean; noUpdateFog?: boolean }): void;
202
+ updateVisionSource(options?: Token.UpdateVisionSourceOptions | undefined): void;
166
203
 
167
204
  /**
168
205
  * Test whether this Token is a viable vision source for the current User
206
+ * @internal
169
207
  */
170
208
  protected _isVisionSource(): boolean;
171
209
 
210
+ /** @override */
211
+ clear(): this;
212
+
172
213
  /** @override */
173
214
  draw(): Promise<this>;
174
215
 
216
+ /**
217
+ * Draw the HUD container which provides an interface for managing this Token
218
+ * @internal
219
+ */
220
+ protected _drawHUD(): Token.InitializedObjectHUD;
221
+
222
+ /** @override */
223
+ destroy(options?: Parameters<PlaceableObject['destroy']>[0]): void;
224
+
175
225
  /**
176
226
  * Apply initial sanitizations to the provided input data to ensure that a Token has valid required attributes.
177
227
  */
@@ -187,6 +237,22 @@ declare global {
187
237
  */
188
238
  protected _drawIcon(): Promise<PIXI.Sprite>;
189
239
 
240
+ /**
241
+ * Play video for this Token (if applicable).
242
+ * @param playing - Should the Token video be playing?
243
+ * (default: `true`)
244
+ * @param options - Additional options for modifying video playback
245
+ * (default: `{}`)
246
+ */
247
+ play(playing?: boolean | undefined, options?: Token.PlayOptions | undefined): void;
248
+
249
+ /**
250
+ * Unlink the playback of this video token from the playback of other tokens which are using the same base texture.
251
+ * @param source - The video element source
252
+ * @internal
253
+ */
254
+ protected _unlinkVideoPlayback(source: HTMLVideoElement): Promise<void>;
255
+
190
256
  /**
191
257
  * Update display of the Token, pulling latest data and re-rendering the display of Token components
192
258
  */
@@ -194,24 +260,33 @@ declare global {
194
260
 
195
261
  /**
196
262
  * Draw the Token border, taking into consideration the grid type and border color
263
+ * @internal
197
264
  */
198
265
  protected _refreshBorder(): void;
199
266
 
200
267
  /**
201
268
  * Get the hex color that should be used to render the Token border
202
269
  * @returns The hex color used to depict the border color
270
+ * @internal
203
271
  */
204
272
  protected _getBorderColor(): number | null;
205
273
 
274
+ /**
275
+ * Refresh the display of the Token HUD interface.
276
+ */
277
+ refreshHUD(): void;
278
+
206
279
  /**
207
280
  * Refresh the target indicators for the Token.
208
281
  * Draw both target arrows for the primary User as well as indicator pips for other Users targeting the same Token.
282
+ * @internal
209
283
  */
210
284
  protected _refreshTarget(): void;
211
285
 
212
286
  /**
213
287
  * Refresh the display of Token attribute bars, rendering latest resource data
214
288
  * If the bar attribute is valid (has a value and max), draw the bar. Otherwise hide it.
289
+ * @internal
215
290
  */
216
291
  drawBars(): void;
217
292
 
@@ -221,7 +296,7 @@ declare global {
221
296
  * @param bar - The Bar container
222
297
  * @param data - Resource data for this bar
223
298
  */
224
- protected _drawBar(number: number, bar: PIXI.Graphics, data: ReturnType<Token['getBarAttribute']>): void;
299
+ protected _drawBar(number: number, bar: PIXI.Graphics, data: ReturnType<TokenDocument['getBarAttribute']>): void;
225
300
 
226
301
  /**
227
302
  * Draw the token's nameplate as a text object
@@ -231,14 +306,18 @@ declare global {
231
306
 
232
307
  /**
233
308
  * Draw a text tooltip for the token which can be used to display Elevation or a resource value
309
+ * @returns The text object used to render the tooltip
310
+ * @internal
234
311
  */
235
- drawTooltip(): void;
312
+ protected _drawTooltip(): PreciseText;
236
313
 
237
314
  /**
238
315
  * Return the text which should be displayed in a token's tooltip field
316
+ * @internal
239
317
  */
240
318
  protected _getTooltipText(): string;
241
319
 
320
+ /** @internal */
242
321
  protected _getTextStyle(): PIXI.TextStyle;
243
322
 
244
323
  /**
@@ -248,11 +327,14 @@ declare global {
248
327
 
249
328
  /**
250
329
  * Draw the overlay effect icon
330
+ * @param options - (default: `{}`)
331
+ * @internal
251
332
  */
252
- protected _drawOverlay({ src, tint }?: { src?: string; tint?: number }): Promise<void>;
333
+ protected _drawOverlay(options?: Token.DrawOverlayOptions | undefined): Promise<void>;
253
334
 
254
335
  /**
255
336
  * Draw a status effect icon
337
+ * @internal
256
338
  */
257
339
  protected _drawEffect(src: string, i: number, bg: PIXI.Graphics, w: number, tint: number): Promise<void>;
258
340
 
@@ -260,6 +342,7 @@ declare global {
260
342
  * Helper method to determine whether a token attribute is viewable under a certain mode
261
343
  * @param mode - The mode from CONST.TOKEN_DISPLAY_MODES
262
344
  * @returns Is the attribute viewable?
345
+ * @internal
263
346
  */
264
347
  protected _canViewMode(mode: foundry.CONST.TOKEN_DISPLAY_MODES): boolean;
265
348
 
@@ -271,6 +354,7 @@ declare global {
271
354
 
272
355
  /**
273
356
  * Animate the continual revealing of Token vision during a movement animation
357
+ * @internal
274
358
  */
275
359
  protected _onMovementFrame(
276
360
  dt: number,
@@ -288,6 +372,7 @@ declare global {
288
372
  * @param source - (default: `false`)
289
373
  * @param sound - (default: `false`)
290
374
  * @param fog - (default: `false`)
375
+ * @internal
291
376
  */
292
377
  protected _animatePerceptionFrame({
293
378
  source,
@@ -314,6 +399,7 @@ declare global {
314
399
  /**
315
400
  * @param releaseOthers - (default: `true`)
316
401
  * @param pan - (default: `false`)
402
+ * @override
317
403
  */
318
404
  protected _onControl({ releaseOthers, pan }?: { releaseOthers?: boolean; pan?: boolean }): void;
319
405
 
@@ -345,13 +431,14 @@ declare global {
345
431
  * (defaultValue: `{}`)
346
432
  * @returns The Token after animation has completed
347
433
  */
348
- setPosition(x: number, y: number, options?: PositionOptions): Promise<this>;
434
+ setPosition(x: number, y: number, options?: Token.PositionOptions): Promise<this>;
349
435
 
350
436
  /**
351
437
  * Update the Token velocity auto-regressively, shifting increasing weight towards more recent movement
352
438
  * Employ a magic constant chosen to minimize (effectively zero) the likelihood of trigonometric edge cases
353
439
  * @param ray - The proposed movement ray
354
440
  * @returns An updated velocity with directional memory
441
+ * @internal
355
442
  */
356
443
  protected _updateVelocity(ray: Ray): Token.Velocity;
357
444
 
@@ -387,7 +474,7 @@ declare global {
387
474
  toggleCombat(combat?: InstanceType<ConfiguredDocumentClass<typeof Combat>>): Promise<this>;
388
475
 
389
476
  /**
390
- * Toggle an active effect by it's texture path.
477
+ * Toggle an active effect by its texture path.
391
478
  * Copy the existing Array in order to ensure the update method detects the data as changed.
392
479
  *
393
480
  * @param effect - The texture file-path of the effect icon to toggle on the Token.
@@ -397,19 +484,12 @@ declare global {
397
484
  */
398
485
  toggleEffect(
399
486
  effect: string | ConstructorParameters<ConfiguredDocumentClassForName<'ActiveEffect'>>[0],
400
- options?: EffectToggleOptions
401
- ): Promise<boolean>;
402
-
403
- /**
404
- * A helper function to toggle a status effect which includes an Active Effect template
405
- */
406
- protected _toggleActiveEffect(
407
- effectData: ConstructorParameters<ConfiguredDocumentClassForName<'ActiveEffect'>>[0],
408
- { overlay }?: { overlay?: boolean }
487
+ options?: Token.EffectToggleOptions | undefined
409
488
  ): Promise<boolean>;
410
489
 
411
490
  /**
412
491
  * A helper function to toggle the overlay status icon on the Token
492
+ * @internal
413
493
  */
414
494
  protected _toggleOverlayEffect(texture: string, { active }?: { active: boolean }): Promise<this>;
415
495
 
@@ -442,8 +522,9 @@ declare global {
442
522
  /**
443
523
  * Extend the PlaceableObject.rotate method to prevent rotation if the Token is in the midst of a movement animation
444
524
  * @returns Actually a Promise<void>
525
+ * @remarks The return type is `Promise<this> | undefined` but this breaks the interface of PlaceableObject, see https://gitlab.com/foundrynet/foundryvtt/-/issues/6876
445
526
  */
446
- rotate(angle: number, snap: number): Promise<this>;
527
+ rotate(...args: Parameters<PlaceableObject['rotate']>): any;
447
528
 
448
529
  /** @override */
449
530
  protected _onCreate(
@@ -509,22 +590,8 @@ declare global {
509
590
  /** @override */
510
591
  protected _onDragLeftMove(event: PIXI.InteractionEvent): void;
511
592
 
512
- /**
513
- * @deprecated since 0.8.0
514
- */
515
- static fromActor(
516
- actor: InstanceType<ConfiguredDocumentClass<typeof Actor>>,
517
- tokenData?: InstanceType<ConfiguredDocumentClass<typeof TokenDocument>>['data']['_source']
518
- ): never;
519
-
520
- /**
521
- * @deprecated since 0.8.0
522
- */
523
- getBarAttribute(
524
- barName: string,
525
- { alternative }?: { alternative?: string }
526
- ): ReturnType<this['document']['getBarAttribute']>;
527
-
593
+ /** @override */
594
+ protected _onDragLeftCancel(event: MouseEvent): void;
528
595
  /**
529
596
  * @remarks This does not exist in foundry. It marks the controlIcon as not used because `Token` does never store a value here.
530
597
  */
@@ -542,27 +609,114 @@ declare global {
542
609
  dy: number;
543
610
  sy: number;
544
611
  }
545
- }
546
- }
547
612
 
548
- interface PositionOptions {
549
- /**
550
- * Animate the movement path
551
- * @defaultValue `true`
552
- */
553
- animate?: boolean;
554
- }
613
+ /** The UI frame container which depicts Token metadata and status, displayed in the ControlsLayer. */
614
+ interface ObjectHUD extends globalThis.ObjectHUD {
615
+ /** Token health bars */
616
+ bars?: PIXI.Container;
555
617
 
556
- interface EffectToggleOptions {
557
- /**
558
- * Force a certain active state for the effect
559
- * @defaultValue `false`
560
- */
561
- active?: boolean;
618
+ /** Token nameplate */
619
+ nameplate?: PreciseText;
562
620
 
563
- /**
564
- * Whether to set the effect as the overlay effect?
565
- * @defaultValue `false`
566
- */
567
- overlay?: boolean;
621
+ /** Token elevation tooltip */
622
+ tooltip?: PreciseText;
623
+
624
+ /** Token status effects */
625
+ effects?: PIXI.Container;
626
+
627
+ /** Token target marker */
628
+ target?: PIXI.Graphics;
629
+ }
630
+
631
+ type InitializedObjectHUD = RequiredProps<ObjectHUD, 'bars' | 'nameplate' | 'tooltip' | 'effects' | 'target'>;
632
+
633
+ interface UpdateLightSourceOptions {
634
+ /**
635
+ * Defer refreshing the LightingLayer to manually call that refresh later.
636
+ * @defaultValue `false`
637
+ */
638
+ defer?: boolean | undefined;
639
+
640
+ /**
641
+ * Indicate that this light source has been deleted.
642
+ * @defaultValue `false`
643
+ */
644
+ deleted?: boolean | undefined;
645
+ }
646
+
647
+ interface UpdateVisionSourceOptions {
648
+ /**
649
+ * Defer refreshing the SightLayer to manually call that refresh later.
650
+ * @defaultValue `false`
651
+ */
652
+ defer?: boolean | undefined;
653
+
654
+ /**
655
+ * Indicate that this vision source has been deleted.
656
+ * @defaultValue `false`
657
+ */
658
+ deleted?: boolean | undefined;
659
+
660
+ /**
661
+ * Never update the Fog exploration progress for this update.
662
+ * @defaultValue `false`
663
+ */
664
+ skipUpdateFog?: boolean | undefined;
665
+ }
666
+
667
+ type UpdateSourceOptions = UpdateLightSourceOptions & UpdateVisionSourceOptions;
668
+
669
+ interface PlayOptions {
670
+ /**
671
+ * Should the video loop?
672
+ * @defaultValue `true`
673
+ */
674
+ loop?: boolean | undefined;
675
+
676
+ /**
677
+ * A specific timestamp between 0 and the video duration to begin playback
678
+ * @defaultValue `0`
679
+ */
680
+ offset?: number | undefined;
681
+
682
+ /**
683
+ * Desired volume level of the video's audio channel (if any)
684
+ * @defaultValue `0`
685
+ */
686
+ volume?: number | undefined;
687
+ }
688
+
689
+ interface DrawOverlayOptions {
690
+ src?: string | undefined;
691
+ tint?: number | undefined;
692
+ }
693
+
694
+ interface PositionOptions {
695
+ /**
696
+ * Animate the movement path
697
+ * @defaultValue `true`
698
+ */
699
+ animate?: boolean;
700
+
701
+ /**
702
+ * Automatically re-center the view if token movement goes off-screen
703
+ * @defaultValue `true`
704
+ */
705
+ recenter?: boolean | undefined;
706
+ }
707
+
708
+ interface EffectToggleOptions {
709
+ /**
710
+ * Force a certain active state for the effect
711
+ * @defaultValue `false`
712
+ */
713
+ active?: boolean | undefined;
714
+
715
+ /**
716
+ * Whether to set the effect as the overlay effect?
717
+ * @defaultValue `false`
718
+ */
719
+ overlay?: boolean | undefined;
720
+ }
721
+ }
568
722
  }
@@ -1,6 +1,10 @@
1
- import type { ConfiguredDocumentClass } from '../../../../../types/helperTypes';
1
+ import type {
2
+ ConfiguredDocumentClass,
3
+ ConfiguredDocumentClassForName,
4
+ ConfiguredObjectClassForName
5
+ } from '../../../../../types/helperTypes';
2
6
  import type { DocumentModificationOptions } from '../../../../common/abstract/document.mjs';
3
- import type { WallData } from '../../../../common/data/data.mjs';
7
+ import type { LineIntersection } from '../../../../common/utils/geometry.mjs';
4
8
  import type { HoverInOptions } from '../placeableObject';
5
9
 
6
10
  declare global {
@@ -20,36 +24,83 @@ declare global {
20
24
  controlIcon: null;
21
25
 
22
26
  /**
23
- * @remarks Type is `MouseInteractionManager<this, this['endpoints']>`
27
+ * An reference the Door Control icon associated with this Wall, if any
28
+ * @internal
29
+ * @defaultValue `undefined`
24
30
  */
25
- mouseInteractionManager: MouseInteractionManager<this> | null;
31
+ doorControl: DoorControl | undefined | null;
26
32
 
27
- constructor(document: ConcreteWallDocument);
33
+ /**
34
+ * A reference to an overhead Tile that is a roof, interior to which this wall is contained
35
+ * @defaultValue `undefined`
36
+ */
37
+ roof: InstanceType<ConfiguredObjectClassForName<'Tile'>> | undefined;
28
38
 
29
39
  /**
30
- * An reference the Door Control icon associated with this Wall, if any
31
- * @internal
40
+ * A set which tracks other Wall instances that this Wall intersects with (excluding shared endpoints)
41
+ */
42
+ intersectsWith: Map<InstanceType<ConfiguredObjectClassForName<'Wall'>>, LineIntersection>;
43
+
44
+ /**
45
+ * Cached representation of this wall's endpoints as {@link PolygonVertex}es.
32
46
  * @defaultValue `null`
47
+ * @internal
33
48
  */
34
- doorControl: DoorControl | null;
49
+ protected _vertices: { a: PolygonVertex; b: PolygonVertex } | null;
35
50
 
36
51
  /**
37
- * A reference to an overhead Tile that is a roof, interior to which this wall is contained
38
- * @defaultValue `undefined`
52
+ * Cached representation of the set of this wall's vertices.
53
+ * @defaultValue `null`
54
+ * @internal
39
55
  */
40
- roof: Tile | undefined;
56
+ protected _wallKeys: Set<string> | null;
41
57
 
42
58
  /** @override */
43
- static get embeddedName(): 'Wall';
59
+ static embeddedName: 'Wall';
44
60
 
45
61
  /**
46
62
  * A convenience reference to the coordinates Array for the Wall endpoints, [x0,y0,x1,y1].
47
63
  */
48
64
  get coords(): Wall['data']['c'];
49
65
 
66
+ /**
67
+ * The initial endpoint of the Wall
68
+ */
69
+ get A(): Point;
70
+
71
+ /**
72
+ * The second endpoint of the Wall
73
+ */
74
+ get B(): Point;
75
+
76
+ /**
77
+ * The endpoints of the wall as {@link PolygonVertex}es.
78
+ */
79
+ get vertices(): { a: PolygonVertex; b: PolygonVertex };
80
+
81
+ /**
82
+ * The set of keys for this wall's endpoints.
83
+ */
84
+ get wallKeys(): Set<string>;
85
+
50
86
  /** @override */
51
87
  get bounds(): NormalizedRectangle;
52
88
 
89
+ /**
90
+ * A boolean for whether this wall contains a door
91
+ */
92
+ get isDoor(): boolean;
93
+
94
+ /**
95
+ * A boolean for whether the wall contains an open door
96
+ */
97
+ get isOpen(): boolean;
98
+
99
+ /**
100
+ * Is this Wall interior to a non-occluded roof Tile?
101
+ */
102
+ get hasActiveRoof(): boolean;
103
+
53
104
  /**
54
105
  * Return the coordinates [x,y] at the midpoint of the wall segment
55
106
  */
@@ -73,6 +124,19 @@ declare global {
73
124
  /** @override */
74
125
  draw(): Promise<this>;
75
126
 
127
+ /**
128
+ * Draw a control icon that is used to manipulate the door's open/closed state
129
+ */
130
+ createDoorControl(): DoorControl;
131
+
132
+ /**
133
+ * Determine the orientation of this wall with respect to a reference point
134
+ * @param point - Some reference point, relative to which orientation is determined
135
+ * @returns An orientation in CONST.WALL_DIRECTIONS which indicates whether the Point is left,
136
+ * right, or collinear (both) with the Wall
137
+ */
138
+ orientPoint(point: Point): number;
139
+
76
140
  /** @override */
77
141
  protected _createInteractionManager(): NonNullable<this['mouseInteractionManager']>;
78
142
 
@@ -82,6 +146,7 @@ declare global {
82
146
  /**
83
147
  * Draw a directional prompt icon for one-way walls to illustrate their direction of effect.
84
148
  * @returns The drawn icon
149
+ * @internal
85
150
  */
86
151
  protected _drawDirection(): PIXI.Sprite | null;
87
152
 
@@ -113,7 +178,7 @@ declare global {
113
178
  protected _onRelease(options?: PlaceableObject.ReleaseOptions): void;
114
179
 
115
180
  /** @override */
116
- destroy(options?: Parameters<PIXI.Container['destroy']>[0]): void;
181
+ destroy(options?: Parameters<PlaceableObject['destroy']>[0]): void;
117
182
 
118
183
  /**
119
184
  * Test whether the Wall direction lies between two provided angles
@@ -137,15 +202,41 @@ declare global {
137
202
  getLinkedSegments(): {
138
203
  ids: string[];
139
204
  walls: WallsLayer['placeables'];
140
- endpoints: Array<[number, number]>;
205
+ endpoints: Array<[x: number, y: number]>;
141
206
  };
142
207
 
208
+ /**
209
+ * Determine whether this wall is beneath a roof tile, and is considered "interior", or not.
210
+ */
211
+ identifyInteriorState(): void;
212
+
213
+ /**
214
+ * Update any intersections with this wall.
215
+ */
216
+ updateIntersections(): void;
217
+
218
+ /**
219
+ * Record the intersection points between this wall and another, if any.
220
+ * @param other - The other wall.
221
+ */
222
+ protected _identifyIntersectionsWith(other: InstanceType<ConfiguredDocumentClassForName<'Wall'>>): void;
223
+
224
+ /**
225
+ * Remove this wall's intersections.
226
+ * @internal
227
+ */
228
+ protected _removeIntersections(): void;
229
+
143
230
  /** @override */
144
- protected _onCreate(data: WallData['_source'], options: DocumentModificationOptions, userId: string): void;
231
+ protected _onCreate(
232
+ data: foundry.data.WallData['_source'],
233
+ options: DocumentModificationOptions,
234
+ userId: string
235
+ ): void;
145
236
 
146
237
  /** @override */
147
238
  protected _onUpdate(
148
- changed: DeepPartial<WallData['_source']>,
239
+ changed: DeepPartial<foundry.data.WallData['_source']>,
149
240
  options?: DocumentModificationOptions,
150
241
  userId?: string
151
242
  ): void;