@efffrida/il2cpp-bridge 0.0.19 → 0.0.20

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.
@@ -16,6 +16,16 @@ export declare const assembly: (name: string) => Effect.Effect<Il2Cpp.Assembly,
16
16
  * @category Assembly
17
17
  */
18
18
  export declare const tryAssembly: (name: string) => Effect.Effect<Il2Cpp.Assembly, Cause.NoSuchElementException, never>;
19
+ /**
20
+ * @since 1.0.0
21
+ * @category Assembly
22
+ */
23
+ export declare const assemblyCached: Effect.Effect<typeof assembly, never, never>;
24
+ /**
25
+ * @since 1.0.0
26
+ * @category Assembly
27
+ */
28
+ export declare const tryAssemblyCached: Effect.Effect<typeof tryAssembly, never, never>;
19
29
  /**
20
30
  * @since 1.0.0
21
31
  * @category Assembly
@@ -1 +1 @@
1
- {"version":3,"file":"Assembly.d.ts","sourceRoot":"","sources":["../src/Assembly.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,qBAAqB,CAAC;AAE7B,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAChC,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAI7D,CAAC;AAEjD;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAGnE,CAAC"}
1
+ {"version":3,"file":"Assembly.d.ts","sourceRoot":"","sources":["../src/Assembly.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,qBAAqB,CAAC;AAE7B,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAChC,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAI7D,CAAC;AAEjD;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,QAAQ,EAAE,KAAK,EAAE,KAAK,CAGvE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,WAAW,EAAE,KAAK,EAAE,KAAK,CAG7E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAGnE,CAAC"}
package/dist/Assembly.js CHANGED
@@ -5,6 +5,7 @@
5
5
  import "frida-il2cpp-bridge";
6
6
  import * as Cause from "effect/Cause";
7
7
  import * as Effect from "effect/Effect";
8
+ import * as Equivalence from "effect/Equivalence";
8
9
  /**
9
10
  * @since 1.0.0
10
11
  * @category Assembly
@@ -18,6 +19,16 @@ export const tryAssembly = name => Effect.try({
18
19
  try: () => Il2Cpp.domain.tryAssembly(name),
19
20
  catch: () => new Cause.NoSuchElementException(`No assembly with name ${name}`)
20
21
  }).pipe(Effect.flatMap(Effect.fromNullable));
22
+ /**
23
+ * @since 1.0.0
24
+ * @category Assembly
25
+ */
26
+ export const assemblyCached = /*#__PURE__*/Effect.cachedFunction(assembly, Equivalence.string);
27
+ /**
28
+ * @since 1.0.0
29
+ * @category Assembly
30
+ */
31
+ export const tryAssemblyCached = /*#__PURE__*/Effect.cachedFunction(tryAssembly, Equivalence.string);
21
32
  /**
22
33
  * @since 1.0.0
23
34
  * @category Assembly
@@ -1 +1 @@
1
- {"version":3,"file":"Assembly.js","names":["Cause","Effect","assembly","name","sync","Il2Cpp","domain","tryAssembly","try","catch","NoSuchElementException","pipe","flatMap","fromNullable","attach","acquireRelease","thread","detach"],"sources":["../src/Assembly.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;AAKA,OAAO,qBAAqB;AAI5B,OAAO,KAAKA,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,MAAM,MAAM,eAAe;AAEvC;;;;AAIA,OAAO,MAAMC,QAAQ,GAAIC,IAAY,IACjCF,MAAM,CAACG,IAAI,CAAC,MAAMC,MAAM,CAACC,MAAM,CAACJ,QAAQ,CAACC,IAAI,CAAC,CAAC;AAEnD;;;;AAIA,OAAO,MAAMI,WAAW,GAAIJ,IAAY,IACpCF,MAAM,CAACO,GAAG,CAAC;EACPA,GAAG,EAAEA,CAAA,KAAMH,MAAM,CAACC,MAAM,CAACC,WAAW,CAACJ,IAAI,CAAC;EAC1CM,KAAK,EAAEA,CAAA,KAAM,IAAIT,KAAK,CAACU,sBAAsB,CAAC,yBAAyBP,IAAI,EAAE;CAChF,CAAC,CAACQ,IAAI,CAACV,MAAM,CAACW,OAAO,CAACX,MAAM,CAACY,YAAY,CAAC,CAAC;AAEhD;;;;AAIA,OAAO,MAAMC,MAAM,gBAAqDb,MAAM,CAACc,cAAc,cACzFd,MAAM,CAACG,IAAI,CAAC,MAAMC,MAAM,CAACC,MAAM,CAACQ,MAAM,EAAE,CAAC,EACxCE,MAAM,IAAKf,MAAM,CAACG,IAAI,CAAC,MAAMY,MAAM,CAACC,MAAM,EAAE,CAAC,CACjD","ignoreList":[]}
1
+ {"version":3,"file":"Assembly.js","names":["Cause","Effect","Equivalence","assembly","name","sync","Il2Cpp","domain","tryAssembly","try","catch","NoSuchElementException","pipe","flatMap","fromNullable","assemblyCached","cachedFunction","string","tryAssemblyCached","attach","acquireRelease","thread","detach"],"sources":["../src/Assembly.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;AAKA,OAAO,qBAAqB;AAI5B,OAAO,KAAKA,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,WAAW,MAAM,oBAAoB;AAEjD;;;;AAIA,OAAO,MAAMC,QAAQ,GAAIC,IAAY,IACjCH,MAAM,CAACI,IAAI,CAAC,MAAMC,MAAM,CAACC,MAAM,CAACJ,QAAQ,CAACC,IAAI,CAAC,CAAC;AAEnD;;;;AAIA,OAAO,MAAMI,WAAW,GAAIJ,IAAY,IACpCH,MAAM,CAACQ,GAAG,CAAC;EACPA,GAAG,EAAEA,CAAA,KAAMH,MAAM,CAACC,MAAM,CAACC,WAAW,CAACJ,IAAI,CAAC;EAC1CM,KAAK,EAAEA,CAAA,KAAM,IAAIV,KAAK,CAACW,sBAAsB,CAAC,yBAAyBP,IAAI,EAAE;CAChF,CAAC,CAACQ,IAAI,CAACX,MAAM,CAACY,OAAO,CAACZ,MAAM,CAACa,YAAY,CAAC,CAAC;AAEhD;;;;AAIA,OAAO,MAAMC,cAAc,gBAAiDd,MAAM,CAACe,cAAc,CAC7Fb,QAAQ,EACRD,WAAW,CAACe,MAAM,CACrB;AAED;;;;AAIA,OAAO,MAAMC,iBAAiB,gBAAoDjB,MAAM,CAACe,cAAc,CACnGR,WAAW,EACXN,WAAW,CAACe,MAAM,CACrB;AAED;;;;AAIA,OAAO,MAAME,MAAM,gBAAqDlB,MAAM,CAACmB,cAAc,cACzFnB,MAAM,CAACI,IAAI,CAAC,MAAMC,MAAM,CAACC,MAAM,CAACY,MAAM,EAAE,CAAC,EACxCE,MAAM,IAAKpB,MAAM,CAACI,IAAI,CAAC,MAAMgB,MAAM,CAACC,MAAM,EAAE,CAAC,CACjD","ignoreList":[]}
package/dist/Class.d.ts CHANGED
@@ -25,22 +25,62 @@ export declare const tryClass: ((name: string) => (image: Il2Cpp.Image) => Effec
25
25
  * @since 1.0.0
26
26
  * @category Class
27
27
  */
