typescript-to-gdscript 0.1.1 → 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.
Files changed (337) hide show
  1. package/README.md +4 -2
  2. package/dist/cli/convert.d.ts.map +1 -1
  3. package/dist/cli/convert.js +15 -5
  4. package/dist/cli/convert.js.map +1 -1
  5. package/dist/converter/ts-to-gd/access-rewrite.d.ts +40 -0
  6. package/dist/converter/ts-to-gd/access-rewrite.d.ts.map +1 -0
  7. package/dist/converter/ts-to-gd/access-rewrite.js +124 -0
  8. package/dist/converter/ts-to-gd/access-rewrite.js.map +1 -0
  9. package/dist/converter/ts-to-gd/expressions.d.ts.map +1 -1
  10. package/dist/converter/ts-to-gd/expressions.js +31 -7
  11. package/dist/converter/ts-to-gd/expressions.js.map +1 -1
  12. package/dist/watcher/check.d.ts +87 -0
  13. package/dist/watcher/check.d.ts.map +1 -0
  14. package/dist/watcher/check.js +209 -0
  15. package/dist/watcher/check.js.map +1 -0
  16. package/dist/watcher/heal.d.ts +66 -0
  17. package/dist/watcher/heal.d.ts.map +1 -0
  18. package/dist/watcher/heal.js +132 -0
  19. package/dist/watcher/heal.js.map +1 -0
  20. package/dist/watcher/index.d.ts +1 -0
  21. package/dist/watcher/index.d.ts.map +1 -1
  22. package/dist/watcher/index.js +48 -52
  23. package/dist/watcher/index.js.map +1 -1
  24. package/package.json +1 -1
  25. package/typings/classes/AccessibilityServer.d.ts +405 -0
  26. package/typings/classes/AnimationLibrary.d.ts +4 -4
  27. package/typings/classes/AnimationNodeBlendSpace1D.d.ts +45 -4
  28. package/typings/classes/AnimationNodeBlendSpace2D.d.ts +45 -4
  29. package/typings/classes/Area3D.d.ts +14 -7
  30. package/typings/classes/AreaLight3D.d.ts +37 -0
  31. package/typings/classes/ArrayMesh.d.ts +15 -0
  32. package/typings/classes/AudioEffectAmplify.d.ts +2 -2
  33. package/typings/classes/AudioEffectBandLimitFilter.d.ts +1 -1
  34. package/typings/classes/AudioEffectBandPassFilter.d.ts +1 -1
  35. package/typings/classes/AudioEffectCapture.d.ts +10 -9
  36. package/typings/classes/AudioEffectChorus.d.ts +57 -28
  37. package/typings/classes/AudioEffectCompressor.d.ts +11 -9
  38. package/typings/classes/AudioEffectDelay.d.ts +21 -15
  39. package/typings/classes/AudioEffectDistortion.d.ts +19 -10
  40. package/typings/classes/AudioEffectEQ.d.ts +2 -2
  41. package/typings/classes/AudioEffectEQ10.d.ts +2 -2
  42. package/typings/classes/AudioEffectEQ21.d.ts +2 -2
  43. package/typings/classes/AudioEffectEQ6.d.ts +2 -2
  44. package/typings/classes/AudioEffectFilter.d.ts +25 -9
  45. package/typings/classes/AudioEffectHardLimiter.d.ts +8 -5
  46. package/typings/classes/AudioEffectHighPassFilter.d.ts +1 -1
  47. package/typings/classes/AudioEffectHighShelfFilter.d.ts +1 -1
  48. package/typings/classes/AudioEffectInstance.d.ts +1 -1
  49. package/typings/classes/AudioEffectLimiter.d.ts +9 -4
  50. package/typings/classes/AudioEffectLowPassFilter.d.ts +1 -1
  51. package/typings/classes/AudioEffectLowShelfFilter.d.ts +1 -1
  52. package/typings/classes/AudioEffectNotchFilter.d.ts +1 -1
  53. package/typings/classes/AudioEffectPanner.d.ts +7 -2
  54. package/typings/classes/AudioEffectPhaser.d.ts +9 -7
  55. package/typings/classes/AudioEffectPitchShift.d.ts +3 -3
  56. package/typings/classes/AudioEffectReverb.d.ts +17 -8
  57. package/typings/classes/AudioEffectSpectrumAnalyzer.d.ts +4 -5
  58. package/typings/classes/AudioEffectStereoEnhance.d.ts +7 -4
  59. package/typings/classes/AudioServer.d.ts +2 -2
  60. package/typings/classes/AudioStreamPlaybackResampled.d.ts +8 -0
  61. package/typings/classes/AudioStreamRandomizer.d.ts +10 -0
  62. package/typings/classes/AwaitTweener.d.ts +10 -0
  63. package/typings/classes/BaseButton.d.ts +1 -1
  64. package/typings/classes/Basis.d.ts +6 -2
  65. package/typings/classes/BlitMaterial.d.ts +22 -0
  66. package/typings/classes/CPUParticles2D.d.ts +2 -2
  67. package/typings/classes/CPUParticles3D.d.ts +2 -2
  68. package/typings/classes/Camera3D.d.ts +1 -1
  69. package/typings/classes/CameraAttributes.d.ts +1 -0
  70. package/typings/classes/CameraFeed.d.ts +4 -0
  71. package/typings/classes/CanvasItem.d.ts +16 -1
  72. package/typings/classes/CodeEdit.d.ts +6 -0
  73. package/typings/classes/CollisionObject2D.d.ts +6 -0
  74. package/typings/classes/CollisionPolygon2D.d.ts +5 -0
  75. package/typings/classes/CollisionShape2D.d.ts +5 -0
  76. package/typings/classes/Container.d.ts +7 -0
  77. package/typings/classes/Control.d.ts +127 -9
  78. package/typings/classes/Curve.d.ts +26 -1
  79. package/typings/classes/Curve2D.d.ts +15 -0
  80. package/typings/classes/Curve3D.d.ts +20 -0
  81. package/typings/classes/DPITexture.d.ts +14 -0
  82. package/typings/classes/Decal.d.ts +1 -0
  83. package/typings/classes/Dictionary.d.ts +1 -0
  84. package/typings/classes/DirAccess.d.ts +6 -1
  85. package/typings/classes/DisplayServer.d.ts +161 -9
  86. package/typings/classes/DrawableTexture2D.d.ts +43 -0
  87. package/typings/classes/EditorCommandPalette.d.ts +0 -2
  88. package/typings/classes/EditorContextMenuPlugin.d.ts +4 -0
  89. package/typings/classes/EditorDock.d.ts +10 -5
  90. package/typings/classes/EditorExportPlatform.d.ts +4 -2
  91. package/typings/classes/EditorExportPlugin.d.ts +7 -0
  92. package/typings/classes/EditorFeatureProfile.d.ts +1 -1
  93. package/typings/classes/EditorFileSystem.d.ts +2 -0
  94. package/typings/classes/EditorInspector.d.ts +10 -0
  95. package/typings/classes/EditorInterface.d.ts +6 -4
  96. package/typings/classes/EditorNode3DGizmoPlugin.d.ts +4 -0
  97. package/typings/classes/EditorPlugin.d.ts +4 -4
  98. package/typings/classes/EditorResourcePicker.d.ts +2 -1
  99. package/typings/classes/EditorSceneFormatImporter.d.ts +23 -0
  100. package/typings/classes/EditorSettings.d.ts +241 -140
  101. package/typings/classes/EditorSpinSlider.d.ts +6 -0
  102. package/typings/classes/EditorTranslationParserPlugin.d.ts +4 -0
  103. package/typings/classes/EditorVCSInterface.d.ts +6 -2
  104. package/typings/classes/Environment.d.ts +7 -2
  105. package/typings/classes/FileAccess.d.ts +1 -1
  106. package/typings/classes/FileDialog.d.ts +16 -1
  107. package/typings/classes/FoldableContainer.d.ts +1 -1
  108. package/typings/classes/Font.d.ts +15 -3
  109. package/typings/classes/FontVariation.d.ts +10 -0
  110. package/typings/classes/GDScript.d.ts +8 -0
  111. package/typings/classes/GDScriptLanguageProtocol.d.ts +25 -0
  112. package/typings/classes/GDScriptSyntaxHighlighter.d.ts +6 -0
  113. package/typings/classes/GDScriptTextDocument.d.ts +27 -0
  114. package/typings/classes/GDScriptWorkspace.d.ts +17 -0
  115. package/typings/classes/GPUParticles2D.d.ts +2 -2
  116. package/typings/classes/GPUParticles3D.d.ts +19 -2
  117. package/typings/classes/Geometry2D.d.ts +2 -2
  118. package/typings/classes/GeometryInstance3D.d.ts +1 -1
  119. package/typings/classes/GradientTexture2D.d.ts +2 -0
  120. package/typings/classes/Image.d.ts +7 -4
  121. package/typings/classes/ImageFormatLoader.d.ts +5 -0
  122. package/typings/classes/ImageTexture.d.ts +0 -2
  123. package/typings/classes/ImporterMesh.d.ts +6 -0
  124. package/typings/classes/Input.d.ts +159 -15
  125. package/typings/classes/InputEvent.d.ts +8 -0
  126. package/typings/classes/InputEventGesture.d.ts +2 -3
  127. package/typings/classes/InputEventMouse.d.ts +2 -3
  128. package/typings/classes/InputEventMouseMotion.d.ts +2 -2
  129. package/typings/classes/InputEventWithModifiers.d.ts +2 -3
  130. package/typings/classes/InputMap.d.ts +3 -0
  131. package/typings/classes/ItemList.d.ts +29 -2
  132. package/typings/classes/IterateIK3D.d.ts +6 -3
  133. package/typings/classes/JavaClassWrapper.d.ts +13 -0
  134. package/typings/classes/JavaScriptBridge.d.ts +1 -1
  135. package/typings/classes/Joint3D.d.ts +1 -0
  136. package/typings/classes/Label.d.ts +1 -0
  137. package/typings/classes/LabelSettings.d.ts +25 -0
  138. package/typings/classes/Light3D.d.ts +1 -1
  139. package/typings/classes/Logger.d.ts +1 -1
  140. package/typings/classes/LookAtModifier3D.d.ts +2 -1
  141. package/typings/classes/MainLoop.d.ts +4 -0
  142. package/typings/classes/MenuButton.d.ts +35 -0
  143. package/typings/classes/MeshLibrary.d.ts +2 -0
  144. package/typings/classes/MovieWriter.d.ts +2 -0
  145. package/typings/classes/MultiplayerPeerExtension.d.ts +9 -9
  146. package/typings/classes/NativeMenu.d.ts +10 -3
  147. package/typings/classes/Node.d.ts +15 -5
  148. package/typings/classes/Node3D.d.ts +6 -4
  149. package/typings/classes/OS.d.ts +3 -3
  150. package/typings/classes/Object.d.ts +9 -3
  151. package/typings/classes/OptimizedTranslation.d.ts +2 -2
  152. package/typings/classes/OptionButton.d.ts +51 -1
  153. package/typings/classes/PCKPacker.d.ts +4 -0
  154. package/typings/classes/PacketPeerExtension.d.ts +1 -1
  155. package/typings/classes/ParticleProcessMaterial.d.ts +63 -0
  156. package/typings/classes/PhysicsDirectBodyState2D.d.ts +2 -1
  157. package/typings/classes/PhysicsDirectBodyState3D.d.ts +2 -1
  158. package/typings/classes/PhysicsDirectSpaceState2DExtension.d.ts +6 -6
  159. package/typings/classes/PhysicsDirectSpaceState3DExtension.d.ts +6 -6
  160. package/typings/classes/PhysicsServer2D.d.ts +2 -2
  161. package/typings/classes/PhysicsServer2DExtension.d.ts +6 -6
  162. package/typings/classes/PhysicsServer3D.d.ts +145 -42
  163. package/typings/classes/PhysicsServer3DExtension.d.ts +1 -1
  164. package/typings/classes/PopupMenu.d.ts +74 -8
  165. package/typings/classes/PopupPanel.d.ts +2 -0
  166. package/typings/classes/PortableCompressedTexture2D.d.ts +0 -2
  167. package/typings/classes/ProjectSettings.d.ts +62 -10
  168. package/typings/classes/Quaternion.d.ts +2 -2
  169. package/typings/classes/RDAccelerationStructureGeometry.d.ts +42 -0
  170. package/typings/classes/RDAccelerationStructureInstance.d.ts +34 -0
  171. package/typings/classes/RDHitGroup.d.ts +20 -0
  172. package/typings/classes/RDPipelineShader.d.ts +14 -0
  173. package/typings/classes/RDShaderSPIRV.d.ts +30 -0
  174. package/typings/classes/RDShaderSource.d.ts +10 -0
  175. package/typings/classes/RandomNumberGenerator.d.ts +4 -2
  176. package/typings/classes/RenderSceneBuffersConfiguration.d.ts +4 -1
  177. package/typings/classes/RenderingDevice.d.ts +175 -1
  178. package/typings/classes/RenderingServer.d.ts +264 -14
  179. package/typings/classes/Resource.d.ts +4 -2
  180. package/typings/classes/ResourceImporterDynamicFont.d.ts +3 -1
  181. package/typings/classes/ResourceImporterOBJ.d.ts +1 -1
  182. package/typings/classes/ResourceImporterSVG.d.ts +10 -0
  183. package/typings/classes/ResourceImporterScene.d.ts +11 -3
  184. package/typings/classes/ResourceImporterTexture.d.ts +2 -2
  185. package/typings/classes/RichTextLabel.d.ts +14 -6
  186. package/typings/classes/Script.d.ts +2 -0
  187. package/typings/classes/ScriptEditor.d.ts +13 -0
  188. package/typings/classes/ScriptLanguageExtension.d.ts +7 -0
  189. package/typings/classes/ScrollContainer.d.ts +17 -5
  190. package/typings/classes/Shader.d.ts +2 -0
  191. package/typings/classes/Shape3D.d.ts +1 -0
  192. package/typings/classes/SkeletonModification2DJiggle.d.ts +4 -0
  193. package/typings/classes/SplitContainer.d.ts +6 -0
  194. package/typings/classes/SpringBoneSimulator3D.d.ts +4 -2
  195. package/typings/classes/SpriteFrames.d.ts +20 -4
  196. package/typings/classes/StreamPeerExtension.d.ts +2 -2
  197. package/typings/classes/String.d.ts +1 -1
  198. package/typings/classes/SubViewport.d.ts +4 -0
  199. package/typings/classes/TabBar.d.ts +20 -0
  200. package/typings/classes/TabContainer.d.ts +21 -3
  201. package/typings/classes/TextEdit.d.ts +5 -2
  202. package/typings/classes/TextServer.d.ts +25 -1
  203. package/typings/classes/TextServerExtension.d.ts +25 -1
  204. package/typings/classes/Texture2D.d.ts +14 -0
  205. package/typings/classes/TextureRect.d.ts +4 -1
  206. package/typings/classes/TileSet.d.ts +3 -1
  207. package/typings/classes/Tree.d.ts +25 -9
  208. package/typings/classes/TreeItem.d.ts +17 -2
  209. package/typings/classes/Tween.d.ts +13 -0
  210. package/typings/classes/UndoRedo.d.ts +2 -2
  211. package/typings/classes/Vector2.d.ts +4 -2
  212. package/typings/classes/Vector2i.d.ts +4 -2
  213. package/typings/classes/Vector3.d.ts +4 -2
  214. package/typings/classes/Vector3i.d.ts +4 -2
  215. package/typings/classes/Vector4.d.ts +4 -2
  216. package/typings/classes/Vector4i.d.ts +4 -2
  217. package/typings/classes/Viewport.d.ts +27 -1
  218. package/typings/classes/VirtualJoystick.d.ts +94 -0
  219. package/typings/classes/VoxelGIData.d.ts +10 -0
  220. package/typings/classes/Window.d.ts +41 -4
  221. package/typings/classes/XRCamera3D.d.ts +1 -1
  222. package/typings/classes/XRServer.d.ts +2 -0
  223. package/typings/classes/_globals.d.ts +55 -18
  224. package/typings/classes/index.d.ts +15 -112
  225. package/typings/godot-class-registry.json +2120 -3693
  226. package/typings/classes/VisualShader.d.ts +0 -110
  227. package/typings/classes/VisualShaderNode.d.ts +0 -63
  228. package/typings/classes/VisualShaderNodeBillboard.d.ts +0 -28
  229. package/typings/classes/VisualShaderNodeBooleanConstant.d.ts +0 -10
  230. package/typings/classes/VisualShaderNodeBooleanParameter.d.ts +0 -14
  231. package/typings/classes/VisualShaderNodeClamp.d.ts +0 -26
  232. package/typings/classes/VisualShaderNodeColorConstant.d.ts +0 -10
  233. package/typings/classes/VisualShaderNodeColorFunc.d.ts +0 -32
  234. package/typings/classes/VisualShaderNodeColorOp.d.ts +0 -32
  235. package/typings/classes/VisualShaderNodeColorParameter.d.ts +0 -14
  236. package/typings/classes/VisualShaderNodeComment.d.ts +0 -12
  237. package/typings/classes/VisualShaderNodeCompare.d.ts +0 -68
  238. package/typings/classes/VisualShaderNodeConstant.d.ts +0 -6
  239. package/typings/classes/VisualShaderNodeCubemap.d.ts +0 -43
  240. package/typings/classes/VisualShaderNodeCubemapParameter.d.ts +0 -6
  241. package/typings/classes/VisualShaderNodeCurveTexture.d.ts +0 -10
  242. package/typings/classes/VisualShaderNodeCurveXYZTexture.d.ts +0 -10
  243. package/typings/classes/VisualShaderNodeCustom.d.ts +0 -122
  244. package/typings/classes/VisualShaderNodeDerivativeFunc.d.ts +0 -56
  245. package/typings/classes/VisualShaderNodeDeterminant.d.ts +0 -6
  246. package/typings/classes/VisualShaderNodeDistanceFade.d.ts +0 -6
  247. package/typings/classes/VisualShaderNodeDotProduct.d.ts +0 -6
  248. package/typings/classes/VisualShaderNodeExpression.d.ts +0 -12
  249. package/typings/classes/VisualShaderNodeFaceForward.d.ts +0 -8
  250. package/typings/classes/VisualShaderNodeFloatConstant.d.ts +0 -10
  251. package/typings/classes/VisualShaderNodeFloatFunc.d.ts +0 -108
  252. package/typings/classes/VisualShaderNodeFloatOp.d.ts +0 -36
  253. package/typings/classes/VisualShaderNodeFloatParameter.d.ts +0 -52
  254. package/typings/classes/VisualShaderNodeFrame.d.ts +0 -35
  255. package/typings/classes/VisualShaderNodeFresnel.d.ts +0 -6
  256. package/typings/classes/VisualShaderNodeGlobalExpression.d.ts +0 -6
  257. package/typings/classes/VisualShaderNodeGroupBase.d.ts +0 -60
  258. package/typings/classes/VisualShaderNodeIf.d.ts +0 -8
  259. package/typings/classes/VisualShaderNodeInput.d.ts +0 -20
  260. package/typings/classes/VisualShaderNodeIntConstant.d.ts +0 -10
  261. package/typings/classes/VisualShaderNodeIntFunc.d.ts +0 -24
  262. package/typings/classes/VisualShaderNodeIntOp.d.ts +0 -48
  263. package/typings/classes/VisualShaderNodeIntParameter.d.ts +0 -58
  264. package/typings/classes/VisualShaderNodeIs.d.ts +0 -18
  265. package/typings/classes/VisualShaderNodeLinearSceneDepth.d.ts +0 -6
  266. package/typings/classes/VisualShaderNodeMix.d.ts +0 -28
  267. package/typings/classes/VisualShaderNodeMultiplyAdd.d.ts +0 -22
  268. package/typings/classes/VisualShaderNodeOuterProduct.d.ts +0 -6
  269. package/typings/classes/VisualShaderNodeOutput.d.ts +0 -6
  270. package/typings/classes/VisualShaderNodeParameter.d.ts +0 -32
  271. package/typings/classes/VisualShaderNodeParameterRef.d.ts +0 -10
  272. package/typings/classes/VisualShaderNodeParticleAccelerator.d.ts +0 -20
  273. package/typings/classes/VisualShaderNodeParticleBoxEmitter.d.ts +0 -6
  274. package/typings/classes/VisualShaderNodeParticleConeVelocity.d.ts +0 -6
  275. package/typings/classes/VisualShaderNodeParticleEmit.d.ts +0 -22
  276. package/typings/classes/VisualShaderNodeParticleEmitter.d.ts +0 -12
  277. package/typings/classes/VisualShaderNodeParticleMeshEmitter.d.ts +0 -20
  278. package/typings/classes/VisualShaderNodeParticleMultiplyByAxisAngle.d.ts +0 -10
  279. package/typings/classes/VisualShaderNodeParticleOutput.d.ts +0 -6
  280. package/typings/classes/VisualShaderNodeParticleRandomness.d.ts +0 -22
  281. package/typings/classes/VisualShaderNodeParticleRingEmitter.d.ts +0 -6
  282. package/typings/classes/VisualShaderNodeParticleSphereEmitter.d.ts +0 -6
  283. package/typings/classes/VisualShaderNodeProximityFade.d.ts +0 -6
  284. package/typings/classes/VisualShaderNodeRandomRange.d.ts +0 -6
  285. package/typings/classes/VisualShaderNodeRemap.d.ts +0 -33
  286. package/typings/classes/VisualShaderNodeReroute.d.ts +0 -8
  287. package/typings/classes/VisualShaderNodeResizableBase.d.ts +0 -10
  288. package/typings/classes/VisualShaderNodeRotationByAxis.d.ts +0 -6
  289. package/typings/classes/VisualShaderNodeSDFRaymarch.d.ts +0 -6
  290. package/typings/classes/VisualShaderNodeSDFToScreenUV.d.ts +0 -8
  291. package/typings/classes/VisualShaderNodeSample3D.d.ts +0 -18
  292. package/typings/classes/VisualShaderNodeScreenNormalWorldSpace.d.ts +0 -6
  293. package/typings/classes/VisualShaderNodeScreenUVToSDF.d.ts +0 -8
  294. package/typings/classes/VisualShaderNodeSmoothStep.d.ts +0 -28
  295. package/typings/classes/VisualShaderNodeStep.d.ts +0 -28
  296. package/typings/classes/VisualShaderNodeSwitch.d.ts +0 -30
  297. package/typings/classes/VisualShaderNodeTexture.d.ts +0 -57
  298. package/typings/classes/VisualShaderNodeTexture2DArray.d.ts +0 -12
  299. package/typings/classes/VisualShaderNodeTexture2DArrayParameter.d.ts +0 -6
  300. package/typings/classes/VisualShaderNodeTexture2DParameter.d.ts +0 -6
  301. package/typings/classes/VisualShaderNodeTexture3D.d.ts +0 -12
  302. package/typings/classes/VisualShaderNodeTexture3DParameter.d.ts +0 -6
  303. package/typings/classes/VisualShaderNodeTextureParameter.d.ts +0 -104
  304. package/typings/classes/VisualShaderNodeTextureParameterTriplanar.d.ts +0 -6
  305. package/typings/classes/VisualShaderNodeTextureSDF.d.ts +0 -6
  306. package/typings/classes/VisualShaderNodeTextureSDFNormal.d.ts +0 -6
  307. package/typings/classes/VisualShaderNodeTransformCompose.d.ts +0 -6
  308. package/typings/classes/VisualShaderNodeTransformConstant.d.ts +0 -10
  309. package/typings/classes/VisualShaderNodeTransformDecompose.d.ts +0 -6
  310. package/typings/classes/VisualShaderNodeTransformFunc.d.ts +0 -18
  311. package/typings/classes/VisualShaderNodeTransformOp.d.ts +0 -32
  312. package/typings/classes/VisualShaderNodeTransformParameter.d.ts +0 -14
  313. package/typings/classes/VisualShaderNodeTransformVecMult.d.ts +0 -22
  314. package/typings/classes/VisualShaderNodeUIntConstant.d.ts +0 -10
  315. package/typings/classes/VisualShaderNodeUIntFunc.d.ts +0 -20
  316. package/typings/classes/VisualShaderNodeUIntOp.d.ts +0 -48
  317. package/typings/classes/VisualShaderNodeUIntParameter.d.ts +0 -16
  318. package/typings/classes/VisualShaderNodeUVFunc.d.ts +0 -22
  319. package/typings/classes/VisualShaderNodeUVPolarCoord.d.ts +0 -6
  320. package/typings/classes/VisualShaderNodeVarying.d.ts +0 -14
  321. package/typings/classes/VisualShaderNodeVaryingGetter.d.ts +0 -6
  322. package/typings/classes/VisualShaderNodeVaryingSetter.d.ts +0 -6
  323. package/typings/classes/VisualShaderNodeVec2Constant.d.ts +0 -10
  324. package/typings/classes/VisualShaderNodeVec2Parameter.d.ts +0 -14
  325. package/typings/classes/VisualShaderNodeVec3Constant.d.ts +0 -10
  326. package/typings/classes/VisualShaderNodeVec3Parameter.d.ts +0 -14
  327. package/typings/classes/VisualShaderNodeVec4Constant.d.ts +0 -10
  328. package/typings/classes/VisualShaderNodeVec4Parameter.d.ts +0 -14
  329. package/typings/classes/VisualShaderNodeVectorBase.d.ts +0 -20
  330. package/typings/classes/VisualShaderNodeVectorCompose.d.ts +0 -8
  331. package/typings/classes/VisualShaderNodeVectorDecompose.d.ts +0 -8
  332. package/typings/classes/VisualShaderNodeVectorDistance.d.ts +0 -6
  333. package/typings/classes/VisualShaderNodeVectorFunc.d.ts +0 -84
  334. package/typings/classes/VisualShaderNodeVectorLen.d.ts +0 -6
  335. package/typings/classes/VisualShaderNodeVectorOp.d.ts +0 -42
  336. package/typings/classes/VisualShaderNodeVectorRefract.d.ts +0 -8
  337. package/typings/classes/VisualShaderNodeWorldPositionFromDepth.d.ts +0 -8
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Debounced full-project diagnostic check + error-driven self-heal for
3
+ * watch mode. Extracted from the Watcher class (file-size rule); the
4
+ * watcher delegates here via a small deps interface.
5
+ *
6
+ * Concurrency: checks now WRITE files (the heal pass), so overlapping
7
+ * runs are forbidden — `run()` is guarded by an in-flight flag, and a
8
+ * run requested while one is active is re-scheduled (debounced) after
9
+ * the active one finishes.
10
+ */
11
+ import ts from 'typescript';
12
+ import { createTsProgram } from "../parser/typescript/index.js";
13
+ import { collectProjectDiagnostics, printDiagnostics, summarizeDiagnostics, } from "../checker/index.js";
14
+ import { diagnosticSignatures, computeSuspects, healFiles, normPath, } from "./heal.js";
15
+ export class CheckRunner {
16
+ deps;
17
+ /**
18
+ * Per-file diagnostic signature from the previous completed check.
19
+ * `null` = no baseline yet (first check after startup) — then every
20
+ * file with diagnostics counts as changed, intentionally healing
21
+ * stale-error files left over from previous sessions.
22
+ */
23
+ prevDiagSignatures = null;
24
+ /**
25
+ * Normalized paths of files converted since the last check. Their
26
+ * diagnostic signature legitimately changed (they were edited), so
27
+ * they're excluded from heal suspects.
28
+ */
29
+ batchConverted = new Set();
30
+ /**
31
+ * Files whose diagnostics moved in the post-heal recheck without
32
+ * having been healed themselves (e.g. a heal-write changed what Godot
33
+ * reports about a third file). They couldn't be acted on in that
34
+ * cycle (single heal iteration per check), so they're carried over as
35
+ * pre-seeded suspects for the next one.
36
+ */
37
+ pendingHealSuspects = new Set();
38
+ running = false;
39
+ rerunRequested = false;
40
+ disposed = false;
41
+ current = null;
42
+ constructor(deps) {
43
+ this.deps = deps;
44
+ }
45
+ /** Record a file converted by the watcher's batch path. */
46
+ noteConverted(filePath) {
47
+ this.batchConverted.add(normPath(filePath));
48
+ }
49
+ /**
50
+ * Run one check cycle. Never overlaps: a call while a cycle is active
51
+ * requests a re-schedule instead (the heal pass writes files — two
52
+ * interleaved chains could tear writes and stomp baselines).
53
+ */
54
+ run() {
55
+ if (this.disposed)
56
+ return;
57
+ if (this.running) {
58
+ this.rerunRequested = true;
59
+ return;
60
+ }
61
+ this.running = true;
62
+ this.current = this.runOnce()
63
+ .catch((err) => {
64
+ console.error(`[check] Failed: ${err.message}`);
65
+ })
66
+ .finally(() => {
67
+ this.running = false;
68
+ this.current = null;
69
+ if (this.rerunRequested && !this.disposed) {
70
+ this.rerunRequested = false;
71
+ this.deps.requestRecheck();
72
+ }
73
+ });
74
+ }
75
+ /** Block new runs and wait for the in-flight one (if any) to settle. */
76
+ async dispose() {
77
+ this.disposed = true;
78
+ this.rerunRequested = false;
79
+ if (this.current)
80
+ await this.current;
81
+ }
82
+ async runOnce() {
83
+ const tsFiles = [...this.deps.getTsFiles()].filter((f) => !f.endsWith('.d.ts'));
84
+ if (tsFiles.length === 0) {
85
+ this.deps.debugLog('Diagnostic check skipped — no .ts files');
86
+ return;
87
+ }
88
+ const checkStart = Date.now();
89
+ this.deps.debugLog(`Diagnostic check starting (${tsFiles.length} file(s), program=${this.deps.getProgram() ? 'reused' : 'fresh'})`);
90
+ const firstResult = await this.collect(tsFiles);
91
+ const { result, rewrote } = await this.healAndRecheck(firstResult, tsFiles);
92
+ this.deps.debugLog(`Diagnostic check finished in ${Date.now() - checkStart}ms`);
93
+ const summary = summarizeDiagnostics(result);
94
+ // Only clear the console when there's something to show — preserves the
95
+ // recent per-file conversion logs when the project is clean.
96
+ if (summary) {
97
+ process.stdout.write('\x1Bc');
98
+ if (rewrote.length > 0) {
99
+ console.log(`[heal] Reconverted ${rewrote.length} stale file(s):`);
100
+ for (const f of rewrote)
101
+ console.log(` ${f}`);
102
+ console.log('');
103
+ }
104
+ printDiagnostics(result.tsDiagnostics, 'TS');
105
+ printDiagnostics(result.converterDiagnostics, 'CONV');
106
+ printDiagnostics(result.godotDiagnostics, 'GD');
107
+ console.log('[check] complete:');
108
+ console.log(summary);
109
+ }
110
+ else {
111
+ if (rewrote.length > 0) {
112
+ console.log(`[heal] Reconverted ${rewrote.length} stale file(s).`);
113
+ }
114
+ console.log('[check] No issues found.');
115
+ }
116
+ }
117
+ /** One full-project diagnostics pass (reuses the watcher's program). */
118
+ collect(tsFiles) {
119
+ return collectProjectDiagnostics({
120
+ tsDir: this.deps.tsDir,
121
+ gdDir: this.deps.gdDir,
122
+ projectRoot: this.deps.projectRoot,
123
+ tsFiles,
124
+ tsConfigPath: this.deps.tsConfigPath,
125
+ cache: this.deps.cache,
126
+ godotPath: this.deps.godotPath,
127
+ cacheDir: this.deps.cacheDir,
128
+ noEmit: false,
129
+ program: this.deps.getProgram() ?? undefined,
130
+ onDebug: this.deps.debug ? (msg) => this.deps.debugLog(msg) : undefined,
131
+ });
132
+ }
133
+ /**
134
+ * Error-driven self-heal. Files whose diagnostic signature changed
135
+ * without having been converted in the current batch are presumed
136
+ * stale (a type they depend on changed in another file): reconvert
137
+ * them in memory and rewrite the ones whose bytes differ. When bytes
138
+ * changed, rerun the diagnostic check ONCE; suspects that surface
139
+ * only in that second pass are carried over to the next cycle (a
140
+ * recheck is requested), keeping the one-heal-per-cycle bound while
141
+ * still converging.
142
+ */
143
+ async healAndRecheck(result, tsFiles) {
144
+ const curr = diagnosticSignatures(result);
145
+ const projectTsFiles = new Set(tsFiles.map(normPath));
146
+ // Snapshot + reset synchronously: files converted while this check
147
+ // is awaiting belong to the NEXT cycle's exclusion set.
148
+ const batch = this.batchConverted;
149
+ this.batchConverted = new Set();
150
+ const carried = [...this.pendingHealSuspects].filter((f) => projectTsFiles.has(f) && !batch.has(f));
151
+ this.pendingHealSuspects = new Set();
152
+ const suspects = [
153
+ ...new Set([
154
+ ...computeSuspects(this.prevDiagSignatures, curr, {
155
+ batchConverted: batch,
156
+ projectTsFiles,
157
+ }),
158
+ ...carried,
159
+ ]),
160
+ ];
161
+ let final = result;
162
+ const rewroteAll = [];
163
+ if (suspects.length > 0) {
164
+ this.deps.debugLog(`Heal: ${suspects.length} suspect file(s) with changed diagnostics`);
165
+ const program = this.deps.getProgram() ??
166
+ createTsProgram({
167
+ rootDir: this.deps.tsDir,
168
+ files: tsFiles,
169
+ tsConfigPath: this.deps.tsConfigPath,
170
+ });
171
+ this.deps.setProgram(program);
172
+ const { rewrote } = healFiles({
173
+ files: suspects,
174
+ program,
175
+ cache: this.deps.cache,
176
+ tsDir: this.deps.tsDir,
177
+ gdDir: this.deps.gdDir,
178
+ projectRoot: this.deps.projectRoot,
179
+ tsConfigPath: this.deps.tsConfigPath,
180
+ emitOnError: this.deps.emitOnError,
181
+ onLog: (file, msg) => this.deps.log(file, msg, 'info'),
182
+ });
183
+ rewroteAll.push(...rewrote);
184
+ if (rewrote.length > 0) {
185
+ this.deps.cache.save();
186
+ this.deps.debugLog(`Heal rewrote ${rewrote.length} file(s) — re-running diagnostic check once`);
187
+ final = await this.collect(tsFiles);
188
+ // Heal-writes can move diagnostics of files we did NOT heal
189
+ // (e.g. Godot's view of a third file changes when a healed .gd
190
+ // changes a type annotation). All suspects are fresh now, so
191
+ // only OTHER files qualify — carry them into the next cycle.
192
+ const second = diagnosticSignatures(final);
193
+ const next = computeSuspects(curr, second, {
194
+ batchConverted: new Set(suspects),
195
+ projectTsFiles,
196
+ });
197
+ if (next.length > 0) {
198
+ for (const f of next)
199
+ this.pendingHealSuspects.add(f);
200
+ this.deps.debugLog(`Heal: ${next.length} file(s) affected by heal-writes — recheck scheduled`);
201
+ this.deps.requestRecheck();
202
+ }
203
+ }
204
+ }
205
+ this.prevDiagSignatures = diagnosticSignatures(final);
206
+ return { result: final, rewrote: rewroteAll };
207
+ }
208
+ }
209
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/watcher/check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Error-driven self-healing for watch mode.
3
+ *
4
+ * The watcher reconverts only files whose own content changed, so a type
5
+ * change in `b.ts` can leave `a.gd` stale. By design every *dangerous*
6
+ * stale output surfaces as a fresh diagnostic each check cycle (TS
7
+ * diagnostics are recomputed from the live program; Godot validates the
8
+ * actual on-disk `.gd`). This module turns those diagnostics into the
9
+ * "affected set": files whose diagnostic signature changed — without
10
+ * having been reconverted in the current batch — are reconverted in
11
+ * memory and rewritten when their output bytes differ.
12
+ *
13
+ * Positions are deliberately excluded from signatures: editing `b.ts`
14
+ * shifts line numbers in ITS diagnostics, not in other files'. A file
15
+ * whose only delta is diagnostic positions was edited itself (and thus
16
+ * sits in the converted batch, which is excluded anyway).
17
+ */
18
+ import type ts from 'typescript';
19
+ import type { CheckResult } from '../checker/index.ts';
20
+ import type { ProjectCache } from '../cache/index.ts';
21
+ /** Normalize a path for map keys (forward slashes). */
22
+ export declare function normPath(p: string): string;
23
+ /**
24
+ * Per-file signature of a check result's diagnostics. Key: normalized
25
+ * file path. Value: hash over the SORTED set of `severity|message`
26
+ * entries — positions excluded, duplicates collapse.
27
+ */
28
+ export declare function diagnosticSignatures(result: CheckResult): Map<string, string>;
29
+ /**
30
+ * Files whose diagnostic signature changed between two check runs
31
+ * (appeared, disappeared, or differs), excluding files converted in the
32
+ * current batch (already fresh) and anything that isn't a watched
33
+ * project `.ts` file.
34
+ *
35
+ * `prev === null` means "no baseline yet" (first check after startup):
36
+ * every file with diagnostics counts as changed — intentionally heals
37
+ * stale-error files left over from previous sessions.
38
+ */
39
+ export declare function computeSuspects(prev: Map<string, string> | null, curr: Map<string, string>, options: {
40
+ /** Normalized paths converted in the current batch. */
41
+ batchConverted: Set<string>;
42
+ /** Normalized paths of all watched project .ts files. */
43
+ projectTsFiles: Set<string>;
44
+ }): string[];
45
+ export interface HealOptions {
46
+ files: string[];
47
+ program: ts.Program;
48
+ cache: ProjectCache;
49
+ tsDir: string;
50
+ gdDir: string;
51
+ projectRoot: string;
52
+ tsConfigPath?: string;
53
+ emitOnError?: boolean;
54
+ onLog?: (file: string, message: string) => void;
55
+ }
56
+ /**
57
+ * Reconvert `files` in memory and rewrite the ones whose generated
58
+ * bytes differ from disk (cache entries refreshed alongside). Returns
59
+ * the list of `.gd` paths actually rewritten — non-empty means the
60
+ * caller should rerun the diagnostic check ONCE so Godot validates the
61
+ * healed bytes and converter diagnostics come from the fresh entries.
62
+ */
63
+ export declare function healFiles(options: HealOptions): {
64
+ rewrote: string[];
65
+ };
66
+ //# sourceMappingURL=heal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heal.d.ts","sourceRoot":"","sources":["../../src/watcher/heal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAIjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,uDAAuD;AACvD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAwB7E;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,EAChC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACzB,OAAO,EAAE;IACP,uDAAuD;IACvD,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,yDAAyD;IACzD,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B,GACA,MAAM,EAAE,CAYV;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAgErE"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Error-driven self-healing for watch mode.
3
+ *
4
+ * The watcher reconverts only files whose own content changed, so a type
5
+ * change in `b.ts` can leave `a.gd` stale. By design every *dangerous*
6
+ * stale output surfaces as a fresh diagnostic each check cycle (TS
7
+ * diagnostics are recomputed from the live program; Godot validates the
8
+ * actual on-disk `.gd`). This module turns those diagnostics into the
9
+ * "affected set": files whose diagnostic signature changed — without
10
+ * having been reconverted in the current batch — are reconverted in
11
+ * memory and rewritten when their output bytes differ.
12
+ *
13
+ * Positions are deliberately excluded from signatures: editing `b.ts`
14
+ * shifts line numbers in ITS diagnostics, not in other files'. A file
15
+ * whose only delta is diagnostic positions was edited itself (and thus
16
+ * sits in the converted batch, which is excluded anyway).
17
+ */
18
+ import { createHash } from 'crypto';
19
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
20
+ import { dirname, relative, resolve } from 'path';
21
+ import { convertTsToGd } from "../converter/ts-to-gd/index.js";
22
+ import { isConversionErrorSeverity } from "../converter/common/index.js";
23
+ /** Normalize a path for map keys (forward slashes). */
24
+ export function normPath(p) {
25
+ return p.replace(/\\/g, '/');
26
+ }
27
+ /**
28
+ * Per-file signature of a check result's diagnostics. Key: normalized
29
+ * file path. Value: hash over the SORTED set of `severity|message`
30
+ * entries — positions excluded, duplicates collapse.
31
+ */
32
+ export function diagnosticSignatures(result) {
33
+ const byFile = new Map();
34
+ const collect = (diags, source) => {
35
+ for (const d of diags) {
36
+ if (d.severity === 'info')
37
+ continue;
38
+ const key = normPath(d.file);
39
+ const list = byFile.get(key) ?? [];
40
+ list.push(`${source}|${d.severity}|${d.message}`);
41
+ byFile.set(key, list);
42
+ }
43
+ };
44
+ collect(result.tsDiagnostics, 'TS');
45
+ collect(result.converterDiagnostics, 'CONV');
46
+ collect(result.godotDiagnostics, 'GD');
47
+ const signatures = new Map();
48
+ for (const [file, entries] of byFile) {
49
+ const sorted = [...new Set(entries)].sort().join('\n');
50
+ signatures.set(file, createHash('md5').update(sorted).digest('hex').slice(0, 16));
51
+ }
52
+ return signatures;
53
+ }
54
+ /**
55
+ * Files whose diagnostic signature changed between two check runs
56
+ * (appeared, disappeared, or differs), excluding files converted in the
57
+ * current batch (already fresh) and anything that isn't a watched
58
+ * project `.ts` file.
59
+ *
60
+ * `prev === null` means "no baseline yet" (first check after startup):
61
+ * every file with diagnostics counts as changed — intentionally heals
62
+ * stale-error files left over from previous sessions.
63
+ */
64
+ export function computeSuspects(prev, curr, options) {
65
+ const prevMap = prev ?? new Map();
66
+ const candidates = new Set([...prevMap.keys(), ...curr.keys()]);
67
+ const suspects = [];
68
+ for (const file of candidates) {
69
+ if (prevMap.get(file) === curr.get(file))
70
+ continue;
71
+ if (options.batchConverted.has(file))
72
+ continue;
73
+ if (!file.endsWith('.ts') || file.endsWith('.d.ts'))
74
+ continue;
75
+ if (!options.projectTsFiles.has(file))
76
+ continue;
77
+ suspects.push(file);
78
+ }
79
+ return suspects;
80
+ }
81
+ /**
82
+ * Reconvert `files` in memory and rewrite the ones whose generated
83
+ * bytes differ from disk (cache entries refreshed alongside). Returns
84
+ * the list of `.gd` paths actually rewritten — non-empty means the
85
+ * caller should rerun the diagnostic check ONCE so Godot validates the
86
+ * healed bytes and converter diagnostics come from the fresh entries.
87
+ */
88
+ export function healFiles(options) {
89
+ const rewrote = [];
90
+ for (const filePath of options.files) {
91
+ const relPath = relative(options.tsDir, filePath);
92
+ const outputPath = resolve(options.gdDir, relPath.replace(/\.ts$/, '.gd'));
93
+ const result = convertTsToGd({
94
+ filePath,
95
+ rootDir: options.tsDir,
96
+ tsDir: options.tsDir,
97
+ gdDir: options.gdDir,
98
+ projectRoot: options.projectRoot,
99
+ tsConfigPath: options.tsConfigPath,
100
+ sourceMap: true,
101
+ program: options.program,
102
+ });
103
+ // Mirror convertSingleFile: hard conversion errors block the write.
104
+ if (result.diagnostics.some((d) => isConversionErrorSeverity(d.severity)) &&
105
+ !options.emitOnError) {
106
+ options.onLog?.(filePath, 'Heal skipped — conversion errors block the write');
107
+ continue;
108
+ }
109
+ const normalize = (s) => s.replace(/\r\n/g, '\n');
110
+ const onDisk = existsSync(outputPath)
111
+ ? readFileSync(outputPath, 'utf-8')
112
+ : null;
113
+ if (onDisk !== null && normalize(onDisk) === normalize(result.code)) {
114
+ // Output already current — refresh diagnostics/source map only.
115
+ // Hash the bytes actually on disk: a CRLF .gd would never look
116
+ // fresh against the hash of the LF `result.code`.
117
+ if (result.sourceMap) {
118
+ options.cache.updateTsToGd(filePath, outputPath, result.sourceMap, result.diagnostics, { gdContent: onDisk });
119
+ }
120
+ continue;
121
+ }
122
+ mkdirSync(dirname(outputPath), { recursive: true });
123
+ writeFileSync(outputPath, result.code);
124
+ if (result.sourceMap) {
125
+ options.cache.updateTsToGd(filePath, outputPath, result.sourceMap, result.diagnostics, { gdContent: result.code });
126
+ }
127
+ rewrote.push(outputPath);
128
+ options.onLog?.(outputPath, 'Healed (stale output)');
129
+ }
130
+ return { rewrote };
131
+ }
132
+ //# sourceMappingURL=heal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heal.js","sourceRoot":"","sources":["../../src/watcher/heal.ts"],"names":[],"mappings":"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"}
@@ -52,6 +52,7 @@ export declare class Watcher {
52
52
  private pendingNonTsFiles;
53
53
  private debounceTimer;
54
54
  private checkDebounceTimer;
55
+ private checkRunner;
55
56
  private initialConverted;
56
57
  private initialSkipped;
57
58
  private initialErrors;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/watcher/index.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yBAAyB;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzE,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+EAA+E;IAC/E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uEAAuE;IACvE,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAyBD,qBAAa,OAAO;IAClB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,eAAe,CAAS;IAGhC,OAAO,CAAC,aAAa,CAA2B;IAGhD,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,iBAAiB,CAAgB;IACzC,OAAO,CAAC,aAAa,CAA8C;IAGnE,OAAO,CAAC,kBAAkB,CAA8C;IAGxE,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,aAAa,CAAK;IAE1B,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,cAAc;IAgBnC,KAAK,IAAI,IAAI;IA2DP,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,YAAY;IA8BpB,OAAO,CAAC,YAAY;IAkDpB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,QAAQ;IAsDhB,OAAO,CAAC,iBAAiB;IAwFzB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,oBAAoB;IAmD5B,OAAO,CAAC,GAAG;CAgBZ"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/watcher/index.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yBAAyB;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzE,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+EAA+E;IAC/E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uEAAuE;IACvE,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAyBD,qBAAa,OAAO;IAClB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,eAAe,CAAS;IAGhC,OAAO,CAAC,aAAa,CAA2B;IAGhD,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,iBAAiB,CAAgB;IACzC,OAAO,CAAC,aAAa,CAA8C;IAGnE,OAAO,CAAC,kBAAkB,CAA8C;IAGxE,OAAO,CAAC,WAAW,CAAc;IAGjC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,aAAa,CAAK;IAE1B,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,cAAc;IAoCnC,KAAK,IAAI,IAAI;IA2DP,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,YAAY;IA8BpB,OAAO,CAAC,YAAY;IAkDpB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,iBAAiB;IAyGzB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,oBAAoB;IAmD5B,OAAO,CAAC,GAAG;CAgBZ"}
