typescript-to-gdscript 0.1.0 → 0.1.2
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/README.md +232 -104
- package/dist/cli/convert.d.ts.map +1 -1
- package/dist/cli/convert.js +15 -5
- package/dist/cli/convert.js.map +1 -1
- package/dist/converter/common/index.d.ts +17 -1
- package/dist/converter/common/index.d.ts.map +1 -1
- package/dist/converter/common/index.js +69 -19
- package/dist/converter/common/index.js.map +1 -1
- package/dist/converter/ts-to-gd/access-rewrite.d.ts +40 -0
- package/dist/converter/ts-to-gd/access-rewrite.d.ts.map +1 -0
- package/dist/converter/ts-to-gd/access-rewrite.js +124 -0
- package/dist/converter/ts-to-gd/access-rewrite.js.map +1 -0
- package/dist/converter/ts-to-gd/class-members.d.ts.map +1 -1
- package/dist/converter/ts-to-gd/class-members.js +5 -5
- package/dist/converter/ts-to-gd/class-members.js.map +1 -1
- package/dist/converter/ts-to-gd/expressions.d.ts.map +1 -1
- package/dist/converter/ts-to-gd/expressions.js +32 -8
- package/dist/converter/ts-to-gd/expressions.js.map +1 -1
- package/dist/converter/ts-to-gd/file-scope.d.ts.map +1 -1
- package/dist/converter/ts-to-gd/file-scope.js +1 -1
- package/dist/converter/ts-to-gd/file-scope.js.map +1 -1
- package/dist/converter/ts-to-gd/gd-getset.js +2 -2
- package/dist/converter/ts-to-gd/gd-getset.js.map +1 -1
- package/dist/converter/ts-to-gd/index.d.ts.map +1 -1
- package/dist/converter/ts-to-gd/index.js +1 -0
- package/dist/converter/ts-to-gd/index.js.map +1 -1
- package/dist/converter/ts-to-gd/parameters.d.ts.map +1 -1
- package/dist/converter/ts-to-gd/parameters.js +2 -2
- package/dist/converter/ts-to-gd/parameters.js.map +1 -1
- package/dist/converter/ts-to-gd/statements.d.ts.map +1 -1
- package/dist/converter/ts-to-gd/statements.js +1 -1
- package/dist/converter/ts-to-gd/statements.js.map +1 -1
- package/dist/typings/override-system.d.ts.map +1 -1
- package/dist/typings/override-system.js +6 -0
- package/dist/typings/override-system.js.map +1 -1
- package/dist/watcher/check.d.ts +87 -0
- package/dist/watcher/check.d.ts.map +1 -0
- package/dist/watcher/check.js +209 -0
- package/dist/watcher/check.js.map +1 -0
- package/dist/watcher/heal.d.ts +66 -0
- package/dist/watcher/heal.d.ts.map +1 -0
- package/dist/watcher/heal.js +132 -0
- package/dist/watcher/heal.js.map +1 -0
- package/dist/watcher/index.d.ts +1 -0
- package/dist/watcher/index.d.ts.map +1 -1
- package/dist/watcher/index.js +48 -52
- package/dist/watcher/index.js.map +1 -1
- package/package.json +6 -1
- package/typings/classes/AccessibilityServer.d.ts +1 -1
- package/typings/classes/AnimationLibrary.d.ts +4 -4
- package/typings/classes/AnimationNodeBlendSpace1D.d.ts +28 -2
- package/typings/classes/AnimationNodeBlendSpace2D.d.ts +28 -2
- package/typings/classes/AreaLight3D.d.ts +37 -0
- package/typings/classes/AudioEffectInstance.d.ts +1 -1
- package/typings/classes/AudioStreamRandomizer.d.ts +10 -0
- package/typings/classes/Basis.d.ts +2 -2
- package/typings/classes/CPUParticles2D.d.ts +2 -2
- package/typings/classes/CPUParticles3D.d.ts +2 -2
- package/typings/classes/CanvasItem.d.ts +15 -0
- package/typings/classes/CodeEdit.d.ts +2 -0
- package/typings/classes/CollisionObject2D.d.ts +2 -2
- package/typings/classes/Container.d.ts +1 -0
- package/typings/classes/Control.d.ts +68 -9
- package/typings/classes/Curve.d.ts +26 -1
- package/typings/classes/Curve2D.d.ts +15 -0
- package/typings/classes/Curve3D.d.ts +20 -0
- package/typings/classes/DirAccess.d.ts +6 -1
- package/typings/classes/DisplayServer.d.ts +35 -10
- package/typings/classes/DrawableTexture2D.d.ts +0 -4
- package/typings/classes/EditorCommandPalette.d.ts +0 -2
- package/typings/classes/EditorContextMenuPlugin.d.ts +4 -0
- package/typings/classes/EditorDock.d.ts +2 -3
- package/typings/classes/EditorExportPlatform.d.ts +4 -2
- package/typings/classes/EditorExportPlugin.d.ts +2 -0
- package/typings/classes/EditorFeatureProfile.d.ts +1 -1
- package/typings/classes/EditorInspector.d.ts +10 -0
- package/typings/classes/EditorInterface.d.ts +2 -2
- package/typings/classes/EditorNode3DGizmoPlugin.d.ts +4 -0
- package/typings/classes/EditorPlugin.d.ts +4 -4
- package/typings/classes/EditorResourcePicker.d.ts +2 -1
- package/typings/classes/EditorSceneFormatImporter.d.ts +23 -0
- package/typings/classes/EditorSettings.d.ts +44 -7
- package/typings/classes/EditorTranslationParserPlugin.d.ts +4 -0
- package/typings/classes/EditorVCSInterface.d.ts +6 -2
- package/typings/classes/FileDialog.d.ts +15 -0
- package/typings/classes/Font.d.ts +13 -1
- package/typings/classes/FontVariation.d.ts +10 -0
- package/typings/classes/GDScript.d.ts +8 -0
- package/typings/classes/GDScriptLanguageProtocol.d.ts +25 -0
- package/typings/classes/GDScriptSyntaxHighlighter.d.ts +6 -0
- package/typings/classes/GDScriptTextDocument.d.ts +27 -0
- package/typings/classes/GDScriptWorkspace.d.ts +17 -0
- package/typings/classes/GPUParticles2D.d.ts +2 -2
- package/typings/classes/GPUParticles3D.d.ts +15 -2
- package/typings/classes/Geometry2D.d.ts +2 -2
- package/typings/classes/Image.d.ts +6 -4
- package/typings/classes/ImageFormatLoader.d.ts +5 -0
- package/typings/classes/Input.d.ts +11 -2
- package/typings/classes/InputEventMouseMotion.d.ts +2 -2
- package/typings/classes/ItemList.d.ts +20 -0
- package/typings/classes/IterateIK3D.d.ts +6 -3
- package/typings/classes/JavaClassWrapper.d.ts +13 -0
- package/typings/classes/JavaScriptBridge.d.ts +1 -1
- package/typings/classes/Label.d.ts +1 -0
- package/typings/classes/LabelSettings.d.ts +25 -0
- package/typings/classes/Light3D.d.ts +1 -1
- package/typings/classes/Logger.d.ts +1 -1
- package/typings/classes/LookAtModifier3D.d.ts +1 -1
- package/typings/classes/MenuButton.d.ts +35 -0
- package/typings/classes/MeshLibrary.d.ts +2 -0
- package/typings/classes/MovieWriter.d.ts +2 -0
- package/typings/classes/MultiplayerPeerExtension.d.ts +9 -9
- package/typings/classes/Node.d.ts +6 -0
- package/typings/classes/Node3D.d.ts +6 -4
- package/typings/classes/OS.d.ts +1 -1
- package/typings/classes/Object.d.ts +11 -8
- package/typings/classes/OptimizedTranslation.d.ts +2 -2
- package/typings/classes/OptionButton.d.ts +51 -7
- package/typings/classes/PacketPeerExtension.d.ts +1 -1
- package/typings/classes/ParticleProcessMaterial.d.ts +58 -0
- package/typings/classes/PhysicsDirectSpaceState2DExtension.d.ts +6 -6
- package/typings/classes/PhysicsDirectSpaceState3DExtension.d.ts +6 -6
- package/typings/classes/PhysicsServer2DExtension.d.ts +5 -5
- package/typings/classes/PhysicsServer3DExtension.d.ts +1 -1
- package/typings/classes/PopupMenu.d.ts +58 -6
- package/typings/classes/ProjectSettings.d.ts +89 -21
- package/typings/classes/Quaternion.d.ts +2 -2
- package/typings/classes/RDAccelerationStructureGeometry.d.ts +42 -0
- package/typings/classes/RDAccelerationStructureInstance.d.ts +34 -0
- package/typings/classes/RDHitGroup.d.ts +20 -0
- package/typings/classes/RDPipelineShader.d.ts +14 -0
- package/typings/classes/RandomNumberGenerator.d.ts +4 -2
- package/typings/classes/RenderSceneBuffersConfiguration.d.ts +4 -1
- package/typings/classes/RenderingDevice.d.ts +93 -23
- package/typings/classes/RenderingServer.d.ts +51 -3
- package/typings/classes/Resource.d.ts +2 -0
- package/typings/classes/ResourceImporterOBJ.d.ts +1 -1
- package/typings/classes/ResourceImporterScene.d.ts +11 -3
- package/typings/classes/RichTextLabel.d.ts +14 -6
- package/typings/classes/SceneTree.d.ts +29 -5
- package/typings/classes/Script.d.ts +2 -0
- package/typings/classes/ScriptEditor.d.ts +7 -0
- package/typings/classes/ScriptLanguageExtension.d.ts +7 -0
- package/typings/classes/ScrollContainer.d.ts +17 -5
- package/typings/classes/SkeletonModification2DJiggle.d.ts +4 -0
- package/typings/classes/SpringBoneSimulator3D.d.ts +4 -2
- package/typings/classes/SpriteFrames.d.ts +20 -4
- package/typings/classes/StreamPeerExtension.d.ts +2 -2
- package/typings/classes/TabBar.d.ts +20 -0
- package/typings/classes/TabContainer.d.ts +21 -3
- package/typings/classes/TextEdit.d.ts +2 -2
- package/typings/classes/TextServer.d.ts +23 -1
- package/typings/classes/TextServerExtension.d.ts +23 -1
- package/typings/classes/TileSet.d.ts +3 -1
- package/typings/classes/Tree.d.ts +16 -7
- package/typings/classes/TreeItem.d.ts +9 -2
- package/typings/classes/UndoRedo.d.ts +2 -2
- package/typings/classes/Vector2.d.ts +4 -2
- package/typings/classes/Vector2i.d.ts +4 -2
- package/typings/classes/Vector3.d.ts +4 -2
- package/typings/classes/Vector3i.d.ts +4 -2
- package/typings/classes/Vector4.d.ts +4 -2
- package/typings/classes/Vector4i.d.ts +4 -2
- package/typings/classes/Viewport.d.ts +17 -1
- package/typings/classes/Window.d.ts +20 -6
- package/typings/classes/_globals.d.ts +104 -26
- package/typings/classes/index.d.ts +10 -112
- package/typings/godot-class-registry.json +885 -3604
- package/typings/classes/VisualShader.d.ts +0 -112
- package/typings/classes/VisualShaderNode.d.ts +0 -63
- package/typings/classes/VisualShaderNodeBillboard.d.ts +0 -28
- package/typings/classes/VisualShaderNodeBooleanConstant.d.ts +0 -10
- package/typings/classes/VisualShaderNodeBooleanParameter.d.ts +0 -14
- package/typings/classes/VisualShaderNodeClamp.d.ts +0 -26
- package/typings/classes/VisualShaderNodeColorConstant.d.ts +0 -10
- package/typings/classes/VisualShaderNodeColorFunc.d.ts +0 -32
- package/typings/classes/VisualShaderNodeColorOp.d.ts +0 -32
- package/typings/classes/VisualShaderNodeColorParameter.d.ts +0 -14
- package/typings/classes/VisualShaderNodeComment.d.ts +0 -12
- package/typings/classes/VisualShaderNodeCompare.d.ts +0 -68
- package/typings/classes/VisualShaderNodeConstant.d.ts +0 -6
- package/typings/classes/VisualShaderNodeCubemap.d.ts +0 -43
- package/typings/classes/VisualShaderNodeCubemapParameter.d.ts +0 -6
- package/typings/classes/VisualShaderNodeCurveTexture.d.ts +0 -10
- package/typings/classes/VisualShaderNodeCurveXYZTexture.d.ts +0 -10
- package/typings/classes/VisualShaderNodeCustom.d.ts +0 -122
- package/typings/classes/VisualShaderNodeDerivativeFunc.d.ts +0 -56
- package/typings/classes/VisualShaderNodeDeterminant.d.ts +0 -6
- package/typings/classes/VisualShaderNodeDistanceFade.d.ts +0 -6
- package/typings/classes/VisualShaderNodeDotProduct.d.ts +0 -6
- package/typings/classes/VisualShaderNodeExpression.d.ts +0 -12
- package/typings/classes/VisualShaderNodeFaceForward.d.ts +0 -8
- package/typings/classes/VisualShaderNodeFloatConstant.d.ts +0 -10
- package/typings/classes/VisualShaderNodeFloatFunc.d.ts +0 -108
- package/typings/classes/VisualShaderNodeFloatOp.d.ts +0 -36
- package/typings/classes/VisualShaderNodeFloatParameter.d.ts +0 -52
- package/typings/classes/VisualShaderNodeFrame.d.ts +0 -35
- package/typings/classes/VisualShaderNodeFresnel.d.ts +0 -6
- package/typings/classes/VisualShaderNodeGlobalExpression.d.ts +0 -6
- package/typings/classes/VisualShaderNodeGroupBase.d.ts +0 -60
- package/typings/classes/VisualShaderNodeIf.d.ts +0 -8
- package/typings/classes/VisualShaderNodeInput.d.ts +0 -20
- package/typings/classes/VisualShaderNodeIntConstant.d.ts +0 -10
- package/typings/classes/VisualShaderNodeIntFunc.d.ts +0 -24
- package/typings/classes/VisualShaderNodeIntOp.d.ts +0 -48
- package/typings/classes/VisualShaderNodeIntParameter.d.ts +0 -58
- package/typings/classes/VisualShaderNodeIs.d.ts +0 -18
- package/typings/classes/VisualShaderNodeLinearSceneDepth.d.ts +0 -6
- package/typings/classes/VisualShaderNodeMix.d.ts +0 -28
- package/typings/classes/VisualShaderNodeMultiplyAdd.d.ts +0 -22
- package/typings/classes/VisualShaderNodeOuterProduct.d.ts +0 -6
- package/typings/classes/VisualShaderNodeOutput.d.ts +0 -6
- package/typings/classes/VisualShaderNodeParameter.d.ts +0 -32
- package/typings/classes/VisualShaderNodeParameterRef.d.ts +0 -10
- package/typings/classes/VisualShaderNodeParticleAccelerator.d.ts +0 -20
- package/typings/classes/VisualShaderNodeParticleBoxEmitter.d.ts +0 -6
- package/typings/classes/VisualShaderNodeParticleConeVelocity.d.ts +0 -6
- package/typings/classes/VisualShaderNodeParticleEmit.d.ts +0 -22
- package/typings/classes/VisualShaderNodeParticleEmitter.d.ts +0 -12
- package/typings/classes/VisualShaderNodeParticleMeshEmitter.d.ts +0 -20
- package/typings/classes/VisualShaderNodeParticleMultiplyByAxisAngle.d.ts +0 -10
- package/typings/classes/VisualShaderNodeParticleOutput.d.ts +0 -6
- package/typings/classes/VisualShaderNodeParticleRandomness.d.ts +0 -22
- package/typings/classes/VisualShaderNodeParticleRingEmitter.d.ts +0 -6
- package/typings/classes/VisualShaderNodeParticleSphereEmitter.d.ts +0 -6
- package/typings/classes/VisualShaderNodeProximityFade.d.ts +0 -6
- package/typings/classes/VisualShaderNodeRandomRange.d.ts +0 -6
- package/typings/classes/VisualShaderNodeRemap.d.ts +0 -33
- package/typings/classes/VisualShaderNodeReroute.d.ts +0 -8
- package/typings/classes/VisualShaderNodeResizableBase.d.ts +0 -10
- package/typings/classes/VisualShaderNodeRotationByAxis.d.ts +0 -6
- package/typings/classes/VisualShaderNodeSDFRaymarch.d.ts +0 -6
- package/typings/classes/VisualShaderNodeSDFToScreenUV.d.ts +0 -8
- package/typings/classes/VisualShaderNodeSample3D.d.ts +0 -18
- package/typings/classes/VisualShaderNodeScreenNormalWorldSpace.d.ts +0 -6
- package/typings/classes/VisualShaderNodeScreenUVToSDF.d.ts +0 -8
- package/typings/classes/VisualShaderNodeSmoothStep.d.ts +0 -28
- package/typings/classes/VisualShaderNodeStep.d.ts +0 -28
- package/typings/classes/VisualShaderNodeSwitch.d.ts +0 -30
- package/typings/classes/VisualShaderNodeTexture.d.ts +0 -57
- package/typings/classes/VisualShaderNodeTexture2DArray.d.ts +0 -12
- package/typings/classes/VisualShaderNodeTexture2DArrayParameter.d.ts +0 -6
- package/typings/classes/VisualShaderNodeTexture2DParameter.d.ts +0 -6
- package/typings/classes/VisualShaderNodeTexture3D.d.ts +0 -12
- package/typings/classes/VisualShaderNodeTexture3DParameter.d.ts +0 -6
- package/typings/classes/VisualShaderNodeTextureParameter.d.ts +0 -104
- package/typings/classes/VisualShaderNodeTextureParameterTriplanar.d.ts +0 -6
- package/typings/classes/VisualShaderNodeTextureSDF.d.ts +0 -6
- package/typings/classes/VisualShaderNodeTextureSDFNormal.d.ts +0 -6
- package/typings/classes/VisualShaderNodeTransformCompose.d.ts +0 -6
- package/typings/classes/VisualShaderNodeTransformConstant.d.ts +0 -10
- package/typings/classes/VisualShaderNodeTransformDecompose.d.ts +0 -6
- package/typings/classes/VisualShaderNodeTransformFunc.d.ts +0 -18
- package/typings/classes/VisualShaderNodeTransformOp.d.ts +0 -32
- package/typings/classes/VisualShaderNodeTransformParameter.d.ts +0 -14
- package/typings/classes/VisualShaderNodeTransformVecMult.d.ts +0 -22
- package/typings/classes/VisualShaderNodeUIntConstant.d.ts +0 -10
- package/typings/classes/VisualShaderNodeUIntFunc.d.ts +0 -20
- package/typings/classes/VisualShaderNodeUIntOp.d.ts +0 -48
- package/typings/classes/VisualShaderNodeUIntParameter.d.ts +0 -16
- package/typings/classes/VisualShaderNodeUVFunc.d.ts +0 -22
- package/typings/classes/VisualShaderNodeUVPolarCoord.d.ts +0 -6
- package/typings/classes/VisualShaderNodeVarying.d.ts +0 -14
- package/typings/classes/VisualShaderNodeVaryingGetter.d.ts +0 -6
- package/typings/classes/VisualShaderNodeVaryingSetter.d.ts +0 -6
- package/typings/classes/VisualShaderNodeVec2Constant.d.ts +0 -10
- package/typings/classes/VisualShaderNodeVec2Parameter.d.ts +0 -14
- package/typings/classes/VisualShaderNodeVec3Constant.d.ts +0 -10
- package/typings/classes/VisualShaderNodeVec3Parameter.d.ts +0 -14
- package/typings/classes/VisualShaderNodeVec4Constant.d.ts +0 -10
- package/typings/classes/VisualShaderNodeVec4Parameter.d.ts +0 -14
- package/typings/classes/VisualShaderNodeVectorBase.d.ts +0 -20
- package/typings/classes/VisualShaderNodeVectorCompose.d.ts +0 -8
- package/typings/classes/VisualShaderNodeVectorDecompose.d.ts +0 -8
- package/typings/classes/VisualShaderNodeVectorDistance.d.ts +0 -6
- package/typings/classes/VisualShaderNodeVectorFunc.d.ts +0 -84
- package/typings/classes/VisualShaderNodeVectorLen.d.ts +0 -6
- package/typings/classes/VisualShaderNodeVectorOp.d.ts +0 -42
- package/typings/classes/VisualShaderNodeVectorRefract.d.ts +0 -8
- package/typings/classes/VisualShaderNodeWorldPositionFromDepth.d.ts +0 -8
package/README.md
CHANGED
|
@@ -4,8 +4,6 @@ Write Godot 4 scripts in TypeScript. Get autocomplete and type-checking for the
|
|
|
4
4
|
|
|
5
5
|