28
- export declare const field: ((name: string) => (klass: Il2Cpp.Class) => Effect.Effect<Il2Cpp.Field, never, never>) & ((klass: Il2Cpp.Class, name: string) => Effect.Effect<Il2Cpp.Field, never, never>);
28
+ export declare const classCached: Effect.Effect<(image: Il2Cpp.Image, name: string) => Effect.Effect<Il2Cpp.Class, never, never>, never, never>;
29
29
  /**
30
30
  * @since 1.0.0
31
31
  * @category Class
32
32
  */
33
- export declare const tryField: ((name: string) => (klass: Il2Cpp.Class) => Effect.Effect<Il2Cpp.Field, Cause.NoSuchElementException, never>) & ((klass: Il2Cpp.Class, name: string) => Effect.Effect<Il2Cpp.Field, Cause.NoSuchElementException, never>);
33
+ export declare const tryClassCached: Effect.Effect<(image: Il2Cpp.Image, name: string) => Effect.Effect<Il2Cpp.Class, Cause.NoSuchElementException, never>, never, never>;
34
34
  /**
35
35
  * @since 1.0.0
36
36
  * @category Class
37
37
  */
38
- export declare const method: ((name: string, parameterCount?: number | undefined) => (klass: Il2Cpp.Class) => Effect.Effect<Il2Cpp.Method, never, never>) & ((klass: Il2Cpp.Class, name: string, parameterCount?: number | undefined) => Effect.Effect<Il2Cpp.Method, never, never>);
38
+ export declare const fields: (klass: Il2Cpp.Class) => Effect.Effect<ReadonlyArray<Il2Cpp.Field>, never, never>;
39
39
  /**
40
40
  * @since 1.0.0
41
41
  * @category Class
42
42
  */
43
- export declare const tryMethod: ((name: string, parameterCount?: number | undefined) => (klass: Il2Cpp.Class) => Effect.Effect<Il2Cpp.Method, Cause.NoSuchElementException, never>) & ((klass: Il2Cpp.Class, name: string, parameterCount?: number | undefined) => Effect.Effect<Il2Cpp.Method, Cause.NoSuchElementException, never>);
43
+ export declare const field: ((name: string) => <T extends Il2Cpp.Field.Type = Il2Cpp.Field.Type>(klass: Il2Cpp.Class) => Effect.Effect<Il2Cpp.Field<T>, never, never>) & (<T extends Il2Cpp.Field.Type = Il2Cpp.Field.Type>(klass: Il2Cpp.Class, name: string) => Effect.Effect<Il2Cpp.Field<T>, never, never>);
44
+ /**
45
+ * @since 1.0.0
46
+ * @category Class
47
+ */
48
+ export declare const tryField: ((name: string) => <T extends Il2Cpp.Field.Type = Il2Cpp.Field.Type>(klass: Il2Cpp.Class) => Effect.Effect<Il2Cpp.Field<T>, Cause.NoSuchElementException, never>) & (<T extends Il2Cpp.Field.Type = Il2Cpp.Field.Type>(klass: Il2Cpp.Class, name: string) => Effect.Effect<Il2Cpp.Field<T>, Cause.NoSuchElementException, never>);
49
+ /**
50
+ * @since 1.0.0
51
+ * @category Class
52
+ */
53
+ export declare const fieldCached: Effect.Effect<(<T extends Il2Cpp.Field.Type = Il2Cpp.Field.Type>(klass: Il2Cpp.Class, name: string) => Effect.Effect<Il2Cpp.Field<T>, never, never>), never, never>;
54
+ /**
55
+ * @since 1.0.0
56
+ * @category Class
57
+ */
58
+ export declare const tryFieldCached: Effect.Effect<(<T extends Il2Cpp.Field.Type = Il2Cpp.Field.Type>(klass: Il2Cpp.Class, name: string) => Effect.Effect<Il2Cpp.Field<T>, Cause.NoSuchElementException, never>), never, never>;
59
+ /**
60
+ * @since 1.0.0
61
+ * @category Class
62
+ */
63
+ export declare const methods: (klass: Il2Cpp.Class) => Effect.Effect<ReadonlyArray<Il2Cpp.Method>, never, never>;
64
+ /**
65
+ * @since 1.0.0
66
+ * @category Class
67
+ */
68
+ export declare const method: ((name: string, parameterCount?: number | undefined) => <T extends Il2Cpp.Method.ReturnType = Il2Cpp.Method.ReturnType>(klass: Il2Cpp.Class) => Effect.Effect<Il2Cpp.Method<T>, never, never>) & (<T extends Il2Cpp.Method.ReturnType = Il2Cpp.Method.ReturnType>(klass: Il2Cpp.Class, name: string, parameterCount?: number | undefined) => Effect.Effect<Il2Cpp.Method<T>, never, never>);
69
+ /**
70
+ * @since 1.0.0
71
+ * @category Class
72
+ */
73
+ export declare const tryMethod: ((name: string, parameterCount?: number | undefined) => <T extends Il2Cpp.Method.ReturnType = Il2Cpp.Method.ReturnType>(klass: Il2Cpp.Class) => Effect.Effect<Il2Cpp.Method<T>, Cause.NoSuchElementException, never>) & (<T extends Il2Cpp.Method.ReturnType = Il2Cpp.Method.ReturnType>(klass: Il2Cpp.Class, name: string, parameterCount?: number | undefined) => Effect.Effect<Il2Cpp.Method<T>, Cause.NoSuchElementException, never>);
74
+ /**
75
+ * @since 1.0.0
76
+ * @category Class
77
+ */
78
+ export declare const methodCached: Effect.Effect<(<T extends Il2Cpp.Method.ReturnType = Il2Cpp.Method.ReturnType>(klass: Il2Cpp.Class, name: string, parameterCount?: number | undefined) => Effect.Effect<Il2Cpp.Method<T>, never, never>), never, never>;
79
+ /**
80
+ * @since 1.0.0
81
+ * @category Class
82
+ */
83
+ export declare const tryMethodCached: Effect.Effect<(<T extends Il2Cpp.Method.ReturnType = Il2Cpp.Method.ReturnType>(klass: Il2Cpp.Class, name: string, parameterCount?: number | undefined) => Effect.Effect<Il2Cpp.Method<T>, Cause.NoSuchElementException, never>), never, never>;
44
84
  /**
45
85
  * @since 1.0.0
46
86
  * @category Class
@@ -51,4 +91,14 @@ export declare const nested: ((name: string) => (klass: Il2Cpp.Class) => Effect.
51
91
  * @category Class
52
92
  */
