never-jscore 2.2.0__cp38-abi3-win_amd64.whl

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.
@@ -0,0 +1,11 @@
1
+ """
2
+ never_jscore - 基于 Deno Core 的高性能 JavaScript 运行时
3
+
4
+ High-performance Python JavaScript execution engine based on Deno Core (V8)
5
+ with full Promise/async support.
6
+ """
7
+
8
+ from .never_jscore import Context
9
+
10
+ __version__ = "2.0.0"
11
+ __all__ = ["Context"]
Binary file
@@ -0,0 +1,204 @@
1
+ """
2
+ never_jscore - 基于 Deno Core 的 JavaScript 运行时
3
+
4
+ 完整支持 Promise 和 async/await,适合 JS 逆向分析。
5
+ py_mini_racer 风格的实例化 API。
6
+ """
7
+
8
+ from typing import Any, List, Union, Optional
9
+
10
+ class Context:
11
+ """
12
+ JavaScript 执行上下文(支持异步)
13
+
14
+ 每个 Context 包含一个独立的 V8 isolate 和 JavaScript 运行时环境。
15
+ 默认自动等待 Promise,可以无缝调用异步 JavaScript 函数。
16
+
17
+ ⚠️ 重要限制:
18
+ - 创建第二个 Context 后,不能再使用第一个 Context
19
+ - 多个 Context 必须按 LIFO 顺序删除(后创建先删除)
20
+ - 推荐使用单 Context 模式,将所有函数定义在一个 Context 中
21
+
22
+ 🆕 扩展功能 (enable_extensions=True 时自动加载):
23
+ - Base64: btoa(), atob()
24
+ - 哈希: md5(), sha1(), sha256(), sha512()
25
+ - HMAC: CryptoUtils.hmacMd5(), hmacSha1(), hmacSha256()
26
+ - URL 编码: encodeURIComponent(), decodeURIComponent(), encodeURI(), decodeURI()
27
+ - Hex: CryptoUtils.hexEncode(), hexDecode()
28
+ - 链式 API: CryptoUtils.createHash(), createHmac()
29
+
30
+ Example:
31
+ >>> # 基本用法(默认启用扩展)
32
+ >>> ctx = Context()
33
+ >>> ctx.compile("function add(a, b) { return a + b; }")
34
+ >>> result = ctx.call("add", [1, 2])
35
+ >>> print(result)
36
+ 3
37
+
38
+ >>> # 使用扩展功能
39
+ >>> ctx = Context()
40
+ >>> result = ctx.evaluate("btoa('hello')")
41
+ >>> print(result)
42
+ aGVsbG8=
43
+
44
+ >>> result = ctx.evaluate("md5('hello')")
45
+ >>> print(result)
46
+ 5d41402abc4b2a76b9719d911017c592
47
+
48
+ >>> # 纯净 V8 环境(不加载扩展)
49
+ >>> ctx = Context(enable_extensions=False)
50
+ >>> # 只有 ECMAScript 标准 API
51
+ """
52
+
53
+ def __init__(self, enable_extensions: bool = True) -> None:
54
+ """
55
+ 创建一个新的 JavaScript 执行上下文
56
+
57
+ Args:
58
+ enable_extensions: 是否启用扩展(crypto, encoding 等),默认 True
59
+ - True: 自动加载 btoa/atob/md5/sha256 等函数
60
+ - False: 纯净 V8 环境,只包含 ECMAScript 标准 API
61
+ """
62
+ ...
63
+
64
+ def compile(self, code: str) -> None:
65
+ """
66
+ 编译 JavaScript 代码并加入全局作用域
67
+
68
+ Args:
69
+ code: JavaScript 代码字符串
70
+
71
+ Raises:
72
+ Exception: 当代码编译失败时
73
+
74
+ Example:
75
+ >>> ctx = Context()
76
+ >>> ctx.compile('''
77
+ ... function add(a, b) { return a + b; }
78
+ ... function multiply(a, b) { return a * b; }
79
+ ... ''')
80
+ >>> ctx.call("add", [1, 2])
81
+ 3
82
+ """
83
+ ...
84
+
85
+ def eval(
86
+ self,
87
+ code: str,
88
+ return_value: bool = False,
89
+ auto_await: Optional[bool] = None
90
+ ) -> Any:
91
+ """
92
+ 执行代码并将其加入全局作用域
93
+
94
+ Args:
95
+ code: JavaScript 代码字符串
96
+ return_value: 是否返回最后一个表达式的值(默认 False)
97
+ auto_await: 是否自动等待 Promise(默认 True)
98
+
99
+ Returns:
100
+ 如果 return_value=True,返回最后表达式的值;否则返回 None
101
+
102
+ Raises:
103
+ Exception: 当代码执行失败时
104
+
105
+ Example:
106
+ >>> ctx = Context()
107
+ >>> ctx.eval("var x = 10;") # 添加到全局作用域
108
+ >>> result = ctx.eval("x * 2", return_value=True)
109
+ >>> print(result)
110
+ 20
111
+ """
112
+ ...
113
+
114
+ def evaluate(self, code: str, auto_await: Optional[bool] = None) -> Any:
115
+ """
116
+ 执行代码并返回结果(不影响全局作用域)
117
+
118
+ Args:
119
+ code: JavaScript 代码字符串
120
+ auto_await: 是否自动等待 Promise(默认 True)
121
+
122
+ Returns:
123
+ 表达式的值,自动转换为 Python 对象
124
+
125
+ Raises:
126
+ Exception: 当代码执行失败时
127
+
128
+ Example:
129
+ >>> ctx = Context()
130
+ >>> result = ctx.evaluate("1 + 2 + 3")
131
+ >>> print(result)
132
+ 6
133
+
134
+ >>> # Promise(自动等待)
135
+ >>> result = ctx.evaluate("Promise.resolve(42)")
136
+ >>> print(result)
137
+ 42
138
+ """
139
+ ...
140
+
141
+ def call(
142
+ self,
143
+ name: str,
144
+ args: List[Any] = [],
145
+ auto_await: Optional[bool] = None
146
+ ) -> Any:
147
+ """
148
+ 调用 JavaScript 函数(支持 Promise)
149
+
150
+ Args:
151
+ name: 函数名称
152
+ args: 参数列表
153
+ auto_await: 是否自动等待 Promise(默认 True)
154
+
155
+ Returns:
156
+ 函数返回值,自动转换为 Python 对象
157
+
158
+ Raises:
159
+ Exception: 当函数调用失败时
160
+
161
+ Example:
162
+ >>> ctx = Context()
163
+ >>> ctx.compile("async function decrypt(data) { return data.split('').reverse().join(''); }")
164
+ >>> result = ctx.call("decrypt", ["olleh"])
165
+ >>> print(result)
166
+ hello
167
+ """
168
+ ...
169
+
170
+ def gc(self) -> None:
171
+ """
172
+ 请求 V8 垃圾回收
173
+
174
+ 注意:这只是向 V8 发送 GC 请求,V8 会根据自己的策略决定是否执行。
175
+ 在大多数情况下,V8 的自动 GC 已经足够好,无需手动调用。
176
+ """
177
+ ...
178
+
179
+ def get_stats(self) -> tuple[int]:
180
+ """
181
+ 获取执行统计信息
182
+
183
+ Returns:
184
+ 包含执行次数的元组 (exec_count,)
185
+ """
186
+ ...
187
+
188
+ def reset_stats(self) -> None:
189
+ """
190
+ 重置统计信息
191
+ """
192
+ ...
193
+
194
+ # 类型别名
195
+ JSValue = Union[None, bool, int, float, str, List[Any], dict[str, Any]]
196
+ """JavaScript 值的 Python 类型表示"""
197
+
198
+ __version__: str = "2.0.0"
199
+ """模块版本号"""
200
+
201
+ __all__ = [
202
+ "Context",
203
+ "JSValue",
204
+ ]
never_jscore/py.typed ADDED
@@ -0,0 +1,2 @@
1
+ # Marker file for PEP 561
2
+ # This file indicates that the package supports type hints