|
|
6
6
|
|
|
7
|
-
> Have an existing GDScript project? Bulk-convert it to TypeScript with [tstogd initial-convert-gd-to-ts](docs/gd-to-ts-migration.md).
|
|
8
|
-
|
|
9
7
|
## Why
|
|
10
8
|
|
|
11
9
|
GDScript is great for getting things on screen, but its type system and tooling are intentionally lightweight. The bigger a project gets, the more that costs you: typos surface at runtime, refactors are risky, and autocomplete only goes so far. TypeScript was built for exactly this problem, and it has had a decade of investment poured into making large codebases safe to change.
|
|
@@ -24,13 +22,55 @@ The output is clean, idiomatic `.gd` you can read and ship — TypeScript is the
|
|
|
24
22
|
|
|
25
23
|
- **Type-safe Godot API** — all 900+ engine classes generated as `.d.ts` from the official Godot XML docs, with nullable reference types where appropriate
|
|
26
24
|
- **Live IDE diagnostics** — TypeScript language service plugin surfaces converter and Godot CLI errors as squiggles, on unsaved buffers
|
|
27
|
-
- **Watch mode** — auto-convert on save, then run a debounced full-project check (TypeScript + converter + Godot CLI)
|
|
25
|
+
- **Watch mode** — auto-convert on save and keep typings in sync (it watches your `.tscn` scenes and assets too), then run a debounced full-project check (TypeScript + converter + Godot CLI)
|
|
28
26
|
- **Source maps** — Godot script parse errors, runtime errors and stack traces map back to your TypeScript line/column
|
|
29
27
|
- **Scene and path typings** — `get_node()`, `get_parent()`, `get_child()`, `load()`, `preload()` and group queries typed from your project files
|
|
30
28
|
- **`gd` namespace** — strongly-typed helpers for GDScript-only constructs (signals, decorators, match, operator overloading)
|
|
31
29
|
- **Addons supported** — typings for third-party GDScript addons, consumable from TypeScript
|
|
32
30
|
- **GD → TS migration** — one-shot bulk converter for existing projects
|
|
33
31
|
|
|
32
|
+
### Showcase
|
|
33
|
+
|
|
34
|
+
<details>
|
|
35
|
+
<summary>Scene and path type hints</summary>
|
|
36
|
+
|
|
37
|
+
Given this scene structure:
|
|
38
|
+
|
|
39
|
+

