typed-factorio 0.5.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -34,9 +34,11 @@ Note: When types are updated, or released for a new factorio version, you will n
34
34
 
35
35
  ### Settings and data stage
36
36
 
37
- There are also basic definitions for the settings/data stage.
37
+ There are also definitions for the settings/data stage.
38
38
 
39
- To avoid type conflicts, the global tables for the settings/data stages have to be declared manually where you need them. The types be imported from `typed-factorio/data-stage-types` and `typed-factorio/settings-stage-types`. Examples:
39
+ To avoid type conflicts, the global tables for the settings/data stages have to be declared manually where you need them. These types can be imported from `typed-factorio/data/types` or `typed-factorio/settings/types`.
40
+
41
+ Example:
40
42
 
41
43
  ```ts
42
44
  import { Data, Mods } from "typed-factorio/data/types"
@@ -58,27 +60,25 @@ Currently, there are types for the following modules:
58
60
  - `util`
59
61
  - `mod-gui`
60
62
 
61
- If you have a need for types to more lualib modules, feel free to open an issue or pull request.
63
+ If you have a need for types to more lualib modules, feel free to open an issue or pull request on GitHub.
62
64
 
63
65
  ## Type features
64
66
 
65
- Typed-factorio has nearly 100% complete types for the runtime stage. Even description-only concepts and some not documented types are filled in manually.
66
-
67
- The only incomplete type is `BlueprintControlBehavior`, which isn't documented anywhere.
67
+ Typed-factorio has 100% complete types for the runtime stage. Description-only concepts and some not documented types are filled in manually.
68
68
 
69
69
  ### Lua features
70
70
 
71
71
  The types include [TypescriptToLua language extensions](https://typescripttolua.github.io/docs/advanced/language-extensions/)
72
- and [lua-types](https://github.com/TypeScriptToLua/lua-types) (for v5.2), as dependencies.
72
+ and [lua-types](https://github.com/TypeScriptToLua/lua-types) (for v5.2) as dependencies.
73
73
 
74
74
  This is to use tstl features such as `LuaLengthMethod` and `LuaMultiReturn`.
75
75
 
76
76
  ### `nil`
77
77
 
78
78
  The types consistently use `undefined` to represent `nil`.
79
- `null` is not used, even though it takes fewer characters to type, because `undefined` in typescript is much more similar to `nil` in lua, and optional parameters/properties already use `undefined`.
79
+ `null` is not used, because `undefined` in typescript is much more similar to `nil` in lua, and optional parameters/properties already use `undefined`.
80
80
 
81
- A class attribute is marked as possibly undefined only if the _read_ type is possibly `nil`. For properties where `nil` is not possible on _read_, but is possible on `write`, you can write `nil` by using `undefined!` or `myNullableValue!`, e.g. `controlBehavior.parameters = undefined!`.
81
+ A class attribute is marked as possibly undefined only if the _read_ type is possibly `nil`. For properties where `nil` is not possible on _read_, but is possible on _write_, you can write `nil` by using `undefined!` or `myNullableValue!`, e.g. `controlBehavior.parameters = undefined!`.
82
82
 
83
83
  ### Variant parameter types
84
84
 
@@ -90,7 +90,7 @@ The type for a specific variant is prefixed with the either variant name or "Oth
90
90
 
91
91
  `script.on_event()`, `script.get/set_filters()`, and `script.raise_event()` all have type checking on the event data/filter type, inferred from what is passed as the event name/id.
92
92
 
93
- You can pass a type parameter to `script.generate_event_name()` with the type of the event data, and it will return an `EventId` that also holds type info of the event data. Other event functions on `script` can then use the type data when the `EventId` is used.
93
+ You can pass a type parameter to `script.generate_event_name()`, and it will return an `EventId` that holds type info of the event data. Event functions on `script` can then use the type data when the `EventId` is passed.
94
94
 
95
95
  ### Array-like types
96
96
 
@@ -98,7 +98,7 @@ Classes that have an index operator, a length operator, and have an array-like s
98
98
 
99
99
  ### Table or array types
100
100
 
101
- For table or array types (e.g. Position), there also are types such as `PositionTable` and `PositionArray` types that refer to the table or array form specifically.
101
+ For table or array types (e.g. Position), there also are types such as `PositionTable` and `PositionArray` that refer to the table or array form specifically.
102
102
 
103
103
  ### LuaGuiElement
104
104
 
@@ -110,4 +110,4 @@ This is done both to provide more accurate types, and for possible integration w
110
110
 
111
111
  ### Examples
112
112
 
113
- Check out the `tests` directory for more examples on particular type features.
113
+ Check out the `test` directory on GitHub for more examples on particular type features.
@@ -241,11 +241,6 @@ type RaiseableEvents =
241
241
  | typeof defines.events.script_raised_revive
242
242
  | typeof defines.events.script_raised_set_tiles
243
243
 
244
- /** A custom event id created by {@link LuaBootstrap.generate_event_name}, with type data of the event. */
245
- type CustomEventId<T extends table> = uint & {
246
- _eventData: T
247
- }
248
-
249
244
  /**
250
245
  * Entry point for registering event handlers. It is accessible through the global object named `script`.
251
246
  *
@@ -336,14 +331,13 @@ interface LuaBootstrap {
336
331
  * @param f - The handler for this event. Passing `nil` will unregister it.
337
332
  * @param filters - The filters for this event. Can only be used when registering for individual events.
338
333
  */
339
- on_event<E extends keyof EventFilters>(
334
+ on_event<E extends EventId<any, table>>(
340
335
  event: E,
341
- f: ((data: EventTypes[E]) => void) | undefined,
342
- filters?: EventFilters[E][]
336
+ f: ((data: E["_eventData"]) => void) | undefined,
337
+ filters?: E["_filter"][]
343
338
  ): void
344
- on_event<E extends defines.events>(event: E | E[], f: ((data: EventTypes[E]) => void) | undefined): void
339
+ on_event<E extends EventId<any, any>>(event: E | E[], f: ((data: E["_eventData"]) => void) | undefined): void
345
340
  on_event(event: string, f: ((data: CustomInputEvent) => void) | undefined): void
346
- on_event<T extends table>(event: CustomEventId<T>, f: ((data: T) => void) | undefined): void
347
341
  /**
348
342
  * Register a handler to run every nth-tick(s). When the game is on tick 0 it will trigger all registered handlers.
349
343
  *
@@ -388,9 +382,8 @@ interface LuaBootstrap {
388
382
  * @param event - The event identifier to get a handler for.
389
383
  * @returns Reference to the function currently registered as the handler.
390
384
  */
391
- get_event_handler<E extends defines.events>(event: E): (data: EventTypes[E]) => void
385
+ get_event_handler<E extends EventId<any>>(event: E): (data: E["_eventData"]) => void
392
386
  get_event_handler(event: string): (data: CustomInputEvent) => void
393
- get_event_handler<T extends table>(event: CustomEventId<T>): (data: T) => void
394
387
  /**
395
388
  * Gets the mod event order as a string.
396
389
  *
@@ -427,7 +420,7 @@ interface LuaBootstrap {
427
420
  * @param event - ID of the event to filter.
428
421
  * @param filters - The filters or `nil` to clear them.
429
422
  */
430
- set_event_filter<E extends keyof EventFilters>(event: E, filters: EventFilters[E][] | undefined): void
423
+ set_event_filter<E extends EventId<any, table>>(event: E, filters: E["_filter"][] | undefined): void
431
424
  /**
432
425
  * Gets the filters for the given event.
433
426
  *
@@ -436,7 +429,7 @@ interface LuaBootstrap {
436
429
  * @param event - ID of the event to get.
437
430
  * @returns The filters or `nil` if none are defined.
438
431
  */
439
- get_event_filter<E extends keyof EventFilters>(event: E): EventFilters[E][] | undefined
432
+ get_event_filter<E extends EventId<any, table>>(event: E): E["_filter"][] | undefined
440
433
  /**
441
434
  * Raise an event. Only events generated with
442
435
  * {@link LuaBootstrap.generate_event_name LuaBootstrap::generate_event_name} and the following can be raised:
@@ -464,8 +457,10 @@ interface LuaBootstrap {
464
457
  * @param event - ID of the event to raise.
465
458
  * @param data - Table with extra data that will be passed to the event handler.
466
459
  */
467
- raise_event<T extends table>(event: CustomEventId<T>, data: T): void
468
- raise_event<E extends RaiseableEvents>(event: E, data: Omit<EventTypes[E], keyof EventData>): void
460
+ raise_event<E extends RaiseableEvents | CustomEventId<any>>(
461
+ event: E,
462
+ data: Omit<E["_eventData"], keyof EventData>
463
+ ): void
469
464
  /**
470
465
  * Raises {@link OnConsoleChatEvent on_console_chat} with the given parameters.
471
466
  *
@@ -6036,7 +6031,7 @@ interface LuaEquipment {
6036
6031
  }
6037
6032
 
6038
6033
  /**
6039
- * Prototype of a equipment category.
6034
+ * Prototype of an equipment category.
6040
6035
  *
6041
6036
  * {@link https://lua-api.factorio.com/next/LuaEquipmentCategoryPrototype.html View documentation}
6042
6037
  *
@@ -8543,6 +8538,15 @@ interface LuaGameScript {
8543
8538
  * {@link https://lua-api.factorio.com/next/LuaGameScript.html#LuaGameScript.players View documentation}
8544
8539
  */
8545
8540
  readonly players: LuaCustomTable<uint | string, LuaPlayer>
8541
+ /**
8542
+ * The currently active set of map settings. Even though this property is marked as read-only, the members of the
8543
+ * dictionary that is returned can be modified mid-game.
8544
+ *
8545
+ * **Note**: This does not contain difficulty settings, use
8546
+ * {@link LuaGameScript.difficulty_settings LuaGameScript::difficulty_settings} instead.
8547
+ *
8548
+ * {@link https://lua-api.factorio.com/next/LuaGameScript.html#LuaGameScript.map_settings View documentation}
8549
+ */
8546
8550
  readonly map_settings: MapSettings
8547
8551
  /**
8548
8552
  * The currently active set of difficulty settings. Even though this property is marked as read-only, the members of
@@ -9271,7 +9275,6 @@ interface ScrollPaneGuiSpec extends BaseGuiSpec {
9271
9275
  | "always"
9272
9276
  | "auto-and-reserve-space"
9273
9277
  | "dont-show-but-allow-scrolling"
9274
- | "auto"
9275
9278
  /**
9276
9279
  * Policy of the vertical scroll bar. Possible values are `"auto"`, `"never"`, `"always"`,
9277
9280
  * `"auto-and-reserve-space"`, `"dont-show-but-allow-scrolling"`. Defaults to `"auto"`.
@@ -9282,7 +9285,6 @@ interface ScrollPaneGuiSpec extends BaseGuiSpec {
9282
9285
  | "always"
9283
9286
  | "auto-and-reserve-space"
9284
9287
  | "dont-show-but-allow-scrolling"
9285
- | "auto"
9286
9288
  }
9287
9289
 
9288
9290
  interface DropDownGuiSpec extends BaseGuiSpec {
@@ -9481,7 +9483,7 @@ interface SwitchGuiSpec extends BaseGuiSpec {
9481
9483
  * Possible values are `"left"`, `"right"`, or `"none"`. If set to "none", `allow_none_state` must be `true`.
9482
9484
  * Defaults to `"left"`.
9483
9485
  */
9484
- readonly switch_state?: "left" | "right" | "none" | "none" | "left"
9486
+ readonly switch_state?: "left" | "right" | "none"
9485
9487
  /** Whether the switch can be set to a middle state. Defaults to `false`. */
9486
9488
  readonly allow_none_state?: boolean
9487
9489
  readonly left_label_caption?: LocalisedString
@@ -10076,7 +10078,7 @@ interface ListBoxGuiElementMembers extends BaseGuiElement {
10076
10078
  * @param scroll_mode - Where the item should be positioned in the scroll-pane. Must be either `"in-view"` or
10077
10079
  * `"top-third"`. Defaults to `"in-view"`.
10078
10080
  */
10079
- scroll_to_item(index: int, scroll_mode?: "in-view" | "top-third" | "in-view"): void
10081
+ scroll_to_item(index: int, scroll_mode?: "in-view" | "top-third"): void
10080
10082
  }
10081
10083
 
10082
10084
  type ListBoxGuiElement = ListBoxGuiElementMembers & GuiElementIndex
@@ -10132,7 +10134,7 @@ interface ScrollPaneGuiElementMembers extends BaseGuiElement {
10132
10134
  * @param scroll_mode - Where the element should be positioned in the scroll-pane. Must be either `"in-view"` or
10133
10135
  * `"top-third"`. Defaults to `"in-view"`.
10134
10136
  */
10135
- scroll_to_element(element: LuaGuiElement, scroll_mode?: "in-view" | "top-third" | "in-view"): void
10137
+ scroll_to_element(element: LuaGuiElement, scroll_mode?: "in-view" | "top-third"): void
10136
10138
  /**
10137
10139
  * Policy of the horizontal scroll bar. Possible values are `"auto"`, `"never"`, `"always"`,
10138
10140
  * `"auto-and-reserve-space"`, `"dont-show-but-allow-scrolling"`.
@@ -14440,12 +14442,20 @@ interface LuaPlayer extends LuaControl {
14440
14442
  /**
14441
14443
  * The display resolution for this player.
14442
14444
  *
14445
+ * **Note**: During {@link OnPlayerCreatedEvent on_player_created}, this attribute will always return a resolution of
14446
+ * `{width=1920, height=1080}`. To get the actual resolution, listen to the
14447
+ * {@link OnPlayerDisplayResolutionChangedEvent on_player_display_resolution_changed} event raised shortly afterwards.
14448
+ *
14443
14449
  * {@link https://lua-api.factorio.com/next/LuaPlayer.html#LuaPlayer.display_resolution View documentation}
14444
14450
  */
14445
14451
  readonly display_resolution: DisplayResolution
14446
14452
  /**
14447
14453
  * The display scale for this player.
14448
14454
  *
14455
+ * **Note**: During {@link OnPlayerCreatedEvent on_player_created}, this attribute will always return a scale of `1`.
14456
+ * To get the actual scale, listen to the {@link OnPlayerDisplayScaleChangedEvent on_player_display_scale_changed}
14457
+ * event raised shortly afterwards.
14458
+ *
14449
14459
  * {@link https://lua-api.factorio.com/next/LuaPlayer.html#LuaPlayer.display_scale View documentation}
14450
14460
  */
14451
14461
  readonly display_scale: double
@@ -17364,7 +17374,7 @@ interface ResourceSurfaceCreateEntity extends BaseSurfaceCreateEntity {
17364
17374
 
17365
17375
  interface UndergroundBeltSurfaceCreateEntity extends BaseSurfaceCreateEntity {
17366
17376
  /** `"output"` or `"input"`; default is `"input"`. */
17367
- readonly type?: "output" | "input" | "input"
17377
+ readonly type?: "output" | "input"
17368
17378
  }
17369
17379
 
17370
17380
  interface ProgrammableSpeakerSurfaceCreateEntity extends BaseSurfaceCreateEntity {