53
93
  export declare const tryNested: ((name: string) => (klass: Il2Cpp.Class) => Effect.Effect<Il2Cpp.Class, Cause.NoSuchElementException, never>) & ((klass: Il2Cpp.Class, name: string) => Effect.Effect<Il2Cpp.Class, Cause.NoSuchElementException, never>);
94
+ /**
95
+ * @since 1.0.0
96
+ * @category Class
97
+ */
98
+ export declare const nestedCached: Effect.Effect<(klass: Il2Cpp.Class, name: string) => Effect.Effect<Il2Cpp.Class, never, never>, never, never>;
99
+ /**
100
+ * @since 1.0.0
101
+ * @category Class
102
+ */
103
+ export declare const tryNestedCached: Effect.Effect<(klass: Il2Cpp.Class, name: string) => Effect.Effect<Il2Cpp.Class, Cause.NoSuchElementException, never>, never, never>;
54
104
  //# sourceMappingURL=Class.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Class.d.ts","sourceRoot":"","sources":["../src/Class.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Class.d.ts","sourceRoot":"","sources":["../src/Class.ts"],"names":[],"mappings":"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"}
package/dist/Class.js CHANGED
@@ -5,7 +5,10 @@
5
5
  import "frida-il2cpp-bridge";
6
6
  import * as Cause from "effect/Cause";
7
7
  import * as Effect from "effect/Effect";
8
+ import * as Equivalence from "effect/Equivalence";
8
9
  import * as Function from "effect/Function";
10
+ import * as Tuple from "effect/Tuple";
11
+ import * as Il2CppEquivalence from "./Equivalence.js";
9
12
  /**
10
13
  * @since 1.0.0
11
14
  * @category Class
@@ -25,6 +28,21 @@ export const tryClass = /*#__PURE__*/Function.dual(2, (image, name) => Effect.tr
25
28
  try: () => image.tryClass(name),
26
29
  catch: () => new Cause.NoSuchElementException(`No class with name ${name}`)
27
30
  }).pipe(Effect.flatMap(Effect.fromNullable)));
31
+ /**
32
+ * @since 1.0.0
33
+ * @category Class
34
+ */
35
+ export const classCached = /*#__PURE__*/Effect.map(/*#__PURE__*/Effect.cachedFunction(/*#__PURE__*/Function.tupled(class_), /*#__PURE__*/Equivalence.tuple(Il2CppEquivalence.image, Equivalence.string)), Function.untupled);
36
+ /**
37
+ * @since 1.0.0
38
+ * @category Class
39
+ */
40
+ export const tryClassCached = /*#__PURE__*/Effect.map(/*#__PURE__*/Effect.cachedFunction(/*#__PURE__*/Function.tupled(tryClass), /*#__PURE__*/Equivalence.tuple(Il2CppEquivalence.image, Equivalence.string)), Function.untupled);
41
+ /**
42
+ * @since 1.0.0
43
+ * @category Class
44
+ */
45
+ export const fields = klass => Effect.sync(() => klass.fields);
28
46
  /**
29
47
  * @since 1.0.0
30
48
  * @category Class
@@ -35,9 +53,24 @@ export const field = /*#__PURE__*/Function.dual(2, (klass, name) => Effect.sync(
35
53
  * @category Class
36
54
  */
37
55
  export const tryField = /*#__PURE__*/Function.dual(2, (klass, name) => Effect.try({
38
- try: () => klass.tryField(name),
56
+ try: () => klass.field(name),
39
57
  catch: () => new Cause.NoSuchElementException(`No field with name ${name}`)
40
58
  }).pipe(Effect.flatMap(Effect.fromNullable)));
59
+ /**
60
+ * @since 1.0.0
61
+ * @category Class
62
+ */
63
+ export const fieldCached = /*#__PURE__*/Effect.map(/*#__PURE__*/Effect.cachedFunction(/*#__PURE__*/Function.tupled(field), /*#__PURE__*/Equivalence.tuple(Il2CppEquivalence.class, Equivalence.string)), tupled => Function.untupled(tupled));
64
+ /**
65
+ * @since 1.0.0
66
+ * @category Class
67
+ */
68
+ export const tryFieldCached = /*#__PURE__*/Effect.map(/*#__PURE__*/Effect.cachedFunction(/*#__PURE__*/Function.tupled(tryField), /*#__PURE__*/Equivalence.tuple(Il2CppEquivalence.class, Equivalence.string)), tupled => Function.untupled(tupled));
69
+ /**
70
+ * @since 1.0.0
71
+ * @category Class
72
+ */
73
+ export const methods = klass => Effect.sync(() => klass.methods);
41
74
  /**
42
75
  * @since 1.0.0
43
76
  * @category Class
@@ -51,6 +84,16 @@ export const tryMethod = /*#__PURE__*/Function.dual(_arguments => typeof _argume
51
84
  try: () => klass.tryMethod(name, parameterCount),
52
85
  catch: () => new Cause.NoSuchElementException(`No method with name ${name}`)
53
86
  }).pipe(Effect.flatMap(Effect.fromNullable)));
