@defold-typescript/types 0.40.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 +3963 -772
- package/api-migrations.json +27 -0
- package/api-signatures.json +18069 -10240
- package/api-targets.json +448 -11
- package/examples/translations.json +560 -89
- 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 +183 -20
- package/generated/b2d_world.d.ts +57 -63
- package/generated/buffer.d.ts +16 -15
- 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 +29 -32
- package/generated/collectionfactory.d.ts +15 -18
- 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 +235 -182
- package/generated/graphics.d.ts +335 -97
- package/generated/gui.d.ts +240 -471
- package/generated/html5.d.ts +2 -2
- package/generated/http.d.ts +28 -35
- package/generated/image.d.ts +105 -72
- package/generated/json.d.ts +34 -16
- package/generated/kinds/gui-script.d.ts +7 -0
- package/generated/kinds/render-script.d.ts +7 -0
- package/generated/kinds/script.d.ts +7 -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 +40 -39
- package/generated/particlefx.d.ts +19 -28
- package/generated/physics.d.ts +365 -133
- package/generated/profiler.d.ts +13 -23
- package/generated/render.d.ts +237 -297
- package/generated/resource.d.ts +664 -583
- package/generated/socket.d.ts +120 -133
- package/generated/sound.d.ts +62 -31
- package/generated/sprite.d.ts +31 -17
- package/generated/sys.d.ts +234 -190
- 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 +1 -3
- package/generated/versions/defold-1.12.4/camera.d.ts +21 -21
- package/generated/versions/defold-1.12.4/collectionfactory.d.ts +9 -9
- 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 +6 -12
- package/generated/versions/defold-1.12.4/gui.d.ts +77 -175
- package/generated/versions/defold-1.12.4/html5.d.ts +1 -1
- package/generated/versions/defold-1.12.4/http.d.ts +0 -13
- package/generated/versions/defold-1.12.4/image.d.ts +16 -33
- package/generated/versions/defold-1.12.4/index.d.ts +1 -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 +2 -10
- package/generated/versions/defold-1.12.4/particlefx.d.ts +2 -5
- package/generated/versions/defold-1.12.4/physics.d.ts +69 -67
- package/generated/versions/defold-1.12.4/profiler.d.ts +2 -5
- package/generated/versions/defold-1.12.4/render.d.ts +99 -128
- package/generated/versions/defold-1.12.4/resource.d.ts +120 -148
- package/generated/versions/defold-1.12.4/socket.d.ts +34 -60
- package/generated/versions/defold-1.12.4/sound.d.ts +8 -8
- package/generated/versions/defold-1.12.4/sprite.d.ts +15 -5
- package/generated/versions/defold-1.12.4/sys.d.ts +37 -71
- 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 +0 -21
- 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 +169 -8
- package/generated/versions/defold-1.13.0/b2d_world.d.ts +16 -10
- package/generated/versions/defold-1.13.0/buffer.d.ts +1 -3
- package/generated/versions/defold-1.13.0/camera.d.ts +25 -25
- package/generated/versions/defold-1.13.0/collectionfactory.d.ts +9 -9
- package/generated/versions/defold-1.13.0/collectionproxy.d.ts +2 -2
- package/generated/versions/defold-1.13.0/compute.d.ts +0 -69
- 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 +6 -12
- package/generated/versions/defold-1.13.0/graphics.d.ts +73 -37
- package/generated/versions/defold-1.13.0/gui.d.ts +77 -175
- package/generated/versions/defold-1.13.0/html5.d.ts +1 -1
- package/generated/versions/defold-1.13.0/http.d.ts +0 -13
- package/generated/versions/defold-1.13.0/image.d.ts +16 -33
- package/generated/versions/defold-1.13.0/index.d.ts +1 -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 +68 -106
- package/generated/versions/defold-1.13.0/model.d.ts +2 -10
- package/generated/versions/defold-1.13.0/particlefx.d.ts +2 -5
- package/generated/versions/defold-1.13.0/physics.d.ts +69 -67
- package/generated/versions/defold-1.13.0/profiler.d.ts +2 -5
- package/generated/versions/defold-1.13.0/render.d.ts +99 -128
- package/generated/versions/defold-1.13.0/resource.d.ts +126 -150
- package/generated/versions/defold-1.13.0/socket.d.ts +34 -60
- package/generated/versions/defold-1.13.0/sound.d.ts +8 -8
- package/generated/versions/defold-1.13.0/sprite.d.ts +15 -5
- package/generated/versions/defold-1.13.0/sys.d.ts +37 -71
- 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 +0 -21
- 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 +1 -21
- package/generated/window.d.ts +71 -71
- package/identity-vocabulary.json +561 -0
- package/index.d.ts +7 -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 +12 -2
- package/scripts/import-defold-release.ts +85 -24
- package/scripts/prose-constants.ts +77 -16
- package/scripts/regen.ts +391 -77
- 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/core-types.ts +26 -3
- package/src/correction-pins.ts +49 -0
- package/src/doc-comment.ts +104 -11
- package/src/doc-corrections.ts +108 -0
- package/src/editor-vm-globals.d.ts +5 -2
- package/src/emit-dts.ts +2064 -281
- package/src/emit-messages.ts +52 -0
- 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 +25 -6
- package/src/index-base-table.ts +145 -0
- package/src/index-slot-classifications.ts +588 -0
- package/src/index.ts +38 -5
- 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 +8 -11
- package/src/render-overloads.d.ts +0 -15
- package/src/return-correction-provenance.ts +58 -16
- 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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { dirname, resolve } from "node:path";
|
|
3
|
-
import {
|
|
3
|
+
import { unknownDefoldTypeLeaves } from "../src/emit-dts";
|
|
4
4
|
import { refDocCacheDir, resolveRefDoc } from "./doc-source";
|
|
5
5
|
import {
|
|
6
6
|
apiElementIdentity,
|
|
@@ -13,7 +13,8 @@ import {
|
|
|
13
13
|
} from "./sync-api-docs";
|
|
14
14
|
|
|
15
15
|
const EXACT_VERSION = /^\d+\.\d+\.\d+$/;
|
|
16
|
-
const LUA_NAMESPACE = /^[a-z][a-z0-
|
|
16
|
+
const LUA_NAMESPACE = /^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$/;
|
|
17
|
+
const DECLARED_NAME_KINDS = new Set(["CONSTANT", "ENUM", "STRUCT", "TYPEDEF", "CLASS"]);
|
|
17
18
|
const PACKAGE_ROOT = resolve(import.meta.dir, "..");
|
|
18
19
|
|
|
19
20
|
// Editor-scripting namespaces are mapped, but not by `api-targets.json`: they
|
|
@@ -24,19 +25,48 @@ const PACKAGE_ROOT = resolve(import.meta.dir, "..");
|
|
|
24
25
|
// excusing their bare names would suppress a real runtime namespace instead.
|
|
25
26
|
const EDITOR_MAPPED_NAMESPACES = new Set(EDITOR_MANIFEST.map((source) => source.namespace));
|
|
26
27
|
|
|
27
|
-
//
|
|
28
|
-
// Held here rather than derived from the root release model because the
|
|
28
|
+
// Namespaces promoted into the generated surface for the first time at a given
|
|
29
|
+
// release. Held here rather than derived from the root release model because the
|
|
29
30
|
// per-package `rootDir` boundary forbids importing outside this package tree;
|
|
30
31
|
// `scripts/release-model.test.ts` correspondence-guards this against the model.
|
|
31
|
-
export const
|
|
32
|
-
"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
32
|
+
export const PROMOTED_NAMESPACES_BY_VERSION: Readonly<Record<string, readonly string[]>> = {
|
|
33
|
+
"1.13.0": [
|
|
34
|
+
"b2d.chain",
|
|
35
|
+
"b2d.fixture",
|
|
36
|
+
"b2d.joint",
|
|
37
|
+
"b2d.shape",
|
|
38
|
+
"b2d.world",
|
|
39
|
+
"compute",
|
|
40
|
+
"material",
|
|
41
|
+
],
|
|
42
|
+
"1.13.2": [
|
|
43
|
+
"bullet3d",
|
|
44
|
+
"bullet3d.collision_object",
|
|
45
|
+
"bullet3d.constraint",
|
|
46
|
+
"bullet3d.rigid_body",
|
|
47
|
+
"bullet3d.shape",
|
|
48
|
+
"bullet3d.world",
|
|
49
|
+
],
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
function compareVersions(a: string, b: string): number {
|
|
53
|
+
const pa = a.split(".").map(Number);
|
|
54
|
+
const pb = b.split(".").map(Number);
|
|
55
|
+
for (let index = 0; index < Math.max(pa.length, pb.length); index += 1) {
|
|
56
|
+
const delta = (pa[index] ?? 0) - (pb[index] ?? 0);
|
|
57
|
+
if (delta !== 0) return delta;
|
|
58
|
+
}
|
|
59
|
+
return 0;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// A baseline that predates a promotion has no fixture for the promoted namespace,
|
|
63
|
+
// so the import of the promoting release, and of every later one, seeds it empty.
|
|
64
|
+
export function promotedNamespacesThrough(version: string): string[] {
|
|
65
|
+
return Object.keys(PROMOTED_NAMESPACES_BY_VERSION)
|
|
66
|
+
.filter((release) => compareVersions(release, version) <= 0)
|
|
67
|
+
.sort(compareVersions)
|
|
68
|
+
.flatMap((release) => PROMOTED_NAMESPACES_BY_VERSION[release] ?? []);
|
|
69
|
+
}
|
|
40
70
|
|
|
41
71
|
interface RawElement extends Record<string, unknown> {
|
|
42
72
|
type?: string;
|
|
@@ -159,12 +189,26 @@ function elementsOf(doc: unknown): RawElement[] {
|
|
|
159
189
|
return doc.elements.filter(isRecord) as RawElement[];
|
|
160
190
|
}
|
|
161
191
|
|
|
192
|
+
// An ENUM's members are the constants 1.13.1 and earlier documented as
|
|
193
|
+
// top-level CONSTANT elements, so each counts as a symbol beside the enum itself.
|
|
162
194
|
function symbolNames(doc: unknown): string[] {
|
|
163
195
|
return [
|
|
164
|
-
...new Set(
|
|
196
|
+
...new Set(
|
|
197
|
+
elementsOf(doc).flatMap((element) => [
|
|
198
|
+
...(element.name ? [element.name] : []),
|
|
199
|
+
...enumMemberNames(element),
|
|
200
|
+
]),
|
|
201
|
+
),
|
|
165
202
|
].sort();
|
|
166
203
|
}
|
|
167
204
|
|
|
205
|
+
function enumMemberNames(element: RawElement): string[] {
|
|
206
|
+
if (element.type !== "ENUM" || !Array.isArray(element.members)) return [];
|
|
207
|
+
return element.members.flatMap((member) =>
|
|
208
|
+
isRecord(member) && typeof member.name === "string" ? [member.name] : [],
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
|
|
168
212
|
function expectedSourceEntries(module: ReleaseBaselineModule): string[] {
|
|
169
213
|
if (module.sourceEntries) return [...module.sourceEntries].sort();
|
|
170
214
|
const mapped = SYNC_MANIFEST.find((entry) => entry.namespace === module.namespace);
|
|
@@ -180,22 +224,35 @@ function typeTokens(value: unknown, out: Set<string>): void {
|
|
|
180
224
|
if (!isRecord(value)) return;
|
|
181
225
|
if (Array.isArray(value.types)) {
|
|
182
226
|
for (const token of value.types) {
|
|
183
|
-
if (typeof token === "string"
|
|
227
|
+
if (typeof token === "string") addUnknownLeaves(token, out);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// A STRUCT member carries one `type` string rather than a `types[]` list; an
|
|
231
|
+
// ENUM member's is empty.
|
|
232
|
+
if (Array.isArray(value.members)) {
|
|
233
|
+
for (const member of value.members) {
|
|
234
|
+
if (isRecord(member) && typeof member.type === "string" && member.type !== "") {
|
|
235
|
+
addUnknownLeaves(member.type, out);
|
|
236
|
+
}
|
|
184
237
|
}
|
|
185
238
|
}
|
|
186
239
|
for (const nested of Object.values(value)) typeTokens(nested, out);
|
|
187
240
|
}
|
|
188
241
|
|
|
242
|
+
function addUnknownLeaves(token: string, out: Set<string>): void {
|
|
243
|
+
for (const leaf of unknownDefoldTypeLeaves(token)) out.add(leaf);
|
|
244
|
+
}
|
|
245
|
+
|
|
189
246
|
function unknownTypeBlockers(
|
|
190
247
|
namespace: string,
|
|
191
248
|
doc: unknown,
|
|
192
|
-
|
|
249
|
+
knownNames: ReadonlySet<string>,
|
|
193
250
|
): UnknownTypeBlocker[] {
|
|
194
251
|
const out: UnknownTypeBlocker[] = [];
|
|
195
252
|
for (const element of elementsOf(doc)) {
|
|
196
253
|
const tokens = new Set<string>();
|
|
197
254
|
typeTokens(element, tokens);
|
|
198
|
-
for (const token of
|
|
255
|
+
for (const token of tokens) if (knownNames.has(token)) tokens.delete(token);
|
|
199
256
|
if (tokens.size === 0) continue;
|
|
200
257
|
out.push({ namespace, symbol: element.name ?? "<unnamed>", tokens: [...tokens].sort() });
|
|
201
258
|
}
|
|
@@ -264,13 +321,17 @@ export function buildReleaseImportPlan(input: {
|
|
|
264
321
|
};
|
|
265
322
|
});
|
|
266
323
|
|
|
267
|
-
|
|
324
|
+
// Every constant and declared type name in any of the release's Lua docs, so a
|
|
325
|
+
// token naming one declared in another namespace, or only in a doc no namespace
|
|
326
|
+
// maps (`builtins`), is not an unknown type.
|
|
327
|
+
const knownNames = new Set<string>();
|
|
268
328
|
for (const group of grouped.values()) {
|
|
269
329
|
for (const { doc } of group) {
|
|
270
330
|
for (const element of elementsOf(doc)) {
|
|
271
|
-
if (element.
|
|
272
|
-
|
|
331
|
+
if (typeof element.name === "string" && DECLARED_NAME_KINDS.has(element.type ?? "")) {
|
|
332
|
+
knownNames.add(element.name);
|
|
273
333
|
}
|
|
334
|
+
for (const member of enumMemberNames(element)) knownNames.add(member);
|
|
274
335
|
}
|
|
275
336
|
}
|
|
276
337
|
}
|
|
@@ -325,7 +386,7 @@ export function buildReleaseImportPlan(input: {
|
|
|
325
386
|
if (added.length > 0 || removed.length > 0)
|
|
326
387
|
symbols.push({ namespace: module.namespace, added, removed });
|
|
327
388
|
if (generatedNamespaces.has(module.namespace)) {
|
|
328
|
-
unknownTypes.push(...unknownTypeBlockers(module.namespace, doc,
|
|
389
|
+
unknownTypes.push(...unknownTypeBlockers(module.namespace, doc, knownNames));
|
|
329
390
|
}
|
|
330
391
|
}
|
|
331
392
|
|
|
@@ -442,7 +503,7 @@ export function parseReleaseImportArgs(args: readonly string[]): ReleaseImportAr
|
|
|
442
503
|
return { version, check, json, ...(zipPath ? { zipPath } : {}) };
|
|
443
504
|
}
|
|
444
505
|
|
|
445
|
-
function loadBaseline(packageRoot = PACKAGE_ROOT): ReleaseBaseline {
|
|
506
|
+
function loadBaseline(version: string, packageRoot = PACKAGE_ROOT): ReleaseBaseline {
|
|
446
507
|
const registry = JSON.parse(readFileSync(resolve(packageRoot, "api-targets.json"), "utf8")) as {
|
|
447
508
|
targets: Array<{
|
|
448
509
|
id: string;
|
|
@@ -461,7 +522,7 @@ function loadBaseline(packageRoot = PACKAGE_ROOT): ReleaseBaseline {
|
|
|
461
522
|
const modules = target.modules
|
|
462
523
|
.filter((module) => SYNC_MANIFEST.some((source) => source.namespace === module.namespace))
|
|
463
524
|
.map(load);
|
|
464
|
-
for (const namespace of
|
|
525
|
+
for (const namespace of promotedNamespacesThrough(version)) {
|
|
465
526
|
if (modules.some((module) => module.namespace === namespace)) continue;
|
|
466
527
|
modules.push({
|
|
467
528
|
namespace,
|
|
@@ -485,7 +546,7 @@ if (import.meta.main) {
|
|
|
485
546
|
const plan = buildReleaseImportPlan({
|
|
486
547
|
version: args.version,
|
|
487
548
|
zip: resolved.zip,
|
|
488
|
-
baseline: loadBaseline(),
|
|
549
|
+
baseline: loadBaseline(args.version),
|
|
489
550
|
});
|
|
490
551
|
if (args.json) process.stdout.write(releaseImportReportJson(plan));
|
|
491
552
|
else {
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { ModuleManifestEntry } from "./regen";
|
|
2
2
|
|
|
3
|
-
// A constant family the engine registers and one function's
|
|
4
|
-
//
|
|
5
|
-
//
|
|
3
|
+
// A constant family the engine registers and one function's prose names, but no
|
|
4
|
+
// ref-doc element declares. Each release's own prose is the evidence, so a
|
|
5
|
+
// surface declares exactly the members its release documents; the engine-binding
|
|
6
|
+
// diff keeps every member registered. The prose is a parameter's `<li>` list, or,
|
|
7
|
+
// with no `parameter`, a `<code>` mention in the function's description.
|
|
6
8
|
interface ProseConstantFamily {
|
|
7
9
|
readonly namespace: string;
|
|
8
10
|
readonly prefix: string;
|
|
@@ -10,27 +12,55 @@ interface ProseConstantFamily {
|
|
|
10
12
|
readonly evidence: {
|
|
11
13
|
readonly namespace: string;
|
|
12
14
|
readonly function: string;
|
|
13
|
-
readonly parameter
|
|
15
|
+
readonly parameter?: string;
|
|
14
16
|
};
|
|
15
17
|
}
|
|
16
18
|
|
|
19
|
+
const VERTEX_ATTRIBUTES = {
|
|
20
|
+
namespace: "material",
|
|
21
|
+
function: "material.set_vertex_attributes",
|
|
22
|
+
parameter: "attributes",
|
|
23
|
+
} as const;
|
|
24
|
+
|
|
17
25
|
const PROSE_CONSTANT_FAMILIES: readonly ProseConstantFamily[] = [
|
|
18
26
|
{
|
|
19
27
|
namespace: "graphics",
|
|
20
28
|
prefix: "SEMANTIC_TYPE_",
|
|
21
29
|
describes: "Vertex attribute semantic type",
|
|
22
|
-
evidence:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
30
|
+
evidence: VERTEX_ATTRIBUTES,
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
namespace: "graphics",
|
|
34
|
+
prefix: "DATA_TYPE_",
|
|
35
|
+
describes: "Vertex attribute data type",
|
|
36
|
+
evidence: VERTEX_ATTRIBUTES,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
namespace: "graphics",
|
|
40
|
+
prefix: "COORDINATE_SPACE_",
|
|
41
|
+
describes: "Vertex attribute coordinate space",
|
|
42
|
+
evidence: VERTEX_ATTRIBUTES,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
namespace: "material",
|
|
46
|
+
prefix: "CONSTANT_TYPE_",
|
|
47
|
+
describes: "Material constant type",
|
|
48
|
+
evidence: { namespace: "material", function: "material.set_constants", parameter: "constants" },
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
namespace: "render",
|
|
52
|
+
prefix: "TEXTURE_BIT",
|
|
53
|
+
describes: "Render target buffer flag that samples a depth or stencil buffer as a texture",
|
|
54
|
+
evidence: { namespace: "render", function: "render.render_target" },
|
|
27
55
|
},
|
|
28
56
|
];
|
|
29
57
|
|
|
30
58
|
interface DocElement {
|
|
31
59
|
readonly type: string;
|
|
32
60
|
readonly name: string;
|
|
61
|
+
readonly description?: string;
|
|
33
62
|
readonly parameters?: readonly { readonly name: string; readonly doc?: string }[];
|
|
63
|
+
readonly members?: readonly { readonly name: string }[];
|
|
34
64
|
}
|
|
35
65
|
|
|
36
66
|
interface ApiDoc {
|
|
@@ -41,15 +71,36 @@ function escapeRegExp(text: string): string {
|
|
|
41
71
|
return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
42
72
|
}
|
|
43
73
|
|
|
44
|
-
function
|
|
74
|
+
function evidenceFunction(
|
|
75
|
+
family: ProseConstantFamily,
|
|
76
|
+
modules: readonly ModuleManifestEntry[],
|
|
77
|
+
): DocElement | undefined {
|
|
45
78
|
const source = modules.find((m) => m.namespace === family.evidence.namespace);
|
|
46
|
-
|
|
47
|
-
const fn = (source.doc as ApiDoc).elements.find(
|
|
79
|
+
return (source?.doc as ApiDoc | undefined)?.elements.find(
|
|
48
80
|
(e) => e.type === "FUNCTION" && e.name === family.evidence.function,
|
|
49
81
|
);
|
|
50
|
-
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// A release may declare the family itself, as `CONSTANT`s or `ENUM` members.
|
|
85
|
+
function declaresFamily(family: ProseConstantFamily, modules: readonly ModuleManifestEntry[]) {
|
|
86
|
+
const target = modules.find((m) => m.namespace === family.namespace);
|
|
87
|
+
const prefix = `${family.namespace}.${family.prefix}`;
|
|
88
|
+
return ((target?.doc as ApiDoc | undefined)?.elements ?? []).some(
|
|
89
|
+
(e) =>
|
|
90
|
+
e.name.startsWith(prefix) ||
|
|
91
|
+
(e.members ?? []).some((member) => member.name.startsWith(prefix)),
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function evidencedNames(family: ProseConstantFamily, fn: DocElement | undefined) {
|
|
96
|
+
const { parameter } = family.evidence;
|
|
97
|
+
const prose =
|
|
98
|
+
parameter === undefined
|
|
99
|
+
? (fn?.description ?? "")
|
|
100
|
+
: (fn?.parameters?.find((p) => p.name === parameter)?.doc ?? "");
|
|
101
|
+
const name = escapeRegExp(`${family.namespace}.${family.prefix}`);
|
|
51
102
|
const item = new RegExp(
|
|
52
|
-
`<li><code>(${
|
|
103
|
+
parameter === undefined ? `<code>(${name}\\w*)</code>` : `<li><code>(${name}\\w+)</code></li>`,
|
|
53
104
|
"g",
|
|
54
105
|
);
|
|
55
106
|
return [...new Set(Array.from(prose.matchAll(item), (m) => m[1] as string))];
|
|
@@ -78,8 +129,18 @@ export function synthesizeProseConstants(
|
|
|
78
129
|
): ModuleManifestEntry[] {
|
|
79
130
|
let out = [...modules];
|
|
80
131
|
for (const family of PROSE_CONSTANT_FAMILIES) {
|
|
81
|
-
const
|
|
82
|
-
|
|
132
|
+
const fn = evidenceFunction(family, out);
|
|
133
|
+
const names = evidencedNames(family, fn);
|
|
134
|
+
if (names.length === 0) {
|
|
135
|
+
// The evidence function survives but its prose lists no member: unless the
|
|
136
|
+
// release declares the family itself, the constants would vanish unannounced.
|
|
137
|
+
if (fn !== undefined && !declaresFamily(family, out)) {
|
|
138
|
+
throw new Error(
|
|
139
|
+
`prose constant family ${family.namespace}.${family.prefix}*: ${family.evidence.function} lists no member and ${family.namespace} declares none`,
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
83
144
|
const index = out.findIndex((m) => m.namespace === family.namespace);
|
|
84
145
|
const target = out[index];
|
|
85
146
|
if (!target) continue;
|