33#include " api/APIHelp.h"
44#include " engine/GlobalShareData.h"
55#include " ll/api/Versions.h"
6- #include " ll/api/mod/Mod.h"
7- #include " ll/api/mod/ModManager.h"
86#include " ll/api/mod/ModManagerRegistry.h"
97#include " ll/api/utils/SystemUtils.h"
10- #include " lse/PluginManager.h"
8+ #include " ll/api/data/Version.h"
9+ #include " ll/api/reflection/Serialization.h"
1110
1211#include < string>
1312
@@ -41,7 +40,7 @@ ClassDefine<void> LlClassBuilder = defineClass("ll")
4140
4241 // For Compatibility
4342 .function(" version" , &LlClass::version)
44- .function(" versionStatus" , &LlClass::getVersionStatusFunction )
43+ .function(" versionStatus" , &LlClass::getVersionStatus )
4544 .function(" scriptEngineVersion" , &LlClass::getScriptEngineVersionFunction)
4645
4746 .build();
@@ -58,17 +57,17 @@ Local<Value> LlClass::getLanguage() {
5857 try {
5958 return String::newString (ll::sys_utils::getSystemLocaleCode ());
6059 }
61- CATCH (" Fail in LLSEGetLanguage " )
60+ CATCH (" Fail in getLanguage " )
6261}
6362
6463Local<Value> LlClass::isWine () {
6564 try {
6665 return Boolean::newBoolean (ll::sys_utils::isWine ());
6766 }
68- CATCH (" Fail in LLSEIsWine " )
67+ CATCH (" Fail in isWine " )
6968}
7069
71- auto LlClass::isDebugMode () -> Local<Value> {
70+ Local<Value> LlClass::isDebugMode () {
7271#ifdef NDEBUG
7372 return Boolean::newBoolean (false );
7473#else
@@ -80,49 +79,167 @@ Local<Value> LlClass::isRelease() {
8079 try {
8180 return Boolean::newBoolean (!ll::getLoaderVersion ().preRelease .has_value ());
8281 }
83- CATCH (" Fail in LLSEIsRelease " )
82+ CATCH (" Fail in isRelease " )
8483}
8584
8685Local<Value> LlClass::isBeta () {
8786 try {
8887 return Boolean::newBoolean (ll::getLoaderVersion ().preRelease .has_value ());
8988 }
90- CATCH (" Fail in LLSEIsBeta " )
89+ CATCH (" Fail in isBeta " )
9190}
9291
93- Local<Value> LlClass::isDev () { return Boolean::newBoolean (false ); }
92+ Local<Value> LlClass::isDev () {
93+ try {
94+ return Boolean::newBoolean (ll::getLoaderVersion ().to_string ().find (" +" ) != std::string::npos);
95+ }
96+ CATCH (" Fail in isDev" );
97+ }
9498
9599Local<Value> LlClass::getMajorVersion () {
96100 try {
97101 return Number::newNumber (ll::getLoaderVersion ().major );
98102 }
99- CATCH (" Fail in LLSEGetMajorVersion " )
103+ CATCH (" Fail in getMajorVersion " )
100104}
101105
102106Local<Value> LlClass::getMinorVersion () {
103107 try {
104108 return Number::newNumber (ll::getLoaderVersion ().minor );
105109 }
106- CATCH (" Fail in LLSEGetMinorVersion " )
110+ CATCH (" Fail in getMinorVersion " )
107111}
108112
109113Local<Value> LlClass::getRevisionVersion () {
110114 try {
111115 return Number::newNumber (ll::getLoaderVersion ().patch );
112116 }
113- CATCH (" Fail in LLSEGetRevisionVersion " )
117+ CATCH (" Fail in getRevisionVersion " )
114118}
115119
116120Local<Value> LlClass::getScriptEngineVersion () {
117121 try {
118122 return String::newString (EngineScope::currentEngine ()->getEngineVersion ());
119123 }
120- CATCH (" Fail in LLSEGetScriptEngineVerison" )
124+ CATCH (" Fail in getScriptEngineVersion" )
125+ }
126+
127+ Local<Value> LlClass::getVersionStatus () {
128+ if (ll::getLoaderVersion ().to_string ().find (" +" ) != std::string::npos) {
129+ return Number::newNumber (0 );
130+ } else if (ll::getLoaderVersion ().preRelease .has_value ()) {
131+ return Number::newNumber (1 );
132+ } else {
133+ return Number::newNumber (2 );
134+ }
121135}
122136
123- Local<Value> LlClass::getVersionStatus () { return Number::newNumber (0 ); }
137+ Local<Value> LlClass::registerPlugin (const Arguments& args) {
138+ CHECK_ARGS_COUNT (args, 1 );
139+ CHECK_ARG_TYPE (args[0 ], ValueKind::kString );
140+ if (args.size () >= 2 ) CHECK_ARG_TYPE (args[1 ], ValueKind::kString );
141+ // if (args.size() >= 3)
142+ // CHECK_ARG_TYPE(args[2], ValueKind::kObject);
143+ if (args.size () >= 4 ) CHECK_ARG_TYPE (args[3 ], ValueKind::kObject );
144+
145+ try {
146+ std::string desc = args.size () >= 2 ? args[1 ].asString ().toString () : " " ;
147+
148+ ll::data::Version ver = ll::data::Version (1 , 0 , 0 );
149+ if (args.size () >= 3 ) {
150+ if (args[2 ].isArray ()) { // like [1,0,0].
151+ Local<Array> verInfo = args[2 ].asArray ();
152+ if (verInfo.size () >= 1 ) {
153+ Local<Value> major = verInfo.get (0 );
154+ if (major.isNumber ()) ver.major = major.asNumber ().toInt32 ();
155+ }
156+ if (verInfo.size () >= 2 ) {
157+ Local<Value> minor = verInfo.get (1 );
158+ if (minor.isNumber ()) ver.minor = minor.asNumber ().toInt32 ();
159+ }
160+ if (verInfo.size () >= 3 ) {
161+ Local<Value> revision = verInfo.get (2 );
162+ if (revision.isNumber ()) ver.patch = revision.asNumber ().toInt32 ();
163+ }
164+ if (verInfo.size () >= 4 ) { // script: Version Enum.
165+ Local<Value> status = verInfo.get (3 );
166+ if (status.isNumber ()) {
167+ switch (status.asNumber ().toInt32 ()) {
168+ case 0 :
169+ ver.preRelease ->from_string (" dev" );
170+ break ;
171+ case 1 :
172+ ver.preRelease ->from_string (" beta" );
173+ break ;
174+ default :
175+ break ;
176+ }
177+ }
178+ }
179+ } else if (args[2 ].isObject ()) { // like { major: 1, minor:0, revision:0 }
180+ Local<Object> verInfo = args[2 ].asObject ();
181+ if (verInfo.has (" major" )) {
182+ Local<Value> major = verInfo.get (" major" );
183+ if (major.isNumber ()) ver.major = major.asNumber ().toInt32 ();
184+ }
185+ if (verInfo.has (" minor" )) {
186+ Local<Value> minor = verInfo.get (" minor" );
187+ if (minor.isNumber ()) ver.minor = minor.asNumber ().toInt32 ();
188+ }
189+ if (verInfo.has (" revision" )) {
190+ Local<Value> revision = verInfo.get (" revision" );
191+ if (revision.isNumber ()) ver.patch = revision.asNumber ().toInt32 ();
192+ }
193+ if (verInfo.has (" status" )) {
194+ Local<Value> status = verInfo.get (" status" );
195+ if (status.isNumber ()) {
196+ switch (status.asNumber ().toInt32 ()) {
197+ case 0 :
198+ ver.preRelease ->from_string (" dev" );
199+ break ;
200+ case 1 :
201+ ver.preRelease ->from_string (" beta" );
202+ break ;
203+ default :
204+ break ;
205+ }
206+ }
207+ }
208+ } else {
209+ LOG_WRONG_ARG_TYPE ();
210+ return Boolean::newBoolean (false );
211+ }
212+ }
213+
214+ if (getEngineOwnData ()->plugin ->getManifest ().version .value_or (ll::data::Version (0 , 0 , 0 )) != ver) {
215+ auto newManifest = getEngineOwnData ()->plugin ->getManifest ();
216+ newManifest.description = desc;
217+ newManifest.version = ver;
218+ if (args.size () >= 4 ) {
219+ Local<Object> otherInfo = args[3 ].asObject ();
220+ auto keys = otherInfo.getKeyNames ();
221+ if (!newManifest.extraInfo ) {
222+ newManifest.extraInfo = ll::SmallDenseMap<std::string, std::string>();
223+ }
224+ for (auto & key : keys) {
225+ if (ll::string_utils::toLowerCase (key) == " author" ) {
226+ newManifest.author = otherInfo.get (key).asString ().toString ();
227+ continue ;
228+ }
229+ newManifest.extraInfo ->insert ({key, otherInfo.get (key).asString ().toString ()});
230+ }
231+ }
232+ ll::file_utils::writeFile (
233+ getEngineOwnData ()->plugin ->getModDir () / " manifest.json" ,
234+ ll::reflection::serialize<nlohmann::ordered_json>(newManifest)->dump (4 )
235+ );
236+ }
237+
238+ return Boolean::newBoolean (true );
239+ }
240+ CATCH (" Fail in registerPlugin" );
241+ }
124242
125- Local<Value> LlClass::registerPlugin (const Arguments&) { return Boolean::newBoolean (true ); }
126243Local<Value> LlClass::getPluginInfo (const Arguments& args) {
127244 try {
128245 auto plugin = lse::LegacyScriptEngine::getInstance ().getManager ().getMod (args[0 ].asString ().toString ());
@@ -154,13 +271,13 @@ Local<Value> LlClass::getPluginInfo(const Arguments& args) {
154271 }
155272 return {};
156273 }
157- CATCH (" Fail in LLAPI " );
274+ CATCH (" Fail in getPluginInfo " );
158275}
159276Local<Value> LlClass::versionString (const Arguments&) {
160277 try {
161278 return String::newString (ll::getLoaderVersion ().to_string ());
162279 }
163- CATCH (" Fail in LLSEGetVersionString !" )
280+ CATCH (" Fail in versionString !" )
164281}
165282
166283Local<Value> LlClass::requireVersion (const Arguments&) { return Boolean::newBoolean (true ); }
@@ -202,7 +319,7 @@ Local<Value> LlClass::getAllPluginInfo(const Arguments&) {
202319 }
203320 return plugins;
204321 }
205- CATCH (" Fail in LLAPI " );
322+ CATCH (" Fail in getAllPluginInfo " );
206323}
207324
208325// For Compatibility
@@ -215,7 +332,7 @@ Local<Value> LlClass::listPlugins(const Arguments&) {
215332 }
216333 return plugins;
217334 }
218- CATCH (" Fail in LLAPI " );
335+ CATCH (" Fail in listPlugins " );
219336}
220337
221338Local<Value> LlClass::require (const Arguments&) { return Boolean::newBoolean (true ); }
@@ -226,12 +343,9 @@ Local<Value> LlClass::eval(const Arguments& args) {
226343 try {
227344 return EngineScope::currentEngine ()->eval (args[0 ].asString ().toString ());
228345 }
229- CATCH (" Fail in LLSEEval !" )
346+ CATCH (" Fail in eval !" )
230347}
231348
232- // For Compatibility
233- Local<Value> LlClass::getVersionStatusFunction (const Arguments&) { return Number::newNumber (0 ); }
234-
235349// For Compatibility
236350Local<Value> LlClass::version (const Arguments&) {
237351 try {
@@ -241,25 +355,16 @@ Local<Value> LlClass::version(const Arguments&) {
241355 ver.set (" revision" , ll::getLoaderVersion ().patch );
242356 ver.set (" isBeta" , !ll::getLoaderVersion ().preRelease .has_value ());
243357 ver.set (" isRelease" , ll::getLoaderVersion ().preRelease .has_value ());
244- ver.set (" isDev" , false );
358+ ver.set (" isDev" , ll::getLoaderVersion (). to_string (). find ( " + " ) != std::string::npos );
245359 return ver;
246360 }
247- CATCH (" Fail in LLSEGetVersion!" )
248- }
249-
250- // For Compatibility
251- Local<Value> LlClass::isDebugModeFunction (const Arguments&) {
252- #ifdef LEGACYSCRIPTENGINE_DEBUG
253- return Boolean::newBoolean (true );
254- #else
255- return Boolean::newBoolean (false );
256- #endif
361+ CATCH (" Fail in version!" )
257362}
258363
259364// For Compatibility
260365Local<Value> LlClass::getScriptEngineVersionFunction (const Arguments&) {
261366 try {
262367 return String::newString (EngineScope::currentEngine ()->getEngineVersion ());
263368 }
264- CATCH (" Fail in LLSEGetScriptEngineVerison " )
369+ CATCH (" Fail in getScriptEngineVersion " )
265370}
0 commit comments