@defold-typescript/types 0.50.1 → 0.52.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 (166) hide show
  1. package/api-availability.json +4 -58
  2. package/api-signatures.json +1128 -1552
  3. package/api-targets.json +15 -5
  4. package/examples/translations.json +19 -71
  5. package/fixtures/messages_doc.json +20 -39
  6. package/generated/b2d_world.d.ts +10 -10
  7. package/generated/buffer.d.ts +9 -9
  8. package/generated/builtin-messages.d.ts +16 -14
  9. package/generated/bullet3d_collision_object.d.ts +1 -1
  10. package/generated/bullet3d_constraint.d.ts +109 -7
  11. package/generated/bullet3d_shape.d.ts +2 -2
  12. package/generated/collectionfactory.d.ts +1 -1
  13. package/generated/collectionproxy.d.ts +2 -2
  14. package/generated/factory.d.ts +4 -2
  15. package/generated/go.d.ts +114 -220
  16. package/generated/graphics.d.ts +5 -0
  17. package/generated/gui.d.ts +148 -371
  18. package/generated/http.d.ts +4 -2
  19. package/generated/image.d.ts +56 -4
  20. package/generated/kinds/gui-script.d.ts +3 -0
  21. package/generated/kinds/render-script.d.ts +15 -15
  22. package/generated/kinds/script.d.ts +1 -0
  23. package/generated/liveupdate.d.ts +5 -1
  24. package/generated/material.d.ts +3 -3
  25. package/generated/model.d.ts +4 -5
  26. package/generated/particlefx.d.ts +20 -1
  27. package/generated/physics.d.ts +48 -4
  28. package/generated/render-script-modules/b2d.d.ts +711 -0
  29. package/generated/render-script-modules/bullet3d.d.ts +73 -0
  30. package/generated/render-script-modules/collectionfactory.d.ts +25 -0
  31. package/generated/render-script-modules/collectionproxy.d.ts +39 -0
  32. package/generated/render-script-modules/factory.d.ts +25 -0
  33. package/generated/render-script-modules/go.d.ts +436 -0
  34. package/generated/render-script-modules/label.d.ts +105 -0
  35. package/generated/render-script-modules/model.d.ts +89 -0
  36. package/generated/render-script-modules/particlefx.d.ts +59 -0
  37. package/generated/render-script-modules/physics.d.ts +333 -0
  38. package/generated/render-script-modules/resource.d.ts +1233 -0
  39. package/generated/render-script-modules/sound.d.ts +227 -0
  40. package/generated/render-script-modules/sprite.d.ts +68 -0
  41. package/generated/render-script-modules/tilemap.d.ts +43 -0
  42. package/generated/render.d.ts +175 -21
  43. package/generated/resource.d.ts +31 -10
  44. package/generated/sprite.d.ts +49 -1
  45. package/generated/sys.d.ts +78 -10
  46. package/generated/tilemap.d.ts +4 -4
  47. package/generated/versions/defold-1.12.4/buffer.d.ts +8 -8
  48. package/generated/versions/defold-1.12.4/collectionfactory.d.ts +1 -1
  49. package/generated/versions/defold-1.12.4/collectionproxy.d.ts +1 -1
  50. package/generated/versions/defold-1.12.4/factory.d.ts +4 -2
  51. package/generated/versions/defold-1.12.4/go.d.ts +115 -343
  52. package/generated/versions/defold-1.12.4/graphics.d.ts +1 -0
  53. package/generated/versions/defold-1.12.4/gui.d.ts +151 -513
  54. package/generated/versions/defold-1.12.4/http.d.ts +4 -2
  55. package/generated/versions/defold-1.12.4/image.d.ts +83 -3
  56. package/generated/versions/defold-1.12.4/index.d.ts +2 -0
  57. package/generated/versions/defold-1.12.4/liveupdate.d.ts +4 -0
  58. package/generated/versions/defold-1.12.4/model.d.ts +4 -5
  59. package/generated/versions/defold-1.12.4/particlefx.d.ts +22 -1
  60. package/generated/versions/defold-1.12.4/physics.d.ts +47 -3
  61. package/generated/versions/defold-1.12.4/render.d.ts +119 -15
  62. package/generated/versions/defold-1.12.4/resource.d.ts +43 -10
  63. package/generated/versions/defold-1.12.4/sprite.d.ts +58 -1
  64. package/generated/versions/defold-1.12.4/sys.d.ts +101 -6
  65. package/generated/versions/defold-1.12.4/tilemap.d.ts +4 -4
  66. package/generated/versions/defold-1.12.4/vmath.d.ts +0 -24
  67. package/generated/versions/defold-1.13.0/buffer.d.ts +8 -8
  68. package/generated/versions/defold-1.13.0/collectionfactory.d.ts +1 -1
  69. package/generated/versions/defold-1.13.0/collectionproxy.d.ts +1 -1
  70. package/generated/versions/defold-1.13.0/factory.d.ts +4 -2
  71. package/generated/versions/defold-1.13.0/go.d.ts +115 -370
  72. package/generated/versions/defold-1.13.0/graphics.d.ts +1 -0
  73. package/generated/versions/defold-1.13.0/gui.d.ts +151 -513
  74. package/generated/versions/defold-1.13.0/http.d.ts +4 -2
  75. package/generated/versions/defold-1.13.0/image.d.ts +83 -3
  76. package/generated/versions/defold-1.13.0/index.d.ts +2 -0
  77. package/generated/versions/defold-1.13.0/liveupdate.d.ts +4 -0
  78. package/generated/versions/defold-1.13.0/material.d.ts +3 -1
  79. package/generated/versions/defold-1.13.0/model.d.ts +4 -5
  80. package/generated/versions/defold-1.13.0/particlefx.d.ts +22 -1
  81. package/generated/versions/defold-1.13.0/physics.d.ts +47 -3
  82. package/generated/versions/defold-1.13.0/render.d.ts +182 -16
  83. package/generated/versions/defold-1.13.0/resource.d.ts +43 -10
  84. package/generated/versions/defold-1.13.0/sprite.d.ts +58 -1
  85. package/generated/versions/defold-1.13.0/sys.d.ts +101 -6
  86. package/generated/versions/defold-1.13.0/tilemap.d.ts +4 -4
  87. package/generated/versions/defold-1.13.0/vmath.d.ts +0 -24
  88. package/generated/versions/defold-1.13.1/buffer.d.ts +8 -8
  89. package/generated/versions/defold-1.13.1/collectionfactory.d.ts +1 -1
  90. package/generated/versions/defold-1.13.1/collectionproxy.d.ts +1 -1
  91. package/generated/versions/defold-1.13.1/factory.d.ts +4 -2
  92. package/generated/versions/defold-1.13.1/go.d.ts +115 -370
  93. package/generated/versions/defold-1.13.1/graphics.d.ts +1 -0
  94. package/generated/versions/defold-1.13.1/gui.d.ts +151 -529
  95. package/generated/versions/defold-1.13.1/http.d.ts +4 -2
  96. package/generated/versions/defold-1.13.1/image.d.ts +83 -3
  97. package/generated/versions/defold-1.13.1/index.d.ts +3 -0
  98. package/generated/versions/defold-1.13.1/liveupdate.d.ts +4 -0
  99. package/generated/versions/defold-1.13.1/material.d.ts +3 -1
  100. package/generated/versions/defold-1.13.1/model.d.ts +4 -5
  101. package/generated/versions/defold-1.13.1/particlefx.d.ts +22 -1
  102. package/generated/versions/defold-1.13.1/physics.d.ts +47 -3
  103. package/generated/versions/defold-1.13.1/render.d.ts +182 -16
  104. package/generated/versions/defold-1.13.1/resource.d.ts +43 -10
  105. package/generated/versions/defold-1.13.1/sprite.d.ts +58 -1
  106. package/generated/versions/defold-1.13.1/sys.d.ts +101 -6
  107. package/generated/versions/defold-1.13.1/tilemap.d.ts +4 -4
  108. package/generated/versions/defold-1.13.1/vmath.d.ts +0 -24
  109. package/generated/versions/defold-1.13.2/b2d_world.d.ts +10 -10
  110. package/generated/versions/defold-1.13.2/buffer.d.ts +9 -9
  111. package/generated/versions/defold-1.13.2/bullet3d_collision_object.d.ts +1 -1
  112. package/generated/versions/defold-1.13.2/bullet3d_constraint.d.ts +109 -7
  113. package/generated/versions/defold-1.13.2/bullet3d_shape.d.ts +2 -2
  114. package/generated/versions/defold-1.13.2/collectionfactory.d.ts +1 -1
  115. package/generated/versions/defold-1.13.2/collectionproxy.d.ts +2 -2
  116. package/generated/versions/defold-1.13.2/factory.d.ts +4 -2
  117. package/generated/versions/defold-1.13.2/go.d.ts +114 -220
  118. package/generated/versions/defold-1.13.2/graphics.d.ts +1 -0
  119. package/generated/versions/defold-1.13.2/gui.d.ts +148 -371
  120. package/generated/versions/defold-1.13.2/http.d.ts +4 -2
  121. package/generated/versions/defold-1.13.2/image.d.ts +56 -4
  122. package/generated/versions/defold-1.13.2/index.d.ts +3 -0
  123. package/generated/versions/defold-1.13.2/liveupdate.d.ts +5 -1
  124. package/generated/versions/defold-1.13.2/material.d.ts +3 -3
  125. package/generated/versions/defold-1.13.2/model.d.ts +4 -5
  126. package/generated/versions/defold-1.13.2/particlefx.d.ts +20 -1
  127. package/generated/versions/defold-1.13.2/physics.d.ts +48 -4
  128. package/generated/versions/defold-1.13.2/render.d.ts +164 -20
  129. package/generated/versions/defold-1.13.2/resource.d.ts +31 -10
  130. package/generated/versions/defold-1.13.2/sprite.d.ts +49 -1
  131. package/generated/versions/defold-1.13.2/sys.d.ts +78 -10
  132. package/generated/versions/defold-1.13.2/tilemap.d.ts +4 -4
  133. package/generated/versions/defold-1.13.2/vmath.d.ts +0 -24
  134. package/generated/versions/defold-1.13.2/window.d.ts +1 -1
  135. package/generated/vmath.d.ts +0 -24
  136. package/generated/window.d.ts +1 -1
  137. package/identity-vocabulary.json +98 -7
  138. package/index.d.ts +3 -0
  139. package/package.json +3 -1
  140. package/scripts/generate-api-availability.ts +6 -22
  141. package/scripts/generate-api-signatures.ts +87 -21
  142. package/scripts/materialize-version.ts +53 -6
  143. package/scripts/regen.ts +256 -44
  144. package/scripts/signature-store-fs.ts +1 -0
  145. package/scripts/target-version.ts +26 -0
  146. package/src/api-doc.ts +26 -0
  147. package/src/component-properties.d.ts +226 -6
  148. package/src/core-types.ts +82 -20
  149. package/src/doc-corrections.ts +53 -5
  150. package/src/emit-dts.ts +1300 -269
  151. package/src/emit-messages.ts +289 -0
  152. package/src/engine-globals.d.ts +8 -2
  153. package/src/go-overloads.d.ts +80 -15
  154. package/src/gui-overloads.d.ts +489 -0
  155. package/src/gui-texture-removal.d.ts +41 -0
  156. package/src/index.ts +2 -0
  157. package/src/lifecycle.ts +46 -37
  158. package/src/luals-type-expr.ts +6 -1
  159. package/src/msg-overloads.d.ts +25 -13
  160. package/src/physics-event-guard.d.ts +39 -0
  161. package/src/render-overloads.d.ts +2 -2
  162. package/src/return-correction-provenance.ts +36 -6
  163. package/src/signature-store.ts +50 -0
  164. package/src/timers.d.ts +2 -1
  165. package/src/vmath-overloads.d.ts +26 -0
  166. package/src/window-event-guard.d.ts +5 -3