@@ -10,9 +10,9 @@ import { generateTypings, generateAddonTypings, generateFileTypings, } from "../
10
10
  import { shouldIgnore } from "../config/index.js";
11
11
  import { ProjectCache } from "../cache/index.js";
12
12
  import { isConversionErrorSeverity } from "../converter/common/index.js";
13
- import { writeFileSync, mkdirSync } from 'fs';
13
+ import { writeFileSync, mkdirSync, readFileSync, existsSync } from 'fs';
14
14
  import { dirname } from 'path';
15
- import { collectProjectDiagnostics, printDiagnostics, summarizeDiagnostics, } from "../checker/index.js";
15
+ import { CheckRunner } from "./check.js";
16
16
  /** File extensions that trigger typings regeneration (scenes, resources, assets). */
17
17
  const RESOURCE_EXTENSIONS = new Set([
18
18
  '.tscn',
@@ -49,6 +49,8 @@ export class Watcher {
49
49
  debounceTimer = null;
50
50
  // ── Debounced full-project check ──────────────────────────
51
51
  checkDebounceTimer = null;
52
+ // ── Check + error-driven self-heal (see check.ts / heal.ts) ──
53
+ checkRunner;
52
54
  // ── Initial scan counters ─────────────────────────────────
53
55
  initialConverted = 0;
54
56
  initialSkipped = 0;
@@ -65,6 +67,25 @@ export class Watcher {
65
67
  // parallel ts-plugin (inside tsserver). Without it, both sides hold
66
68
  // independent in-memory snapshots and their views of the cache drift.
67
69
  this.cache = new ProjectCache(this.cacheDir, { watch: true });
70
+ this.checkRunner = new CheckRunner({
71
+ tsDir: this.tsDir,
72
+ gdDir: this.gdDir,
73
+ projectRoot: options.projectRoot ?? options.rootDir,
74
+ cacheDir: this.cacheDir,
75
+ tsConfigPath: options.tsConfigPath,
76
+ godotPath: options.godotPath,
77
+ emitOnError: options.emitOnError,
78
+ debug: options.debug,
79
+ cache: this.cache,
80
+ getTsFiles: () => this.tsFiles,
81
+ getProgram: () => this.cachedProgram,
82
+ setProgram: (p) => {
83
+ this.cachedProgram = p;
84
+ },
85
+ requestRecheck: () => this.scheduleCheck(),
86
+ log: (file, message, severity) => this.log(file, message, severity),
87
+ debugLog: (message) => this.debugLog(message),
88
+ });
68
89
  }
69
90
  start() {
70
91
  // Chokidar v4 does not support glob patterns — watch directories and filter via ignored.
@@ -122,6 +143,9 @@ export class Watcher {
122
143
  clearTimeout(this.debounceTimer);
123
144
  if (this.checkDebounceTimer)
124
145
  clearTimeout(this.checkDebounceTimer);
146
+ // Wait for an in-flight check (which may be heal-writing files)
147
+ // before tearing anything down.
148
+ await this.checkRunner.dispose();
125
149
  await this.fsWatcher?.close();
126
150
  this.cache.save();
127
151
  await this.cache.close();
@@ -237,52 +261,12 @@ export class Watcher {
237
261
  }
238
262
  runCheck() {
239
263
  this.checkDebounceTimer = null;
240
- const tsFiles = [...this.tsFiles].filter((f) => !f.endsWith('.d.ts'));
241
- if (tsFiles.length === 0) {
242
- this.debugLog('Diagnostic check skipped — no .ts files');
243
- return;
244
- }
245
- const projectRoot = this.options.projectRoot ?? this.options.rootDir;
246
- const checkStart = Date.now();
247
- this.debugLog(`Diagnostic check starting (${tsFiles.length} file(s), program=${this.cachedProgram ? 'reused' : 'fresh'})`);
248
- collectProjectDiagnostics({
249
- tsDir: this.tsDir,
250
- gdDir: this.gdDir,
251
- projectRoot,
252
- tsFiles,
253
- tsConfigPath: this.options.tsConfigPath,
254
- cache: this.cache,
255
- godotPath: this.options.godotPath,
256
- cacheDir: this.cacheDir,
257
- noEmit: false,
258
- // Reuse the program from the just-finished convertBatch — avoids
259
- // re-parsing all .ts files. Falls back to a fresh program when null
260
- // (e.g. when the only event was a removal that invalidated it).
261
- program: this.cachedProgram ?? undefined,
262
- onDebug: this.options.debug ? (msg) => this.debugLog(msg) : undefined,
263
- })
264
- .then((result) => {
265
- this.debugLog(`Diagnostic check finished in ${Date.now() - checkStart}ms`);
266
- const summary = summarizeDiagnostics(result);
267
- // Only clear the console when there's something to show — preserves the
268
- // recent per-file conversion logs when the project is clean.
269
- if (summary) {
270
- process.stdout.write('\x1Bc');
271
- printDiagnostics(result.tsDiagnostics, 'TS');
272
- printDiagnostics(result.converterDiagnostics, 'CONV');
273
- printDiagnostics(result.godotDiagnostics, 'GD');
274
- console.log('[check] complete:');
275
- console.log(summary);
276
- }
277
- else {
278
- console.log('[check] No issues found.');
279
- }
280
- })
281
- .catch((err) => {
282
- this.log('', `[check] Failed: ${err.message}`, 'warning');
283
- });
264
+ this.checkRunner.run();
284
265
  }
285
266
  convertSingleFile(filePath, outputPath, program) {
267
+ // This file's diagnostics may legitimately change this cycle (it was
268
+ // edited) — exclude it from the heal pass's suspect detection.
269
+ this.checkRunner.noteConverted(filePath);
286
270
  const result = convertTsToGd({
287
271
  filePath,
288
272
  rootDir: this.tsDir,
@@ -303,14 +287,25 @@ export class Watcher {
303
287
  if (!this.options.emitOnError)
304
288
  return;
305
289
  }
306
- // Write output
307
- mkdirSync(dirname(outputPath), { recursive: true });
308
- writeFileSync(outputPath, result.code);
290
+ // Write output — only when the bytes actually changed, so Godot
291
+ // doesn't reimport identical files and file watchers don't churn.
292
+ const normalizeEol = (s) => s.replace(/\r\n/g, '\n');
293
+ const diskContent = existsSync(outputPath)
294
+ ? readFileSync(outputPath, 'utf-8')
295
+ : null;
296
+ const outputUnchanged = diskContent !== null &&
297
+ normalizeEol(diskContent) === normalizeEol(result.code);
298
+ if (!outputUnchanged) {
299
+ mkdirSync(dirname(outputPath), { recursive: true });
300
+ writeFileSync(outputPath, result.code);
301
+ }
309
302
  // Update cache. `gdContent` populates `<cacheDir>/gd-output/` so a
310
303
  // later run (or the plugin) can reuse the exact bytes via promote.
304
+ // When the write was skipped, hash the bytes actually on disk — a
305
+ // CRLF .gd would never look fresh against the LF `result.code` hash.
311
306
  if (result.sourceMap) {
312
307
  this.cache.updateTsToGd(filePath, outputPath, result.sourceMap, result.diagnostics, {
313
- gdContent: result.code,
308
+ gdContent: outputUnchanged ? diskContent : result.code,
314
309
  });
315
310
  }
316
311
  this.cache.save();
@@ -318,8 +313,9 @@ export class Watcher {
318
313
  this.initialConverted++;
319
314
  }
320
315
  this.log(filePath, `Converted -> ${relative(this.options.rootDir, outputPath) || outputPath}`, 'info');
321
- // Validate with Godot if configured
322
- if (this.options.godotPath) {
316
+ // Validate with Godot if configured (identical bytes → identical
317
+ // validation result, so skip when nothing was written)
318
+ if (this.options.godotPath && !outputUnchanged) {
323
319
  const projectRoot = this.options.projectRoot ?? this.options.rootDir;
324
320
  validateGdFiles({
325
321
  gdFiles: [outputPath],