@defold-typescript/library-types 0.22.0 → 0.23.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.
Files changed (56) hide show
  1. package/api-doc/{bridge.bridge.json → bridge.json} +749 -844
  2. package/api-doc/decore.json +22 -22
  3. package/api-doc/druid.json +195 -1790
  4. package/api-doc/event.json +1074 -0
  5. package/api-doc/immutable.json +65 -0
  6. package/api-doc/lang.json +528 -0
  7. package/api-doc/{event.event.json → log.json} +96 -101
  8. package/api-doc/narrator.json +647 -0
  9. package/api-doc/proto.json +995 -0
  10. package/api-doc/saver.saver.json +713 -263
  11. package/api-doc/saver.storage.json +282 -52
  12. package/api-doc/squid.json +846 -0
  13. package/api-doc/tweener.json +277 -0
  14. package/generated/bridge.d.ts +468 -0
  15. package/generated/decore.d.ts +36 -36
  16. package/generated/druid.d.ts +137 -443
  17. package/generated/event.d.ts +318 -0
  18. package/generated/immutable.d.ts +13 -0
  19. package/generated/lang.d.ts +101 -0
  20. package/generated/log.d.ts +36 -0
  21. package/generated/narrator.d.ts +121 -0
  22. package/generated/proto.d.ts +146 -0
  23. package/generated/saver.saver.d.ts +287 -42
  24. package/generated/saver.storage.d.ts +77 -14
  25. package/generated/squid.d.ts +127 -0
  26. package/generated/tweener.d.ts +42 -0
  27. package/library-classification.json +0 -71
  28. package/library-targets.json +0 -66
  29. package/luals-targets.json +114 -0
  30. package/package.json +4 -33
  31. package/script-api-targets.json +15 -0
  32. package/scripts/__snapshots__/parse-luals.test.ts.snap +340 -75
  33. package/scripts/apply-luals-overrides.ts +63 -0
  34. package/scripts/emit-library-dts.ts +84 -3
  35. package/scripts/lower-api-doc.ts +48 -16
  36. package/scripts/luals-fidelity.ts +7 -0
  37. package/scripts/map-luals-types.ts +34 -1
  38. package/scripts/parse-luals.ts +423 -18
  39. package/scripts/sync-luals-types.ts +15 -1
  40. package/scripts/sync-script-api-types.ts +368 -0
  41. package/api-doc/immutable.immutable.json +0 -63
  42. package/api-doc/lang.lang.json +0 -411
  43. package/api-doc/log.log.json +0 -50
  44. package/api-doc/narrator.narrator.json +0 -150
  45. package/api-doc/proto.proto.json +0 -355
  46. package/api-doc/squid.squid.json +0 -660
  47. package/api-doc/tweener.tweener.json +0 -419
  48. package/generated/bridge.bridge.d.ts +0 -533
  49. package/generated/event.event.d.ts +0 -54
  50. package/generated/immutable.immutable.d.ts +0 -13
  51. package/generated/lang.lang.d.ts +0 -33
  52. package/generated/log.log.d.ts +0 -40
  53. package/generated/narrator.narrator.d.ts +0 -66
  54. package/generated/proto.proto.d.ts +0 -36
  55. package/generated/squid.squid.d.ts +0 -106
  56. package/generated/tweener.tweener.d.ts +0 -151
