java-bridge 2.1.1 → 2.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 CHANGED
@@ -249,3 +249,40 @@ Options:
249
249
  - The classpath argument can be supplied multiple times to add multiple jars to the classpath
250
250
  - Multiple class names can be supplied to generate definitions for multiple classes
251
251
  - The generated typescript files will automatically import all classes once the module is loaded.
252
+
253
+ ### Examples
254
+
255
+ #### Generate definitions for a single class
256
+
257
+ Generate definitions for the `java.lang.String` class and all its referenced classes and save them to `./project`:
258
+
259
+ ```bash
260
+ java-ts-gen ./project java.lang.String
261
+ ```
262
+
263
+ This will create a directory called `java` containing the definitions for the `java.lang.String` class and all its
264
+ dependencies all inside subdirectories. The `java.lang.String` class will be saved to `./project/java/lang/String.ts`.
265
+ Thus, the folder structure of `project` will look something like this:
266
+
267
+ ```
268
+ .
269
+ ├── ...
270
+ ├── java
271
+ │ ├── lang
272
+ │ │ ├── String.ts
273
+ │ │ ├── Object.ts
274
+ │ │ └── ...
275
+ │ ├── util
276
+ │ │ └── ...
277
+ │ └── ...
278
+ └── ...
279
+ ```
280
+
281
+ #### Generate definitions for multiple classes
282
+
283
+ Generate definitions for the `java.lang.String` and `java.util.ArrayList` classes and all of their dependencies
284
+ and save them to `./project`:
285
+
286
+ ```bash
287
+ java-ts-gen ./project java.lang.String java.util.ArrayList
288
+ ```
@@ -285,6 +285,336 @@ module.exports.StdoutRedirect = StdoutRedirect
285
285
  module.exports.getJavaLibPath = getJavaLibPath
286
286
 
287
287
 
288
+ /***/ }),
289
+
290
+ /***/ "./ts-src/TypescriptDefinitionGenerator.ts":
291
+ /*!*************************************************!*\
292
+ !*** ./ts-src/TypescriptDefinitionGenerator.ts ***!
293
+ \*************************************************/
294
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
295
+
296
+ "use strict";
297
+
298
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
299
+ if (k2 === undefined) k2 = k;
300
+ var desc = Object.getOwnPropertyDescriptor(m, k);
301
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
302
+ desc = { enumerable: true, get: function() { return m[k]; } };
303
+ }
304
+ Object.defineProperty(o, k2, desc);
305
+ }) : (function(o, m, k, k2) {
306
+ if (k2 === undefined) k2 = k;
307
+ o[k2] = m[k];
308
+ }));
309
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
310
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
311
+ }) : function(o, v) {
312
+ o["default"] = v;
313
+ });
314
+ var __importStar = (this && this.__importStar) || function (mod) {
315
+ if (mod && mod.__esModule) return mod;
316
+ var result = {};
317
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
318
+ __setModuleDefault(result, mod);
319
+ return result;
320
+ };
321
+ var __importDefault = (this && this.__importDefault) || function (mod) {
322
+ return (mod && mod.__esModule) ? mod : { "default": mod };
323
+ };
324
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
325
+ const typescript_1 = __importStar(__webpack_require__(/*! typescript */ "typescript"));
326
+ const _1 = __webpack_require__(/*! ./. */ "./ts-src/index.ts");
327
+ const fs_1 = __importDefault(__webpack_require__(/*! fs */ "fs"));
328
+ const path_1 = __importDefault(__webpack_require__(/*! path */ "path"));
329
+ const sourceFile = typescript_1.default.createSourceFile('source.ts', '', typescript_1.default.ScriptTarget.Latest, false, typescript_1.default.ScriptKind.TS);
330
+ class TypescriptDefinitionGenerator {
331
+ constructor(classname, progressCallback = null, resolvedImports = []) {
332
+ this.classname = classname;
333
+ this.progressCallback = progressCallback;
334
+ this.resolvedImports = resolvedImports;
335
+ this.usesBasicOrJavaType = false;
336
+ this.additionalImports = [];
337
+ this.importsToResolve = [];
338
+ }
339
+ static async convertMethods(methods) {
340
+ const Modifier = await (0, _1.importClassAsync)('java.lang.reflect.Modifier');
341
+ const result = {};
342
+ for (const method of methods) {
343
+ const modifiers = await method.getModifiers();
344
+ if (await Modifier.isPublic(modifiers)) {
345
+ const name = await method.getName();
346
+ const returnType = await method.getReturnType();
347
+ const parameterTypes = await method.getParameterTypes();
348
+ const data = {
349
+ returnType: await returnType.getTypeName(),
350
+ parameters: await Promise.all(parameterTypes.map((p) => p.getTypeName())),
351
+ isStatic: await Modifier.isStatic(modifiers),
352
+ };
353
+ if (Object.hasOwn(result, name)) {
354
+ result[name].push(data);
355
+ }
356
+ else {
357
+ result[name] = [data];
358
+ }
359
+ }
360
+ }
361
+ return result;
362
+ }
363
+ async convertConstructors(constructors) {
364
+ const Modifier = await (0, _1.importClassAsync)('java.lang.reflect.Modifier');
365
+ const types = [];
366
+ for (const constructor of constructors) {
367
+ const modifiers = await constructor.getModifiers();
368
+ if (await Modifier.isPublic(modifiers)) {
369
+ const parameterTypes = await constructor.getParameterTypes();
370
+ types.push(await Promise.all(parameterTypes.map((p) => p.getTypeName())));
371
+ }
372
+ }
373
+ const tsConstructors = types.map((t, i) => {
374
+ const params = t.map(this.convertParameter.bind(this));
375
+ let declaration = typescript_1.default.factory.createConstructorDeclaration([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.PublicKeyword)], params, undefined);
376
+ if (i === 0) {
377
+ declaration = typescript_1.default.addSyntheticLeadingComment(declaration, typescript_1.default.SyntaxKind.SingleLineCommentTrivia, ` ================== Constructors ==================`, true);
378
+ }
379
+ if (t.length > 0) {
380
+ declaration = typescript_1.default.addSyntheticLeadingComment(declaration, typescript_1.default.SyntaxKind.MultiLineCommentTrivia, '*\n' +
381
+ t
382
+ .map((p, i) => ` * @param var${i} original type: '${p}'\n`)
383
+ .join('') +
384
+ ' ', true);
385
+ }
386
+ return declaration;
387
+ });
388
+ const newInstanceMethods = types.map((t, i) => {
389
+ return this.createMethod({
390
+ returnType: this.classname,
391
+ parameters: t,
392
+ isStatic: true,
393
+ }, 'newInstance', i, false);
394
+ });
395
+ return [...newInstanceMethods, ...tsConstructors];
396
+ }
397
+ javaTypeToTypescriptType(javaType, isParam) {
398
+ switch (javaType) {
399
+ case 'byte[]':
400
+ case 'java.lang.Byte[]':
401
+ return typescript_1.default.factory.createTypeReferenceNode('Buffer');
402
+ }
403
+ if (javaType.endsWith('[]')) {
404
+ return typescript_1.default.factory.createArrayTypeNode(this.javaTypeToTypescriptType(javaType.substring(0, javaType.length - 2), isParam));
405
+ }
406
+ switch (javaType) {
407
+ case 'int':
408
+ case 'java.lang.Integer':
409
+ case 'long':
410
+ case 'java.lang.Long':
411
+ case 'float':
412
+ case 'java.lang.Float':
413
+ case 'double':
414
+ case 'java.lang.Double':
415
+ case 'byte':
416
+ case 'java.lang.Byte':
417
+ case 'short':
418
+ case 'java.lang.Short':
419
+ return typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.NumberKeyword);
420
+ case 'char':
421
+ case 'java.lang.Character':
422
+ case 'java.lang.String':
423
+ return typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.StringKeyword);
424
+ case 'boolean':
425
+ case 'java.lang.Boolean':
426
+ return typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.BooleanKeyword);
427
+ case 'void':
428
+ case 'java.lang.Void':
429
+ return typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.VoidKeyword);
430
+ case 'java.lang.Object':
431
+ this.usesBasicOrJavaType = true;
432
+ return typescript_1.default.factory.createTypeReferenceNode('BasicOrJavaType');
433
+ default:
434
+ if (!this.resolvedImports.includes(javaType)) {
435
+ this.additionalImports.push(javaType);
436
+ }
437
+ this.importsToResolve.push(javaType);
438
+ const isSelf = javaType === this.classname && isParam;
439
+ return typescript_1.default.factory.createTypeReferenceNode(javaType === this.classname
440
+ ? javaType.substring(javaType.lastIndexOf('.') + 1) +
441
+ (isSelf ? 'Class' : '')
442
+ : javaType.replaceAll('.', '_'));
443
+ }
444
+ }
445
+ convertParameter(param, index) {
446
+ const name = 'var' + index;
447
+ const type = this.javaTypeToTypescriptType(param, true);
448
+ return typescript_1.default.factory.createParameterDeclaration(undefined, undefined, name, undefined, type);
449
+ }
450
+ convertParameters(params) {
451
+ return params.parameters.map(this.convertParameter.bind(this));
452
+ }
453
+ static createMethodComment(declaration) {
454
+ return ('*\n' +
455
+ declaration.parameters
456
+ .map((p, i) => ` * @param var${i} original type: '${p}'\n`)
457
+ .join('') +
458
+ ` * @return original return type: '${declaration.returnType}'\n `);
459
+ }
460
+ createMethod(m, name, i, isSync) {
461
+ const publicMod = typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.PublicKeyword);
462
+ const staticMod = typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.StaticKeyword);
463
+ const modifiers = [publicMod];
464
+ if (m.isStatic) {
465
+ modifiers.push(staticMod);
466
+ }
467
+ let returnType = this.javaTypeToTypescriptType(m.returnType, false);
468
+ if (!isSync) {
469
+ returnType = typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier('Promise'), [returnType]);
470
+ }
471
+ let declaration = typescript_1.default.factory.createMethodDeclaration(modifiers, undefined, name + (isSync ? 'Sync' : ''), undefined, undefined, this.convertParameters(m), returnType, undefined);
472
+ if (i === 0) {
473
+ declaration = typescript_1.default.addSyntheticLeadingComment(declaration, typescript_1.default.SyntaxKind.SingleLineCommentTrivia, ` ================== Method ${name} ==================`, true);
474
+ }
475
+ return typescript_1.default.addSyntheticLeadingComment(declaration, typescript_1.default.SyntaxKind.MultiLineCommentTrivia, TypescriptDefinitionGenerator.createMethodComment(m), true);
476
+ }
477
+ convertMethod(method, name) {
478
+ const res = [];
479
+ for (let i = 0; i < method.length; i++) {
480
+ const m = method[i];
481
+ res.push(this.createMethod(m, name, i, false), this.createMethod(m, name, i, true));
482
+ }
483
+ return res;
484
+ }
485
+ getAdditionalImports() {
486
+ const getPath = (i) => {
487
+ const thisSplit = this.classname.split('.');
488
+ const importSplit = i.split('.');
489
+ for (let j = 0; j < thisSplit.length; j++) {
490
+ if (importSplit[j] === thisSplit[j]) {
491
+ thisSplit[j] = null;
492
+ importSplit[j] = null;
493
+ }
494
+ else {
495
+ break;
496
+ }
497
+ }
498
+ return ('./' +
499
+ thisSplit
500
+ .filter((e) => !!e)
501
+ .map(() => '')
502
+ .join('../') +
503
+ importSplit.filter((e) => !!e).join('/'));
504
+ };
505
+ const unique = (value, index, self) => {
506
+ return self.indexOf(value) === index;
507
+ };
508
+ return this.importsToResolve
509
+ .filter((i) => i != this.classname)
510
+ .filter(unique)
511
+ .map((i) => typescript_1.default.factory.createImportDeclaration(undefined, typescript_1.default.factory.createImportClause(false, undefined, typescript_1.default.factory.createNamedImports([
512
+ typescript_1.default.factory.createImportSpecifier(false, typescript_1.default.factory.createIdentifier(i.substring(i.lastIndexOf('.') + 1)), typescript_1.default.factory.createIdentifier(i.replaceAll('.', '_'))),
513
+ ])), typescript_1.default.factory.createStringLiteral(getPath(i))));
514
+ }
515
+ getImports() {
516
+ const importElements = [
517
+ typescript_1.default.factory.createImportSpecifier(false, undefined, typescript_1.default.factory.createIdentifier('importClass')),
518
+ typescript_1.default.factory.createImportSpecifier(false, undefined, typescript_1.default.factory.createIdentifier('JavaClassInstance')),
519
+ ];
520
+ if (this.usesBasicOrJavaType) {
521
+ importElements.push(typescript_1.default.factory.createImportSpecifier(false, undefined, typescript_1.default.factory.createIdentifier('BasicOrJavaType')));
522
+ }
523
+ const imports = typescript_1.default.factory.createNamedImports(importElements);
524
+ return typescript_1.default.factory.createImportDeclaration(undefined, typescript_1.default.factory.createImportClause(false, undefined, imports), typescript_1.default.factory.createStringLiteral('java-bridge'));
525
+ }
526
+ getExportStatement(simpleName) {
527
+ const statement = typescript_1.default.factory.createClassDeclaration([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], simpleName, undefined, [
528
+ typescript_1.default.factory.createHeritageClause(typescript_1.default.SyntaxKind.ExtendsKeyword, [
529
+ typescript_1.default.factory.createExpressionWithTypeArguments(typescript_1.default.factory.createIdentifier(`importClass<typeof ${simpleName}Class>("${this.classname}")`), undefined),
530
+ ]),
531
+ ], []);
532
+ return [
533
+ typescript_1.default.addSyntheticLeadingComment(statement, typescript_1.SyntaxKind.MultiLineCommentTrivia, `*\n * Class ${this.classname}.\n *\n` +
534
+ ' * This actually imports the java class for further use.\n' +
535
+ ` * The class ${simpleName}Class only defines types, this is the class you should actually import.\n` +
536
+ ' * Please note that this statement imports the underlying java class at runtime, which may take a while.\n' +
537
+ ' * This was generated by java-bridge.\n * You should probably not edit this.\n ', true),
538
+ typescript_1.default.factory.createExportDefault(typescript_1.default.factory.createIdentifier(simpleName)),
539
+ ];
540
+ }
541
+ getText(nodes) {
542
+ return nodes
543
+ .map((n) => (n &&
544
+ typescript_1.default
545
+ .createPrinter({ newLine: typescript_1.default.NewLineKind.LineFeed })
546
+ .printNode(typescript_1.default.EmitHint.Unspecified, n, sourceFile)) ||
547
+ '')
548
+ .join('\n');
549
+ }
550
+ async generate() {
551
+ if (this.resolvedImports.includes(this.classname)) {
552
+ return [];
553
+ }
554
+ this.resolvedImports.push(this.classname);
555
+ if (this.progressCallback) {
556
+ this.progressCallback(this.classname);
557
+ }
558
+ const Class = await (0, _1.importClassAsync)(this.classname);
559
+ const cls = Class.class;
560
+ const simpleName = this.classname.substring(this.classname.lastIndexOf('.') + 1);
561
+ const methods = await cls.getDeclaredMethods();
562
+ const classMembers = [];
563
+ const convertedMethods = await TypescriptDefinitionGenerator.convertMethods(methods);
564
+ for (const key of Object.keys(convertedMethods)) {
565
+ const m = convertedMethods[key];
566
+ classMembers.push(...this.convertMethod(m, key));
567
+ }
568
+ const constructors = await cls.getDeclaredConstructors();
569
+ const convertedConstructors = await this.convertConstructors(constructors);
570
+ classMembers.push(...convertedConstructors);
571
+ let tsClass = typescript_1.default.factory.createClassDeclaration([
572
+ typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword),
573
+ typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.DeclareKeyword),
574
+ ], simpleName + 'Class', undefined, [
575
+ typescript_1.default.factory.createHeritageClause(typescript_1.default.SyntaxKind.ExtendsKeyword, [
576
+ typescript_1.default.factory.createExpressionWithTypeArguments(typescript_1.default.factory.createIdentifier('JavaClassInstance'), undefined),
577
+ ]),
578
+ ], classMembers);
579
+ tsClass = typescript_1.default.addSyntheticLeadingComment(tsClass, typescript_1.default.SyntaxKind.MultiLineCommentTrivia, `*\n * This class just defines types, you should import ${simpleName} instead of this.\n` +
580
+ ' * This was generated by java-bridge.\n * You should probably not edit this.\n ', true);
581
+ const sourceText = this.getText([
582
+ this.getImports(),
583
+ ...this.getAdditionalImports(),
584
+ null,
585
+ tsClass,
586
+ null,
587
+ ...this.getExportStatement(simpleName),
588
+ ]);
589
+ const res = [];
590
+ for (const imported of this.additionalImports) {
591
+ const generator = new TypescriptDefinitionGenerator(imported, this.progressCallback, this.resolvedImports);
592
+ const generated = await generator.generate();
593
+ res.push(...generated);
594
+ }
595
+ res.push({
596
+ name: this.classname,
597
+ contents: sourceText,
598
+ });
599
+ return res;
600
+ }
601
+ static async save(declarations, sourceDir) {
602
+ for (const declaration of declarations) {
603
+ const p = declaration.name.split('.');
604
+ p[p.length - 1] = p[p.length - 1] + '.ts';
605
+ const filePath = path_1.default.join(sourceDir, ...p);
606
+ await fs_1.default.promises.mkdir(path_1.default.dirname(filePath), {
607
+ recursive: true,
608
+ });
609
+ await fs_1.default.promises.writeFile(filePath, declaration.contents, {
610
+ encoding: 'utf8',
611
+ });
612
+ }
613
+ }
614
+ }
615
+ exports["default"] = TypescriptDefinitionGenerator;
616
+
617
+
288
618
  /***/ }),
