@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.
- package/api-availability.json +4 -58
- package/api-signatures.json +1128 -1552
- package/api-targets.json +15 -5
- package/examples/translations.json +19 -71
- package/fixtures/messages_doc.json +20 -39
- package/generated/b2d_world.d.ts +10 -10
- package/generated/buffer.d.ts +9 -9
- package/generated/builtin-messages.d.ts +16 -14
- package/generated/bullet3d_collision_object.d.ts +1 -1
- package/generated/bullet3d_constraint.d.ts +109 -7
- package/generated/bullet3d_shape.d.ts +2 -2
- package/generated/collectionfactory.d.ts +1 -1
- package/generated/collectionproxy.d.ts +2 -2
- package/generated/factory.d.ts +4 -2
- package/generated/go.d.ts +114 -220
- package/generated/graphics.d.ts +5 -0
- package/generated/gui.d.ts +148 -371
- package/generated/http.d.ts +4 -2
- package/generated/image.d.ts +56 -4
- package/generated/kinds/gui-script.d.ts +3 -0
- package/generated/kinds/render-script.d.ts +15 -15
- package/generated/kinds/script.d.ts +1 -0
- package/generated/liveupdate.d.ts +5 -1
- package/generated/material.d.ts +3 -3
- package/generated/model.d.ts +4 -5
- package/generated/particlefx.d.ts +20 -1
- package/generated/physics.d.ts +48 -4
- package/generated/render-script-modules/b2d.d.ts +711 -0
- package/generated/render-script-modules/bullet3d.d.ts +73 -0
- package/generated/render-script-modules/collectionfactory.d.ts +25 -0
- package/generated/render-script-modules/collectionproxy.d.ts +39 -0
- package/generated/render-script-modules/factory.d.ts +25 -0
- package/generated/render-script-modules/go.d.ts +436 -0
- package/generated/render-script-modules/label.d.ts +105 -0
- package/generated/render-script-modules/model.d.ts +89 -0
- package/generated/render-script-modules/particlefx.d.ts +59 -0
- package/generated/render-script-modules/physics.d.ts +333 -0
- package/generated/render-script-modules/resource.d.ts +1233 -0
- package/generated/render-script-modules/sound.d.ts +227 -0
- package/generated/render-script-modules/sprite.d.ts +68 -0
- package/generated/render-script-modules/tilemap.d.ts +43 -0
- package/generated/render.d.ts +175 -21
- package/generated/resource.d.ts +31 -10
- package/generated/sprite.d.ts +49 -1
- package/generated/sys.d.ts +78 -10
- package/generated/tilemap.d.ts +4 -4
- package/generated/versions/defold-1.12.4/buffer.d.ts +8 -8
- package/generated/versions/defold-1.12.4/collectionfactory.d.ts +1 -1
- package/generated/versions/defold-1.12.4/collectionproxy.d.ts +1 -1
- package/generated/versions/defold-1.12.4/factory.d.ts +4 -2
- package/generated/versions/defold-1.12.4/go.d.ts +115 -343
- package/generated/versions/defold-1.12.4/graphics.d.ts +1 -0
- package/generated/versions/defold-1.12.4/gui.d.ts +151 -513
- package/generated/versions/defold-1.12.4/http.d.ts +4 -2
- package/generated/versions/defold-1.12.4/image.d.ts +83 -3
- package/generated/versions/defold-1.12.4/index.d.ts +2 -0
- package/generated/versions/defold-1.12.4/liveupdate.d.ts +4 -0
- package/generated/versions/defold-1.12.4/model.d.ts +4 -5
- package/generated/versions/defold-1.12.4/particlefx.d.ts +22 -1
- package/generated/versions/defold-1.12.4/physics.d.ts +47 -3
- package/generated/versions/defold-1.12.4/render.d.ts +119 -15
- package/generated/versions/defold-1.12.4/resource.d.ts +43 -10
- package/generated/versions/defold-1.12.4/sprite.d.ts +58 -1
- package/generated/versions/defold-1.12.4/sys.d.ts +101 -6
- package/generated/versions/defold-1.12.4/tilemap.d.ts +4 -4
- package/generated/versions/defold-1.12.4/vmath.d.ts +0 -24
- package/generated/versions/defold-1.13.0/buffer.d.ts +8 -8
- package/generated/versions/defold-1.13.0/collectionfactory.d.ts +1 -1
- package/generated/versions/defold-1.13.0/collectionproxy.d.ts +1 -1
- package/generated/versions/defold-1.13.0/factory.d.ts +4 -2
- package/generated/versions/defold-1.13.0/go.d.ts +115 -370
- package/generated/versions/defold-1.13.0/graphics.d.ts +1 -0
- package/generated/versions/defold-1.13.0/gui.d.ts +151 -513
- package/generated/versions/defold-1.13.0/http.d.ts +4 -2
- package/generated/versions/defold-1.13.0/image.d.ts +83 -3
- package/generated/versions/defold-1.13.0/index.d.ts +2 -0
- package/generated/versions/defold-1.13.0/liveupdate.d.ts +4 -0
- package/generated/versions/defold-1.13.0/material.d.ts +3 -1
- package/generated/versions/defold-1.13.0/model.d.ts +4 -5
- package/generated/versions/defold-1.13.0/particlefx.d.ts +22 -1
- package/generated/versions/defold-1.13.0/physics.d.ts +47 -3
- package/generated/versions/defold-1.13.0/render.d.ts +182 -16
- package/generated/versions/defold-1.13.0/resource.d.ts +43 -10
- package/generated/versions/defold-1.13.0/sprite.d.ts +58 -1
- package/generated/versions/defold-1.13.0/sys.d.ts +101 -6
- package/generated/versions/defold-1.13.0/tilemap.d.ts +4 -4
- package/generated/versions/defold-1.13.0/vmath.d.ts +0 -24
- package/generated/versions/defold-1.13.1/buffer.d.ts +8 -8
- package/generated/versions/defold-1.13.1/collectionfactory.d.ts +1 -1
- package/generated/versions/defold-1.13.1/collectionproxy.d.ts +1 -1
- package/generated/versions/defold-1.13.1/factory.d.ts +4 -2
- package/generated/versions/defold-1.13.1/go.d.ts +115 -370
- package/generated/versions/defold-1.13.1/graphics.d.ts +1 -0
- package/generated/versions/defold-1.13.1/gui.d.ts +151 -529
- package/generated/versions/defold-1.13.1/http.d.ts +4 -2
- package/generated/versions/defold-1.13.1/image.d.ts +83 -3
- package/generated/versions/defold-1.13.1/index.d.ts +3 -0
- package/generated/versions/defold-1.13.1/liveupdate.d.ts +4 -0
- package/generated/versions/defold-1.13.1/material.d.ts +3 -1
- package/generated/versions/defold-1.13.1/model.d.ts +4 -5
- package/generated/versions/defold-1.13.1/particlefx.d.ts +22 -1
- package/generated/versions/defold-1.13.1/physics.d.ts +47 -3
- package/generated/versions/defold-1.13.1/render.d.ts +182 -16
- package/generated/versions/defold-1.13.1/resource.d.ts +43 -10
- package/generated/versions/defold-1.13.1/sprite.d.ts +58 -1
- package/generated/versions/defold-1.13.1/sys.d.ts +101 -6
- package/generated/versions/defold-1.13.1/tilemap.d.ts +4 -4
- package/generated/versions/defold-1.13.1/vmath.d.ts +0 -24
- package/generated/versions/defold-1.13.2/b2d_world.d.ts +10 -10
- package/generated/versions/defold-1.13.2/buffer.d.ts +9 -9
- package/generated/versions/defold-1.13.2/bullet3d_collision_object.d.ts +1 -1
- package/generated/versions/defold-1.13.2/bullet3d_constraint.d.ts +109 -7
- package/generated/versions/defold-1.13.2/bullet3d_shape.d.ts +2 -2
- package/generated/versions/defold-1.13.2/collectionfactory.d.ts +1 -1
- package/generated/versions/defold-1.13.2/collectionproxy.d.ts +2 -2
- package/generated/versions/defold-1.13.2/factory.d.ts +4 -2
- package/generated/versions/defold-1.13.2/go.d.ts +114 -220
- package/generated/versions/defold-1.13.2/graphics.d.ts +1 -0
- package/generated/versions/defold-1.13.2/gui.d.ts +148 -371
- package/generated/versions/defold-1.13.2/http.d.ts +4 -2
- package/generated/versions/defold-1.13.2/image.d.ts +56 -4
- package/generated/versions/defold-1.13.2/index.d.ts +3 -0
- package/generated/versions/defold-1.13.2/liveupdate.d.ts +5 -1
- package/generated/versions/defold-1.13.2/material.d.ts +3 -3
- package/generated/versions/defold-1.13.2/model.d.ts +4 -5
- package/generated/versions/defold-1.13.2/particlefx.d.ts +20 -1
- package/generated/versions/defold-1.13.2/physics.d.ts +48 -4
- package/generated/versions/defold-1.13.2/render.d.ts +164 -20
- package/generated/versions/defold-1.13.2/resource.d.ts +31 -10
- package/generated/versions/defold-1.13.2/sprite.d.ts +49 -1
- package/generated/versions/defold-1.13.2/sys.d.ts +78 -10
- package/generated/versions/defold-1.13.2/tilemap.d.ts +4 -4
- package/generated/versions/defold-1.13.2/vmath.d.ts +0 -24
- package/generated/versions/defold-1.13.2/window.d.ts +1 -1
- package/generated/vmath.d.ts +0 -24
- package/generated/window.d.ts +1 -1
- package/identity-vocabulary.json +98 -7
- package/index.d.ts +3 -0
- package/package.json +3 -1
- package/scripts/generate-api-availability.ts +6 -22
- package/scripts/generate-api-signatures.ts +87 -21
- package/scripts/materialize-version.ts +53 -6
- package/scripts/regen.ts +256 -44
- package/scripts/signature-store-fs.ts +1 -0
- package/scripts/target-version.ts +26 -0
- package/src/api-doc.ts +26 -0
- package/src/component-properties.d.ts +226 -6
- package/src/core-types.ts +82 -20
- package/src/doc-corrections.ts +53 -5
- package/src/emit-dts.ts +1300 -269
- package/src/emit-messages.ts +289 -0
- package/src/engine-globals.d.ts +8 -2
- package/src/go-overloads.d.ts +80 -15
- package/src/gui-overloads.d.ts +489 -0
- package/src/gui-texture-removal.d.ts +41 -0
- package/src/index.ts +2 -0
- package/src/lifecycle.ts +46 -37
- package/src/luals-type-expr.ts +6 -1
- package/src/msg-overloads.d.ts +25 -13
- package/src/physics-event-guard.d.ts +39 -0
- package/src/render-overloads.d.ts +2 -2
- package/src/return-correction-provenance.ts +36 -6
- package/src/signature-store.ts +50 -0
- package/src/timers.d.ts +2 -1
- package/src/vmath-overloads.d.ts +26 -0
- package/src/window-event-guard.d.ts +5 -3
|
@@ -28,37 +28,17 @@ import {
|
|
|
28
28
|
} from "../src/emit-dts";
|
|
29
29
|
import { splitTopLevel } from "../src/luals-type-expr";
|
|
30
30
|
import { type ApiTarget, loadApiTargets, loadTargetModules } from "./regen";
|
|
31
|
+
import { compareVersions, versionOf } from "./target-version";
|
|
31
32
|
|
|
32
33
|
const PACKAGE_ROOT = resolve(import.meta.dir, "..");
|
|
33
34
|
const MIGRATIONS_PATH = resolve(PACKAGE_ROOT, "api-migrations.json");
|
|
34
35
|
const AVAILABILITY_PATH = resolve(PACKAGE_ROOT, "api-availability.json");
|
|
35
36
|
|
|
36
|
-
const VERSION_FROM_ID = /^defold-(\d+\.\d+\.\d+)$/;
|
|
37
|
-
|
|
38
37
|
export interface AvailabilityArtifact {
|
|
39
38
|
readonly versions: readonly string[];
|
|
40
39
|
readonly records: readonly ApiAvailability[];
|
|
41
40
|
}
|
|
42
41
|
|
|
43
|
-
export function versionOf(target: ApiTarget): string {
|
|
44
|
-
const match = VERSION_FROM_ID.exec(target.id);
|
|
45
|
-
if (!match?.[1]) throw new Error(`cannot derive a release version from target id "${target.id}"`);
|
|
46
|
-
return match[1];
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
function versionTuple(version: string): number[] {
|
|
50
|
-
return version.split(".").map((part) => Number.parseInt(part, 10));
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function compareVersions(a: string, b: string): number {
|
|
54
|
-
const [ta, tb] = [versionTuple(a), versionTuple(b)];
|
|
55
|
-
for (let index = 0; index < Math.max(ta.length, tb.length); index += 1) {
|
|
56
|
-
const diff = (ta[index] ?? 0) - (tb[index] ?? 0);
|
|
57
|
-
if (diff !== 0) return diff;
|
|
58
|
-
}
|
|
59
|
-
return 0;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
42
|
// Every complete committed surface, newest first. The committed targets are the
|
|
63
43
|
// `source == null` entries of `api-targets.json` (ref-doc-sourced historical
|
|
64
44
|
// targets are resolved on demand and never a committed-derivation input). This
|
|
@@ -108,7 +88,11 @@ export function identityCorrections(): IdentityCorrections {
|
|
|
108
88
|
element,
|
|
109
89
|
{
|
|
110
90
|
pins: correctionPins(correction),
|
|
111
|
-
|
|
91
|
+
...(correction.ts !== undefined
|
|
92
|
+
? { replaces: union(correction.ts) }
|
|
93
|
+
: correction.nullable
|
|
94
|
+
? { adds: ["nil"] }
|
|
95
|
+
: { removes: ["nil"] }),
|
|
112
96
|
...(correction.slot === undefined ? {} : { slot: correction.slot }),
|
|
113
97
|
},
|
|
114
98
|
]),
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { resolve } from "node:path";
|
|
2
2
|
import { symbolIdentityKey } from "../src/api-availability";
|
|
3
|
-
import type { SlotTypes } from "../src/emit-dts";
|
|
4
|
-
import {
|
|
3
|
+
import type { SlotType, SlotTypes } from "../src/emit-dts";
|
|
4
|
+
import { signatureArmsFor } from "../src/signature-store";
|
|
5
|
+
import { selectCompleteVersionSurfaces } from "./generate-api-availability";
|
|
5
6
|
import {
|
|
6
7
|
type ApiTarget,
|
|
7
8
|
generateModuleSignatures,
|
|
8
9
|
loadApiTargets,
|
|
9
10
|
loadTargetModules,
|
|
10
11
|
type ModuleManifestEntry,
|
|
12
|
+
type TargetBindingOptions,
|
|
11
13
|
} from "./regen";
|
|
12
14
|
import { loadSignatureFile } from "./signature-store-fs";
|
|
15
|
+
import { versionOf } from "./target-version";
|
|
13
16
|
|
|
14
17
|
const PACKAGE_ROOT = resolve(import.meta.dir, "..");
|
|
15
18
|
const SIGNATURES_PATH = resolve(PACKAGE_ROOT, "api-signatures.json");
|
|
@@ -28,10 +31,13 @@ export interface SignaturesArtifact {
|
|
|
28
31
|
export interface BuildSignaturesOptions {
|
|
29
32
|
readonly packageRoot?: string;
|
|
30
33
|
readonly registryPath?: string;
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
//
|
|
34
|
-
|
|
34
|
+
// What each target's engine source decides for its emit (`targetBindingOptions`):
|
|
35
|
+
// the constants it registers, which gate the undocumented constant back-fill,
|
|
36
|
+
// and the binding-pinned return corrections whose pin holds there. Omitted,
|
|
37
|
+
// every target is emitted ungated and with no binding-pinned correction.
|
|
38
|
+
// Supplied by the in-repo callers only: the vendored bindings it reads are not
|
|
39
|
+
// published.
|
|
40
|
+
readonly emitOptionsOf?: (target: ApiTarget) => TargetBindingOptions;
|
|
35
41
|
}
|
|
36
42
|
|
|
37
43
|
// The authored replacement for a symbol the skip filter withheld, read from the
|
|
@@ -39,22 +45,59 @@ export interface BuildSignaturesOptions {
|
|
|
39
45
|
// One seam keeps all three artifacts consistent: `overloads-signature-parity`
|
|
40
46
|
// pins the store to the `src/*-overloads.d.ts` declarations, so folding the
|
|
41
47
|
// store in cannot drift from the surface a consumer actually compiles against.
|
|
42
|
-
|
|
48
|
+
// Only the arms the target's version declares are folded.
|
|
49
|
+
function authoredSignature(
|
|
50
|
+
packageRoot: string,
|
|
51
|
+
namespace: string,
|
|
52
|
+
fqn: string,
|
|
53
|
+
version: string,
|
|
54
|
+
): string | null {
|
|
43
55
|
const store = loadSignatureFile(resolve(packageRoot, "signatures", `${namespace}.json`));
|
|
44
|
-
const
|
|
56
|
+
const override = store[fqn];
|
|
57
|
+
const forms = override ? signatureArmsFor(override, version).signatures : [];
|
|
45
58
|
return forms.length > 0 ? forms.join("\n") : null;
|
|
46
59
|
}
|
|
47
60
|
|
|
61
|
+
interface UnfilteredSurface {
|
|
62
|
+
readonly entries: readonly ModuleManifestEntry[];
|
|
63
|
+
readonly of: ReadonlyMap<ModuleManifestEntry, ModuleManifestEntry>;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const unfilteredSurfaces = new WeakMap<readonly ModuleManifestEntry[], UnfilteredSurface>();
|
|
67
|
+
|
|
68
|
+
// The surface with every member's `skipFunctions` cleared, built once per
|
|
69
|
+
// surface: dropping functions moves no type declaration, so it routes exactly
|
|
70
|
+
// as the filtered one does.
|
|
71
|
+
function unfilteredSurfaceOf(surface: readonly ModuleManifestEntry[]): UnfilteredSurface {
|
|
72
|
+
let unfiltered = unfilteredSurfaces.get(surface);
|
|
73
|
+
if (unfiltered === undefined) {
|
|
74
|
+
const of = new Map(surface.map((member) => [member, { ...member, skipFunctions: [] }]));
|
|
75
|
+
unfiltered = { entries: [...of.values()], of };
|
|
76
|
+
unfilteredSurfaces.set(surface, unfiltered);
|
|
77
|
+
}
|
|
78
|
+
return unfiltered;
|
|
79
|
+
}
|
|
80
|
+
|
|
48
81
|
// The symbols `skipFunctions` removed from this module, as the difference
|
|
49
82
|
// between the unfiltered and filtered signature emits. Derived rather than
|
|
50
83
|
// re-matched so the withholding rules stay owned by `prepareGeneratedModule`.
|
|
51
|
-
|
|
84
|
+
// Both emits route in `surface`, the modules the entry is emitted beside, so a
|
|
85
|
+
// slot naming a sibling's type resolves in the unfiltered emit too.
|
|
86
|
+
export function withheldSymbols(
|
|
87
|
+
entry: ModuleManifestEntry,
|
|
88
|
+
surface: readonly ModuleManifestEntry[],
|
|
89
|
+
): { key: string; fqn: string }[] {
|
|
52
90
|
if ((entry.skipFunctions ?? []).length === 0) return [];
|
|
53
91
|
const kept = new Set(
|
|
54
|
-
generateModuleSignatures(entry).map(({ identity }) => symbolIdentityKey(identity)),
|
|
92
|
+
generateModuleSignatures(entry, { surface }).map(({ identity }) => symbolIdentityKey(identity)),
|
|
55
93
|
);
|
|
94
|
+
const unfiltered = unfilteredSurfaceOf(surface);
|
|
95
|
+
const self = unfiltered.of.get(entry);
|
|
96
|
+
if (self === undefined) {
|
|
97
|
+
throw new Error(`module "${entry.namespace}" is not a member of the surface it is emitted in`);
|
|
98
|
+
}
|
|
56
99
|
const withheld: { key: string; fqn: string }[] = [];
|
|
57
|
-
for (const { identity } of generateModuleSignatures({
|
|
100
|
+
for (const { identity } of generateModuleSignatures(self, { surface: unfiltered.entries })) {
|
|
58
101
|
const key = symbolIdentityKey(identity);
|
|
59
102
|
if (kept.has(key)) continue;
|
|
60
103
|
const fqn = key.split("\0")[2] as string;
|
|
@@ -63,6 +106,18 @@ export function withheldSymbols(entry: ModuleManifestEntry): { key: string; fqn:
|
|
|
63
106
|
return withheld;
|
|
64
107
|
}
|
|
65
108
|
|
|
109
|
+
// The slots two arms record identically. One ledger cannot describe arms whose
|
|
110
|
+
// types differ at a slot, so that slot is dropped and its row falls back to the
|
|
111
|
+
// ref-doc token.
|
|
112
|
+
function commonSlots(a: SlotTypes, b: SlotTypes): SlotTypes {
|
|
113
|
+
const common: Record<string, SlotType> = {};
|
|
114
|
+
for (const [slot, record] of Object.entries(a)) {
|
|
115
|
+
const other = b[slot];
|
|
116
|
+
if (other?.type === record.type && other.optional === record.optional) common[slot] = record;
|
|
117
|
+
}
|
|
118
|
+
return common;
|
|
119
|
+
}
|
|
120
|
+
|
|
66
121
|
function sortObjectKeys<T>(record: Record<string, T>): Record<string, T> {
|
|
67
122
|
const sorted: Record<string, T> = {};
|
|
68
123
|
for (const key of Object.keys(record).sort()) sorted[key] = record[key] as T;
|
|
@@ -79,13 +134,22 @@ export function buildSignaturesArtifact(options: BuildSignaturesOptions = {}): S
|
|
|
79
134
|
const version = versionOf(target);
|
|
80
135
|
const perSymbol: Record<string, string> = {};
|
|
81
136
|
const perSymbolSlots: Record<string, SlotTypes> = {};
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
registeredConstants ? { registeredConstants } : undefined,
|
|
87
|
-
)) {
|
|
137
|
+
const emitOptions = options.emitOptionsOf?.(target);
|
|
138
|
+
const surface = loadTargetModules(target, packageRoot);
|
|
139
|
+
for (const entry of surface) {
|
|
140
|
+
for (const signature of generateModuleSignatures(entry, emitOptions)) {
|
|
88
141
|
const key = symbolIdentityKey(signature.identity);
|
|
142
|
+
// Two ref-doc elements can normalize to one identity (the Box2D backend
|
|
143
|
+
// forms of a `b2d.world` query), so each keeps its arms in fixture order
|
|
144
|
+
// and the key keeps only the slots every arm shares.
|
|
145
|
+
const earlier = perSymbol[key];
|
|
146
|
+
if (earlier !== undefined) {
|
|
147
|
+
perSymbol[key] = `${earlier}\n${signature.tsSignature}`;
|
|
148
|
+
const common = commonSlots(perSymbolSlots[key] ?? {}, signature.slotTypes);
|
|
149
|
+
if (Object.keys(common).length > 0) perSymbolSlots[key] = common;
|
|
150
|
+
else delete perSymbolSlots[key];
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
89
153
|
perSymbol[key] = signature.tsSignature;
|
|
90
154
|
if (Object.keys(signature.slotTypes).length > 0) {
|
|
91
155
|
perSymbolSlots[key] = sortObjectKeys({ ...signature.slotTypes });
|
|
@@ -93,8 +157,8 @@ export function buildSignaturesArtifact(options: BuildSignaturesOptions = {}): S
|
|
|
93
157
|
}
|
|
94
158
|
// An authored fold replaces the declaration text wholesale, so whatever
|
|
95
159
|
// slots the generated emit had recorded no longer describe it.
|
|
96
|
-
for (const { key, fqn } of withheldSymbols(entry)) {
|
|
97
|
-
const authored = authoredSignature(packageRoot, entry.namespace, fqn);
|
|
160
|
+
for (const { key, fqn } of withheldSymbols(entry, surface)) {
|
|
161
|
+
const authored = authoredSignature(packageRoot, entry.namespace, fqn, version);
|
|
98
162
|
if (authored !== null) {
|
|
99
163
|
perSymbol[key] = authored;
|
|
100
164
|
delete perSymbolSlots[key];
|
|
@@ -129,8 +193,10 @@ export function serializeSignaturesArtifact(artifact: SignaturesArtifact): strin
|
|
|
129
193
|
}
|
|
130
194
|
|
|
131
195
|
if (import.meta.main) {
|
|
132
|
-
const {
|
|
133
|
-
const artifact = buildSignaturesArtifact({
|
|
196
|
+
const { targetBindingOptions } = await import("./binding-pin");
|
|
197
|
+
const artifact = buildSignaturesArtifact({
|
|
198
|
+
emitOptionsOf: (target) => targetBindingOptions(target),
|
|
199
|
+
});
|
|
134
200
|
if (process.argv.includes("--write")) {
|
|
135
201
|
Bun.write(SIGNATURES_PATH, serializeSignaturesArtifact(artifact));
|
|
136
202
|
const count = Object.values(artifact.versions).reduce((n, v) => n + Object.keys(v).length, 0);
|
|
@@ -2,18 +2,23 @@ import { mkdirSync, writeFileSync } from "node:fs";
|
|
|
2
2
|
import { dirname, resolve } from "node:path";
|
|
3
3
|
import {
|
|
4
4
|
type ApiTarget,
|
|
5
|
+
GO_INSTANCE_SRC_AUGMENTATIONS,
|
|
5
6
|
generateBuiltinMessagesDeclaration,
|
|
6
7
|
generateModuleDeclaration,
|
|
7
8
|
generateVersionIndex,
|
|
9
|
+
goInstanceFreeSurface,
|
|
10
|
+
goInstanceWalls,
|
|
8
11
|
KIND_MODULE_MANIFEST,
|
|
9
12
|
type KindManifestEntry,
|
|
10
13
|
kindStdlibReferences,
|
|
14
|
+
loadGoInstanceFunctions,
|
|
11
15
|
loadSrcAugmentations,
|
|
12
16
|
loadTargetEditorModules,
|
|
13
17
|
MESSAGES_MANIFEST,
|
|
14
18
|
type ModuleManifestEntry,
|
|
15
19
|
type ResolveTargetOptions,
|
|
16
20
|
resolveTargetModules,
|
|
21
|
+
type TargetBindingOptions,
|
|
17
22
|
} from "./regen";
|
|
18
23
|
|
|
19
24
|
export {
|
|
@@ -40,6 +45,11 @@ export interface RenderMaterializedKindIndexOptions {
|
|
|
40
45
|
// the universal set outright — an editor kind is disjoint from the runtime
|
|
41
46
|
// surface, not a narrowing of it.
|
|
42
47
|
readonly editorModules?: readonly string[];
|
|
48
|
+
// The universal modules the surface also carries as copies without the
|
|
49
|
+
// functions that need a game object, set when the target records which those
|
|
50
|
+
// are. A kind with no game object imports the copies instead and drops the
|
|
51
|
+
// augmentations marked as needing one; every other kind ignores it.
|
|
52
|
+
readonly goInstanceFreeModules?: readonly string[];
|
|
43
53
|
}
|
|
44
54
|
|
|
45
55
|
// The installed subpath a materialized kind re-exports its factory from: the
|
|
@@ -56,11 +66,21 @@ function installedFactoryModule(entry: KindManifestEntry): string {
|
|
|
56
66
|
export function renderMaterializedKindIndex(opts: RenderMaterializedKindIndexOptions): string {
|
|
57
67
|
const entry = KIND_MODULE_MANIFEST.find((e) => e.kind === opts.kind);
|
|
58
68
|
if (!entry) throw new Error(`unknown script kind: ${opts.kind}`);
|
|
69
|
+
const freeDir = entry.goInstanceFreeDir;
|
|
70
|
+
const copied =
|
|
71
|
+
freeDir === undefined || opts.goInstanceFreeModules === undefined
|
|
72
|
+
? null
|
|
73
|
+
: new Set(opts.goInstanceFreeModules);
|
|
74
|
+
const universal = opts.universalModules.filter(
|
|
75
|
+
(mod) => copied === null || !GO_INSTANCE_SRC_AUGMENTATIONS.includes(mod),
|
|
76
|
+
);
|
|
59
77
|
const modules =
|
|
60
78
|
entry.only === undefined
|
|
61
|
-
? [...new Set(["engine-globals", ...
|
|
79
|
+
? [...new Set(["engine-globals", ...universal])].sort()
|
|
62
80
|
: [...(opts.editorModules ?? [])];
|
|
63
|
-
const lines = modules.map((mod) =>
|
|
81
|
+
const lines = modules.map((mod) =>
|
|
82
|
+
copied?.has(mod) ? `import "../${freeDir}/${mod}";` : `import "../${mod}";`,
|
|
83
|
+
);
|
|
64
84
|
if (entry.only === undefined && opts.restrictedModule) {
|
|
65
85
|
lines.push(`import "../${opts.restrictedModule}";`);
|
|
66
86
|
}
|
|
@@ -88,9 +108,15 @@ export interface BuildVersionedSurfaceOptions {
|
|
|
88
108
|
// script kind without the generator knowing what a script kind is.
|
|
89
109
|
readonly excludeModules?: readonly string[];
|
|
90
110
|
// The hand-authored `src/*` augmentations to carry beside the modules.
|
|
91
|
-
// Defaults to reading
|
|
92
|
-
// filesystem (a Worker) supplies the
|
|
111
|
+
// Defaults to reading the target's set (`srcAugmentationModulesFor`) from the
|
|
112
|
+
// types package on disk; a caller with no filesystem (a Worker) supplies the
|
|
113
|
+
// same bytes and gets an identical file map.
|
|
93
114
|
readonly augmentations?: readonly VersionedSurfaceFile[];
|
|
115
|
+
// What the target's own engine source decides for its emit
|
|
116
|
+
// (`targetBindingOptions`). Only an in-repo caller rebuilding a vendored
|
|
117
|
+
// target's committed surface passes it; a published install vendors no engine
|
|
118
|
+
// source, and the ref-doc targets it materializes have none to read.
|
|
119
|
+
readonly emitOptions?: TargetBindingOptions;
|
|
94
120
|
}
|
|
95
121
|
|
|
96
122
|
export interface MaterializeVersionedSurfaceOptions extends BuildVersionedSurfaceOptions {
|
|
@@ -136,7 +162,7 @@ export async function buildVersionedSurfaceFiles(
|
|
|
136
162
|
).filter((entry) => kept(entry.outFile));
|
|
137
163
|
|
|
138
164
|
const augmentations = (
|
|
139
|
-
opts.augmentations ?? loadSrcAugmentations(opts.resolveOpts?.packageRoot ?? undefined)
|
|
165
|
+
opts.augmentations ?? loadSrcAugmentations(opts.resolveOpts?.packageRoot ?? undefined, target)
|
|
140
166
|
).filter((file) => kept(file.path));
|
|
141
167
|
|
|
142
168
|
// Re-rooting an entry makes it a new object no committed manifest holds, so
|
|
@@ -148,10 +174,31 @@ export async function buildVersionedSurfaceFiles(
|
|
|
148
174
|
(surface) =>
|
|
149
175
|
surface.map((entry) => ({
|
|
150
176
|
path: entry.outFile,
|
|
151
|
-
contents: generateModuleDeclaration(entry, { surface }).contents,
|
|
177
|
+
contents: generateModuleDeclaration(entry, { ...opts.emitOptions, surface }).contents,
|
|
152
178
|
})),
|
|
153
179
|
);
|
|
154
180
|
|
|
181
|
+
// A target whose engine source records the functions that need a game object
|
|
182
|
+
// carries, for each kind without one, copies of the modules declaring them
|
|
183
|
+
// with those functions withheld. Nothing else differs, so a target with no
|
|
184
|
+
// record writes no copy.
|
|
185
|
+
const walls = goInstanceWalls(
|
|
186
|
+
modules,
|
|
187
|
+
loadGoInstanceFunctions(target, opts.resolveOpts?.packageRoot ?? undefined),
|
|
188
|
+
);
|
|
189
|
+
for (const kind of KIND_MODULE_MANIFEST) {
|
|
190
|
+
const dir = kind.goInstanceFreeDir;
|
|
191
|
+
if (dir === undefined || walls.size === 0) continue;
|
|
192
|
+
const surface = rerooted(goInstanceFreeSurface(modules, walls, dir).surface);
|
|
193
|
+
for (const entry of surface) {
|
|
194
|
+
if (!entry.outFile.startsWith(`${dir}/`)) continue;
|
|
195
|
+
files.push({
|
|
196
|
+
path: entry.outFile,
|
|
197
|
+
contents: generateModuleDeclaration(entry, { ...opts.emitOptions, surface }).contents,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
155
202
|
files.push(...augmentations);
|
|
156
203
|
files.push({ path: "core-types.d.ts", contents: CORE_TYPES_REEXPORT });
|
|
157
204
|
|