@@ -137,6 +137,295 @@ export function applyMessageFieldCorrections(
137
137
  return { entries };
138
138
  }
139
139
 
140
+ // What only the engine states about a message the catalog mirrors from the
141
+ // reference: proto optionality, a field the handler reads or the sender fills,
142
+ // a message a component handles or posts, or the shape of a field the reference
143
+ // types only as `table`. `evidence` names `<path>:<symbol>` in the 1.14.0 engine
144
+ // source. Each kind throws once the catalog already states its fact, since that
145
+ // means upstream fixed the reference and the entry is deleted; a `retype` throws
146
+ // once the catalog stops declaring its pinned `upstream` types, since upstream
147
+ // retyped the field and the entry is re-verified against what it now says.
148
+ export type MessageEngineCorrection = {
149
+ readonly origin: string;
150
+ readonly name: string;
151
+ readonly evidence: string;
152
+ } & (
153
+ | { readonly kind: "optional" | "required"; readonly fields: readonly string[] }
154
+ | { readonly kind: "add-field"; readonly fields: readonly MessageField[] }
155
+ | {
156
+ readonly kind: "add-message";
157
+ readonly description: string;
158
+ readonly fields: readonly MessageField[];
159
+ }
160
+ | {
161
+ readonly kind: "retype";
162
+ readonly fields: readonly string[];
163
+ readonly tsType: string;
164
+ readonly upstream: readonly string[];
165
+ }
166
+ );
167
+
168
+ const SCRIPT_DDF_DEFAULTS =
169
+ "script/src/script_ddf.cpp:DoLuaTableToDDF fills an omitted optional field with its default";
170
+ const SOUND_EVENT =
171
+ "gamesys/src/gamesys/components/comp_sound.cpp:DispatchSoundEvent always sets play_id, and HandleEntryFinishedPlaying sends the event only for a play_sound that supplied one";
172
+
173
+ function optionalField(name: string, types: string[], doc: string): MessageField {
174
+ return { name, types, optional: true, doc };
175
+ }
176
+
177
+ function requiredField(name: string, types: string[], doc: string): MessageField {
178
+ return { name, types, optional: false, doc };
179
+ }
180
+
181
+ // The listener and `on_message` paths agree: the DDF the message carries
182
+ // declares the same sub-message fields the listener push sets.
183
+ function physicsBody(message: string): string {
184
+ return `gamesys/proto/gamesys/physics_ddf.proto:${message} declares the same required fields for the on_message payload`;
185
+ }
186
+
187
+ function otherGroupField(): MessageField {
188
+ return {
189
+ name: "group",
190
+ types: ["hash"],
191
+ optional: false,
192
+ doc: "Collision group of the other object, equal to other_group.",
193
+ };
194
+ }
195
+
196
+ export const MESSAGE_ENGINE_CORRECTIONS: readonly MessageEngineCorrection[] = [
197
+ {
198
+ kind: "optional",
199
+ origin: "camera",
200
+ name: "set_camera",
201
+ fields: ["orthographic_projection", "orthographic_zoom", "orthographic_mode"],
202
+ evidence: `gamesys/proto/gamesys/camera_ddf.proto:SetCamera declares them optional with defaults, CompCameraOnMessage handles it, and ${SCRIPT_DDF_DEFAULTS}`,
203
+ },
204
+ {
205
+ kind: "optional",
206
+ origin: "sys",
207
+ name: "reboot",
208
+ fields: ["arg1", "arg2", "arg3", "arg4", "arg5", "arg6"],
209
+ evidence: `script/src/script/sys_ddf.proto:Reboot declares every argument optional, engine/src/engine.cpp:Dispatch handles it, and ${SCRIPT_DDF_DEFAULTS}`,
210
+ },
211
+ {
212
+ kind: "optional",
213
+ origin: "sys",
214
+ name: "start_record",
215
+ fields: ["frame_period", "fps"],
216
+ evidence: `script/src/script/sys_ddf.proto:StartRecord declares both optional with defaults 2 and 30, engine/src/engine.cpp:Dispatch handles it, and ${SCRIPT_DDF_DEFAULTS}`,
217
+ },
218
+ {
219
+ kind: "optional",
220
+ origin: "sprite",
221
+ name: "play_animation",
222
+ fields: ["offset", "playback_rate"],
223
+ evidence: `gamesys/proto/gamesys/sprite_ddf.proto:PlayAnimation declares both optional with defaults 0 and 1, comp_sprite.cpp:CompSpriteOnMessage passes both to PlayAnimation, and ${SCRIPT_DDF_DEFAULTS}`,
224
+ },
225
+ {
226
+ kind: "optional",
227
+ origin: "go",
228
+ name: "set_parent",
229
+ fields: ["parent_id", "keep_world_transform"],
230
+ evidence: `gameobject/proto/gameobject/gameobject_ddf.proto:SetParent declares both optional with defaults 0 and 1, gameobject.cpp:DispatchMessagesFunction handles it, and ${SCRIPT_DDF_DEFAULTS}`,
231
+ },
232
+ {
233
+ kind: "required",
234
+ origin: "sound",
235
+ name: "sound_done",
236
+ fields: ["play_id"],
237
+ evidence: SOUND_EVENT,
238
+ },
239
+ {
240
+ kind: "required",
241
+ origin: "sound",
242
+ name: "sound_stopped",
243
+ fields: ["play_id"],
244
+ evidence: SOUND_EVENT,
245
+ },
246
+ {
247
+ kind: "add-field",
248
+ origin: "sound",
249
+ name: "play_sound",
250
+ fields: [
251
+ optionalField("pan", ["number"], "Pan between -1 and 1, added to the component's pan."),
252
+ optionalField("speed", ["number"], "Speed factor, multiplied with the component's speed."),
253
+ ],
254
+ evidence:
255
+ "gamesys/proto/gamesys/gamesys_ddf.proto:PlaySound declares pan and speed, and comp_sound.cpp:CompSoundOnMessage applies both to the voice",
256
+ },
257
+ {
258
+ kind: "add-field",
259
+ origin: "sound",
260
+ name: "stop_sound",
261
+ fields: [
262
+ optionalField(
263
+ "play_id",
264
+ ["number"],
265
+ "Id passed to play_sound; stops only that voice. Omit to stop every voice.",
266
+ ),
267
+ ],
268
+ evidence:
269
+ "gamesys/proto/gamesys/gamesys_ddf.proto:StopSound declares play_id, and comp_sound.cpp:CompSoundOnMessage stops only the voice that matches it",
270
+ },
271
+ {
272
+ kind: "add-message",
273
+ origin: "sound",
274
+ name: "pause_sound",
275
+ description: "Pause or resume every voice the receiving sound component plays.",
276
+ fields: [optionalField("pause", ["boolean"], "true (default) to pause, false to resume.")],
277
+ evidence:
278
+ "gamesys/proto/gamesys/gamesys_ddf.proto:PauseSound declares pause, and comp_sound.cpp:CompSoundOnMessage pauses every voice of the component",
279
+ },
280
+ {
281
+ kind: "add-message",
282
+ origin: "sound",
283
+ name: "set_pan",
284
+ description: "Set the pan on the receiving sound component.",
285
+ fields: [optionalField("pan", ["number"], "Pan between -1 and 1, default 0.")],
286
+ evidence:
287
+ "gamesys/proto/gamesys/gamesys_ddf.proto:SetPan declares pan, and comp_sound.cpp:CompSoundOnMessage sets the component's pan",
288
+ },
289
+ {
290
+ kind: "add-message",
291
+ origin: "render",
292
+ name: "set_view_projection",
293
+ description:
294
+ "Posted automatically by camera components to the render script with the active view and projection matrices.",
295
+ fields: [
296
+ requiredField("id", ["hash"], "Id of the camera component that posted the matrices."),
297
+ requiredField("view", ["matrix4"], "View matrix of the camera."),
298
+ requiredField("projection", ["matrix4"], "Projection matrix of the camera."),
299
+ ],
300
+ evidence:
301
+ "gamesys/proto/gamesys/gamesys_ddf.proto:SetViewProjection declares id, view and projection required, and comp_camera.cpp:PostRenderScriptSetViewProjectionMsg posts it to the render socket on every camera update",
302
+ },
303
+ {
304
+ kind: "add-field",
305
+ origin: "physics",
306
+ name: "collision_response",
307
+ fields: [otherGroupField()],
308
+ evidence:
309
+ "gamesys/proto/gamesys/physics_ddf.proto:CollisionResponse declares a required group, and comp_collision_object.cpp:CollisionCallback sets it to the other object's group",
310
+ },
311
+ {
312
+ kind: "add-field",
313
+ origin: "physics",
314
+ name: "contact_point_response",
315
+ fields: [otherGroupField()],
316
+ evidence:
317
+ "gamesys/proto/gamesys/physics_ddf.proto:ContactPointResponse declares a required group, and comp_collision_object.cpp:ContactPointCallback sets it to the other object's group",
318
+ },
319
+ {
320
+ kind: "add-field",
321
+ origin: "physics",
322
+ name: "trigger_response",
323
+ fields: [otherGroupField()],
324
+ evidence:
325
+ "gamesys/proto/gamesys/physics_ddf.proto:TriggerResponse declares a required group, and comp_collision_object.cpp:TriggerEnteredCallback sets it to the other object's group",
326
+ },
327
+ {
328
+ kind: "retype",
329
+ origin: "physics",
330
+ name: "contact_point_event",
331
+ fields: ["a", "b"],
332
+ tsType:
333
+ "{ position: Vector3; instance_position: Vector3; normal: Vector3; relative_velocity: Vector3; mass: number; id: Hash; group: Hash }",
334
+ upstream: ["table"],
335
+ evidence: `gamesys/src/gamesys/scripts/script_physics.cpp:PushContactPoint sets these seven fields on each body, and ${physicsBody("ContactPoint")}`,
336
+ },
337
+ {
338
+ kind: "retype",
339
+ origin: "physics",
340
+ name: "collision_event",
341
+ fields: ["a", "b"],
342
+ tsType: "{ position: Vector3; id: Hash; group: Hash }",
343
+ upstream: ["table"],
344
+ evidence: `gamesys/src/gamesys/scripts/script_physics.cpp:PushCollision sets these three fields on each body, and ${physicsBody("Collision")}`,
345
+ },
346
+ {
347
+ kind: "retype",
348
+ origin: "physics",
349
+ name: "trigger_event",
350
+ fields: ["a", "b"],
351
+ tsType: "{ id: Hash; group: Hash }",
352
+ upstream: ["table"],
353
+ evidence: `gamesys/src/gamesys/scripts/script_physics.cpp:PushTrigger sets these two fields on each body, and ${physicsBody("Trigger")}`,
354
+ },
355
+ ];
356
+
357
+ export function applyMessageEngineCorrections(
358
+ catalog: MessageCatalog,
359
+ overlay: readonly MessageEngineCorrection[] = MESSAGE_ENGINE_CORRECTIONS,
360
+ ): MessageCatalog {
361
+ const entries = catalog.entries.map((entry) => ({
362
+ ...entry,
363
+ payload: entry.payload.map((field) => ({ ...field })),
364
+ }));
365
+ for (const correction of overlay) {
366
+ const identity = `(origin=${correction.origin}, name=${correction.name})`;
367
+ const stale = (fact: string) =>
368
+ new Error(
369
+ `applyMessageEngineCorrections: the catalog ${fact} for ${identity}; delete the correction`,
370
+ );
371
+ const entry = entries.find(
372
+ (candidate) => candidate.origin === correction.origin && candidate.name === correction.name,
373
+ );
374
+ if (correction.kind === "add-message") {
375
+ if (entry) throw stale("already declares message");
376
+ entries.push({
377
+ name: correction.name,
378
+ origin: correction.origin,
379
+ description: correction.description,
380
+ payload: correction.fields.map((field) => ({ ...field, types: [...field.types] })),
381
+ });
382
+ continue;
383
+ }
384
+ if (!entry) {
385
+ throw new Error(`applyMessageEngineCorrections: no catalog message matches ${identity}`);
386
+ }
387
+ if (correction.kind === "add-field") {
388
+ for (const field of correction.fields) {
389
+ if (entry.payload.some((candidate) => candidate.name === field.name)) {
390
+ throw stale(`already declares field ${field.name}`);
391
+ }
392
+ entry.payload.push({ ...field, types: [...field.types] });
393
+ }
394
+ continue;
395
+ }
396
+ for (const name of correction.fields) {
397
+ const field = entry.payload.find((candidate) => candidate.name === name);
398
+ if (!field) {
399
+ throw new Error(
400
+ `applyMessageEngineCorrections: no catalog field matches ${identity} field=${name}`,
401
+ );
402
+ }
403
+ if (correction.kind === "retype") {
404
+ if (field.types.join("|") !== correction.upstream.join("|")) {
405
+ throw new Error(
406
+ `applyMessageEngineCorrections: the catalog now declares ${field.types.join("|")} for field ${name} of ${identity}, not the pinned ${correction.upstream.join("|")}; re-verify the correction`,
407
+ );
408
+ }
409
+ field.types = [correction.tsType];
410
+ continue;
411
+ }
412
+ const optional = correction.kind === "optional";
413
+ if (field.optional === optional) throw stale(`field ${name} is already ${correction.kind}`);
414
+ field.optional = optional;
415
+ }
416
+ }
417
+ return { entries };
418
+ }
419
+
420
+ // The built-in message surface is the catalog plus these overlays. Every reader
421
+ // of it goes through here, so a message the engine overlay adds is never missing
422
+ // from one of them.
423
+ export function applyMessageOverlays(catalog: MessageCatalog): MessageCatalog {
424
+ return applyMessageEngineCorrections(
425
+ applyMessageFieldCorrections(applyMessageDeprecations(catalog)),
426
+ );
427
+ }
428
+
140
429
  const TS_IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