|
|
40
|
+
|
|
41
|
+
You get type hints for this:
|
|
42
|
+
|
|
43
|
+

|
|
44
|
+
|
|
45
|
+
…or this:
|
|
46
|
+
|
|
47
|
+

|
|
48
|
+
|
|
49
|
+
…or even this:
|
|
50
|
+
|
|
51
|
+

|
|
52
|
+
|
|
53
|
+
`preload()` is typed too:
|
|
54
|
+
|
|
55
|
+

|
|
56
|
+
|
|
57
|
+
</details>
|
|
58
|
+
|
|
59
|
+
<details>
|
|
60
|
+
<summary>GDScript and converter errors in TypeScript code</summary>
|
|
61
|
+
|
|
62
|
+
GDScript doesn't allow a static and an instance member to share the same name — though TypeScript does. Your IDE surfaces the GDScript error at the exact spot in your `.ts`:
|
|
63
|
+
|
|
64
|
+

|
|
65
|
+
|
|
66
|
+
For edge cases — like using the result of `&&` as a value — you get a converter error instead, because logical operations in GDScript always return a boolean:
|
|
67
|
+
|
|
68
|
+

|
|
69
|
+
|
|
70
|
+
You also get all of these errors (along with the TypeScript errors themselves) from the `convert` CLI command.
|
|
71
|
+
|
|
72
|
+
</details>
|
|
73
|
+
|
|
34
74
|
## Quick start
|
|
35
75
|
|
|
36
76
|
```bash
|
|
@@ -41,10 +81,12 @@ tstogd init # interactive: writes tstogd.json + tsconfig.json + installs typescr
|
|
|
41
81
|
Then:
|
|
42
82
|
|
|
43
83
|
1. Write a `.ts` class in your TS source dir (default `src/`).
|
|
44
|
-
2. `tstogd convert` — emits `.gd`
|
|
84
|
+
2. `tstogd convert` — emits `.gd` into your output dir (default `scripts/`), regenerates all typings, and runs a full diagnostic check.
|
|
45
85
|
3. Attach the `.gd` file in Godot as you normally would. Configure Godot's external editor to point at your IDE for TS language server and one-click jump-to-source ([guide](docs/ide-integration.md)).
|
|
46
86
|
|
|
47
|
-
|
|
87
|
+
That's the whole loop — `convert` and `watch` are the only commands you need in normal use. Each one converts your code _and_ regenerates every typing (scene, script, resource, addon) in the same pass, so `get_node()` paths, `res://` references, and group queries stay in sync without any extra step. Most projects never run another CLI command.
|
|
88
|
+
|
|
89
|
+
For day-to-day work, run **`tstogd watch`**: it auto-converts on save, watches your `.tscn` scenes and assets so scene typings refresh the instant you change the tree in Godot, and runs a debounced full-project check feeding live IDE diagnostics.
|
|
48
90
|
|
|
49
91
|
### Requirements
|
|
50
92
|
|
|
@@ -56,19 +98,32 @@ Use `tstogd watch` during development for auto-conversion plus live diagnostics.
|
|
|
56
98
|
|
|
57
99
|
Setup `tstogd.json` and `tsconfig.json` in your project - for full template and field reference see [docs/configuration.md](docs/configuration.md).
|
|
58
100
|
|
|
101
|
+
### Migration from existing GDScript
|
|
102
|
+
|
|
103
|
+
Have an existing GDScript project? Bulk-convert it to TypeScript with [tstogd initial-convert-gd-to-ts](docs/gd-to-ts-migration.md).
|
|
104
|
+
|
|
59
105
|
## CLI
|
|
60
106
|
|
|
107
|
+
In everyday use you only need these three:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
tstogd init # one-time interactive scaffold (tsconfig + tstogd.json + ts-plugin)
|
|
111
|
+
tstogd convert # convert TS → GD + regenerate all typings + full diagnostic check
|
|
112
|
+
tstogd watch # the same, continuously: auto-convert on save, live diagnostics
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
> **Note:** `watch` self-heals — when an edit causes new errors in other files, those files are reconverted automatically. For a guaranteed full refresh of every `.gd`, run `tstogd convert` after a `watch` session.
|
|
116
|
+
|
|
117
|
+
`convert` and `watch` already regenerate every typing (scene, script, resource, addon) as part of the run — there is no separate "generate typings" step to remember. The commands below cover one-off or advanced situations, and most projects never touch them:
|
|
118
|
+
|
|
61
119
|
```bash
|
|
62
|
-
tstogd
|
|
63
|
-
tstogd
|
|
64
|
-
tstogd watch # auto-convert on change + debounced full check
|
|
65
|
-
tstogd generate-typings # generate scene + script typings
|
|
66
|
-
tstogd clear-cache # clear conversion cache
|
|
120
|
+
tstogd generate-typings # regenerate typings standalone (convert/watch do this for you)
|
|
121
|
+
tstogd clear-cache # clear the conversion cache (e.g. after upgrading the converter)
|
|
67
122
|
```
|
|
68
123
|
|
|
69
124
|
Full reference in [docs/cli.md](docs/cli.md). Specialized commands:
|
|
70
125
|
|
|
71
|
-
- [`initial-convert-gd-to-ts`](docs/gd-to-ts-migration.md) — bulk migration of an existing GDScript project to TypeScript
|
|
126
|
+
- [`initial-convert-gd-to-ts`](docs/gd-to-ts-migration.md) — one-shot bulk migration of an existing GDScript project to TypeScript
|
|
72
127
|
- [`generate-gdscript-global-typings`](docs/typings.md#tstogd-generate-gdscript-global-typings), [`generate-addon-typings`](docs/typings.md#tstogd-generate-addon-typings) — typings generation
|
|
73
128
|
- [`open-editor`](docs/ide-integration.md#tstogd-open-editor) — Godot external-editor integration
|
|
74
129
|
|
|
@@ -84,125 +139,116 @@ Each `.ts` file must contain exactly one class. Named classes (`class Foo`) are
|
|
|
84
139
|
- `bool` — alias for `boolean`, also a cast: `bool(x)` → GDScript `bool(x)`. Same for `String(x)`.
|
|
85
140
|
- `Dictionary<K, V>` — generic, with typed `get` / `set` / `keys` / `values`. `{}` literals keep dictionary methods via the `Object` interface. Untyped `Dictionary` is `<unknown, unknown>`.
|
|
86
141
|
- `let` and `const` both convert to GDScript `var`. **Use `let`** — TS `var` is restricted (GDScript `var` ≈ TS `let`, not TS `var`).
|
|
87
|
-
- `undefined` is restricted — use `null`.
|
|
142
|
+
- `undefined` is restricted — use `null`. Plain objects (interfaces, object literals) are Dictionaries in GDScript: member reads convert to `obj.get("foo")`, which returns `null` for a missing key instead of crashing. Writes and class-instance access stay direct.
|
|
88
143
|
- `TSOnly<T>` — type-level wrapper, stripped at conversion.
|
|
144
|
+
- Only types GDScript actually has get an annotation. Godot classes/value types and your own `class_name` classes (including ones imported from another file) keep their type; plain `interface`s, `object`, `type` aliases, and unknown/unresolved names have the annotation **omitted** (bare untyped `var x` / `func f(x)`) rather than emitting a bogus GD type. See [docs/transform-rules.md#type-annotations--what-gets-emitted](docs/transform-rules.md#type-annotations--what-gets-emitted).
|
|
89
145
|
|
|
90
146
|
For comments, async, `this` / `self`, logical operators, and constructor mapping, see [docs/transform-rules.md](docs/transform-rules.md).
|
|
91
147
|
|
|
92
148
|
## Cheat sheet
|
|
93
149
|
|
|
94
|
-
|
|
150
|
+
Basics for writing scripts For advanced helpers and the deep dive, see the [**full cheat sheet** in docs/transform-rules.md](docs/transform-rules.md#full-cheat-sheet).
|
|
95
151
|
|
|
96
152
|
```typescript
|
|
97
|
-
//
|
|
98
|
-
//
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
// class-level
|
|
153
|
+
// Use imports instead of global classes for better DX
|
|
154
|
+
// Can be changed by `converterOptions.generateGlobalClassTypes` config option
|
|
155
|
+
import { PlayerSprite, type PlayerSpriteState } from './PlayerSprite';
|
|
156
|
+
|
|
157
|
+
// Inner classes, class-level constants & enums.
|
|
158
|
+
// A `namespace Player` merged with class `Player`
|
|
159
|
+
// lifts each exported member onto the class.
|
|
102
160
|
export namespace Player {
|
|
103
|
-
export const MAX_HP = 100;
|
|
161
|
+
export const MAX_HP = 100;
|
|
104
162
|
|
|
105
163
|
export enum State {
|
|
106
164
|
IDLE,
|
|
107
165
|
RUNNING,
|
|
108
|
-
}
|
|
166
|
+
}
|
|
109
167
|
|
|
110
168
|
export class Bullet extends Node2D {
|
|
111
|
-
|
|
112
|
-
damage: int = 10; // var damage: int = 10
|
|
169
|
+
damage: int = 10;
|
|
113
170
|
}
|
|
114
171
|
}
|
|
115
172
|
|
|
116
173
|
export class Player extends CharacterBody2D {
|
|
117
|
-
//
|
|
118
|
-
static MAX_INSTANCES = 8;
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
//
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
@
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
// ── Constructor → _init ──────────────────────────────────────────
|
|
174
|
+
// Statics (mutable); for constants use the namespace
|
|
175
|
+
static MAX_INSTANCES = 8;
|
|
176
|
+
|
|
177
|
+
// Field decorators. `@exports` aliases `@export`
|
|
178
|
+
// (a TS reserved word); other annotations are 1:1
|
|
179
|
+
@exports speed: float = 200.0;
|
|
180
|
+
@export_range(0, 100) health: int = 100;
|
|
181
|
+
@onready sprite: PlayerSprite = this.get_node('Sprite');
|
|
182
|
+
@onready sprite_state: PlayerSpriteState = this.sprite.get_state();
|
|
183
|
+
|
|
184
|
+
// Signals; tuple labels become GD arg names
|
|
185
|
+
health_changed = gd.signal<[from: int, to: int]>();
|
|
186
|
+
died = gd.signal();
|
|
187
|
+
|
|
188
|
+
// Constructor replaces _init
|
|
134
189
|
constructor(speed: float = 200.0) {
|
|
135
|
-
|
|
136
|
-
this.speed = speed; // self.speed = speed
|
|
190
|
+
this.speed = speed;
|
|
137
191
|
}
|
|
138
192
|
|
|
139
|
-
//
|
|
193
|
+
// Getters / setters (native TS accessors)
|
|
140
194
|
get score(): int {
|
|
141
195
|
return this.score;
|
|
142
|
-
}
|
|
196
|
+
}
|
|
143
197
|
set score(v: int) {
|
|
144
198
|
this.score = v;
|
|
145
|
-
}
|
|
146
|
-
// set(value): score = value
|
|
199
|
+
}
|
|
147
200
|
|
|
148
|
-
//
|
|
201
|
+
// Async / await; Promise<T> unwraps to T
|
|
149
202
|
async long_task(): Promise<int> {
|
|
150
|
-
// → func long_task() -> int:
|
|
151
203
|
await this.get_tree().create_timer(1).timeout;
|
|
152
204
|
return 42;
|
|
153
205
|
}
|
|
154
206
|
|
|
155
207
|
_process(delta: float) {
|
|
156
|
-
//
|
|
157
|
-
|
|
158
|
-
let
|
|
159
|
-
let ternary = eq ? 1 : 2; // → var ternary = 1 if eq else 2
|
|
208
|
+
// Operators
|
|
209
|
+
let eq = this.health === 0;
|
|
210
|
+
let ternary = eq ? 1 : 2;
|
|
160
211
|
|
|
161
|
-
//
|
|
162
|
-
let pos = gd.ops.add(this.position, Vector2(1, 0));
|
|
163
|
-
//
|
|
212
|
+
// Math on value types (Vector2, Color, …) needs gd.ops
|
|
213
|
+
let pos = gd.ops.add(this.position, Vector2(1, 0));
|
|
214
|
+
// Also available: add, sub, mul, div, rem, eq, ne, gt, gte, lt, lte, plus (unary), minus (unary)
|
|
164
215
|
|
|
165
|
-
//
|
|
166
|
-
|
|
216
|
+
// Type casting / checking
|
|
217
|
+
// self.get_node("Body") as CharacterBody2D
|
|
218
|
+
let body = gd.as(this.get_node('Body'), CharacterBody2D);
|
|
167
219
|
if (body instanceof CharacterBody2D) {
|
|
168
|
-
/*
|
|
169
|
-
}
|
|
220
|
+
/* body is CharacterBody2D */
|
|
221
|
+
}
|
|
170
222
|
if (gd.is(this.health, int)) {
|
|
171
|
-
/*
|
|
172
|
-
}
|
|
223
|
+
/* health is int */
|
|
224
|
+
}
|
|
173
225
|
|
|
174
|
-
//
|
|
175
|
-
let bullet = new Player.Bullet();
|
|
226
|
+
// Object construction instead of Player.Bullet.new()
|
|
227
|
+
let bullet = new Player.Bullet();
|
|
176
228
|
|
|
177
|
-
//
|
|
178
|
-
let stats = { name: 'Hero', hp: 100 };
|
|
229
|
+
// Dictionaries (other keys: gd.dict)
|
|
230
|
+
let stats = { name: 'Hero', hp: 100 };
|
|
179
231
|
|
|
180
|
-
//
|
|
181
|
-
let greet = `Hi ${this.name}!`;
|
|
182
|
-
let path = NodePath('Body/Sprite');
|
|
183
|
-
let sig = StringName('died');
|
|
232
|
+
// Strings, StringName, NodePath
|
|
233
|
+
let greet = `Hi ${this.name}!`;
|
|
234
|
+
let path = NodePath('Body/Sprite');
|
|
235
|
+
let sig = StringName('died');
|
|
184
236
|
|
|
185
|
-
//
|
|
186
|
-
for (let s of range(3)) print(s);
|
|
237
|
+
// Control flow
|
|
238
|
+
for (let s of range(3)) print(s);
|
|
187
239
|
|
|
188
|
-
//
|
|
189
|
-
switch (
|
|
190
|
-
this.health // → match self.health:
|
|
191
|
-
) {
|
|
240
|
+
// Match (TS switch round-trips with GD match)
|
|
241
|
+
switch (this.health) {
|
|
192
242
|
case 0:
|
|
193
243
|
this.died.emit();
|
|
194
|
-
break; // 0: self.died.emit()
|
|
195
244
|
default:
|
|
196
245
|
print('alive');
|
|
197
|
-
break; // _: print("alive")
|
|
198
246
|
}
|
|
199
247
|
}
|
|
200
248
|
|
|
201
249
|
_ready() {
|
|
202
|
-
// → func _ready():
|
|
203
|
-
// Signals — emit and connect
|
|
204
|
-
this.health_changed.emit(0, 100); // → self.health_changed.emit(0, 100)
|
|
205
250
|
this.health_changed.connect(this._on_health_changed);
|
|
251
|
+
this.health_changed.emit(0, 100);
|
|
206
252
|
}
|
|
207
253
|
|
|
208
254
|
_on_health_changed(from: int, to: int) {
|
|
@@ -214,35 +260,117 @@ export class Player extends CharacterBody2D {
|
|
|
214
260
|
}
|
|
215
261
|
```
|
|
216
262
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
263
|
+
<details>
|
|
264
|
+
<summary>Result gdscript:</summary>
|
|
265
|
+
|
|
266
|
+
```gdscript
|
|
267
|
+
extends CharacterBody2D
|
|
268
|
+
class_name Player
|
|
269
|
+
|
|
270
|
+
const MAX_HP = 100
|
|
271
|
+
|
|
272
|
+
enum State { IDLE, RUNNING }
|
|
273
|
+
|
|
274
|
+
class Bullet extends Node2D:
|
|
275
|
+
var damage: int = 10
|
|
276
|
+
|
|
277
|
+
# Statics (mutable); for constants use the namespace
|
|
278
|
+
static var MAX_INSTANCES = 8
|
|
279
|
+
# Field decorators. `@exports` aliases `@export`
|
|
280
|
+
# (a TS reserved word); other annotations are 1:1
|
|
281
|
+
@export
|
|
282
|
+
var speed: float = 200.0
|
|
283
|
+
@export_range(0, 100)
|
|
284
|
+
var health: int = 100
|
|
285
|
+
@onready
|
|
286
|
+
var sprite: PlayerSprite = self.get_node("Sprite")
|
|
287
|
+
@onready
|
|
288
|
+
var spriteState = self.sprite.get_state()
|
|
289
|
+
# Signals; tuple labels become GD arg names
|
|
290
|
+
signal health_changed(from: int, to: int)
|
|
291
|
+
signal died
|
|
292
|
+
|
|
293
|
+
# Constructor replaces _init
|
|
294
|
+
func _init(speed: float = 200.0):
|
|
295
|
+
self.speed = speed
|
|
296
|
+
|
|
297
|
+
var score: int:
|
|
298
|
+
get:
|
|
299
|
+
return score
|
|
300
|
+
set(v):
|
|
301
|
+
score = v
|
|
302
|
+
|
|
303
|
+
# Async / await; Promise<T> unwraps to T
|
|
304
|
+
func long_task() -> int:
|
|
305
|
+
await self.get_tree().create_timer(1).timeout
|
|
306
|
+
return 42
|
|
307
|
+
|
|
308
|
+
func _process(delta: float):
|
|
309
|
+
# Operators
|
|
310
|
+
var eq = self.health == 0
|
|
311
|
+
var ternary = 1 if eq else 2
|
|
312
|
+
# Math on value types (Vector2, Color, …) needs gd.ops
|
|
313
|
+
var pos = (self.position + Vector2(1, 0))
|
|
314
|
+
# Also available: add, sub, mul, div, rem, eq, ne, gt, gte, lt, lte, plus (unary), minus (unary)
|
|
315
|
+
# Type casting / checking
|
|
316
|
+
# self.get_node("Body") as CharacterBody2D
|
|
317
|
+
var body = self.get_node("Body") as CharacterBody2D
|
|
318
|
+
if body is CharacterBody2D:
|
|
319
|
+
pass
|
|
320
|
+
if self.health is int:
|
|
321
|
+
pass
|
|
322
|
+
# Object construction instead of Player.Bullet.new()
|
|
323
|
+
var bullet = self.Bullet.new()
|
|
324
|
+
# Dictionaries (other keys: gd.dict)
|
|
325
|
+
var stats = {
|
|
326
|
+
"name": "Hero",
|
|
327
|
+
"hp": 100,
|
|
328
|
+
}
|
|
329
|
+
# Strings, StringName, NodePath
|
|
330
|
+
var greet = "Hi " + str(self.name) + "!"
|
|
331
|
+
var path = NodePath("Body/Sprite")
|
|
332
|
+
var sig = StringName("died")
|
|
333
|
+
# Control flow
|
|
334
|
+
for s in range(3):
|
|
335
|
+
print(s)
|
|
336
|
+
# Match (TS switch round-trips with GD match)
|
|
337
|
+
match self.health:
|
|
338
|
+
0:
|
|
339
|
+
self.died.emit()
|
|
340
|
+
_:
|
|
341
|
+
print("alive")
|
|
342
|
+
|
|
343
|
+
func _ready():
|
|
344
|
+
self.health_changed.connect(self._on_health_changed)
|
|
345
|
+
self.health_changed.emit(0, 100)
|
|
346
|
+
|
|
347
|
+
func _on_health_changed(from: int, to: int):
|
|
348
|
+
pass
|
|
349
|
+
|
|
350
|
+
func die():
|
|
351
|
+
pass
|
|
352
|
+
```
|
|
220
353
|
|
|
221
|
-
|
|
222
|
-
| ------------------ | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
|
|
223
|
-
| `GodotResources` | every asset path (`.tscn`, `.gd`, `.tres`, images, audio, …) | The resource type the path resolves to — `PackedScene<Root>` for scenes, `typeof Class` for scripts, the concrete `Resource` subclass for `.tres` | `let mat: GodotResources["res://player_material.tres"]` |
|
|
224
|
-
| `GodotScripts` | `.gd` script paths | `typeof <Class>` — the class constructor for the script | `const GameManager: GodotScripts["res://GameManager.gd"]` |
|
|
225
|
-
| `GodotScenes` | `.tscn` paths | The **root node** type of the scene (with full tree attached) | `let root: GodotScenes["res://Level.tscn"]` |
|
|
226
|
-
| `GodotSceneTrees` | `.tscn` paths | The **tree** type — used when you need to index descendants directly | `type Tree = GodotSceneTrees["res://Player.tscn"]` |
|
|
227
|
-
| `GodotGroups` | group names declared in `.tscn` files | `{ [scenePath]: union of node types in that group }` | `GodotGroups["enemies"]["res://Level.tscn"]` → `Goblin \| Slime` |
|
|
228
|
-
| `GodotConnections` | scene paths that have `[connection]` entries | `{ "Node.signal": _GDSignalConnection<…> }` — connection metadata | `GodotConnections["res://UI.tscn"]["Button.pressed"]` |
|
|
354
|
+
</details>
|
|
229
355
|
|
|
230
|
-
|
|
356
|
+
#### Useful global types
|
|
231
357
|
|
|
232
|
-
|
|
358
|
+
Each interface maps a string literal (a `res://` path or group name) to the type it resolves to — index it directly, e.g. `GodotResources["res://player.tres"]` or `GodotScripts["res://player.gd"]`:
|
|
233
359
|
|
|
234
|
-
|
|
360
|
+
- **`GodotResources`** — any asset path → its resource type (`PackedScene<Root>`, `typeof Class`, or the concrete `Resource` subclass)
|
|
361
|
+
- **`GodotResourceName`** (= `keyof GodotResources`) — any `res://…` asset
|
|
362
|
+
- **`GodotScripts`** — `.gd` path → `typeof <Class>` (the script constructor)
|
|
363
|
+
- **`GodotScriptName`** (= `keyof GodotScripts`) — a `.gd` path
|
|
364
|
+
- **`GodotScenes`** — `.tscn` path → the scene's **root node** type
|
|
365
|
+
- **`GodotSceneName`** (= `keyof GodotScenes`) — a `.tscn` path
|
|
366
|
+
- **`GodotSceneTrees`** — `.tscn` path → the **tree** type, for indexing descendants directly
|
|
367
|
+
- **`GodotSceneTreeName`** (= `keyof GodotSceneTrees`) — same set as `GodotSceneName`, for the tree rather than the root
|
|
368
|
+
- **`GodotGroups`** — group name → union of the node types in that group
|
|
369
|
+
- **`GodotGroupName`** (= `keyof GodotGroups`) — a group identifier (`"enemies"`, …)
|
|
235
370
|
|
|
236
|
-
|
|
237
|
-
| -------------------------- | ------------------------ | ----------------------------------------------------------------------- |
|
|
238
|
-
| `GodotResourceName` | `keyof GodotResources` | `res://…` to any asset |
|
|
239
|
-
| `GodotSceneName` | `keyof GodotScenes` | `res://…` to a `.tscn` |
|
|
240
|
-
| `GodotSceneTreeName` | `keyof GodotSceneTrees` | Same set as `GodotSceneName`; pick when you want the tree, not the root |
|
|
241
|
-
| `GodotScriptName` | `keyof GodotScripts` | `res://…` to a `.gd` |
|
|
242
|
-
| `GodotGroupName` | `keyof GodotGroups` | Group identifier (`"enemies"`, `"entities"`, …) |
|
|
243
|
-
| `GodotConnectionSceneName` | `keyof GodotConnections` | Scene paths that have `[connection]` entries |
|
|
371
|
+
The Godot-typed `load()`, `preload()`, `get_node()`, and autoload singletons all index these under the hood.
|
|
244
372
|
|
|
245
|
-
|
|
373
|
+
That types are resolved lazily, so each alias automatically picks up new entries as more files are converted. Typos in resource paths or group names become compile-time errors instead of silent runtime failures:
|
|
246
374
|
|
|
247
375
|
```typescript
|
|
248
376
|
class AssetLoader extends Node {
|
|
@@ -256,9 +384,9 @@ class AssetLoader extends Node {
|
|
|
256
384
|
|
|
257
385
|
_ready() {
|
|
258
386
|
this.preload_asset('res://Player.tscn'); // ✅ typed
|
|
259
|
-
this.preload_asset('res://does_not_exist.png'); // ❌
|
|
387
|
+
this.preload_asset('res://does_not_exist.png'); // ❌ error
|
|
260
388
|
this.count_in_group('enemies'); // ✅ typed
|
|
261
|
-
this.count_in_group('typo'); // ❌
|
|
389
|
+
this.count_in_group('typo'); // ❌ error
|
|
262
390
|
}
|
|
263
391
|
}
|
|
264
392
|
```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/cli/convert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/cli/convert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgO7D"}
|
package/dist/cli/convert.js
CHANGED
|
@@ -11,6 +11,8 @@ export function registerConvertCommand(program) {
|
|
|
11
11
|
program
|
|
12
12
|
.command('convert')
|
|
13
13
|
.description('Convert TypeScript file(s) to GDScript. If no files given, converts all .ts files in tsDir. ' +
|
|
14
|
+
'Converts every file fresh by default — correct even when types in other files changed; ' +
|
|
15
|
+
'pass --use-cache to skip content-unchanged files (faster, may serve stale output). ' +
|
|
14
16
|
'After writing, runs full diagnostic check (TS + converter + Godot) unless --no-check is set.')
|
|
15
17
|
.argument('[files...]', 'TypeScript files or glob patterns to convert')
|
|
16
18
|
.option('--ts-dir <dir>', 'TypeScript source directory')
|
|
@@ -19,7 +21,10 @@ export function registerConvertCommand(program) {
|
|
|
19
21
|
.option('--tsconfig <path>', 'Path to tsconfig.json')
|
|
20
22
|
.option('--godot-path <path>', 'Path to Godot executable (enables GDScript validation)')
|
|
21
23
|
.option('--project-root <dir>', 'Godot project root for validation')
|
|
22
|
-
.option('--
|
|
24
|
+
.option('--use-cache', 'Skip conversion for files with a fresh cache entry. Fast, but can keep ' +
|
|
25
|
+
'stale .gd output when types in imported files or global typings changed ' +
|
|
26
|
+
'(freshness is judged by file content only)', false)
|
|
27
|
+
.option('--no-cache', 'Disable cache entirely (no reads, no writes)')
|
|
23
28
|
.option('--emit-on-error', 'Emit output files even when conversion errors occur', false)
|
|
24
29
|
.option('--no-emit', 'Dry-run: convert in memory, check for stale outputs, do not write files')
|
|
25
30
|
.option('--no-check', 'Skip the post-convert diagnostic check (TS + Godot)')
|
|
@@ -41,8 +46,13 @@ export function registerConvertCommand(program) {
|
|
|
41
46
|
// commander: --no-emit sets opts.emit = false, --no-check sets opts.check = false
|
|
42
47
|
const noEmit = opts.emit === false;
|
|
43
48
|
const noCheck = opts.check === false;
|
|
44
|
-
|
|
45
|
-
|
|
49
|
+
// Cache is write-only by default: every run converts fresh (correct even
|
|
50
|
+
// when types in OTHER files changed — content hashes can't see that),
|
|
51
|
+
// but results are still recorded so the watcher / ts-plugin / check
|
|
52
|
+
// phase can reuse them. `--use-cache` opts into the read-side skip;
|
|
53
|
+
// `--no-cache` disables the cache entirely.
|
|
54
|
+
const cache = opts.cache !== false ? new ProjectCache(cfg.cacheDir) : null;
|
|
55
|
+
const useCacheReads = opts.useCache === true && cache !== null;
|
|
46
56
|
debugLog(`${noEmit ? 'Checking' : 'Converting'} ${resolvedFiles.length} file(s)...`);
|
|
47
57
|
// Build the ts.Program once and share it across the write loop and the
|
|
48
58
|
// post-convert checker — avoids re-parsing every .ts file twice.
|
|
@@ -59,12 +69,12 @@ export function registerConvertCommand(program) {
|
|
|
59
69
|
for (const filePath of resolvedFiles) {
|
|
60
70
|
const relPath = relative(cfg.tsDir, filePath);
|
|
61
71
|
const outputPath = resolve(cfg.gdDir, relPath.replace(/\.ts$/, '.gd'));
|
|
62
|
-
if (cache?.isTsToGdFresh(filePath, outputPath)) {
|
|
72
|
+
if (useCacheReads && cache?.isTsToGdFresh(filePath, outputPath)) {
|
|
63
73
|
debugLog(`Skipped (cache): ${outputPath}`);
|
|
64
74
|
skipped++;
|
|
65
75
|
continue;
|
|
66
76
|
}
|
|
67
|
-
if (
|
|
77
|
+
if (useCacheReads && cache?.hasFreshCachedGd(filePath)) {
|
|
68
78
|
const promoted = cache.promoteCachedGd(filePath, outputPath);
|
|
69
79
|
if (promoted && cache.isTsToGdFresh(filePath, outputPath)) {
|
|
70
80
|
debugLog(`Promoted (cache-folder): ${outputPath}`);
|
package/dist/cli/convert.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/cli/convert.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CACV,8FAA8F;QAC5F,8FAA8F,CACjG;SACA,QAAQ,CAAC,YAAY,EAAE,8CAA8C,CAAC;SACtE,MAAM,CAAC,gBAAgB,EAAE,6BAA6B,CAAC;SACvD,MAAM,CAAC,gBAAgB,EAAE,2BAA2B,CAAC;SACrD,MAAM,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,GAAG,CAAC;SACjD,MAAM,CAAC,mBAAmB,EAAE,uBAAuB,CAAC;SACpD,MAAM,CACL,qBAAqB,EACrB,wDAAwD,CACzD;SACA,MAAM,CAAC,sBAAsB,EAAE,mCAAmC,CAAC;SACnE,MAAM,CAAC,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/cli/convert.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,6 +40,15 @@ export interface TransformContext {
|
|
|
40
40
|
* `extends "res://..."` are taken relative to this directory.
|
|
41
41
|
*/
|
|
42
42
|
projectRoot: string;
|
|
43
|
+
/**
|
|
44
|
+
* Godot class registry. Used to recognise Godot built-in types (classes,
|
|
45
|
+
* value-type constructors, global enums) by name when classifying TS type
|
|
46
|
+
* annotations — see {@link tsTypeNodeToGdType}. May be `undefined` when the
|
|
47
|
+
* registry could not be resolved, in which case classification can only
|
|
48
|
+
* emit types it proves are classes/enums via the checker and drops every
|
|
49
|
+
* other name (Godot built-ins can no longer be recognised by name).
|
|
50
|
+
*/
|
|
51
|
+
registry?: GodotClassRegistry;
|
|
43
52
|
}
|
|
44
53
|
/**
|
|
45
54
|
* Sentinel TS class name used for anonymous addon scripts (a `.gd`
|
|
@@ -147,12 +156,19 @@ export declare function isFloatType(type: ts.Type, checker: ts.TypeChecker): boo
|
|
|
147
156
|
/**
|
|
148
157
|
* Converts a TypeScript type to its GDScript type annotation string.
|
|
149
158
|
* Returns null if the type should be omitted.
|
|
159
|
+
*
|
|
160
|
+
* NOTE: unlike {@link tsTypeNodeToGdType}, this `ts.Type`-based variant does
|
|
161
|
+
* NOT classify reference types — it returns the symbol name verbatim for any
|
|
162
|
+
* class-like type, so an `object`/`interface`/unknown type would leak a bogus
|
|
163
|
+
* annotation. It is currently unused for emission (kept only for its own
|
|
164
|
+
* recursion). Do not wire it into an emit path without adding the same
|
|
165
|
+
* class/enum/registry classification `classifyTypeReferenceName` applies.
|
|
150
166
|
*/
|
|
151
167
|
export declare function tsTypeToGdType(type: ts.Type, checker: ts.TypeChecker): string | null;
|
|
152
168
|
/**
|
|
153
169
|
* Converts a TypeScript type annotation node to GDScript type string.
|
|
154
170
|
*/
|
|
155
|
-
export declare function tsTypeNodeToGdType(typeNode: ts.TypeNode | undefined, checker: ts.TypeChecker, sourceFile: ts.SourceFile, className?: string): string | null;
|
|
171
|
+
export declare function tsTypeNodeToGdType(typeNode: ts.TypeNode | undefined, checker: ts.TypeChecker, sourceFile: ts.SourceFile, className?: string, registry?: GodotClassRegistry): string | null;
|
|
156
172
|
/**
|
|
157
173
|
* True when `gdType` refers to a Godot class (Node, Resource, Material, user
|
|
158
174
|
* class, ...) — a type that can legitimately hold `null` in GDScript. False
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/converter/common/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAE1E;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,2FAA2F;IAC3F,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,uEAAuE;IACvE,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,yFAAyF;IACzF,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yBAAyB;IACzB,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IACpB,8BAA8B;IAC9B,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC;IACxB,4CAA4C;IAC5C,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IAC1B,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,yFAAyF;IACzF,QAAQ,EAAE,mBAAmB,CAAC;IAC9B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/converter/common/index.ts"],"names":[],"mappings":"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"}
|