@defold-typescript/types 0.39.0 → 0.40.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 +117 -0
- package/api-signatures.json +262 -237
- package/examples/translations.json +81 -81
- package/generated/b2d_shape.d.ts +23 -1
- package/generated/buffer.d.ts +18 -15
- package/generated/camera.d.ts +2 -2
- package/generated/collectionfactory.d.ts +12 -10
- package/generated/collectionproxy.d.ts +1 -1
- package/generated/compute.d.ts +1 -1
- package/generated/go.d.ts +9 -5
- package/generated/graphics.d.ts +52 -0
- package/generated/gui.d.ts +53 -32
- package/generated/html5.d.ts +3 -1
- package/generated/http.d.ts +4 -2
- package/generated/image.d.ts +24 -15
- package/generated/kinds/gui-script.d.ts +1 -0
- package/generated/kinds/render-script.d.ts +1 -0
- package/generated/kinds/script.d.ts +1 -0
- package/generated/material.d.ts +1 -1
- package/generated/model.d.ts +32 -3
- package/generated/physics.d.ts +13 -11
- package/generated/profiler.d.ts +1 -1
- package/generated/render.d.ts +72 -15
- package/generated/resource.d.ts +100 -69
- package/generated/socket.d.ts +23 -13
- package/generated/sound.d.ts +3 -3
- package/generated/sprite.d.ts +9 -1
- package/generated/sys.d.ts +34 -23
- package/generated/versions/defold-1.12.4/buffer.d.ts +18 -15
- package/generated/versions/defold-1.12.4/camera.d.ts +2 -2
- package/generated/versions/defold-1.12.4/collectionfactory.d.ts +12 -10
- package/generated/versions/defold-1.12.4/go.d.ts +9 -5
- package/generated/versions/defold-1.12.4/gui.d.ts +47 -31
- package/generated/versions/defold-1.12.4/html5.d.ts +3 -1
- package/generated/versions/defold-1.12.4/http.d.ts +4 -2
- package/generated/versions/defold-1.12.4/image.d.ts +24 -15
- package/generated/versions/defold-1.12.4/index.d.ts +1 -0
- package/generated/versions/defold-1.12.4/model.d.ts +32 -3
- package/generated/versions/defold-1.12.4/physics.d.ts +13 -11
- package/generated/versions/defold-1.12.4/profiler.d.ts +1 -1
- package/generated/versions/defold-1.12.4/render.d.ts +72 -15
- package/generated/versions/defold-1.12.4/resource.d.ts +100 -69
- package/generated/versions/defold-1.12.4/socket.d.ts +23 -13
- package/generated/versions/defold-1.12.4/sound.d.ts +3 -3
- package/generated/versions/defold-1.12.4/sprite.d.ts +9 -1
- package/generated/versions/defold-1.12.4/sys.d.ts +34 -23
- package/generated/versions/defold-1.12.4/vmath.d.ts +5 -5
- package/generated/versions/defold-1.13.0/b2d_shape.d.ts +23 -1
- package/generated/versions/defold-1.13.0/buffer.d.ts +18 -15
- package/generated/versions/defold-1.13.0/camera.d.ts +2 -2
- package/generated/versions/defold-1.13.0/collectionfactory.d.ts +12 -10
- package/generated/versions/defold-1.13.0/compute.d.ts +1 -1
- package/generated/versions/defold-1.13.0/go.d.ts +9 -5
- package/generated/versions/defold-1.13.0/graphics.d.ts +48 -0
- package/generated/versions/defold-1.13.0/gui.d.ts +47 -31
- package/generated/versions/defold-1.13.0/html5.d.ts +3 -1
- package/generated/versions/defold-1.13.0/http.d.ts +4 -2
- package/generated/versions/defold-1.13.0/image.d.ts +24 -15
- package/generated/versions/defold-1.13.0/index.d.ts +1 -0
- package/generated/versions/defold-1.13.0/material.d.ts +1 -1
- package/generated/versions/defold-1.13.0/model.d.ts +32 -3
- package/generated/versions/defold-1.13.0/physics.d.ts +13 -11
- package/generated/versions/defold-1.13.0/profiler.d.ts +1 -1
- package/generated/versions/defold-1.13.0/render.d.ts +72 -15
- package/generated/versions/defold-1.13.0/resource.d.ts +100 -69
- package/generated/versions/defold-1.13.0/socket.d.ts +23 -13
- package/generated/versions/defold-1.13.0/sound.d.ts +3 -3
- package/generated/versions/defold-1.13.0/sprite.d.ts +9 -1
- package/generated/versions/defold-1.13.0/sys.d.ts +34 -23
- package/generated/versions/defold-1.13.0/vmath.d.ts +5 -5
- package/generated/vmath.d.ts +5 -5
- package/index.d.ts +1 -0
- package/package.json +1 -1
- package/scripts/generate-api-signatures.ts +2 -1
- package/scripts/prose-constants.ts +96 -0
- package/scripts/regen.ts +6 -2
- package/src/component-properties.d.ts +33 -0
- package/src/core-types.ts +4 -2
- package/src/custom-messages.d.ts +4 -3
- package/src/doc-comment.ts +35 -12
- package/src/emit-dts.ts +457 -47
- package/src/engine-globals.d.ts +2 -2
- package/src/go-overloads.d.ts +11 -10
- package/src/index.ts +4 -0
- package/src/param-correction-provenance.ts +67 -0
- package/src/render-overloads.d.ts +15 -0
- package/src/script-api.ts +3 -1
package/generated/vmath.d.ts
CHANGED
|
@@ -49,7 +49,7 @@ declare global {
|
|
|
49
49
|
function conj(q1: Quaternion): Quaternion;
|
|
50
50
|
/**
|
|
51
51
|
* Given two linearly independent vectors P and Q, the cross product,
|
|
52
|
-
* P
|
|
52
|
+
* P × Q, is a vector that is perpendicular to both P and Q and
|
|
53
53
|
* therefore normal to the plane containing them.
|
|
54
54
|
* If the two vectors have the same direction (or have the exact
|
|
55
55
|
* opposite direction from one another, i.e. are not linearly independent)
|
|
@@ -70,8 +70,8 @@ declare global {
|
|
|
70
70
|
function cross(v1: Vector3, v2: Vector3): Vector3;
|
|
71
71
|
/**
|
|
72
72
|
* The returned value is a scalar defined as:
|
|
73
|
-
* `P
|
|
74
|
-
* where
|
|
73
|
+
* `P ⋅ Q = |P| |Q| cos θ`
|
|
74
|
+
* where θ is the angle between the vectors P and Q.
|
|
75
75
|
*
|
|
76
76
|
* - If the dot product is positive then the angle between the vectors is below 90 degrees.
|
|
77
77
|
*
|
|
@@ -437,8 +437,8 @@ declare global {
|
|
|
437
437
|
/**
|
|
438
438
|
* Calculates the extent the projection of the first vector onto the second.
|
|
439
439
|
* The returned value is a scalar p defined as:
|
|
440
|
-
* `p = |P| cos
|
|
441
|
-
* where
|
|
440
|
+
* `p = |P| cos θ / |Q|`
|
|
441
|
+
* where θ is the angle between the vectors P and Q.
|
|
442
442
|
*
|
|
443
443
|
* @param v1 - vector to be projected on the second
|
|
444
444
|
* @param v2 - vector onto which the first will be projected, must not have zero length
|
package/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -14,7 +14,8 @@ const PACKAGE_ROOT = resolve(import.meta.dir, "..");
|
|
|
14
14
|
const SIGNATURES_PATH = resolve(PACKAGE_ROOT, "api-signatures.json");
|
|
15
15
|
|
|
16
16
|
export interface SignaturesArtifact {
|
|
17
|
-
// version -> symbolIdentityKey -> authoritative TS signature text
|
|
17
|
+
// version -> symbolIdentityKey -> authoritative TS signature text; a symbol
|
|
18
|
+
// with several declared arms carries one arm per line, primary first
|
|
18
19
|
readonly versions: Record<string, Record<string, string>>;
|
|
19
20
|
// The same axis and keys, carrying each documented slot's rendered type. Kept
|
|
20
21
|
// parallel rather than folded into `versions` because three consumers
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { ModuleManifestEntry } from "./regen";
|
|
2
|
+
|
|
3
|
+
// A constant family the engine registers and one function's parameter prose
|
|
4
|
+
// lists, but no ref-doc element declares. Each release's own list is the
|
|
5
|
+
// evidence, so a surface declares exactly the members its release documents.
|
|
6
|
+
interface ProseConstantFamily {
|
|
7
|
+
readonly namespace: string;
|
|
8
|
+
readonly prefix: string;
|
|
9
|
+
readonly describes: string;
|
|
10
|
+
readonly evidence: {
|
|
11
|
+
readonly namespace: string;
|
|
12
|
+
readonly function: string;
|
|
13
|
+
readonly parameter: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const PROSE_CONSTANT_FAMILIES: readonly ProseConstantFamily[] = [
|
|
18
|
+
{
|
|
19
|
+
namespace: "graphics",
|
|
20
|
+
prefix: "SEMANTIC_TYPE_",
|
|
21
|
+
describes: "Vertex attribute semantic type",
|
|
22
|
+
evidence: {
|
|
23
|
+
namespace: "material",
|
|
24
|
+
function: "material.set_vertex_attributes",
|
|
25
|
+
parameter: "attributes",
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
];
|
|
29
|
+
|
|
30
|
+
interface DocElement {
|
|
31
|
+
readonly type: string;
|
|
32
|
+
readonly name: string;
|
|
33
|
+
readonly parameters?: readonly { readonly name: string; readonly doc?: string }[];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
interface ApiDoc {
|
|
37
|
+
readonly elements: readonly DocElement[];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function escapeRegExp(text: string): string {
|
|
41
|
+
return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function evidencedNames(family: ProseConstantFamily, modules: readonly ModuleManifestEntry[]) {
|
|
45
|
+
const source = modules.find((m) => m.namespace === family.evidence.namespace);
|
|
46
|
+
if (!source) return [];
|
|
47
|
+
const fn = (source.doc as ApiDoc).elements.find(
|
|
48
|
+
(e) => e.type === "FUNCTION" && e.name === family.evidence.function,
|
|
49
|
+
);
|
|
50
|
+
const prose = fn?.parameters?.find((p) => p.name === family.evidence.parameter)?.doc ?? "";
|
|
51
|
+
const item = new RegExp(
|
|
52
|
+
`<li><code>(${escapeRegExp(`${family.namespace}.${family.prefix}`)}\\w+)</code></li>`,
|
|
53
|
+
"g",
|
|
54
|
+
);
|
|
55
|
+
return [...new Set(Array.from(prose.matchAll(item), (m) => m[1] as string))];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function constantElement(name: string, brief: string) {
|
|
59
|
+
return {
|
|
60
|
+
type: "CONSTANT",
|
|
61
|
+
name,
|
|
62
|
+
brief,
|
|
63
|
+
description: "",
|
|
64
|
+
returnvalues: [],
|
|
65
|
+
parameters: [],
|
|
66
|
+
examples: "",
|
|
67
|
+
replaces: "",
|
|
68
|
+
error: "",
|
|
69
|
+
tparams: [],
|
|
70
|
+
members: [],
|
|
71
|
+
notes: [],
|
|
72
|
+
language: "",
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function synthesizeProseConstants(
|
|
77
|
+
modules: readonly ModuleManifestEntry[],
|
|
78
|
+
): ModuleManifestEntry[] {
|
|
79
|
+
let out = [...modules];
|
|
80
|
+
for (const family of PROSE_CONSTANT_FAMILIES) {
|
|
81
|
+
const names = evidencedNames(family, out);
|
|
82
|
+
if (names.length === 0) continue;
|
|
83
|
+
const index = out.findIndex((m) => m.namespace === family.namespace);
|
|
84
|
+
const target = out[index];
|
|
85
|
+
if (!target) continue;
|
|
86
|
+
const doc = target.doc as ApiDoc;
|
|
87
|
+
const declared = new Set(doc.elements.map((e) => e.name));
|
|
88
|
+
const brief = `${family.describes}, for \`${family.evidence.function}\`.`;
|
|
89
|
+
const added = names.filter((n) => !declared.has(n)).map((n) => constantElement(n, brief));
|
|
90
|
+
if (added.length === 0) continue;
|
|
91
|
+
out = out.map((m, i) =>
|
|
92
|
+
i === index ? { ...m, doc: { ...doc, elements: [...doc.elements, ...added] } } : m,
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
return out;
|
|
96
|
+
}
|
package/scripts/regen.ts
CHANGED
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
resolveRefDoc,
|
|
27
27
|
} from "./doc-source";
|
|
28
28
|
import { loadTranslations } from "./example-store-io";
|
|
29
|
+
import { synthesizeProseConstants } from "./prose-constants";
|
|
29
30
|
import { type readZip, SYNC_MANIFEST, type SyncManifestEntry } from "./sync-api-docs";
|
|
30
31
|
|
|
31
32
|
export interface ApiTargetModule {
|
|
@@ -99,7 +100,7 @@ export function loadTargetModules(
|
|
|
99
100
|
target: ApiTarget,
|
|
100
101
|
packageRoot: string = PACKAGE_ROOT,
|
|
101
102
|
): ModuleManifestEntry[] {
|
|
102
|
-
|
|
103
|
+
const modules = target.modules.map((module) => {
|
|
103
104
|
const path = resolve(packageRoot, target.fixturesDir, module.fixture);
|
|
104
105
|
let raw: string;
|
|
105
106
|
try {
|
|
@@ -117,6 +118,7 @@ export function loadTargetModules(
|
|
|
117
118
|
};
|
|
118
119
|
return module.skipFunctions ? { ...entry, skipFunctions: module.skipFunctions } : entry;
|
|
119
120
|
});
|
|
121
|
+
return synthesizeProseConstants(modules);
|
|
120
122
|
}
|
|
121
123
|
|
|
122
124
|
export interface ModuleManifestEntry {
|
|
@@ -168,7 +170,7 @@ export async function resolveTargetModules(
|
|
|
168
170
|
...(opts.fetchChannelInfo ? { fetchChannelInfo: opts.fetchChannelInfo } : {}),
|
|
169
171
|
});
|
|
170
172
|
const syncManifest = opts.syncManifest ?? SYNC_MANIFEST;
|
|
171
|
-
|
|
173
|
+
const modules = target.modules.map((module) => {
|
|
172
174
|
const sync = syncManifest.find((s) => s.namespace === module.namespace);
|
|
173
175
|
if (!sync) {
|
|
174
176
|
throw new Error(
|
|
@@ -184,6 +186,7 @@ export async function resolveTargetModules(
|
|
|
184
186
|
};
|
|
185
187
|
return module.skipFunctions ? { ...entry, skipFunctions: module.skipFunctions } : entry;
|
|
186
188
|
});
|
|
189
|
+
return synthesizeProseConstants(modules);
|
|
187
190
|
}
|
|
188
191
|
|
|
189
192
|
const API_TARGETS = loadApiTargets();
|
|
@@ -556,6 +559,7 @@ const UNIVERSAL_EXTRA_IMPORTS: readonly UniversalExtraImport[] = [
|
|
|
556
559
|
{ specifier: "../../src/window-event-guard" },
|
|
557
560
|
{ specifier: "../../src/scene-addresses" },
|
|
558
561
|
{ specifier: "../../src/go-overloads" },
|
|
562
|
+
{ specifier: "../../src/component-properties" },
|
|
559
563
|
{ specifier: "../../src/render-overloads", restrictedTo: "render" },
|
|
560
564
|
{ specifier: "../../src/vmath-overloads" },
|
|
561
565
|
];
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** @noSelfInFile */
|
|
2
|
+
|
|
3
|
+
import type { Hash } from "./core-types";
|
|
4
|
+
|
|
5
|
+
// Component property keys upstream examples read through `go.get` while no
|
|
6
|
+
// ref-doc catalog declares them. Only evidenced keys belong here.
|
|
7
|
+
declare global {
|
|
8
|
+
namespace sprite {
|
|
9
|
+
interface properties {
|
|
10
|
+
/**
|
|
11
|
+
* The texture bound to the sprite's first sampler. Not in the sprite
|
|
12
|
+
* ref-doc; `resource.set`'s example reads it with
|
|
13
|
+
* `go.get("#sprite", "texture0")`.
|
|
14
|
+
*/
|
|
15
|
+
texture0: Hash;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Mesh component properties. Upstream ships no mesh API module, so this
|
|
21
|
+
* catalog holds only the keys upstream examples read.
|
|
22
|
+
*/
|
|
23
|
+
namespace mesh {
|
|
24
|
+
interface properties {
|
|
25
|
+
/**
|
|
26
|
+
* The buffer resource holding the mesh's vertex data.
|
|
27
|
+
* `resource.get_buffer` and `resource.set_buffer` read it with
|
|
28
|
+
* `go.get("#mesh", "vertices")`.
|
|
29
|
+
*/
|
|
30
|
+
vertices: Hash;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
package/src/core-types.ts
CHANGED
|
@@ -214,9 +214,11 @@ export const DEFOLD_TYPE_MAP: Readonly<Record<string, string>> = {
|
|
|
214
214
|
texture: 'Opaque<"texture">',
|
|
215
215
|
render_target: 'Opaque<"render_target">',
|
|
216
216
|
constant: 'Opaque<"constant">',
|
|
217
|
-
constant_buffer:
|
|
217
|
+
constant_buffer:
|
|
218
|
+
'Opaque<"constant_buffer"> & { [name: string]: Vector4 | Matrix4 | Vector4[] | Matrix4[] }',
|
|
218
219
|
buffer: 'Opaque<"buffer">',
|
|
219
|
-
bufferstream:
|
|
220
|
+
bufferstream:
|
|
221
|
+
'Opaque<"bufferstream"> & { [index: number]: number; length: LuaLengthMethod<number> }',
|
|
220
222
|
userdata: 'Opaque<"userdata">',
|
|
221
223
|
// Vocabulary, not a shipped brand: no current ref-doc fixture types a slot
|
|
222
224
|
// `resource`, so nothing hand-written may name `Opaque<"resource">`. Kept so a
|
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,19 +1,42 @@
|
|
|
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
|
|
|
19
42
|
/**
|