87
+ /**
88
+ * @since 1.0.0
89
+ * @category Class
90
+ */
91
+ export const methodCached = /*#__PURE__*/Effect.map(/*#__PURE__*/Effect.cachedFunction(/*#__PURE__*/Function.tupled(method), /*#__PURE__*/Equivalence.mapInput(/*#__PURE__*/Equivalence.tuple(Il2CppEquivalence.class, Equivalence.string, /*#__PURE__*/Equivalence.strict()), tuple => Tuple.make(tuple[0], tuple[1], tuple[2] ?? undefined))), tupled => Function.untupled(tupled));
92
+ /**
93
+ * @since 1.0.0
94
+ * @category Class
95
+ */
96
+ export const tryMethodCached = /*#__PURE__*/Effect.map(/*#__PURE__*/Effect.cachedFunction(/*#__PURE__*/Function.tupled(tryMethod), /*#__PURE__*/Equivalence.mapInput(/*#__PURE__*/Equivalence.tuple(Il2CppEquivalence.class, Equivalence.string, /*#__PURE__*/Equivalence.strict()), tuple => Tuple.make(tuple[0], tuple[1], tuple[2] ?? undefined))), tupled => Function.untupled(tupled));
54
97
  /**
55
98
  * @since 1.0.0
56
99
  * @category Class
@@ -64,4 +107,14 @@ export const tryNested = /*#__PURE__*/Function.dual(2, (klass, name) => Effect.t
64
107
  try: () => klass.tryNested(name),
65
108
  catch: () => new Cause.NoSuchElementException(`No nested class with name ${name}`)
66
109
  }).pipe(Effect.flatMap(Effect.fromNullable)));
110
+ /**
111
+ * @since 1.0.0
112
+ * @category Class
113
+ */
114
+ export const nestedCached = /*#__PURE__*/Effect.map(/*#__PURE__*/Effect.cachedFunction(/*#__PURE__*/Function.tupled(nested), /*#__PURE__*/Equivalence.tuple(Il2CppEquivalence.class, Equivalence.string)), Function.untupled);
115
+ /**
116
+ * @since 1.0.0
117
+ * @category Class
118
+ */
119
+ export const tryNestedCached = /*#__PURE__*/Effect.map(/*#__PURE__*/Effect.cachedFunction(/*#__PURE__*/Function.tupled(tryNested), /*#__PURE__*/Equivalence.tuple(Il2CppEquivalence.class, Equivalence.string)), Function.untupled);
67
120
  //# sourceMappingURL=Class.js.map
