xbintsc 0.3.87 → 0.5.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.
Files changed (458) hide show
  1. package/AGENTS.md +23 -11
  2. package/README.md +11 -9
  3. package/README.zh-CN.md +7 -7
  4. package/dist/src/binder/declarations.js +14 -3
  5. package/dist/src/binder/declarations.js.map +1 -1
  6. package/dist/src/cli/hints.js +7 -1
  7. package/dist/src/cli/hints.js.map +1 -1
  8. package/dist/src/cli/main.js +115 -15
  9. package/dist/src/cli/main.js.map +1 -1
  10. package/dist/src/cli/watch.d.ts +25 -0
  11. package/dist/src/cli/watch.js +93 -0
  12. package/dist/src/cli/watch.js.map +1 -0
  13. package/dist/src/codegen/generator/calls/access.js +17 -4
  14. package/dist/src/codegen/generator/calls/access.js.map +1 -1
  15. package/dist/src/codegen/generator/calls/closures.js +13 -1
  16. package/dist/src/codegen/generator/calls/closures.js.map +1 -1
  17. package/dist/src/codegen/generator/calls/invocation.js +4 -3
  18. package/dist/src/codegen/generator/calls/invocation.js.map +1 -1
  19. package/dist/src/codegen/generator/context.d.ts +8 -0
  20. package/dist/src/codegen/generator/context.js +22 -3
  21. package/dist/src/codegen/generator/context.js.map +1 -1
  22. package/dist/src/codegen/generator/expressions/operators.js +17 -15
  23. package/dist/src/codegen/generator/expressions/operators.js.map +1 -1
  24. package/dist/src/codegen/generator/expressions/primary.js +11 -1
  25. package/dist/src/codegen/generator/expressions/primary.js.map +1 -1
  26. package/dist/src/codegen/generator/module.d.ts +0 -1
  27. package/dist/src/codegen/generator/module.js +10 -17
  28. package/dist/src/codegen/generator/module.js.map +1 -1
  29. package/dist/src/codegen/generator/numeric.d.ts +6 -3
  30. package/dist/src/codegen/generator/numeric.js +54 -11
  31. package/dist/src/codegen/generator/numeric.js.map +1 -1
  32. package/dist/src/codegen/generator/state.js +27 -0
  33. package/dist/src/codegen/generator/state.js.map +1 -1
  34. package/dist/src/codegen/generator/statements/control-flow.js +2 -7
  35. package/dist/src/codegen/generator/statements/control-flow.js.map +1 -1
  36. package/dist/src/codegen/generator/statements/loops.js +48 -16
  37. package/dist/src/codegen/generator/statements/loops.js.map +1 -1
  38. package/dist/src/codegen/generator/tables.d.ts +9 -0
  39. package/dist/src/codegen/generator/tables.js +100 -3
  40. package/dist/src/codegen/generator/tables.js.map +1 -1
  41. package/dist/src/diagnostics/diagnostic.d.ts +3 -1
  42. package/dist/src/diagnostics/diagnostic.js +23 -3
  43. package/dist/src/diagnostics/diagnostic.js.map +1 -1
  44. package/dist/src/driver/app-artifacts.d.ts +42 -0
  45. package/dist/src/driver/app-artifacts.js +53 -0
  46. package/dist/src/driver/app-artifacts.js.map +1 -0
  47. package/dist/src/driver/build-key.d.ts +29 -0
  48. package/dist/src/driver/build-key.js +35 -0
  49. package/dist/src/driver/build-key.js.map +1 -0
  50. package/dist/src/driver/bundler/graph.js +61 -12
  51. package/dist/src/driver/bundler/graph.js.map +1 -1
  52. package/dist/src/driver/bundler/merge.js +7 -1
  53. package/dist/src/driver/bundler/merge.js.map +1 -1
  54. package/dist/src/driver/compiler.d.ts +10 -67
  55. package/dist/src/driver/compiler.js +94 -230
  56. package/dist/src/driver/compiler.js.map +1 -1
  57. package/dist/src/driver/config.d.ts +3 -0
  58. package/dist/src/driver/config.js +8 -0
  59. package/dist/src/driver/config.js.map +1 -1
  60. package/dist/src/driver/frontend.d.ts +37 -0
  61. package/dist/src/driver/frontend.js +92 -0
  62. package/dist/src/driver/frontend.js.map +1 -0
  63. package/dist/src/driver/index.d.ts +1 -1
  64. package/dist/src/driver/index.js.map +1 -1
  65. package/dist/src/driver/options.d.ts +64 -0
  66. package/dist/src/driver/options.js +9 -0
  67. package/dist/src/driver/options.js.map +1 -0
  68. package/dist/src/driver/runtime-objects.d.ts +38 -0
  69. package/dist/src/driver/runtime-objects.js +111 -0
  70. package/dist/src/driver/runtime-objects.js.map +1 -0
  71. package/dist/src/driver/toolchain-provider.d.ts +4 -0
  72. package/dist/src/driver/toolchain-provider.js +4 -0
  73. package/dist/src/driver/toolchain-provider.js.map +1 -1
  74. package/dist/src/driver/toolchain.d.ts +32 -1
  75. package/dist/src/driver/toolchain.js +115 -11
  76. package/dist/src/driver/toolchain.js.map +1 -1
  77. package/dist/src/driver/version.d.ts +12 -0
  78. package/dist/src/driver/version.js +13 -0
  79. package/dist/src/driver/version.js.map +1 -0
  80. package/dist/src/driver/win-icon.d.ts +7 -9
  81. package/dist/src/driver/win-icon.js +37 -35
  82. package/dist/src/driver/win-icon.js.map +1 -1
  83. package/dist/src/parser/declarations/classes.js +5 -0
  84. package/dist/src/parser/declarations/classes.js.map +1 -1
  85. package/dist/src/parser/declarations/functions.js +13 -1
  86. package/dist/src/parser/declarations/functions.js.map +1 -1
  87. package/dist/src/parser/modules.js +8 -3
  88. package/dist/src/parser/modules.js.map +1 -1
  89. package/dist/src/parser/parser.d.ts +1 -0
  90. package/dist/src/parser/parser.js +23 -0
  91. package/dist/src/parser/parser.js.map +1 -1
  92. package/dist/tests/cli/check.test.d.ts +6 -0
  93. package/dist/tests/cli/check.test.js +68 -0
  94. package/dist/tests/cli/check.test.js.map +1 -0
  95. package/dist/tests/cli/main.test.js +19 -0
  96. package/dist/tests/cli/main.test.js.map +1 -1
  97. package/dist/tests/cli/watch.test.d.ts +6 -0
  98. package/dist/tests/cli/watch.test.js +72 -0
  99. package/dist/tests/cli/watch.test.js.map +1 -0
  100. package/dist/tests/codegen/closures.test.js +8 -0
  101. package/dist/tests/codegen/closures.test.js.map +1 -1
  102. package/dist/tests/codegen/expressions.test.js +15 -3
  103. package/dist/tests/codegen/expressions.test.js.map +1 -1
  104. package/dist/tests/codegen/llvm.test.js +16 -0
  105. package/dist/tests/codegen/llvm.test.js.map +1 -1
  106. package/dist/tests/diagnostics/diagnostic.test.js +8 -0
  107. package/dist/tests/diagnostics/diagnostic.test.js.map +1 -1
  108. package/dist/tests/docs/structure.test.d.ts +1 -0
  109. package/dist/tests/docs/structure.test.js +92 -0
  110. package/dist/tests/docs/structure.test.js.map +1 -0
  111. package/dist/tests/driver/compiler.test.js +6 -0
  112. package/dist/tests/driver/compiler.test.js.map +1 -1
  113. package/dist/tests/driver/config.test.js +9 -0
  114. package/dist/tests/driver/config.test.js.map +1 -1
  115. package/dist/tests/driver/icon.test.js +19 -32
  116. package/dist/tests/driver/icon.test.js.map +1 -1
  117. package/dist/tests/driver/invalid-input.test.d.ts +10 -0
  118. package/dist/tests/driver/invalid-input.test.js +29 -0
  119. package/dist/tests/driver/invalid-input.test.js.map +1 -0
  120. package/dist/tests/driver/modules.test.js +42 -3
  121. package/dist/tests/driver/modules.test.js.map +1 -1
  122. package/dist/tests/driver/toolchain-provider.test.js +27 -1
  123. package/dist/tests/driver/toolchain-provider.test.js.map +1 -1
  124. package/dist/tests/driver/toolchain.test.js +60 -2
  125. package/dist/tests/driver/toolchain.test.js.map +1 -1
  126. package/dist/tests/e2e/array-buffer.test.d.ts +5 -0
  127. package/dist/tests/e2e/array-buffer.test.js +38 -0
  128. package/dist/tests/e2e/array-buffer.test.js.map +1 -0
  129. package/dist/tests/e2e/array-from-iterables.test.d.ts +7 -0
  130. package/dist/tests/e2e/array-from-iterables.test.js +34 -0
  131. package/dist/tests/e2e/array-from-iterables.test.js.map +1 -0
  132. package/dist/tests/e2e/array-symbol-iterator.test.d.ts +8 -0
  133. package/dist/tests/e2e/array-symbol-iterator.test.js +42 -0
  134. package/dist/tests/e2e/array-symbol-iterator.test.js.map +1 -0
  135. package/dist/tests/e2e/async-await.test.d.ts +10 -0
  136. package/dist/tests/e2e/async-await.test.js +247 -0
  137. package/dist/tests/e2e/async-await.test.js.map +1 -0
  138. package/dist/tests/e2e/async-generators.test.d.ts +1 -0
  139. package/dist/tests/e2e/async-generators.test.js +154 -0
  140. package/dist/tests/e2e/async-generators.test.js.map +1 -0
  141. package/dist/tests/e2e/await-ordering.test.d.ts +5 -0
  142. package/dist/tests/e2e/await-ordering.test.js +37 -0
  143. package/dist/tests/e2e/await-ordering.test.js.map +1 -0
  144. package/dist/tests/e2e/compile-builtins.test.js +1 -1
  145. package/dist/tests/e2e/compile-modules.test.js +7 -0
  146. package/dist/tests/e2e/compile-modules.test.js.map +1 -1
  147. package/dist/tests/e2e/date-parse.test.d.ts +8 -0
  148. package/dist/tests/e2e/date-parse.test.js +38 -0
  149. package/dist/tests/e2e/date-parse.test.js.map +1 -0
  150. package/dist/tests/e2e/default-anonymous-exports.test.d.ts +7 -0
  151. package/dist/tests/e2e/default-anonymous-exports.test.js +23 -0
  152. package/dist/tests/e2e/default-anonymous-exports.test.js.map +1 -0
  153. package/dist/tests/e2e/globals-microtask.test.d.ts +9 -0
  154. package/dist/tests/e2e/globals-microtask.test.js +37 -0
  155. package/dist/tests/e2e/globals-microtask.test.js.map +1 -0
  156. package/dist/tests/e2e/gui-media.test.js +8 -1
  157. package/dist/tests/e2e/gui-media.test.js.map +1 -1
  158. package/dist/tests/e2e/inspect-builtins.test.d.ts +10 -0
  159. package/dist/tests/e2e/inspect-builtins.test.js +43 -0
  160. package/dist/tests/e2e/inspect-builtins.test.js.map +1 -0
  161. package/dist/tests/e2e/json-builtin-objects.test.d.ts +9 -0
  162. package/dist/tests/e2e/json-builtin-objects.test.js +23 -0
  163. package/dist/tests/e2e/json-builtin-objects.test.js.map +1 -0
  164. package/dist/tests/e2e/json-circular.test.d.ts +6 -0
  165. package/dist/tests/e2e/json-circular.test.js +43 -0
  166. package/dist/tests/e2e/json-circular.test.js.map +1 -0
  167. package/dist/tests/e2e/json-parse-reviver.test.d.ts +6 -0
  168. package/dist/tests/e2e/json-parse-reviver.test.js +29 -0
  169. package/dist/tests/e2e/json-parse-reviver.test.js.map +1 -0
  170. package/dist/tests/e2e/json-stringify-replacer.test.d.ts +6 -0
  171. package/dist/tests/e2e/json-stringify-replacer.test.js +27 -0
  172. package/dist/tests/e2e/json-stringify-replacer.test.js.map +1 -0
  173. package/dist/tests/e2e/json-stringify-space.test.d.ts +6 -0
  174. package/dist/tests/e2e/json-stringify-space.test.js +23 -0
  175. package/dist/tests/e2e/json-stringify-space.test.js.map +1 -0
  176. package/dist/tests/e2e/method-dispatch-errors.test.d.ts +9 -0
  177. package/dist/tests/e2e/method-dispatch-errors.test.js +38 -0
  178. package/dist/tests/e2e/method-dispatch-errors.test.js.map +1 -0
  179. package/dist/tests/e2e/native-extensions.test.js +1 -1
  180. package/dist/tests/e2e/native-extensions.test.js.map +1 -1
  181. package/dist/tests/e2e/promise-with-resolvers.test.d.ts +5 -0
  182. package/dist/tests/e2e/promise-with-resolvers.test.js +20 -0
  183. package/dist/tests/e2e/promise-with-resolvers.test.js.map +1 -0
  184. package/dist/tests/e2e/property-descriptors.test.d.ts +5 -0
  185. package/dist/tests/e2e/property-descriptors.test.js +25 -0
  186. package/dist/tests/e2e/property-descriptors.test.js.map +1 -0
  187. package/dist/tests/e2e/property-ic.test.d.ts +1 -0
  188. package/dist/tests/e2e/property-ic.test.js +55 -0
  189. package/dist/tests/e2e/property-ic.test.js.map +1 -0
  190. package/dist/tests/e2e/runtime-coverage-globals.test.js +46 -0
  191. package/dist/tests/e2e/runtime-coverage-globals.test.js.map +1 -1
  192. package/dist/tests/e2e/runtime-errors.test.d.ts +10 -0
  193. package/dist/tests/e2e/runtime-errors.test.js +52 -0
  194. package/dist/tests/e2e/runtime-errors.test.js.map +1 -0
  195. package/dist/tests/e2e/string-utf16.test.d.ts +6 -0
  196. package/dist/tests/e2e/string-utf16.test.js +133 -0
  197. package/dist/tests/e2e/string-utf16.test.js.map +1 -0
  198. package/dist/tests/e2e/structured-clone.test.d.ts +6 -0
  199. package/dist/tests/e2e/structured-clone.test.js +49 -0
  200. package/dist/tests/e2e/structured-clone.test.js.map +1 -0
  201. package/dist/tests/e2e/text-codec.test.d.ts +6 -0
  202. package/dist/tests/e2e/text-codec.test.js +24 -0
  203. package/dist/tests/e2e/text-codec.test.js.map +1 -0
  204. package/dist/tests/e2e/typed-array-views.test.d.ts +6 -0
  205. package/dist/tests/e2e/typed-array-views.test.js +39 -0
  206. package/dist/tests/e2e/typed-array-views.test.js.map +1 -0
  207. package/dist/tests/e2e/url-search-params.test.d.ts +5 -0
  208. package/dist/tests/e2e/url-search-params.test.js +30 -0
  209. package/dist/tests/e2e/url-search-params.test.js.map +1 -0
  210. package/dist/tests/e2e/weak-collections.test.d.ts +1 -0
  211. package/dist/tests/e2e/weak-collections.test.js +88 -0
  212. package/dist/tests/e2e/weak-collections.test.js.map +1 -0
  213. package/dist/tests/parser/declarations.test.js +12 -0
  214. package/dist/tests/parser/declarations.test.js.map +1 -1
  215. package/dist/tests/parser/module-syntax.test.js +9 -0
  216. package/dist/tests/parser/module-syntax.test.js.map +1 -1
  217. package/dist/tests/parser/parser.test.js +7 -0
  218. package/dist/tests/parser/parser.test.js.map +1 -1
  219. package/dist/tests/version.test.js +5 -1
  220. package/dist/tests/version.test.js.map +1 -1
  221. package/doc/ai/README.md +4 -3
  222. package/doc/ai/cli.md +41 -0
  223. package/doc/ai/contributing.md +26 -21
  224. package/doc/ai/extensions.md +12 -9
  225. package/doc/ai/language-support.md +26 -19
  226. package/doc/ai/troubleshooting.md +15 -12
  227. package/doc/ai/zh-CN/README.md +3 -2
  228. package/doc/ai/zh-CN/cli.md +35 -0
  229. package/doc/ai/zh-CN/contributing.md +19 -18
  230. package/doc/ai/zh-CN/extensions.md +10 -7
  231. package/doc/ai/zh-CN/language-support.md +26 -20
  232. package/doc/ai/zh-CN/troubleshooting.md +12 -10
  233. package/doc/gui/build.md +13 -4
  234. package/doc/gui/known-issues.md +9 -5
  235. package/doc/gui/rendering.md +3 -1
  236. package/doc/gui.md +4 -3
  237. package/doc/icon.md +5 -4
  238. package/doc/implemented/async.md +38 -0
  239. package/doc/implemented/binder.md +13 -0
  240. package/doc/implemented/cli.md +47 -0
  241. package/doc/implemented/codegen.md +33 -0
  242. package/doc/implemented/collections.md +26 -0
  243. package/doc/implemented/driver.md +19 -0
  244. package/doc/implemented/extensions.md +19 -0
  245. package/doc/implemented/fetch.md +12 -0
  246. package/doc/implemented/lexer.md +23 -0
  247. package/doc/implemented/modules.md +28 -0
  248. package/doc/implemented/node/assert.md +17 -0
  249. package/doc/implemented/node/buffer.md +29 -0
  250. package/doc/implemented/node/child-process.md +29 -0
  251. package/doc/implemented/node/crypto.md +9 -0
  252. package/doc/implemented/node/dgram.md +15 -0
  253. package/doc/implemented/node/events.md +37 -0
  254. package/doc/implemented/node/fs-promises.md +38 -0
  255. package/doc/implemented/node/fs.md +112 -0
  256. package/doc/implemented/node/http.md +21 -0
  257. package/doc/implemented/node/net.md +17 -0
  258. package/doc/implemented/node/os.md +22 -0
  259. package/doc/implemented/node/path.md +33 -0
  260. package/doc/implemented/node/process.md +23 -0
  261. package/doc/implemented/node/querystring.md +20 -0
  262. package/doc/implemented/node/stream-promises.md +8 -0
  263. package/doc/implemented/node/stream.md +19 -0
  264. package/doc/implemented/node/test.md +10 -0
  265. package/doc/implemented/node/url.md +8 -0
  266. package/doc/implemented/node/util.md +25 -0
  267. package/doc/implemented/node/worker-threads.md +10 -0
  268. package/doc/implemented/node/zlib.md +8 -0
  269. package/doc/implemented/node.md +48 -0
  270. package/doc/implemented/operators.md +38 -0
  271. package/doc/implemented/parser.md +58 -0
  272. package/doc/implemented/pipeline.md +28 -0
  273. package/doc/implemented/runtime-core.md +32 -0
  274. package/doc/implemented/stdlib.md +78 -0
  275. package/doc/implemented/strings.md +27 -0
  276. package/doc/implemented/tests.md +10 -0
  277. package/doc/implemented/typed-arrays.md +26 -0
  278. package/doc/implemented/value-model.md +18 -0
  279. package/doc/implemented.md +54 -352
  280. package/doc/node-implemented.md +3 -585
  281. package/doc/node-unimplemented.md +3 -164
  282. package/doc/requirements.md +23 -8
  283. package/doc/unimplemented/classes.md +22 -0
  284. package/doc/unimplemented/deviations.md +27 -0
  285. package/doc/unimplemented/expressions.md +26 -0
  286. package/doc/unimplemented/functions.md +21 -0
  287. package/doc/unimplemented/modules.md +22 -0
  288. package/doc/unimplemented/node/async.md +17 -0
  289. package/doc/unimplemented/node/bun.md +9 -0
  290. package/doc/unimplemented/node/fs-promises.md +16 -0
  291. package/doc/unimplemented/node/fs.md +31 -0
  292. package/doc/unimplemented/node/globals.md +23 -0
  293. package/doc/unimplemented/node/modules.md +21 -0
  294. package/doc/unimplemented/node.md +21 -0
  295. package/doc/unimplemented/statements.md +18 -0
  296. package/doc/unimplemented/stdlib.md +54 -0
  297. package/doc/unimplemented/toolchain.md +14 -0
  298. package/doc/unimplemented/types.md +12 -0
  299. package/doc/unimplemented.md +18 -274
  300. package/doc/xbintsc.config.schema.json +12 -0
  301. package/doc/zh-CN/gui/build.md +11 -3
  302. package/doc/zh-CN/gui/known-issues.md +9 -4
  303. package/doc/zh-CN/gui/rendering.md +2 -1
  304. package/doc/zh-CN/gui.md +3 -2
  305. package/doc/zh-CN/icon.md +5 -4
  306. package/doc/zh-CN/implemented/async.md +38 -0
  307. package/doc/zh-CN/implemented/binder.md +13 -0
  308. package/doc/zh-CN/implemented/cli.md +46 -0
  309. package/doc/zh-CN/implemented/codegen.md +33 -0
  310. package/doc/zh-CN/implemented/collections.md +26 -0
  311. package/doc/zh-CN/implemented/driver.md +19 -0
  312. package/doc/zh-CN/implemented/extensions.md +19 -0
  313. package/doc/zh-CN/implemented/fetch.md +12 -0
  314. package/doc/zh-CN/implemented/lexer.md +23 -0
  315. package/doc/zh-CN/implemented/modules.md +28 -0
  316. package/doc/zh-CN/implemented/node/assert.md +17 -0
  317. package/doc/zh-CN/implemented/node/buffer.md +25 -0
  318. package/doc/zh-CN/implemented/node/child-process.md +27 -0
  319. package/doc/zh-CN/implemented/node/crypto.md +9 -0
  320. package/doc/zh-CN/implemented/node/dgram.md +15 -0
  321. package/doc/zh-CN/implemented/node/events.md +36 -0
  322. package/doc/zh-CN/implemented/node/fs-promises.md +27 -0
  323. package/doc/zh-CN/implemented/node/fs.md +105 -0
  324. package/doc/zh-CN/implemented/node/http.md +17 -0
  325. package/doc/zh-CN/implemented/node/net.md +17 -0
  326. package/doc/zh-CN/implemented/node/os.md +21 -0
  327. package/doc/zh-CN/implemented/node/path.md +26 -0
  328. package/doc/zh-CN/implemented/node/process.md +23 -0
  329. package/doc/zh-CN/implemented/node/querystring.md +20 -0
  330. package/doc/zh-CN/implemented/node/stream-promises.md +8 -0
  331. package/doc/zh-CN/implemented/node/stream.md +15 -0
  332. package/doc/zh-CN/implemented/node/test.md +10 -0
  333. package/doc/zh-CN/implemented/node/url.md +8 -0
  334. package/doc/zh-CN/implemented/node/util.md +25 -0
  335. package/doc/zh-CN/implemented/node/worker-threads.md +9 -0
  336. package/doc/zh-CN/implemented/node/zlib.md +8 -0
  337. package/doc/zh-CN/implemented/node.md +45 -0
  338. package/doc/zh-CN/implemented/operators.md +38 -0
  339. package/doc/zh-CN/implemented/parser.md +58 -0
  340. package/doc/zh-CN/implemented/pipeline.md +25 -0
  341. package/doc/zh-CN/implemented/runtime-core.md +31 -0
  342. package/doc/zh-CN/implemented/stdlib.md +76 -0
  343. package/doc/zh-CN/implemented/strings.md +27 -0
  344. package/doc/zh-CN/implemented/tests.md +10 -0
  345. package/doc/zh-CN/implemented/typed-arrays.md +26 -0
  346. package/doc/zh-CN/implemented/value-model.md +18 -0
  347. package/doc/zh-CN/implemented.md +50 -347
  348. package/doc/zh-CN/node-implemented.md +4 -531
  349. package/doc/zh-CN/node-unimplemented.md +4 -139
  350. package/doc/zh-CN/plan-require-node-modules.md +4 -4
  351. package/doc/zh-CN/requirements.md +20 -6
  352. package/doc/zh-CN/unimplemented/classes.md +22 -0
  353. package/doc/zh-CN/unimplemented/deviations.md +24 -0
  354. package/doc/zh-CN/unimplemented/expressions.md +24 -0
  355. package/doc/zh-CN/unimplemented/functions.md +21 -0
  356. package/doc/zh-CN/unimplemented/modules.md +19 -0
  357. package/doc/zh-CN/unimplemented/node/async.md +17 -0
  358. package/doc/zh-CN/unimplemented/node/bun.md +8 -0
  359. package/doc/zh-CN/unimplemented/node/fs-promises.md +12 -0
  360. package/doc/zh-CN/unimplemented/node/fs.md +24 -0
  361. package/doc/zh-CN/unimplemented/node/globals.md +14 -0
  362. package/doc/zh-CN/unimplemented/node/modules.md +15 -0
  363. package/doc/zh-CN/unimplemented/node.md +18 -0
  364. package/doc/zh-CN/unimplemented/statements.md +15 -0
  365. package/doc/zh-CN/unimplemented/stdlib.md +54 -0
  366. package/doc/zh-CN/unimplemented/toolchain.md +14 -0
  367. package/doc/zh-CN/unimplemented/types.md +11 -0
  368. package/doc/zh-CN/unimplemented.md +14 -236
  369. package/llms.txt +32 -4
  370. package/package.json +1 -1
  371. package/runtime/ext_gui/renderer_shaders.h +2 -2
  372. package/runtime/ext_gui/stb_image.h +1 -17
  373. package/runtime/ext_node/child_process/child_process.c +173 -73
  374. package/runtime/rt.h +47 -0
  375. package/runtime/rt_internal.h +205 -10
  376. package/runtime/xt_alloc.c +49 -7
  377. package/runtime/xt_array_buffer.c +284 -0
  378. package/runtime/xt_async.c +222 -0
  379. package/runtime/xt_bigint/helpers.inc +3 -3
  380. package/runtime/xt_builtins.c +59 -51
  381. package/runtime/xt_constructors.c +399 -0
  382. package/runtime/xt_containers/access.inc +195 -14
  383. package/runtime/xt_containers/arrays.inc +26 -2
  384. package/runtime/xt_containers/objects.inc +226 -5
  385. package/runtime/xt_containers/shapes.inc +71 -0
  386. package/runtime/xt_containers.c +1 -0
  387. package/runtime/xt_coroutine.c +229 -0
  388. package/runtime/xt_generator.c +325 -167
  389. package/runtime/xt_io/inspect.inc +147 -2
  390. package/runtime/xt_loop.c +35 -4
  391. package/runtime/xt_performance.c +37 -0
  392. package/runtime/xt_promise.c +125 -18
  393. package/runtime/xt_stdlib/arrays.inc +1 -1
  394. package/runtime/xt_stdlib/dispatch.inc +64 -13
  395. package/runtime/xt_stdlib/strings.inc +74 -17
  396. package/runtime/xt_stdlib2/array-statics.inc +28 -3
  397. package/runtime/xt_stdlib2/arrays.inc +5 -3
  398. package/runtime/xt_stdlib2/container.inc +5 -0
  399. package/runtime/xt_stdlib2/date.inc +111 -3
  400. package/runtime/xt_stdlib2/error.inc +35 -0
  401. package/runtime/xt_stdlib2/json.inc +353 -33
  402. package/runtime/xt_stdlib2/number-string-statics.inc +24 -15
  403. package/runtime/xt_stdlib2/objects.inc +123 -1
  404. package/runtime/xt_stdlib2/regexp-match.inc +2 -2
  405. package/runtime/xt_stdlib2/set.inc +7 -1
  406. package/runtime/xt_stdlib2/strings.inc +70 -40
  407. package/runtime/xt_structured_clone.c +159 -0
  408. package/runtime/xt_symbol.c +2 -2
  409. package/runtime/xt_text_codec.c +69 -0
  410. package/runtime/xt_typed_array/construction.inc +78 -7
  411. package/runtime/xt_typed_array/elements.inc +159 -0
  412. package/runtime/xt_typed_array/methods.inc +21 -5
  413. package/runtime/xt_typed_array.c +11 -10
  414. package/runtime/xt_url.c +375 -0
  415. package/runtime/xt_values/arithmetic.inc +2 -2
  416. package/runtime/xt_values/constructors.inc +8 -0
  417. package/runtime/xt_values/conversions.inc +1 -1
  418. package/runtime/xt_values/strings.inc +19 -3
  419. package/runtime/xt_values/utf16.inc +340 -0
  420. package/runtime/xt_values.c +1 -0
  421. package/runtime/xt_weak.c +281 -0
  422. package/scripts/build-gui.ts +133 -60
  423. package/scripts/check-version.ts +3 -3
  424. package/src/binder/declarations.ts +14 -3
  425. package/src/cli/hints.ts +8 -1
  426. package/src/cli/main.ts +119 -18
  427. package/src/cli/watch.ts +101 -0
  428. package/src/codegen/generator/calls/access.ts +17 -4
  429. package/src/codegen/generator/calls/closures.ts +12 -1
  430. package/src/codegen/generator/calls/invocation.ts +4 -3
  431. package/src/codegen/generator/context.ts +23 -3
  432. package/src/codegen/generator/expressions/operators.ts +27 -13
  433. package/src/codegen/generator/expressions/primary.ts +10 -1
  434. package/src/codegen/generator/module.ts +10 -19
  435. package/src/codegen/generator/numeric.ts +85 -11
  436. package/src/codegen/generator/state.ts +27 -0
  437. package/src/codegen/generator/statements/control-flow.ts +2 -6
  438. package/src/codegen/generator/statements/loops.ts +50 -16
  439. package/src/codegen/generator/tables.ts +110 -3
  440. package/src/diagnostics/diagnostic.ts +23 -3
  441. package/src/driver/app-artifacts.ts +77 -0
  442. package/src/driver/build-key.ts +55 -0
  443. package/src/driver/bundler/graph.ts +63 -13
  444. package/src/driver/bundler/merge.ts +4 -1
  445. package/src/driver/compiler.ts +93 -324
  446. package/src/driver/config.ts +11 -0
  447. package/src/driver/frontend.ts +120 -0
  448. package/src/driver/index.ts +0 -1
  449. package/src/driver/options.ts +70 -0
  450. package/src/driver/runtime-objects.ts +133 -0
  451. package/src/driver/toolchain-provider.ts +4 -0
  452. package/src/driver/toolchain.ts +154 -10
  453. package/src/driver/version.ts +12 -0
  454. package/src/driver/win-icon.ts +36 -36
  455. package/src/parser/declarations/classes.ts +4 -0
  456. package/src/parser/declarations/functions.ts +12 -1
  457. package/src/parser/modules.ts +8 -4
  458. package/src/parser/parser.ts +28 -0
