puerts

PUER(普洱) Typescript. Let's write your game in UE or Unity with TypeScript.

OTHER License

Stars
4.6K
Committers
119

Bot releases are visible (Hide)

puerts - Unreal_v1.0.6p1 Latest Release

Published by github-actions[bot] 9 months ago

针对v1.0.6的修复

v1.0.6p1 2024年1月16日

bug修复

  • 待结束的timer回调中设置的timer不生效的问题

mac下如果遇到移入废纸篓问题,请

cd Plugins/Puerts/ThirdParty
find . -name "*.dylib" | xargs sudo xattr -r -d com.apple.quarantine 
puerts - Unreal_v1.0.6

Published by github-actions[bot] 9 months ago

v1.0.6 2024年1月11日

新增特性

  • 支持通过赋值去清空一个JsObject

  • 添加UsingCrossModuleCppType,能避免不同模块引用同一个类typeid不同的问题

  • 静态绑定支持在原生函数中跑异常,有两种实现,线程本地存储以及异常,前者有侵入性,后者不能跨动态库使用

  • 容器添加[Symbol.iterator]支持

  • puerts::Object尝试添加SetWeakAndOwnBy方法,用于某种场景下避免循环引用

  • 静态绑定新增MethodProxy,PropertyProxy,用于解决多重继承virtual public静态绑定,子类对象调用父类方法时,this指针错误的问题

  • 静态绑定添加从Function数据获取this的选项:GetSelfFromData

  • ue5.3兼容

  • v8后端拓展esm的支持:引用ue,cpp模块,继承ue类支持esm(*.mts)

  • TArray.Add() 变参函数 (#1513)

优化

  • v8 和 UE 字符串传递默认使用 UTF16 避免编码转换

  • 声明生成排除PropertyMetaRoot

  • 重构静态绑定,支持同时使用多种后端

  • 支持在puerts名字空间加个_qjs后缀

  • 默认打开UE绕行优化 fix #1537

  • 容器以及纯c++类型修改为使用InstanceTemplate()->NewInstance实现FindOrAdd,fix #1496

  • 优化timer实现,fix #1506

变更

  • 内部使用的GetJsObject方法改为私有,防止业务调用

  • pesapi版本升级以及api新增

  • v8编译参数v8_use_external_startup_data改为false,去掉SnapshotBlob.h,fix #1478

bug修复

  • 修复在windows下使用远程IOS编译,变量名重名导致的编译失败

  • Delegate没调用Bind就Unbind会报错 (#1622)

  • mixin原生类,然后恢复,导致后续原生实现调用参数不对的问题,fix #1618

  • 解决静态绑定下,需要检查参数类型,子类不能通过基类参数的检查的问题

  • 修复 codegen .d.ts 函数参数列表可能重名的问题 (#1609)

  • V8Object.hpp加上线程安全支持

  • FJsObject析构时加入JsEnv生命周期的判断,fix #1582

  • 属性的meta在ts删除了,生成蓝图要同步删除,fix #1551

  • UStruct 析构可能发生在后台线程 fix #1539

  • js分配的容器,在关闭JsEnv时可能会有内存泄露,fix #1530

  • 防止toManualReleaseDelegate传给多个不同签名的回调,导致后面的参数处理错误

  • 函数返回const FXXStruct&时,静态绑定报错,fix #1516

  • 如果require脚本发送错误,不应该放cache,这会导致第二次require能成功返回(但模块不正常)

mac下如果遇到移入废纸篓问题,请

cd Plugins/Puerts/ThirdParty
find . -name "*.dylib" | xargs sudo xattr -r -d com.apple.quarantine 
puerts - Unity_v2.0.4,ApiLevel:32

Published by github-actions[bot] 9 months ago

中文版本请查看 doc/unity/zhcn/changelog.md

[2.0.4] - 2024-01-09

  1. fix: the error when invoking extension method with out/ref args.
  2. fix: the error when set a JSObject to null.
  3. fix: the error when getting the arg index when invoking extension method with default arguments value.
  4. fix: members of valuetype created by paramless ctor will be random value.

difference between Node.js/Quickjs/V8: wiki

puerts - Unity_v2.0.3,ApiLevel:32

Published by github-actions[bot] 12 months ago

中文版本请查看 doc/unity/zhcn/changelog.md

[2.0.3] - 2023-11-02

  1. important!: to follow the rules of Assetstore, move the generation menu from PuerTS to Tools/PuerTS
  2. feature: support dynamic import (import()) #1540
  3. fix: a bug in access control #1512
  4. fix: a bug about Interface in DTS generation #1541
  5. fix: a bug about functions returning Datetime in DTS generation #1565
  6. fix: a bug in invoking ctors with params in xil2cpp mode #1519
  7. fix: compating the latest Thread::GetThreadStaticDataForThread in xil2cpp mode #1503
  8. fix: some generation error in xil2cpp mode #1520
  9. fix: a memory issue after invoking paramless ctor of valuetype #1563

difference between Node.js/Quickjs/V8: wiki

puerts - Unity_v2.0.2,ApiLevel:32

Published by github-actions[bot] about 1 year ago

中文版本请查看 doc/unity/zhcn/changelog.md

  1. fix: defaultParam's value is not as expected when StaticWrapper in generated @ctxdegithub
  2. fix: could not build puerts with v8_8.4. In Unity2020-, the xil2cpp mode binary with v8_9.4 of android armv7 may not work. #1469
  3. optimize: combine libwee8.a and libpuerts.a in android for xil2cpp mode @mingxxming
  4. optimize: use universal binary instead of two binary with different arch in OSX now. @mikejurka
  5. optimize: JsEnv now have a public Isolate field to get the pointer of v8::Isolate @mingxxming
  6. optimize: remove our SnapshotBlob.h. Use v8's builtin snapshot instead. #1477
  7. optimize: The build script can now run with low Node.js version @xiezheng-XD #1495
  8. optimize: support inspector by default in Linux @geequlim

difference between Node.js/Quickjs/V8: wiki

puerts - Unreal_v1.0.5

Published by github-actions[bot] about 1 year ago

mac下如果遇到移入废纸篓问题,请

cd Plugins/Puerts/ThirdParty
find . -name "*.dylib" | xargs sudo xattr -r -d com.apple.quarantine 

新增特性

  • ios下,以及quickjs后端的wasm实现

  • FJsObject添加JsEnv生命周期监听,puerts.Object补上拷贝构造,赋值的JsEnv生命周期监听

  • 支持使用visual studio时,typescript的监听和自动蓝图,js生成

  • 支持通过@uproperty.attach设置Component层次

  • 对放置路径不符合ts标识符规范的蓝图

  • 支持单独设置某个虚拟机的max-old-space-size,并把增量分析编译虚拟机的内存增加到2G

  • 声明生成按钮改为puerts按钮,除了生成*.d.ts,也拷贝系统js文件

  • 添加自动管理生命周期的puerts.toDelegate方法

  • ue.d.ts新增ue api的注释

  • pesapi addon的支持

  • pesapi添加类型信息支持

  • pesapi addon支持通过WITHOUT_PESAPI_WRAPPER使用dll链接,而不是内部函数指针

  • pesapi addon支持直接使用V8 api

  • pesapi addon支持v8 fast api call

  • 添加pesapi_create_array, pesapi_is_array,pesapi_get_array_length

  • 添加macOS arm64的支持

  • quickjs版本支持html5打包

优化

  • minxin如果class是RootSet,Function也AddToRoot

  • 只有原生的才生成到ue.d.ts

  • 重构静态绑定:backend彻底分离而且可以共存

  • 尝试ts继承蓝图类时报错

变更

  • 配置类别更名 Engine Class Extends Mode -> Default JavaScript Environment

  • 不支持override GameInstance.ReceiveInit

  • Typing目录调整到Project下

  • quickjs编辑器下默认使用静态链接!影响比较大,如果用quickjs,就不能在JsEnv外使用静态绑定

  • ReactUMG不再随Puerts发布,有需要自行下载:https://github.com/puerts/ReactUMG

bug修复

  • 函数参数是ts关键字导致的语法非法

  • 解决重用外层esm标记导致的两次require间相互影响的问题

  • 静态绑定如果构造函数没重载时,参数错误构造函数不执行也不抛异常的问题

  • 解决元素为组件的容器识别为组件的问题

  • 解决v8 fast api call下静态函数性能慢的问题

  • 修复forceinject的时候可能重复setprototype导致的exception

  • ue5.2可能会生成重名的隐藏property,加个过滤

puerts - Unity_v2.0.1,ApiLevel:32

Published by github-actions[bot] about 1 year ago

中文版本请查看 doc/unity/zhcn/changelog.md

  1. Fix: NestedType was not declared correctly in link.xml #1460
  2. Fix: out parameters with ValueType might cause crash in xil2cpp mode. #1460
  3. Fix: default value of parameters in extension method was not correct in xil2cpp mode #1456
  4. Fix: JSObject was not recycle correctly

difference between Node.js/Quickjs/V8: wiki

puerts - Unity_v2.0.0,ApiLevel:32

Published by github-actions[bot] about 1 year ago

中文版本请查看 doc/unity/zhcn/changelog.md

  1. Fix: debugpath was not work and make VSCode debug not availabled
  2. Fix: puer.$genericMethod cannot get the genericMethod from super class in xil2cpp mode #1417 @danij91
  3. Fix: GetFriendlyName is not a function when generating extensionInfo #1437

This is the first stable version of 2.0.0. Shout out to everyone who attending the test.
If you need any help in upgrading. See upgrade guide

这个版本是2.0第一个正式版本。感谢所有参与过2.0内测的朋友。
若对升级有疑问可以参见升级指南

difference between Node.js/Quickjs/V8: wiki

puerts - Unity_v2.0.0-rc.1,ApiLevel:32

Published by github-actions[bot] over 1 year ago

中文版本请查看 doc/unity/zhcn/changelog.md

  1. Fix: BlitableCopy was broken issue #1427
  2. Fix: two wrapper generation issue #1433 #1432

difference between Node.js/Quickjs/V8: wiki

puerts - Unity_v2.0.0-rc.0,ApiLevel:32

Published by github-actions[bot] over 1 year ago

中文版本请查看 doc/unity/zhcn/changelog.md

  1. Fix: struct's paramless default ctor was unable to use #1301
  2. Fix: op_xxxx method was unable to use after generated #1399
  3. Fix: GetFriendlyName was not defined after generated
  4. Fix: the Constructor of BlittableCopy Type didn't invoked
  5. Optimization: isESM check optimize #1391

difference between Node.js/Quickjs/V8: wiki

puerts - Unreal_v1.0.4

Published by github-actions[bot] over 1 year ago

mac下如果遇到移入废纸篓问题,请

cd Plugins/Puerts/ThirdParty
find . -name "*.dylib" | xargs sudo xattr -r -d com.apple.quarantine 

新增特性

  • 容器GetRef支持LinkOuter

  • 默认添加UObject的IsA函数的静态绑定

  • setTimeout, setInterval增加argumentgs的支持

  • 静态绑定加入fast api call支持

  • 添加C#版本的默认值收集模块,用于支持ue5.2

  • 添加PUERTS_FORCE_CPP_UFUNCTION选项:打开后在js调用js实现的蓝图方法时,直接调用而不需要在引擎段绕一圈

  • 反射支持TFieldPath类型

  • 添加栈生命周期的原生Buff转js的ArrayBuffer的支持,fix #1360

优化

  • 清理大部分ue5的deprecated api使用

  • 生成时如果蓝图路径和文件名含特殊符号,忽略并打印warning,如果基类非法,就跳到更基础的基类来继承

  • 声明生成过滤掉+号

  • 在push对象到js的阶段就处理好引用方向(是原生对象引用js,还是js引用原生对象),简化逻辑,并提升性能

  • 对象IsUnreachable也作为无效状态

  • 非GameThread加载代理蓝图,js相关初始化延迟到第一次push到js fix #1229

  • instancof不走ts,提升静态绑定的性能 (#1246)

  • 静态绑定返回值如果是非const引用,按指针处理,不用特别指明 fix #1258

  • 去掉EscapableHandleScope的使用,fix #1291

  • JsEnv.Build.cs的ShadowVariable设置为Warning fix #1189

  • 跳过非法蓝图结构体,蓝图类的生成

变更

  • 如果一个方法是蓝图静态方法,而且第一个参数是__WorldContext的话,调用js时忽略该参数 fix #1210

  • makeUClass声明为@deprecated

  • Puerts模块的LoadingPhase改为PostEngineInit,这会导致GameInstance的ReceiveInit支持不了

  • 如果继承引擎类的ts类成员变量类型为UActorComponent子类,将添加组件,而不是仅仅添加一个变量,这会导致业务代码调整

    • 定义了组件,就自动在蓝图创建组件,无需在构造函数中通过代码创建,规避了UE的一些多线程加载问题,也更简单些

    • 构造函数无法访问Component,建议一些初始化操作放到ReceiveBeginPlay,或者直接在生成的代理蓝图上修改

    • 不能通过SetupAttachment对component的层级修改(因为构造函数访问不了,ReceiveBeginPlay又太晚了),需要生成的代理蓝图上手动修改

bug修复

  • 修复在unity v2发现的问题:https://github.com/Tencent/puerts/issues/1203 ,该问题理论上在ue也有机率发生

  • linux编译找不到libnode.so

  • 反射调用,参数转换抛出异常后不应该继续往下走

  • 修复运行Commandlet时的崩溃问题 (#1247)

  • 静态模板const USTRUCT*参数报错的问题,fix #1258

  • 代理蓝图,第二次PIE不生效的问题

  • ue 5.1按钮消失的问题

  • 增加头文件生成的依赖引入

  • cjs,esm加载的一些不兼容情况修复

  • 中文名字蓝图会导致ue_bp.d.ts重复声明的问题

  • 蓝图Interface声明生成无namespace,fix #1304

  • 解决反射调用代理蓝图函数,引用参数传递失败的问题

  • 解决子类和基类生成蓝图同时被删除,先生成子类再生成基类时导致的REINST assert

puerts - Unity_v1.4.2,ApiLevel:19

Published by github-actions[bot] over 1 year ago

中文版本请查看 doc/unity/zhcn/changelog.md

  1. fix: the crashed after getting a StackOverflowException #1208
  2. Fix: the Error message threw from JS to CS would have unexpected character.
  3. Fix: if an error is thrown in constructor, some valuetype would become null unexpectly.
  4. fix:when passing a JS number to C# object. the number would be cut to a Int.

difference between Node.js/Quickjs/V8: wiki

puerts - Unity_v2.0.0-pre.5,ApiLevel:32

Published by github-actions[bot] over 1 year ago

中文版本请查看 changelog-hans.md

  1. Fix: Error occurs when generating classes with op_explicit #1363.
  2. Fix: Issue with ClearModuleCache causing a crash #1364.
  3. Fix: Error in generating when struct produces recursive definition through pointers in xil2cpp mode #1365.
  4. Fix: Crash when printing struct in xil2cpp mode #1376.
  5. Fix: Crash when assigning JSObject to numeric type C# Field/Property #1383.
  6. Fix: Issue with ineffective Filter.
  7. Optimization: Changed xil2cpp mode's c plugin code to be generated instead of being included in the package.
  8. Optimization: Added FAQHelper to optimize code generation and error prompts during build.
  9. Optimization: Improved error messages for reflection calls, compatible with trimmed interfaces.
  10. Optimization: Changed the separator for console.log elements from comma to space. #1373
  11. Optimization: Improved Node.js event loop #1093 #1279.
  12. Optimization: Suppressed warnings from DefaultMode's StaticWrapper.
  13. Feature: Added JSObject.Get(string) and refactored ExecuteModule to use this Get interface.
  14. Feature: Added Filter for xil2cpp valuetype declaration.

difference between Node.js/Quickjs/V8: wiki

Contributors:
@xtutu

puerts - Unity_v2.0.0-pre.4,ApiLevel:31

Published by github-actions[bot] over 1 year ago

中文版本请查看 changelog-hans.md

[2.0.0-pre.4] - 2023-05-29

  1. Fix: the Error message threw from JS to CS would have unexpected character.
  2. Fix: doc generating fix #1322 #1329
  3. Fix: if an error is thrown in constructor, some valuetype would become null unexpectly.
  4. optimize: performance in WebGL is optimized.
  5. Fix: dts with Enumerable would throw compile error #1322
  6. To distinguish the meaning between Unity Il2cpp backend, we named the new il2cpp binding mode(v2 mode) to xIl2cpp mode.
  7. Fix: in xIl2cpp mode, create Puerts.ArrayBuffer in csharp would make its memory unstable. #1340
  8. Fix: in xIl2cpp mode, it would crash when returning a valuetype in a method with returntype System.Object.
  9. Fix: in xIl2cpp mode, it would crash when transfering nullable valuetype. #1320
  10. Fix: in xIl2cpp mode, it would crash when setting a valuetype to ref/out arguments. #1343
  11. Register logic refactor: #1317. Now we have a new access control ability.

difference between Node.js/Quickjs/V8: wiki

Contributors:
@sesky4

puerts - Unity_v2.0.0-pre.3,ApiLevel:31

Published by github-actions[bot] over 1 year ago

中文版本请查看 changelog-hans.md

  1. Fix: ios Node.js cannot start for PuerTS's openupm version #1302
  2. Fix: the dependencies of DontBinding methods are still generated in DTS generation #1295
  3. Fix: some properties only have setters will report errors in wrapper generation #1298
  4. Fix: several problems with static fields in il2cpp binding mode #1288
  5. Fix: il2cpp binding mode + Unity2021 will crash when using structs reflecting #1288
  6. Fix: still cannot find generic classes after link.xml generation #1288
  7. Feature: add C# Enumerable forof support on JS side #1234
  8. Feature: refactor old ExecuteModule implementation to be consistent with il2cpp binding mode. At the same time, import 'csharp' and import 'puerts' are no longer supported, and it is recommended to use global variables.
  9. Feature: add IResolvableLoader to implement node_modules loading and solve #1270.
  10. Feature: add IBuiltinLoadedListener to allow Loader to do some operations after the built-in script is executed, which is convenient for encapsulating third-party Loader.

difference between Node.js/Quickjs/V8: wiki

puerts - Unity_v2.0.0-pre.1,ApiLevel:30

Published by github-actions[bot] over 1 year ago

中文版本请查看 doc/unity/zhcn/changelog.md

  1. Add a new language binding directly based on il2cpp and there will be huge performance benifit. see our docsite for more information.
  2. The package layout of unity code in this repository is changed to UPM layout.
  3. Move the commonjs-support package into this repository.

breaking change since 1.x

  1. System.DateTime will no longer translate to Date in Javascript #1145
  2. TypedValue could pass to a object only. You will no longer use it to select overload.
  3. If a method has no overload and default param, PuerTS will not check the type of the params in ReflectionMode(SlowBinding).
  4. The accessor key of ref object change to [0] instead of ['value']. (If all your code was using puer.$ref or puer.$unref, it will take no effect)
  5. As what we mentioned in changelog of 1.4: there will be no require by default in 2.0.

difference between Node.js/Quickjs/V8: wiki

puerts - Unity_v1.4.1,ApiLevel:19

Published by github-actions[bot] over 1 year ago

中文版本请查看 doc/unity/zhcn/changelog.md

changelog since 1.4.0

  1. fix: the crashed after getting a StackOverflowException #1208
  2. fix: could not get any log in inspector with Node.js backend. #1201
  3. fix: if a error is thrown in ESM and the message contains line ends, the error message could be incorrect. #1188
  4. fix: did not filt a obsoleted property setter/getter. #1152
  5. fix:when passing a JS number to C# object. the number would be cut to a Int.
  6. feature: JsEnv.ClearModuleCache can clear ESM module cache now.
  7. feature: now you can use JSObject to store a JS function. #1143 #1144
  8. feature: add EXPERIMENTAL_PUERTS_DISABLE_SLOWBINDING. It will be useful in somewhere need to do access control. This feature is still experimental and will be changed in the future.
  9. optimize: do not lock the mutex when destroying a JSFunction or JSObject.

difference between Node.js/Quickjs/V8: wiki

puerts - Unity_v1.4.1-pre.2,ApiLevel:19

Published by github-actions[bot] over 1 year ago

中文版本请查看 doc/unity/zhcn/changelog.md

  1. fix: could not get any log in inspector with Node.js backend. #1201
  2. fix: if a error is thrown in ESM and the message contains line ends, the error message could be incorrect. #1188
  3. optimize: do not lock the mutex when destroying a JSFunction.
  4. feature: JsEnv.ClearModuleCache can clear ESM module cache now.

difference between Node.js/Quickjs/V8: wiki

puerts - Unreal_v1.0.3

Published by github-actions[bot] over 1 year ago

mac下如果遇到移入废纸篓问题,请

cd Plugins/Puerts/ThirdParty
find . -name "*.dylib" | xargs sudo xattr -r -d com.apple.quarantine 

新增特性

  • ue类型对应的js类型增加类型名称(编辑器全路径),以便于打印堆栈dump的时候分析

  • 静态绑定void*参数支持任意原生对象传入

  • 添加常用方法UDataTableFunctionLibrary::Generic_GetDataTableRowFromName的静态绑定

  • 手动删除蓝图,重启后自动生成

  • puerts::Object、puerts::Funcion加入对JsEnv的生命周期跟踪,降低使用的难度

  • cjs和mjs配合优化,支持package.json中通过"type": "module"指定为esm模块,支持在esm中加载.cjs(cjs模块)。

  • 添加Puerts.Gen FULL,蓝图全量生成功能

  • 默认生成所有struct的声明

  • 添加控制台命令(puerts ls,puerts compile)

  • 生成代码时,如果加载的蓝图GeneratedClass为空报错

  • nodejs版本下,优先调用nodejs的require,加载不成功再使用puerts的加载逻辑

  • 编辑器下,quickjs后端默认用dll版本,去掉该后端下不能在业务模块静态声明的问题

  • 增加运行时 JavaScript 路径配置

优化

  • 反射性能优化

  • 蓝图结构体都生成到ue_bp.d.ts

  • 优化大量代理蓝图以及ts代码的启动速度

变更

bug修复

  • 解决刚创建蓝图但未保存,生成d.ts的崩溃

  • mixin对输出值设置无效的问题

  • 解决带Out参数蓝图调用另一个重定向到ts的Out参数方法,ts中设置Out参数无效的问题

  • DefaultJSModuleLoader加载名字带点号的模块

  • react-umg声明,对于struct改为Partial来自动处理成可选字段,可以避免引用UE模块时产生的名字空间问题

  • 解决如果一个package含超过一个类型,只生成一个类型的bug

  • 解决ts继承BlueprintFunctionLibrary在Editor下只跑一次,打包后不跑的问题

  • 结构体两次Init的修正

  • FName大小写的问题导致函数为空的问题

  • json文件加载失败的问题

  • 解决继承链上有同名类导致的tid冲突

  • ue5生成声明忽略Engine.Transient包,解决ue5改包下类的.d.ts报错问题

  • 静态绑定和pesapi的int64、uint64参数,不传bigint都统一用默认值

puerts - Unity_v1.4.1-pre.1,ApiLevel:19

Published by github-actions[bot] over 1 year ago

中文版本请查看 doc/unity/zhcn/changelog.md

  1. fix: did not filt obsoleted property setter/getter. #1152
  2. feature: add console.time. #1170
  3. feature: now you can use JSObject to store a JS function. #1143 #1144

difference between Node.js/Quickjs/V8: wiki