@defold-typescript/types 0.39.0 → 0.41.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.
- package/api-availability.json +4024 -716
- package/api-migrations.json +27 -0
- package/api-signatures.json +18118 -10264
- package/api-targets.json +448 -11
- package/examples/translations.json +619 -148
- package/fixtures/messages_doc.json +96 -0
- package/generated/b2d.d.ts +680 -4
- package/generated/b2d_body.d.ts +29 -103
- package/generated/b2d_chain.d.ts +5 -6
- package/generated/b2d_fixture.d.ts +34 -38
- package/generated/b2d_joint.d.ts +503 -25
- package/generated/b2d_shape.d.ts +199 -14
- package/generated/b2d_world.d.ts +57 -63
- package/generated/buffer.d.ts +33 -29
- package/generated/builtin-messages.d.ts +7 -1
- package/generated/bullet3d.d.ts +91 -0
- package/generated/bullet3d_collision_object.d.ts +433 -0
- package/generated/bullet3d_constraint.d.ts +818 -0
- package/generated/bullet3d_rigid_body.d.ts +429 -0
- package/generated/bullet3d_shape.d.ts +123 -0
- package/generated/bullet3d_world.d.ts +492 -0
- package/generated/camera.d.ts +31 -34
- package/generated/collectionfactory.d.ts +26 -27
- package/generated/collectionproxy.d.ts +22 -6
- package/generated/compute.d.ts +12 -238
- package/generated/crash.d.ts +24 -10
- package/generated/editor-vm/http.d.ts +90 -7
- package/generated/editor-vm/image.d.ts +7 -7
- package/generated/editor-vm/json.d.ts +11 -0
- package/generated/editor-vm/localization.d.ts +7 -7
- package/generated/editor-vm/tilemap_tiles.d.ts +56 -10
- package/generated/editor-vm/zip.d.ts +28 -0
- package/generated/editor.d.ts +1496 -430
- package/generated/factory.d.ts +21 -25
- package/generated/font.d.ts +64 -22
- package/generated/go.d.ts +243 -186
- package/generated/graphics.d.ts +374 -84
- package/generated/gui.d.ts +282 -492
- package/generated/html5.d.ts +5 -3
- package/generated/http.d.ts +31 -36
- package/generated/image.d.ts +127 -85
- package/generated/json.d.ts +34 -16
- package/generated/kinds/gui-script.d.ts +8 -0
- package/generated/kinds/render-script.d.ts +8 -0
- package/generated/kinds/script.d.ts +8 -0
- package/generated/label.d.ts +77 -7
- package/generated/liveupdate.d.ts +13 -10
- package/generated/material.d.ts +312 -360
- package/generated/model.d.ts +72 -42
- package/generated/particlefx.d.ts +19 -28
- package/generated/physics.d.ts +378 -144
- package/generated/profiler.d.ts +14 -24
- package/generated/render.d.ts +294 -297
- package/generated/resource.d.ts +753 -641
- package/generated/socket.d.ts +131 -134
- package/generated/sound.d.ts +65 -34
- package/generated/sprite.d.ts +39 -17
- package/generated/sys.d.ts +237 -182
- package/generated/tilemap.d.ts +21 -16
- package/generated/timer.d.ts +34 -21
- package/generated/versions/defold-1.12.4/b2d_body.d.ts +0 -7
- package/generated/versions/defold-1.12.4/buffer.d.ts +18 -17
- package/generated/versions/defold-1.12.4/camera.d.ts +23 -23
- package/generated/versions/defold-1.12.4/collectionfactory.d.ts +21 -19
- package/generated/versions/defold-1.12.4/collectionproxy.d.ts +2 -2
- package/generated/versions/defold-1.12.4/crash.d.ts +2 -2
- package/generated/versions/defold-1.12.4/factory.d.ts +15 -16
- package/generated/versions/defold-1.12.4/go.d.ts +15 -17
- package/generated/versions/defold-1.12.4/gui.d.ts +111 -193
- package/generated/versions/defold-1.12.4/html5.d.ts +4 -2
- package/generated/versions/defold-1.12.4/http.d.ts +4 -15
- package/generated/versions/defold-1.12.4/image.d.ts +38 -46
- package/generated/versions/defold-1.12.4/index.d.ts +2 -0
- package/generated/versions/defold-1.12.4/json.d.ts +10 -6
- package/generated/versions/defold-1.12.4/label.d.ts +2 -3
- package/generated/versions/defold-1.12.4/liveupdate.d.ts +5 -3
- package/generated/versions/defold-1.12.4/model.d.ts +34 -13
- package/generated/versions/defold-1.12.4/particlefx.d.ts +2 -5
- package/generated/versions/defold-1.12.4/physics.d.ts +82 -78
- package/generated/versions/defold-1.12.4/profiler.d.ts +3 -6
- package/generated/versions/defold-1.12.4/render.d.ts +160 -132
- package/generated/versions/defold-1.12.4/resource.d.ts +212 -209
- package/generated/versions/defold-1.12.4/socket.d.ts +45 -61
- package/generated/versions/defold-1.12.4/sound.d.ts +11 -11
- package/generated/versions/defold-1.12.4/sprite.d.ts +24 -6
- package/generated/versions/defold-1.12.4/sys.d.ts +45 -68
- package/generated/versions/defold-1.12.4/tilemap.d.ts +18 -11
- package/generated/versions/defold-1.12.4/timer.d.ts +5 -3
- package/generated/versions/defold-1.12.4/vmath.d.ts +5 -26
- package/generated/versions/defold-1.12.4/window.d.ts +1 -16
- package/generated/versions/defold-1.13.0/b2d_body.d.ts +10 -55
- package/generated/versions/defold-1.13.0/b2d_fixture.d.ts +25 -25
- package/generated/versions/defold-1.13.0/b2d_shape.d.ts +188 -5
- package/generated/versions/defold-1.13.0/b2d_world.d.ts +16 -10
- package/generated/versions/defold-1.13.0/buffer.d.ts +18 -17
- package/generated/versions/defold-1.13.0/camera.d.ts +27 -27
- package/generated/versions/defold-1.13.0/collectionfactory.d.ts +21 -19
- package/generated/versions/defold-1.13.0/collectionproxy.d.ts +2 -2
- package/generated/versions/defold-1.13.0/compute.d.ts +1 -70
- package/generated/versions/defold-1.13.0/crash.d.ts +2 -2
- package/generated/versions/defold-1.13.0/editor-vm/tilemap_tiles.d.ts +3 -3
- package/generated/versions/defold-1.13.0/editor.d.ts +34 -24
- package/generated/versions/defold-1.13.0/factory.d.ts +15 -16
- package/generated/versions/defold-1.13.0/go.d.ts +15 -17
- package/generated/versions/defold-1.13.0/graphics.d.ts +121 -37
- package/generated/versions/defold-1.13.0/gui.d.ts +111 -193
- package/generated/versions/defold-1.13.0/html5.d.ts +4 -2
- package/generated/versions/defold-1.13.0/http.d.ts +4 -15
- package/generated/versions/defold-1.13.0/image.d.ts +38 -46
- package/generated/versions/defold-1.13.0/index.d.ts +2 -0
- package/generated/versions/defold-1.13.0/json.d.ts +10 -6
- package/generated/versions/defold-1.13.0/label.d.ts +2 -3
- package/generated/versions/defold-1.13.0/liveupdate.d.ts +7 -5
- package/generated/versions/defold-1.13.0/material.d.ts +69 -107
- package/generated/versions/defold-1.13.0/model.d.ts +34 -13
- package/generated/versions/defold-1.13.0/particlefx.d.ts +2 -5
- package/generated/versions/defold-1.13.0/physics.d.ts +82 -78
- package/generated/versions/defold-1.13.0/profiler.d.ts +3 -6
- package/generated/versions/defold-1.13.0/render.d.ts +160 -132
- package/generated/versions/defold-1.13.0/resource.d.ts +217 -210
- package/generated/versions/defold-1.13.0/socket.d.ts +45 -61
- package/generated/versions/defold-1.13.0/sound.d.ts +11 -11
- package/generated/versions/defold-1.13.0/sprite.d.ts +24 -6
- package/generated/versions/defold-1.13.0/sys.d.ts +45 -68
- package/generated/versions/defold-1.13.0/tilemap.d.ts +18 -11
- package/generated/versions/defold-1.13.0/timer.d.ts +5 -3
- package/generated/versions/defold-1.13.0/vmath.d.ts +5 -26
- package/generated/versions/defold-1.13.0/window.d.ts +1 -16
- package/generated/versions/defold-1.13.1/b2d.d.ts +33 -0
- package/generated/versions/defold-1.13.1/b2d_body.d.ts +636 -0
- package/generated/versions/defold-1.13.1/b2d_chain.d.ts +106 -0
- package/generated/versions/defold-1.13.1/b2d_fixture.d.ts +157 -0
- package/generated/versions/defold-1.13.1/b2d_joint.d.ts +823 -0
- package/generated/versions/defold-1.13.1/b2d_shape.d.ts +400 -0
- package/generated/versions/defold-1.13.1/b2d_world.d.ts +320 -0
- package/generated/versions/defold-1.13.1/buffer.d.ts +189 -0
- package/generated/versions/defold-1.13.1/camera.d.ts +303 -0
- package/generated/versions/defold-1.13.1/collectionfactory.d.ts +151 -0
- package/generated/versions/defold-1.13.1/collectionproxy.d.ts +93 -0
- package/generated/versions/defold-1.13.1/compute.d.ts +237 -0
- package/generated/versions/defold-1.13.1/crash.d.ts +143 -0
- package/generated/versions/defold-1.13.1/editor-vm/http.d.ts +56 -0
- package/generated/versions/defold-1.13.1/editor-vm/image.d.ts +48 -0
- package/generated/versions/defold-1.13.1/editor-vm/json.d.ts +10 -0
- package/generated/versions/defold-1.13.1/editor-vm/localization.d.ts +42 -0
- package/generated/versions/defold-1.13.1/editor-vm/tilemap_tiles.d.ts +80 -0
- package/generated/versions/defold-1.13.1/editor-vm/zip.d.ts +10 -0
- package/generated/versions/defold-1.13.1/editor-vm/zlib.d.ts +24 -0
- package/generated/versions/defold-1.13.1/editor.d.ts +1121 -0
- package/generated/versions/defold-1.13.1/factory.d.ts +124 -0
- package/generated/versions/defold-1.13.1/font.d.ts +81 -0
- package/generated/versions/defold-1.13.1/go.d.ts +1107 -0
- package/generated/versions/defold-1.13.1/graphics.d.ts +411 -0
- package/generated/versions/defold-1.13.1/gui.d.ts +2353 -0
- package/generated/versions/defold-1.13.1/html5.d.ts +55 -0
- package/generated/versions/defold-1.13.1/http.d.ts +77 -0
- package/generated/versions/defold-1.13.1/image.d.ts +131 -0
- package/generated/versions/defold-1.13.1/index.d.ts +57 -0
- package/generated/versions/defold-1.13.1/json.d.ts +80 -0
- package/generated/versions/defold-1.13.1/kinds/editor-script.d.ts +14 -0
- package/generated/versions/defold-1.13.1/label.d.ts +93 -0
- package/generated/versions/defold-1.13.1/liveupdate.d.ts +142 -0
- package/generated/versions/defold-1.13.1/material.d.ts +408 -0
- package/generated/versions/defold-1.13.1/model.d.ts +272 -0
- package/generated/versions/defold-1.13.1/msg.d.ts +10 -0
- package/generated/versions/defold-1.13.1/particlefx.d.ts +163 -0
- package/generated/versions/defold-1.13.1/physics.d.ts +559 -0
- package/generated/versions/defold-1.13.1/profiler.d.ts +235 -0
- package/generated/versions/defold-1.13.1/render.d.ts +1190 -0
- package/generated/versions/defold-1.13.1/resource.d.ts +1523 -0
- package/generated/versions/defold-1.13.1/socket.d.ts +784 -0
- package/generated/versions/defold-1.13.1/sound.d.ts +292 -0
- package/generated/versions/defold-1.13.1/sprite.d.ts +175 -0
- package/generated/versions/defold-1.13.1/sys.d.ts +678 -0
- package/generated/versions/defold-1.13.1/tilemap.d.ts +208 -0
- package/generated/versions/defold-1.13.1/timer.d.ts +125 -0
- package/generated/versions/defold-1.13.1/types.d.ts +61 -0
- package/generated/versions/defold-1.13.1/vmath.d.ts +774 -0
- package/generated/versions/defold-1.13.1/window.d.ts +183 -0
- package/generated/versions/defold-1.13.1/zlib.d.ts +41 -0
- package/generated/vmath.d.ts +6 -26
- package/generated/window.d.ts +71 -71
- package/identity-vocabulary.json +561 -0
- package/index.d.ts +8 -0
- package/package.json +13 -2
- package/scripts/example-store-io.ts +12 -1
- package/scripts/extension-goldens.ts +1 -0
- package/scripts/fidelity-baseline.json +146 -46
- package/scripts/generate-api-availability.ts +90 -12
- package/scripts/generate-api-signatures.ts +14 -3
- package/scripts/import-defold-release.ts +85 -24
- package/scripts/prose-constants.ts +157 -0
- package/scripts/regen.ts +396 -78
- package/scripts/shared-handle-methods.ts +53 -0
- package/scripts/signature-store-fs.ts +1 -0
- package/scripts/sync-api-docs.ts +16 -5
- package/src/api-availability.ts +0 -0
- package/src/api-doc.ts +201 -3
- package/src/api-identity.ts +252 -0
- package/src/component-properties.d.ts +33 -0
- package/src/core-types.ts +28 -3
- package/src/correction-pins.ts +49 -0
- package/src/custom-messages.d.ts +4 -3
- package/src/doc-comment.ts +139 -23
- package/src/doc-corrections.ts +108 -0
- package/src/editor-vm-globals.d.ts +5 -2
- package/src/emit-dts.ts +2474 -281
- package/src/emit-messages.ts +52 -0
- package/src/engine-globals.d.ts +2 -2
- package/src/example-store.ts +125 -14
- package/src/field-correction-coverage.ts +204 -0
- package/src/fnv1a.ts +16 -0
- package/src/go-overloads.d.ts +33 -13
- package/src/index-base-table.ts +145 -0
- package/src/index-slot-classifications.ts +588 -0
- package/src/index.ts +39 -2
- package/src/library-index-slot-classifications.ts +332 -0
- package/src/lifecycle.ts +61 -199
- package/src/luals-type-expr.ts +354 -0
- package/src/msg-overloads.d.ts +0 -1
- package/src/param-correction-provenance.ts +64 -0
- package/src/return-correction-provenance.ts +58 -16
- package/src/script-api.ts +3 -1
- package/src/sys-overloads.d.ts +48 -0
- package/src/vmath-overloads.d.ts +27 -1
- package/src/window-event-guard.d.ts +6 -9
- package/url-parameters.json +1 -2
package/src/core-types.ts
CHANGED
|
@@ -188,6 +188,10 @@ export interface Url {
|
|
|
188
188
|
readonly fragment: Hash | undefined;
|
|
189
189
|
}
|
|
190
190
|
|
|
191
|
+
const BUFFER_TYPE = 'Opaque<"buffer">';
|
|
192
|
+
const BUFFERSTREAM_TYPE =
|
|
193
|
+
'Opaque<"bufferstream"> & { [index: number]: number; length: LuaLengthMethod<number> }';
|
|
194
|
+
|
|
191
195
|
export const DEFOLD_TYPE_MAP: Readonly<Record<string, string>> = {
|
|
192
196
|
number: "number",
|
|
193
197
|
int: "number",
|
|
@@ -214,9 +218,10 @@ export const DEFOLD_TYPE_MAP: Readonly<Record<string, string>> = {
|
|
|
214
218
|
texture: 'Opaque<"texture">',
|
|
215
219
|
render_target: 'Opaque<"render_target">',
|
|
216
220
|
constant: 'Opaque<"constant">',
|
|
217
|
-
constant_buffer:
|
|
218
|
-
|
|
219
|
-
|
|
221
|
+
constant_buffer:
|
|
222
|
+
'Opaque<"constant_buffer"> & { [name: string]: Vector4 | Matrix4 | Vector4[] | Matrix4[] }',
|
|
223
|
+
buffer: BUFFER_TYPE,
|
|
224
|
+
bufferstream: BUFFERSTREAM_TYPE,
|
|
220
225
|
userdata: 'Opaque<"userdata">',
|
|
221
226
|
// Vocabulary, not a shipped brand: no current ref-doc fixture types a slot
|
|
222
227
|
// `resource`, so nothing hand-written may name `Opaque<"resource">`. Kept so a
|
|
@@ -230,6 +235,10 @@ export const DEFOLD_TYPE_MAP: Readonly<Record<string, string>> = {
|
|
|
230
235
|
b2ContactEdge: 'Opaque<"b2ContactEdge">',
|
|
231
236
|
b2MassData: 'Opaque<"b2MassData">',
|
|
232
237
|
b2Transform: 'Opaque<"b2Transform">',
|
|
238
|
+
// bullet3d's collision-object functions also take a rigid body (its docs say
|
|
239
|
+
// so), so that handle's brand admits both; a rigid-body slot keeps its own.
|
|
240
|
+
btCollisionObject: 'Opaque<"btCollisionObject" | "btRigidBody">',
|
|
241
|
+
btRigidBody: 'Opaque<"btRigidBody">',
|
|
233
242
|
b2BodyType:
|
|
234
243
|
'(number & { readonly __brand: "b2d.body.B2_DYNAMIC_BODY" }) | (number & { readonly __brand: "b2d.body.B2_KINEMATIC_BODY" }) | (number & { readonly __brand: "b2d.body.B2_STATIC_BODY" })',
|
|
235
244
|
// socket handle types resolve to the method-bearing `interface <receiver>`
|
|
@@ -241,4 +250,20 @@ export const DEFOLD_TYPE_MAP: Readonly<Record<string, string>> = {
|
|
|
241
250
|
server: "server",
|
|
242
251
|
unconnected: "unconnected",
|
|
243
252
|
any: "unknown",
|
|
253
|
+
// 1.13.2 renames of the leaves above, same slots. Upstream declares each only as
|
|
254
|
+
// a `userdata`/`number` handle TYPEDEF, so each keeps its 1.13.1 mapping, with
|
|
255
|
+
// two exceptions: `script_instance` is the untyped `self` a callback recovery
|
|
256
|
+
// emits, and `resource_data` (1.13.1 `resource`, only in the hand-authored
|
|
257
|
+
// `go.get`/`go.set`/`go.property` slots) is a path hash.
|
|
258
|
+
buffer_data: BUFFER_TYPE,
|
|
259
|
+
buffer_stream: BUFFERSTREAM_TYPE,
|
|
260
|
+
script_instance: "unknown",
|
|
261
|
+
resource_data: "Hash",
|
|
262
|
+
timer_handle: "number",
|
|
263
|
+
render_predicate: "number",
|
|
264
|
+
socket_client: "client",
|
|
265
|
+
socket_connected: "connected",
|
|
266
|
+
socket_master: "master",
|
|
267
|
+
socket_server: "server",
|
|
268
|
+
socket_unconnected: "unconnected",
|
|
244
269
|
} as const;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// A slot-level type correction records the upstream spelling it contradicts
|
|
2
|
+
// (`upstream`) and any later spelling of the same defect a newer release
|
|
3
|
+
// declares (`retypedUpstream`). The emitter applies the correction only while
|
|
4
|
+
// the slot being emitted still declares one of them, and the provenance tests
|
|
5
|
+
// ask the same question of every retained target, so one table serves every
|
|
6
|
+
// release and neither side can drift from the other.
|
|
7
|
+
export interface PinnedCorrection {
|
|
8
|
+
readonly upstream: readonly string[];
|
|
9
|
+
readonly retypedUpstream?: readonly (readonly string[])[];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// `nil` is optionality, which `isDocOptional` owns (and, for a return, the
|
|
13
|
+
// return lane's own `nil` verdict); a correction rewrites only the concrete
|
|
14
|
+
// tokens, so only those are evidence.
|
|
15
|
+
export function baseTokens(tokens: readonly string[]): string {
|
|
16
|
+
return tokens.filter((token) => token !== "nil").join("|");
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function correctionPins(correction: PinnedCorrection): readonly (readonly string[])[] {
|
|
20
|
+
return [correction.upstream, ...(correction.retypedUpstream ?? [])];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function pinMatches(
|
|
24
|
+
declared: readonly string[],
|
|
25
|
+
pins: readonly (readonly string[])[],
|
|
26
|
+
): boolean {
|
|
27
|
+
const base = baseTokens(declared);
|
|
28
|
+
return pins.some((pin) => baseTokens(pin) === base);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// A property pins the text of its `<span class="type">`, split the way
|
|
32
|
+
// `parseProperty` splits it.
|
|
33
|
+
export function spanTokens(span: string): string[] {
|
|
34
|
+
return span
|
|
35
|
+
.split("|")
|
|
36
|
+
.map((token) => token.trim())
|
|
37
|
+
.filter((token) => token.length > 0);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface PinnedPropertyCorrection {
|
|
41
|
+
readonly upstream: string;
|
|
42
|
+
readonly retypedUpstream?: readonly string[];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function propertyCorrectionPins(
|
|
46
|
+
correction: PinnedPropertyCorrection,
|
|
47
|
+
): readonly (readonly string[])[] {
|
|
48
|
+
return [correction.upstream, ...(correction.retypedUpstream ?? [])].map(spanTokens);
|
|
49
|
+
}
|
package/src/custom-messages.d.ts
CHANGED
|
@@ -41,14 +41,15 @@ declare global {
|
|
|
41
41
|
// diagnostic at the call site rather than the declaration.
|
|
42
42
|
/**
|
|
43
43
|
* The payload declared for a message id: its `BuiltinMessages` entry, else
|
|
44
|
-
* its `CustomMessages` entry, else the open
|
|
45
|
-
* An id declared in both resolves to the built-in
|
|
44
|
+
* its `CustomMessages` entry, else the open table an undeclared id keeps: a
|
|
45
|
+
* record or a Lua sequence. An id declared in both resolves to the built-in
|
|
46
|
+
* payload.
|
|
46
47
|
*/
|
|
47
48
|
type MessagePayload<K> = K extends BuiltinMessageId
|
|
48
49
|
? BuiltinMessages[K]
|
|
49
50
|
: K extends keyof CustomMessages
|
|
50
51
|
? CustomMessages[K]
|
|
51
|
-
: Record<string | number, unknown
|
|
52
|
+
: Record<string | number, unknown> | readonly unknown[];
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
export {};
|
package/src/doc-comment.ts
CHANGED
|
@@ -1,21 +1,50 @@
|
|
|
1
1
|
const NAMED_ENTITIES: Record<string, string> = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
amp: "&",
|
|
3
|
+
lt: "<",
|
|
4
|
+
gt: ">",
|
|
5
|
+
quot: '"',
|
|
6
|
+
apos: "'",
|
|
7
|
+
// A non-breaking space in JSDoc is invisible noise; a plain space reads the same.
|
|
8
|
+
nbsp: " ",
|
|
9
|
+
times: "×",
|
|
10
|
+
copy: "©",
|
|
11
|
+
mdash: "—",
|
|
12
|
+
ndash: "–",
|
|
13
|
+
hellip: "…",
|
|
14
|
+
middot: "·",
|
|
15
|
+
deg: "°",
|
|
16
|
+
plusmn: "±",
|
|
17
|
+
le: "≤",
|
|
18
|
+
ge: "≥",
|
|
19
|
+
ne: "≠",
|
|
20
|
+
rarr: "→",
|
|
21
|
+
larr: "←",
|
|
22
|
+
lsquo: "‘",
|
|
23
|
+
rsquo: "’",
|
|
24
|
+
ldquo: "“",
|
|
25
|
+
rdquo: "”",
|
|
7
26
|
};
|
|
8
27
|
|
|
28
|
+
// One pass over the text, so a character an entity decodes to (`&` -> `&`)
|
|
29
|
+
// is never read as the start of another entity.
|
|
9
30
|
function decodeEntities(text: string): string {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
31
|
+
return text.replace(/&(?:#[xX]([0-9a-fA-F]+)|#(\d+)|([a-zA-Z]+));/g, (entity, hex, dec, name) => {
|
|
32
|
+
if (hex !== undefined) return codePointOr(Number.parseInt(hex, 16), entity);
|
|
33
|
+
if (dec !== undefined) return codePointOr(Number(dec), entity);
|
|
34
|
+
return Object.hasOwn(NAMED_ENTITIES, name) ? (NAMED_ENTITIES[name] ?? entity) : entity;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function codePointOr(code: number, fallback: string): string {
|
|
39
|
+
return code <= 0x10ffff ? String.fromCodePoint(code) : fallback;
|
|
17
40
|
}
|
|
18
41
|
|
|
42
|
+
// One level of list nesting while `htmlToDocText` runs its whitespace pass,
|
|
43
|
+
// which would otherwise strip leading spaces.
|
|
44
|
+
const LIST_INDENT = "";
|
|
45
|
+
const STRANDED_MARKER = /^(*)-$/;
|
|
46
|
+
const LIST_ITEM = /^*- /;
|
|
47
|
+
|
|
19
48
|
/**
|
|
20
49
|
* Join a list marker left alone on its line back onto the item's first content
|
|
21
50
|
* line. Upstream prose puts a newline between `<li>` and the item's first word,
|
|
@@ -34,7 +63,8 @@ function weldStrandedListMarkers(text: string): string {
|
|
|
34
63
|
out.push(line);
|
|
35
64
|
continue;
|
|
36
65
|
}
|
|
37
|
-
|
|
66
|
+
const stranded = STRANDED_MARKER.exec(line);
|
|
67
|
+
if (inFence || !stranded) {
|
|
38
68
|
out.push(line);
|
|
39
69
|
continue;
|
|
40
70
|
}
|
|
@@ -43,35 +73,90 @@ function weldStrandedListMarkers(text: string): string {
|
|
|
43
73
|
const content = lines[ahead];
|
|
44
74
|
if (
|
|
45
75
|
content === undefined ||
|
|
46
|
-
content
|
|
47
|
-
|
|
76
|
+
STRANDED_MARKER.test(content) ||
|
|
77
|
+
LIST_ITEM.test(content) ||
|
|
48
78
|
content.startsWith("```")
|
|
49
79
|
) {
|
|
50
80
|
// No value to weld onto — drop the marker and the blank run behind it.
|
|
51
81
|
index = ahead - 1;
|
|
52
82
|
continue;
|
|
53
83
|
}
|
|
54
|
-
out.push(
|
|
84
|
+
out.push(`${stranded[1]}- ${content}`);
|
|
55
85
|
index = ahead;
|
|
56
86
|
}
|
|
57
87
|
return out.join("\n").trim();
|
|
58
88
|
}
|
|
59
89
|
|
|
90
|
+
// Upstream Markdown indented one level too deep is highlighted as code while
|
|
91
|
+
// still reading as Markdown: every line opens on a backtick-quoted name, as in
|
|
92
|
+
// the field table `graphics.get_adapter_info` documents under `limits`. That
|
|
93
|
+
// doc is replaced whole by a `DOC_CORRECTIONS` entry, so no vendored ref-doc
|
|
94
|
+
// reaches this rule today. It is the fallback for when upstream rewords such a
|
|
95
|
+
// doc without fixing it — the correction's hash stops matching and this still
|
|
96
|
+
// yields a readable list, not a mislabelled `lua` fence — and for any other doc
|
|
97
|
+
// that repeats the mistake.
|
|
98
|
+
const MISREAD_MARKDOWN_LINE = /^\s*`[^`]+`/;
|
|
99
|
+
|
|
100
|
+
// A `<pre>` body as Markdown. Misread Markdown becomes a bullet per line, its
|
|
101
|
+
// `[type:X]` marker reduced to the bare type the way a `<span class="type">` is.
|
|
102
|
+
// Otherwise it is a fence: a `<code>` inside marks highlighted source, Lua
|
|
103
|
+
// unless its class names another language, and a bare `<pre>` is a
|
|
104
|
+
// preformatted diagram. Upstream indents some samples by a uniform margin,
|
|
105
|
+
// which is dropped.
|
|
106
|
+
function preToMarkdown(inner: string): string {
|
|
107
|
+
const lines = htmlToCodeText(inner).split("\n");
|
|
108
|
+
const filled = lines.filter((line) => line.trim() !== "");
|
|
109
|
+
if (filled.every((line) => MISREAD_MARKDOWN_LINE.test(line))) {
|
|
110
|
+
return filled
|
|
111
|
+
.map(
|
|
112
|
+
(line) =>
|
|
113
|
+
`- ${line
|
|
114
|
+
.trim()
|
|
115
|
+
.replace(/\[type:([^\]]+)\]/g, "$1")
|
|
116
|
+
.replace(/\s+/g, " ")}`,
|
|
117
|
+
)
|
|
118
|
+
.join("\n");
|
|
119
|
+
}
|
|
120
|
+
const lang =
|
|
121
|
+
inner.match(/class="language-([A-Za-z0-9_+-]+)"/)?.[1] ??
|
|
122
|
+
(/<code\b/i.test(inner) ? "lua" : "text");
|
|
123
|
+
const margin = Math.min(
|
|
124
|
+
...lines.filter((line) => line.trim() !== "").map((line) => line.match(/^ */)?.[0].length ?? 0),
|
|
125
|
+
);
|
|
126
|
+
const body = lines.map((line) => line.slice(Number.isFinite(margin) ? margin : 0)).join("\n");
|
|
127
|
+
return `\`\`\`${lang}\n${body}\n\`\`\``;
|
|
128
|
+
}
|
|
129
|
+
|
|
60
130
|
/**
|
|
61
131
|
* Convert a ref-doc HTML fragment to clean Markdown/plain text suitable for a
|
|
62
132
|
* JSDoc comment body. Pure and free of any `ApiModule` dependency so the emit
|
|
63
133
|
* slices and any future surface can reuse it.
|
|
64
134
|
*/
|
|
65
135
|
export function htmlToDocText(html: string): string {
|
|
136
|
+
// Lift each `<pre>` out before the whitespace pass, which would flatten an
|
|
137
|
+
// ASCII diagram or a code sample into one line, and put it back as Markdown.
|
|
138
|
+
const fences: string[] = [];
|
|
139
|
+
// A list item's marker carries one `LIST_INDENT` per enclosing list beyond
|
|
140
|
+
// the first, which the whitespace pass leaves alone; each becomes two spaces,
|
|
141
|
+
// the content column of the parent `- ` marker, once that pass is done.
|
|
142
|
+
let listDepth = 0;
|
|
66
143
|
let text = html
|
|
144
|
+
.replace(/<pre\b[^>]*>([\s\S]*?)<\/pre>/gi, (_, inner: string) => {
|
|
145
|
+
fences.push(preToMarkdown(inner));
|
|
146
|
+
return `\n\n\uE000${fences.length - 1}\uE000\n\n`;
|
|
147
|
+
})
|
|
67
148
|
.replace(/<code>([\s\S]*?)<\/code>/gi, "`$1`")
|
|
68
149
|
.replace(/<(?:em|i)>([\s\S]*?)<\/(?:em|i)>/gi, "*$1*")
|
|
69
150
|
.replace(/<a\b[^>]*>([\s\S]*?)<\/a>/gi, "$1")
|
|
70
|
-
.replace(/<li
|
|
71
|
-
|
|
151
|
+
.replace(/<(\/?)(ul|ol|li)\b[^>]*>/gi, (_, close: string, tag: string) => {
|
|
152
|
+
if (tag.toLowerCase() !== "li") {
|
|
153
|
+
listDepth = Math.max(0, listDepth + (close ? -1 : 1));
|
|
154
|
+
return "";
|
|
155
|
+
}
|
|
156
|
+
return close ? "" : `\n${LIST_INDENT.repeat(Math.max(0, listDepth - 1))}- `;
|
|
157
|
+
})
|
|
72
158
|
.replace(/<br\s*\/?>/gi, "\n")
|
|
73
159
|
.replace(/<\/p>/gi, "\n\n")
|
|
74
|
-
.replace(/<\/?pre>/gi, "\n")
|
|
75
160
|
.replace(/<[^>]+>/g, "");
|
|
76
161
|
|
|
77
162
|
text = decodeEntities(text);
|
|
@@ -86,7 +171,12 @@ export function htmlToDocText(html: string): string {
|
|
|
86
171
|
.replace(/\n{3,}/g, "\n\n")
|
|
87
172
|
.trim();
|
|
88
173
|
|
|
89
|
-
|
|
174
|
+
// A blank line between two items would make the list loose, spacing every
|
|
175
|
+
// item apart like a paragraph.
|
|
176
|
+
text = weldStrandedListMarkers(text)
|
|
177
|
+
.replace(/(?<=^*- .*)\n\n(?=*- )/gm, "\n")
|
|
178
|
+
.replaceAll(LIST_INDENT, " ")
|
|
179
|
+
.replace(/\uE000(\d+)\uE000/g, (_, i: string) => fences[Number(i)] ?? "");
|
|
90
180
|
|
|
91
181
|
// Upstream prose can open a fence and end mid-body; left open it swallows the
|
|
92
182
|
// rest of the JSDoc block and everything after it on the rendered page.
|
|
@@ -138,7 +228,7 @@ function scanExampleRegions(html: string): { matched: boolean; regions: ExampleR
|
|
|
138
228
|
let matched = false;
|
|
139
229
|
for (let match = blocks.exec(html); match !== null; match = blocks.exec(html)) {
|
|
140
230
|
matched = true;
|
|
141
|
-
regions.push(
|
|
231
|
+
regions.push(...proseRegions(html.slice(lastIndex, match.index)));
|
|
142
232
|
const inner = match[1] ?? "";
|
|
143
233
|
regions.push({
|
|
144
234
|
kind: "code",
|
|
@@ -148,10 +238,28 @@ function scanExampleRegions(html: string): { matched: boolean; regions: ExampleR
|
|
|
148
238
|
lastIndex = match.index + match[0].length;
|
|
149
239
|
}
|
|
150
240
|
if (!matched) return { matched: false, regions: [{ kind: "code", html, lang: "lua" }] };
|
|
151
|
-
regions.push(
|
|
241
|
+
regions.push(...proseRegions(html.slice(lastIndex)));
|
|
152
242
|
return { matched: true, regions };
|
|
153
243
|
}
|
|
154
244
|
|
|
245
|
+
// Upstream Markdown ```` ```lua ```` fences sometimes reach the ref-doc as
|
|
246
|
+
// `<code>lua\n...</code>`: a language token, a newline, then source. Read as
|
|
247
|
+
// prose it welds the code into the surrounding sentences, so each one is lifted
|
|
248
|
+
// into a code region of its own. Inline `<code>` spans carry no such newline.
|
|
249
|
+
const MANGLED_FENCE = /<code>([A-Za-z0-9_+-]+)\n([\s\S]*?)<\/code>/g;
|
|
250
|
+
|
|
251
|
+
function proseRegions(html: string): ExampleRegion[] {
|
|
252
|
+
const regions: ExampleRegion[] = [];
|
|
253
|
+
let lastIndex = 0;
|
|
254
|
+
for (const match of html.matchAll(MANGLED_FENCE)) {
|
|
255
|
+
regions.push({ kind: "prose", html: html.slice(lastIndex, match.index), lang: "lua" });
|
|
256
|
+
regions.push({ kind: "code", html: match[2] ?? "", lang: match[1] ?? "lua" });
|
|
257
|
+
lastIndex = match.index + match[0].length;
|
|
258
|
+
}
|
|
259
|
+
regions.push({ kind: "prose", html: html.slice(lastIndex), lang: "lua" });
|
|
260
|
+
return regions;
|
|
261
|
+
}
|
|
262
|
+
|
|
155
263
|
/**
|
|
156
264
|
* Convert a ref-doc `examples` HTML fragment — prose interleaved with one or
|
|
157
265
|
* more `<div class="codehilite">…</div>` syntax-highlight blocks — into Markdown,
|
|
@@ -200,7 +308,8 @@ export interface ExampleSegmentation {
|
|
|
200
308
|
* Carve an `examples` HTML fragment into one segment per example it carries.
|
|
201
309
|
*
|
|
202
310
|
* A `<div class="codehilite">` block is a code region and the markup between
|
|
203
|
-
* two of them is a prose region
|
|
311
|
+
* two of them is a prose region, less any mangled `<code>lang\n...</code>`
|
|
312
|
+
* fence lifted out of it as a code region; inside either, a ` ``` ` line switches between
|
|
204
313
|
* code and prose, and an opener reached while already in code ends the running
|
|
205
314
|
* example and starts the next. Upstream writes several examples both ways — as
|
|
206
315
|
* several blocks, and as its own Markdown fences inside one block — so both
|
|
@@ -280,6 +389,13 @@ function trimBlankEdges(lines: readonly string[]): string[] {
|
|
|
280
389
|
return out;
|
|
281
390
|
}
|
|
282
391
|
|
|
392
|
+
// Prefer the full `description`; fall back to the one-line `brief` when prose is
|
|
393
|
+
// absent. Shared by every documented member kind so the summary source is
|
|
394
|
+
// consistent across functions, constants, variables, and properties.
|
|
395
|
+
export function summaryFor(brief: string, description: string): string {
|
|
396
|
+
return description.trim() !== "" ? description : brief;
|
|
397
|
+
}
|
|
398
|
+
|
|
283
399
|
export interface DocCommentParts {
|
|
284
400
|
summary: string;
|
|
285
401
|
// Present exactly when the source carried a deprecation tag; `""` is the bare
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { fnv1a64 } from "./fnv1a";
|
|
2
|
+
|
|
3
|
+
// A function slot whose upstream doc HTML is malformed badly enough to misread,
|
|
4
|
+
// replaced wholesale with authored HTML that keeps upstream's wording, or a
|
|
5
|
+
// property description that contradicts what the engine does. Each
|
|
6
|
+
// entry is pinned by the FNV-1a hash of the exact upstream HTML it replaces: the
|
|
7
|
+
// parse applies it only while the vendored doc still hashes to that value, so a
|
|
8
|
+
// fixed or reworded upstream doc wins by itself, and
|
|
9
|
+
// `doc-correction-provenance.test.ts` reds until the stale entry is deleted.
|
|
10
|
+
//
|
|
11
|
+
// Keyed `<function>#param:<name>`, `<function>#return:<name>`, or
|
|
12
|
+
// `<namespace>#property:<name>` (the ref-doc `PROPERTY` element's bare name).
|
|
13
|
+
export interface DocCorrection {
|
|
14
|
+
readonly upstreamHash: string;
|
|
15
|
+
readonly html: string;
|
|
16
|
+
readonly reason: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const li = (name: string, type: string, doc: string) =>
|
|
20
|
+
`<li><code>${name}</code> <span class="type">${type}</span> ${doc}</li>`;
|
|
21
|
+
|
|
22
|
+
export const DOC_CORRECTIONS: ReadonlyMap<string, DocCorrection> = new Map([
|
|
23
|
+
[
|
|
24
|
+
"graphics.get_adapter_info#return:info",
|
|
25
|
+
{
|
|
26
|
+
upstreamHash: "77028e82ec2d15bd",
|
|
27
|
+
reason:
|
|
28
|
+
"script_graphics.cpp indents the field table as preformatted text: the top-level fields run together as one paragraph, and the `limits` and `features` sub-tables are highlighted as code",
|
|
29
|
+
html: [
|
|
30
|
+
"table with the following fields:",
|
|
31
|
+
"<ul>",
|
|
32
|
+
li("family", "string", 'adapter family name (e.g. "opengl", "vulkan")'),
|
|
33
|
+
li("version_major", "number", "adapter API major version (e.g. 1 for Vulkan 1.4)"),
|
|
34
|
+
li("version_minor", "number", "adapter API minor version (e.g. 4 for Vulkan 1.4)"),
|
|
35
|
+
`<li><code>limits</code> <span class="type">table</span> hardware/driver limits:<ul>`,
|
|
36
|
+
li("max_texture_size_2d", "number", "max 2D texture dimension in texels"),
|
|
37
|
+
li("max_texture_size_3d", "number", "max 3D (volume) texture dimension in texels"),
|
|
38
|
+
li("max_texture_size_cube", "number", "max cube map face dimension in texels"),
|
|
39
|
+
li("max_texture_array_layers", "number", "max layers in an array texture"),
|
|
40
|
+
li("max_framebuffer_width", "number", "max framebuffer width in pixels"),
|
|
41
|
+
li("max_framebuffer_height", "number", "max framebuffer height in pixels"),
|
|
42
|
+
li("max_color_attachments", "number", "max simultaneous color attachments"),
|
|
43
|
+
li("max_samplers_per_stage", "number", "max texture samplers per shader stage"),
|
|
44
|
+
li("max_textures_per_stage", "number", "max sampled textures per shader stage"),
|
|
45
|
+
li("max_vertex_attributes", "number", "max vertex attributes"),
|
|
46
|
+
li("max_vertex_buffers", "number", "max vertex buffer bindings"),
|
|
47
|
+
li("max_compute_workgroup_size_x", "number", "max compute workgroup size (X)"),
|
|
48
|
+
li("max_compute_workgroup_size_y", "number", "max compute workgroup size (Y)"),
|
|
49
|
+
li("max_compute_workgroup_size_z", "number", "max compute workgroup size (Z)"),
|
|
50
|
+
li("max_compute_workgroup_invocations", "number", "max invocations per compute workgroup"),
|
|
51
|
+
li(
|
|
52
|
+
"max_compute_shared_memory_size",
|
|
53
|
+
"number",
|
|
54
|
+
"max shared memory per compute workgroup (bytes)",
|
|
55
|
+
),
|
|
56
|
+
li("max_uniform_buffer_range", "number", "max bindable uniform buffer range (bytes)"),
|
|
57
|
+
li("max_storage_buffer_range", "number", "max bindable storage buffer range (bytes)"),
|
|
58
|
+
"</ul></li>",
|
|
59
|
+
li("extensions", "table", "array of driver-reported extension name strings"),
|
|
60
|
+
`<li><code>features</code> <span class="type">table</span> array of supported context feature ids:<ul>`,
|
|
61
|
+
"<li><code>graphics.CONTEXT_FEATURE_MULTI_TARGET_RENDERING</code> multi-target rendering</li>",
|
|
62
|
+
"<li><code>graphics.CONTEXT_FEATURE_TEXTURE_ARRAY</code> texture arrays</li>",
|
|
63
|
+
"<li><code>graphics.CONTEXT_FEATURE_COMPUTE_SHADER</code> compute shaders</li>",
|
|
64
|
+
"<li><code>graphics.CONTEXT_FEATURE_STORAGE_BUFFER</code> storage buffers</li>",
|
|
65
|
+
"<li><code>graphics.CONTEXT_FEATURE_VSYNC</code> vertical sync</li>",
|
|
66
|
+
"<li><code>graphics.CONTEXT_FEATURE_INSTANCING</code> hardware instancing</li>",
|
|
67
|
+
"<li><code>graphics.CONTEXT_FEATURE_3D_TEXTURES</code> 3D (volume) textures</li>",
|
|
68
|
+
"<li><code>graphics.CONTEXT_FEATURE_ASTC_ARRAY_TEXTURES</code> ASTC compressed 2D array textures</li>",
|
|
69
|
+
"<li><code>graphics.CONTEXT_FEATURE_BLEND_EQUATION_MIN_MAX</code> min/max blend equations</li>",
|
|
70
|
+
"</ul></li>",
|
|
71
|
+
"</ul>",
|
|
72
|
+
].join("\n"),
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
[
|
|
76
|
+
"go#property:scale",
|
|
77
|
+
{
|
|
78
|
+
upstreamHash: "a7f5ba1b125d1fae",
|
|
79
|
+
reason:
|
|
80
|
+
"upstream calls it a uniform number, but the engine reads a vector3 back from `go.get` and applies a written number as a uniform scale",
|
|
81
|
+
html: "The scale of the game object. <code>go.get</code> returns a vector3; <code>go.set</code> and <code>go.animate</code> also take a number, which sets a uniform scale.",
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
[
|
|
85
|
+
"label#property:scale",
|
|
86
|
+
{
|
|
87
|
+
upstreamHash: "5a15760073a8629d",
|
|
88
|
+
reason:
|
|
89
|
+
'upstream says a number is accepted, but `go.set` raises "must be a vmath.vector3" on one; only `go.animate` takes a number',
|
|
90
|
+
html: "The scale of the label. <code>go.get</code> returns and <code>go.set</code> takes a vector3; <code>go.animate</code> also takes a number, which sets a uniform scale.",
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
]);
|
|
94
|
+
|
|
95
|
+
export function docCorrectionKey(
|
|
96
|
+
owner: string,
|
|
97
|
+
slot: "param" | "return" | "property",
|
|
98
|
+
name: string,
|
|
99
|
+
): string {
|
|
100
|
+
return `${owner}#${slot}:${name}`;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// The slot's doc with its correction applied, or `doc` itself when the slot has
|
|
104
|
+
// no entry or upstream no longer matches the pinned hash.
|
|
105
|
+
export function correctedDoc(key: string, doc: string): string {
|
|
106
|
+
const correction = DOC_CORRECTIONS.get(key);
|
|
107
|
+
return correction && fnv1a64(doc) === correction.upstreamHash ? correction.html : doc;
|
|
108
|
+
}
|
|
@@ -19,6 +19,9 @@ import type {
|
|
|
19
19
|
// sitting before a required one, or an empty `returnvalues` on a function
|
|
20
20
|
// upstream's own prose says returns a value — are written out here as overload
|
|
21
21
|
// sets. All three are withheld from the emit by `EDITOR_VM_SKIP_FUNCTIONS`. The
|
|
22
|
+
// constant tables are VARIABLEs in 1.13.1; in 1.13.2 `zip.METHOD.*` and
|
|
23
|
+
// `zip.ON_CONFLICT.*` are ENUM members and `http.server.*` are CONSTANTs, and the
|
|
24
|
+
// entry's skip rules withhold them in every one of those shapes. The
|
|
22
25
|
// contract is unchanged and still derived: this file declares exactly what the
|
|
23
26
|
// emit leaves behind. The namespaces below merge with the emitted
|
|
24
27
|
// `generated/editor-vm/` bodies rather than replacing them. Upstream records no
|
|
@@ -26,9 +29,9 @@ import type {
|
|
|
26
29
|
|
|
27
30
|
declare global {
|
|
28
31
|
/**
|
|
29
|
-
* Pretty-print
|
|
32
|
+
* Pretty-print Lua values
|
|
30
33
|
*/
|
|
31
|
-
function pprint(
|
|
34
|
+
function pprint(...values: unknown[]): void;
|
|
32
35
|
|
|
33
36
|
namespace http {
|
|
34
37
|
namespace server {
|