@@ -7,33 +7,36 @@
7
7
  "elements": [
8
8
  {
9
9
  "type": "FUNCTION",
10
- "name": "init",
11
- "brief": "",
12
- "description": "",
13
- "parameters": [],
10
+ "name": "set_logger",
11
+ "brief": "File format enum (mirrors saver_internal.FORMAT)\nCustomize the logging mechanism used by Defold Saver.\nYou can use Defold Log library or provide a custom logger.\nlocal log = require(\"log.log\")\nlocal saver = require(\"saver.saver\")\n\nsaver.set_logger(log.get_logger(\"saver\"))",
12
+ "description": "File format enum (mirrors saver_internal.FORMAT)\nCustomize the logging mechanism used by Defold Saver.\nYou can use Defold Log library or provide a custom logger.\nlocal log = require(\"log.log\")\nlocal saver = require(\"saver.saver\")\n\nsaver.set_logger(log.get_logger(\"saver\"))",
13
+ "parameters": [
14
+ {
15
+ "name": "logger_instance",
16
+ "doc": "A logger object that follows the specified logging interface, including methods for trace, debug, info, warn, error. Pass nil to remove the default logger.",
17
+ "types": [
18
+ "saver_logger | LuaTable | undefined"
19
+ ],
20
+ "is_optional": "True",
21
+ "is_vararg": "False"
22
+ }
23
+ ],
14
24
  "returnvalues": []
15
25
  },
16
26
  {
17
27
  "type": "FUNCTION",
18
- "name": "bind_save_part",
19
- "brief": "",
20
- "description": "",
28
+ "name": "init",
29
+ "brief": "Initialize the Saver module. Should be called at the start of your game to set up the module.\nCall it after saver.set_migrations if you are using migrations.\nThis function loads the game state from a file and starts the autosave timer.\nIf the game state file does not exist, a new game state is created.\nsaver.init()",
30
+ "description": "Initialize the Saver module. Should be called at the start of your game to set up the module.\nCall it after saver.set_migrations if you are using migrations.\nThis function loads the game state from a file and starts the autosave timer.\nIf the game state file does not exist, a new game state is created.\nsaver.init()",
21
31
  "parameters": [
22
32
  {
23
- "name": "keyId",
24
- "doc": "",
33
+ "name": "config",
34
+ "doc": "Configuration table.",
25
35
  "types": [
26
- "string"
36
+ "saver_config | undefined"
27
37
  ],
28
- "is_optional": "False"
29
- },
30
- {
31
- "name": "tableReference",
32
- "doc": "",
33
- "types": [
34
- "any"
35
- ],
36
- "is_optional": "False"
38
+ "is_optional": "True",
39
+ "is_vararg": "False"
37
40
  }
38
41
  ],
39
42
  "returnvalues": []
@@ -41,22 +44,23 @@
41
44
  {
42
45
  "type": "FUNCTION",
43
46
  "name": "save_game_state",
44
- "brief": "",
45
- "description": "",
47
+ "brief": "Save the current game state to a file. If no file name is provided, the default file name specified in the game.project file is used.\n-- Save the game with default name\nsaver.save_game_state()\n\n-- Save the game with custom name\nsaver.save_game_state(\"custom_save\")",
48
+ "description": "Save the current game state to a file. If no file name is provided, the default file name specified in the game.project file is used.\n-- Save the game with default name\nsaver.save_game_state()\n\n-- Save the game with custom name\nsaver.save_game_state(\"custom_save\")",
46
49
  "parameters": [
47
50
  {
48
- "name": "fileName",
49
- "doc": "",
51
+ "name": "save_name",
52
+ "doc": "The name of the file to save the game state to. Default is the file name specified in the game.project file under the saver.save_file key.",
50
53
  "types": [
51
- "string"
54
+ "string | undefined"
52
55
  ],
53
- "is_optional": "True"
56
+ "is_optional": "True",
57
+ "is_vararg": "False"
54
58
  }
55
59
  ],
56
60
  "returnvalues": [
57
61
  {
58
62
  "name": "",
59
- "doc": "",
63
+ "doc": "true if the game state was saved successfully, false otherwise.",
60
64
  "types": [
61
65
  "boolean"
62
66
  ]
@@ -66,22 +70,49 @@
66
70
  {
67
71
  "type": "FUNCTION",
68
72
  "name": "load_game_state",
69
- "brief": "",
70
- "description": "",
73
+ "brief": "Load the game state from a file. If no file name is provided, the default file name specified in the game.project file is used.\nlocal is_loaded = saver.load_game_state() -- Load the game state with default name\nlocal is_loaded = saver.load_game_state(\"custom_save\") -- Load the game state with custom name",
74
+ "description": "Load the game state from a file. If no file name is provided, the default file name specified in the game.project file is used.\nlocal is_loaded = saver.load_game_state() -- Load the game state with default name\nlocal is_loaded = saver.load_game_state(\"custom_save\") -- Load the game state with custom name",
71
75
  "parameters": [
72
76
  {
73
- "name": "fileName",
74
- "doc": "",
77
+ "name": "save_name",
78
+ "doc": "The name of the file to load the game state from. Default is the file name specified in the game.project file.",
75
79
  "types": [
76
- "string"
80
+ "string | undefined"
77
81
  ],
78
- "is_optional": "True"
82
+ "is_optional": "True",
83
+ "is_vararg": "False"
79
84
  }
80
85
  ],
81
86
  "returnvalues": [
82
87
  {
83
88
  "name": "",
84
- "doc": "",
89
+ "doc": "true if the game state was loaded successfully, false if the new game state is created",
90
+ "types": [
91
+ "boolean"
92
+ ]
93
+ }
94
+ ]
95
+ },
96
+ {
97
+ "type": "FUNCTION",
98
+ "name": "delete_game_state",
99
+ "brief": "Delete the game state file. Doesn't affect the current game state.\nIf autosave is enabled, it will be rescheduled, so probably you want to immediately restart the game.\n-- Delete the game state with default name\nsaver.delete_game_state()\n\n-- Delete the game state with custom name\nsaver.delete_game_state(\"custom_save\")",
100
+ "description": "Delete the game state file. Doesn't affect the current game state.\nIf autosave is enabled, it will be rescheduled, so probably you want to immediately restart the game.\n-- Delete the game state with default name\nsaver.delete_game_state()\n\n-- Delete the game state with custom name\nsaver.delete_game_state(\"custom_save\")",
101
+ "parameters": [
102
+ {
103
+ "name": "save_name",
104
+ "doc": "The name of the file to delete the game state from. Default is the file name specified in the game.project file.",
105
+ "types": [
106
+ "string | undefined"
107
+ ],
108
+ "is_optional": "True",
109
+ "is_vararg": "False"
110
+ }
111
+ ],
112
+ "returnvalues": [
113
+ {
114
+ "name": "",
115
+ "doc": "true if the game state was deleted successfully, false otherwise.",
85
116
  "types": [
86
117
  "boolean"
87
118
  ]
@@ -91,15 +122,15 @@
91
122
  {
92
123
  "type": "FUNCTION",
93
124
  "name": "get_game_state",
94
- "brief": "",
95
- "description": "",
125
+ "brief": "Returns the current game state.\nlocal game_state = saver.get_game_state()\npprint(game_state)",
126
+ "description": "Returns the current game state.\nlocal game_state = saver.get_game_state()\npprint(game_state)",
96
127
  "parameters": [],
97
128
  "returnvalues": [
98
129
  {
99
130
  "name": "",
100
- "doc": "",
131
+ "doc": "The current game state.",
101
132
  "types": [
102
- "unknown"
133
+ "saver_game_state"
103
134
  ]
104
135
  }
105
136
  ]
@@ -107,55 +138,137 @@
107
138
  {
108
139
  "type": "FUNCTION",
109
140
  "name": "set_game_state",
110
- "brief": "",
111
- "description": "",
141
+ "brief": "Sets the current game state to the specified state.\nlocal game_state = saver.get_game_state()\ngame_state.game.level = 5\nsaver.set_game_state(game_state)",
142
+ "description": "Sets the current game state to the specified state.\nlocal game_state = saver.get_game_state()\ngame_state.game.level = 5\nsaver.set_game_state(game_state)",
112
143
  "parameters": [
113
144
  {
114
- "name": "state",
115
- "doc": "",
145
+ "name": "data",
146
+ "doc": "The state to set the game state to.",
116
147
  "types": [
117
- "any"
148
+ "LuaTable"
118
149
  ],
119
- "is_optional": "False"
150
+ "is_optional": "False",
151
+ "is_vararg": "False"
120
152
  }
121
153
  ],
122
154
  "returnvalues": [
123
155
  {
124
156
  "name": "",
125
- "doc": "",
157
+ "doc": "true if the game state was set successfully, false otherwise.",
126
158
  "types": [
127
159
  "boolean"
128
160
  ]
129
161
  }
130
162
  ]
131
163
  },
164
+ {
165
+ "type": "FUNCTION",
166
+ "name": "bind_save_state",
167
+ "brief": "Binds a table reference as a part of the game state. When the game state is saved, all table references will be saved.\nThis is a main function to use to save your game state. You can bind multiple tables to different parts of the game state.\nAfter binding, the table_reference will be updated with the saved data if it exists.\nlocal game_state = {\nlevel = 1,\nmoney = 100\n}\n\nsaver.bind_save_state(\"game\", game_state)\n\n-- If we have previously saved game state, the game_state will be changed to the saved data\nprint(game_state.level) -- 5 (if it was saved before)",
168
+ "description": "Binds a table reference as a part of the game state. When the game state is saved, all table references will be saved.\nThis is a main function to use to save your game state. You can bind multiple tables to different parts of the game state.\nAfter binding, the table_reference will be updated with the saved data if it exists.\nlocal game_state = {\nlevel = 1,\nmoney = 100\n}\n\nsaver.bind_save_state(\"game\", game_state)\n\n-- If we have previously saved game state, the game_state will be changed to the saved data\nprint(game_state.level) -- 5 (if it was saved before)",
169
+ "parameters": [
170
+ {
171
+ "name": "table_key_id",
172
+ "doc": "The table key to set the value for.",
173
+ "types": [
174
+ "string"
175
+ ],
176
+ "is_optional": "False",
177
+ "is_vararg": "False"
178
+ },
179
+ {
180
+ "name": "table_reference",
181
+ "doc": "The table reference to bind to the game state.",
182
+ "types": [
183
+ "LuaTable"
184
+ ],
185
+ "is_optional": "False",
186
+ "is_vararg": "False"
187
+ }
188
+ ],
189
+ "returnvalues": [
190
+ {
191
+ "name": "",
192
+ "doc": "The table_reference",
193
+ "types": [
194
+ "LuaTable"
195
+ ]
196
+ }
197
+ ]
198
+ },
132
199
  {
133
200
  "type": "FUNCTION",
134
201
  "name": "save_file_by_path",
135
- "brief": "",
136
- "description": "",
202
+ "brief": "Saves the specified data to a file at the specified path. The data format is chosen by file path extension.\nlocal data = {\nscore = 100,\nlevel = 1\n}\n\n-- Get project path works on build from the Defold Editor only\nlocal project_path = saver.get_current_game_project_folder()\n-- Use path to the resources folder\nlocal file_path = saver.get_save_path(project_path .. \"/resources/data.json\")\nsaver.save_file_by_path(data, file_path)",
203
+ "description": "Saves the specified data to a file at the specified path. The data format is chosen by file path extension.\nlocal data = {\nscore = 100,\nlevel = 1\n}\n\n-- Get project path works on build from the Defold Editor only\nlocal project_path = saver.get_current_game_project_folder()\n-- Use path to the resources folder\nlocal file_path = saver.get_save_path(project_path .. \"/resources/data.json\")\nsaver.save_file_by_path(data, file_path)",
204
+ "parameters": [
205
+ {
206
+ "name": "data",
207
+ "doc": "The lua table to save to the file.",
208
+ "types": [
209
+ "LuaTable"
210
+ ],
211
+ "is_optional": "False",
212
+ "is_vararg": "False"
213
+ },
214
+ {
215
+ "name": "path",
216
+ "doc": "The absolute path to save the file to. Contains the file name and extension. Extension can be empty, .json or .lua",
217
+ "types": [
218
+ "string"
219
+ ],
220
+ "is_optional": "False",
221
+ "is_vararg": "False"
222
+ },
223
+ {
224
+ "name": "format",
225
+ "doc": "Optional format override (json, lua, serialized, binary). If not specified, format will be detected from paths extension or data type.",
226
+ "types": [
227
+ "string | undefined"
228
+ ],
229
+ "is_optional": "True",
230
+ "is_vararg": "False"
231
+ }
232
+ ],
233
+ "returnvalues": [
234
+ {
235
+ "name": "",
236
+ "doc": "true if the file was saved successfully, false otherwise.",
237
+ "types": [
238
+ "boolean"
239
+ ]
240
+ }
241
+ ]
242
+ },
243
+ {
244
+ "type": "FUNCTION",
245
+ "name": "save_binary_by_path",
246
+ "brief": "Saves the specified data to a file at the specified path. The data format is binary.",
247
+ "description": "Saves the specified data to a file at the specified path. The data format is binary.",
137
248
  "parameters": [
138
249
  {
139
250
  "name": "data",
140
- "doc": "",
251
+ "doc": "The binary data to save to the file.",
141
252
  "types": [
142
- "any"
253
+ "string"
143
254
  ],
144
- "is_optional": "False"
255
+ "is_optional": "False",
256
+ "is_vararg": "False"
145
257
  },
146
258
  {
147
- "name": "filePath",
148
- "doc": "",
259
+ "name": "path",
260
+ "doc": "The absolute path to save the file to. Contains the file name and extension.",
149
261
  "types": [
150
262
  "string"
151
263
  ],
152
- "is_optional": "False"
264
+ "is_optional": "False",
265
+ "is_vararg": "False"
153
266
  }
154
267
  ],
155
268
  "returnvalues": [
156
269
  {
157
270
  "name": "",
158
- "doc": "",
271
+ "doc": "true if the file was saved successfully, false otherwise.",
159
272
  "types": [
160
273
  "boolean"
161
274
  ]
@@ -165,24 +278,112 @@
165
278
  {
166
279
  "type": "FUNCTION",
167
280
  "name": "load_file_by_path",
168
- "brief": "",
169
- "description": "",
281
+ "brief": "Loads the data from a file at the specified path.\n-- Get project path works on build from the Defold Editor only\nlocal project_path = saver.get_current_game_project_folder()\n-- Use path to the resources folder\nlocal file_path = saver.get_save_path(project_path .. \"/resources/data.json\")\nlocal data = saver.load_file_by_path(file_path)\npprint(data)\nNOTE: For binary data like images, use `saver.load_binary_by_path` instead.",
282
+ "description": "Loads the data from a file at the specified path.\n-- Get project path works on build from the Defold Editor only\nlocal project_path = saver.get_current_game_project_folder()\n-- Use path to the resources folder\nlocal file_path = saver.get_save_path(project_path .. \"/resources/data.json\")\nlocal data = saver.load_file_by_path(file_path)\npprint(data)\nNOTE: For binary data like images, use `saver.load_binary_by_path` instead.",
170
283
  "parameters": [
171
284
  {
172
285
  "name": "path",
173
- "doc": "",
286
+ "doc": "The absolute path to load the file from. Contains the file name and extension.",
174
287
  "types": [
175
288
  "string"
176
289
  ],
177
- "is_optional": "False"
290
+ "is_optional": "False",
291
+ "is_vararg": "False"
292
+ },
293
+ {
294
+ "name": "format",
295
+ "doc": "Optional format override (json, lua, serialized). If not specified, format will be detected from paths extension.",
296
+ "types": [
297
+ "string | undefined"
298
+ ],
299
+ "is_optional": "True",
300
+ "is_vararg": "False"
178
301
  }
179
302
  ],
180
303
  "returnvalues": [
181
304
  {
182
305
  "name": "",
183
- "doc": "",
306
+ "doc": "The data loaded from the file. If the file does not exist, returns nil.",
184
307
  "types": [
185
- "unknown"
308
+ "LuaTable | undefined"
309
+ ]
310
+ }
311
+ ]
312
+ },
313
+ {
314
+ "type": "FUNCTION",
315
+ "name": "load_binary_by_path",
316
+ "brief": "Loads the binary data from a file at the specified path.",
317
+ "description": "Loads the binary data from a file at the specified path.",
318
+ "parameters": [
319
+ {
320
+ "name": "path",
321
+ "doc": "The absolute path to the file to load. Contains the file name and extension.",
322
+ "types": [
323
+ "string"
324
+ ],
325
+ "is_optional": "False",
326
+ "is_vararg": "False"
327
+ }
328
+ ],
329
+ "returnvalues": [
330
+ {
331
+ "name": "",
332
+ "doc": "The binary data loaded from the file. If the file does not exist, returns nil.",
333
+ "types": [
334
+ "string | undefined"
335
+ ]
336
+ }
337
+ ]
338
+ },
339
+ {
340
+ "type": "FUNCTION",
341
+ "name": "delete_file_by_path",
342
+ "brief": "Deletes the file at the specified path.",
343
+ "description": "Deletes the file at the specified path.",
344
+ "parameters": [
345
+ {
346
+ "name": "path",
347
+ "doc": "The absolute path to the file to delete. Contains the file name and extension.",
348
+ "types": [
349
+ "string"
350
+ ],
351
+ "is_optional": "False",
352
+ "is_vararg": "False"
353
+ }
354
+ ],
355
+ "returnvalues": [
356
+ {
357
+ "name": "",
358
+ "doc": "true if the file was deleted successfully, false otherwise.",
359
+ "types": [
360
+ "boolean"
361
+ ]
362
+ }
363
+ ]
364
+ },
365
+ {
366
+ "type": "FUNCTION",
367
+ "name": "is_file_exists_by_path",
368
+ "brief": "Checks if the file exists at the specified path.\nlocal is_project_file_exists = saver.is_file_exists_by_path(absolute_path_to_file)",
369
+ "description": "Checks if the file exists at the specified path.\nlocal is_project_file_exists = saver.is_file_exists_by_path(absolute_path_to_file)",
370
+ "parameters": [
371
+ {
372
+ "name": "path",
373
+ "doc": "The absolute path to the file to check. Contains the file name and extension.",
374
+ "types": [
375
+ "string"
376
+ ],
377
+ "is_optional": "False",
378
+ "is_vararg": "False"
379
+ }
380
+ ],
381
+ "returnvalues": [
382
+ {
383
+ "name": "",
384
+ "doc": "true if the file exists, false otherwise.",
385
+ "types": [
386
+ "boolean"
186
387
  ]
187
388
  }
188
389
  ]
@@ -190,30 +391,76 @@
190
391
  {
191
392
  "type": "FUNCTION",
192
393
  "name": "save_file_by_name",
193
- "brief": "",
194
- "description": "",
394
+ "brief": "Saves the specified data to a file with the specified name. The file is saved in the game save folder. Filename supports subfolders.\nlocal data = {\nscore = 100,\nlevel = 1\n}\n\n-- Save the data to the game save folder\nsaver.save_file_by_name(data, \"data.json\")",
395
+ "description": "Saves the specified data to a file with the specified name. The file is saved in the game save folder. Filename supports subfolders.\nlocal data = {\nscore = 100,\nlevel = 1\n}\n\n-- Save the data to the game save folder\nsaver.save_file_by_name(data, \"data.json\")",
195
396
  "parameters": [
196
397
  {
197
398
  "name": "data",
198
- "doc": "",
399
+ "doc": "The lua table to save to the file.",
199
400
  "types": [
200
- "any"
401
+ "LuaTable"
201
402
  ],
202
- "is_optional": "False"
403
+ "is_optional": "False",
404
+ "is_vararg": "False"
203
405
  },
204
406
  {
205
- "name": "fileName",
206
- "doc": "",
407
+ "name": "filename",
408
+ "doc": "The name of the file to save the data to. Can contain subfolders.",
207
409
  "types": [
208
410
  "string"
209
411
  ],
210
- "is_optional": "False"
412
+ "is_optional": "False",
413
+ "is_vararg": "False"
414
+ },
415
+ {
416
+ "name": "format",
417
+ "doc": "Optional format override (json, lua, serialized, binary)",
418
+ "types": [
419
+ "string | undefined"
420
+ ],
421
+ "is_optional": "True",
422
+ "is_vararg": "False"
423
+ }
424
+ ],
425
+ "returnvalues": [
426
+ {
427
+ "name": "",
428
+ "doc": "true if the file was saved successfully, false otherwise.",
429
+ "types": [
430
+ "boolean"
431
+ ]
432
+ }
433
+ ]
434
+ },
435
+ {
436
+ "type": "FUNCTION",
437
+ "name": "save_binary_by_name",
438
+ "brief": "Saves the specified data to a file with the specified name. The data format is binary.",
439
+ "description": "Saves the specified data to a file with the specified name. The data format is binary.",
440
+ "parameters": [
441
+ {
442
+ "name": "data",
443
+ "doc": "The binary data to save to the file.",
444
+ "types": [
445
+ "string"
446
+ ],
447
+ "is_optional": "False",
448
+ "is_vararg": "False"
449
+ },
450
+ {
451
+ "name": "filename",
452
+ "doc": "The name of the file to save the data to. Can contain subfolders.",
453
+ "types": [
454
+ "string"
455
+ ],
456
+ "is_optional": "False",
457
+ "is_vararg": "False"
211
458
  }
212
459
  ],
213
460
  "returnvalues": [
214
461
  {
215
462
  "name": "",
216
- "doc": "",
463
+ "doc": "true if the file was saved successfully, false otherwise.",
217
464
  "types": [
218
465
  "boolean"
219
466
  ]
@@ -223,64 +470,136 @@
223
470
  {
224
471
  "type": "FUNCTION",
225
472
  "name": "load_file_by_name",
226
- "brief": "",
227
- "description": "",
473
+ "brief": "Loads the data from a file with the specified name. The file is loaded from the game save folder. Filename supports subfolders.\nlocal data = saver.load_file_by_name(\"data.json\")\npprint(data)\nNOTE: For binary data like images, use saver.load_binary_by_name instead.",
474
+ "description": "Loads the data from a file with the specified name. The file is loaded from the game save folder. Filename supports subfolders.\nlocal data = saver.load_file_by_name(\"data.json\")\npprint(data)\nNOTE: For binary data like images, use saver.load_binary_by_name instead.",
228
475
  "parameters": [
229
476
  {
230
- "name": "fileName",
231
- "doc": "",
477
+ "name": "filename",
478
+ "doc": "The name of the file to load the data from. Can contain subfolders.",
232
479
  "types": [
233
480
  "string"
234
481
  ],
235
- "is_optional": "False"
482
+ "is_optional": "False",
483
+ "is_vararg": "False"
484
+ },
485
+ {
486
+ "name": "format",
487
+ "doc": "Optional format override (json, lua, serialized, binary)",
488
+ "types": [
489
+ "string | undefined"
490
+ ],
491
+ "is_optional": "True",
492
+ "is_vararg": "False"
236
493
  }
237
494
  ],
238
495
  "returnvalues": [
239
496
  {
240
497
  "name": "",
241
- "doc": "",
498
+ "doc": "The data loaded from the file. If the file does not exist, returns nil.",
242
499
  "types": [
243
- "unknown"
500
+ "LuaTable | undefined"
244
501
  ]
245
502
  }
246
503
  ]
247
504
  },
248
505
  {
249
506
  "type": "FUNCTION",
250
- "name": "set_autosave_timer",
251
- "brief": "",
252
- "description": "",
507
+ "name": "load_binary_by_name",
508
+ "brief": "Loads the binary data from a file with the specified name. The file is loaded from the game save folder. Filename supports subfolders.",
509
+ "description": "Loads the binary data from a file with the specified name. The file is loaded from the game save folder. Filename supports subfolders.",
253
510
  "parameters": [
254
511
  {
255
- "name": "seconds",
256
- "doc": "",
512
+ "name": "filename",
513
+ "doc": "The name of the file to load the binary data from. Can contain subfolders.",
257
514
  "types": [
258
- "number"
515
+ "string"
259
516
  ],
260
- "is_optional": "False"
517
+ "is_optional": "False",
518
+ "is_vararg": "False"
261
519
  }
262
520
  ],
263
- "returnvalues": []
521
+ "returnvalues": [
522
+ {
523
+ "name": "",
524
+ "doc": "The binary data loaded from the file. If the file does not exist, returns nil.",
525
+ "types": [
526
+ "string | undefined"
527
+ ]
528
+ }
529
+ ]
264
530
  },
265
531
  {
266
532
  "type": "FUNCTION",
267
- "name": "get_save_path",
268
- "brief": "",
269
- "description": "",
533
+ "name": "delete_file_by_name",
534
+ "brief": "Deletes the file with the specified name. The file is deleted from the game save folder. Filename supports subfolders.\nsaver.delete_file_by_name(\"data.json\")",
535
+ "description": "Deletes the file with the specified name. The file is deleted from the game save folder. Filename supports subfolders.\nsaver.delete_file_by_name(\"data.json\")",
536
+ "parameters": [
537
+ {
538
+ "name": "filename",
539
+ "doc": "The name of the file to delete. Can contain subfolders.",
540
+ "types": [
541
+ "string"
542
+ ],
543
+ "is_optional": "False",
544
+ "is_vararg": "False"
545
+ }
546
+ ],
547
+ "returnvalues": [
548
+ {
549
+ "name": "",
550
+ "doc": "true if the file was deleted successfully, false otherwise.",
551
+ "types": [
552
+ "boolean"
553
+ ]
554
+ }
555
+ ]
556
+ },
557
+ {
558
+ "type": "FUNCTION",
559
+ "name": "is_file_exists_by_name",
560
+ "brief": "Checks if the file exists with the specified name. The file is checked in the game save folder. Filename supports subfolders.",
561
+ "description": "Checks if the file exists with the specified name. The file is checked in the game save folder. Filename supports subfolders.",
270
562
  "parameters": [
271
563
  {
272
- "name": "fileName",
273
- "doc": "",
564
+ "name": "filename",
565
+ "doc": "The name of the file to check. Can contain subfolders.",
274
566
  "types": [
275
567
  "string"
276
568
  ],
277
- "is_optional": "True"
569
+ "is_optional": "False",
570
+ "is_vararg": "False"
278
571
  }
279
572
  ],
280
573
  "returnvalues": [
281
574
  {
282
575
  "name": "",
283
- "doc": "",
576
+ "doc": "true if the file exists, false otherwise.",
577
+ "types": [
578
+ "boolean"
579
+ ]
580
+ }
581
+ ]
582
+ },
583
+ {
584
+ "type": "FUNCTION",
585
+ "name": "get_save_path",
586
+ "brief": "Returns the absolute path to the game save folder. If a file name is provided, the path to the file in the game save folder is returned. Filename supports subfolders.\nlocal folder_path = saver.get_save_path()\nprint(folder_path) -- \"/Users/user/Library/Application Support/Defold Saver/\"\n\nlocal file_path = saver.get_save_path(\"data.json\")\nprint(file_path) -- \"/Users/user/Library/Application Support/Defold Saver/data.json\"\n\nlocal file_path_2 = saver.get_save_path(\"profiles/profile1.json\")\nprint(file_path_2) -- \"/Users/user/Library/Application Support/Defold Saver/profiles/profile1.json\"",
587
+ "description": "Returns the absolute path to the game save folder. If a file name is provided, the path to the file in the game save folder is returned. Filename supports subfolders.\nlocal folder_path = saver.get_save_path()\nprint(folder_path) -- \"/Users/user/Library/Application Support/Defold Saver/\"\n\nlocal file_path = saver.get_save_path(\"data.json\")\nprint(file_path) -- \"/Users/user/Library/Application Support/Defold Saver/data.json\"\n\nlocal file_path_2 = saver.get_save_path(\"profiles/profile1.json\")\nprint(file_path_2) -- \"/Users/user/Library/Application Support/Defold Saver/profiles/profile1.json\"",
588
+ "parameters": [
589
+ {
590
+ "name": "filename",
591
+ "doc": "The name of the file to get the path for. Can contain subfolders. If nil, returns the folder path.",
592
+ "types": [
593
+ "string | undefined"
594
+ ],
595
+ "is_optional": "True",
596
+ "is_vararg": "False"
597
+ }
598
+ ],
599
+ "returnvalues": [
600
+ {
601
+ "name": "",
602
+ "doc": "The absolute path to the game save folder, or the path to the file in the game save folder if a file name is provided.",
284
603
  "types": [
285
604
  "string"
286
605
  ]
@@ -290,32 +609,83 @@
290
609
  {
291
610
  "type": "FUNCTION",
292
611
  "name": "get_save_version",
293
- "brief": "",
294
- "description": "",
612
+ "brief": "Returns the current save version of the game state. The save version is used to check if the game state is older than the current version. The save version increments when the game state is saved.\nlocal save_version = saver.get_save_version()\nprint(save_version)",
613
+ "description": "Returns the current save version of the game state. The save version is used to check if the game state is older than the current version. The save version increments when the game state is saved.\nlocal save_version = saver.get_save_version()\nprint(save_version)",
614
+ "parameters": [],
615
+ "returnvalues": [
616
+ {
617
+ "name": "",
618
+ "doc": "The current save version of the game state.",
619
+ "types": [
620
+ "number"
621
+ ]
622
+ }
623
+ ]
624
+ },
625
+ {
626
+ "type": "FUNCTION",
627
+ "name": "set_autosave_timer",
628
+ "brief": "Sets the autosave timer to the specified number of seconds. The autosave timer is used to automatically save the game state at regular intervals.\nUse 0 to disable autosave.\nsaver.set_autosave_timer(5) -- Autosave every 5 seconds\nsaver.set_autosave_timer(0) -- Disable autosave",
629
+ "description": "Sets the autosave timer to the specified number of seconds. The autosave timer is used to automatically save the game state at regular intervals.\nUse 0 to disable autosave.\nsaver.set_autosave_timer(5) -- Autosave every 5 seconds\nsaver.set_autosave_timer(0) -- Disable autosave",
630
+ "parameters": [
631
+ {
632
+ "name": "timer",
633
+ "doc": "The number of seconds between autosaves. Use 0 to disable autosave.",
634
+ "types": [
635
+ "number"
636
+ ],
637
+ "is_optional": "False",
638
+ "is_vararg": "False"
639
+ }
640
+ ],
641
+ "returnvalues": []
642
+ },
643
+ {
644
+ "type": "FUNCTION",
645
+ "name": "get_autosave_timer",
646
+ "brief": "Returns the current autosave timer.",
647
+ "description": "Returns the current autosave timer.",
295
648
  "parameters": [],
296
649
  "returnvalues": [
297
650
  {
298
651
  "name": "",
299
- "doc": "",
652
+ "doc": "The current autosave timer.",
300
653
  "types": [
301
654
  "number"
302
655
  ]
303
656
  }
304
657
  ]
305
658
  },
659
+ {
660
+ "type": "FUNCTION",
661
+ "name": "get_current_game_project_folder",
662
+ "brief": "Returns the absolute path to the current game project folder. It is useful when you need to save or load files from the game project folder at development.\nReturns nil if the game project folder is not found. Used only at desktop platforms and if game started from the Defold Editor.\nlocal project_folder = saver.get_current_game_project_folder()\nprint(project_folder) -- \"/Users/user/projects/my_game\"",
663
+ "description": "Returns the absolute path to the current game project folder. It is useful when you need to save or load files from the game project folder at development.\nReturns nil if the game project folder is not found. Used only at desktop platforms and if game started from the Defold Editor.\nlocal project_folder = saver.get_current_game_project_folder()\nprint(project_folder) -- \"/Users/user/projects/my_game\"",
664
+ "parameters": [],
665
+ "returnvalues": [
666
+ {
667
+ "name": "",
668
+ "doc": "The absolute path to the current game project folder. Nil if the game.project folder is not found.",
669
+ "types": [
670
+ "string | undefined"
671
+ ]
672
+ }
673
+ ]
674
+ },
306
675
  {
307
676
  "type": "FUNCTION",
308
677
  "name": "set_migrations",
309
- "brief": "",
310
- "description": "",
678
+ "brief": "Sets the list of migrations to apply after loading the game state manually with saver.apply_migrations() function.\nMigrations are used to update the game state in case of changes to the game state structure.\nMigrations are applied in order. Each migration should be a function that takes the game state as a parameter and returns the updated game state.\nlocal migrations = {\n-- Migration 1\nfunction(game_state, logger)\n-- Assume we have new level_data field in the game state and we need to move level and score to it\ngame_state.game.level_data = {\nlevel = game_state.game.level,\nscore = game_state.game.score\n}\ngame_state.game.level = nil\ngame_state.game.score = nil\nreturn game_state\n},\n-- Migration 2\nfunction(game_state, logger)\n-- Just an example, multiply the score by 1000. For example we changed our score system\ngame_state.game.level_data.score = game_state.game.level_data.score * 1000\nreturn game_state\n}\n}\n\nsaver.set_migrations(migrations)\nsaver.init()\nsaver.bind_save_state(\"game\", game_state)\nsaver.apply_migrations()",
679
+ "description": "Sets the list of migrations to apply after loading the game state manually with saver.apply_migrations() function.\nMigrations are used to update the game state in case of changes to the game state structure.\nMigrations are applied in order. Each migration should be a function that takes the game state as a parameter and returns the updated game state.\nlocal migrations = {\n-- Migration 1\nfunction(game_state, logger)\n-- Assume we have new level_data field in the game state and we need to move level and score to it\ngame_state.game.level_data = {\nlevel = game_state.game.level,\nscore = game_state.game.score\n}\ngame_state.game.level = nil\ngame_state.game.score = nil\nreturn game_state\n},\n-- Migration 2\nfunction(game_state, logger)\n-- Just an example, multiply the score by 1000. For example we changed our score system\ngame_state.game.level_data.score = game_state.game.level_data.score * 1000\nreturn game_state\n}\n}\n\nsaver.set_migrations(migrations)\nsaver.init()\nsaver.bind_save_state(\"game\", game_state)\nsaver.apply_migrations()",
311
680
  "parameters": [
312
681
  {
313
- "name": "migrationList",
314
- "doc": "",
682
+ "name": "migrations_table",
683
+ "doc": "Array of migration functions",
315
684
  "types": [
316
- "((this: void, gameState: any, logger: LoggerInstance) => any)[]"
685
+ "((game_state: saver_game_state, logger: saver_logger) => undefined)[]"
317
686
  ],
318
- "is_optional": "False"
687
+ "is_optional": "False",
688
+ "is_vararg": "False"
319
689
  }
320
690
  ],
321
691
  "returnvalues": []
@@ -323,231 +693,311 @@
323
693
  {
324
694
  "type": "FUNCTION",
325
695
  "name": "apply_migrations",
326
- "brief": "",
327
- "description": "",
696
+ "brief": "Applies the migrations set by saver.set_migrations function. It should be called after loading the game state manually with saver.init() function.\nsaver.apply_migrations()",
697
+ "description": "Applies the migrations set by saver.set_migrations function. It should be called after loading the game state manually with saver.init() function.\nsaver.apply_migrations()",
328
698
  "parameters": [],
329
699
  "returnvalues": []
330
700
  },
331
701
  {
332
702
  "type": "FUNCTION",
333
- "name": "set_logger",
334
- "brief": "",
335
- "description": "",
703
+ "name": "get_value",
704
+ "brief": "Gets the value from the saver storage. If the value does not exist, it will return the default value.",
705
+ "description": "Gets the value from the saver storage. If the value does not exist, it will return the default value.",
706
+ "generics": "<T>",
336
707
  "parameters": [
337
708
  {
338
- "name": "logger",
339
- "doc": "",
709
+ "name": "key_id",
710
+ "doc": "The storage field name",
340
711
  "types": [
341
- "LoggerInstance"
712
+ "string"
342
713
  ],
343
- "is_optional": "False"
714
+ "is_optional": "False",
715
+ "is_vararg": "False"
716
+ },
717
+ {
718
+ "name": "default_value",
719
+ "doc": "The default value",
720
+ "types": [
721
+ "T | undefined"
722
+ ],
723
+ "is_optional": "True",
724
+ "is_vararg": "False"
344
725
  }
345
726
  ],
346
- "returnvalues": []
727
+ "returnvalues": [
728
+ {
729
+ "name": "",
730
+ "doc": "The value from the saver storage",
731
+ "types": [
732
+ "T"
733
+ ]
734
+ }
735
+ ]
347
736
  },
348
737
  {
349
738
  "type": "FUNCTION",
350
- "name": "set_logger",
351
- "brief": "",
352
- "description": "",
739
+ "name": "set_value",
740
+ "brief": "Sets the value in the saver storage.",
741
+ "description": "Sets the value in the saver storage.",
353
742
  "parameters": [
354
743
  {
355
- "name": "remove_logger",
356
- "doc": "",
744
+ "name": "key_id",
745
+ "doc": "The storage field name",
357
746
  "types": [
358
- "undefined"
747
+ "string"
359
748
  ],
360
- "is_optional": "False"
749
+ "is_optional": "False",
750
+ "is_vararg": "False"
751
+ },
752
+ {
753
+ "name": "value",
754
+ "doc": "value",
755
+ "types": [
756
+ "unknown"
757
+ ],
758
+ "is_optional": "False",
759
+ "is_vararg": "False"
361
760
  }
362
761
  ],
363
762
  "returnvalues": []
364
763
  },
365
764
  {
366
765
  "type": "FUNCTION",
367
- "name": "get_current_game_project_folder",
368
- "brief": "",
369
- "description": "",
370
- "parameters": [],
766
+ "name": "is_value_exists",
767
+ "brief": "Checks if the value exists in the saver storage.",
768
+ "description": "Checks if the value exists in the saver storage.",
769
+ "parameters": [
770
+ {
771
+ "name": "key_id",
772
+ "doc": "The storage field name",
773
+ "types": [
774
+ "string"
775
+ ],
776
+ "is_optional": "False",
777
+ "is_vararg": "False"
778
+ }
779
+ ],
371
780
  "returnvalues": [
372
781
  {
373
782
  "name": "",
374
- "doc": "",
783
+ "doc": "true if the value exists, false otherwise",
784
+ "types": [
785
+ "boolean"
786
+ ]
787
+ }
788
+ ]
789
+ },
790
+ {
791
+ "type": "TYPEDEF",
792
+ "name": "saver_state",
793
+ "properties": [
794
+ {
795
+ "name": "storage",
796
+ "brief": "Table with key-value data",
797
+ "description": "Table with key-value data",
798
+ "types": [
799
+ "LuaTable<string, unknown>"
800
+ ]
801
+ },
802
+ {
803
+ "name": "version",
804
+ "brief": "Current save version",
805
+ "description": "Current save version",
806
+ "types": [
807
+ "number"
808
+ ]
809
+ },
810
+ {
811
+ "name": "last_game_version",
812
+ "brief": "Last game version",
813
+ "description": "Last game version",
814
+ "types": [
815
+ "string"
816
+ ]
817
+ },
818
+ {
819
+ "name": "migration_version",
820
+ "brief": "Current migration version",
821
+ "description": "Current migration version",
822
+ "types": [
823
+ "number"
824
+ ]
825
+ }
826
+ ]
827
+ },
828
+ {
829
+ "type": "TYPEDEF",
830
+ "name": "saver_game_state",
831
+ "properties": [
832
+ {
833
+ "name": "saver",
834
+ "brief": "Saver state",
835
+ "description": "Saver state",
836
+ "types": [
837
+ "saver_state"
838
+ ]
839
+ },
840
+ {
841
+ "name": "storage",
842
+ "brief": "Storage state",
843
+ "description": "Storage state",
844
+ "types": [
845
+ "saver_storage_state"
846
+ ]
847
+ }
848
+ ]
849
+ },
850
+ {
851
+ "type": "TYPEDEF",
852
+ "name": "saver_config",
853
+ "properties": [
854
+ {
855
+ "name": "save_folder",
856
+ "brief": "Save folder name. Default is project name without special characters",
857
+ "description": "Save folder name. Default is project name without special characters",
858
+ "types": [
859
+ "string | undefined"
860
+ ]
861
+ },
862
+ {
863
+ "name": "save_name",
864
+ "brief": "Save file name, use \".json\" or \".lua\" extension to use these formats. Default is \"game\"",
865
+ "description": "Save file name, use \".json\" or \".lua\" extension to use these formats. Default is \"game\"",
375
866
  "types": [
376
867
  "string | undefined"
377
868
  ]
869
+ },
870
+ {
871
+ "name": "saver_key",
872
+ "brief": "Saver key, where saver internal data will be stored. Default is \"saver\"",
873
+ "description": "Saver key, where saver internal data will be stored. Default is \"saver\"",
874
+ "types": [
875
+ "string | undefined"
876
+ ]
877
+ },
878
+ {
879
+ "name": "storage_key",
880
+ "brief": "Storage key, where storage internal data will be stored. Deprecated. Default is \"storage\"",
881
+ "description": "Storage key, where storage internal data will be stored. Deprecated. Default is \"storage\"",
882
+ "types": [
883
+ "string | undefined"
884
+ ]
885
+ },
886
+ {
887
+ "name": "autosave_timer",
888
+ "brief": "Autosave timer in seconds. Default is 3 seconds",
889
+ "description": "Autosave timer in seconds. Default is 3 seconds",
890
+ "types": [
891
+ "number | undefined"
892
+ ]
893
+ },
894
+ {
895
+ "name": "lua_require_as_string",
896
+ "brief": "If true, the `require()` function will load Lua files as strings instead of Lua tables. Default is false",
897
+ "description": "If true, the `require()` function will load Lua files as strings instead of Lua tables. Default is false",
898
+ "types": [
899
+ "boolean | undefined"
900
+ ]
378
901
  }
379
902
  ]
380
903
  },
381
904
  {
382
905
  "type": "TYPEDEF",
383
- "name": "LoggerInstance",
384
- "functions": [
906
+ "name": "saver_logger",
907
+ "properties": [
385
908
  {
386
- "type": "FUNCTION",
387
909
  "name": "trace",
388
910
  "brief": "",
389
911
  "description": "",
390
- "parameters": [
391
- {
392
- "name": "this",
393
- "doc": "",
394
- "types": [
395
- "any"
396
- ],
397
- "is_optional": "False"
398
- },
399
- {
400
- "name": "message",
401
- "doc": "",
402
- "types": [
403
- "string"
404
- ],
405
- "is_optional": "False"
406
- },
407
- {
408
- "name": "data",
409
- "doc": "",
410
- "types": [
411
- "{}"
412
- ],
413
- "is_optional": "True"
414
- }
415
- ],
416
- "returnvalues": []
912
+ "types": [
913
+ "(logger: saver_logger, message: string, data: unknown | undefined) => void"
914
+ ]
417
915
  },
418
916
  {
419
- "type": "FUNCTION",
420
917
  "name": "debug",
421
918
  "brief": "",
422
919
  "description": "",
423
- "parameters": [
424
- {
425
- "name": "this",
426
- "doc": "",
427
- "types": [
428
- "any"
429
- ],
430
- "is_optional": "False"
431
- },
432
- {
433
- "name": "message",
434
- "doc": "",
435
- "types": [
436
- "string"
437
- ],
438
- "is_optional": "False"
439
- },
440
- {
441
- "name": "data",
442
- "doc": "",
443
- "types": [
444
- "{}"
445
- ],
446
- "is_optional": "True"
447
- }
448
- ],
449
- "returnvalues": []
920
+ "types": [
921
+ "(logger: saver_logger, message: string, data: unknown | undefined) => void"
922
+ ]
450
923
  },
451
924
  {
452
- "type": "FUNCTION",
453
925
  "name": "info",
454
926
  "brief": "",
455
927
  "description": "",
456
- "parameters": [
457
- {
458
- "name": "this",
459
- "doc": "",
460
- "types": [
461
- "any"
462
- ],
463
- "is_optional": "False"
464
- },
465
- {
466
- "name": "message",
467
- "doc": "",
468
- "types": [
469
- "string"
470
- ],
471
- "is_optional": "False"
472
- },
473
- {
474
- "name": "data",
475
- "doc": "",
476
- "types": [
477
- "{}"
478
- ],
479
- "is_optional": "True"
480
- }
481
- ],
482
- "returnvalues": []
928
+ "types": [
929
+ "(logger: saver_logger, message: string, data: unknown | undefined) => void"
930
+ ]
483
931
  },
484
932
  {
485
- "type": "FUNCTION",
486
933
  "name": "warn",
487
934
  "brief": "",
488
935
  "description": "",
489
- "parameters": [
490
- {
491
- "name": "this",
492
- "doc": "",
493
- "types": [
494
- "any"
495
- ],
496
- "is_optional": "False"
497
- },
498
- {
499
- "name": "message",
500
- "doc": "",
501
- "types": [
502
- "string"
503
- ],
504
- "is_optional": "False"
505
- },
506
- {
507
- "name": "data",
508
- "doc": "",
509
- "types": [
510
- "{}"
511
- ],
512
- "is_optional": "True"
513
- }
514
- ],
515
- "returnvalues": []
936
+ "types": [
937
+ "(logger: saver_logger, message: string, data: unknown | undefined) => void"
938
+ ]
516
939
  },
517
940
  {
518
- "type": "FUNCTION",
519
941
  "name": "error",
520
942
  "brief": "",
521
943
  "description": "",
522
- "parameters": [
523
- {
524
- "name": "this",
525
- "doc": "",
526
- "types": [
527
- "any"
528
- ],
529
- "is_optional": "False"
530
- },
531
- {
532
- "name": "message",
533
- "doc": "",
534
- "types": [
535
- "string"
536
- ],
537
- "is_optional": "False"
538
- },
539
- {
540
- "name": "data",
541
- "doc": "",
542
- "types": [
543
- "{}"
544
- ],
545
- "is_optional": "True"
546
- }
547
- ],
548
- "returnvalues": []
944
+ "types": [
945
+ "(logger: saver_logger, message: string, data: unknown | undefined) => void"
946
+ ]
947
+ }
948
+ ]
949
+ },
950
+ {
951
+ "type": "TYPEDEF",
952
+ "name": "saver"
953
+ },
954
+ {
955
+ "type": "TYPEDEF",
956
+ "name": "saver_storage_state",
957
+ "properties": [
958
+ {
959
+ "name": "storage",
960
+ "brief": "The storage data",
961
+ "description": "The storage data",
962
+ "types": [
963
+ "LuaTable<string, saver_storage_value>"
964
+ ]
965
+ }
966
+ ]
967
+ },
968
+ {
969
+ "type": "TYPEDEF",
970
+ "name": "saver_storage_value",
971
+ "properties": [
972
+ {
973
+ "name": "s_value",
974
+ "brief": "",
975
+ "description": "",
976
+ "types": [
977
+ "string | undefined"
978
+ ]
979
+ },
980
+ {
981
+ "name": "i_value",
982
+ "brief": "",
983
+ "description": "",
984
+ "types": [
985
+ "number | undefined"
986
+ ]
987
+ },
988
+ {
989
+ "name": "b_value",
990
+ "brief": "",
991
+ "description": "",
992
+ "types": [
993
+ "boolean | undefined"
994
+ ]
549
995
  }
550
996
  ]
997
+ },
998
+ {
999
+ "type": "TYPEDEF",
1000
+ "name": "saver_storage"
551
1001
  }
552
1002
  ]
553
1003
  }