typed-factorio 0.13.2 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
package/Changelog.md CHANGED
@@ -1,105 +1,135 @@
1
- # v0.13.2
2
-
3
- - Fix: resize_to_sprite property should not be on subclass sprite-button
4
- - Fix: ChooseElemButtonSpec filters should be named elem_filters
5
- - Switch back to `/latest` api docs link
6
- - New version of web api docs is now active
7
-
8
- # v0.13.0
9
-
10
- - Update to factorio version 1.1.49
11
-
12
- # v0.12.0
13
-
14
- - Update to factorio version 1.1.48
15
-
16
- # v0.11.1
17
-
18
- - Localised strings now accept boolean and undefined.
19
-
20
- # v0.11.0
21
-
22
- - Update to factorio version 1.1.46
23
-
24
- # v0.10.0
25
-
26
- - LuaGuiElement.style and LuaControl.opened now have different get/set types (more specific get type).
27
- - The array form of LocalizedString is now readonly.
28
-
29
- # v0.9.0
30
-
31
- - Update to factorio version 1.1.43
32
- - The `defines.events `_type_ was renamed to `defines.Events`, to reduce confusion between the namespace/type
33
-
34
- # v0.8.0
35
-
36
- - All event types now explicitly extend `EventData`
37
- - Variant parameter groups without additional fields now have their own type, instead of all being grouped into `Other`
38
-
39
- # v0.7.3
40
-
41
- - Update to factorio version 1.1.42
42
- - No api changes, but improvements to descriptions
43
-
44
- # v0.7.2
45
-
46
- - Fix minor issue for event types
47
-
48
- # v0.7.0
49
-
50
- - Updated to factorio version 1.1.41 (no changes to lua api)
51
- - Improved smart types for events
52
-
53
- # v0.6.1
54
-
55
- - Added type for BlueprintControlBehavior
56
-
57
- # v0.6.0
58
-
59
- - Updated to factorio version 1.1.40
60
- - Fixed regression with duplicate strings in string union types
61
-
62
- # v0.5.0
63
-
64
- - Updated to factorio version 1.1.39
65
- - Documentation links now point to the new API docs website. More info here: https://forums.factorio.com/viewtopic.php?f=34&t=99797
66
-
67
- # v0.4.1
68
-
69
- ### Changed
70
-
71
- - LuaRemote.addInterface now lets remote functions take any arguments.
72
-
73
- # v0.4.0
74
-
75
- ## **BREAKING**
76
-
77
- - Only the latest version api is now provided.
78
- - It is now accessed using `typed-factorio/runtime` instead of `typed-factorio/<version>`
79
-
80
- ### Added
81
-
82
- - Basic types for settings and data stage. See README for more details.
83
- - Types for "util" and "mod-gui" lualib modules
84
-
85
- ### Fixed
86
-
87
- - LuaGuiElement::add with a literal now give diagnostic if you supply a field that shouldn't be there.
88
-
89
- ### Internal
90
-
91
- - Split generated files into multiple files
92
- - Improved compilation tests
93
-
94
- # v0.3.0
95
-
96
- - Added factorio version `1.1.38`
97
-
98
- # v0.2.0
99
-
100
- - `AnyBasic` now uses type `table` instead of type `Record<any, AnyBasic>`
101
- - README changes
102
-
103
- # v0.1.0
104
-
105
- - Initial release
1
+ # v0.16.0
2
+
3
+ - `LuaCustomTable` can be iterated on in a for-of loop directly (without using `pairs`). This requires TSTL v1.3.0 or later.
4
+ - TSTL dependency minimum version is now v1.3.0.
5
+
6
+ # v0.15.0
7
+
8
+ - Table or array concepts are now declared in table form wherever it is an "read" position.
9
+ - This works with setter overloading for applicable properties: `player.color.x; player.color = [1, 1, 1]` is now valid!
10
+ - This also applies to concepts/complex types which contain table_or_array properties.
11
+ - Some concepts now also have a special form where it is known to be in a "read" position, where all table_or_array concepts are declared in table form. These concepts are suffixed with "Read", e.g. `ScriptAreaRead`.
12
+ - Arrays which are known to be in a "write" only form (e.g. method parameters) now are marked readonly. This means you can now pass readonly-only arrays to these methods.
13
+ - `MapPosition` is now a table or array concept.
14
+ - Classes with subclasses are now declared with all properties, instead of an intersection of subclasses (reversion)
15
+ - Subclass specializations added for some missing classes
16
+
17
+ # v0.14.1
18
+
19
+ - LuaStyle: `extra_margin/padding_when_activated` is now for subclass scroll_pane
20
+
21
+ # v0.14.0
22
+
23
+ - LuaStyle size, margin/padding setters now have more specific array types. These array types are `SizeArray` and `StyleValuesArray` for size and margin/padding, respectively.
24
+ - `@noSelf` annotation is now only present when necessary.
25
+ - For classes with subclasses:
26
+ - The original class name (e.g. `LuaItemStack`) still contains attributes of all subclasses (same as before).
27
+ - There is now a `Base` type (e.g. `BaseItemStack`) which only includes attributes common to all subclasses.
28
+ - There is a separate type definition for each subclass, e.g. `BlueprintItem`. Note that one instance may still belong to multiple subclasses (the subclasses are not mutually exclusive).
29
+ - The above two can be optionally used for stricter types.
30
+
31
+ # v0.13.2
32
+
33
+ - Fix: resize_to_sprite property should not be on subclass sprite-button
34
+ - Fix: ChooseElemButtonSpec filters should be named elem_filters
35
+ - Switch back to `/latest` api docs link
36
+ - New version of web api docs is now active
37
+
38
+ # v0.13.0
39
+
40
+ - Update to factorio version 1.1.49
41
+
42
+ # v0.12.0
43
+
44
+ - Update to factorio version 1.1.48
45
+
46
+ # v0.11.1
47
+
48
+ - Localised strings now accept boolean and undefined.
49
+
50
+ # v0.11.0
51
+
52
+ - Update to factorio version 1.1.46
53
+
54
+ # v0.10.0
55
+
56
+ - LuaGuiElement.style and LuaControl.opened now have different get/set types (more specific get type).
57
+ - The array form of LocalizedString is now readonly.
58
+
59
+ # v0.9.0
60
+
61
+ - Update to factorio version 1.1.43
62
+ - The `defines.events `_type_ was renamed to `defines.Events`, to reduce confusion between the namespace/type
63
+
64
+ # v0.8.0
65
+
66
+ - All event types now explicitly extend `EventData`
67
+ - Variant parameter groups without additional fields now have their own type, instead of all being grouped into `Other`
68
+
69
+ # v0.7.3
70
+
71
+ - Update to factorio version 1.1.42
72
+ - No api changes, but improvements to descriptions
73
+
74
+ # v0.7.2
75
+
76
+ - Fix minor issue for event types
77
+
78
+ # v0.7.0
79
+
80
+ - Updated to factorio version 1.1.41 (no changes to lua api)
81
+ - Improved smart types for events
82
+
83
+ # v0.6.1
84
+
85
+ - Added type for BlueprintControlBehavior
86
+
87
+ # v0.6.0
88
+
89
+ - Updated to factorio version 1.1.40
90
+ - Fixed regression with duplicate strings in string union types
91
+
92
+ # v0.5.0
93
+
94
+ - Updated to factorio version 1.1.39
95
+ - Documentation links now point to the new API docs website. More info here: https://forums.factorio.com/viewtopic.php?f=34&t=99797
96
+
97
+ # v0.4.1
98
+
99
+ ### Changed
100
+
101
+ - LuaRemote.addInterface now lets remote functions take any arguments.
102
+
103
+ # v0.4.0
104
+
105
+ ## **BREAKING**
106
+
107
+ - Only the latest version api is now provided.
108
+ - It is now accessed using `typed-factorio/runtime` instead of `typed-factorio/<version>`
109
+
110
+ ### Added
111
+
112
+ - Basic types for settings and data stage. See README for more details.
113
+ - Types for "util" and "mod-gui" lualib modules
114
+
115
+ ### Fixed
116
+
117
+ - LuaGuiElement::add with a literal now give diagnostic if you supply a field that shouldn't be there.
118
+
119
+ ### Internal
120
+
121
+ - Split generated files into multiple files
122
+ - Improved compilation tests
123
+
124
+ # v0.3.0
125
+
126
+ - Added factorio version `1.1.38`
127
+
128
+ # v0.2.0
129
+
130
+ - `AnyBasic` now uses type `table` instead of type `Record<any, AnyBasic>`
131
+ - README changes
132
+
133
+ # v0.1.0
134
+
135
+ - Initial release
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2021 Benjamin Ye
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Benjamin Ye
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,113 +1,133 @@
1
- # Typed Factorio
2
-
3
- Complete and featureful typescript definitions for the Factorio modding lua api. This is intended to be used with [TypescriptToLua](https://typescripttolua.github.io/).
4
-
5
- This project aims to provide type definitions for the Factorio API that are as complete as possible. This means minimal `any`s and `unknown`s, correct nullability, and smart types where possible. The generator integrates both the Factorio JSON api docs and manually defined additions and overrides.
6
-
7
- ## Installation
8
-
9
- To use in your TypescriptToLua project:
10
-
11
- 1. Install this package
12
-
13
- ```
14
- npm install typed-factorio
15
-
16
- or
17
-
18
- yarn add typed-factorio
19
- ```
20
-
21
- 2. Add to your `tsconfig.json`:
22
-
23
- ```diff
24
- {
25
- "compilerOptions": {
26
- + "types": [ "typed-factorio/runtime" ]
27
- }
28
- }
29
- ```
30
-
31
- This will add the types for the runtime stage to your entire project.
32
-
33
- Note: When types are updated, or released for a new factorio version, you will need update your package version to get the types.
34
-
35
- ### Settings and data stage
36
-
37
- There are also definitions for the settings/data stage.
38
-
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:
42
-
43
- ```ts
44
- import { Data, Mods } from "typed-factorio/data/types"
45
- // or
46
- import { Data, Mods } from "typed-factorio/settings/types"
47
-
48
- declare const data: Data
49
- declare const mods: Mods
50
-
51
- data.extend([{ ... }])
52
- ```
53
-
54
- There are currently full types for settings stage, but only basic types for the data stage.
55
-
56
- ### Factorio lualib modules
57
-
58
- Currently, there are types for the following modules:
59
-
60
- - `util`
61
- - `mod-gui`
62
-
63
- If you have a need for types to more lualib modules, feel free to open an issue or pull request on GitHub.
64
-
65
- ## Type features
66
-
67
- Typed-factorio has 100% complete types for the runtime stage. Description-only concepts and some not documented types are filled in manually.
68
-
69
- ### Lua features
70
-
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.
73
-
74
- This is to use tstl features such as `LuaLengthMethod` and `LuaMultiReturn`.
75
-
76
- ### `nil`
77
-
78
- The types consistently use `undefined` to represent `nil`.
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
-
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
-
83
- ### Variant parameter types
84
-
85
- Variant parameter types (types with "additional fields can be specified depending on ...") are handled as discriminated unions. This gives proper type checking for individual variants.
86
-
87
- The type for a specific variant is prefixed with the either variant name or "Other" for variants without additional fields, e.g. `AmmoDamageTechnologyModifier`, `OtherTechnologyModifier`
88
-
89
- ### Events
90
-
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
-
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
-
95
- ### Array-like types
96
-
97
- Classes that have an index operator, a length operator, and have an array-like structure, inherit from `(Readonly)Array`. These are `LuaInventory`, `LuaFluidBox`, `LuaTransportLine`. This allows you to use these classes like arrays, meaning having array methods, and `.length` translating to the lua length operator. However, this also means, like typescript arrays, they are **0-indexed, not 1-indexed**.
98
-
99
- ### Table or array types
100
-
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
-
103
- ### LuaGuiElement
104
-
105
- `LuaGuiElement` is broken up into a discriminated union for each gui element type (See [here](https://basarat.gitbook.io/typescript/type-system/discriminated-unions) for information on discriminated unions). The type for a specific GuiElement type is `<Type>GuiElement`, e.g. `ButtonGuiElement`.
106
-
107
- Similarly, the table passed to `LuaGuiElement.add`, referred to as `GuiSpec`, is also broken up into a discriminated union for each gui element type. The type for a specific GuiSpec type is `<Type>GuiSpec`, e.g. `ListBoxGuiSpec`.
108
-
109
- This is done both to provide more accurate types, and for possible integration with [JSX](https://typescripttolua.github.io/docs/jsx/).
110
-
111
- ### Examples
112
-
113
- Check out the `test` directory on GitHub for more examples on particular type features.
1
+ # Typed Factorio
2
+
3
+ Complete and featureful typescript definitions for the Factorio modding lua api. This is intended to be used with [TypescriptToLua](https://typescripttolua.github.io/).
4
+
5
+ This project aims to provide type definitions for the Factorio lua API that are as complete as possible. This means no `any`s or `unknown`s, correct nullability, and smart types where possible. The generator integrates both the Factorio JSON api docs and manually defined additions and overrides.
6
+
7
+ ## Installation
8
+
9
+ To use in your TypescriptToLua project:
10
+
11
+ 1. Install this package
12
+
13
+ ```
14
+ npm install typed-factorio
15
+
16
+ or
17
+
18
+ yarn add typed-factorio
19
+ ```
20
+
21
+ 2. Add to your `tsconfig.json`:
22
+
23
+ ```diff
24
+ {
25
+ "compilerOptions": {
26
+ + "types": [ "typed-factorio/runtime" ]
27
+ }
28
+ }
29
+ ```
30
+
31
+ This will add the types for the runtime stage to your entire project.
32
+
33
+ Note: When types are updated, or released for a new factorio version, you will need update your package version to get the types.
34
+
35
+ ### Settings and data stage
36
+
37
+ There are also definitions for the settings/data stage.
38
+
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:
42
+
43
+ ```ts
44
+ import { Data, Mods } from "typed-factorio/data/types"
45
+ // or
46
+ import { Data, Mods } from "typed-factorio/settings/types"
47
+
48
+ declare const data: Data
49
+ declare const mods: Mods
50
+
51
+ data.extend([{ ... }])
52
+ ```
53
+
54
+ There are currently full types for settings stage, but only basic types for the data stage.
55
+
56
+ ### Factorio lualib modules
57
+
58
+ Currently, there are types for the following modules:
59
+
60
+ - `util`
61
+ - `mod-gui`
62
+
63
+ If you have a need for types to more lualib modules, feel free to open an issue or pull request on GitHub.
64
+
65
+ ### The `global` table
66
+
67
+ The `global` table is just a lua table which can have any shape the mod desires, so it is not defined in typed-factorio. Instead, you can either:
68
+
69
+ - add `declare const global: <Your type>` in a `.d.ts` file included in your project, to apply it project-wide, or
70
+ - add `declare const global: {...}` to each module/file where needed. This way, you can also only define attributes that each module/file specifically uses.
71
+
72
+ ## Type features
73
+
74
+ Typed-factorio has 100% complete types for the runtime stage. Description-only concepts and some not documented types are filled in manually.
75
+
76
+ Here are some details on particular type features:
77
+
78
+ ### Lua features
79
+
80
+ The types include [TypescriptToLua language extensions](https://typescripttolua.github.io/docs/advanced/language-extensions/)
81
+ and [lua-types](https://github.com/TypeScriptToLua/lua-types) (for v5.2) as dependencies.
82
+
83
+ ### `nil`
84
+
85
+ The types consistently use `undefined` to represent `nil`.
86
+ `null` is not used, because `undefined` in typescript is much more similar to `nil` in lua, and optional parameters/properties already use `undefined`.
87
+
88
+ 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!`.
89
+
90
+ ### Variant parameter types
91
+
92
+ Variant parameter types (types with "additional fields can be specified depending on type") are handled as a union of all variants (which is often a [discriminated union](https://basarat.gitbook.io/typescript/type-system/discriminated-unions#discriminated-union)). This gives proper type checking for each variant.
93
+
94
+ The type for a specific variant is prefixed with the variant name, or with "Other" for variants without additional fields (e.g. `AmmoDamageTechnologyModifier`, `OtherTechnologyModifier`).
95
+
96
+ ### Types with subclasses
97
+
98
+ Some classes have attributes that are documented to only work on particular subclasses. For these classes, e.g. `LuaEntity`, there are also these other types that you can _optionally_ use:
99
+
100
+ - a "Base" type, e.g. `BaseEntity`, which only contains members usable by all subclasses
101
+ - individual subclass types, e.g. `CraftingMachineEntity`, which extends the base type with members specific to that subclass
102
+
103
+ The simple class name, `LuaEntity` in this example, still contains attributes for _all_ subclasses.
104
+
105
+ ### Events
106
+
107
+ `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.
108
+
109
+ You can pass a type parameter to `script.generate_event_name<T>()`, 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.
110
+
111
+ ### Array-like types
112
+
113
+ Classes that have an index operator, a length operator, and have an array-like structure, inherit from `(Readonly)Array`. These are `LuaInventory`, `LuaFluidBox`, `LuaTransportLine`. This allows you to use these classes like arrays, meaning having array methods, and `.length` translating to the lua length operator. However, this also means, like typescript arrays, they are **0-indexed, not 1-indexed**.
114
+
115
+ ### Table or array types, and "Read" concepts
116
+
117
+ 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.
118
+
119
+ Table-or-array types will appear in the Table form when known to be in a read position. This also applies to other concepts/complex types that have table-or-array attributes.
120
+
121
+ For some concepts, there is also a special form for when the concept is used in a "read" position, where all table-or-array types are in Table form. These types are suffixed with `Read`, e.g. `ScriptPositionRead`.
122
+
123
+ ### LuaGuiElement
124
+
125
+ `LuaGuiElement` is broken up into a [discriminated union](https://basarat.gitbook.io/typescript/type-system/discriminated-unions), with a separate type for each gui element type. Individual gui element types can be referred to by `<Type>GuiElement`, e.g. `ButtonGuiElement`.
126
+
127
+ Similarly, the table passed to `LuaGuiElement.add`, referred to as `GuiSpec`, is also broken up into a discriminated union for each gui element type. The type for a specific GuiSpec type is `<Type>GuiSpec`, e.g. `ListBoxGuiSpec`. `LuaGuiElement.add` will return the appropriate gui element type corresponding to the gui spec type received.
128
+
129
+ This is done both to provide more accurate types, and for possible integration with [JSX](https://typescripttolua.github.io/docs/jsx/).
130
+
131
+ ### Examples
132
+
133
+ Check out the `test` directory on GitHub for more examples on particular type features.
package/data/types.d.ts CHANGED
@@ -1,13 +1,13 @@
1
- export interface Data {
2
- readonly raw: Record<string, Record<string, any>>
3
-
4
- /**
5
- * The `data` table expects a specific format for each item in the table. Missing properties will either fall back to
6
- * default values or give an error indicating what's missing. Extra properties that the game isn't looking for are
7
- * simply ignored.
8
- */
9
- extend(prototypes: Record<string, any>[]): void
10
- }
11
-
12
- /** A mapping of mod names to mod version for all enabled mods. */
13
- export type Mods = Record<string, string>
1
+ export interface Data {
2
+ readonly raw: Record<string, Record<string, any>>
3
+
4
+ /**
5
+ * The `data` table expects a specific format for each item in the table. Missing properties will either fall back to
6
+ * default values or give an error indicating what's missing. Extra properties that the game isn't looking for are
7
+ * simply ignored.
8
+ */
9
+ extend(prototypes: Record<string, any>[]): void
10
+ }
11
+
12
+ /** A mapping of mod names to mod version for all enabled mods. */
13
+ export type Mods = Record<string, string>