package/dist/Class.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Class.js","names":["Cause","Effect","Function","class_","dual","image","name","sync","class","tryClass","try","catch","NoSuchElementException","pipe","flatMap","fromNullable","field","klass","tryField","method","_arguments","parameterCount","tryMethod","nested","tryNested"],"sources":["../src/Class.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Class.js","names":["Cause","Effect","Equivalence","Function","Tuple","Il2CppEquivalence","class_","dual","image","name","sync","class","tryClass","try","catch","NoSuchElementException","pipe","flatMap","fromNullable","classCached","map","cachedFunction","tupled","tuple","string","untupled","tryClassCached","fields","klass","field","tryField","fieldCached","tryFieldCached","methods","method","_arguments","parameterCount","tryMethod","methodCached","mapInput","strict","make","undefined","tryMethodCached","nested","tryNested","nestedCached","tryNestedCached"],"sources":["../src/Class.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @since 1.0.0
3
+ * @category Equivalence
4
+ */
5
+ import * as Equivalence from "effect/Equivalence";
6
+ /**
7
+ * @since 1.0.0
8
+ * @category Equivalence
9
+ */
10
+ export declare const nativePointer: Equivalence.Equivalence<NativePointer>;
11
+ /**
12
+ * @since 1.0.0
13
+ * @category Equivalence
14
+ */
15
+ export declare const image: Equivalence.Equivalence<Il2Cpp.Image>;
16
+ /**
17
+ * @since 1.0.0
18
+ * @category Equivalence
19
+ */
20
+ declare const class_: Equivalence.Equivalence<Il2Cpp.Class>;
21
+ export {
22
+ /**
23
+ * @since 1.0.0
24
+ * @category Equivalence
25
+ */
26
+ class_ as class, };
27
+ /**
28
+ * @since 1.0.0
29
+ * @category Equivalence
30
+ */
31
+ export declare const field: Equivalence.Equivalence<Il2Cpp.Field<Il2Cpp.Field.Type>>;
32
+ /**
33
+ * @since 1.0.0
34
+ * @category Equivalence
35
+ */
36
+ export declare const method: Equivalence.Equivalence<Il2Cpp.Method<Il2Cpp.Method.ReturnType>>;
37
+ //# sourceMappingURL=Equivalence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Equivalence.d.ts","sourceRoot":"","sources":["../src/Equivalence.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,WAAW,MAAM,oBAAoB,CAAC;AAElD;;;GAGG;AACH,eAAO,MAAM,aAAa,wCAAqE,CAAC;AAEhG;;;GAGG;AACH,eAAO,MAAM,KAAK,uCAA6E,CAAC;AAEhG;;;GAGG;AACH,QAAA,MAAM,MAAM,uCAA6E,CAAC;AAE1F,OAAO;AACH;;;GAGG;AACH,MAAM,IAAI,KAAK,GAClB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,KAAK,0DAA6E,CAAC;AAEhG;;;GAGG;AACH,eAAO,MAAM,MAAM,kEAAgF,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @since 1.0.0
3
+ * @category Equivalence
4
+ */
5
+ import * as Equivalence from "effect/Equivalence";
6
+ /**
7
+ * @since 1.0.0
8
+ * @category Equivalence
9
+ */
10
+ export const nativePointer = /*#__PURE__*/Equivalence.make((self, that) => self.equals(that));
11
+ /**
12
+ * @since 1.0.0
13
+ * @category Equivalence
14
+ */
15
+ export const image = /*#__PURE__*/Equivalence.mapInput(nativePointer, image => image.handle);
16
+ /**
17
+ * @since 1.0.0
18
+ * @category Equivalence
19
+ */
20
+ const class_ = /*#__PURE__*/Equivalence.mapInput(nativePointer, klass => klass.handle);
21
+ export {
22
+ /**
23
+ * @since 1.0.0
24
+ * @category Equivalence
25
+ */
26
+ class_ as class };
27
+ /**
28
+ * @since 1.0.0
29
+ * @category Equivalence
30
+ */
31
+ export const field = /*#__PURE__*/Equivalence.mapInput(nativePointer, field => field.handle);
32
+ /**
33
+ * @since 1.0.0
34
+ * @category Equivalence
35
+ */
36
+ export const method = /*#__PURE__*/Equivalence.mapInput(nativePointer, method => method.handle);
37
+ //# sourceMappingURL=Equivalence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Equivalence.js","names":["Equivalence","nativePointer","make","self","that","equals","image","mapInput","handle","class_","klass","class","field","method"],"sources":["../src/Equivalence.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;AAKA,OAAO,KAAKA,WAAW,MAAM,oBAAoB;AAEjD;;;;AAIA,OAAO,MAAMC,aAAa,gBAAGD,WAAW,CAACE,IAAI,CAAgB,CAACC,IAAI,EAAEC,IAAI,KAAKD,IAAI,CAACE,MAAM,CAACD,IAAI,CAAC,CAAC;AAE/F;;;;AAIA,OAAO,MAAME,KAAK,gBAAGN,WAAW,CAACO,QAAQ,CAACN,aAAa,EAAGK,KAAmB,IAAKA,KAAK,CAACE,MAAM,CAAC;AAE/F;;;;AAIA,MAAMC,MAAM,gBAAGT,WAAW,CAACO,QAAQ,CAACN,aAAa,EAAGS,KAAmB,IAAKA,KAAK,CAACF,MAAM,CAAC;AAEzF;AACI;;;;AAIAC,MAAM,IAAIE,KAAK;AAGnB;;;;AAIA,OAAO,MAAMC,KAAK,gBAAGZ,WAAW,CAACO,QAAQ,CAACN,aAAa,EAAGW,KAAmB,IAAKA,KAAK,CAACJ,MAAM,CAAC;AAE/F;;;;AAIA,OAAO,MAAMK,MAAM,gBAAGb,WAAW,CAACO,QAAQ,CAACN,aAAa,EAAGY,MAAqB,IAAKA,MAAM,CAACL,MAAM,CAAC","ignoreList":[]}
package/dist/index.d.ts CHANGED
@@ -11,6 +11,11 @@ export * as Assembly from "./Assembly.ts";
11
11
  * @category Class
12
12
  */
13
13
  export * as Class from "./Class.ts";
14
+ /**
15
+ * @since 1.0.0
16
+ * @category Equivalence
17
+ */
18
+ export * as Equivalence from "./Equivalence.ts";
14
19
  /**
15
20
  * @since 1.0.0
16
21
  * @category FridaIl2cppBridge
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;;GAGG;AACH,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC;;;GAGG;AACH,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;;GAGG;AACH,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC;;;GAGG;AACH,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAE/C;;;GAGG;AACH,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAA"}
package/dist/index.js CHANGED
@@ -11,6 +11,11 @@ export * as Assembly from "./Assembly.js";
11
11
  * @category Class
12
12
  */
13
13
  export * as Class from "./Class.js";