289
619
 
290
620
  /***/ "./ts-src/definitions.ts":
@@ -365,8 +695,11 @@ var __importStar = (this && this.__importStar) || function (mod) {
365
695
  __setModuleDefault(result, mod);
366
696
  return result;
367
697
  };
698
+ var __importDefault = (this && this.__importDefault) || function (mod) {
699
+ return (mod && mod.__esModule) ? mod : { "default": mod };
700
+ };
368
701
  Object.defineProperty(exports, "__esModule", ({ value: true }));
369
- exports.getJavaLibPath = exports.JavaClassProxy = exports.JavaClassInstance = exports.JavaObject = exports.JavaVersion = void 0;
702
+ exports.TypescriptDefinitionGenerator = exports.getJavaLibPath = exports.JavaClassProxy = exports.JavaClassInstance = exports.JavaObject = exports.JavaVersion = void 0;
370
703
  var definitions_1 = __webpack_require__(/*! ./definitions */ "./ts-src/definitions.ts");
371
704
  Object.defineProperty(exports, "JavaVersion", ({ enumerable: true, get: function () { return definitions_1.JavaVersion; } }));
372
705
  Object.defineProperty(exports, "JavaObject", ({ enumerable: true, get: function () { return definitions_1.JavaObject; } }));
@@ -377,6 +710,8 @@ const java = __importStar(__webpack_require__(/*! ./java */ "./ts-src/java.ts"))
377
710
  exports["default"] = java;
378
711
  var native_1 = __webpack_require__(/*! ../native */ "./native.js");
379
712
  Object.defineProperty(exports, "getJavaLibPath", ({ enumerable: true, get: function () { return native_1.getJavaLibPath; } }));
713
+ const TypescriptDefinitionGenerator_1 = __importDefault(__webpack_require__(/*! ./TypescriptDefinitionGenerator */ "./ts-src/TypescriptDefinitionGenerator.ts"));
714
+ exports.TypescriptDefinitionGenerator = TypescriptDefinitionGenerator_1.default;
380
715
 
381
716
 
382
717
  /***/ }),
@@ -1018,6 +1353,17 @@ module.exports = require("glob");
1018
1353
 
1019
1354
  /***/ }),
1020
1355
 
1356
+ /***/ "typescript":
1357
+ /*!*****************************!*\
1358
+ !*** external "typescript" ***!
1359
+ \*****************************/
1360
+ /***/ ((module) => {
1361
+
1362
+ "use strict";
1363
+ module.exports = require("typescript");
1364
+
1365
+ /***/ }),
1366
+
1021
1367
  /***/ "fs":