@@ -0,0 +1,19 @@
1
+ # 扩展机制(Extensions)
2
+
3
+ > 属于[已实现语法与功能](../implemented.md) · [English](../../implemented/extensions.md)
4
+
5
+ 实现位置:`src/extensions/registry.ts`、`src/extensions/node/`
6
+
7
+ - 扩展是普通对象:`runtimeSources()`(额外 C 源)、`linkerFlags()`(额外链接参数)、`builtins()`(全局标识符 → 运行时符号,统一 `(argc, argv)` ABI)与 `modules()`(导入说明符 → 命名导出 / 命名空间)。
8
+ - `ExtensionRegistry`:注册 / 注销 / 查询 / 汇总 builtins、modules、runtime 源、链接参数。
9
+ - 内置核心扩展 `core`:暴露 `print`(映射 `xt_println`),始终注册。
10
+ - Node 扩展 `node`:
11
+ - 模块化组织:`src/extensions/node/fs/` + `runtime/ext_node/fs/read_file.c`
12
+ - 暴露可导入模块(`fs`、`fs/promises`、`path`、`os`、`process` 等),同时支持裸名称与 `node:` 前缀;`import { readFileSync } from "fs"` 解析到 `xt_node_read_text_file`,`path`/`os`/`process` 的导出映射到命名空间分发器。
13
+ - 添加新模块只需新增目录 + C 实现,核心编译器无需改动。
14
+ - 原生 C++/Rust 扩展(`src/extensions/native.ts`、`--ext-native`):
15
+ - `nativeObjects()` 链接以 `(argc, argv)` ABI 暴露 `extern "C"` 符号的预编译对象/静态库;JSON manifest 把它们映射为 builtins/modules(`linkerFlags` / `linkerFlagsByPlatform` 用于 C++/Rust 运行时)。
16
+ - 编写辅助位于 `runtime/xt_ext.h`(C/C++)与 `runtime/xt_ext.rs`(Rust);可运行工程在 `examples/extensions/`。
17
+ - 驱动原样链接这些产物,增量缓存会对其内容取指纹,因此重建库会使缓存二进制失效。
18
+ - CI 在 Linux、macOS、Windows 上都会构建两种语言的示例;Windows 下系统 clang 链接 MSVC ABI(C++ `-lmsvcprt`,Rust `*-pc-windows-msvc` 加 Windows 系统库)。
19
+ - Node 模块覆盖情况见 [Node 扩展](./node.md)。
@@ -0,0 +1,12 @@
1
+ # fetch
2
+
3
+ > 属于[已实现语法与功能](../implemented.md) · [English](../../implemented/fetch.md)
4
+
5
+ 实现位置:`runtime/xt_fetch.c`。
6
+
7
+ - 全局 `fetch(input, init)` 是阻塞式 HTTP/1.1 客户端,返回的 promise 已经 settle(交换同步完成,不经过 reactor 调度)。
8
+ - 只接受 `http://` URL —— 由于未链接 TLS 后端,`https://` 会以 `TypeError` 拒绝。
9
+ - 选项:`method`、`headers`(普通对象或 `Headers`)、`body` 与 `redirect`(`follow` / `manual` / `error`);最多跟随 20 次重定向,并在 301/302/303 时将 POST 改为 GET。
10
+ - 解析出的 `Response` 形状对象暴露 `ok` / `status` / `statusText` / `url` / `headers` 以及 `text()` / `json()` / `arrayBuffer()` / `bytes()` / `clone()`。
11
+ - `Headers` 大小写不敏感,提供 `get` / `has` / `set` / `append` / `delete` / `keys` / `values` / `entries` / `forEach` / `getSetCookie`。
12
+ - 非法 URL 与网络失败会以 `TypeError` 拒绝。
@@ -0,0 +1,23 @@
1
+ # 词法分析(Lexer)
2
+
3
+ > 属于[已实现语法与功能](../implemented.md) · [English](../../implemented/lexer.md)
4
+
5
+ 实现位置:`src/lexer/scanner.ts`、`src/lexer/token.ts`
6
+
7
+ - 完整 Token 分类:标识符、关键字、私有标识符、数字、字符串、模板、正则(扫描)、所有标点与运算符。
8
+ - 完整关键字表:`abstract any as asserts async await bigint boolean break case catch class const constructor continue debugger declare default delete do else enum export extends false finally for from function get if implements import in infer instanceof interface is keyof let module namespace never new null number object package private protected public readonly return satisfies set static string super switch symbol this throw true try type typeof undefined unique unknown var void while with yield`
9
+ - 数字字面量:
10
+ - 十进制、`0x` 十六进制、`0o` 八进制、`0b` 二进制
11
+ - 下划线分隔 `1_000_000`
12
+ - 小数、指数 `1.5e3`
13
+ - BigInt 字面量(`10n`、`0xFFn`)求值为任意精度整数(算术、位运算、移位、比较、`toString(radix)`、`BigInt()` / `BigInt.asIntN` / `BigInt.asUintN`)
14
+ - BigInt 字面量的值在词法 / 语法阶段即精确解析为 `bigint`(不经过 `Number`),超过 2^53 的字面量在 token / AST 中也保持完整精度
15
+ - 字符串字面量:
16
+ - 单引号 / 双引号
17
+ - 转义:`\n \t \r \b \f \0 \\ \' \"`、`\xHH`、`\uHHHH`、`\u{...}`
18
+ - 模板字面量(词法层):无替换模板、模板头 `TemplateHead`、模板中 `TemplateMiddle`、模板尾 `TemplateTail`,支持 `${}` 与转义。
19
+ - 正则字面量扫描(`/pattern/flags`),并区分除法 `/`。
20
+ - 私有标识符 `#name`。
21
+ - 注释:单行 `//` 与块注释 `/* */`(含未闭合诊断)。
22
+ - 换行与空白跟踪(用于 ASI),BOM / CRLF 规范化(`SourceFile`)。
23
+ - 词法诊断:未终止字符串 / 模板 / 注释、非法字符、非法数字、非法转义。
@@ -0,0 +1,28 @@
1
+ # 模块系统
2
+
3
+ > 属于[已实现语法与功能](../implemented.md) · [English](../../implemented/modules.md)
4
+
5
+ 实现位置:`src/parser/parser.ts`(语法)、`src/driver/modules.ts`(打包)、
6
+ `src/driver/frontend.ts`(`parseEntry`)。
7
+
8
+ ## 语法
9
+
10
+ - `import default, { named } from "..."`、`import * as ns from "..."`(相对模块的命名空间导入会降级为合成对象字面量;扩展模块如 `path` 亦已支持)、`import "./side-effect"`、`import type`
11
+ - `export default`、`export { a as b }`、`export *`、`export =`
12
+ - import attributes(`with` / `assert`)
13
+
14
+ ## 运行时语义
15
+
16
+ - `import` / `export` 的**运行时语义**由 `src/driver/modules.ts` 在驱动层完成:递归解析相对依赖**以及裸名称的 `node_modules` 包**(遵循 `exports` / `module` / `main` 与包子路径),按模块前缀重命名顶层符号、改写引用,合并为单文件后重新绑定。
17
+ - 包可以是 ESM 或 CommonJS:`node_modules` 内的 CJS 文件会获得合成的 `module` / `exports`,`require` 调用被降级为依赖的导出对象,静态识别出的导出对 ESM 导入方可见;`node_modules` 之外的 `require()` 仍报错并提示改用 `import`。循环依赖报错。
18
+ - `.js` 系列说明符解析到对应 `.ts` 源码;省略后缀时优先 TypeScript 后缀而非同名的 JavaScript 文件;纯 `.js` / `.jsx` / `.mjs` / `.cjs` 源码也可直接打包。
19
+ - 导入绑定与命名空间成员是模块求值时的快照(无实时绑定)—— 见[未实现:模块系统](../unimplemented/modules.md)。
20
+ - 纯类型导入与再导出(`import type { T } from "..."`、`import { type T } from "..."`、`export type { T } from "..."`)会被擦除,**不构成模块依赖边**:目标模块不会被加载或打包,模块之间的纯类型循环也不属于循环依赖。若需要仅求值一个模块而不绑定名字,请使用副作用导入(`import "./mod"`)。
21
+
22
+ ## import.meta
23
+
24
+ - `import.meta.url` / `.dirname` / `.filename`,由正在运行的可执行文件路径解析。
25
+
26
+ ## 扩展模块
27
+
28
+ - 扩展模块(如 `fs`)可通过裸名称或 `node:` 前缀的 `import` 引入,并解析到运行时入口;见[扩展机制](./extensions.md)。
@@ -0,0 +1,17 @@
1
+ # `assert` 模块
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/assert.md)
4
+
5
+ 实现位置:`src/extensions/node/assert/index.ts`、`runtime/ext_node/assert/assert.c`
6
+
7
+ `assert.ok` / `fail` / `equal` / `notEqual` / `strictEqual` / `notStrictEqual` /
8
+ `deepEqual` / `notDeepEqual` / `deepStrictEqual` / `notDeepStrictEqual` /
9
+ `throws` / `doesNotThrow` / `rejects` / `doesNotReject` / `match` /
10
+ `doesNotMatch` / `ifError`。
11
+
12
+ 具名导入与命名空间形式都分发到 `xt_assert_static`:
13
+
14
+ ```ts
15
+ import assert from "node:assert";
16
+ assert.strictEqual(1 + 1, 2);
17
+ ```
@@ -0,0 +1,25 @@
1
+ # `buffer` 模块
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/buffer.md)
4
+
5
+ 实现位置:`src/extensions/node/buffer/index.ts`、`runtime/ext_node/buffer/buffer.c`
6
+
7
+ xbintsc 没有原生的二进制值类型,`Buffer` 以**普通对象**表示:每个字节是数字属性 `"0".."n-1"`,再加一个 `length` 属性,并共享 `xt_buffer_proto()` 原型提供实例方法。`xt_node_is_buffer` / `xt_node_buffer_bytes` 供其它模块跨模块访问字节。
8
+
9
+ | 静态方法 | 说明 |
10
+ | --- | --- |
11
+ | `Buffer.from(value[, encoding])` | 从字符串(hex / base64 / utf8)、数组或 Buffer 构造 |
12
+ | `Buffer.alloc(size[, fill])` | 分配并填充 |
13
+ | `Buffer.allocUnsafe(size)` | 分配 |
14
+ | `Buffer.isBuffer(value)` | 判定 |
15
+ | `Buffer.byteLength(value[, encoding])` | 字节长度 |
16
+ | `Buffer.concat(list[, totalLength])` | 拼接 |
17
+ | `Buffer.compare(a, b)` | 比较 |
18
+
19
+ 实例方法:`toString([encoding])`、`toJSON()`、`slice(start, end)`、`subarray(...)`、`equals(other)`、`compare(other)`、`copy(target[, targetStart, sourceStart, sourceEnd])`、`write(string[, offset[, length[, encoding]]])`、`fill(value)`、`reverse()`、`indexOf(value)`、`lastIndexOf(value)`、`includes(value)`、`keys()`、`values()`,以及 `readUInt8/UInt16LE/UInt16BE/UInt32LE/UInt32BE`、`writeUInt8/UInt16LE/UInt16BE/UInt32LE/UInt32BE`。
20
+
21
+ ```ts
22
+ const buf = Buffer.from("hello");
23
+ console.log(buf.toString(), buf.length); // hello 5
24
+ console.log(Buffer.alloc(4, 65).toString()); // AAAA
25
+ ```
@@ -0,0 +1,27 @@
1
+ # `child_process` 模块
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/child-process.md)
4
+
5
+ 位置:`src/extensions/node/child_process/index.ts`、`runtime/ext_node/child_process/child_process.c`
6
+
7
+ `spawnSync(command, args[, options])` 运行一个程序直到结束,返回
8
+ `{ status, stdout, stderr }`。`options.cwd` 设置子进程工作目录;
9
+ `options.stdio: "inherit"` 让子进程共用父进程的 stdout/stderr(`xbintsc run`
10
+ 用它把被编译程序的输出实时透传),否则 stdout/stderr 会作为 UTF-8 字符串捕获。
11
+
12
+ | 选项 | 说明 |
13
+ | --- | --- |
14
+ | `cwd` | 子进程的工作目录 |
15
+ | `stdio: "inherit"` | 共用父进程的 stdout/stderr,而不是捕获 |
16
+ | `encoding` | 接受但忽略(输出始终按 UTF-8 解码) |
17
+
18
+ Windows 上子进程通过 `CreateProcess` 启动,stdout/stderr 由读线程经匿名管道持续排空。
19
+ 不使用临时文件,因此受限的 `%TEMP%` 不会让 `spawnSync` 失败,输出超过管道缓冲区时
20
+ 也不会死锁。
21
+
22
+ ```ts
23
+ import { spawnSync } from "child_process";
24
+
25
+ const result = spawnSync("clang", ["--version"], { encoding: "utf8" });
26
+ console.log(result.status, result.stdout.split("\n")[0]);
27
+ ```
@@ -0,0 +1,9 @@
1
+ # `crypto` 模块
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/crypto.md)
4
+
5
+ 实现位置:`src/extensions/node/crypto/index.ts`、`runtime/ext_node/crypto/crypto.c`
6
+
7
+ - `createHash(algorithm)` 返回带 `update(...)` 与 `digest([encoding])` 的哈希对象。
8
+ - 支持流式形式(`setEncoding` / `write` / `end` / `read`)。
9
+ - 提供 SHA-1 与 SHA-256。
@@ -0,0 +1,15 @@
1
+ # `dgram` 模块
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/dgram.md)
4
+
5
+ 实现位置:`src/extensions/node/dgram/index.ts`、`runtime/ext_node/dgram/dgram.c`
6
+
7
+ UDP 套接字。`dgram.createSocket(type | options[, cb])` 返回 EventEmitter。
8
+
9
+ | 方法 | 说明 |
10
+ | --- | --- |
11
+ | `bind([port][, address][, cb])` | 绑定(未绑定时 `send` 会自动绑定) |
12
+ | `send(msg[, offset, length,] port[, address][, cb])` | 发送数据报 |
13
+ | `close([cb])` / `address()` | 关闭 / 查询地址 |
14
+ | `setBroadcast(b)` / `setTTL(n)` / `setMulticastTTL(n)` | 套接字选项 |
15
+ | `on('message', (msg, rinfo) => ...)` | 收到数据报,`rinfo` 含 `address` / `port` / `family` / `size` |
@@ -0,0 +1,36 @@
1
+ # `events` 模块
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/events.md)
4
+
5
+ 位置:`src/extensions/node/events/index.ts`、`runtime/ext_node/events/events.c`
6
+
7
+ 提供独立的 `EventEmitter`,既可以作为**全局构造函数**使用
8
+ (`new EventEmitter()`),也可以作为命名导出(`import { EventEmitter } from
9
+ "events"`)。实例与 `stream` / `net` / `http` 共用运行时事件发射器(监听器存放
10
+ 在内部的 `__xt_events` 属性上),并在此基础上提供更完整的 `events` 接口:
11
+
12
+ | 方法 | 说明 |
13
+ | --- | --- |
14
+ | `on(name, fn)` / `addListener(name, fn)` | 追加监听器 |
15
+ | `once(name, fn)` | 最多触发一次,然后自行移除 |
16
+ | `prependListener(name, fn)` / `prependOnceListener(name, fn)` | 插入到最前 |
17
+ | `off(name, fn)` / `removeListener(name, fn)` | 移除监听器 |
18
+ | `removeAllListeners([name])` | 清空某个(或全部)事件 |
19
+ | `emit(name[, ...args])` | 触发监听器 |
20
+ | `listeners(name)` / `rawListeners(name)` | 监听器数组 |
21
+ | `listenerCount(name)` | 监听器数量 |
22
+ | `eventNames()` | 当前有监听器的事件名 |
23
+ | `setMaxListeners(n)` / `getMaxListeners()` | 记录(默认 10) |
24
+
25
+ 通过命名空间(`import ee from "events"`)可访问的静态方法:`listenerCount`、
26
+ `getEventListeners`、`getMaxListeners`、`setMaxListeners`、`once`、
27
+ `addAbortListener`。
28
+
29
+ ```ts
30
+ import { EventEmitter } from "events";
31
+
32
+ const em = new EventEmitter();
33
+ em.once("ready", () => console.log("ready"));
34
+ em.emit("ready"); // ready
35
+ em.emit("ready"); // 无输出:监听器已执行过
36
+ ```
@@ -0,0 +1,27 @@
1
+ # `fs/promises` 模块
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/fs-promises.md)
4
+
5
+ 实现位置:`src/extensions/node/fs-promises/index.ts`、`runtime/ext_node/fs/promises.c`
6
+
7
+ 无异步 I/O 调度器,故每个函数把对应的同步 `fs` 实现包进**已 settle 的 Promise**。失败时会以同步形式抛出的同构 Node `Error`(含 `code` / `errno` / `syscall` / `path`)**reject**。`fs.promises` 也可从 `fs` 模块访问(`import { promises as fsp } from "fs"`),两个命名空间都暴露 `constants` 对象。
8
+
9
+ Promise 导出:`readFile`、`writeFile`、`appendFile`、`mkdir`、`readdir`、`rm`、`unlink`、`rmdir`、`rename`、`copyFile`、`cp`、`realpath`、`stat`、`lstat`、`statfs`、`access`、`open`、`chmod`、`lchmod`、`chown`、`lchown`、`truncate`、`utimes`、`lutimes`、`link`、`symlink`、`readlink`、`mkdtemp`、`opendir`、`glob`、`watch`。
10
+
11
+ `open(...)` 解析为 **`FileHandle`**,带有:`read`、`write`、`readFile`、`writeFile`、`appendFile`、`close`、`stat`、`truncate`、`chmod`、`chown`、`utimes`、`sync`、`datasync`。
12
+
13
+ ```ts
14
+ import { readFile, writeFile, open } from "fs/promises";
15
+
16
+ async function main(): Promise<void> {
17
+ await writeFile("/tmp/a.txt", "hi");
18
+ console.log(await readFile("/tmp/a.txt"));
19
+ const handle = await open("/tmp/a.txt", "r");
20
+ console.log(await handle.readFile("utf8"));
21
+ await handle.close();
22
+ }
23
+ main();
24
+ ```
25
+
26
+
27
+ 已知偏差见[未实现:`fs/promises`](../../unimplemented/node/fs-promises.md)。
@@ -0,0 +1,105 @@
1
+ # `fs` 模块
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/fs.md)
4
+
5
+ 实现位置:`src/extensions/node/fs/*.ts`、`runtime/ext_node/fs/*.c`
6
+
7
+ ## 可用函数(从 `fs` 导入)
8
+
9
+ | 导入函数 | 运行时符号 | 说明 |
10
+ | --- | --- | --- |
11
+ | `readFileSync(path[, options])` | `xt_node_read_text_file` | 同步读取文件,返回字符串;支持编码选项 |
12
+ | `readTextFile(path)` | `xt_node_read_text_file` | `readFileSync` 的别名(同一符号) |
13
+ | `writeFileSync(path, data[, options])` | `xt_node_write_file` | 覆盖写入;接受字符串或 `Buffer` |
14
+ | `appendFileSync(path, data[, options])` | `xt_node_append_file` | 追加写入;接受字符串或 `Buffer` |
15
+ | `existsSync(path)` | `xt_node_exists` | 是否存在,返回布尔值 |
16
+ | `readdirSync(path[, options])` | `xt_node_read_dir` | 目录项名称;`{ withFileTypes: true }` 返回 `Dirent`,`{ recursive: true }` 递归 |
17
+ | `mkdirSync(path[, options])` | `xt_node_mkdir` | 创建目录,`{ recursive: true }` 递归创建,`{ mode }` 生效 |
18
+ | `rmSync(path[, options])` | `xt_node_rm` | 删除文件/目录,`{ recursive: true }` 递归删除 |
19
+ | `unlinkSync(path)` | `xt_node_unlink` | 删除文件 |
20
+ | `rmdirSync(path)` | `xt_node_rmdir` | 删除空目录 |
21
+ | `renameSync(oldPath, newPath)` | `xt_node_rename` | 重命名 / 移动 |
22
+ | `copyFileSync(src, dest[, flags])` | `xt_node_copy_file` | 复制文件;支持 `COPYFILE_EXCL` |
23
+ | `cpSync(src, dest[, options])` | `xt_node_cp` | 递归复制;`recursive` / `force` / `errorOnExist` / `dereference` / `preserveTimestamps` |
24
+ | `realpathSync(path)` | `xt_node_realpath` | 解析为绝对路径 |
25
+ | `statSync(path)` | `xt_node_stat` | 文件元信息对象(跟随符号链接) |
26
+ | `lstatSync(path)` | `xt_node_lstat` | 文件元信息对象(不跟随符号链接) |
27
+ | `statfsSync(path)` | `xt_node_statfs` | 文件系统统计(`bsize` / `blocks` / `bfree` …) |
28
+ | `accessSync(path[, mode])` | `xt_node_access` | 检查可访问性 |
29
+ | `chmodSync(path, mode)` | `xt_node_chmod` | 修改权限 |
30
+ | `lchmodSync(path, mode)` | `xt_node_lchmod` | 修改符号链接权限 |
31
+ | `chownSync(path, uid, gid)` | `xt_node_chown` | 修改属主 |
32
+ | `lchownSync(path, uid, gid)` | `xt_node_lchown` | 修改符号链接属主 |
33
+ | `truncateSync(path[, len])` | `xt_node_truncate` | 截断文件 |
34
+ | `utimesSync(path, atime, mtime)` | `xt_node_utimes` | 设置访问/修改时间(秒数或 `Date`) |
35
+ | `lutimesSync(path, atime, mtime)` | `xt_node_lutimes` | 设置符号链接时间 |
36
+ | `mkdtempSync(prefix)` | `xt_node_mkdtemp` | 创建唯一临时目录 |
37
+ | `linkSync(existing, newPath)` | `xt_node_link` | 硬链接 |
38
+ | `symlinkSync(target, path[, type])` | `xt_node_symlink` | 符号链接 |
39
+ | `readlinkSync(path)` | `xt_node_readlink` | 读取符号链接目标 |
40
+ | `opendirSync(path[, options])` | `xt_node_opendir` | 返回 `Dir`(`readSync` / `closeSync` / `read` / `close`) |
41
+ | `globSync(pattern[, options])` | `xt_node_glob` | glob 匹配(`*` / `?` / `[...]` / `**`),`{ cwd, withFileTypes }` |
42
+ | `openSync(path[, flags[, mode]])` | `xt_node_open` | 打开文件描述符 |
43
+ | `closeSync(fd)` | `xt_node_close` | 关闭描述符 |
44
+ | `readSync(fd, buffer, offset, length, position)` | `xt_node_read` | 读入 `Buffer` |
45
+ | `writeSync(fd, data[, offset[, length[, position]]])` | `xt_node_write` | 写入字符串 / `Buffer` |
46
+ | `readvSync(fd, buffers[, position])` | `xt_node_readv` | 分散读 |
47
+ | `writevSync(fd, buffers[, position])` | `xt_node_writev` | 聚集写 |
48
+ | `fstatSync(fd)` | `xt_node_fstat` | 描述符的 `stat` |
49
+ | `fsyncSync(fd)` / `fdatasyncSync(fd)` | `xt_node_fsync` / `xt_node_fdatasync` | 刷新描述符 |
50
+ | `ftruncateSync(fd[, len])` | `xt_node_ftruncate` | 截断描述符 |
51
+ | `fchmodSync(fd, mode)` | `xt_node_fchmod` | 描述符的 `chmod` |
52
+ | `fchownSync(fd, uid, gid)` | `xt_node_fchown` | 描述符的 `chown` |
53
+ | `futimesSync(fd, atime, mtime)` | `xt_node_futimes` | 描述符的 `utimes` |
54
+ | `watch(filename[, options][, listener])` | `xt_node_watch` | 返回发射器形态的 watcher(不会触发,见[未实现:`fs`](../../unimplemented/node/fs.md)) |
55
+ | `watchFile(filename[, options], listener)` | `xt_node_watch_file` | 轮询形态的 `StatWatcher`(不会触发) |
56
+ | `unwatchFile(filename[, listener])` | `xt_node_unwatch_file` | 停止监听 |
57
+ | `constants` | `xt_fs_constants` | `F_OK` / `R_OK` / `W_OK` / `X_OK`、`COPYFILE_*`、`O_*`、`S_IF*`(宿主值) |
58
+ | `promises` | `xt_fs_promises` | `fs/promises` 门面(见 [`fs/promises`](./fs-promises.md)) |
59
+
60
+ ## 编码支持
61
+
62
+ `readFileSync` / `writeFileSync` / `appendFileSync` 的 `options` 可以是编码字符串,也可以是 `{ encoding: "..." }`:
63
+
64
+ | 编码 | 读取 | 写入 |
65
+ | --- | --- | --- |
66
+ | 默认 / `utf8` / `utf-8` / `ascii` / `latin1` / `binary` | 原始 UTF-8 文本 | 按文本字节写入 |
67
+ | `hex` | 小写十六进制字符串 | 解析十六进制后写入 |
68
+ | `base64` | Base64 字符串 | 解析 Base64 后写入 |
69
+ | `base64url` | Base64url 字符串 | 解析 Base64url 后写入 |
70
+ | `utf16le` / `ucs2` | 按文本直接读取原始字节(不做 UTF-16 解码) | 按 UTF-8 文本写入 |
71
+
72
+ > `readFileSync` 默认仍返回**字符串**而不是 `Buffer`(即使 `Buffer` 类已存在),这样 `console.log(readFileSync(p))` 仍打印文本。
73
+
74
+ ## `statSync` 返回结构
75
+
76
+ 返回普通对象,数值属性:`size`、`mode`、`uid`、`gid`、`dev`、`ino`、`nlink`、`rdev`、`blksize`、`blocks`、`atimeMs`、`mtimeMs`、`ctimeMs`、`birthtimeMs`。
77
+ 方法(原生闭包,可调用):`isFile()`、`isDirectory()`、`isSymbolicLink()`、`isFIFO()`、`isSocket()`、`isBlockDevice()`、`isCharacterDevice()`。
78
+
79
+ ## 调用方式
80
+
81
+ `fs` 的导出通过 `import` 引入(也可用 `node:fs` 别名),不再以裸全局标识符暴露:
82
+
83
+ ```ts
84
+ import { readFileSync, writeFileSync, existsSync } from "fs";
85
+
86
+ const text = readFileSync("examples/data.txt");
87
+ writeFileSync("/tmp/out.txt", text);
88
+ console.log(existsSync("/tmp/out.txt"));
89
+ ```
90
+
91
+ ## 错误处理
92
+
93
+ 失败时函数会**抛出** Node 形态的 `Error` 对象,带有 `name`(`Error`)、`message`、`code`(如 `ENOENT`)、`errno`(数值 `errno`)、`syscall` 与 `path`。`existsSync` 仍返回布尔值,不会抛出。
94
+
95
+ ```ts
96
+ import { readFileSync } from "fs";
97
+ try {
98
+ readFileSync("/does/not/exist");
99
+ } catch (error) {
100
+ console.log((error as any).code); // ENOENT
101
+ }
102
+ ```
103
+
104
+
105
+ 已知偏差见[未实现:`fs`](../../unimplemented/node/fs.md)。
@@ -0,0 +1,17 @@
1
+ # `http` 模块
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/http.md)
4
+
5
+ 实现位置:`src/extensions/node/http/index.ts`、`runtime/ext_node/http/http.c`
6
+
7
+ 服务端包裹一个 `net` 服务端:每个连接累积字节直到完整请求(请求行 + 头 + `Content-Length` body)可用,再以 `req`/`res` 调用 `request` 监听器。客户端包裹一个 `net` 套接字,写出 HTTP/1.1 请求并在连接关闭后解析响应。
8
+
9
+ | API | 说明 |
10
+ | --- | --- |
11
+ | `http.createServer([requestListener])` | 创建 HTTP 服务端 |
12
+ | `http.request(options[, cb])` | 创建 `ClientRequest`(`write` / `end` / `setHeader`) |
13
+ | `http.get(url[, cb])` | 发起 GET |
14
+
15
+ `IncomingMessage`(`req` / 响应):`method`、`url`、`httpVersion`、`headers`、`statusCode`、`data` / `end` 事件、`setEncoding`。
16
+
17
+ `ServerResponse`(`res`):`writeHead(status[, message][, headers])`、`setHeader` / `getHeader` / `removeHeader` / `getHeaders`、`write(chunk)`、`end([chunk])`,事件 `finish` / `close`。响应固定带 `Connection: close`(不做 keep-alive)。
@@ -0,0 +1,17 @@
1
+ # `net` 模块
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/net.md)
4
+
5
+ 实现位置:`src/extensions/node/net/index.ts`、`runtime/ext_node/net/net.c`
6
+
7
+ TCP 服务端与客户端,基于核心事件循环。
8
+
9
+ | API | 说明 |
10
+ | --- | --- |
11
+ | `net.createServer([connectionListener])` | 创建 TCP 服务端(`Server` 构造函数等价) |
12
+ | `net.connect(...)` / `net.createConnection(...)` | 连接(阻塞式 connect,之后注册事件循环) |
13
+ | `net.isIP(s)` / `net.isIPv4(s)` / `net.isIPv6(s)` | 地址判定 |
14
+
15
+ `Server`:`listen(port[, host][, cb])`、`close([cb])`、`address()`、`getConnections(cb)`,事件 `listening` / `connection` / `close`。
16
+
17
+ `Socket`:`write(data[, cb])`、`end([data])`、`destroy()`、`address()`、`setEncoding(enc)`、`pause()` / `resume()`,事件 `data` / `end` / `close` / `connect` / `error`。
@@ -0,0 +1,21 @@
1
+ # `os` 模块
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/os.md)
4
+
5
+ 实现位置:`src/extensions/node/os/index.ts`、`runtime/ext_node/os/os.c`
6
+
7
+ 采用 `os.<name>(...)` 命名空间调用,降为 `xt_os_static(<name>, argc, argv)`。
8
+ 以命名空间方式导入(`import os from "os"`),或单独导入函数(`import { platform } from "os"`)。
9
+
10
+ | 方法 | 说明 |
11
+ | --- | --- |
12
+ | `os.platform()` | `darwin` / `linux` / `win32` / ... |
13
+ | `os.arch()` | `x64` / `arm64` / `ia32` / `arm` |
14
+ | `os.type()` | `Darwin` / `Linux` / `Windows_NT` / ... |
15
+ | `os.release()` | 内核版本 |
16
+ | `os.endianness()` | `LE` / `BE` |
17
+ | `os.homedir()` | 用户主目录 |
18
+ | `os.tmpdir()` | 临时目录 |
19
+ | `os.hostname()` | 主机名 |
20
+ | `os.totalmem()` / `os.freemem()` | 总内存 / 可用内存(字节) |
21
+ | `os.cpus()` | CPU 条目数组(`model` / `speed` 占位) |
@@ -0,0 +1,26 @@
1
+ # `path` 模块
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/path.md)
4
+
5
+ 实现位置:`src/extensions/node/path/index.ts`、`runtime/ext_node/path/path.c`
6
+
7
+ 采用 `path.<name>(...)` 命名空间调用,编译器将其降为 `xt_path_static(<name>, argc, argv)`。结果在所有平台上都以 POSIX `/` 分隔符输出(Windows 也接受 `/`),但输入可以使用 Windows 原生分隔符:在 Windows 上 `/` 与 `\` 都被识别,并保留盘符前缀(`C:`),因此自举后的编译器能正确解析带盘符的路径。以命名空间方式导入(`import path from "path"` / `import * as path from "path"`),或单独导入方法(`import { join } from "path"`)。
8
+
9
+ | 方法 | 说明 |
10
+ | --- | --- |
11
+ | `path.join(...parts)` | 拼接并规范化 |
12
+ | `path.resolve(...parts)` | 解析为绝对路径 |
13
+ | `path.normalize(path)` | 规范化 |
14
+ | `path.dirname(path)` | 目录名 |
15
+ | `path.basename(path[, ext])` | 文件名,可去掉扩展名 |
16
+ | `path.extname(path)` | 扩展名 |
17
+ | `path.isAbsolute(path)` | 是否绝对路径 |
18
+ | `path.relative(from, to)` | 相对路径 |
19
+
20
+ ```ts
21
+ import path from "path";
22
+ import { basename } from "path";
23
+
24
+ console.log(path.join("a", "b", "..", "c")); // a/c
25
+ console.log(basename("/x/y/z.txt")); // z.txt
26
+ ```
@@ -0,0 +1,23 @@
1
+ # `process` 对象
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/process.md)
4
+
5
+ 实现位置:`src/extensions/node/process/index.ts`、`runtime/ext_node/process/process.c`
6
+
7
+ 方法调用降为 `xt_process_call(<name>, argc, argv)`,属性访问降为 `xt_process_get(<name>)`。
8
+ 通过 `import process from "process"` 导入后使用。
9
+
10
+ | 方法 / 属性 | 说明 |
11
+ | --- | --- |
12
+ | `process.cwd()` | 当前工作目录 |
13
+ | `process.exit([code])` | 退出进程 |
14
+ | `process.uptime()` | 进程运行时间(秒) |
15
+ | `process.hrtime()` | `[秒, 纳秒]` 数组 |
16
+ | `process.getuid()` | 用户 ID(Windows 返回 0) |
17
+ | `process.platform` / `process.arch` | 平台 / 架构 |
18
+ | `process.pid` / `process.ppid` | 进程 ID / 父进程 ID |
19
+ | `process.argv` | 参数数组(`argv[0]` 为可执行文件) |
20
+ | `process.env` | 环境变量对象 |
21
+ | `process.version` / `process.title` | 占位字符串 |
22
+
23
+ > `argv` 由生成的 `main` 通过 `xt_set_program_args` 捕获后提供给运行时。
@@ -0,0 +1,20 @@
1
+ # `querystring` 模块
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/querystring.md)
4
+
5
+ 位置:`src/extensions/node/querystring/index.ts`、`runtime/ext_node/querystring/querystring.c`
6
+
7
+ | 函数 | 说明 |
8
+ | --- | --- |
9
+ | `parse(str[, sep[, eq]])` / `decode` | 解析为对象;重复的键会变成数组 |
10
+ | `stringify(obj[, sep[, eq]])` / `encode` | 序列化;空格变成 `+`,数组会重复键 |
11
+ | `escape(str)` / `unescape(str)` | 百分号编码 / 解码(`+` 解码为空格) |
12
+
13
+ 默认值:`sep = "&"`,`eq = "="`。
14
+
15
+ ```ts
16
+ import { parse, stringify } from "querystring";
17
+
18
+ const q = parse("a=1&b=2&b=3"); // { a: "1", b: ["2", "3"] }
19
+ console.log(stringify({ x: "a b" })); // x=a+b
20
+ ```
@@ -0,0 +1,8 @@
1
+ # `stream/promises` 模块
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/stream-promises.md)
4
+
5
+ 实现位置:`src/extensions/node/stream-promises/index.ts`、`runtime/ext_node/stream/pipeline.c`
6
+
7
+ - `pipeline(...)` 同步排空给定流,并返回一个已 resolve 的 Promise,因此 `await pipeline(...)` 可用。
8
+ - 支持的转换阶段为 `zlib.createGzip()`,见 [`zlib`](./zlib.md)。
@@ -0,0 +1,15 @@
1
+ # `stream` 模块
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/stream.md)
4
+
5
+ 实现位置:`src/extensions/node/stream/index.ts`、`runtime/ext_node/stream/stream.c`
6
+
7
+ `Readable` / `Writable` / `Duplex` / `Transform` / `PassThrough` 作为**全局构造函数**使用(`new Readable()` 等);`stream.Readable.from(...)` 等静态方法通过 `stream` 命名空间解析。流是 EventEmitter,采用**同步事件模型**:`on('data')` 时冲刷 `push` 缓冲,`write` 即时投递。
8
+
9
+ | 方法 | 说明 |
10
+ | --- | --- |
11
+ | `push(chunk)` / `read([n])` | Readable 端 |
12
+ | `write(chunk)` / `end([chunk])` | Writable 端 |
13
+ | `pipe(destination)` | 数据转发 |
14
+ | `on('data' / 'end' / 'finish')` | 事件 |
15
+ | `pause()` / `resume()` / `setEncoding(enc)` / `destroy()` | 流控制 |
@@ -0,0 +1,10 @@
1
+ # `test` 模块
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/test.md)
4
+
5
+ 实现位置:`src/extensions/node/test/index.ts`、`runtime/ext_node/test/test.c`
6
+
7
+ - `test(name, fn)` 立即执行 `fn`,捕获断言失败并输出 TAP。
8
+ - `it` / `describe` / `skip` / `todo` / `only` 以及 `before` / `after` / `beforeEach` / `afterEach` 钩子。
9
+ - 失败时进程以非零码退出。
10
+ - 默认导出可调用,因此 `import test from "node:test"` 可用。
@@ -0,0 +1,8 @@
1
+ # `url` 模块
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/url.md)
4
+
5
+ 实现位置:`src/extensions/node/url/index.ts`、`runtime/ext_node/url/url.c`
6
+
7
+ - `pathToFileURL(path)` 与 `fileURLToPath(url)`。
8
+ - 这两个助手用于在 `import.meta.url`、`process.argv[1]` 与文件系统路径之间转换。
@@ -0,0 +1,25 @@
1
+ # `util` 模块
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/util.md)
4
+
5
+ 位置:`src/extensions/node/util/index.ts`、`runtime/ext_node/util/util.c`
6
+
7
+ 同时支持命名导入(`import { format } from "util"`)与命名空间调用
8
+ (`import util from "util"` / `import * as util from "util"`)。
9
+
10
+ | 函数 | 说明 |
11
+ | --- | --- |
12
+ | `format(fmt, ...args)` | 支持 `%s` `%d` `%i` `%f` `%j` `%o` `%O` `%c` `%%` 占位符 |
13
+ | `formatWithOptions(opts, fmt, ...args)` | 接受选项但忽略 |
14
+ | `inspect(value)` | 递归打印(限制深度,字符串带引号) |
15
+ | `isDeepStrictEqual(a, b)` | 结构比较(`NaN` 等于 `NaN`) |
16
+ | `inherits(ctor, superCtor)` | 连接原型链 |
17
+ | `deprecate(fn, msg)` | 原样返回 `fn`(没有告警通道) |
18
+ | `promisify(fn)` | 把「回调在末尾」的函数包装为 `Promise` |
19
+ | `isString` `isNumber` `isBoolean` `isUndefined` `isNull` `isFunction` `isArray` `isObject` `isBuffer` `isDate` `isRegExp` `isPromise` `isError` | 类型判断 |
20
+
21
+ ```ts
22
+ import { format, promisify } from "util";
23
+
24
+ console.log(format("%s=%d", "n", 3)); // n=3
25
+ ```
@@ -0,0 +1,9 @@
1
+ # `worker_threads` 模块
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/worker-threads.md)
4
+
5
+ 实现位置:`src/extensions/node/worker_threads/index.ts`、`runtime/ext_node/worker_threads/worker_threads.c`
6
+
7
+ - `Worker`、`isMainThread`、`workerData`、`parentPort`。
8
+ - xbintsc 通过把当前可执行文件作为子进程重新运行来模拟 worker;`isMainThread` /
9
+ `workerData` / `parentPort` 是值绑定(无参运行时 getter),`Worker` 是构造器。
@@ -0,0 +1,8 @@
1
+ # `zlib` 模块
2
+
3
+ > 属于[Node 扩展:已实现](../node.md) · [English](../../../implemented/node/zlib.md)
4
+
5
+ 实现位置:`src/extensions/node/zlib/index.ts`、`runtime/ext_node/zlib/zlib.c`
6
+
7
+ - 仅实现 `createGzip()`。它返回 gzip 转换流,供
8
+ [`stream/promises`](./stream-promises.md) 的 `pipeline` 使用。