14
+ /**
15
+ * @since 1.0.0
16
+ * @category Equivalence
17
+ */
18
+ export * as Equivalence from "./Equivalence.js";
14
19
  /**
15
20
  * @since 1.0.0
16
21
  * @category FridaIl2cppBridge
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Assembly","Class","FridaIl2cppBridge"],"sources":["../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAIA;;;;AAIA,OAAO,KAAKA,QAAQ,MAAM,eAAe;AAEzC;;;;AAIA,OAAO,KAAKC,KAAK,MAAM,YAAY;AAEnC;;;;AAIA,OAAO,KAAKC,iBAAiB,MAAM,wBAAwB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["Assembly","Class","Equivalence","FridaIl2cppBridge"],"sources":["../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAIA;;;;AAIA,OAAO,KAAKA,QAAQ,MAAM,eAAe;AAEzC;;;;AAIA,OAAO,KAAKC,KAAK,MAAM,YAAY;AAEnC;;;;AAIA,OAAO,KAAKC,WAAW,MAAM,kBAAkB;AAE/C;;;;AAIA,OAAO,KAAKC,iBAAiB,MAAM,wBAAwB","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@efffrida/il2cpp-bridge",
3
- "version": "0.0.19",
3
+ "version": "0.0.20",
4
4
  "description": "effect-ts frida-il2cpp-bridge",
5
5
  "keywords": [
6
6
  "frida.re",
package/src/Assembly.ts CHANGED
@@ -9,6 +9,7 @@ import type * as Scope from "effect/Scope";
9
9
 
10
10
  import * as Cause from "effect/Cause";
11
11
  import * as Effect from "effect/Effect";
12
+ import * as Equivalence from "effect/Equivalence";
12
13
 
13
14
  /**
14
15
  * @since 1.0.0
@@ -27,6 +28,24 @@ export const tryAssembly = (name: string): Effect.Effect<Il2Cpp.Assembly, Cause.
27
28
  catch: () => new Cause.NoSuchElementException(`No assembly with name ${name}`),
28
29
  }).pipe(Effect.flatMap(Effect.fromNullable));
29
30
 
31
+ /**
32
+ * @since 1.0.0
33
+ * @category Assembly
34
+ */
35
+ export const assemblyCached: Effect.Effect<typeof assembly, never, never> = Effect.cachedFunction(
36
+ assembly,
37
+ Equivalence.string
38
+ );
39
+
40
+ /**
41
+ * @since 1.0.0
42
+ * @category Assembly
43
+ */
44
+ export const tryAssemblyCached: Effect.Effect<typeof tryAssembly, never, never> = Effect.cachedFunction(
45
+ tryAssembly,
46
+ Equivalence.string
47
+ );
48
+
30
49
  /**
31
50
  * @since 1.0.0
32
51
  * @category Assembly
package/src/Class.ts CHANGED
@@ -7,7 +7,11 @@ import "frida-il2cpp-bridge";
7
7
 
8
8
  import * as Cause from "effect/Cause";
9
9
  import * as Effect from "effect/Effect";
10
+ import * as Equivalence from "effect/Equivalence";
10
11
  import * as Function from "effect/Function";
12
+ import * as Tuple from "effect/Tuple";
13
+
14
+ import * as Il2CppEquivalence from "./Equivalence.ts";
11
15
 
12
16
  /**
13
17
  * @since 1.0.0
@@ -40,29 +44,134 @@ export const tryClass = Function.dual<
40
44
  }).pipe(Effect.flatMap(Effect.fromNullable))
41
45
  );
42
46
 
47
+ /**
48
+ * @since 1.0.0
49
+ * @category Class
50
+ */
51
+ export const classCached: Effect.Effect<
52
+ (image: Il2Cpp.Image, name: string) => Effect.Effect<Il2Cpp.Class, never, never>,
53
+ never,
54
+ never
55
+ > = Effect.map(
56
+ Effect.cachedFunction(Function.tupled(class_), Equivalence.tuple(Il2CppEquivalence.image, Equivalence.string)),
57
+ Function.untupled
58
+ );
59
+
60
+ /**
61
+ * @since 1.0.0
62
+ * @category Class
63
+ */
64
+ export const tryClassCached: Effect.Effect<
65
+ (image: Il2Cpp.Image, name: string) => Effect.Effect<Il2Cpp.Class, Cause.NoSuchElementException, never>,
66
+ never,
67
+ never
68
+ > = Effect.map(
69
+ Effect.cachedFunction(Function.tupled(tryClass), Equivalence.tuple(Il2CppEquivalence.image, Equivalence.string)),
70
+ Function.untupled
71
+ );
72
+
73
+ /**
74
+ * @since 1.0.0
75
+ * @category Class
76
+ */
77
+ export const fields = (klass: Il2Cpp.Class): Effect.Effect<ReadonlyArray<Il2Cpp.Field>, never, never> =>
78
+ Effect.sync(() => klass.fields);
79
+
43
80
  /**
44
81
  * @since 1.0.0
45
82
  * @category Class
46
83
  */
47
84
  export const field = Function.dual<
48
- (name: string) => (klass: Il2Cpp.Class) => Effect.Effect<Il2Cpp.Field, never, never>,
49
- (klass: Il2Cpp.Class, name: string) => Effect.Effect<Il2Cpp.Field, never, never>
50
- >(2, (klass: Il2Cpp.Class, name: string) => Effect.sync(() => klass.field(name)));
85
+ (
86
+ name: string
87
+ ) => <T extends Il2Cpp.Field.Type = Il2Cpp.Field.Type>(
88
+ klass: Il2Cpp.Class
89
+ ) => Effect.Effect<Il2Cpp.Field<T>, never, never>,
90
+ <T extends Il2Cpp.Field.Type = Il2Cpp.Field.Type>(
91
+ klass: Il2Cpp.Class,
92
+ name: string
93
+ ) => Effect.Effect<Il2Cpp.Field<T>, never, never>
94
+ >(
95
+ 2,
96
+ <T extends Il2Cpp.Field.Type = Il2Cpp.Field.Type>(
97
+ klass: Il2Cpp.Class,
98
+ name: string
99
+ ): Effect.Effect<Il2Cpp.Field<T>, never, never> => Effect.sync(() => klass.field<T>(name))
100
+ );
51
101
 
52
102
  /**
53
103
  * @since 1.0.0
54
104
  * @category Class
55
105
  */
56
106
  export const tryField = Function.dual<