1022
1368
  /*!*********************!*\
1023
1369
  !*** external "fs" ***!
@@ -1,2 +1,2 @@
1
- !function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof exports?exports.java=r():e.java=r()}(global,(()=>(()=>{var e={388:(e,r,t)=>{e=t.nmd(e);try{process.dlopen(e,__dirname+t(17).sep+t.p+"java.linux-x64-gnu.node")}catch(e){throw new Error("node-loader:\n"+e)}},163:(e,r,t)=>{const{existsSync:a,readFileSync:n}=t(147),{join:o}=t(17),{platform:i,arch:c}=process;let s=null,u=!1,d=null;function l(){if(process.report&&"function"==typeof process.report.getReport){const{glibcVersionRuntime:e}=process.report.getReport().header;return!e}try{return n("/usr/bin/ldd","utf8").includes("musl")}catch(e){return!0}}switch(i){case"android":switch(c){case"arm64":u=a(o(__dirname,"java.android-arm64.node"));try{s=u?t(Object(function(){var e=new Error("Cannot find module './java.android-arm64.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-android-arm64")}catch(e){d=e}break;case"arm":u=a(o(__dirname,"java.android-arm-eabi.node"));try{s=u?t(Object(function(){var e=new Error("Cannot find module './java.android-arm-eabi.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-android-arm-eabi")}catch(e){d=e}break;default:throw new Error(`Unsupported architecture on Android ${c}`)}break;case"win32":switch(c){case"x64":u=a(o(__dirname,"java.win32-x64-msvc.node"));try{s=u?t(Object(function(){var e=new Error("Cannot find module './java.win32-x64-msvc.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-win32-x64-msvc")}catch(e){d=e}break;case"ia32":u=a(o(__dirname,"java.win32-ia32-msvc.node"));try{s=u?t(Object(function(){var e=new Error("Cannot find module './java.win32-ia32-msvc.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-win32-ia32-msvc")}catch(e){d=e}break;case"arm64":u=a(o(__dirname,"java.win32-arm64-msvc.node"));try{s=u?t(Object(function(){var e=new Error("Cannot find module './java.win32-arm64-msvc.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-win32-arm64-msvc")}catch(e){d=e}break;default:throw new Error(`Unsupported architecture on Windows: ${c}`)}break;case"darwin":switch(c){case"x64":u=a(o(__dirname,"java.darwin-x64.node"));try{s=u?t(Object(function(){var e=new Error("Cannot find module './java.darwin-x64.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-darwin-x64")}catch(e){d=e}break;case"arm64":u=a(o(__dirname,"java.darwin-arm64.node"));try{s=u?t(Object(function(){var e=new Error("Cannot find module './java.darwin-arm64.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-darwin-arm64")}catch(e){d=e}break;default:throw new Error(`Unsupported architecture on macOS: ${c}`)}break;case"freebsd":if("x64"!==c)throw new Error(`Unsupported architecture on FreeBSD: ${c}`);u=a(o(__dirname,"java.freebsd-x64.node"));try{s=u?t(Object(function(){var e=new Error("Cannot find module './java.freebsd-x64.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-freebsd-x64")}catch(e){d=e}break;case"linux":switch(c){case"x64":if(l()){u=a(o(__dirname,"java.linux-x64-musl.node"));try{s=u?t(Object(function(){var e=new Error("Cannot find module './java.linux-x64-musl.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-linux-x64-musl")}catch(e){d=e}}else{u=a(o(__dirname,"java.linux-x64-gnu.node"));try{s=u?t(388):require("java-bridge-linux-x64-gnu")}catch(e){d=e}}break;case"arm64":if(l()){u=a(o(__dirname,"java.linux-arm64-musl.node"));try{s=u?t(Object(function(){var e=new Error("Cannot find module './java.linux-arm64-musl.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-linux-arm64-musl")}catch(e){d=e}}else{u=a(o(__dirname,"java.linux-arm64-gnu.node"));try{s=u?t(Object(function(){var e=new Error("Cannot find module './java.linux-arm64-gnu.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-linux-arm64-gnu")}catch(e){d=e}}break;case"arm":u=a(o(__dirname,"java.linux-arm-gnueabihf.node"));try{s=u?t(Object(function(){var e=new Error("Cannot find module './java.linux-arm-gnueabihf.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-linux-arm-gnueabihf")}catch(e){d=e}break;default:throw new Error(`Unsupported architecture on Linux: ${c}`)}break;default:throw new Error(`Unsupported OS: ${i}, architecture: ${c}`)}if(!s){if(d)throw d;throw new Error("Failed to load native binding")}const{Java:f,getClassFields:v,getField:p,setField:b,getStaticField:m,setStaticField:h,JavaInterfaceProxy:j,StdoutRedirect:_,getJavaLibPath:w}=s;e.exports.Java=f,e.exports.getClassFields=v,e.exports.getField=p,e.exports.setField=b,e.exports.getStaticField=m,e.exports.setStaticField=h,e.exports.JavaInterfaceProxy=j,e.exports.StdoutRedirect=_,e.exports.getJavaLibPath=w},91:(e,r)=>{"use strict";var t;Object.defineProperty(r,"__esModule",{value:!0}),r.JavaObject=r.JavaVersion=void 0,function(e){e.VER_1_1="1.1",e.VER_1_2="1.2",e.VER_1_4="1.4",e.VER_1_6="1.6",e.VER_1_8="1.8",e.VER_9="9",e.VER_10="10"}(t=r.JavaVersion||(r.JavaVersion={})),Object.freeze(t),r.JavaObject=class{}},236:function(e,r,t){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,r,t,a){void 0===a&&(a=t);var n=Object.getOwnPropertyDescriptor(r,t);n&&!("get"in n?!r.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,a,n)}:function(e,r,t,a){void 0===a&&(a=t),e[a]=r[t]}),n=this&&this.__setModuleDefault||(Object.create?function(e,r){Object.defineProperty(e,"default",{enumerable:!0,value:r})}:function(e,r){e.default=r}),o=this&&this.__exportStar||function(e,r){for(var t in e)"default"===t||Object.prototype.hasOwnProperty.call(r,t)||a(r,e,t)},i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var r={};if(null!=e)for(var t in e)"default"!==t&&Object.prototype.hasOwnProperty.call(e,t)&&a(r,e,t);return n(r,e),r};Object.defineProperty(r,"__esModule",{value:!0}),r.getJavaLibPath=r.JavaClassProxy=r.JavaClassInstance=r.JavaObject=r.JavaVersion=void 0;var c=t(91);Object.defineProperty(r,"JavaVersion",{enumerable:!0,get:function(){return c.JavaVersion}}),Object.defineProperty(r,"JavaObject",{enumerable:!0,get:function(){return c.JavaObject}}),Object.defineProperty(r,"JavaClassInstance",{enumerable:!0,get:function(){return c.JavaClassInstance}}),Object.defineProperty(r,"JavaClassProxy",{enumerable:!0,get:function(){return c.JavaClassProxy}}),o(t(818),r);const s=i(t(818));r.default=s;var u=t(163);Object.defineProperty(r,"getJavaLibPath",{enumerable:!0,get:function(){return u.getJavaLibPath}})},818:(e,r,t)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.getJavaInstance=r.newProxy=r.stdout=r.classpath=r.isInstanceOf=r.appendClasspath=r.importClassAsync=r.importClass=r.ensureJvm=void 0;const a=t(163),n=t(841);let o=null;function i(e){o||(o=new a.Java(e?.libPath,e?.version,e?.opts,e,(0,n.getJavaLibPath)(),(0,n.getNativeLibPath)()))}function c(e,r){for(const t of(0,a.getClassFields)(e["class.proxy"],r)){const n=()=>r?(0,a.getStaticField)(e,t.name):(0,a.getField)(e,t.name);t.isFinal?Object.defineProperty(e,t.name,{get:n,enumerable:!0}):Object.defineProperty(e,t.name,{get:n,set:n=>r?(0,a.setStaticField)(e,t.name,n):(0,a.setField)(e,t.name,n),enumerable:!0})}}function s(e){i(),o.appendClasspath(e)}var u;r.ensureJvm=i,r.importClass=function(e){i();const r=o.importClass(e);return c(r,!0),r.constructor=function(...e){const t=new r.prototype.constructor(...e);return c(t,!1),t},r},r.importClassAsync=async function(e){i();const r=await o.importClassAsync(e);return c(r,!0),r.constructor=function(...e){const t=new r.prototype.constructor(...e);return c(t,!1),t},r},r.appendClasspath=s,r.isInstanceOf=function(e,r){return i(),o.isInstanceOf(e,r)},(u=r.classpath||(r.classpath={})).append=function(e){s(e)},u.get=function(){return i(),o.loadedJars},(r.stdout||(r.stdout={})).enableRedirect=function(e,r){return i(),o.setStdoutCallbacks(e,r)},r.newProxy=function(e,r){i();const t=Object.create(null);for(const[e,a]of Object.entries(r))t[e]=(e,r,...t)=>{if(e)throw e;try{r(null,a(...t))}catch(e){e instanceof Error?r(e):r(new Error(e.toString()))}};return o.createInterfaceProxy(e,t)},r.getJavaInstance=function(){return o}},841:function(e,r,t){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,r,t,a){void 0===a&&(a=t);var n=Object.getOwnPropertyDescriptor(r,t);n&&!("get"in n?!r.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,a,n)}:function(e,r,t,a){void 0===a&&(a=t),e[a]=r[t]}),n=this&&this.__setModuleDefault||(Object.create?function(e,r){Object.defineProperty(e,"default",{enumerable:!0,value:r})}:function(e,r){e.default=r}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var r={};if(null!=e)for(var t in e)"default"!==t&&Object.prototype.hasOwnProperty.call(e,t)&&a(r,e,t);return n(r,e),r},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.getJavaLibPath=r.getNativeLibPath=void 0;const c=i(t(17)),s=o(t(147)),u=i(t(230)),{platform:d,arch:l}=process;function f(e){const r=c.default.join(__dirname,e+".node");if(s.default.existsSync(r))return r;{const r=e.replaceAll(".","-").replace("java","java-bridge");return require&&require.resolve?require.resolve(r):t(955).resolve(r)}}function v(){return new Error(`Unsupported platform: ${d} ${l}`)}r.getNativeLibPath=function(){switch(d){case"android":switch(l){case"arm64":return f("java.android-arm64");case"arm":return f("java.android-arm-eabi");default:throw v()}case"win32":return f(`java.win32-${l}-msvc`);case"darwin":return f(`java.darwin-${l}`);case"freebsd":return f(`java.freebsd-${l}`);case"linux":switch(l){case"x64":case"arm64":return f(`java.linux-${l}-${function(){if(process.report&&"function"==typeof process.report.getReport){const{glibcVersionRuntime:e}=process.report.getReport().header;return!e}try{return(0,s.readFileSync)("/usr/bin/ldd","utf8").includes("musl")}catch(e){return!0}}()?"musl":"gnu"}`);case"arm":return f("java.linux-arm-gnueabihf");default:throw v()}default:throw v()}},r.getJavaLibPath=function(){const e=c.default.join(__dirname,"..","java-src","build","libs");let r=u.default.sync("*.jar",{cwd:e});if(0===r.length)throw new Error(`No java lib found in ${e}`);return c.default.join(e,r[0])}},955:e=>{function r(e){var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r}r.keys=()=>[],r.resolve=r,r.id=955,e.exports=r},230:e=>{"use strict";e.exports=require("glob")},147:e=>{"use strict";e.exports=require("fs")},17:e=>{"use strict";e.exports=require("path")}},r={};function t(a){var n=r[a];if(void 0!==n)return n.exports;var o=r[a]={id:a,loaded:!1,exports:{}};return e[a].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}return t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),t.p="",t(236)})()));
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.java=t():e.java=t()}(global,(()=>(()=>{var e={388:(e,t,a)=>{e=a.nmd(e);try{process.dlopen(e,__dirname+a(17).sep+a.p+"java.linux-x64-gnu.node")}catch(e){throw new Error("node-loader:\n"+e)}},163:(e,t,a)=>{const{existsSync:r,readFileSync:n}=a(147),{join:i}=a(17),{platform:o,arch:s}=process;let c=null,d=!1,u=null;function l(){if(process.report&&"function"==typeof process.report.getReport){const{glibcVersionRuntime:e}=process.report.getReport().header;return!e}try{return n("/usr/bin/ldd","utf8").includes("musl")}catch(e){return!0}}switch(o){case"android":switch(s){case"arm64":d=r(i(__dirname,"java.android-arm64.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.android-arm64.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-android-arm64")}catch(e){u=e}break;case"arm":d=r(i(__dirname,"java.android-arm-eabi.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.android-arm-eabi.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-android-arm-eabi")}catch(e){u=e}break;default:throw new Error(`Unsupported architecture on Android ${s}`)}break;case"win32":switch(s){case"x64":d=r(i(__dirname,"java.win32-x64-msvc.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.win32-x64-msvc.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-win32-x64-msvc")}catch(e){u=e}break;case"ia32":d=r(i(__dirname,"java.win32-ia32-msvc.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.win32-ia32-msvc.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-win32-ia32-msvc")}catch(e){u=e}break;case"arm64":d=r(i(__dirname,"java.win32-arm64-msvc.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.win32-arm64-msvc.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-win32-arm64-msvc")}catch(e){u=e}break;default:throw new Error(`Unsupported architecture on Windows: ${s}`)}break;case"darwin":switch(s){case"x64":d=r(i(__dirname,"java.darwin-x64.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.darwin-x64.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-darwin-x64")}catch(e){u=e}break;case"arm64":d=r(i(__dirname,"java.darwin-arm64.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.darwin-arm64.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-darwin-arm64")}catch(e){u=e}break;default:throw new Error(`Unsupported architecture on macOS: ${s}`)}break;case"freebsd":if("x64"!==s)throw new Error(`Unsupported architecture on FreeBSD: ${s}`);d=r(i(__dirname,"java.freebsd-x64.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.freebsd-x64.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-freebsd-x64")}catch(e){u=e}break;case"linux":switch(s){case"x64":if(l()){d=r(i(__dirname,"java.linux-x64-musl.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.linux-x64-musl.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-linux-x64-musl")}catch(e){u=e}}else{d=r(i(__dirname,"java.linux-x64-gnu.node"));try{c=d?a(388):require("java-bridge-linux-x64-gnu")}catch(e){u=e}}break;case"arm64":if(l()){d=r(i(__dirname,"java.linux-arm64-musl.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.linux-arm64-musl.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-linux-arm64-musl")}catch(e){u=e}}else{d=r(i(__dirname,"java.linux-arm64-gnu.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.linux-arm64-gnu.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-linux-arm64-gnu")}catch(e){u=e}}break;case"arm":d=r(i(__dirname,"java.linux-arm-gnueabihf.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.linux-arm-gnueabihf.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-linux-arm-gnueabihf")}catch(e){u=e}break;default:throw new Error(`Unsupported architecture on Linux: ${s}`)}break;default:throw new Error(`Unsupported OS: ${o}, architecture: ${s}`)}if(!c){if(u)throw u;throw new Error("Failed to load native binding")}const{Java:f,getClassFields:p,getField:m,setField:h,getStaticField:v,setStaticField:y,JavaInterfaceProxy:b,StdoutRedirect:g,getJavaLibPath:w}=c;e.exports.Java=f,e.exports.getClassFields=p,e.exports.getField=m,e.exports.setField=h,e.exports.getStaticField=v,e.exports.setStaticField=y,e.exports.JavaInterfaceProxy=b,e.exports.StdoutRedirect=g,e.exports.getJavaLibPath=w},248:function(e,t,a){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,a,r){void 0===r&&(r=a);var n=Object.getOwnPropertyDescriptor(t,a);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,r,n)}:function(e,t,a,r){void 0===r&&(r=a),e[r]=t[a]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&r(t,e,a);return n(t,e),t},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=i(a(7)),c=a(236),d=o(a(147)),u=o(a(17)),l=s.default.createSourceFile("source.ts","",s.default.ScriptTarget.Latest,!1,s.default.ScriptKind.TS);class f{constructor(e,t=null,a=[]){this.classname=e,this.progressCallback=t,this.resolvedImports=a,this.usesBasicOrJavaType=!1,this.additionalImports=[],this.importsToResolve=[]}static async convertMethods(e){const t=await(0,c.importClassAsync)("java.lang.reflect.Modifier"),a={};for(const r of e){const e=await r.getModifiers();if(await t.isPublic(e)){const n=await r.getName(),i=await r.getReturnType(),o=await r.getParameterTypes(),s={returnType:await i.getTypeName(),parameters:await Promise.all(o.map((e=>e.getTypeName()))),isStatic:await t.isStatic(e)};Object.hasOwn(a,n)?a[n].push(s):a[n]=[s]}}return a}async convertConstructors(e){const t=await(0,c.importClassAsync)("java.lang.reflect.Modifier"),a=[];for(const r of e){const e=await r.getModifiers();if(await t.isPublic(e)){const e=await r.getParameterTypes();a.push(await Promise.all(e.map((e=>e.getTypeName()))))}}const r=a.map(((e,t)=>{const a=e.map(this.convertParameter.bind(this));let r=s.default.factory.createConstructorDeclaration([s.default.factory.createModifier(s.default.SyntaxKind.PublicKeyword)],a,void 0);return 0===t&&(r=s.default.addSyntheticLeadingComment(r,s.default.SyntaxKind.SingleLineCommentTrivia," ================== Constructors ==================",!0)),e.length>0&&(r=s.default.addSyntheticLeadingComment(r,s.default.SyntaxKind.MultiLineCommentTrivia,"*\n"+e.map(((e,t)=>` * @param var${t} original type: '${e}'\n`)).join("")+" ",!0)),r}));return[...a.map(((e,t)=>this.createMethod({returnType:this.classname,parameters:e,isStatic:!0},"newInstance",t,!1))),...r]}javaTypeToTypescriptType(e,t){switch(e){case"byte[]":case"java.lang.Byte[]":return s.default.factory.createTypeReferenceNode("Buffer")}if(e.endsWith("[]"))return s.default.factory.createArrayTypeNode(this.javaTypeToTypescriptType(e.substring(0,e.length-2),t));switch(e){case"int":case"java.lang.Integer":case"long":case"java.lang.Long":case"float":case"java.lang.Float":case"double":case"java.lang.Double":case"byte":case"java.lang.Byte":case"short":case"java.lang.Short":return s.default.factory.createKeywordTypeNode(s.default.SyntaxKind.NumberKeyword);case"char":case"java.lang.Character":case"java.lang.String":return s.default.factory.createKeywordTypeNode(s.default.SyntaxKind.StringKeyword);case"boolean":case"java.lang.Boolean":return s.default.factory.createKeywordTypeNode(s.default.SyntaxKind.BooleanKeyword);case"void":case"java.lang.Void":return s.default.factory.createKeywordTypeNode(s.default.SyntaxKind.VoidKeyword);case"java.lang.Object":return this.usesBasicOrJavaType=!0,s.default.factory.createTypeReferenceNode("BasicOrJavaType");default:this.resolvedImports.includes(e)||this.additionalImports.push(e),this.importsToResolve.push(e);const a=e===this.classname&&t;return s.default.factory.createTypeReferenceNode(e===this.classname?e.substring(e.lastIndexOf(".")+1)+(a?"Class":""):e.replaceAll(".","_"))}}convertParameter(e,t){const a="var"+t,r=this.javaTypeToTypescriptType(e,!0);return s.default.factory.createParameterDeclaration(void 0,void 0,a,void 0,r)}convertParameters(e){return e.parameters.map(this.convertParameter.bind(this))}static createMethodComment(e){return"*\n"+e.parameters.map(((e,t)=>` * @param var${t} original type: '${e}'\n`)).join("")+` * @return original return type: '${e.returnType}'\n `}createMethod(e,t,a,r){const n=s.default.factory.createModifier(s.default.SyntaxKind.PublicKeyword),i=s.default.factory.createModifier(s.default.SyntaxKind.StaticKeyword),o=[n];e.isStatic&&o.push(i);let c=this.javaTypeToTypescriptType(e.returnType,!1);r||(c=s.default.factory.createTypeReferenceNode(s.default.factory.createIdentifier("Promise"),[c]));let d=s.default.factory.createMethodDeclaration(o,void 0,t+(r?"Sync":""),void 0,void 0,this.convertParameters(e),c,void 0);return 0===a&&(d=s.default.addSyntheticLeadingComment(d,s.default.SyntaxKind.SingleLineCommentTrivia,` ================== Method ${t} ==================`,!0)),s.default.addSyntheticLeadingComment(d,s.default.SyntaxKind.MultiLineCommentTrivia,f.createMethodComment(e),!0)}convertMethod(e,t){const a=[];for(let r=0;r<e.length;r++){const n=e[r];a.push(this.createMethod(n,t,r,!1),this.createMethod(n,t,r,!0))}return a}getAdditionalImports(){const e=e=>{const t=this.classname.split("."),a=e.split(".");for(let e=0;e<t.length&&a[e]===t[e];e++)t[e]=null,a[e]=null;return"./"+t.filter((e=>!!e)).map((()=>"")).join("../")+a.filter((e=>!!e)).join("/")};return this.importsToResolve.filter((e=>e!=this.classname)).filter(((e,t,a)=>a.indexOf(e)===t)).map((t=>s.default.factory.createImportDeclaration(void 0,s.default.factory.createImportClause(!1,void 0,s.default.factory.createNamedImports([s.default.factory.createImportSpecifier(!1,s.default.factory.createIdentifier(t.substring(t.lastIndexOf(".")+1)),s.default.factory.createIdentifier(t.replaceAll(".","_")))])),s.default.factory.createStringLiteral(e(t)))))}getImports(){const e=[s.default.factory.createImportSpecifier(!1,void 0,s.default.factory.createIdentifier("importClass")),s.default.factory.createImportSpecifier(!1,void 0,s.default.factory.createIdentifier("JavaClassInstance"))];this.usesBasicOrJavaType&&e.push(s.default.factory.createImportSpecifier(!1,void 0,s.default.factory.createIdentifier("BasicOrJavaType")));const t=s.default.factory.createNamedImports(e);return s.default.factory.createImportDeclaration(void 0,s.default.factory.createImportClause(!1,void 0,t),s.default.factory.createStringLiteral("java-bridge"))}getExportStatement(e){const t=s.default.factory.createClassDeclaration([s.default.factory.createModifier(s.default.SyntaxKind.ExportKeyword)],e,void 0,[s.default.factory.createHeritageClause(s.default.SyntaxKind.ExtendsKeyword,[s.default.factory.createExpressionWithTypeArguments(s.default.factory.createIdentifier(`importClass<typeof ${e}Class>("${this.classname}")`),void 0)])],[]);return[s.default.addSyntheticLeadingComment(t,s.SyntaxKind.MultiLineCommentTrivia,`*\n * Class ${this.classname}.\n *\n * This actually imports the java class for further use.\n * The class ${e}Class only defines types, this is the class you should actually import.\n * Please note that this statement imports the underlying java class at runtime, which may take a while.\n * This was generated by java-bridge.\n * You should probably not edit this.\n `,!0),s.default.factory.createExportDefault(s.default.factory.createIdentifier(e))]}getText(e){return e.map((e=>e&&s.default.createPrinter({newLine:s.default.NewLineKind.LineFeed}).printNode(s.default.EmitHint.Unspecified,e,l)||"")).join("\n")}async generate(){if(this.resolvedImports.includes(this.classname))return[];this.resolvedImports.push(this.classname),this.progressCallback&&this.progressCallback(this.classname);const e=(await(0,c.importClassAsync)(this.classname)).class,t=this.classname.substring(this.classname.lastIndexOf(".")+1),a=await e.getDeclaredMethods(),r=[],n=await f.convertMethods(a);for(const e of Object.keys(n)){const t=n[e];r.push(...this.convertMethod(t,e))}const i=await e.getDeclaredConstructors(),o=await this.convertConstructors(i);r.push(...o);let d=s.default.factory.createClassDeclaration([s.default.factory.createModifier(s.default.SyntaxKind.ExportKeyword),s.default.factory.createModifier(s.default.SyntaxKind.DeclareKeyword)],t+"Class",void 0,[s.default.factory.createHeritageClause(s.default.SyntaxKind.ExtendsKeyword,[s.default.factory.createExpressionWithTypeArguments(s.default.factory.createIdentifier("JavaClassInstance"),void 0)])],r);d=s.default.addSyntheticLeadingComment(d,s.default.SyntaxKind.MultiLineCommentTrivia,`*\n * This class just defines types, you should import ${t} instead of this.\n * This was generated by java-bridge.\n * You should probably not edit this.\n `,!0);const u=this.getText([this.getImports(),...this.getAdditionalImports(),null,d,null,...this.getExportStatement(t)]),l=[];for(const e of this.additionalImports){const t=new f(e,this.progressCallback,this.resolvedImports),a=await t.generate();l.push(...a)}return l.push({name:this.classname,contents:u}),l}static async save(e,t){for(const a of e){const e=a.name.split(".");e[e.length-1]=e[e.length-1]+".ts";const r=u.default.join(t,...e);await d.default.promises.mkdir(u.default.dirname(r),{recursive:!0}),await d.default.promises.writeFile(r,a.contents,{encoding:"utf8"})}}}t.default=f},91:(e,t)=>{"use strict";var a;Object.defineProperty(t,"__esModule",{value:!0}),t.JavaObject=t.JavaVersion=void 0,function(e){e.VER_1_1="1.1",e.VER_1_2="1.2",e.VER_1_4="1.4",e.VER_1_6="1.6",e.VER_1_8="1.8",e.VER_9="9",e.VER_10="10"}(a=t.JavaVersion||(t.JavaVersion={})),Object.freeze(a),t.JavaObject=class{}},236:function(e,t,a){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,a,r){void 0===r&&(r=a);var n=Object.getOwnPropertyDescriptor(t,a);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,r,n)}:function(e,t,a,r){void 0===r&&(r=a),e[r]=t[a]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__exportStar||function(e,t){for(var a in e)"default"===a||Object.prototype.hasOwnProperty.call(t,a)||r(t,e,a)},o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&r(t,e,a);return n(t,e),t},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TypescriptDefinitionGenerator=t.getJavaLibPath=t.JavaClassProxy=t.JavaClassInstance=t.JavaObject=t.JavaVersion=void 0;var c=a(91);Object.defineProperty(t,"JavaVersion",{enumerable:!0,get:function(){return c.JavaVersion}}),Object.defineProperty(t,"JavaObject",{enumerable:!0,get:function(){return c.JavaObject}}),Object.defineProperty(t,"JavaClassInstance",{enumerable:!0,get:function(){return c.JavaClassInstance}}),Object.defineProperty(t,"JavaClassProxy",{enumerable:!0,get:function(){return c.JavaClassProxy}}),i(a(818),t);const d=o(a(818));t.default=d;var u=a(163);Object.defineProperty(t,"getJavaLibPath",{enumerable:!0,get:function(){return u.getJavaLibPath}});const l=s(a(248));t.TypescriptDefinitionGenerator=l.default},818:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getJavaInstance=t.newProxy=t.stdout=t.classpath=t.isInstanceOf=t.appendClasspath=t.importClassAsync=t.importClass=t.ensureJvm=void 0;const r=a(163),n=a(841);let i=null;function o(e){i||(i=new r.Java(e?.libPath,e?.version,e?.opts,e,(0,n.getJavaLibPath)(),(0,n.getNativeLibPath)()))}function s(e,t){for(const a of(0,r.getClassFields)(e["class.proxy"],t)){const n=()=>t?(0,r.getStaticField)(e,a.name):(0,r.getField)(e,a.name);a.isFinal?Object.defineProperty(e,a.name,{get:n,enumerable:!0}):Object.defineProperty(e,a.name,{get:n,set:n=>t?(0,r.setStaticField)(e,a.name,n):(0,r.setField)(e,a.name,n),enumerable:!0})}}function c(e){o(),i.appendClasspath(e)}var d;t.ensureJvm=o,t.importClass=function(e){o();const t=i.importClass(e);return s(t,!0),t.constructor=function(...e){const a=new t.prototype.constructor(...e);return s(a,!1),a},t},t.importClassAsync=async function(e){o();const t=await i.importClassAsync(e);return s(t,!0),t.constructor=function(...e){const a=new t.prototype.constructor(...e);return s(a,!1),a},t},t.appendClasspath=c,t.isInstanceOf=function(e,t){return o(),i.isInstanceOf(e,t)},(d=t.classpath||(t.classpath={})).append=function(e){c(e)},d.get=function(){return o(),i.loadedJars},(t.stdout||(t.stdout={})).enableRedirect=function(e,t){return o(),i.setStdoutCallbacks(e,t)},t.newProxy=function(e,t){o();const a=Object.create(null);for(const[e,r]of Object.entries(t))a[e]=(e,t,...a)=>{if(e)throw e;try{t(null,r(...a))}catch(e){e instanceof Error?t(e):t(new Error(e.toString()))}};return i.createInterfaceProxy(e,a)},t.getJavaInstance=function(){return i}},841:function(e,t,a){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,a,r){void 0===r&&(r=a);var n=Object.getOwnPropertyDescriptor(t,a);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,r,n)}:function(e,t,a,r){void 0===r&&(r=a),e[r]=t[a]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&r(t,e,a);return n(t,e),t},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getJavaLibPath=t.getNativeLibPath=void 0;const s=o(a(17)),c=i(a(147)),d=o(a(230)),{platform:u,arch:l}=process;function f(e){const t=s.default.join(__dirname,e+".node");if(c.default.existsSync(t))return t;{const t=e.replaceAll(".","-").replace("java","java-bridge");return require&&require.resolve?require.resolve(t):a(955).resolve(t)}}function p(){return new Error(`Unsupported platform: ${u} ${l}`)}t.getNativeLibPath=function(){switch(u){case"android":switch(l){case"arm64":return f("java.android-arm64");case"arm":return f("java.android-arm-eabi");default:throw p()}case"win32":return f(`java.win32-${l}-msvc`);case"darwin":return f(`java.darwin-${l}`);case"freebsd":return f(`java.freebsd-${l}`);case"linux":switch(l){case"x64":case"arm64":return f(`java.linux-${l}-${function(){if(process.report&&"function"==typeof process.report.getReport){const{glibcVersionRuntime:e}=process.report.getReport().header;return!e}try{return(0,c.readFileSync)("/usr/bin/ldd","utf8").includes("musl")}catch(e){return!0}}()?"musl":"gnu"}`);case"arm":return f("java.linux-arm-gnueabihf");default:throw p()}default:throw p()}},t.getJavaLibPath=function(){const e=s.default.join(__dirname,"..","java-src","build","libs");let t=d.default.sync("*.jar",{cwd:e});if(0===t.length)throw new Error(`No java lib found in ${e}`);return s.default.join(e,t[0])}},955:e=>{function t(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}t.keys=()=>[],t.resolve=t,t.id=955,e.exports=t},230:e=>{"use strict";e.exports=require("glob")},7:e=>{"use strict";e.exports=require("typescript")},147:e=>{"use strict";e.exports=require("fs")},17:e=>{"use strict";e.exports=require("path")}},t={};function a(r){var n=t[r];if(void 0!==n)return n.exports;var i=t[r]={id:r,loaded:!1,exports:{}};return e[r].call(i.exports,i,i.exports,a),i.loaded=!0,i.exports}return a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),a.p="",a(236)})()));
2
2
  //# sourceMappingURL=index.prod.min.js.map
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.java=t():e.java=t()}(global,(()=>(()=>{var __webpack_modules__={388:(e,t,a)=>{e=a.nmd(e);try{process.dlopen(e,__dirname+a(17).sep+a.p+"java.linux-x64-gnu.node")}catch(e){throw new Error("node-loader:\n"+e)}},163:(e,t,a)=>{const{existsSync:r,readFileSync:n}=a(147),{join:i}=a(17),{platform:o,arch:s}=process;let c=null,d=!1,u=null;function l(){if(process.report&&"function"==typeof process.report.getReport){const{glibcVersionRuntime:e}=process.report.getReport().header;return!e}try{return n("/usr/bin/ldd","utf8").includes("musl")}catch(e){return!0}}switch(o){case"android":switch(s){case"arm64":d=r(i(__dirname,"java.android-arm64.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.android-arm64.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-android-arm64")}catch(e){u=e}break;case"arm":d=r(i(__dirname,"java.android-arm-eabi.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.android-arm-eabi.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-android-arm-eabi")}catch(e){u=e}break;default:throw new Error(`Unsupported architecture on Android ${s}`)}break;case"win32":switch(s){case"x64":d=r(i(__dirname,"java.win32-x64-msvc.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.win32-x64-msvc.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-win32-x64-msvc")}catch(e){u=e}break;case"ia32":d=r(i(__dirname,"java.win32-ia32-msvc.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.win32-ia32-msvc.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-win32-ia32-msvc")}catch(e){u=e}break;case"arm64":d=r(i(__dirname,"java.win32-arm64-msvc.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.win32-arm64-msvc.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-win32-arm64-msvc")}catch(e){u=e}break;default:throw new Error(`Unsupported architecture on Windows: ${s}`)}break;case"darwin":switch(s){case"x64":d=r(i(__dirname,"java.darwin-x64.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.darwin-x64.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-darwin-x64")}catch(e){u=e}break;case"arm64":d=r(i(__dirname,"java.darwin-arm64.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.darwin-arm64.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-darwin-arm64")}catch(e){u=e}break;default:throw new Error(`Unsupported architecture on macOS: ${s}`)}break;case"freebsd":if("x64"!==s)throw new Error(`Unsupported architecture on FreeBSD: ${s}`);d=r(i(__dirname,"java.freebsd-x64.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.freebsd-x64.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-freebsd-x64")}catch(e){u=e}break;case"linux":switch(s){case"x64":if(l()){d=r(i(__dirname,"java.linux-x64-musl.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.linux-x64-musl.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-linux-x64-musl")}catch(e){u=e}}else{d=r(i(__dirname,"java.linux-x64-gnu.node"));try{c=d?a(388):require("java-bridge-linux-x64-gnu")}catch(e){u=e}}break;case"arm64":if(l()){d=r(i(__dirname,"java.linux-arm64-musl.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.linux-arm64-musl.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-linux-arm64-musl")}catch(e){u=e}}else{d=r(i(__dirname,"java.linux-arm64-gnu.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.linux-arm64-gnu.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-linux-arm64-gnu")}catch(e){u=e}}break;case"arm":d=r(i(__dirname,"java.linux-arm-gnueabihf.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.linux-arm-gnueabihf.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-linux-arm-gnueabihf")}catch(e){u=e}break;default:throw new Error(`Unsupported architecture on Linux: ${s}`)}break;default:throw new Error(`Unsupported OS: ${o}, architecture: ${s}`)}if(!c){if(u)throw u;throw new Error("Failed to load native binding")}const{Java:p,getClassFields:f,getField:m,setField:h,getStaticField:v,setStaticField:_,JavaInterfaceProxy:b,StdoutRedirect:y,getJavaLibPath:g}=c;e.exports.Java=p,e.exports.getClassFields=f,e.exports.getField=m,e.exports.setField=h,e.exports.getStaticField=v,e.exports.setStaticField=_,e.exports.JavaInterfaceProxy=b,e.exports.StdoutRedirect=y,e.exports.getJavaLibPath=g},248:function(e,t,a){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,a,r){void 0===r&&(r=a);var n=Object.getOwnPropertyDescriptor(t,a);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,r,n)}:function(e,t,a,r){void 0===r&&(r=a),e[r]=t[a]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&r(t,e,a);return n(t,e),t},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=i(a(7)),c=a(236),d=o(a(147)),u=o(a(17)),l=s.default.createSourceFile("source.ts","",s.default.ScriptTarget.Latest,!1,s.default.ScriptKind.TS);class p{constructor(e,t=null,a=[]){this.classname=e,this.progressCallback=t,this.resolvedImports=a,this.usesBasicOrJavaType=!1,this.additionalImports=[],this.importsToResolve=[]}static async convertMethods(e){const t=await(0,c.importClassAsync)("java.lang.reflect.Modifier"),a={};for(const r of e){const e=await r.getModifiers();if(await t.isPublic(e)){const n=await r.getName(),i=await r.getReturnType(),o=await r.getParameterTypes(),s={returnType:await i.getTypeName(),parameters:await Promise.all(o.map((e=>e.getTypeName()))),isStatic:await t.isStatic(e)};Object.hasOwn(a,n)?a[n].push(s):a[n]=[s]}}return a}async convertConstructors(e){const t=await(0,c.importClassAsync)("java.lang.reflect.Modifier"),a=[];for(const r of e){const e=await r.getModifiers();if(await t.isPublic(e)){const e=await r.getParameterTypes();a.push(await Promise.all(e.map((e=>e.getTypeName()))))}}const r=a.map(((e,t)=>{const a=e.map(this.convertParameter.bind(this));let r=s.default.factory.createConstructorDeclaration(void 0,[s.default.factory.createModifier(s.default.SyntaxKind.PublicKeyword)],a,void 0);return 0===t&&(r=s.default.addSyntheticLeadingComment(r,s.default.SyntaxKind.SingleLineCommentTrivia," ================== Constructors ==================",!0)),e.length>0&&(r=s.default.addSyntheticLeadingComment(r,s.default.SyntaxKind.MultiLineCommentTrivia,"*\n"+e.map(((e,t)=>` * @param var${t} original type: '${e}'\n`)).join("")+" ",!0)),r}));return[...a.map(((e,t)=>this.createMethod({returnType:this.classname,parameters:e,isStatic:!0},"newInstance",t,!1))),...r]}javaTypeToTypescriptType(e,t){switch(e){case"byte[]":case"java.lang.Byte[]":return{...s.default.factory.createIdentifier("Buffer"),_typeNodeBrand:""}}if(e.endsWith("[]"))return s.default.factory.createArrayTypeNode(this.javaTypeToTypescriptType(e.substring(0,e.length-2),t));switch(e){case"int":case"java.lang.Integer":case"long":case"java.lang.Long":case"float":case"java.lang.Float":case"double":case"java.lang.Double":case"byte":case"java.lang.Byte":case"short":case"java.lang.Short":return s.default.factory.createKeywordTypeNode(s.default.SyntaxKind.NumberKeyword);case"char":case"java.lang.Character":case"java.lang.String":return s.default.factory.createKeywordTypeNode(s.default.SyntaxKind.StringKeyword);case"boolean":case"java.lang.Boolean":return s.default.factory.createKeywordTypeNode(s.default.SyntaxKind.BooleanKeyword);case"void":case"java.lang.Void":return s.default.factory.createKeywordTypeNode(s.default.SyntaxKind.VoidKeyword);case"java.lang.Object":return this.usesBasicOrJavaType=!0,{...s.default.factory.createIdentifier("BasicOrJavaType"),_typeNodeBrand:""};default:this.resolvedImports.includes(e)||this.additionalImports.push(e),this.importsToResolve.push(e);const a=e===this.classname&&t;return{...s.default.factory.createIdentifier(e===this.classname?e.substring(e.lastIndexOf(".")+1)+(a?"Class":""):e.replaceAll(".","_")),_typeNodeBrand:""}}}convertParameter(e,t){const a="var"+t,r=this.javaTypeToTypescriptType(e,!0);return s.default.factory.createParameterDeclaration(void 0,void 0,void 0,a,void 0,r)}convertParameters(e){return e.parameters.map(this.convertParameter.bind(this))}static createMethodComment(e){return"*\n"+e.parameters.map(((e,t)=>` * @param var${t} original type: '${e}'\n`)).join("")+` * @return original return type: '${e.returnType}'\n `}createMethod(e,t,a,r){const n=s.default.factory.createModifier(s.default.SyntaxKind.PublicKeyword),i=s.default.factory.createModifier(s.default.SyntaxKind.StaticKeyword),o=[n];e.isStatic&&o.push(i);let c=this.javaTypeToTypescriptType(e.returnType,!1);r||(c=s.default.factory.createTypeReferenceNode(s.default.factory.createIdentifier("Promise"),[c]));let d=s.default.factory.createMethodDeclaration(void 0,o,void 0,t+(r?"Sync":""),void 0,void 0,this.convertParameters(e),c,void 0);return 0===a&&(d=s.default.addSyntheticLeadingComment(d,s.default.SyntaxKind.SingleLineCommentTrivia,` ================== Method ${t} ==================`,!0)),s.default.addSyntheticLeadingComment(d,s.default.SyntaxKind.MultiLineCommentTrivia,p.createMethodComment(e),!0)}convertMethod(e,t){const a=[];for(let r=0;r<e.length;r++){const n=e[r];a.push(this.createMethod(n,t,r,!1),this.createMethod(n,t,r,!0))}return a}getAdditionalImports(){const e=e=>{const t=this.classname.split("."),a=e.split(".");for(let e=0;e<t.length&&a[e]===t[e];e++)t[e]=null,a[e]=null;return"./"+t.filter((e=>!!e)).map((()=>"")).join("../")+a.filter((e=>!!e)).join("/")};return this.importsToResolve.filter((e=>e!=this.classname)).filter(((e,t,a)=>a.indexOf(e)===t)).map((t=>s.default.factory.createImportDeclaration(void 0,void 0,s.default.factory.createImportClause(!1,void 0,s.default.factory.createNamedImports([s.default.factory.createImportSpecifier(!1,s.default.factory.createIdentifier(t.substring(t.lastIndexOf(".")+1)),s.default.factory.createIdentifier(t.replaceAll(".","_")))])),s.default.factory.createStringLiteral(e(t)))))}getImports(){const e=[s.default.factory.createImportSpecifier(!1,void 0,s.default.factory.createIdentifier("importClass")),s.default.factory.createImportSpecifier(!1,void 0,s.default.factory.createIdentifier("JavaClassInstance"))];this.usesBasicOrJavaType&&e.push(s.default.factory.createImportSpecifier(!1,void 0,s.default.factory.createIdentifier("BasicOrJavaType")));const t=s.default.factory.createNamedImports(e);return s.default.factory.createImportDeclaration(void 0,void 0,s.default.factory.createImportClause(!1,void 0,t),s.default.factory.createStringLiteral("java-bridge"))}getExportStatement(e){const t=s.default.factory.createClassDeclaration(void 0,[s.default.factory.createModifier(s.default.SyntaxKind.ExportKeyword)],e,void 0,[s.default.factory.createHeritageClause(s.default.SyntaxKind.ExtendsKeyword,[s.default.factory.createExpressionWithTypeArguments(s.default.factory.createIdentifier(`importClass<typeof ${e}Class>("${this.classname}")`),void 0)])],[]);return[s.default.addSyntheticLeadingComment(t,s.SyntaxKind.MultiLineCommentTrivia,`*\n * Class ${this.classname}.\n *\n * This actually imports the java class for further use.\n * The class ${e}Class only defines types, this is the class you should actually import.\n * Please note that this statement imports the underlying java class at runtime, which may take a while.\n * This was generated by java-bridge.\n * You should probably not edit this.\n `,!0),s.default.factory.createExportDefault(s.default.factory.createIdentifier(e))]}getText(e){return e.map((e=>e&&s.default.createPrinter({newLine:s.default.NewLineKind.LineFeed}).printNode(s.default.EmitHint.Unspecified,e,l)||"")).join("\n")}async generate(){if(this.resolvedImports.includes(this.classname))return[];this.resolvedImports.push(this.classname),this.progressCallback&&this.progressCallback(this.classname);const e=(await(0,c.importClassAsync)(this.classname)).class,t=this.classname.substring(this.classname.lastIndexOf(".")+1),a=await e.getDeclaredMethods(),r=[],n=await p.convertMethods(a);for(const e of Object.keys(n)){const t=n[e];r.push(...this.convertMethod(t,e))}const i=await e.getDeclaredConstructors(),o=await this.convertConstructors(i);r.push(...o);let d=s.default.factory.createClassDeclaration(void 0,[s.default.factory.createModifier(s.default.SyntaxKind.ExportKeyword),s.default.factory.createModifier(s.default.SyntaxKind.DeclareKeyword)],t+"Class",void 0,[s.default.factory.createHeritageClause(s.default.SyntaxKind.ExtendsKeyword,[s.default.factory.createExpressionWithTypeArguments(s.default.factory.createIdentifier("JavaClassInstance"),void 0)])],r);d=s.default.addSyntheticLeadingComment(d,s.default.SyntaxKind.MultiLineCommentTrivia,`*\n * This class just defines types, you should import ${t} instead of this.\n * This was generated by java-bridge.\n * You should probably not edit this.\n `,!0);const u=this.getText([this.getImports(),...this.getAdditionalImports(),null,d,null,...this.getExportStatement(t)]),l=[];for(const e of this.additionalImports){const t=new p(e,this.progressCallback,this.resolvedImports),a=await t.generate();l.push(...a)}return l.push({name:this.classname,contents:u}),l}static async save(e,t){for(const a of e){const e=a.name.split(".");e[e.length-1]=e[e.length-1]+".ts";const r=u.default.join(t,...e);await d.default.promises.mkdir(u.default.dirname(r),{recursive:!0}),await d.default.promises.writeFile(r,a.contents,{encoding:"utf8"})}}}t.default=p},91:(e,t)=>{"use strict";var a;Object.defineProperty(t,"__esModule",{value:!0}),t.JavaObject=t.JavaVersion=void 0,function(e){e.VER_1_1="1.1",e.VER_1_2="1.2",e.VER_1_4="1.4",e.VER_1_6="1.6",e.VER_1_8="1.8",e.VER_9="9",e.VER_10="10"}(a=t.JavaVersion||(t.JavaVersion={})),Object.freeze(a),t.JavaObject=class{}},236:function(e,t,a){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,a,r){void 0===r&&(r=a);var n=Object.getOwnPropertyDescriptor(t,a);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,r,n)}:function(e,t,a,r){void 0===r&&(r=a),e[r]=t[a]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__exportStar||function(e,t){for(var a in e)"default"===a||Object.prototype.hasOwnProperty.call(t,a)||r(t,e,a)},o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&r(t,e,a);return n(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.getJavaLibPath=t.JavaClassProxy=t.JavaClassInstance=t.JavaObject=t.JavaVersion=void 0;var s=a(91);Object.defineProperty(t,"JavaVersion",{enumerable:!0,get:function(){return s.JavaVersion}}),Object.defineProperty(t,"JavaObject",{enumerable:!0,get:function(){return s.JavaObject}}),Object.defineProperty(t,"JavaClassInstance",{enumerable:!0,get:function(){return s.JavaClassInstance}}),Object.defineProperty(t,"JavaClassProxy",{enumerable:!0,get:function(){return s.JavaClassProxy}}),i(a(818),t);const c=o(a(818));t.default=c;var d=a(163);Object.defineProperty(t,"getJavaLibPath",{enumerable:!0,get:function(){return d.getJavaLibPath}})},818:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getJavaInstance=t.newProxy=t.stdout=t.classpath=t.isInstanceOf=t.appendClasspath=t.importClassAsync=t.importClass=t.ensureJvm=void 0;const r=a(163),n=a(841);let i=null;function o(e){i||(i=new r.Java(e?.libPath,e?.version,e?.opts,e,(0,n.getJavaLibPath)(),(0,n.getNativeLibPath)()))}function s(e,t){for(const a of(0,r.getClassFields)(e["class.proxy"],t)){const n=()=>t?(0,r.getStaticField)(e,a.name):(0,r.getField)(e,a.name);a.isFinal?Object.defineProperty(e,a.name,{get:n,enumerable:!0}):Object.defineProperty(e,a.name,{get:n,set:n=>t?(0,r.setStaticField)(e,a.name,n):(0,r.setField)(e,a.name,n),enumerable:!0})}}function c(e){o(),i.appendClasspath(e)}var d;t.ensureJvm=o,t.importClass=function(e){o();const t=i.importClass(e);return s(t,!0),t.constructor=function(...e){const a=new t.prototype.constructor(...e);return s(a,!1),a},t},t.importClassAsync=async function(e){o();const t=await i.importClassAsync(e);return s(t,!0),t.constructor=function(...e){const a=new t.prototype.constructor(...e);return s(a,!1),a},t},t.appendClasspath=c,t.isInstanceOf=function(e,t){return o(),i.isInstanceOf(e,t)},(d=t.classpath||(t.classpath={})).append=function(e){c(e)},d.get=function(){return o(),i.loadedJars},(t.stdout||(t.stdout={})).enableRedirect=function(e,t){return o(),i.setStdoutCallbacks(e,t)},t.newProxy=function(e,t){o();const a=Object.create(null);for(const[e,r]of Object.entries(t))a[e]=(e,t,...a)=>{if(e)throw e;try{t(null,r(...a))}catch(e){e instanceof Error?t(e):t(new Error(e.toString()))}};return i.createInterfaceProxy(e,a)},t.getJavaInstance=function(){return i}},841:function(e,t,a){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,a,r){void 0===r&&(r=a);var n=Object.getOwnPropertyDescriptor(t,a);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,r,n)}:function(e,t,a,r){void 0===r&&(r=a),e[r]=t[a]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&r(t,e,a);return n(t,e),t},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getJavaLibPath=t.getNativeLibPath=void 0;const s=o(a(17)),c=i(a(147)),d=o(a(230)),{platform:u,arch:l}=process;function p(e){const t=s.default.join(__dirname,e+".node");if(c.default.existsSync(t))return t;{const t=e.replaceAll(".","-").replace("java","java-bridge");return require&&require.resolve?require.resolve(t):a(955).resolve(t)}}function f(){return new Error(`Unsupported platform: ${u} ${l}`)}t.getNativeLibPath=function(){switch(u){case"android":switch(l){case"arm64":return p("java.android-arm64");case"arm":return p("java.android-arm-eabi");default:throw f()}case"win32":return p(`java.win32-${l}-msvc`);case"darwin":return p(`java.darwin-${l}`);case"freebsd":return p(`java.freebsd-${l}`);case"linux":switch(l){case"x64":case"arm64":return p(`java.linux-${l}-${function(){if(process.report&&"function"==typeof process.report.getReport){const{glibcVersionRuntime:e}=process.report.getReport().header;return!e}try{return(0,c.readFileSync)("/usr/bin/ldd","utf8").includes("musl")}catch(e){return!0}}()?"musl":"gnu"}`);case"arm":return p("java.linux-arm-gnueabihf");default:throw f()}default:throw f()}},t.getJavaLibPath=function(){const e=s.default.join(__dirname,"..","java-src","build","libs");let t=d.default.sync("*.jar",{cwd:e});if(0===t.length)throw new Error(`No java lib found in ${e}`);return s.default.join(e,t[0])}},764:function(__unused_webpack_module,exports,__webpack_require__){"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,a,r){void 0===r&&(r=a);var n=Object.getOwnPropertyDescriptor(t,a);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,r,n)}:function(e,t,a,r){void 0===r&&(r=a),e[r]=t[a]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&__createBinding(t,e,a);return __setModuleDefault(t,e),t},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const yargs_1=__importDefault(__webpack_require__(760)),perf_hooks_1=__webpack_require__(74),path_1=__importDefault(__webpack_require__(17)),__1=__importDefault(__webpack_require__(236)),package_json_1=__webpack_require__(598),importOra=()=>eval("import('ora').then(ora => ora.default)"),importChalk=()=>eval("import('chalk').then(chalk => chalk.default)"),builder=e=>{e.positional("classnames",{describe:"The fully qualified class name(s) to convert",type:"string"}),e.positional("output",{describe:"The output file",type:"string"}),e.option("classpath",{alias:"cp",type:"string",describe:"The classpath to use"})},handler=async({classnames:e,output:t,classpath:a})=>{try{const r=perf_hooks_1.performance.now();a&&__1.default.classpath.append(a);const n=await importChalk(),i=await importOra();console.log(`Starting ${n.cyanBright("java-bridge")} ${n.greenBright("v"+package_json_1.version)} Java definition generator`);const o=__1.default.getJavaInstance(),s=__1.default.classpath.get();s.length>0&&console.log(`Started JVM with version ${n.cyanBright(o.version)} and classpath '${s.map((e=>n.cyanBright(e))).join(";")}'`),console.log(`Converting classes ${e.map((e=>n.magentaBright(e))).join(", ")} to typescript and saving result to ${n.cyanBright(path_1.default.normalize(t))}`);const c=i().start(),d=[];let u=0,l=0,p=0,f="";const m=setInterval((()=>{p+=1,h()}),1e3),h=()=>{c.text=n.gray(`Elapsed time: ${n.yellow(p)} seconds ${n.white("|")} Converted ${n.cyanBright(u)} classes ${n.white("|")} Converting class ${n.magentaBright(f)}`)},v=(await Promise.resolve().then((()=>__importStar(__webpack_require__(248))))).default;for(const a of e){const e=new v(a,(e=>{f=e,u++,h()}),d),r=await e.generate();l+=r.length,c.text="saving results",await v.save(r,t)}clearInterval(m);const _=((perf_hooks_1.performance.now()-r)/1e3).toFixed(1);c.succeed(`Success - Converted ${n.blueBright(l)} classes in ${n.blueBright(_)} seconds`)}catch(e){console.error(e),process.exit(1)}};yargs_1.default.command("* <output> <classnames..>",!1,builder,handler).parse()},955:e=>{function t(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}t.keys=()=>[],t.resolve=t,t.id=955,e.exports=t},230:e=>{"use strict";e.exports=require("glob")},7:e=>{"use strict";e.exports=require("typescript")},760:e=>{"use strict";e.exports=require("yargs")},147:e=>{"use strict";e.exports=require("fs")},17:e=>{"use strict";e.exports=require("path")},74:e=>{"use strict";e.exports=require("perf_hooks")},598:e=>{"use strict";e.exports=JSON.parse('{"name":"java-bridge","version":"2.1.1","main":"dist/index.prod.min.js","typings":"ts-src/index.ts","description":"A bridge between Node.js and Java APIs","repository":{"type":"git","url":"git+https://github.com/MarkusJx/node-java-bridge.git"},"author":"MarkusJx","bugs":{"url":"https://github.com/MarkusJx/node-java-bridge/issues"},"homepage":"https://github.com/MarkusJx/node-java-bridge#readme","files":["ts-src","dist/*.js","java-src/build/libs/*.jar"],"napi":{"name":"java","triples":{"additional":["aarch64-apple-darwin","i686-pc-windows-msvc"]}},"bin":{"java-ts-gen":"./dist/java-ts-gen.js"},"license":"MIT","prettier":{"printWidth":80,"semi":true,"singleQuote":true,"tabWidth":4,"trailingComma":"es5"},"engines":{"node":">= 15"},"scripts":{"artifacts":"napi artifacts","build":"npm run build:napi","build:debug":"npm run build:napi:debug && npm run build:ts && npm run build:java","postbuild":"npm run build:ts && npm run build:java","build:napi":"napi build --platform --release --js native.js --dts native.d.ts","build:napi:debug":"napi build --platform --js native.js --dts native.d.ts","build:ts":"webpack build","build:java":"run-script-os","build:java:darwin:linux":"cd java-src && chmod +x gradlew && ./gradlew shadowJar","build:java:win32":"cd java-src && .\\\\gradlew.bat shadowJar","prepublishOnly":"napi prepublish -t npm","test":"mocha -r ts-node/register test/**/*.test.ts","pretest":"npm run build","version":"napi version","prettier":"prettier --write .","prebuild":"rimraf dist","prebuild:debug":"rimraf dist","benchmark":"ts-node -P test/tsconfig.json test/benchmark/benchmark.ts && ts-node -P test/tsconfig.json test/benchmark/benchmarkDaemonThreads.ts","prebenchmark":"npm run build","docs":"typedoc --out docs ts-src/index.ts"},"dependencies":{"chalk":"^5.0.1","glob":"^8.0.3","ora":"^6.1.2","typescript":"^4.8.2","yargs":"^17.5.1"},"devDependencies":{"@napi-rs/cli":"^2.11.4","@types/chai":"^4.3.3","@types/glob":"^8.0.0","@types/mocha":"^9.1.1","@types/node":"^18.7.14","@types/semver":"^7.3.12","@types/webpack-node-externals":"^2.5.3","@types/yargs":"^17.0.12","chai":"^4.3.6","expose-gc":"^1.0.0","mocha":"^10.0.0","nanobench":"^3.0.0","node-loader":"^2.0.0","prettier":"^2.7.1","rimraf":"^3.0.2","run-script-os":"^1.1.6","semver":"^7.3.7","string-replace-loader":"^3.1.0","ts-loader":"^9.3.1","ts-node":"^10.9.1","tslib":"^2.4.0","typedoc":"^0.23.13","webpack":"^5.74.0","webpack-cli":"^4.10.0","webpack-node-externals":"^3.0.0"},"optionalDependencies":{"java-bridge-darwin-arm64":"2.1.0","java-bridge-darwin-x64":"2.1.0","java-bridge-linux-x64-gnu":"2.1.0","java-bridge-win32-ia32-msvc":"2.1.0","java-bridge-win32-x64-msvc":"^2.1.0"}}')}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var a=__webpack_module_cache__[e]={id:e,loaded:!1,exports:{}};return __webpack_modules__[e].call(a.exports,a,a.exports,__webpack_require__),a.loaded=!0,a.exports}__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),__webpack_require__.p="";var __webpack_exports__=__webpack_require__(764);return __webpack_exports__})()));
2
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.java=t():e.java=t()}(global,(()=>(()=>{var __webpack_modules__={388:(e,t,a)=>{e=a.nmd(e);try{process.dlopen(e,__dirname+a(17).sep+a.p+"java.linux-x64-gnu.node")}catch(e){throw new Error("node-loader:\n"+e)}},163:(e,t,a)=>{const{existsSync:r,readFileSync:n}=a(147),{join:i}=a(17),{platform:o,arch:s}=process;let c=null,d=!1,u=null;function l(){if(process.report&&"function"==typeof process.report.getReport){const{glibcVersionRuntime:e}=process.report.getReport().header;return!e}try{return n("/usr/bin/ldd","utf8").includes("musl")}catch(e){return!0}}switch(o){case"android":switch(s){case"arm64":d=r(i(__dirname,"java.android-arm64.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.android-arm64.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-android-arm64")}catch(e){u=e}break;case"arm":d=r(i(__dirname,"java.android-arm-eabi.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.android-arm-eabi.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-android-arm-eabi")}catch(e){u=e}break;default:throw new Error(`Unsupported architecture on Android ${s}`)}break;case"win32":switch(s){case"x64":d=r(i(__dirname,"java.win32-x64-msvc.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.win32-x64-msvc.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-win32-x64-msvc")}catch(e){u=e}break;case"ia32":d=r(i(__dirname,"java.win32-ia32-msvc.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.win32-ia32-msvc.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-win32-ia32-msvc")}catch(e){u=e}break;case"arm64":d=r(i(__dirname,"java.win32-arm64-msvc.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.win32-arm64-msvc.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-win32-arm64-msvc")}catch(e){u=e}break;default:throw new Error(`Unsupported architecture on Windows: ${s}`)}break;case"darwin":switch(s){case"x64":d=r(i(__dirname,"java.darwin-x64.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.darwin-x64.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-darwin-x64")}catch(e){u=e}break;case"arm64":d=r(i(__dirname,"java.darwin-arm64.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.darwin-arm64.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-darwin-arm64")}catch(e){u=e}break;default:throw new Error(`Unsupported architecture on macOS: ${s}`)}break;case"freebsd":if("x64"!==s)throw new Error(`Unsupported architecture on FreeBSD: ${s}`);d=r(i(__dirname,"java.freebsd-x64.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.freebsd-x64.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-freebsd-x64")}catch(e){u=e}break;case"linux":switch(s){case"x64":if(l()){d=r(i(__dirname,"java.linux-x64-musl.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.linux-x64-musl.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-linux-x64-musl")}catch(e){u=e}}else{d=r(i(__dirname,"java.linux-x64-gnu.node"));try{c=d?a(388):require("java-bridge-linux-x64-gnu")}catch(e){u=e}}break;case"arm64":if(l()){d=r(i(__dirname,"java.linux-arm64-musl.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.linux-arm64-musl.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-linux-arm64-musl")}catch(e){u=e}}else{d=r(i(__dirname,"java.linux-arm64-gnu.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.linux-arm64-gnu.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-linux-arm64-gnu")}catch(e){u=e}}break;case"arm":d=r(i(__dirname,"java.linux-arm-gnueabihf.node"));try{c=d?a(Object(function(){var e=new Error("Cannot find module './java.linux-arm-gnueabihf.node'");throw e.code="MODULE_NOT_FOUND",e}())):require("java-bridge-linux-arm-gnueabihf")}catch(e){u=e}break;default:throw new Error(`Unsupported architecture on Linux: ${s}`)}break;default:throw new Error(`Unsupported OS: ${o}, architecture: ${s}`)}if(!c){if(u)throw u;throw new Error("Failed to load native binding")}const{Java:p,getClassFields:f,getField:m,setField:h,getStaticField:v,setStaticField:_,JavaInterfaceProxy:b,StdoutRedirect:y,getJavaLibPath:g}=c;e.exports.Java=p,e.exports.getClassFields=f,e.exports.getField=m,e.exports.setField=h,e.exports.getStaticField=v,e.exports.setStaticField=_,e.exports.JavaInterfaceProxy=b,e.exports.StdoutRedirect=y,e.exports.getJavaLibPath=g},248:function(e,t,a){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,a,r){void 0===r&&(r=a);var n=Object.getOwnPropertyDescriptor(t,a);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,r,n)}:function(e,t,a,r){void 0===r&&(r=a),e[r]=t[a]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&r(t,e,a);return n(t,e),t},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=i(a(7)),c=a(236),d=o(a(147)),u=o(a(17)),l=s.default.createSourceFile("source.ts","",s.default.ScriptTarget.Latest,!1,s.default.ScriptKind.TS);class p{constructor(e,t=null,a=[]){this.classname=e,this.progressCallback=t,this.resolvedImports=a,this.usesBasicOrJavaType=!1,this.additionalImports=[],this.importsToResolve=[]}static async convertMethods(e){const t=await(0,c.importClassAsync)("java.lang.reflect.Modifier"),a={};for(const r of e){const e=await r.getModifiers();if(await t.isPublic(e)){const n=await r.getName(),i=await r.getReturnType(),o=await r.getParameterTypes(),s={returnType:await i.getTypeName(),parameters:await Promise.all(o.map((e=>e.getTypeName()))),isStatic:await t.isStatic(e)};Object.hasOwn(a,n)?a[n].push(s):a[n]=[s]}}return a}async convertConstructors(e){const t=await(0,c.importClassAsync)("java.lang.reflect.Modifier"),a=[];for(const r of e){const e=await r.getModifiers();if(await t.isPublic(e)){const e=await r.getParameterTypes();a.push(await Promise.all(e.map((e=>e.getTypeName()))))}}const r=a.map(((e,t)=>{const a=e.map(this.convertParameter.bind(this));let r=s.default.factory.createConstructorDeclaration([s.default.factory.createModifier(s.default.SyntaxKind.PublicKeyword)],a,void 0);return 0===t&&(r=s.default.addSyntheticLeadingComment(r,s.default.SyntaxKind.SingleLineCommentTrivia," ================== Constructors ==================",!0)),e.length>0&&(r=s.default.addSyntheticLeadingComment(r,s.default.SyntaxKind.MultiLineCommentTrivia,"*\n"+e.map(((e,t)=>` * @param var${t} original type: '${e}'\n`)).join("")+" ",!0)),r}));return[...a.map(((e,t)=>this.createMethod({returnType:this.classname,parameters:e,isStatic:!0},"newInstance",t,!1))),...r]}javaTypeToTypescriptType(e,t){switch(e){case"byte[]":case"java.lang.Byte[]":return s.default.factory.createTypeReferenceNode("Buffer")}if(e.endsWith("[]"))return s.default.factory.createArrayTypeNode(this.javaTypeToTypescriptType(e.substring(0,e.length-2),t));switch(e){case"int":case"java.lang.Integer":case"long":case"java.lang.Long":case"float":case"java.lang.Float":case"double":case"java.lang.Double":case"byte":case"java.lang.Byte":case"short":case"java.lang.Short":return s.default.factory.createKeywordTypeNode(s.default.SyntaxKind.NumberKeyword);case"char":case"java.lang.Character":case"java.lang.String":return s.default.factory.createKeywordTypeNode(s.default.SyntaxKind.StringKeyword);case"boolean":case"java.lang.Boolean":return s.default.factory.createKeywordTypeNode(s.default.SyntaxKind.BooleanKeyword);case"void":case"java.lang.Void":return s.default.factory.createKeywordTypeNode(s.default.SyntaxKind.VoidKeyword);case"java.lang.Object":return this.usesBasicOrJavaType=!0,s.default.factory.createTypeReferenceNode("BasicOrJavaType");default:this.resolvedImports.includes(e)||this.additionalImports.push(e),this.importsToResolve.push(e);const a=e===this.classname&&t;return s.default.factory.createTypeReferenceNode(e===this.classname?e.substring(e.lastIndexOf(".")+1)+(a?"Class":""):e.replaceAll(".","_"))}}convertParameter(e,t){const a="var"+t,r=this.javaTypeToTypescriptType(e,!0);return s.default.factory.createParameterDeclaration(void 0,void 0,a,void 0,r)}convertParameters(e){return e.parameters.map(this.convertParameter.bind(this))}static createMethodComment(e){return"*\n"+e.parameters.map(((e,t)=>` * @param var${t} original type: '${e}'\n`)).join("")+` * @return original return type: '${e.returnType}'\n `}createMethod(e,t,a,r){const n=s.default.factory.createModifier(s.default.SyntaxKind.PublicKeyword),i=s.default.factory.createModifier(s.default.SyntaxKind.StaticKeyword),o=[n];e.isStatic&&o.push(i);let c=this.javaTypeToTypescriptType(e.returnType,!1);r||(c=s.default.factory.createTypeReferenceNode(s.default.factory.createIdentifier("Promise"),[c]));let d=s.default.factory.createMethodDeclaration(o,void 0,t+(r?"Sync":""),void 0,void 0,this.convertParameters(e),c,void 0);return 0===a&&(d=s.default.addSyntheticLeadingComment(d,s.default.SyntaxKind.SingleLineCommentTrivia,` ================== Method ${t} ==================`,!0)),s.default.addSyntheticLeadingComment(d,s.default.SyntaxKind.MultiLineCommentTrivia,p.createMethodComment(e),!0)}convertMethod(e,t){const a=[];for(let r=0;r<e.length;r++){const n=e[r];a.push(this.createMethod(n,t,r,!1),this.createMethod(n,t,r,!0))}return a}getAdditionalImports(){const e=e=>{const t=this.classname.split("."),a=e.split(".");for(let e=0;e<t.length&&a[e]===t[e];e++)t[e]=null,a[e]=null;return"./"+t.filter((e=>!!e)).map((()=>"")).join("../")+a.filter((e=>!!e)).join("/")};return this.importsToResolve.filter((e=>e!=this.classname)).filter(((e,t,a)=>a.indexOf(e)===t)).map((t=>s.default.factory.createImportDeclaration(void 0,s.default.factory.createImportClause(!1,void 0,s.default.factory.createNamedImports([s.default.factory.createImportSpecifier(!1,s.default.factory.createIdentifier(t.substring(t.lastIndexOf(".")+1)),s.default.factory.createIdentifier(t.replaceAll(".","_")))])),s.default.factory.createStringLiteral(e(t)))))}getImports(){const e=[s.default.factory.createImportSpecifier(!1,void 0,s.default.factory.createIdentifier("importClass")),s.default.factory.createImportSpecifier(!1,void 0,s.default.factory.createIdentifier("JavaClassInstance"))];this.usesBasicOrJavaType&&e.push(s.default.factory.createImportSpecifier(!1,void 0,s.default.factory.createIdentifier("BasicOrJavaType")));const t=s.default.factory.createNamedImports(e);return s.default.factory.createImportDeclaration(void 0,s.default.factory.createImportClause(!1,void 0,t),s.default.factory.createStringLiteral("java-bridge"))}getExportStatement(e){const t=s.default.factory.createClassDeclaration([s.default.factory.createModifier(s.default.SyntaxKind.ExportKeyword)],e,void 0,[s.default.factory.createHeritageClause(s.default.SyntaxKind.ExtendsKeyword,[s.default.factory.createExpressionWithTypeArguments(s.default.factory.createIdentifier(`importClass<typeof ${e}Class>("${this.classname}")`),void 0)])],[]);return[s.default.addSyntheticLeadingComment(t,s.SyntaxKind.MultiLineCommentTrivia,`*\n * Class ${this.classname}.\n *\n * This actually imports the java class for further use.\n * The class ${e}Class only defines types, this is the class you should actually import.\n * Please note that this statement imports the underlying java class at runtime, which may take a while.\n * This was generated by java-bridge.\n * You should probably not edit this.\n `,!0),s.default.factory.createExportDefault(s.default.factory.createIdentifier(e))]}getText(e){return e.map((e=>e&&s.default.createPrinter({newLine:s.default.NewLineKind.LineFeed}).printNode(s.default.EmitHint.Unspecified,e,l)||"")).join("\n")}async generate(){if(this.resolvedImports.includes(this.classname))return[];this.resolvedImports.push(this.classname),this.progressCallback&&this.progressCallback(this.classname);const e=(await(0,c.importClassAsync)(this.classname)).class,t=this.classname.substring(this.classname.lastIndexOf(".")+1),a=await e.getDeclaredMethods(),r=[],n=await p.convertMethods(a);for(const e of Object.keys(n)){const t=n[e];r.push(...this.convertMethod(t,e))}const i=await e.getDeclaredConstructors(),o=await this.convertConstructors(i);r.push(...o);let d=s.default.factory.createClassDeclaration([s.default.factory.createModifier(s.default.SyntaxKind.ExportKeyword),s.default.factory.createModifier(s.default.SyntaxKind.DeclareKeyword)],t+"Class",void 0,[s.default.factory.createHeritageClause(s.default.SyntaxKind.ExtendsKeyword,[s.default.factory.createExpressionWithTypeArguments(s.default.factory.createIdentifier("JavaClassInstance"),void 0)])],r);d=s.default.addSyntheticLeadingComment(d,s.default.SyntaxKind.MultiLineCommentTrivia,`*\n * This class just defines types, you should import ${t} instead of this.\n * This was generated by java-bridge.\n * You should probably not edit this.\n `,!0);const u=this.getText([this.getImports(),...this.getAdditionalImports(),null,d,null,...this.getExportStatement(t)]),l=[];for(const e of this.additionalImports){const t=new p(e,this.progressCallback,this.resolvedImports),a=await t.generate();l.push(...a)}return l.push({name:this.classname,contents:u}),l}static async save(e,t){for(const a of e){const e=a.name.split(".");e[e.length-1]=e[e.length-1]+".ts";const r=u.default.join(t,...e);await d.default.promises.mkdir(u.default.dirname(r),{recursive:!0}),await d.default.promises.writeFile(r,a.contents,{encoding:"utf8"})}}}t.default=p},91:(e,t)=>{"use strict";var a;Object.defineProperty(t,"__esModule",{value:!0}),t.JavaObject=t.JavaVersion=void 0,function(e){e.VER_1_1="1.1",e.VER_1_2="1.2",e.VER_1_4="1.4",e.VER_1_6="1.6",e.VER_1_8="1.8",e.VER_9="9",e.VER_10="10"}(a=t.JavaVersion||(t.JavaVersion={})),Object.freeze(a),t.JavaObject=class{}},236:function(e,t,a){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,a,r){void 0===r&&(r=a);var n=Object.getOwnPropertyDescriptor(t,a);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,r,n)}:function(e,t,a,r){void 0===r&&(r=a),e[r]=t[a]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__exportStar||function(e,t){for(var a in e)"default"===a||Object.prototype.hasOwnProperty.call(t,a)||r(t,e,a)},o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&r(t,e,a);return n(t,e),t},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TypescriptDefinitionGenerator=t.getJavaLibPath=t.JavaClassProxy=t.JavaClassInstance=t.JavaObject=t.JavaVersion=void 0;var c=a(91);Object.defineProperty(t,"JavaVersion",{enumerable:!0,get:function(){return c.JavaVersion}}),Object.defineProperty(t,"JavaObject",{enumerable:!0,get:function(){return c.JavaObject}}),Object.defineProperty(t,"JavaClassInstance",{enumerable:!0,get:function(){return c.JavaClassInstance}}),Object.defineProperty(t,"JavaClassProxy",{enumerable:!0,get:function(){return c.JavaClassProxy}}),i(a(818),t);const d=o(a(818));t.default=d;var u=a(163);Object.defineProperty(t,"getJavaLibPath",{enumerable:!0,get:function(){return u.getJavaLibPath}});const l=s(a(248));t.TypescriptDefinitionGenerator=l.default},818:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getJavaInstance=t.newProxy=t.stdout=t.classpath=t.isInstanceOf=t.appendClasspath=t.importClassAsync=t.importClass=t.ensureJvm=void 0;const r=a(163),n=a(841);let i=null;function o(e){i||(i=new r.Java(e?.libPath,e?.version,e?.opts,e,(0,n.getJavaLibPath)(),(0,n.getNativeLibPath)()))}function s(e,t){for(const a of(0,r.getClassFields)(e["class.proxy"],t)){const n=()=>t?(0,r.getStaticField)(e,a.name):(0,r.getField)(e,a.name);a.isFinal?Object.defineProperty(e,a.name,{get:n,enumerable:!0}):Object.defineProperty(e,a.name,{get:n,set:n=>t?(0,r.setStaticField)(e,a.name,n):(0,r.setField)(e,a.name,n),enumerable:!0})}}function c(e){o(),i.appendClasspath(e)}var d;t.ensureJvm=o,t.importClass=function(e){o();const t=i.importClass(e);return s(t,!0),t.constructor=function(...e){const a=new t.prototype.constructor(...e);return s(a,!1),a},t},t.importClassAsync=async function(e){o();const t=await i.importClassAsync(e);return s(t,!0),t.constructor=function(...e){const a=new t.prototype.constructor(...e);return s(a,!1),a},t},t.appendClasspath=c,t.isInstanceOf=function(e,t){return o(),i.isInstanceOf(e,t)},(d=t.classpath||(t.classpath={})).append=function(e){c(e)},d.get=function(){return o(),i.loadedJars},(t.stdout||(t.stdout={})).enableRedirect=function(e,t){return o(),i.setStdoutCallbacks(e,t)},t.newProxy=function(e,t){o();const a=Object.create(null);for(const[e,r]of Object.entries(t))a[e]=(e,t,...a)=>{if(e)throw e;try{t(null,r(...a))}catch(e){e instanceof Error?t(e):t(new Error(e.toString()))}};return i.createInterfaceProxy(e,a)},t.getJavaInstance=function(){return i}},841:function(e,t,a){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,a,r){void 0===r&&(r=a);var n=Object.getOwnPropertyDescriptor(t,a);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,r,n)}:function(e,t,a,r){void 0===r&&(r=a),e[r]=t[a]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&r(t,e,a);return n(t,e),t},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getJavaLibPath=t.getNativeLibPath=void 0;const s=o(a(17)),c=i(a(147)),d=o(a(230)),{platform:u,arch:l}=process;function p(e){const t=s.default.join(__dirname,e+".node");if(c.default.existsSync(t))return t;{const t=e.replaceAll(".","-").replace("java","java-bridge");return require&&require.resolve?require.resolve(t):a(955).resolve(t)}}function f(){return new Error(`Unsupported platform: ${u} ${l}`)}t.getNativeLibPath=function(){switch(u){case"android":switch(l){case"arm64":return p("java.android-arm64");case"arm":return p("java.android-arm-eabi");default:throw f()}case"win32":return p(`java.win32-${l}-msvc`);case"darwin":return p(`java.darwin-${l}`);case"freebsd":return p(`java.freebsd-${l}`);case"linux":switch(l){case"x64":case"arm64":return p(`java.linux-${l}-${function(){if(process.report&&"function"==typeof process.report.getReport){const{glibcVersionRuntime:e}=process.report.getReport().header;return!e}try{return(0,c.readFileSync)("/usr/bin/ldd","utf8").includes("musl")}catch(e){return!0}}()?"musl":"gnu"}`);case"arm":return p("java.linux-arm-gnueabihf");default:throw f()}default:throw f()}},t.getJavaLibPath=function(){const e=s.default.join(__dirname,"..","java-src","build","libs");let t=d.default.sync("*.jar",{cwd:e});if(0===t.length)throw new Error(`No java lib found in ${e}`);return s.default.join(e,t[0])}},764:function(__unused_webpack_module,exports,__webpack_require__){"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,a,r){void 0===r&&(r=a);var n=Object.getOwnPropertyDescriptor(t,a);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,r,n)}:function(e,t,a,r){void 0===r&&(r=a),e[r]=t[a]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&__createBinding(t,e,a);return __setModuleDefault(t,e),t},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const yargs_1=__importDefault(__webpack_require__(760)),perf_hooks_1=__webpack_require__(74),path_1=__importDefault(__webpack_require__(17)),_1=__importStar(__webpack_require__(236)),package_json_1=__webpack_require__(598),importOra=()=>eval("import('ora').then(ora => ora.default)"),importChalk=()=>eval("import('chalk').then(chalk => chalk.default)"),builder=e=>{e.positional("classnames",{describe:"The fully qualified class name(s) to convert",type:"string"}),e.positional("output",{describe:"The output file",type:"string"}),e.option("classpath",{alias:"cp",type:"string",describe:"The classpath to use"})},handler=async({classnames:e,output:t,classpath:a})=>{let r=null;try{const n=perf_hooks_1.performance.now();(0,_1.ensureJvm)({useDaemonThreads:!0}),a&&_1.default.classpath.append(a);const i=await importChalk(),o=await importOra();console.log(`Starting ${i.cyanBright("java-bridge")} ${i.greenBright("v"+package_json_1.version)} Java definition generator`);const s=(0,_1.getJavaInstance)(),c=_1.default.classpath.get();c.length>0&&console.log(`Started JVM with version ${i.cyanBright(s.version)} and classpath '${c.map((e=>i.cyanBright(e))).join(";")}'`),console.log(`Converting classes ${e.map((e=>i.magentaBright(e))).join(", ")} to typescript and saving result to ${i.cyanBright(path_1.default.normalize(t))}`),r=o().start();const d=[];let u=0,l=0,p=0,f="";const m=setInterval((()=>{p+=1,h()}),1e3),h=()=>{r.text=i.gray(`Elapsed time: ${i.yellow(p)} seconds ${i.white("|")} Converted ${i.cyanBright(u)} classes ${i.white("|")} Converting class ${i.magentaBright(f)}`)};for(const a of e){const e=new _1.TypescriptDefinitionGenerator(a,(e=>{f=e,u++,h()}),d),n=await e.generate();l+=n.length,r.text="saving results",await _1.TypescriptDefinitionGenerator.save(n,t)}clearInterval(m);const v=((perf_hooks_1.performance.now()-n)/1e3).toFixed(1);r.succeed(`Success - Converted ${i.blueBright(l)} classes in ${i.blueBright(v)} seconds`)}catch(e){r?.fail("Failed to convert classes"),console.error(e),process.exit(1)}};yargs_1.default.command("* <output> <classnames..>",!1,builder,handler).parse()},955:e=>{function t(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}t.keys=()=>[],t.resolve=t,t.id=955,e.exports=t},230:e=>{"use strict";e.exports=require("glob")},7:e=>{"use strict";e.exports=require("typescript")},760:e=>{"use strict";e.exports=require("yargs")},147:e=>{"use strict";e.exports=require("fs")},17:e=>{"use strict";e.exports=require("path")},74:e=>{"use strict";e.exports=require("perf_hooks")},598:e=>{"use strict";e.exports=JSON.parse('{"name":"java-bridge","version":"2.1.2","main":"dist/index.prod.min.js","typings":"ts-src/index.ts","description":"A bridge between Node.js and Java APIs","repository":{"type":"git","url":"git+https://github.com/MarkusJx/node-java-bridge.git"},"author":"MarkusJx","bugs":{"url":"https://github.com/MarkusJx/node-java-bridge/issues"},"homepage":"https://github.com/MarkusJx/node-java-bridge#readme","files":["ts-src","dist/*.js","java-src/build/libs/*.jar"],"napi":{"name":"java","triples":{"additional":["aarch64-apple-darwin","i686-pc-windows-msvc"]}},"bin":{"java-ts-gen":"./dist/java-ts-gen.js"},"license":"MIT","prettier":{"printWidth":80,"semi":true,"singleQuote":true,"tabWidth":4,"trailingComma":"es5"},"engines":{"node":">= 15"},"scripts":{"artifacts":"napi artifacts","build":"npm run build:napi","build:debug":"npm run build:napi:debug && npm run build:ts && npm run build:java","postbuild":"npm run build:ts && npm run build:java","build:napi":"napi build --platform --release --js native.js --dts native.d.ts","build:napi:debug":"napi build --platform --js native.js --dts native.d.ts","build:ts":"webpack build","build:java":"run-script-os","build:java:darwin:linux":"cd java-src && chmod +x gradlew && ./gradlew shadowJar","build:java:win32":"cd java-src && .\\\\gradlew.bat shadowJar","prepublishOnly":"napi prepublish -t npm","test":"mocha -r ts-node/register test/**/*.test.ts","testOnly":"mocha -r ts-node/register test/**/*.test.ts","pretest":"npm run build","version":"napi version","prettier":"prettier --write .","prebuild":"rimraf dist","prebuild:debug":"rimraf dist","benchmark":"ts-node -P test/tsconfig.json test/benchmark/benchmark.ts && ts-node -P test/tsconfig.json test/benchmark/benchmarkDaemonThreads.ts","prebenchmark":"npm run build","docs":"typedoc --out docs ts-src/index.ts"},"dependencies":{"chalk":"^5.0.1","glob":"^8.0.3","ora":"^6.1.2","typescript":"^4.8.2","yargs":"^17.5.1"},"devDependencies":{"@napi-rs/cli":"^2.11.4","@types/chai":"^4.3.3","@types/glob":"^8.0.0","@types/mocha":"^9.1.1","@types/node":"^18.7.14","@types/semver":"^7.3.12","@types/webpack-node-externals":"^2.5.3","@types/yargs":"^17.0.12","chai":"^4.3.6","expose-gc":"^1.0.0","mocha":"^10.0.0","nanobench":"^3.0.0","node-loader":"^2.0.0","prettier":"^2.7.1","rimraf":"^3.0.2","run-script-os":"^1.1.6","semver":"^7.3.7","string-replace-loader":"^3.1.0","ts-loader":"^9.3.1","ts-node":"^10.9.1","tslib":"^2.4.0","typedoc":"^0.23.13","webpack":"^5.74.0","webpack-cli":"^4.10.0","webpack-node-externals":"^3.0.0"},"optionalDependencies":{"java-bridge-darwin-arm64":"2.1.0","java-bridge-darwin-x64":"2.1.0","java-bridge-linux-x64-gnu":"2.1.0","java-bridge-win32-ia32-msvc":"2.1.0","java-bridge-win32-x64-msvc":"^2.1.0"}}')}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var a=__webpack_module_cache__[e]={id:e,loaded:!1,exports:{}};return __webpack_modules__[e].call(a.exports,a,a.exports,__webpack_require__),a.loaded=!0,a.exports}__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),__webpack_require__.p="";var __webpack_exports__=__webpack_require__(764);return __webpack_exports__})()));
3
3
  //# sourceMappingURL=java-ts-gen.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "java-bridge",
3
- "version": "2.1.1",
3
+ "version": "2.1.2",
4
4
  "main": "dist/index.prod.min.js",
5
5
  "typings": "ts-src/index.ts",
6
6
  "description": "A bridge between Node.js and Java APIs",
@@ -54,6 +54,7 @@
54
54
  "build:java:win32": "cd java-src && .\\gradlew.bat shadowJar",
55
55
  "prepublishOnly": "napi prepublish -t npm",
56
56
  "test": "mocha -r ts-node/register test/**/*.test.ts",
57
+ "testOnly": "mocha -r ts-node/register test/**/*.test.ts",
57
58
  "pretest": "npm run build",
58
59
  "version": "napi version",
59
60
  "prettier": "prettier --write .",
@@ -98,10 +99,10 @@
98
99
  "webpack-node-externals": "^3.0.0"
99
100
  },