141
430
  const ENGINE_TYPES = [
142
431
  "Hash",
@@ -4,12 +4,16 @@ import type * as Core from "./core-types";
4
4
  // Hand-maintained surface: Defold ships no machine-readable export for the
5
5
  // prefixless globals, so add or remove entries here from the Defold API
6
6
  // reference and mirror the change in fixtures/globals_doc.json — the
7
- // engine-globals test fails if the two fall out of sync.
7
+ // engine-globals test fails if the two fall out of sync. That canonical file
8
+ // seeds each new target on release import; also mirror the change into every
9
+ // committed fixtures/defold-*/globals_doc.json, which the API reference reads.
8
10
  declare global {
9
11
  /** An opaque, branded handle to a hashed name; see {@link Core.Hash}. */
10
12
  type Hash<S extends string = string> = Core.Hash<S>;
11
13
  /** Hash a string into the engine's `Hash` handle. */
12
14
  function hash<S extends string>(s: S): Core.Hash<S>;
15
+ /** Return a `Hash` unchanged. */
16
+ function hash<S extends string>(h: Core.Hash<S>): Core.Hash<S>;
13
17
  /** Render a `Hash` handle as its hexadecimal string. */
14
18
  function hash_to_hex(h: Core.Hash): string;
15
19
  /** Pretty-print any values to the console for debugging. */
@@ -36,7 +40,7 @@ declare global {
36
40
  type Opaque<Name extends string> = Core.Opaque<Name>;
37
41
  /** A message-passing address with `socket`, `path`, and `fragment`; see {@link Core.Url}. */
38
42
  type Url = Core.Url;
39
- /** A read-only numeric vector accessed by index; see {@link Core.Vector}. */
43
+ /** A numeric vector read and written by 1-based index; see {@link Core.Vector}. */
40
44
  type Vector = Core.Vector;
41
45
  /** A three-component vector with `x`, `y`, `z`; see {@link Core.Vector3}. */
42
46
  type Vector3 = Core.Vector3;
@@ -46,4 +50,6 @@ declare global {
46
50
  type Quaternion = Core.Quaternion;
47
51
  /** A 4x4 transformation matrix; see {@link Core.Matrix4}. */
48
52
  type Matrix4 = Core.Matrix4;
53
+ /** An array constant read back from a constant buffer, 1-based with no length; see {@link Core.ConstantArray}. */
54
+ type ConstantArray<T> = Core.ConstantArray<T>;
49
55
  }
@@ -1,6 +1,6 @@
1
1
  /** @noSelfInFile */
2
2
 
3
- import type { Hash, Quaternion, Url, Vector3, Vector4 } from "./core-types";
3
+ import type { Hash, Matrix4, Quaternion, Url, Vector3, Vector4 } from "./core-types";
4
4
 
5
5
  interface ScriptProperty<TValue> {
6
6
  readonly __defoldScriptProperty: TValue;
@@ -21,12 +21,17 @@ type WritableKey<P> = {
21
21
 
22
22
  declare global {
23
23
  namespace go {
24
- interface GoPropertyOptions {
25
- /** **⚠️ 1-based index into an array property; passed to Defold unchanged.** */
26
- index?: number;
27
- key?: Hash | string;
28
- keys?: (Hash | string)[];
29
- }
24
+ // LuaToPropertyOptions raises when more than one of the three is non-nil, and
25
+ // reads a nil one as absent.
26
+ type GoPropertyOptions =
27
+ | {
28
+ /** **⚠️ 1-based index into an array property; passed to Defold unchanged.** */
29
+ index?: number;
30
+ key?: undefined;
31
+ keys?: undefined;
32
+ }
33
+ | { index?: undefined; key?: Hash | string; keys?: undefined }
34
+ | { index?: undefined; key?: undefined; keys?: (Hash | string)[] };
30
35
 
31
36
  /**
32
37
  * gets a named property of the specified game object or component
@@ -39,6 +44,8 @@ declare global {
39
44
  * - keys array of hashes or strings identifying internal component resources (e.g. a particle fx emitter, see examples below)
40
45
  * @returns the value of the specified property
41
46
  * A `string` value is a text property, which needs Defold 1.13.2 or later.
47
+ * An array material constant read without `index` returns every element as a
48
+ * `Vector4[]`.
42
49
  * @example
43
50
  * ```ts
44
51
  * const position = go.get("#sprite", "position");
@@ -50,18 +57,46 @@ declare global {
50
57
  function get<P>(): <K extends keyof P>(
51
58
  url: SceneAddress | Hash | Url,
52
59
  property: K,
53
- options?: GoPropertyOptions,
60
+ ...options: [] | [GoPropertyOptions]
54
61
  ) => P[K];
55
62
  function get<K extends keyof go.properties>(
56
63
  url: SceneAddress | Hash | Url,
57
64
  property: K,
58
- options?: GoPropertyOptions,
65
+ ): go.properties[K];
66
+ function get<K extends keyof go.properties>(
67
+ url: SceneAddress | Hash | Url,
68
+ property: K,
69
+ options: GoPropertyOptions,
59
70
  ): go.properties[K];
60
71
  function get(
61
72
  url: SceneAddress | Hash | Url,
62
73
  property: string | Hash,
63
- options?: GoPropertyOptions,
64
- ): number | boolean | string | Hash | Url | Vector3 | Vector4 | Quaternion;
74
+ ):
75
+ | number
76
+ | boolean
77
+ | string
78
+ | Hash
79
+ | Url
80
+ | Vector3
81
+ | Vector4
82
+ | Quaternion
83
+ | Matrix4
84
+ | Vector4[];
85
+ function get(
86
+ url: SceneAddress | Hash | Url,
87
+ property: string | Hash,
88
+ options: GoPropertyOptions,
89
+ ):
90
+ | number
91
+ | boolean
92
+ | string
93
+ | Hash
94
+ | Url
95
+ | Vector3
96
+ | Vector4
97
+ | Quaternion
98
+ | Matrix4
99
+ | Vector4[];
65
100
  /**
66
101
  * sets a named property of the specified game object or component, or a material constant
67
102
  *
@@ -86,19 +121,49 @@ declare global {
86
121
  url: SceneAddress | Hash | Url,
87
122
  property: K,
88
123
  value: P[K],
89
- options?: GoPropertyOptions,
124
+ ...options: [] | [GoPropertyOptions]
90
125
  ) => void;
91
126
  function set<K extends keyof go.properties>(
92
127
  url: SceneAddress | Hash | Url,
93
128
  property: K,
94
129
  value: go.properties[K],
95
- options?: GoPropertyOptions,
130
+ ): void;
131
+ function set<K extends keyof go.properties>(
132
+ url: SceneAddress | Hash | Url,
133
+ property: K,
134
+ value: go.properties[K],
135
+ options: GoPropertyOptions,
136
+ ): void;
137
+ function set(
138
+ url: SceneAddress | Hash | Url,
139
+ property: string | Hash,
140
+ value:
141
+ | number
142
+ | boolean
143
+ | string
144
+ | Hash
145
+ | Url
146
+ | Vector3
147
+ | Vector4
148
+ | Quaternion
149
+ | Matrix4
150
+ | Vector4[],
96
151
  ): void;
97
152
  function set(
98
153
  url: SceneAddress | Hash | Url,
99
154
  property: string | Hash,
100
- value: number | boolean | string | Hash | Url | Vector3 | Vector4 | Quaternion | Vector4[],
101
- options?: GoPropertyOptions,
155
+ value:
156
+ | number
157
+ | boolean
158
+ | string
159
+ | Hash
160
+ | Url
161
+ | Vector3
162
+ | Vector4
163
+ | Quaternion
164
+ | Matrix4
165
+ | Vector4[],
166
+ options: GoPropertyOptions,
102
167
  ): void;
103
168
  /**
104
169
  * Registers a script property, which the Defold editor exposes on every game