57
- (name: string) => (klass: Il2Cpp.Class) => Effect.Effect<Il2Cpp.Field, Cause.NoSuchElementException, never>,
58
- (klass: Il2Cpp.Class, name: string) => Effect.Effect<Il2Cpp.Field, Cause.NoSuchElementException, never>
59
- >(2, (klass: Il2Cpp.Class, name: string) =>
60
- Effect.try({
61
- try: () => klass.tryField(name),
62
- catch: () => new Cause.NoSuchElementException(`No field with name ${name}`),
63
- }).pipe(Effect.flatMap(Effect.fromNullable))
107
+ (
108
+ name: string
109
+ ) => <T extends Il2Cpp.Field.Type = Il2Cpp.Field.Type>(
110
+ klass: Il2Cpp.Class
111
+ ) => Effect.Effect<Il2Cpp.Field<T>, Cause.NoSuchElementException, never>,
112
+ <T extends Il2Cpp.Field.Type = Il2Cpp.Field.Type>(
113
+ klass: Il2Cpp.Class,
114
+ name: string
115
+ ) => Effect.Effect<Il2Cpp.Field<T>, Cause.NoSuchElementException, never>
116
+ >(
117
+ 2,
118
+ <T extends Il2Cpp.Field.Type = Il2Cpp.Field.Type>(
119
+ klass: Il2Cpp.Class,
120
+ name: string
121
+ ): Effect.Effect<Il2Cpp.Field<T>, Cause.NoSuchElementException, never> =>
122
+ Effect.try({
123
+ try: () => klass.field<T>(name),
124
+ catch: () => new Cause.NoSuchElementException(`No field with name ${name}`),
125
+ }).pipe(Effect.flatMap(Effect.fromNullable))
126
+ );
127
+
128
+ /**
129
+ * @since 1.0.0
130
+ * @category Class
131
+ */
132
+ export const fieldCached: Effect.Effect<
133
+ <T extends Il2Cpp.Field.Type = Il2Cpp.Field.Type>(
134
+ klass: Il2Cpp.Class,
135
+ name: string
136
+ ) => Effect.Effect<Il2Cpp.Field<T>, never, never>,
137
+ never,
138
+ never
139
+ > = Effect.map(
140
+ Effect.cachedFunction(Function.tupled(field), Equivalence.tuple(Il2CppEquivalence.class, Equivalence.string)),
141
+ (tupled) =>
142
+ Function.untupled(tupled) as <T extends Il2Cpp.Field.Type = Il2Cpp.Field.Type>(
143
+ klass: Il2Cpp.Class,
144
+ name: string
145
+ ) => Effect.Effect<Il2Cpp.Field<T>, never, never>
64
146
  );
65
147
 
148
+ /**
149
+ * @since 1.0.0
150
+ * @category Class
151
+ */
152
+ export const tryFieldCached: Effect.Effect<
153
+ <T extends Il2Cpp.Field.Type = Il2Cpp.Field.Type>(
154
+ klass: Il2Cpp.Class,
155
+ name: string
156
+ ) => Effect.Effect<Il2Cpp.Field<T>, Cause.NoSuchElementException, never>,
157
+ never,
158
+ never
159
+ > = Effect.map(
160
+ Effect.cachedFunction(Function.tupled(tryField), Equivalence.tuple(Il2CppEquivalence.class, Equivalence.string)),
161
+ (tupled) =>
162
+ Function.untupled(tupled) as <T extends Il2Cpp.Field.Type = Il2Cpp.Field.Type>(
163
+ klass: Il2Cpp.Class,
164
+ name: string
165
+ ) => Effect.Effect<Il2Cpp.Field<T>, Cause.NoSuchElementException, never>
166
+ );
167
+
168
+ /**
169
+ * @since 1.0.0
170
+ * @category Class
171
+ */
172
+ export const methods = (klass: Il2Cpp.Class): Effect.Effect<ReadonlyArray<Il2Cpp.Method>, never, never> =>
173
+ Effect.sync(() => klass.methods);
174
+
66
175
  /**
67
176
  * @since 1.0.0
68
177
  * @category Class
@@ -71,16 +180,21 @@ export const method = Function.dual<
71
180
  (
72
181
  name: string,
73
182
  parameterCount?: number | undefined
74
- ) => (klass: Il2Cpp.Class) => Effect.Effect<Il2Cpp.Method, never, never>,
75
- (
183
+ ) => <T extends Il2Cpp.Method.ReturnType = Il2Cpp.Method.ReturnType>(
184
+ klass: Il2Cpp.Class
185
+ ) => Effect.Effect<Il2Cpp.Method<T>, never, never>,
186
+ <T extends Il2Cpp.Method.ReturnType = Il2Cpp.Method.ReturnType>(
76
187
  klass: Il2Cpp.Class,
77
188
  name: string,
78
189
  parameterCount?: number | undefined
79
- ) => Effect.Effect<Il2Cpp.Method, never, never>
190
+ ) => Effect.Effect<Il2Cpp.Method<T>, never, never>
80
191
  >(
81
192
  (_arguments) => typeof _arguments[1] === "string",
82
- (klass: Il2Cpp.Class, name: string, parameterCount?: number | undefined) =>
83
- Effect.sync(() => klass.method(name, parameterCount))
193
+ <T extends Il2Cpp.Method.ReturnType = Il2Cpp.Method.ReturnType>(
194
+ klass: Il2Cpp.Class,
195
+ name: string,
196
+ parameterCount?: number | undefined
197
+ ): Effect.Effect<Il2Cpp.Method<T>, never, never> => Effect.sync(() => klass.method<T>(name, parameterCount))
84
198
  );
85
199
 
86
200
  /**
@@ -91,21 +205,83 @@ export const tryMethod = Function.dual<
91
205
  (
92
206
  name: string,
93
207
  parameterCount?: number | undefined
94
- ) => (klass: Il2Cpp.Class) => Effect.Effect<Il2Cpp.Method, Cause.NoSuchElementException, never>,
95
- (
208
+ ) => <T extends Il2Cpp.Method.ReturnType = Il2Cpp.Method.ReturnType>(
209
+ klass: Il2Cpp.Class
210
+ ) => Effect.Effect<Il2Cpp.Method<T>, Cause.NoSuchElementException, never>,
211
+ <T extends Il2Cpp.Method.ReturnType = Il2Cpp.Method.ReturnType>(
96
212
  klass: Il2Cpp.Class,
97
213
  name: string,
98
214
  parameterCount?: number | undefined
99
- ) => Effect.Effect<Il2Cpp.Method, Cause.NoSuchElementException, never>
215
+ ) => Effect.Effect<Il2Cpp.Method<T>, Cause.NoSuchElementException, never>
100
216
  >(
101
217
  (_arguments) => typeof _arguments[1] === "string",
102
- (klass: Il2Cpp.Class, name: string, parameterCount?: number | undefined) =>
218
+ <T extends Il2Cpp.Method.ReturnType = Il2Cpp.Method.ReturnType>(
219
+ klass: Il2Cpp.Class,
220
+ name: string,
221
+ parameterCount?: number | undefined
222
+ ): Effect.Effect<Il2Cpp.Method<T>, Cause.NoSuchElementException, never> =>
103
223
  Effect.try({
104
- try: () => klass.tryMethod(name, parameterCount),
224
+ try: () => klass.tryMethod<T>(name, parameterCount),
105
225
  catch: () => new Cause.NoSuchElementException(`No method with name ${name}`),
106
226
  }).pipe(Effect.flatMap(Effect.fromNullable))
107
227
  );
108
228
 
229
+ /**
230
+ * @since 1.0.0
231
+ * @category Class
232
+ */
233
+ export const methodCached: Effect.Effect<
234
+ <T extends Il2Cpp.Method.ReturnType = Il2Cpp.Method.ReturnType>(
235
+ klass: Il2Cpp.Class,
236
+ name: string,
237
+ parameterCount?: number | undefined
238
+ ) => Effect.Effect<Il2Cpp.Method<T>, never, never>,
239
+ never,
240
+ never
241
+ > = Effect.map(
242
+ Effect.cachedFunction(
243
+ Function.tupled(method),
244
+ Equivalence.mapInput(
245
+ Equivalence.tuple(Il2CppEquivalence.class, Equivalence.string, Equivalence.strict<number | undefined>()),
246
+ (tuple) => Tuple.make(tuple[0], tuple[1], tuple[2] ?? undefined)
247
+ )
248
+ ),
249
+ (tupled) =>
250
+ Function.untupled(tupled) as <T extends Il2Cpp.Method.ReturnType = Il2Cpp.Method.ReturnType>(
251
+ klass: Il2Cpp.Class,
252
+ name: string,
253
+ parameterCount?: number | undefined
254
+ ) => Effect.Effect<Il2Cpp.Method<T>, never, never>
255
+ );
256
+
257
+ /**
258
+ * @since 1.0.0
259
+ * @category Class
260
+ */
261
+ export const tryMethodCached: Effect.Effect<
262
+ <T extends Il2Cpp.Method.ReturnType = Il2Cpp.Method.ReturnType>(
263
+ klass: Il2Cpp.Class,
264
+ name: string,
265
+ parameterCount?: number | undefined
266
+ ) => Effect.Effect<Il2Cpp.Method<T>, Cause.NoSuchElementException, never>,
267
+ never,
268
+ never
269
+ > = Effect.map(
270
+ Effect.cachedFunction(
271
+ Function.tupled(tryMethod),
272
+ Equivalence.mapInput(
273
+ Equivalence.tuple(Il2CppEquivalence.class, Equivalence.string, Equivalence.strict<number | undefined>()),
274
+ (tuple) => Tuple.make(tuple[0], tuple[1], tuple[2] ?? undefined)
275
+ )
276
+ ),
277
+ (tupled) =>
278
+ Function.untupled(tupled) as <T extends Il2Cpp.Method.ReturnType = Il2Cpp.Method.ReturnType>(
279
+ klass: Il2Cpp.Class,
280
+ name: string,
281
+ parameterCount?: number | undefined
282
+ ) => Effect.Effect<Il2Cpp.Method<T>, Cause.NoSuchElementException, never>
283
+ );
284
+
109
285
  /**
110
286
  * @since 1.0.0
111
287
  * @category Class
@@ -128,3 +304,29 @@ export const tryNested = Function.dual<
128
304
  catch: () => new Cause.NoSuchElementException(`No nested class with name ${name}`),
129
305
  }).pipe(Effect.flatMap(Effect.fromNullable))
130
306
  );
307
+
308
+ /**
309
+ * @since 1.0.0
310
+ * @category Class
311
+ */
312
+ export const nestedCached: Effect.Effect<
313
+ (klass: Il2Cpp.Class, name: string) => Effect.Effect<Il2Cpp.Class, never, never>,
314
+ never,
315
+ never
316
+ > = Effect.map(
317
+ Effect.cachedFunction(Function.tupled(nested), Equivalence.tuple(Il2CppEquivalence.class, Equivalence.string)),
318
+ Function.untupled
319
+ );
320
+
321
+ /**
322
+ * @since 1.0.0
323
+ * @category Class
324
+ */
325
+ export const tryNestedCached: Effect.Effect<
326
+ (klass: Il2Cpp.Class, name: string) => Effect.Effect<Il2Cpp.Class, Cause.NoSuchElementException, never>,
327
+ never,
328
+ never
329
+ > = Effect.map(
330
+ Effect.cachedFunction(Function.tupled(tryNested), Equivalence.tuple(Il2CppEquivalence.class, Equivalence.string)),
331
+ Function.untupled
332
+ );
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @since 1.0.0
3
+ * @category Equivalence
4
+ */
5
+
6
+ import * as Equivalence from "effect/Equivalence";
7
+
8
+ /**
9
+ * @since 1.0.0
10
+ * @category Equivalence
11
+ */
12
+ export const nativePointer = Equivalence.make<NativePointer>((self, that) => self.equals(that));
13
+
14
+ /**
15
+ * @since 1.0.0
16
+ * @category Equivalence
17
+ */
18
+ export const image = Equivalence.mapInput(nativePointer, (image: Il2Cpp.Image) => image.handle);
19
+
20
+ /**
21
+ * @since 1.0.0
22
+ * @category Equivalence
23
+ */
24
+ const class_ = Equivalence.mapInput(nativePointer, (klass: Il2Cpp.Class) => klass.handle);
25
+
26
+ export {
27
+ /**
28
+ * @since 1.0.0
29
+ * @category Equivalence
30
+ */
31
+ class_ as class,
32
+ };
33
+
34
+ /**
35
+ * @since 1.0.0
36
+ * @category Equivalence
37
+ */
38
+ export const field = Equivalence.mapInput(nativePointer, (field: Il2Cpp.Field) => field.handle);
39
+
40
+ /**
41
+ * @since 1.0.0
42
+ * @category Equivalence
43
+ */
44
+ export const method = Equivalence.mapInput(nativePointer, (method: Il2Cpp.Method) => method.handle);
package/src/index.ts CHANGED
@@ -14,6 +14,12 @@ export * as Assembly from "./Assembly.ts"
14
14
  */
15
15
  export * as Class from "./Class.ts"
16
16
 
17
+ /**
18
+ * @since 1.0.0
19
+ * @category Equivalence
20
+ */
21
+ export * as Equivalence from "./Equivalence.ts"
22
+
17
23
  /**
18
24
  * @since 1.0.0
19
25
  * @category FridaIl2cppBridge