100
101
  "optionalDependencies": {
101
- "java-bridge-win32-x64-msvc": "2.1.1",
102
- "java-bridge-darwin-x64": "2.1.1",
103
- "java-bridge-linux-x64-gnu": "2.1.1",
104
- "java-bridge-darwin-arm64": "2.1.1",
105
- "java-bridge-win32-ia32-msvc": "2.1.1"
102
+ "java-bridge-win32-x64-msvc": "2.1.2",
103
+ "java-bridge-darwin-x64": "2.1.2",
104
+ "java-bridge-linux-x64-gnu": "2.1.2",
105
+ "java-bridge-darwin-arm64": "2.1.2",
106
+ "java-bridge-win32-ia32-msvc": "2.1.2"
106
107
  }
107
108
  }
@@ -1,5 +1,5 @@
1
1
  import ts, { SyntaxKind } from 'typescript';
2
- import { importClass, importClassAsync, JavaClassInstance } from './.';
2
+ import { importClassAsync, JavaClassInstance } from './.';
3
3
  import fs from 'fs';
4
4
  import path from 'path';
5
5
 
@@ -11,18 +11,18 @@ const sourceFile = ts.createSourceFile(
11
11
  ts.ScriptKind.TS
12
12
  );
13
13
 
14
- interface MethodDeclaration {
14
+ export interface MethodDeclaration {
15
15
  returnType: string;
16
16
  parameters: string[];
17
17
  isStatic: boolean;
18
18
  }
19
19
 
20
- interface ModuleDeclaration {
20
+ export interface ModuleDeclaration {
21
21
  name: string;
22
22
  contents: string;
23
23
  }
24
24
 
25
- type ProgressCallback = (classname: string) => void;
25
+ export type ProgressCallback = (classname: string) => void;
26
26
 
27
27
  declare class ModifierClass extends JavaClassInstance {
28
28
  public static isPublic(val: number): Promise<boolean>;
@@ -118,7 +118,6 @@ export default class TypescriptDefinitionGenerator {
118
118
  const tsConstructors = types.map((t, i) => {
119
119
  const params = t.map(this.convertParameter.bind(this));
120
120
  let declaration = ts.factory.createConstructorDeclaration(
121
- undefined,
122
121
  [ts.factory.createModifier(ts.SyntaxKind.PublicKeyword)],
123
122
  params,
124
123
  undefined
@@ -174,10 +173,7 @@ export default class TypescriptDefinitionGenerator {
174
173
  switch (javaType) {
175
174
  case 'byte[]':
176
175
  case 'java.lang.Byte[]':
177
- return {
178
- ...ts.factory.createIdentifier('Buffer'),
179
- _typeNodeBrand: '',
180
- };
176
+ return ts.factory.createTypeReferenceNode('Buffer');
181
177
  }
182
178
 
183
179
  if (javaType.endsWith('[]')) {
@@ -223,10 +219,7 @@ export default class TypescriptDefinitionGenerator {
223
219
  );
224
220
  case 'java.lang.Object':
225
221
  this.usesBasicOrJavaType = true;
226
- return {
227
- ...ts.factory.createIdentifier('BasicOrJavaType'),
228
- _typeNodeBrand: '',
229
- };
222
+ return ts.factory.createTypeReferenceNode('BasicOrJavaType');
230
223
  default:
231
224
  if (!this.resolvedImports.includes(javaType)) {
232
225
  this.additionalImports.push(javaType);
@@ -235,16 +228,12 @@ export default class TypescriptDefinitionGenerator {
235
228
  this.importsToResolve.push(javaType);
236
229
  const isSelf = javaType === this.classname && isParam;
237
230
 
238
- return {
239
- ...ts.factory.createIdentifier(
240
- javaType === this.classname
241
- ? javaType.substring(
242
- javaType.lastIndexOf('.') + 1
243
- ) + (isSelf ? 'Class' : '')
244
- : javaType.replaceAll('.', '_')
245
- ),
246
- _typeNodeBrand: '',
247
- };
231
+ return ts.factory.createTypeReferenceNode(
232
+ javaType === this.classname
233
+ ? javaType.substring(javaType.lastIndexOf('.') + 1) +
234
+ (isSelf ? 'Class' : '')
235
+ : javaType.replaceAll('.', '_')
236
+ );
248
237
  }
249
238
  }
250
239
 
@@ -255,7 +244,6 @@ export default class TypescriptDefinitionGenerator {
255
244
  const name = 'var' + index;
256
245
  const type = this.javaTypeToTypescriptType(param, true);
257
246
  return ts.factory.createParameterDeclaration(
258
- undefined,
259
247
  undefined,
260
248
  undefined,
261
249
  name,
@@ -305,7 +293,6 @@ export default class TypescriptDefinitionGenerator {
305
293
  }
306
294
 
307
295
  let declaration = ts.factory.createMethodDeclaration(
308
- undefined,
309
296
  modifiers,
310
297
  undefined,
311
298
  name + (isSync ? 'Sync' : ''),
@@ -384,7 +371,6 @@ export default class TypescriptDefinitionGenerator {
384
371
  .filter(unique)
385
372
  .map((i) =>
386
373
  ts.factory.createImportDeclaration(
387
- undefined,
388
374
  undefined,
389
375
  ts.factory.createImportClause(
390
376
  false,
@@ -432,7 +418,6 @@ export default class TypescriptDefinitionGenerator {
432
418
 
433
419
  const imports = ts.factory.createNamedImports(importElements);
434
420
  return ts.factory.createImportDeclaration(
435
- undefined,
436
421
  undefined,
437
422
  ts.factory.createImportClause(false, undefined, imports),
438
423
  ts.factory.createStringLiteral('java-bridge')
@@ -441,7 +426,6 @@ export default class TypescriptDefinitionGenerator {
441
426
 
442
427
  private getExportStatement(simpleName: string) {
443
428
  const statement = ts.factory.createClassDeclaration(
444
- undefined,
445
429
  [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)],
446
430
  simpleName,
447
431
  undefined,
@@ -526,7 +510,6 @@ export default class TypescriptDefinitionGenerator {
526
510
  classMembers.push(...convertedConstructors);
527
511
 
528
512
  let tsClass = ts.factory.createClassDeclaration(
529
- undefined,
530
513
  [
531
514
  ts.factory.createModifier(ts.SyntaxKind.ExportKeyword),
532
515
  ts.factory.createModifier(ts.SyntaxKind.DeclareKeyword),
package/ts-src/index.ts CHANGED
@@ -22,3 +22,10 @@ export * from './java';
22
22
  import * as java from './java';
23
23
  export default java;
24
24
  export { getJavaLibPath } from '../native';
25
+ import TypescriptDefinitionGenerator from './TypescriptDefinitionGenerator';
26
+ export { TypescriptDefinitionGenerator };
27
+ export {
28
+ ModuleDeclaration,
29
+ MethodDeclaration,
30
+ ProgressCallback,
31
+ } from './TypescriptDefinitionGenerator';
@@ -1,8 +1,13 @@
1
1
  import yargs from 'yargs';
2
2
  import { performance } from 'perf_hooks';
3
3
  import path from 'path';
4
- import java from '..';
4
+ import java, {
5
+ ensureJvm,
6
+ getJavaInstance,
7
+ TypescriptDefinitionGenerator,
8
+ } from '../.';
5
9
  import { version } from '../../package.json';
10
+ import type { Ora } from 'ora';
6
11
 
7
12
  interface Args {
8
13
  classnames: string[];
@@ -40,8 +45,12 @@ const handler: YargsHandler<Args> = async ({
40
45
  output,
41
46
  classpath,
42
47
  }) => {
48
+ let spinner: Ora | null = null;
43
49
  try {
44
50
  const startTime = performance.now();
51
+ ensureJvm({
52
+ useDaemonThreads: true,
53
+ });
45
54
 
46
55
  if (classpath) {
47
56
  java.classpath.append(classpath);
@@ -56,7 +65,7 @@ const handler: YargsHandler<Args> = async ({
56
65
  )} Java definition generator`
57
66
  );
58
67
 
59
- const javaInstance = java.getJavaInstance()!;
68
+ const javaInstance = getJavaInstance()!;
60
69
  const loadedJars = java.classpath.get();
61
70
  if (loadedJars.length > 0) {
62
71
  console.log(
@@ -78,7 +87,7 @@ const handler: YargsHandler<Args> = async ({
78
87
  )}`
79
88
  );
80
89
 
81
- const spinner = ora().start();
90
+ spinner = ora().start();
82
91
 
83
92
  const resolvedImports: string[] = [];
84
93
  let resolvedCounter: number = 0;
@@ -92,7 +101,7 @@ const handler: YargsHandler<Args> = async ({
92
101
  }, 1000);
93
102
 
94
103
  const setText = () => {
95
- spinner.text = chalk.gray(
104
+ spinner!.text = chalk.gray(
96
105
  `Elapsed time: ${chalk.yellow(
97
106
  approximateTimeElapsed
98
107
  )} seconds ${chalk.white('|')} Converted ${chalk.cyanBright(
@@ -103,10 +112,6 @@ const handler: YargsHandler<Args> = async ({
103
112
  );
104
113
  };
105
114
 
106
- const TypescriptDefinitionGenerator = (
107
- await import('../TypescriptDefinitionGenerator')
108
- ).default;
109
-
110
115
  for (const classname of classnames) {
111
116
  const generator = new TypescriptDefinitionGenerator(
112
117
  classname,
@@ -120,18 +125,19 @@ const handler: YargsHandler<Args> = async ({
120
125
  const generated = await generator.generate();
121
126
  numResolved += generated.length;
122
127
 
123
- spinner.text = 'saving results';
128
+ spinner!.text = 'saving results';
124
129
  await TypescriptDefinitionGenerator.save(generated, output);
125
130
  }
126
131
 
127
132
  clearInterval(timeElapsedInterval);
128
133
  const timeElapsed = ((performance.now() - startTime) / 1000).toFixed(1);
129
- spinner.succeed(
134
+ spinner!.succeed(
130
135
  `Success - Converted ${chalk.blueBright(
131
136
  numResolved
132
137
  )} classes in ${chalk.blueBright(timeElapsed)} seconds`
133
138
  );
134
139
  } catch (e) {
140
+ spinner?.fail('Failed to convert classes');
135
141
  console.error(e);
136
142
  process.exit(1);
137
143
  }