typed-factorio 0.13.2 → 0.16.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,123 +1,123 @@
1
- // from https://lua-api.factorio.com/latest/Libraries.html
2
- // last updated for 1.1.35, 1.1.36, 1.1.37
3
-
4
- /** @noSelfInFile */
5
-
6
- /** @noSelf */
7
- interface SerpentOptions {
8
- /** Indentation; triggers long multi-line output. */
9
- indent: string
10
- /** Provide stringified value in a comment (up to maxlevel of depth). */
11
- comment: boolean | number
12
- /** Sort keys. */
13
- sortkeys: boolean | ((this: void, keys: any[], table: any) => void)
14
- /** Force sparse encoding (no nil filling based on #t). */
15
- sparse: boolean
16
- /** Remove spaces. */
17
- compact: boolean
18
- /** Raise fatal error on non-serializable values. */
19
- fatal: boolean
20
- /** Disable bytecode serialization for easy comparison. */
21
- nocode: boolean
22
- /** Disable checking numbers against undefined and huge values. */
23
- nohuge: boolean
24
- /** Specify max level up to which to expand nested tables. */
25
- maxlevel: number
26
- /** Specify max number of elements in a table. */
27
- maxnum: number
28
- /** Specify max length for all table elements. */
29
- maxlength: number
30
- /**
31
- * Use __tostring metamethod when serializing tables (v0.29); set to false to disable and serialize the table as is,
32
- * even when __tostring is present.
33
- */
34
- metatostring: boolean
35
- /**
36
- * Specify format for numeric values as shortest possible round-trippable double (v0.30). Use "%.16g" for better
37
- * readability and "%.17g" (the default value) to preserve floating point precision.
38
- */
39
- numformat: string
40
- /** Allows to specify a list of values to ignore (as keys). */
41
- valignore: string[]
42
- /** Allows to specify the list of keys to be serialized. Any keys not in this list are not included in final output (as keys). */
43
- keyallow: string[]
44
- /** Allows to specity the list of keys to ignore in serialization. */
45
- keyignore: string[]
46
- /** Allows to specify a list of value types to ignore (as keys). */
47
- valtypeignore: string[]
48
- /** Provide custom output for tables. */
49
- custom(opts: {
50
- /** The name of the current element with '=' or an empty string in case of array index, */
51
- tag: string
52
- /** An opening table bracket { and associated indentation and newline (if any), */
53
- head: string
54
- /** Table elements concatenated into a string using commas and indentation/newlines (if any), */
55
- body: string
56
- /** A closing table bracket } and associated indentation and newline (if any), and */
57
- tail: string
58
- /** The current level. */
59
- level: number
60
- }): string
61
- /** Name; triggers full serialization with self-ref section. */
62
- name: string
63
-
64
- refcomment: boolean | number
65
- tablecomment: boolean | number
66
- }
67
-
68
- /**
69
- * Factorio provides the {@link https://github.com/pkulchenko/serpent serpent library} as a global variable `serpent` for
70
- * all mods to use. It allows for easy debugging of tables, because serpent makes it trivial to print them, for example
71
- * by using `serpent.block()`. However, serpent cannot pretty-print LuaObjects such as LuaEntity. The serpent library
72
- * was modified to improve determinism, e.g. comments are turned off by default to avoid returning table addresses.
73
- * Furthermore, two options were added: `refcomment` (true/false/maxlevel) and `tablecomment` (true/false/maxlevel),
74
- * which allow to separately control the self-reference and table value output of the `comment` option.
75
- */
76
- declare namespace serpent {
77
- /** Full serialization; sets name, compact and sparse options; */
78
- function dump(tbl: unknown, options?: Partial<SerpentOptions>): string
79
-
80
- /** Single line pretty printing, no self-ref section; sets sortkeys and comment options; */
81
- function line(tbl: unknown, options?: Partial<SerpentOptions>): string
82
-
83
- /** Multi-line indented pretty printing, no self-ref section; sets indent, sortkeys, and comment options. */
84
- function block(tbl: unknown, options?: Partial<SerpentOptions>): string
85
-
86
- /**
87
- * For loading serialized fragments, serpent also provides `load` function that adds safety checks and reports an
88
- * error if there is any executable code in the fragment.
89
- */
90
- function load<T>(str: string, options?: { safe?: boolean }): LuaMultiReturn<[true, T] | [false, string]>
91
- }
92
-
93
- /**
94
- * This function allows to log {@link LocalisedString} to the Factorio
95
- * {@link https://wiki.factorio.com/Log_file log file}. This, in combination with serpent, makes debugging in the data
96
- * stage easier, because it allows to simply inspect entire prototype tables. For example, this allows to see all
97
- * properties of the sulfur item prototype: `log(serpent.block(data.raw["item"]["sulfur"]))`
98
- */
99
- declare function log(ls: LocalisedString): void
100
-
101
- /**
102
- * This function allows printing {@link LocalisedString}s to stdout without polluting the logfile. This is primarily
103
- * useful for communicating with external tools that launch Factorio as a child process.
104
- */
105
- declare function localised_print(ls: LocalisedString): void
106
-
107
- /**
108
- * Factorio provides the function `table_size()` as a simple way to find the size of tables with non-continuous keys,
109
- * because the standard `#` does not work correctly for these. The function is a C++-side implementation of the
110
- * following Lua code, thus it is faster than using this code in Lua:
111
- *
112
- * local function size(t)
113
- * local count = 0
114
- * for k,v in pairs(t) do
115
- * count = count + 1
116
- * end
117
- * return count
118
- * end
119
- *
120
- * Note that `table_size()` does not work correctly for {@link LuaCustomTable}s, their size has to be determined with
121
- * {@link LuaCustomTable.length LuaCustomTable::operator #} instead.
122
- */
123
- declare function table_size(tbl: table): number
1
+ // from https://lua-api.factorio.com/latest/Libraries.html
2
+ // last updated for 1.1.35, 1.1.36, 1.1.37
3
+
4
+ /** @noSelfInFile */
5
+
6
+ /** @noSelf */
7
+ interface SerpentOptions {
8
+ /** Indentation; triggers long multi-line output. */
9
+ indent: string
10
+ /** Provide stringified value in a comment (up to maxlevel of depth). */
11
+ comment: boolean | number
12
+ /** Sort keys. */
13
+ sortkeys: boolean | ((this: void, keys: any[], table: any) => void)
14
+ /** Force sparse encoding (no nil filling based on #t). */
15
+ sparse: boolean
16
+ /** Remove spaces. */
17
+ compact: boolean
18
+ /** Raise fatal error on non-serializable values. */
19
+ fatal: boolean
20
+ /** Disable bytecode serialization for easy comparison. */
21
+ nocode: boolean
22
+ /** Disable checking numbers against undefined and huge values. */
23
+ nohuge: boolean
24
+ /** Specify max level up to which to expand nested tables. */
25
+ maxlevel: number
26
+ /** Specify max number of elements in a table. */
27
+ maxnum: number
28
+ /** Specify max length for all table elements. */
29
+ maxlength: number
30
+ /**
31
+ * Use __tostring metamethod when serializing tables (v0.29); set to false to disable and serialize the table as is,
32
+ * even when __tostring is present.
33
+ */
34
+ metatostring: boolean
35
+ /**
36
+ * Specify format for numeric values as shortest possible round-trippable double (v0.30). Use "%.16g" for better
37
+ * readability and "%.17g" (the default value) to preserve floating point precision.
38
+ */
39
+ numformat: string
40
+ /** Allows to specify a list of values to ignore (as keys). */
41
+ valignore: string[]
42
+ /** Allows to specify the list of keys to be serialized. Any keys not in this list are not included in final output (as keys). */
43
+ keyallow: string[]
44
+ /** Allows to specity the list of keys to ignore in serialization. */
45
+ keyignore: string[]
46
+ /** Allows to specify a list of value types to ignore (as keys). */
47
+ valtypeignore: string[]
48
+ /** Provide custom output for tables. */
49
+ custom(opts: {
50
+ /** The name of the current element with '=' or an empty string in case of array index, */
51
+ tag: string
52
+ /** An opening table bracket { and associated indentation and newline (if any), */
53
+ head: string
54
+ /** Table elements concatenated into a string using commas and indentation/newlines (if any), */
55
+ body: string
56
+ /** A closing table bracket } and associated indentation and newline (if any), and */
57
+ tail: string
58
+ /** The current level. */
59
+ level: number
60
+ }): string
61
+ /** Name; triggers full serialization with self-ref section. */
62
+ name: string
63
+
64
+ refcomment: boolean | number
65
+ tablecomment: boolean | number
66
+ }
67
+
68
+ /**
69
+ * Factorio provides the {@link https://github.com/pkulchenko/serpent serpent library} as a global variable `serpent` for
70
+ * all mods to use. It allows for easy debugging of tables, because serpent makes it trivial to print them, for example
71
+ * by using `serpent.block()`. However, serpent cannot pretty-print LuaObjects such as LuaEntity. The serpent library
72
+ * was modified to improve determinism, e.g. comments are turned off by default to avoid returning table addresses.
73
+ * Furthermore, two options were added: `refcomment` (true/false/maxlevel) and `tablecomment` (true/false/maxlevel),
74
+ * which allow to separately control the self-reference and table value output of the `comment` option.
75
+ */
76
+ declare namespace serpent {
77
+ /** Full serialization; sets name, compact and sparse options; */
78
+ function dump(tbl: unknown, options?: Partial<SerpentOptions>): string
79
+
80
+ /** Single line pretty printing, no self-ref section; sets sortkeys and comment options; */
81
+ function line(tbl: unknown, options?: Partial<SerpentOptions>): string
82
+
83
+ /** Multi-line indented pretty printing, no self-ref section; sets indent, sortkeys, and comment options. */
84
+ function block(tbl: unknown, options?: Partial<SerpentOptions>): string
85
+
86
+ /**
87
+ * For loading serialized fragments, serpent also provides `load` function that adds safety checks and reports an
88
+ * error if there is any executable code in the fragment.
89
+ */
90
+ function load<T>(str: string, options?: { safe?: boolean }): LuaMultiReturn<[true, T] | [false, string]>
91
+ }
92
+
93
+ /**
94
+ * This function allows to log {@link LocalisedString} to the Factorio
95
+ * {@link https://wiki.factorio.com/Log_file log file}. This, in combination with serpent, makes debugging in the data
96
+ * stage easier, because it allows to simply inspect entire prototype tables. For example, this allows to see all
97
+ * properties of the sulfur item prototype: `log(serpent.block(data.raw["item"]["sulfur"]))`
98
+ */
99
+ declare function log(ls: LocalisedString): void
100
+
101
+ /**
102
+ * This function allows printing {@link LocalisedString}s to stdout without polluting the logfile. This is primarily
103
+ * useful for communicating with external tools that launch Factorio as a child process.
104
+ */
105
+ declare function localised_print(ls: LocalisedString): void
106
+
107
+ /**
108
+ * Factorio provides the function `table_size()` as a simple way to find the size of tables with non-continuous keys,
109
+ * because the standard `#` does not work correctly for these. The function is a C++-side implementation of the
110
+ * following Lua code, thus it is faster than using this code in Lua:
111
+ *
112
+ * local function size(t)
113
+ * local count = 0
114
+ * for k,v in pairs(t) do
115
+ * count = count + 1
116
+ * end
117
+ * return count
118
+ * end
119
+ *
120
+ * Note that `table_size()` does not work correctly for {@link LuaCustomTable}s, their size has to be determined with
121
+ * {@link LuaCustomTable.length LuaCustomTable::operator #} instead.
122
+ */
123
+ declare function table_size(tbl: table): number
@@ -1,11 +1,11 @@
1
- /** @noSelfInFile */
2
-
3
- /** @noResolution */
4
- declare module "mod-gui" {
5
- const button_style: string
6
- const frame_style: string
7
-
8
- function get_button_flow(player: LuaPlayer): FrameGuiElement
9
-
10
- function get_frame_flow(player: LuaPlayer): FlowGuiElement
11
- }
1
+ /** @noSelfInFile */
2
+
3
+ /** @noResolution */
4
+ declare module "mod-gui" {
5
+ const button_style: string
6
+ const frame_style: string
7
+
8
+ function get_button_flow(player: LuaPlayer): FrameGuiElement
9
+
10
+ function get_frame_flow(player: LuaPlayer): FlowGuiElement
11
+ }
@@ -1,13 +1,14 @@
1
- /** @noSelfInFile */
2
-
3
- /** Iterating with `pairs` will only iterate the array part of a {@link LuaCustomTable}. */
4
- declare function pairs<V>(table: LuaCustomTable<number | string, V>): LuaIterable<LuaMultiReturn<[number, V]>>
5
-
6
- declare function pairs<K extends keyof any, V>(table: LuaCustomTable<K, V>): LuaIterable<LuaMultiReturn<[K, V]>>
7
-
8
- /**
9
- * {@link LuaCustomTable} cannot be iterated with `ipairs`. Use `pairs` instead.
10
- *
11
- * @deprecated
12
- */
13
- declare function ipairs(table: LuaCustomTable<any, any>): never
1
+ /** @noSelfInFile */
2
+
3
+ /**
4
+ * Iterating with `pairs` will only iterate the array part of a {@link LuaCustomTable}.
5
+ *
6
+ * **Note**: you can also iterate on a LuaCustomTable directly without using `pairs`, e.g. `for(const [k, v] of table)`.
7
+ */
8
+ declare function pairs<V>(table: LuaCustomTable<number | string, V>): LuaIterable<LuaMultiReturn<[number, V]>>
9
+
10
+ /** **Note**: you can also iterate on a LuaCustomTable directly without using `pairs`, e.g. `for(const [k, v] of table)`. */
11
+ declare function pairs<K extends number | string, V>(table: LuaCustomTable<K, V>): LuaIterable<LuaMultiReturn<[K, V]>>
12
+
13
+ /** @deprecated {@link LuaCustomTable} cannot be iterated with `ipairs`; Use {@link pairs} instead. */
14
+ declare function ipairs(table: LuaCustomTable<any, any>): never
package/runtime/util.d.ts CHANGED
@@ -1,120 +1,116 @@
1
- // "util" is declared only as a module, even though it also modifies global variables
2
- // This is both because of limitations in `declare module`, and that modules are much friendlier to tooling.
3
-
4
- /** @noSelfInFile */
5
-
6
- /** @noResolution */
7
- declare module "util" {
8
- namespace table {
9
- function deepcopy<T>(table: T): T
10
-
11
- function compare<T>(tb1: T, tb2: T): boolean
12
- }
13
-
14
- function copy<T>(table: T): T
15
-
16
- function distance(position1: Position, position2: Position): number
17
-
18
- function positiontostr(position: Position): string
19
-
20
- function formattime(ticks: number): string
21
-
22
- /** Supports 'rrggbb', 'rgb', 'rrggbbaa', 'rgba', 'ww', 'w' */
23
- function color(hex: string): ColorTable
24
-
25
- function premul_color(color: Color): ColorTable
26
-
27
- function mix_color(c1: Color, c2: Color): ColorArray
28
-
29
- function multiply_color(c1: Color, n: number): ColorArray
30
-
31
- function moveposition(
32
- position: Position,
33
- direction: defines.direction.north | defines.direction.east | defines.direction.south | defines.direction.west,
34
- distance: number
35
- ): Position
36
- function moveposition(
37
- position: Position,
38
- direction: defines.direction, //todo: cardinal only
39
- distance: number
40
- ): Position | undefined
41
-
42
- function oppositedirection(direction: defines.direction): defines.direction
43
-
44
- /** Creates a new array where each element in `stripes` is duplicated `count` times */
45
- function multiplystripes<T>(count: number, stripes: T[]): T[]
46
-
47
- /** Gets tile position by pixel */
48
- function by_pixel(x: number, y: number): Position
49
-
50
- /** Gets tile position by pixel, hr */
51
- function by_pixel_hr(x: number, y: number): Position
52
-
53
- // omitted: foreach_sprite_definition
54
-
55
- function add_shift(a: PositionArray | undefined, b: PositionArray): PositionArray
56
- function add_shift(a: PositionArray, b: PositionArray | undefined): PositionArray
57
- function add_shift(a: PositionArray | undefined, b: PositionArray | undefined): PositionArray | undefined
58
-
59
- // omitted: add_shift_offset
60
-
61
- function mul_shift(shift: PositionArray, scale: number | undefined): PositionArray
62
- function mul_shift(shift: PositionArray | undefined, scale: number | undefined): PositionArray | undefined
63
-
64
- function format_number(amount: number, append_suffix?: boolean): string
65
-
66
- function increment(t: number[], index: number, v?: number): void
67
-
68
- // omitted: conditional_return
69
-
70
- /**
71
- * Recursively merges and/or deep-copies tables. Entries in later tables override entries in earlier ones, unless both
72
- * entries are themselves tables, in which case they are recursively merged. Non-merged tables are deep-copied, so
73
- * that the result is brand new.
74
- */
75
- function merge<T extends object>(tables: T[]): T
76
-
77
- function insert_safe(entity: LuaEntity | undefined, item_dict: Record<string, number> | undefined): void
78
-
79
- function remove_safe(entity: LuaEntity | undefined, item_dict: Record<string, number> | undefined): void
80
-
81
- function split_whitespace(string: string): string[]
82
-
83
- // omitted: split, string_starts_with. already TS functions for that
84
-
85
- // omitted: online_players. use game.connected_players
86
-
87
- function clamp(x: number, lower: number, upper: number): number
88
-
89
- // omitted: get_walkable_tile
90
-
91
- // omitted: combine_icons
92
- // omitted: technology_icons. Create an issue if you really want to see these
93
-
94
- function parse_energy(energy: string): number
95
-
96
- function product_amount(
97
- product: {
98
- probability: number
99
- } & (
100
- | {
101
- amount: number
102
- }
103
- | {
104
- amount_min: number
105
- amount_max: number
106
- }
107
- )
108
- ): number
109
-
110
- function empty_sprite(): object
111
-
112
- // omitted: draw_as_glow
113
- // omitted: remove_tile_references
114
-
115
- function remove_from_list<T>(list: T[], value: T): boolean
116
-
117
- function list_to_map<T extends keyof any>(list: T[]): Record<T, true>
118
- function list_to_map<T>(list: T[]): LuaTable<T, true>
119
- function list_to_map<T>(list: T): LuaTable<T[keyof T], true>
120
- }
1
+ // "util" is declared only as a module, even though it also modifies global variables
2
+ // This is both because of limitations in `declare module`, and that modules are much friendlier to tooling.
3
+
4
+ /** @noSelfInFile */
5
+
6
+ /** @noResolution */
7
+ declare module "util" {
8
+ namespace table {
9
+ function deepcopy<T>(table: T): T
10
+
11
+ function compare<T>(tb1: T, tb2: T): boolean
12
+ }
13
+
14
+ function copy<T>(table: T): T
15
+
16
+ function distance(position1: Position, position2: Position): number
17
+
18
+ function positiontostr(position: Position): string
19
+
20
+ function formattime(ticks: number): string
21
+
22
+ /** Supports 'rrggbb', 'rgb', 'rrggbbaa', 'rgba', 'ww', 'w' */
23
+ function color(hex: string): ColorTable
24
+
25
+ function premul_color(color: Color): ColorTable
26
+
27
+ function mix_color(c1: Color, c2: Color): ColorArray
28
+
29
+ function multiply_color(c1: Color, n: number): ColorArray
30
+
31
+ function moveposition(
32
+ position: Position,
33
+ direction: defines.direction.north | defines.direction.east | defines.direction.south | defines.direction.west,
34
+ distance: number
35
+ ): Position
36
+ function moveposition(position: Position, direction: defines.direction, distance: number): Position | undefined
37
+
38
+ function oppositedirection(direction: defines.direction): defines.direction
39
+
40
+ /** Creates a new array where each element in `stripes` is duplicated `count` times */
41
+ function multiplystripes<T>(count: number, stripes: T[]): T[]
42
+
43
+ /** Gets tile position by pixel */
44
+ function by_pixel(x: number, y: number): Position
45
+
46
+ /** Gets tile position by pixel, hr */
47
+ function by_pixel_hr(x: number, y: number): Position
48
+
49
+ // omitted: foreach_sprite_definition
50
+
51
+ function add_shift(a: PositionArray | undefined, b: PositionArray): PositionArray
52
+ function add_shift(a: PositionArray, b: PositionArray | undefined): PositionArray
53
+ function add_shift(a: PositionArray | undefined, b: PositionArray | undefined): PositionArray | undefined
54
+
55
+ // omitted: add_shift_offset
56
+
57
+ function mul_shift(shift: PositionArray, scale: number | undefined): PositionArray
58
+ function mul_shift(shift: PositionArray | undefined, scale: number | undefined): PositionArray | undefined
59
+
60
+ function format_number(amount: number, append_suffix?: boolean): string
61
+
62
+ function increment(t: number[], index: number, v?: number): void
63
+
64
+ // omitted: conditional_return
65
+
66
+ /**
67
+ * Recursively merges and/or deep-copies tables. Entries in later tables override entries in earlier ones, unless both
68
+ * entries are themselves tables, in which case they are recursively merged. Non-merged tables are deep-copied, so
69
+ * that the result is brand new.
70
+ */
71
+ function merge<T extends object>(tables: T[]): T
72
+
73
+ function insert_safe(entity: LuaEntity | undefined, item_dict: Record<string, number> | undefined): void
74
+
75
+ function remove_safe(entity: LuaEntity | undefined, item_dict: Record<string, number> | undefined): void
76
+
77
+ function split_whitespace(string: string): string[]
78
+
79
+ // omitted: split, string_starts_with. already TS functions for that
80
+
81
+ // omitted: online_players. use game.connected_players
82
+
83
+ function clamp(x: number, lower: number, upper: number): number
84
+
85
+ // omitted: get_walkable_tile
86
+
87
+ // omitted: combine_icons
88
+ // omitted: technology_icons. Create an issue if you really want to see these
89
+
90
+ function parse_energy(energy: string): number
91
+
92
+ function product_amount(
93
+ product: {
94
+ probability: number
95
+ } & (
96
+ | {
97
+ amount: number
98
+ }
99
+ | {
100
+ amount_min: number
101
+ amount_max: number
102
+ }
103
+ )
104
+ ): number
105
+
106
+ function empty_sprite(): object
107
+
108
+ // omitted: draw_as_glow
109
+ // omitted: remove_tile_references
110
+
111
+ function remove_from_list<T>(list: T[], value: T): boolean
112
+
113
+ function list_to_map<T extends keyof any>(list: T[]): Record<T, true>
114
+ function list_to_map<T>(list: T[]): LuaTable<T, true>
115
+ function list_to_map<T>(list: T): LuaTable<T[keyof T], true>
116
+ }