yuzuha 0.2.1 → 0.3.1

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 (640) hide show
  1. package/CHANGELOG.md +40 -1
  2. package/README.md +22 -14
  3. package/VERSIONING.md +46 -6
  4. package/benchmarks/parser.mjs +1 -1
  5. package/benchmarks/run.mjs +3 -2
  6. package/dist/canvas/card.d.ts +10 -0
  7. package/dist/canvas/card.d.ts.map +1 -0
  8. package/dist/canvas/card.js +11 -0
  9. package/dist/canvas/card.js.map +1 -0
  10. package/dist/canvas.d.ts +30 -9
  11. package/dist/canvas.d.ts.map +1 -1
  12. package/dist/canvas.js +64 -9
  13. package/dist/canvas.js.map +1 -1
  14. package/dist/cli/config.d.ts.map +1 -1
  15. package/dist/cli/config.js +2 -1
  16. package/dist/cli/config.js.map +1 -1
  17. package/dist/cli/lint.d.ts.map +1 -1
  18. package/dist/cli/lint.js +1 -2
  19. package/dist/cli/lint.js.map +1 -1
  20. package/dist/cli/main.d.ts.map +1 -1
  21. package/dist/cli/main.js +8 -9
  22. package/dist/cli/main.js.map +1 -1
  23. package/dist/cli/scaffold.js +1 -1
  24. package/dist/cli/scaffold.js.map +1 -1
  25. package/dist/cli/scenarios.d.ts.map +1 -1
  26. package/dist/cli/scenarios.js +2 -1
  27. package/dist/cli/scenarios.js.map +1 -1
  28. package/dist/commands/arguments.d.ts.map +1 -1
  29. package/dist/commands/arguments.js +40 -13
  30. package/dist/commands/arguments.js.map +1 -1
  31. package/dist/commands/builders.d.ts +1 -0
  32. package/dist/commands/builders.d.ts.map +1 -1
  33. package/dist/commands/builders.js +5 -0
  34. package/dist/commands/builders.js.map +1 -1
  35. package/dist/commands/context-like.d.ts +4 -0
  36. package/dist/commands/context-like.d.ts.map +1 -0
  37. package/dist/commands/context-like.js +2 -0
  38. package/dist/commands/context-like.js.map +1 -0
  39. package/dist/commands/context.d.ts +16 -2
  40. package/dist/commands/context.d.ts.map +1 -1
  41. package/dist/commands/context.js +54 -12
  42. package/dist/commands/context.js.map +1 -1
  43. package/dist/commands/definition.d.ts +1 -0
  44. package/dist/commands/definition.d.ts.map +1 -1
  45. package/dist/commands/definition.js.map +1 -1
  46. package/dist/commands/typed-arguments.js +2 -2
  47. package/dist/commands/typed-arguments.js.map +1 -1
  48. package/dist/domain/cdn.d.ts +23 -0
  49. package/dist/domain/cdn.d.ts.map +1 -0
  50. package/dist/domain/cdn.js +38 -0
  51. package/dist/domain/cdn.js.map +1 -0
  52. package/dist/domain/resolvers.d.ts +60 -0
  53. package/dist/domain/resolvers.d.ts.map +1 -0
  54. package/dist/domain/resolvers.js +31 -0
  55. package/dist/domain/resolvers.js.map +1 -0
  56. package/dist/domain/resource-batches.d.ts +6 -0
  57. package/dist/domain/resource-batches.d.ts.map +1 -1
  58. package/dist/domain/resource-batches.js +31 -0
  59. package/dist/domain/resource-batches.js.map +1 -1
  60. package/dist/domain/values.d.ts +2 -0
  61. package/dist/domain/values.d.ts.map +1 -1
  62. package/dist/domain/values.js +26 -1
  63. package/dist/domain/values.js.map +1 -1
  64. package/dist/framework/bot.d.ts +14 -5
  65. package/dist/framework/bot.d.ts.map +1 -1
  66. package/dist/framework/bot.js +95 -36
  67. package/dist/framework/bot.js.map +1 -1
  68. package/dist/framework/command-registry.d.ts +8 -7
  69. package/dist/framework/command-registry.d.ts.map +1 -1
  70. package/dist/framework/command-registry.js +14 -11
  71. package/dist/framework/command-registry.js.map +1 -1
  72. package/dist/framework/logging.d.ts +4 -1
  73. package/dist/framework/logging.d.ts.map +1 -1
  74. package/dist/framework/logging.js.map +1 -1
  75. package/dist/framework/options.d.ts +15 -3
  76. package/dist/framework/options.d.ts.map +1 -1
  77. package/dist/framework/options.js.map +1 -1
  78. package/dist/{scripting → functions}/builtins/arguments.d.ts.map +1 -1
  79. package/dist/{scripting → functions}/builtins/arguments.js.map +1 -1
  80. package/dist/functions/builtins/canvas.d.ts +2 -0
  81. package/dist/functions/builtins/canvas.d.ts.map +1 -0
  82. package/dist/{scripting → functions}/builtins/canvas.js +1 -1
  83. package/dist/{scripting → functions}/builtins/canvas.js.map +1 -1
  84. package/dist/functions/builtins/context.d.ts +2 -0
  85. package/dist/functions/builtins/context.d.ts.map +1 -0
  86. package/dist/{scripting → functions}/builtins/context.js.map +1 -1
  87. package/dist/{scripting → functions}/builtins/definition.d.ts +1 -1
  88. package/dist/functions/builtins/definition.d.ts.map +1 -0
  89. package/dist/functions/builtins/definition.js.map +1 -0
  90. package/dist/functions/builtins/embeds.d.ts +3 -0
  91. package/dist/{scripting → functions}/builtins/embeds.d.ts.map +1 -1
  92. package/dist/{scripting → functions}/builtins/embeds.js +1 -1
  93. package/dist/functions/builtins/embeds.js.map +1 -0
  94. package/dist/functions/builtins/events.d.ts +2 -0
  95. package/dist/functions/builtins/events.d.ts.map +1 -0
  96. package/dist/{scripting → functions}/builtins/events.js.map +1 -1
  97. package/dist/functions/builtins/flow.d.ts +2 -0
  98. package/dist/functions/builtins/flow.d.ts.map +1 -0
  99. package/dist/{scripting → functions}/builtins/flow.js +2 -2
  100. package/dist/functions/builtins/flow.js.map +1 -0
  101. package/dist/functions/builtins/guards.d.ts +2 -0
  102. package/dist/functions/builtins/guards.d.ts.map +1 -0
  103. package/dist/{scripting → functions}/builtins/guards.js +1 -1
  104. package/dist/functions/builtins/guards.js.map +1 -0
  105. package/dist/functions/builtins/http.d.ts +2 -0
  106. package/dist/functions/builtins/http.d.ts.map +1 -0
  107. package/dist/{scripting → functions}/builtins/http.js +2 -2
  108. package/dist/functions/builtins/http.js.map +1 -0
  109. package/dist/functions/builtins/index.d.ts +5 -0
  110. package/dist/functions/builtins/index.d.ts.map +1 -0
  111. package/dist/functions/builtins/index.js.map +1 -0
  112. package/dist/functions/builtins/language/array-callbacks.d.ts +2 -0
  113. package/dist/functions/builtins/language/array-callbacks.d.ts.map +1 -0
  114. package/dist/{scripting → functions}/builtins/language/array-callbacks.js +1 -1
  115. package/dist/{scripting → functions}/builtins/language/array-callbacks.js.map +1 -1
  116. package/dist/functions/builtins/language/arrays.d.ts +2 -0
  117. package/dist/functions/builtins/language/arrays.d.ts.map +1 -0
  118. package/dist/{scripting → functions}/builtins/language/arrays.js +1 -1
  119. package/dist/{scripting → functions}/builtins/language/arrays.js.map +1 -1
  120. package/dist/{scripting → functions}/builtins/language/common.d.ts.map +1 -1
  121. package/dist/{scripting → functions}/builtins/language/common.js.map +1 -1
  122. package/dist/functions/builtins/language/decimals.d.ts +2 -0
  123. package/dist/functions/builtins/language/decimals.d.ts.map +1 -0
  124. package/dist/{scripting → functions}/builtins/language/decimals.js.map +1 -1
  125. package/dist/functions/builtins/language/index.d.ts +3 -0
  126. package/dist/functions/builtins/language/index.d.ts.map +1 -0
  127. package/dist/functions/builtins/language/index.js.map +1 -0
  128. package/dist/functions/builtins/language/loops.d.ts +4 -0
  129. package/dist/{scripting → functions}/builtins/language/loops.d.ts.map +1 -1
  130. package/dist/{scripting → functions}/builtins/language/loops.js +3 -3
  131. package/dist/{scripting → functions}/builtins/language/loops.js.map +1 -1
  132. package/dist/functions/builtins/language/numbers.d.ts +2 -0
  133. package/dist/functions/builtins/language/numbers.d.ts.map +1 -0
  134. package/dist/{scripting → functions}/builtins/language/numbers.js.map +1 -1
  135. package/dist/{scripting → functions}/builtins/language/objects.d.ts +1 -1
  136. package/dist/{scripting → functions}/builtins/language/objects.d.ts.map +1 -1
  137. package/dist/{scripting → functions}/builtins/language/objects.js.map +1 -1
  138. package/dist/functions/builtins/language/regex.d.ts +2 -0
  139. package/dist/functions/builtins/language/regex.d.ts.map +1 -0
  140. package/dist/{scripting → functions}/builtins/language/regex.js +1 -1
  141. package/dist/{scripting → functions}/builtins/language/regex.js.map +1 -1
  142. package/dist/functions/builtins/language/sort.d.ts +2 -0
  143. package/dist/functions/builtins/language/sort.d.ts.map +1 -0
  144. package/dist/{scripting → functions}/builtins/language/sort.js.map +1 -1
  145. package/dist/{scripting → functions}/builtins/language/state.d.ts +1 -1
  146. package/dist/{scripting → functions}/builtins/language/state.d.ts.map +1 -1
  147. package/dist/{scripting → functions}/builtins/language/state.js.map +1 -1
  148. package/dist/functions/builtins/language/texts.d.ts +2 -0
  149. package/dist/functions/builtins/language/texts.d.ts.map +1 -0
  150. package/dist/{scripting → functions}/builtins/language/texts.js.map +1 -1
  151. package/dist/functions/builtins/messages.d.ts +2 -0
  152. package/dist/functions/builtins/messages.d.ts.map +1 -0
  153. package/dist/{scripting → functions}/builtins/messages.js.map +1 -1
  154. package/dist/functions/builtins/moderation.d.ts +2 -0
  155. package/dist/functions/builtins/moderation.d.ts.map +1 -0
  156. package/dist/{scripting → functions}/builtins/moderation.js.map +1 -1
  157. package/dist/functions/builtins/native-channels.d.ts +2 -0
  158. package/dist/functions/builtins/native-channels.d.ts.map +1 -0
  159. package/dist/{scripting → functions}/builtins/native-channels.js.map +1 -1
  160. package/dist/functions/builtins/native-collectors.d.ts +2 -0
  161. package/dist/functions/builtins/native-collectors.d.ts.map +1 -0
  162. package/dist/{scripting → functions}/builtins/native-collectors.js.map +1 -1
  163. package/dist/functions/builtins/native-expressions.d.ts +2 -0
  164. package/dist/functions/builtins/native-expressions.d.ts.map +1 -0
  165. package/dist/{scripting → functions}/builtins/native-expressions.js.map +1 -1
  166. package/dist/functions/builtins/native-invites.d.ts +2 -0
  167. package/dist/functions/builtins/native-invites.d.ts.map +1 -0
  168. package/dist/{scripting → functions}/builtins/native-invites.js.map +1 -1
  169. package/dist/functions/builtins/native-messages.d.ts +2 -0
  170. package/dist/functions/builtins/native-messages.d.ts.map +1 -0
  171. package/dist/{scripting → functions}/builtins/native-messages.js.map +1 -1
  172. package/dist/functions/builtins/native-roles.d.ts +2 -0
  173. package/dist/functions/builtins/native-roles.d.ts.map +1 -0
  174. package/dist/{scripting → functions}/builtins/native-roles.js.map +1 -1
  175. package/dist/functions/builtins/native-threads.d.ts +2 -0
  176. package/dist/functions/builtins/native-threads.d.ts.map +1 -0
  177. package/dist/{scripting → functions}/builtins/native-threads.js.map +1 -1
  178. package/dist/functions/builtins/native-users.d.ts +2 -0
  179. package/dist/functions/builtins/native-users.d.ts.map +1 -0
  180. package/dist/{scripting → functions}/builtins/native-users.js.map +1 -1
  181. package/dist/functions/builtins/native-webhooks.d.ts +2 -0
  182. package/dist/functions/builtins/native-webhooks.d.ts.map +1 -0
  183. package/dist/{scripting → functions}/builtins/native-webhooks.js.map +1 -1
  184. package/dist/{scripting → functions}/builtins/payload.d.ts +2 -2
  185. package/dist/functions/builtins/payload.d.ts.map +1 -0
  186. package/dist/{scripting → functions}/builtins/payload.js +1 -1
  187. package/dist/functions/builtins/payload.js.map +1 -0
  188. package/dist/functions/builtins/resource-extras.d.ts +2 -0
  189. package/dist/functions/builtins/resource-extras.d.ts.map +1 -0
  190. package/dist/{scripting → functions}/builtins/resource-extras.js.map +1 -1
  191. package/dist/functions/builtins/schedule.d.ts +2 -0
  192. package/dist/functions/builtins/schedule.d.ts.map +1 -0
  193. package/dist/{scripting → functions}/builtins/schedule.js.map +1 -1
  194. package/dist/functions/builtins/storage.d.ts +2 -0
  195. package/dist/functions/builtins/storage.d.ts.map +1 -0
  196. package/dist/{scripting → functions}/builtins/storage.js.map +1 -1
  197. package/dist/functions/builtins/values.d.ts +2 -0
  198. package/dist/functions/builtins/values.d.ts.map +1 -0
  199. package/dist/{scripting → functions}/builtins/values.js +1 -1
  200. package/dist/functions/builtins/values.js.map +1 -0
  201. package/dist/functions/runtime/ast.d.ts.map +1 -0
  202. package/dist/functions/runtime/ast.js.map +1 -0
  203. package/dist/{scripting → functions/runtime}/canvas-execution.d.ts +1 -1
  204. package/dist/functions/runtime/canvas-execution.d.ts.map +1 -0
  205. package/dist/functions/runtime/canvas-execution.js.map +1 -0
  206. package/dist/functions/runtime/control-flow.d.ts.map +1 -0
  207. package/dist/functions/runtime/control-flow.js.map +1 -0
  208. package/dist/{scripting → functions/runtime}/evaluator.d.ts +1 -1
  209. package/dist/functions/runtime/evaluator.d.ts.map +1 -0
  210. package/dist/{scripting → functions/runtime}/evaluator.js +1 -1
  211. package/dist/functions/runtime/evaluator.js.map +1 -0
  212. package/dist/functions/runtime/limits.d.ts.map +1 -0
  213. package/dist/{scripting → functions/runtime}/limits.js +1 -1
  214. package/dist/functions/runtime/limits.js.map +1 -0
  215. package/dist/functions/runtime/parser.d.ts.map +1 -0
  216. package/dist/{scripting → functions/runtime}/parser.js +1 -1
  217. package/dist/functions/runtime/parser.js.map +1 -0
  218. package/dist/functions/runtime/regex.d.ts.map +1 -0
  219. package/dist/{scripting → functions/runtime}/regex.js +1 -1
  220. package/dist/functions/runtime/regex.js.map +1 -0
  221. package/dist/functions/runtime/registry.d.ts.map +1 -0
  222. package/dist/{scripting → functions/runtime}/registry.js +1 -1
  223. package/dist/functions/runtime/registry.js.map +1 -0
  224. package/dist/{scripting → functions/runtime}/runtime.d.ts +3 -1
  225. package/dist/functions/runtime/runtime.d.ts.map +1 -0
  226. package/dist/{scripting → functions/runtime}/runtime.js +3 -0
  227. package/dist/functions/runtime/runtime.js.map +1 -0
  228. package/dist/{scripting → functions/runtime}/types.d.ts +1 -1
  229. package/dist/functions/runtime/types.d.ts.map +1 -0
  230. package/dist/functions/runtime/types.js.map +1 -0
  231. package/dist/functions/runtime/values.d.ts.map +1 -0
  232. package/dist/functions/runtime/values.js.map +1 -0
  233. package/dist/functions.d.ts +19 -8
  234. package/dist/functions.d.ts.map +1 -1
  235. package/dist/functions.js +18 -6
  236. package/dist/functions.js.map +1 -1
  237. package/dist/index.d.ts +12 -0
  238. package/dist/index.d.ts.map +1 -1
  239. package/dist/index.js +7 -0
  240. package/dist/index.js.map +1 -1
  241. package/dist/infrastructure/canvas/napi.d.ts +4 -0
  242. package/dist/infrastructure/canvas/napi.d.ts.map +1 -0
  243. package/dist/infrastructure/canvas/napi.js +17 -0
  244. package/dist/infrastructure/canvas/napi.js.map +1 -0
  245. package/dist/infrastructure/fluxer/resources/cache.d.ts.map +1 -1
  246. package/dist/infrastructure/fluxer/resources/cache.js +18 -1
  247. package/dist/infrastructure/fluxer/resources/cache.js.map +1 -1
  248. package/dist/infrastructure/fluxer/resources/channels.d.ts +3 -2
  249. package/dist/infrastructure/fluxer/resources/channels.d.ts.map +1 -1
  250. package/dist/infrastructure/fluxer/resources/channels.js +115 -9
  251. package/dist/infrastructure/fluxer/resources/channels.js.map +1 -1
  252. package/dist/infrastructure/fluxer/resources/expressions.d.ts.map +1 -1
  253. package/dist/infrastructure/fluxer/resources/expressions.js +10 -2
  254. package/dist/infrastructure/fluxer/resources/expressions.js.map +1 -1
  255. package/dist/infrastructure/fluxer/resources/messages.d.ts +2 -1
  256. package/dist/infrastructure/fluxer/resources/messages.d.ts.map +1 -1
  257. package/dist/infrastructure/fluxer/resources/messages.js +52 -2
  258. package/dist/infrastructure/fluxer/resources/messages.js.map +1 -1
  259. package/dist/infrastructure/fluxer/resources/roles.d.ts.map +1 -1
  260. package/dist/infrastructure/fluxer/resources/roles.js +8 -0
  261. package/dist/infrastructure/fluxer/resources/roles.js.map +1 -1
  262. package/dist/infrastructure/fluxer/resources/threads.d.ts.map +1 -1
  263. package/dist/infrastructure/fluxer/resources/threads.js +15 -0
  264. package/dist/infrastructure/fluxer/resources/threads.js.map +1 -1
  265. package/dist/infrastructure/fluxer/resources/users.d.ts +4 -3
  266. package/dist/infrastructure/fluxer/resources/users.d.ts.map +1 -1
  267. package/dist/infrastructure/fluxer/resources/users.js +75 -10
  268. package/dist/infrastructure/fluxer/resources/users.js.map +1 -1
  269. package/dist/infrastructure/fluxer/resources/webhooks.d.ts.map +1 -1
  270. package/dist/infrastructure/fluxer/resources/webhooks.js +9 -0
  271. package/dist/infrastructure/fluxer/resources/webhooks.js.map +1 -1
  272. package/dist/infrastructure/fluxer/resources.d.ts +3 -1
  273. package/dist/infrastructure/fluxer/resources.d.ts.map +1 -1
  274. package/dist/infrastructure/fluxer/resources.js +8 -3
  275. package/dist/infrastructure/fluxer/resources.js.map +1 -1
  276. package/dist/infrastructure/fluxer/transport.d.ts +4 -1
  277. package/dist/infrastructure/fluxer/transport.d.ts.map +1 -1
  278. package/dist/infrastructure/fluxer/transport.js +41 -14
  279. package/dist/infrastructure/fluxer/transport.js.map +1 -1
  280. package/dist/ports/resources/cache.d.ts +23 -1
  281. package/dist/ports/resources/cache.d.ts.map +1 -1
  282. package/dist/ports/resources/cache.js.map +1 -1
  283. package/dist/ports/resources/channels.d.ts +37 -1
  284. package/dist/ports/resources/channels.d.ts.map +1 -1
  285. package/dist/ports/resources/channels.js.map +1 -1
  286. package/dist/ports/resources/common.d.ts +2 -0
  287. package/dist/ports/resources/common.d.ts.map +1 -1
  288. package/dist/ports/resources/common.js.map +1 -1
  289. package/dist/ports/resources/expressions.d.ts +8 -0
  290. package/dist/ports/resources/expressions.d.ts.map +1 -1
  291. package/dist/ports/resources/expressions.js.map +1 -1
  292. package/dist/ports/resources/messages.d.ts +7 -0
  293. package/dist/ports/resources/messages.d.ts.map +1 -1
  294. package/dist/ports/resources/messages.js.map +1 -1
  295. package/dist/ports/resources/roles.d.ts +6 -0
  296. package/dist/ports/resources/roles.d.ts.map +1 -1
  297. package/dist/ports/resources/roles.js.map +1 -1
  298. package/dist/ports/resources/threads.d.ts +16 -0
  299. package/dist/ports/resources/threads.d.ts.map +1 -1
  300. package/dist/ports/resources/threads.js.map +1 -1
  301. package/dist/ports/resources/users.d.ts +35 -0
  302. package/dist/ports/resources/users.d.ts.map +1 -1
  303. package/dist/ports/resources/users.js.map +1 -1
  304. package/dist/ports/resources/webhooks.d.ts +5 -0
  305. package/dist/ports/resources/webhooks.d.ts.map +1 -1
  306. package/dist/ports/resources/webhooks.js.map +1 -1
  307. package/dist/ports/script-engine.d.ts +45 -0
  308. package/dist/ports/script-engine.d.ts.map +1 -0
  309. package/dist/ports/script-engine.js +2 -0
  310. package/dist/ports/script-engine.js.map +1 -0
  311. package/dist/services/authorization.js +9 -9
  312. package/dist/services/authorization.js.map +1 -1
  313. package/dist/services/canvas-image.d.ts +12 -0
  314. package/dist/services/canvas-image.d.ts.map +1 -0
  315. package/dist/services/canvas-image.js +56 -0
  316. package/dist/services/canvas-image.js.map +1 -0
  317. package/dist/services/canvas.d.ts +12 -2
  318. package/dist/services/canvas.d.ts.map +1 -1
  319. package/dist/services/canvas.js +91 -5
  320. package/dist/services/canvas.js.map +1 -1
  321. package/dist/services/members.d.ts +5 -0
  322. package/dist/services/members.d.ts.map +1 -1
  323. package/dist/services/members.js +75 -5
  324. package/dist/services/members.js.map +1 -1
  325. package/dist/services/moderation.d.ts +1 -0
  326. package/dist/services/moderation.d.ts.map +1 -1
  327. package/dist/services/moderation.js +20 -9
  328. package/dist/services/moderation.js.map +1 -1
  329. package/dist/services/native-moderation.d.ts +6 -1
  330. package/dist/services/native-moderation.d.ts.map +1 -1
  331. package/dist/services/native-moderation.js +11 -1
  332. package/dist/services/native-moderation.js.map +1 -1
  333. package/dist/services/resource-authorization.d.ts.map +1 -1
  334. package/dist/services/resource-authorization.js +118 -13
  335. package/dist/services/resource-authorization.js.map +1 -1
  336. package/dist/services/retry.d.ts +17 -0
  337. package/dist/services/retry.d.ts.map +1 -0
  338. package/dist/services/retry.js +67 -0
  339. package/dist/services/retry.js.map +1 -0
  340. package/dist/shared/errors.d.ts +4 -1
  341. package/dist/shared/errors.d.ts.map +1 -1
  342. package/dist/shared/errors.js +8 -1
  343. package/dist/shared/errors.js.map +1 -1
  344. package/dist/testing.d.ts +8 -0
  345. package/dist/testing.d.ts.map +1 -1
  346. package/dist/testing.js +24 -4
  347. package/dist/testing.js.map +1 -1
  348. package/docs/API.md +19 -7
  349. package/docs/ARCHITECTURE.md +14 -9
  350. package/docs/BENCHMARKS.md +1 -1
  351. package/docs/CANVAS.md +70 -15
  352. package/docs/EDITOR.md +1 -1
  353. package/docs/FRAMEWORK.md +15 -3
  354. package/docs/HTTP.md +1 -1
  355. package/docs/IMAGES.md +11 -1
  356. package/docs/NATIVE.md +64 -12
  357. package/docs/PARITY-MATRIX.md +830 -821
  358. package/docs/PARITY.md +3 -3
  359. package/docs/PLAN.md +14 -3
  360. package/docs/QUICKSTART.md +5 -5
  361. package/docs/README.md +7 -7
  362. package/docs/REPOSITORY.md +1 -1
  363. package/docs/SCHEDULER.md +1 -1
  364. package/docs/TESTING.md +16 -0
  365. package/docs/TROUBLESHOOTING.md +1 -1
  366. package/docs/VALIDATION.md +5 -5
  367. package/docs/{FUNCTION-GAPS.md → functions/FUNCTION-GAPS.md} +10 -10
  368. package/docs/{LANGUAGE.md → functions/LANGUAGE.md} +7 -7
  369. package/docs/functions/README.md +33 -0
  370. package/docs/tutorials/DATA.md +2 -2
  371. package/docs/tutorials/FUNCTION-MODE.md +2 -2
  372. package/examples/canvas/napi-style.ts +24 -0
  373. package/examples/canvas/output/napi-style.png +0 -0
  374. package/examples/canvas/profile.d.mts +1 -1
  375. package/examples/canvas/profile.mjs +2 -2
  376. package/examples/canvas/profile.ts +3 -3
  377. package/examples/canvas/ranking.d.mts +1 -1
  378. package/examples/canvas/ranking.mjs +2 -2
  379. package/examples/canvas/ranking.ts +3 -3
  380. package/examples/canvas/render.ts +2 -1
  381. package/examples/canvas/welcome.d.mts +1 -1
  382. package/examples/canvas/welcome.mjs +2 -2
  383. package/examples/canvas/welcome.ts +3 -3
  384. package/examples/embeds/complete-embed-functions.ts +2 -2
  385. package/examples/function-mode.ts +3 -3
  386. package/examples/yuzuha.config.js +2 -0
  387. package/package.json +5 -1
  388. package/src/canvas/card.ts +20 -0
  389. package/src/canvas.ts +69 -17
  390. package/src/cli/config.ts +2 -1
  391. package/src/cli/lint.ts +1 -2
  392. package/src/cli/main.ts +8 -9
  393. package/src/cli/scaffold.ts +1 -1
  394. package/src/cli/scenarios.ts +2 -1
  395. package/src/commands/arguments.ts +35 -13
  396. package/src/commands/builders.ts +4 -0
  397. package/src/commands/context-like.ts +7 -0
  398. package/src/commands/context.ts +59 -12
  399. package/src/commands/definition.ts +1 -0
  400. package/src/commands/typed-arguments.ts +2 -2
  401. package/src/domain/cdn.ts +55 -0
  402. package/src/domain/resolvers.ts +42 -0
  403. package/src/domain/resource-batches.ts +31 -0
  404. package/src/domain/values.ts +28 -1
  405. package/src/framework/bot.ts +85 -37
  406. package/src/framework/command-registry.ts +15 -10
  407. package/src/framework/logging.ts +5 -1
  408. package/src/framework/options.ts +7 -3
  409. package/src/{scripting → functions}/builtins/canvas.ts +2 -2
  410. package/src/{scripting → functions}/builtins/context.ts +1 -1
  411. package/src/{scripting → functions}/builtins/definition.ts +1 -1
  412. package/src/{scripting → functions}/builtins/embeds.ts +1 -1
  413. package/src/{scripting → functions}/builtins/flow.ts +2 -2
  414. package/src/{scripting → functions}/builtins/guards.ts +1 -1
  415. package/src/{scripting → functions}/builtins/http.ts +2 -2
  416. package/src/{scripting → functions}/builtins/index.ts +2 -2
  417. package/src/{scripting → functions}/builtins/language/array-callbacks.ts +2 -2
  418. package/src/{scripting → functions}/builtins/language/arrays.ts +1 -1
  419. package/src/{scripting → functions}/builtins/language/index.ts +1 -1
  420. package/src/{scripting → functions}/builtins/language/loops.ts +4 -4
  421. package/src/{scripting → functions}/builtins/language/regex.ts +1 -1
  422. package/src/{scripting → functions}/builtins/moderation.ts +1 -1
  423. package/src/{scripting → functions}/builtins/native-channels.ts +1 -1
  424. package/src/{scripting → functions}/builtins/native-roles.ts +1 -1
  425. package/src/{scripting → functions}/builtins/native-users.ts +1 -1
  426. package/src/{scripting → functions}/builtins/payload.ts +2 -2
  427. package/src/{scripting → functions}/builtins/resource-extras.ts +1 -1
  428. package/src/{scripting → functions}/builtins/values.ts +1 -1
  429. package/src/{scripting → functions/runtime}/canvas-execution.ts +1 -1
  430. package/src/{scripting → functions/runtime}/evaluator.ts +2 -2
  431. package/src/{scripting → functions/runtime}/limits.ts +1 -1
  432. package/src/{scripting → functions/runtime}/parser.ts +1 -1
  433. package/src/{scripting → functions/runtime}/regex.ts +1 -1
  434. package/src/{scripting → functions/runtime}/registry.ts +1 -1
  435. package/src/{scripting → functions/runtime}/runtime.ts +6 -1
  436. package/src/{scripting → functions/runtime}/types.ts +1 -1
  437. package/src/functions.ts +28 -8
  438. package/src/index.ts +14 -0
  439. package/src/infrastructure/canvas/napi.ts +17 -0
  440. package/src/infrastructure/fluxer/resources/cache.ts +19 -2
  441. package/src/infrastructure/fluxer/resources/channels.ts +103 -10
  442. package/src/infrastructure/fluxer/resources/expressions.ts +9 -2
  443. package/src/infrastructure/fluxer/resources/messages.ts +47 -2
  444. package/src/infrastructure/fluxer/resources/roles.ts +8 -0
  445. package/src/infrastructure/fluxer/resources/threads.ts +14 -0
  446. package/src/infrastructure/fluxer/resources/users.ts +76 -11
  447. package/src/infrastructure/fluxer/resources/webhooks.ts +9 -0
  448. package/src/infrastructure/fluxer/resources.ts +4 -3
  449. package/src/infrastructure/fluxer/transport.ts +42 -13
  450. package/src/ports/resources/cache.ts +26 -1
  451. package/src/ports/resources/channels.ts +23 -1
  452. package/src/ports/resources/common.ts +2 -0
  453. package/src/ports/resources/expressions.ts +6 -0
  454. package/src/ports/resources/messages.ts +7 -0
  455. package/src/ports/resources/roles.ts +3 -0
  456. package/src/ports/resources/threads.ts +15 -0
  457. package/src/ports/resources/users.ts +36 -0
  458. package/src/ports/resources/webhooks.ts +6 -0
  459. package/src/ports/script-engine.ts +42 -0
  460. package/src/services/authorization.ts +9 -9
  461. package/src/services/canvas-image.ts +54 -0
  462. package/src/services/canvas.ts +89 -6
  463. package/src/services/members.ts +70 -5
  464. package/src/services/moderation.ts +13 -9
  465. package/src/services/native-moderation.ts +11 -1
  466. package/src/services/resource-authorization.ts +112 -13
  467. package/src/services/retry.ts +74 -0
  468. package/src/shared/errors.ts +10 -1
  469. package/src/testing.ts +28 -4
  470. package/dist/parser.d.ts +0 -3
  471. package/dist/parser.d.ts.map +0 -1
  472. package/dist/parser.js +0 -2
  473. package/dist/parser.js.map +0 -1
  474. package/dist/runtime.d.ts +0 -5
  475. package/dist/runtime.d.ts.map +0 -1
  476. package/dist/runtime.js +0 -4
  477. package/dist/runtime.js.map +0 -1
  478. package/dist/scripting/ast.d.ts.map +0 -1
  479. package/dist/scripting/ast.js.map +0 -1
  480. package/dist/scripting/builtins/canvas.d.ts +0 -2
  481. package/dist/scripting/builtins/canvas.d.ts.map +0 -1
  482. package/dist/scripting/builtins/context.d.ts +0 -2
  483. package/dist/scripting/builtins/context.d.ts.map +0 -1
  484. package/dist/scripting/builtins/definition.d.ts.map +0 -1
  485. package/dist/scripting/builtins/definition.js.map +0 -1
  486. package/dist/scripting/builtins/embeds.d.ts +0 -3
  487. package/dist/scripting/builtins/embeds.js.map +0 -1
  488. package/dist/scripting/builtins/events.d.ts +0 -2
  489. package/dist/scripting/builtins/events.d.ts.map +0 -1
  490. package/dist/scripting/builtins/flow.d.ts +0 -2
  491. package/dist/scripting/builtins/flow.d.ts.map +0 -1
  492. package/dist/scripting/builtins/flow.js.map +0 -1
  493. package/dist/scripting/builtins/guards.d.ts +0 -2
  494. package/dist/scripting/builtins/guards.d.ts.map +0 -1
  495. package/dist/scripting/builtins/guards.js.map +0 -1
  496. package/dist/scripting/builtins/http.d.ts +0 -2
  497. package/dist/scripting/builtins/http.d.ts.map +0 -1
  498. package/dist/scripting/builtins/http.js.map +0 -1
  499. package/dist/scripting/builtins/index.d.ts +0 -5
  500. package/dist/scripting/builtins/index.d.ts.map +0 -1
  501. package/dist/scripting/builtins/index.js.map +0 -1
  502. package/dist/scripting/builtins/language/array-callbacks.d.ts +0 -2
  503. package/dist/scripting/builtins/language/array-callbacks.d.ts.map +0 -1
  504. package/dist/scripting/builtins/language/arrays.d.ts +0 -2
  505. package/dist/scripting/builtins/language/arrays.d.ts.map +0 -1
  506. package/dist/scripting/builtins/language/decimals.d.ts +0 -2
  507. package/dist/scripting/builtins/language/decimals.d.ts.map +0 -1
  508. package/dist/scripting/builtins/language/index.d.ts +0 -3
  509. package/dist/scripting/builtins/language/index.d.ts.map +0 -1
  510. package/dist/scripting/builtins/language/index.js.map +0 -1
  511. package/dist/scripting/builtins/language/loops.d.ts +0 -4
  512. package/dist/scripting/builtins/language/numbers.d.ts +0 -2
  513. package/dist/scripting/builtins/language/numbers.d.ts.map +0 -1
  514. package/dist/scripting/builtins/language/regex.d.ts +0 -2
  515. package/dist/scripting/builtins/language/regex.d.ts.map +0 -1
  516. package/dist/scripting/builtins/language/sort.d.ts +0 -2
  517. package/dist/scripting/builtins/language/sort.d.ts.map +0 -1
  518. package/dist/scripting/builtins/language/texts.d.ts +0 -2
  519. package/dist/scripting/builtins/language/texts.d.ts.map +0 -1
  520. package/dist/scripting/builtins/messages.d.ts +0 -2
  521. package/dist/scripting/builtins/messages.d.ts.map +0 -1
  522. package/dist/scripting/builtins/moderation.d.ts +0 -2
  523. package/dist/scripting/builtins/moderation.d.ts.map +0 -1
  524. package/dist/scripting/builtins/native-channels.d.ts +0 -2
  525. package/dist/scripting/builtins/native-channels.d.ts.map +0 -1
  526. package/dist/scripting/builtins/native-collectors.d.ts +0 -2
  527. package/dist/scripting/builtins/native-collectors.d.ts.map +0 -1
  528. package/dist/scripting/builtins/native-expressions.d.ts +0 -2
  529. package/dist/scripting/builtins/native-expressions.d.ts.map +0 -1
  530. package/dist/scripting/builtins/native-invites.d.ts +0 -2
  531. package/dist/scripting/builtins/native-invites.d.ts.map +0 -1
  532. package/dist/scripting/builtins/native-messages.d.ts +0 -2
  533. package/dist/scripting/builtins/native-messages.d.ts.map +0 -1
  534. package/dist/scripting/builtins/native-roles.d.ts +0 -2
  535. package/dist/scripting/builtins/native-roles.d.ts.map +0 -1
  536. package/dist/scripting/builtins/native-threads.d.ts +0 -2
  537. package/dist/scripting/builtins/native-threads.d.ts.map +0 -1
  538. package/dist/scripting/builtins/native-users.d.ts +0 -2
  539. package/dist/scripting/builtins/native-users.d.ts.map +0 -1
  540. package/dist/scripting/builtins/native-webhooks.d.ts +0 -2
  541. package/dist/scripting/builtins/native-webhooks.d.ts.map +0 -1
  542. package/dist/scripting/builtins/payload.d.ts.map +0 -1
  543. package/dist/scripting/builtins/payload.js.map +0 -1
  544. package/dist/scripting/builtins/resource-extras.d.ts +0 -2
  545. package/dist/scripting/builtins/resource-extras.d.ts.map +0 -1
  546. package/dist/scripting/builtins/schedule.d.ts +0 -2
  547. package/dist/scripting/builtins/schedule.d.ts.map +0 -1
  548. package/dist/scripting/builtins/storage.d.ts +0 -2
  549. package/dist/scripting/builtins/storage.d.ts.map +0 -1
  550. package/dist/scripting/builtins/values.d.ts +0 -2
  551. package/dist/scripting/builtins/values.d.ts.map +0 -1
  552. package/dist/scripting/builtins/values.js.map +0 -1
  553. package/dist/scripting/canvas-execution.d.ts.map +0 -1
  554. package/dist/scripting/canvas-execution.js.map +0 -1
  555. package/dist/scripting/control-flow.d.ts.map +0 -1
  556. package/dist/scripting/control-flow.js.map +0 -1
  557. package/dist/scripting/evaluator.d.ts.map +0 -1
  558. package/dist/scripting/evaluator.js.map +0 -1
  559. package/dist/scripting/limits.d.ts.map +0 -1
  560. package/dist/scripting/limits.js.map +0 -1
  561. package/dist/scripting/parser.d.ts.map +0 -1
  562. package/dist/scripting/parser.js.map +0 -1
  563. package/dist/scripting/regex.d.ts.map +0 -1
  564. package/dist/scripting/regex.js.map +0 -1
  565. package/dist/scripting/registry.d.ts.map +0 -1
  566. package/dist/scripting/registry.js.map +0 -1
  567. package/dist/scripting/runtime.d.ts.map +0 -1
  568. package/dist/scripting/runtime.js.map +0 -1
  569. package/dist/scripting/types.d.ts.map +0 -1
  570. package/dist/scripting/types.js.map +0 -1
  571. package/dist/scripting/values.d.ts.map +0 -1
  572. package/dist/scripting/values.js.map +0 -1
  573. package/src/parser.ts +0 -2
  574. package/src/runtime.ts +0 -4
  575. /package/dist/{scripting → functions}/builtins/arguments.d.ts +0 -0
  576. /package/dist/{scripting → functions}/builtins/arguments.js +0 -0
  577. /package/dist/{scripting → functions}/builtins/context.js +0 -0
  578. /package/dist/{scripting → functions}/builtins/definition.js +0 -0
  579. /package/dist/{scripting → functions}/builtins/events.js +0 -0
  580. /package/dist/{scripting → functions}/builtins/index.js +0 -0
  581. /package/dist/{scripting → functions}/builtins/language/common.d.ts +0 -0
  582. /package/dist/{scripting → functions}/builtins/language/common.js +0 -0
  583. /package/dist/{scripting → functions}/builtins/language/decimals.js +0 -0
  584. /package/dist/{scripting → functions}/builtins/language/index.js +0 -0
  585. /package/dist/{scripting → functions}/builtins/language/numbers.js +0 -0
  586. /package/dist/{scripting → functions}/builtins/language/objects.js +0 -0
  587. /package/dist/{scripting → functions}/builtins/language/sort.js +0 -0
  588. /package/dist/{scripting → functions}/builtins/language/state.js +0 -0
  589. /package/dist/{scripting → functions}/builtins/language/texts.js +0 -0
  590. /package/dist/{scripting → functions}/builtins/messages.js +0 -0
  591. /package/dist/{scripting → functions}/builtins/moderation.js +0 -0
  592. /package/dist/{scripting → functions}/builtins/native-channels.js +0 -0
  593. /package/dist/{scripting → functions}/builtins/native-collectors.js +0 -0
  594. /package/dist/{scripting → functions}/builtins/native-expressions.js +0 -0
  595. /package/dist/{scripting → functions}/builtins/native-invites.js +0 -0
  596. /package/dist/{scripting → functions}/builtins/native-messages.js +0 -0
  597. /package/dist/{scripting → functions}/builtins/native-roles.js +0 -0
  598. /package/dist/{scripting → functions}/builtins/native-threads.js +0 -0
  599. /package/dist/{scripting → functions}/builtins/native-users.js +0 -0
  600. /package/dist/{scripting → functions}/builtins/native-webhooks.js +0 -0
  601. /package/dist/{scripting → functions}/builtins/resource-extras.js +0 -0
  602. /package/dist/{scripting → functions}/builtins/schedule.js +0 -0
  603. /package/dist/{scripting → functions}/builtins/storage.js +0 -0
  604. /package/dist/{scripting → functions/runtime}/ast.d.ts +0 -0
  605. /package/dist/{scripting → functions/runtime}/ast.js +0 -0
  606. /package/dist/{scripting → functions/runtime}/canvas-execution.js +0 -0
  607. /package/dist/{scripting → functions/runtime}/control-flow.d.ts +0 -0
  608. /package/dist/{scripting → functions/runtime}/control-flow.js +0 -0
  609. /package/dist/{scripting → functions/runtime}/limits.d.ts +0 -0
  610. /package/dist/{scripting → functions/runtime}/parser.d.ts +0 -0
  611. /package/dist/{scripting → functions/runtime}/regex-worker.mjs +0 -0
  612. /package/dist/{scripting → functions/runtime}/regex.d.ts +0 -0
  613. /package/dist/{scripting → functions/runtime}/registry.d.ts +0 -0
  614. /package/dist/{scripting → functions/runtime}/types.js +0 -0
  615. /package/dist/{scripting → functions/runtime}/values.d.ts +0 -0
  616. /package/dist/{scripting → functions/runtime}/values.js +0 -0
  617. /package/docs/{FUNCTIONS.md → functions/FUNCTIONS.md} +0 -0
  618. /package/docs/{LANGUAGE-EXTENSIONS.md → functions/LANGUAGE-EXTENSIONS.md} +0 -0
  619. /package/src/{scripting → functions}/builtins/arguments.ts +0 -0
  620. /package/src/{scripting → functions}/builtins/events.ts +0 -0
  621. /package/src/{scripting → functions}/builtins/language/common.ts +0 -0
  622. /package/src/{scripting → functions}/builtins/language/decimals.ts +0 -0
  623. /package/src/{scripting → functions}/builtins/language/numbers.ts +0 -0
  624. /package/src/{scripting → functions}/builtins/language/objects.ts +0 -0
  625. /package/src/{scripting → functions}/builtins/language/sort.ts +0 -0
  626. /package/src/{scripting → functions}/builtins/language/state.ts +0 -0
  627. /package/src/{scripting → functions}/builtins/language/texts.ts +0 -0
  628. /package/src/{scripting → functions}/builtins/messages.ts +0 -0
  629. /package/src/{scripting → functions}/builtins/native-collectors.ts +0 -0
  630. /package/src/{scripting → functions}/builtins/native-expressions.ts +0 -0
  631. /package/src/{scripting → functions}/builtins/native-invites.ts +0 -0
  632. /package/src/{scripting → functions}/builtins/native-messages.ts +0 -0
  633. /package/src/{scripting → functions}/builtins/native-threads.ts +0 -0
  634. /package/src/{scripting → functions}/builtins/native-webhooks.ts +0 -0
  635. /package/src/{scripting → functions}/builtins/schedule.ts +0 -0
  636. /package/src/{scripting → functions}/builtins/storage.ts +0 -0
  637. /package/src/{scripting → functions/runtime}/ast.ts +0 -0
  638. /package/src/{scripting → functions/runtime}/control-flow.ts +0 -0
  639. /package/src/{scripting → functions/runtime}/regex-worker.mjs +0 -0
  640. /package/src/{scripting → functions/runtime}/values.ts +0 -0
package/CHANGELOG.md CHANGED
@@ -21,6 +21,45 @@ documentos. Veja a [política completa](VERSIONING.md).
21
21
 
22
22
  </details>
23
23
 
24
+ ## v0.3.1 · 06/11/2026
25
+
26
+ Erros tipados de guarda, retentativa de transporte, resolvers e helpers de canais e CDN — a atualização da biblioteca Yuzuha foi preparada em 06/11/2026 (v0.3.1).
27
+
28
+ **Notas de comportamento**
29
+ - `GuardError.reason` é aditivo (`code: 'GUARD'` inalterado); `ctx.mod.can*` devolve `false` para `MEMBER_NOT_FOUND`.
30
+ - `YuzuhaOptions.retry` fica LIGADO por padrão (`{ requests: 1, delayMs: 750 }`) só em falhas de rede transitórias; `send`/`reply` reenviam só quando a falha prova que a mensagem não saiu.
31
+ - `Resources` ganhou métodos exigidos — `users.bannerURL`, `users.resolveBan`, `channels.lock`/`unlock` e a opção `merge` de `overwrite`; adapters completos devem implementá-los.
32
+
33
+ - `GuardError` ganhou `reason` tipado (`GuardReason`, ex.: `PERMISSION_MISSING_AUTHOR`, `HIERARCHY`, `SELF_TARGET`, `MEMBER_NOT_FOUND`, `NOT_BANNED`, `COOLDOWN`) e o helper `isGuardReason(error, ...reasons)`; mensagens e `code: 'GUARD'` inalterados.
34
+ - Falhas de alvo ausente em moderação agora viram `GuardError` — `MEMBER_NOT_FOUND` (`Membro não encontrado.`) e `NOT_BANNED` (`Este usuário não está banido.`) — mapeadas pelo adaptador via `code`/`status` do SDK; `ctx.mod.can*` devolve `false` nesses casos.
35
+ - `ctx.deleteCommandMessage()` apaga a mensagem de comando e degrada `reply` para `send`; `transport.reply` reenvia sem referência quando o alvo já não existe (404).
36
+ - `ctx.send`/`ctx.reply` aceitam `{ ttlMs }` (1s–24h) e agendam a exclusão via `timers` injetável do bot; pendências são canceladas em `bot.destroy()` e falhas viram `onLog` `message.ttl_failed`.
37
+ - `YuzuhaOptions.retry` controla retentativas de transporte (`{ requests: 1, delayMs: 750 }` por padrão; `false` desliga) só em falhas transitórias de rede, detectadas por `error.code`/`cause.code` — erros de API nunca repetem; emissões por `onLog` `transport.retry`.
38
+ - `ctx.members.resolve`, `resolveUser` e `resolveBan` resolvem texto livre (menção, ID, nome exato ou prefixo, insensível a caixa e acentos) em `found`/`ambiguous`/`missing`; `users.resolveBan` expõe o mesmo em recursos com guarda `BanMembers`.
39
+ - `createTestBot({ authorization: 'off' })` expõe os recursos brutos nos testes (`unsafeDisableResourceAuthorization`, só para testes, registrado como `authorization.disabled`); `CommandContextLike` tipa helpers de contexto.
40
+ - `arg.user().anywhere()` liga menção ou ID em qualquer posição ao argumento (`purge 2 @user`), removendo o token antes do parse posicional e do `rest()`.
41
+ - `users.bannerURL(userID, guildID?)` resolve o banner pelo perfil (servidor primeiro) e `UserProfileInfo` traz `bannerURL`; assets animados (`a_*`) saem como `.gif` em todos os objetos de info.
42
+ - Novo `cdn`/`ctx.cdn` monta URLs do CDN sem cliente nativo (`avatar`, `banner`, `guildIcon`, `memberBanner`, `emoji`, `sticker`, `asset(url, { size, format })`); `YuzuhaOptions.cdn.mediaBase` define a base.
43
+ - `channels.overwrite` ganhou `merge: true` para PATCH de bits (`allow`/`deny`/`neutral`) preservando bits não relacionados; `channels.lock`/`unlock` bloqueiam a permissão por tipo de canal (`SendMessages`/`Connect`) de forma idempotente.
44
+ - Novo `cleanReason(texto, { maxLength? })` remove menções e trunca no limite de motivos para compor razões de moderação.
45
+ - Novos exports `formatDuration(ms)` (pt-BR, ex.: `10 minutos`) e `MAX_TIMEOUT_MS` (28 dias), junto a `parseDuration`; `CaseRecord.duration` é sempre em milissegundos.
46
+
47
+ ## v0.3.0 · 04/11/2026
48
+
49
+ Function mode isolado da raiz e `yuzuha/canvas` compatível com `@napi-rs/canvas`. Esta atualização da biblioteca Yuzuha foi preparada em 04/11/2026 (v0.3.0).
50
+
51
+ - `yuzuha/canvas` agora expõe a API napi em processo: `createCanvas`, `loadImage`, `registerFonts`, `GlobalFonts`, `Path2D`, `ImageData`, `DOMMatrix` e os demais exports de `@napi-rs/canvas`. `loadImage` baixa URLs HTTP(S) por `HttpService` com guarda de rede privada, limite de bytes, inspeção de formato e cancelamento. Sem o peer, os exports falham com `CANVAS_DEPENDENCY`.
52
+ - `ctx.canvas.send(canvas)` aceita um canvas napi e envia o anexo com as mesmas opções do builder; `ctx.canvas.loadImage(source)` usa o HTTP e o sinal do contexto. `ctx.canvas` continua oferecendo o builder (`create`/`send(builder)`) sem alterações.
53
+ - O builder de cartões migrou para `yuzuha/canvas/card` e continua renderizando em processo filho com os mesmos limites.
54
+ - O function mode fica isolado em `src/functions/`: `yuzuha/functions` exporta `functions()` que devolve um `ScriptEngine` com os builtins registrados. `new Yuzuha({ engine: functions() })` ou `bot.useEngine(engine)` instalam o engine; comandos com `code`, subcomandos com `code`, eventos de script e `plugin.functions` sem engine falham com `FUNCTIONS_REQUIRED`. A CLI injeta `functions()` automaticamente, preservando a UX de `yuzuha.config.js`.
55
+ - **Mudanças incompatíveis:** `import { createCanvas } from 'yuzuha/canvas'` passa a criar um canvas napi em processo — para o builder, migre para `import { createCard } from 'yuzuha/canvas/card'`. `bot.runtime`, `bot.enableFunctions()` e `YuzuhaOptions.limits` foram removidos — instale o engine explicitamente e use `bot.engine` ou `functions({ limits })`. Sem engine, `code:` e `scriptEvent` lançam `FUNCTIONS_REQUIRED`.
56
+ - Recursos nativos novos: `channels.sendTyping`, `channels.slowmode` (leitura), `channels.rtcRegions`, `messages.bulkDelete`/`bulkDeleteOwn`/`acknowledgePins`/`clearReadState`, `users.createDM` e `cache.sweepUsers`/`sweepChannels`/`sweepGuilds`. `bulkDelete` exige `ManageMessages` de autor e bot no canal, deduplica os ids e limita o lote a 100 (`BULK_DELETE_LIMIT`).
57
+ - A matriz de paridade agora distingue `coberto-recurso` (alcançado por `ctx.resources`, usado também pelas funções) de `coberto-nativo`, e marca como `só-SDK` as constantes, helpers puros e classes de dados reexportados por `yuzuha/sdk`. Membros internos (`_`, `Flags`, `fromOrCreate`, `[Symbol.iterator]`) e propriedades de dados de objetos do SDK foram classificados como só-SDK; eventos do SDK sem função contam como cobertos nativamente via `bot.on`/`bot.client.on`.
58
+ - Recursos nativos adicionais: `webhooks.editMessage`/`deleteMessage`, `channels.addRecipient`/`removeRecipient` (grupos de DM; dono exigido para incluir e para remover terceiros, `channels.get` devolve DMs com `recipientIDs`/`ownerID`), `messages.purgeDM` (canal de anotações), `threads.setLocked`/`editSelf`/`editDefaults`, `channels.editThreadDefaults`/`setDefaultForumLayout`, `expressions.createStickersBulk` (lote validado, falhas parciais preservadas), `users.discoveryStatus`/`applyForDiscovery`/`editDiscoveryApplication` e `RoleInfo.hoistPosition`. Segunda leva: `users.me`/`transferOwnership`/`withdrawDiscoveryApplication`, `roles.setRoleHoistPositions`/`resetRoleHoistPositions` (ManageRoles + hierarquia), `messages.deleteAttachment` (ManageMessages salvo mensagem própria)/`sendTo`, `cache.cascadeChannel`/`cascadeGuild` e `stats().cascading`, `bot.isReady()`/`bot.uptime`/`bot.assertReady()` (`BOT_NOT_READY`), `ctx.mod.canBan`/`canKick`/`canModerate` (booleanos, mesma hierarquia), `spoiler` em `AttachmentSpec`/`BinaryAttachmentSpec`. A matriz ganhou `coberto-equivalente` (mapeamentos verificados em `scripts/parity-equivalents.json`) e chega a zero `lacuna`.
59
+ - **Contrato público**: as interfaces `Resources` ganharam métodos obrigatórios em toda a cadeia (`channels.sendTyping`/`slowmode`/`rtcRegions`/`addRecipient`/`removeRecipient`/`editThreadDefaults`/`setDefaultForumLayout`, `messages.bulkDelete`/`bulkDeleteOwn`/`acknowledgePins`/`clearReadState`/`purgeDM`/`deleteAttachment`/`sendTo`, `webhooks.editMessage`/`deleteMessage`, `threads.setLocked`/`editSelf`/`editDefaults`, `expressions.createStickersBulk`, `users.createDM`/`me`/`transferOwnership`/`discoveryStatus`/`applyForDiscovery`/`editDiscoveryApplication`/`withdrawDiscoveryApplication`, `roles.setRoleHoistPositions`/`resetRoleHoistPositions`, `cache.sweepUsers`/`sweepChannels`/`sweepGuilds`/`cascadeChannel`/`cascadeGuild`). Adaptadores `Resources` completos precisam implementá-los.: 7 exports de tipos via `yuzuha/sdk/types` e membros internos/de dados como `só-SDK`.
60
+ - Documentação refeita com foco na experiência nativa JS/TS: os guias do function mode foram para `docs/functions/`, com índice explicando ativação por `engine: functions()`.
61
+ - SDK 3.3.0, Node >=22.13 e schema persistido 2 permanecem compatíveis. Veja [VERSIONING.md](VERSIONING.md#migrar-para-030) antes de atualizar.
62
+
24
63
  ## v0.2.1 · 03/11/2026
25
64
 
26
65
  Paridade nativa ampliada com o Fluxer.js: subpaths do SDK espelhados, pacotes satélites reexportados e novas áreas de recursos para gateway, instância, usuário autenticado e cache. Esta atualização da biblioteca Yuzuha foi preparada em 03/11/2026 (v0.2.1).
@@ -43,7 +82,7 @@ Embeds completos em uma API só, nos modos nativo e function mode, com uma matri
43
82
  - `$fetchMessage` e `$messages` devolvem `embeds` normalizados, com `type`, `provider`, `video`, `audio`, `nsfw` e `children` somente leitura.
44
83
  - Mudança incompatível: `MessageInfo.embeds` é obrigatório para implementações próprias de `MessagesResources`. Objetos de mensagem em script rejeitam chaves desconhecidas, que antes viravam embed sem validação. Veja [VERSIONING.md](VERSIONING.md#migrar-para-020).
45
84
  - `npm run docs:generate` gera [PARITY-MATRIX.md](docs/PARITY-MATRIX.md), que classifica cada export do SDK como coberto por script, coberto pelo código nativo, só-SDK ou lacuna. Um teste falha quando o SDK ganha export sem área.
46
- - Catálogo do function mode: de 322 para **336** funções. [FUNCTION-GAPS.md](docs/FUNCTION-GAPS.md) foi atualizado com a contagem real.
85
+ - Catálogo do function mode: de 322 para **336** funções. [FUNCTION-GAPS.md](docs/functions/FUNCTION-GAPS.md) foi atualizado com a contagem real.
47
86
 
48
87
  ## v0.1.9 · 29/10/2026
49
88
 
package/README.md CHANGED
@@ -5,9 +5,12 @@ tipados em JavaScript/TypeScript e uma linguagem opcional de scripts.
5
5
  Os dois modos compartilham permissões, moderação, estado e recursos.
6
6
 
7
7
  O Yuzuha usa **Fluxer.js 3.3.0**. Você continua tendo acesso ao client original
8
- por `bot.client` e aos exports do SDK em `yuzuha/sdk`.
8
+ por `bot.client`, aos exports do SDK em `yuzuha/sdk` e a todos os subpaths e
9
+ pacotes satélites por `yuzuha/sdk/*` (client, errors, message, cluster, internal,
10
+ types, rest, ws, builders, collection e util, além de voice e sharding como peers
11
+ opcionais).
9
12
 
10
- [0.2.0](CHANGELOG.md) · Node **22.13+** · ESM · [MIT](LICENSE)
13
+ [0.3.1](CHANGELOG.md) · Node **22.13+** · ESM · [MIT](LICENSE)
11
14
 
12
15
  [Começar](#começar) · [Comandos](#escrever-comandos) · [Recursos](#recursos) · [Testes](#testar-sem-token) · [Documentação](#documentação)
13
16
 
@@ -16,7 +19,7 @@ por `bot.client` e aos exports do SDK em `yuzuha/sdk`.
16
19
  ### Criar um bot
17
20
 
18
21
  ```sh
19
- npx yuzuha@0.2.0 init ./meu-bot --ts
22
+ npx yuzuha@0.3.1 init ./meu-bot --ts
20
23
  cd meu-bot
21
24
  npm install
22
25
  npm run check
@@ -42,7 +45,7 @@ para incluir um comando de exemplo com scripts.
42
45
  ### Usar em um projeto existente
43
46
 
44
47
  ```sh
45
- npm install yuzuha@0.2.0
48
+ npm install yuzuha@0.3.1
46
49
  ```
47
50
 
48
51
  Use `"type": "module"` no `package.json`. O [guia inicial](docs/QUICKSTART.md)
@@ -72,24 +75,28 @@ Schemas `arg.*` inferem os tipos de argumentos e flags. Você também pode decla
72
75
  subcomandos, checks e middleware. O [guia nativo](docs/NATIVE.md) cobre esses
73
76
  contratos, eventos, moderação e persistência.
74
77
 
75
- ### Function mode do Yuzuha
78
+ ### Function mode (opcional)
79
+
80
+ O function mode é opcional e isolado da raiz. Comandos com `code` e eventos de
81
+ script exigem um engine explícito:
76
82
 
77
83
  ```ts
78
- import { script } from 'yuzuha/functions';
84
+ import { functions, script } from 'yuzuha/functions';
85
+
86
+ const bot = new Yuzuha({ transport, store, engine: functions() });
79
87
 
80
- export default script({
88
+ bot.command(script({
81
89
  name: 'eco',
82
90
  description: 'Repete o texto informado.',
83
91
  code: '$reply[$messageSlice[0]]',
84
- });
92
+ }));
85
93
  ```
86
94
 
87
95
  O function mode tem **336 funções** para mensagens, guards, moderação, variáveis,
88
- JSON, arrays, loops, eventos e agendamentos. O runtime é ativado ao registrar um
89
- comando com `code` ou um evento de script.
96
+ JSON, arrays, loops, eventos e agendamentos.
90
97
 
91
98
  As funções seguem as assinaturas e regras do runtime do Yuzuha. Consulte a
92
- [linguagem](docs/LANGUAGE.md), as [assinaturas das funções](docs/FUNCTIONS.md)
99
+ [linguagem](docs/functions/LANGUAGE.md), as [assinaturas das funções](docs/functions/FUNCTIONS.md)
93
100
  e a [cobertura](docs/PARITY.md).
94
101
 
95
102
  ## Recursos
@@ -99,7 +106,8 @@ e a [cobertura](docs/PARITY.md).
99
106
  | Comandos | Prefixos, aliases, subcomandos, argumentos e flags tipadas, cooldowns e ajuda gerada dos metadados |
100
107
  | Extensões | Plugins, eventos, checks, middleware e recarga atômica de comandos |
101
108
  | Moderação | Ban, kick, timeout, unban e moderação de voz, com permissões, hierarquia e casos por servidor |
102
- | Fluxer | Usuários, membros, cargos, canais, mensagens, reações, anexos, threads, convites, webhooks e expressões |
109
+ | Fluxer | Usuários, membros, cargos, canais, mensagens com embeds, reações, anexos, threads, convites, webhooks, expressões, gateway, instância, conta autenticada e cache |
110
+ | Collectors | `collectMessages` e `collectReactions` como streams assíncronas, com tempo, limite e cancelamento |
103
111
  | Dados | Memória, JSON e SQLite; TTL, transações, limpeza e backup/restauração com simulação |
104
112
  | Agendamentos | Tarefas persistentes, cron, fusos IANA, pausa/retomada, histórico e retry |
105
113
  | HTTP | Texto, bytes, streaming e multipart, com limites, cancelamento e políticas por comando |
@@ -159,10 +167,10 @@ O [índice completo](docs/README.md) reúne os guias e as referências.
159
167
  | Criar um bot de música | [Lavalink, filas e voz Fluxer](docs/MUSIC.md) |
160
168
  | Medir performance | [Benchmarks e comparações com a 0.1.5](docs/BENCHMARKS.md) |
161
169
  | Compor cartões e imagens | [Canvas](docs/CANVAS.md) e [transformações de imagem](docs/IMAGES.md) |
162
- | Escrever scripts `$...` | [Linguagem](docs/LANGUAGE.md) e [referência de funções](docs/FUNCTIONS.md) |
170
+ | Escrever scripts `$...` | [Linguagem](docs/functions/LANGUAGE.md) e [referência de funções](docs/functions/FUNCTIONS.md) |
163
171
  | Copiar exemplos | [Receitas](docs/COOKBOOK.md) e [código de exemplo](examples) |
164
172
  | Usar o editor ou diagnosticar um erro | [VS Code](docs/EDITOR.md) e [problemas comuns](docs/TROUBLESHOOTING.md) |
165
- | Entender a cobertura | [Paridade](docs/PARITY.md) e [funções ausentes](docs/FUNCTION-GAPS.md) |
173
+ | Entender a cobertura | [Paridade](docs/PARITY.md) e [funções ausentes](docs/functions/FUNCTION-GAPS.md) |
166
174
  | Conferir mudanças e validação | [Changelog](CHANGELOG.md), [versionamento](VERSIONING.md) e [evidências](docs/VALIDATION.md) |
167
175
 
168
176
  ## Desenvolver a biblioteca
package/VERSIONING.md CHANGED
@@ -1,16 +1,16 @@
1
1
  # Versionamento
2
2
 
3
3
  O Yuzuha aplica o formato Hory ao histórico e usa **SemVer simples** no pacote.
4
- A versão desta atualização é **0.2.1**.
4
+ A versão desta atualização é **0.3.1**.
5
5
 
6
6
  ## Pacote e histórico
7
7
 
8
8
  | Lugar | Formato nesta versão |
9
9
  |---|---|
10
- | `package.json` e entrada raiz de `package-lock.json` | `0.2.1` |
11
- | Pacote npm e saída de `yuzuha --version` | `0.2.1` |
12
- | Título do changelog | `## v0.2.1 · 03/11/2026` |
13
- | Tag Git | `v0.2.1` |
10
+ | `package.json` e entrada raiz de `package-lock.json` | `0.3.1` |
11
+ | Pacote npm e saída de `yuzuha --version` | `0.3.1` |
12
+ | Título do changelog | `## v0.3.1 · 06/11/2026` |
13
+ | Tag Git | `v0.3.1` |
14
14
 
15
15
  O SDK e a CLI pertencem ao mesmo pacote. Para bibliotecas, a convenção Hory mantém
16
16
  SemVer sem `m`, sem seções por superfície e sem sufixos de canal.
@@ -31,7 +31,7 @@ novas funcionalidades compatíveis, minor; correções compatíveis, patch.
31
31
 
32
32
  Os exports públicos são `yuzuha`, `yuzuha/functions`, `yuzuha/sdk`,
33
33
  `yuzuha/sdk/*`, `yuzuha/testing`, `yuzuha/tooling`, `yuzuha/music`,
34
- `yuzuha/images` e `yuzuha/canvas`. A organização interna de `src/` não cria
34
+ `yuzuha/images`, `yuzuha/canvas` e `yuzuha/canvas/card`. A organização interna de `src/` não cria
35
35
  estabilidade de deep
36
36
  imports. Schema persistido,
37
37
  gramática e funções documentadas também fazem parte da compatibilidade.
@@ -42,6 +42,46 @@ gerado por `init` pertence ao consumidor e não precisa acompanhar a biblioteca.
42
42
 
43
43
  ## Preparar uma atualização
44
44
 
45
+ ### Migrar para 0.3.1
46
+
47
+ A 0.3.1 é aditiva com três notas de comportamento: `GuardError` ganhou
48
+ `reason` (aditivo, `code` inalterado); `ctx.mod.can*` passou a devolver
49
+ `false` quando o alvo não existe (`MEMBER_NOT_FOUND` agora é GuardError);
50
+ e `YuzuhaOptions.retry` fica LIGADO por padrão (1 tentativa, 750 ms) só
51
+ para falhas transitórias de rede — deletes, edições, reações e envios que
52
+ comprovadamente não saíram (falha de conexão), nunca erros de API, e o
53
+ 404 na retentativa de delete conta como sucesso. Adapters `Resources`
54
+ completos devem implementar os novos métodos exigidos:
55
+ `users.bannerURL`, `users.resolveBan`, `channels.lock`/`unlock` e a
56
+ opção `merge` de `channels.overwrite`.
57
+
58
+ ### Migrar para 0.3.0
59
+
60
+ As interfaces `Resources` ganharam métodos obrigatórios; quem mantém um adaptador `Resources` próprio precisa implementá-los (veja o CHANGELOG `v0.3.0` para a lista).
61
+
62
+ A 0.3.0 isola o function mode da raiz e transforma `yuzuha/canvas` na API
63
+ compatível com `@napi-rs/canvas`. Há três mudanças incompatíveis:
64
+
65
+ - `yuzuha/canvas` passa a exportar a API napi em processo (`createCanvas`,
66
+ `loadImage`, `registerFonts`, `GlobalFonts` e demais exports do peer). O
67
+ antigo builder de cartões migrou para `yuzuha/canvas/card`: troque
68
+ `import { createCanvas } from 'yuzuha/canvas'` por
69
+ `import { createCard } from 'yuzuha/canvas/card'` e renomeie a chamada.
70
+ - Comandos com `code`, eventos de script e plugins com `functions` exigem um
71
+ engine instalado: `new Yuzuha({ ..., engine: functions() })` ou
72
+ `bot.useEngine(functions())` com `functions` importado de `yuzuha/functions`.
73
+ Sem engine, o registro falha com `FUNCTIONS_REQUIRED`. A CLI injeta o engine
74
+ automaticamente, então `yuzuha.config.js` continua igual.
75
+ - `bot.runtime`, `bot.enableFunctions()` e `YuzuhaOptions.limits` foram
76
+ removidos. Use `bot.engine` (o `ScriptEngine` instalado), o engine passado nas
77
+ opções e `functions({ limits })` para limites próprios.
78
+
79
+ O schema persistido permanece em 2 e o SDK em 3.3.0; não há migração de dados.
80
+
81
+ ```sh
82
+ npm install yuzuha@0.3.0
83
+ ```
84
+
45
85
  ### Migrar para 0.2.1
46
86
 
47
87
  A 0.2.1 amplia a paridade nativa com o Fluxer.js. Os subpaths `yuzuha/sdk/*`
@@ -6,7 +6,7 @@ import { createHash } from 'node:crypto';
6
6
  import { resolve } from 'node:path';
7
7
  import { pathToFileURL } from 'node:url';
8
8
 
9
- const modules = { current: new URL('../dist/scripting/parser.js', import.meta.url) };
9
+ const modules = { current: new URL('../dist/functions/runtime/parser.js', import.meta.url) };
10
10
  for (let index = 2; index < process.argv.length; index += 2) {
11
11
  const key = { '--parser-module': 'current', '--baseline-module': 'baseline' }[process.argv[index]];
12
12
  const value = process.argv[index + 1];
@@ -3,7 +3,7 @@ import { performance } from 'node:perf_hooks';
3
3
  import { arch, cpus, platform } from 'node:os';
4
4
  import { readFile } from 'node:fs/promises';
5
5
  import { CommandContext, MemoryStore, Yuzuha } from '../dist/index.js';
6
- import { registerBuiltins, Runtime } from '../dist/functions.js';
6
+ import { functions, registerBuiltins, Runtime } from '../dist/functions.js';
7
7
  import { MockTransport, mockMessage } from '../dist/testing.js';
8
8
  import { compareReports } from './compare.mjs';
9
9
 
@@ -58,7 +58,8 @@ const bots = [];
58
58
  try {
59
59
  for (const scripted of [false, true]) {
60
60
  for (const concurrency of new Set([1, config.concurrency])) {
61
- const bot = new Yuzuha({ transport: new MockTransport(), store: new MemoryStore(), scheduler: false, http: false });
61
+ const bot = new Yuzuha({ transport: new MockTransport(), store: new MemoryStore(), scheduler: false, http: false,
62
+ engine: scripted ? functions() : undefined });
62
63
  bots.push(bot);
63
64
  bot.command(scripted ? { name: 'bench', code: '$let[x;$math[2;*;3]]' } : { name: 'bench', run() {} });
64
65
  const name = scripted ? 'dispatch/functions' : 'dispatch/native';
@@ -0,0 +1,10 @@
1
+ import { CANVAS_LIMITS } from '../domain/canvas.js';
2
+ import type { CanvasCreateOptions } from '../domain/canvas.js';
3
+ import { CanvasService } from '../services/canvas.js';
4
+ import type { CanvasBuilder, CanvasRuntimeOptions } from '../services/canvas.js';
5
+ export declare function createCard(width: number, height: number, options?: CanvasCreateOptions & CanvasRuntimeOptions): CanvasBuilder;
6
+ export { CanvasService };
7
+ export type { CanvasBuilder, CanvasRuntimeOptions, CanvasHostOptions, CanvasSendOptions } from '../services/canvas.js';
8
+ export type * from '../domain/canvas.js';
9
+ export { CANVAS_LIMITS };
10
+ //# sourceMappingURL=card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../src/canvas/card.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAgB,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAEjF,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAAmB,GAAG,oBAAyB,GACvD,aAAa,CAIf;AAED,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACvH,mBAAmB,qBAAqB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { CANVAS_LIMITS } from '../domain/canvas.js';
2
+ import { canvasRenderer } from '../infrastructure/canvas/render.js';
3
+ import { CanvasService } from '../services/canvas.js';
4
+ export function createCard(width, height, options = {}) {
5
+ const { scale, background, signal, http, assets, fonts, timeoutMs } = options;
6
+ const service = new CanvasService({ renderer: canvasRenderer, signal, http, assets, fonts, timeoutMs });
7
+ return service.create(width, height, { scale, background });
8
+ }
9
+ export { CanvasService };
10
+ export { CANVAS_LIMITS };
11
+ //# sourceMappingURL=card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.js","sourceRoot":"","sources":["../../src/canvas/card.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,MAAM,UAAU,UAAU,CACxB,KAAa,EACb,MAAc,EACd,UAAsD,EAAE;IAExD,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9E,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACxG,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC;AAGzB,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import { CANVAS_LIMITS } from '../domain/canvas.js';\nimport type { CanvasConfig, CanvasCreateOptions } from '../domain/canvas.js';\nimport { canvasRenderer } from '../infrastructure/canvas/render.js';\nimport { CanvasService } from '../services/canvas.js';\nimport type { CanvasBuilder, CanvasRuntimeOptions } from '../services/canvas.js';\n\nexport function createCard(\n width: number,\n height: number,\n options: CanvasCreateOptions & CanvasRuntimeOptions = {},\n): CanvasBuilder {\n const { scale, background, signal, http, assets, fonts, timeoutMs } = options;\n const service = new CanvasService({ renderer: canvasRenderer, signal, http, assets, fonts, timeoutMs });\n return service.create(width, height, { scale, background });\n}\n\nexport { CanvasService };\nexport type { CanvasBuilder, CanvasRuntimeOptions, CanvasHostOptions, CanvasSendOptions } from '../services/canvas.js';\nexport type * from '../domain/canvas.js';\nexport { CANVAS_LIMITS };\n"]}
package/dist/canvas.d.ts CHANGED
@@ -1,10 +1,31 @@
1
- import { CANVAS_LIMITS } from './domain/canvas.js';
2
- import type { CanvasCreateOptions } from './domain/canvas.js';
3
- import { CanvasService } from './services/canvas.js';
4
- import type { CanvasBuilder, CanvasRuntimeOptions } from './services/canvas.js';
5
- export declare function createCanvas(width: number, height: number, options?: CanvasCreateOptions & CanvasRuntimeOptions): CanvasBuilder;
6
- export { CanvasService };
7
- export type { CanvasBuilder, CanvasRuntimeOptions, CanvasHostOptions, CanvasSendOptions } from './services/canvas.js';
8
- export type * from './domain/canvas.js';
9
- export { CANVAS_LIMITS };
1
+ import type { CanvasLoadImageOptions, CanvasLoadImageSource } from './services/canvas-image.js';
2
+ export type { CanvasLoadImageOptions };
3
+ export type * from '@napi-rs/canvas';
4
+ export declare const Canvas: typeof import("@napi-rs/canvas").Canvas;
5
+ export declare const Image: typeof import("@napi-rs/canvas").Image;
6
+ export declare const Path2D: typeof import("@napi-rs/canvas").Path2D;
7
+ export declare const ImageData: typeof import("@napi-rs/canvas").ImageData;
8
+ export declare const DOMMatrix: typeof import("@napi-rs/canvas").DOMMatrix;
9
+ export declare const DOMRect: typeof import("@napi-rs/canvas").DOMRect;
10
+ export declare const DOMPoint: typeof import("@napi-rs/canvas").DOMPoint;
11
+ export declare const FontKey: typeof import("@napi-rs/canvas").FontKey;
12
+ export declare const PDFDocument: typeof import("@napi-rs/canvas").PDFDocument;
13
+ export declare const GifEncoder: typeof import("@napi-rs/canvas").GifEncoder;
14
+ export declare const LottieAnimation: typeof import("@napi-rs/canvas").LottieAnimation;
15
+ export declare const GlobalFonts: typeof import("@napi-rs/canvas").GlobalFonts;
16
+ export declare const PathOp: typeof import("@napi-rs/canvas").PathOp;
17
+ export declare const FillType: typeof import("@napi-rs/canvas").FillType;
18
+ export declare const StrokeCap: typeof import("@napi-rs/canvas").StrokeCap;
19
+ export declare const StrokeJoin: typeof import("@napi-rs/canvas").StrokeJoin;
20
+ export declare const SvgExportFlag: typeof import("@napi-rs/canvas").SvgExportFlag;
21
+ export declare const GifDisposal: typeof import("@napi-rs/canvas").GifDisposal;
22
+ export declare const ChromaSubsampling: typeof import("@napi-rs/canvas").ChromaSubsampling;
23
+ export declare const SVGCanvas: any;
24
+ export declare const CanvasElement: any;
25
+ export declare function createCanvas(width: number, height: number): import('@napi-rs/canvas').Canvas;
26
+ export declare function createCanvas(width: number, height: number, svgExportFlag: import('@napi-rs/canvas').SvgExportFlag): import('@napi-rs/canvas').SvgCanvas;
27
+ export declare function loadImage(source: CanvasLoadImageSource, options?: CanvasLoadImageOptions): Promise<import('@napi-rs/canvas').Image>;
28
+ export declare function clearAllCache(): void;
29
+ export declare function convertSVGTextToPath(svg: Buffer | string): Buffer;
30
+ export declare function registerFonts(dir: string): number;
10
31
  //# sourceMappingURL=canvas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../src/canvas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAgB,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE5E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEhF,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAAmB,GAAG,oBAAyB,GACvD,aAAa,CAIf;AAED,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACtH,mBAAmB,oBAAoB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../src/canvas.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGhG,YAAY,EAAE,sBAAsB,EAAE,CAAC;AACvC,mBAAmB,iBAAiB,CAAC;AAUrC,eAAO,MAAM,MAAM,EAAkC,cAAc,iBAAiB,EAAE,MAAM,CAAC;AAC7F,eAAO,MAAM,KAAK,EAAiC,cAAc,iBAAiB,EAAE,KAAK,CAAC;AAC1F,eAAO,MAAM,MAAM,EAAkC,cAAc,iBAAiB,EAAE,MAAM,CAAC;AAC7F,eAAO,MAAM,SAAS,EAAqC,cAAc,iBAAiB,EAAE,SAAS,CAAC;AACtG,eAAO,MAAM,SAAS,EAAqC,cAAc,iBAAiB,EAAE,SAAS,CAAC;AACtG,eAAO,MAAM,OAAO,EAAmC,cAAc,iBAAiB,EAAE,OAAO,CAAC;AAChG,eAAO,MAAM,QAAQ,EAAoC,cAAc,iBAAiB,EAAE,QAAQ,CAAC;AACnG,eAAO,MAAM,OAAO,EAAmC,cAAc,iBAAiB,EAAE,OAAO,CAAC;AAChG,eAAO,MAAM,WAAW,EAAuC,cAAc,iBAAiB,EAAE,WAAW,CAAC;AAC5G,eAAO,MAAM,UAAU,EAAsC,cAAc,iBAAiB,EAAE,UAAU,CAAC;AACzG,eAAO,MAAM,eAAe,EAA2C,cAAc,iBAAiB,EAAE,eAAe,CAAC;AACxH,eAAO,MAAM,WAAW,EAAuC,cAAc,iBAAiB,EAAE,WAAW,CAAC;AAC5G,eAAO,MAAM,MAAM,EAAkC,cAAc,iBAAiB,EAAE,MAAM,CAAC;AAC7F,eAAO,MAAM,QAAQ,EAAoC,cAAc,iBAAiB,EAAE,QAAQ,CAAC;AACnG,eAAO,MAAM,SAAS,EAAqC,cAAc,iBAAiB,EAAE,SAAS,CAAC;AACtG,eAAO,MAAM,UAAU,EAAsC,cAAc,iBAAiB,EAAE,UAAU,CAAC;AACzG,eAAO,MAAM,aAAa,EAAyC,cAAc,iBAAiB,EAAE,aAAa,CAAC;AAClH,eAAO,MAAM,WAAW,EAAuC,cAAc,iBAAiB,EAAE,WAAW,CAAC;AAC5G,eAAO,MAAM,iBAAiB,EAA6C,cAAc,iBAAiB,EAAE,iBAAiB,CAAC;AAC9H,eAAO,MAAM,SAAS,EAAE,GAA2C,CAAC;AACpE,eAAO,MAAM,aAAa,EAAE,GAA+C,CAAC;AAE5E,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,iBAAiB,EAAE,MAAM,CAAC;AAC9F,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,iBAAiB,EAAE,aAAa,GAAG,OAAO,iBAAiB,EAAE,SAAS,CAAC;AAazJ,wBAAsB,SAAS,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,OAAO,iBAAiB,EAAE,KAAK,CAAC,CAG7I;AAED,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAGjE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGjD"}
package/dist/canvas.js CHANGED
@@ -1,11 +1,66 @@
1
1
  import { CANVAS_LIMITS } from './domain/canvas.js';
2
- import { canvasRenderer } from './infrastructure/canvas/render.js';
3
- import { CanvasService } from './services/canvas.js';
4
- export function createCanvas(width, height, options = {}) {
5
- const { scale, background, signal, http, assets, fonts, timeoutMs } = options;
6
- const service = new CanvasService({ renderer: canvasRenderer, signal, http, assets, fonts, timeoutMs });
7
- return service.create(width, height, { scale, background });
8
- }
9
- export { CanvasService };
10
- export { CANVAS_LIMITS };
2
+ import { canvasDependency, napi } from './infrastructure/canvas/napi.js';
3
+ import { loadCanvasImage, registerCanvasFonts } from './services/canvas-image.js';
4
+ import { YuzuhaError } from './shared/errors.js';
5
+ const missing = () => new Proxy(function () { throw canvasDependency(); }, {
6
+ get(target, property) {
7
+ if (property === 'prototype')
8
+ return target.prototype;
9
+ throw canvasDependency();
10
+ },
11
+ construct() { throw canvasDependency(); },
12
+ });
13
+ export const Canvas = (napi?.Canvas ?? missing());
14
+ export const Image = (napi?.Image ?? missing());
15
+ export const Path2D = (napi?.Path2D ?? missing());
16
+ export const ImageData = (napi?.ImageData ?? missing());
17
+ export const DOMMatrix = (napi?.DOMMatrix ?? missing());
18
+ export const DOMRect = (napi?.DOMRect ?? missing());
19
+ export const DOMPoint = (napi?.DOMPoint ?? missing());
20
+ export const FontKey = (napi?.FontKey ?? missing());
21
+ export const PDFDocument = (napi?.PDFDocument ?? missing());
22
+ export const GifEncoder = (napi?.GifEncoder ?? missing());
23
+ export const LottieAnimation = (napi?.LottieAnimation ?? missing());
24
+ export const GlobalFonts = (napi?.GlobalFonts ?? missing());
25
+ export const PathOp = (napi?.PathOp ?? missing());
26
+ export const FillType = (napi?.FillType ?? missing());
27
+ export const StrokeCap = (napi?.StrokeCap ?? missing());
28
+ export const StrokeJoin = (napi?.StrokeJoin ?? missing());
29
+ export const SvgExportFlag = (napi?.SvgExportFlag ?? missing());
30
+ export const GifDisposal = (napi?.GifDisposal ?? missing());
31
+ export const ChromaSubsampling = (napi?.ChromaSubsampling ?? missing());
32
+ export const SVGCanvas = napi?.SVGCanvas ?? missing();
33
+ export const CanvasElement = napi?.CanvasElement ?? missing();
34
+ export function createCanvas(width, height, svgExportFlag) {
35
+ if (!Number.isSafeInteger(width) || !Number.isSafeInteger(height) || width < 1 || height < 1) {
36
+ throw new YuzuhaError('CANVAS_OPTIONS', 'Largura e altura devem ser inteiros positivos.');
37
+ }
38
+ if (width > CANVAS_LIMITS.maxPhysicalDimension || height > CANVAS_LIMITS.maxPhysicalDimension
39
+ || width * height > CANVAS_LIMITS.maxPixels) {
40
+ throw new YuzuhaError('CANVAS_OPTIONS', 'Dimensões físicas excedem os limites do Canvas.');
41
+ }
42
+ if (!napi)
43
+ throw canvasDependency();
44
+ return svgExportFlag === undefined ? napi.createCanvas(width, height) : napi.createCanvas(width, height, svgExportFlag);
45
+ }
46
+ export async function loadImage(source, options = {}) {
47
+ if (!napi)
48
+ throw canvasDependency();
49
+ return loadCanvasImage(napi, source, options);
50
+ }
51
+ export function clearAllCache() {
52
+ if (!napi)
53
+ throw canvasDependency();
54
+ napi.clearAllCache();
55
+ }
56
+ export function convertSVGTextToPath(svg) {
57
+ if (!napi)
58
+ throw canvasDependency();
59
+ return napi.convertSVGTextToPath(svg);
60
+ }
61
+ export function registerFonts(dir) {
62
+ if (!napi)
63
+ throw canvasDependency();
64
+ return registerCanvasFonts(napi, dir);
65
+ }
11
66
  //# sourceMappingURL=canvas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvas.js","sourceRoot":"","sources":["../src/canvas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,UAAU,YAAY,CAC1B,KAAa,EACb,MAAc,EACd,UAAsD,EAAE;IAExD,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9E,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACxG,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC;AAGzB,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import { CANVAS_LIMITS } from './domain/canvas.js';\nimport type { CanvasConfig, CanvasCreateOptions } from './domain/canvas.js';\nimport { canvasRenderer } from './infrastructure/canvas/render.js';\nimport { CanvasService } from './services/canvas.js';\nimport type { CanvasBuilder, CanvasRuntimeOptions } from './services/canvas.js';\n\nexport function createCanvas(\n width: number,\n height: number,\n options: CanvasCreateOptions & CanvasRuntimeOptions = {},\n): CanvasBuilder {\n const { scale, background, signal, http, assets, fonts, timeoutMs } = options;\n const service = new CanvasService({ renderer: canvasRenderer, signal, http, assets, fonts, timeoutMs });\n return service.create(width, height, { scale, background });\n}\n\nexport { CanvasService };\nexport type { CanvasBuilder, CanvasRuntimeOptions, CanvasHostOptions, CanvasSendOptions } from './services/canvas.js';\nexport type * from './domain/canvas.js';\nexport { CANVAS_LIMITS };\n"]}
1
+ {"version":3,"file":"canvas.js","sourceRoot":"","sources":["../src/canvas.ts"],"names":[],"mappings":"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","sourcesContent":["import { CANVAS_LIMITS } from './domain/canvas.js';\nimport { canvasDependency, napi } from './infrastructure/canvas/napi.js';\nimport { loadCanvasImage, registerCanvasFonts } from './services/canvas-image.js';\nimport type { CanvasLoadImageOptions, CanvasLoadImageSource } from './services/canvas-image.js';\nimport { YuzuhaError } from './shared/errors.js';\n\nexport type { CanvasLoadImageOptions };\nexport type * from '@napi-rs/canvas';\n\nconst missing = () => new Proxy(function () { throw canvasDependency(); }, {\n get(target, property) {\n if (property === 'prototype') return target.prototype;\n throw canvasDependency();\n },\n construct() { throw canvasDependency(); },\n});\n\nexport const Canvas = (napi?.Canvas ?? missing()) as typeof import('@napi-rs/canvas').Canvas;\nexport const Image = (napi?.Image ?? missing()) as typeof import('@napi-rs/canvas').Image;\nexport const Path2D = (napi?.Path2D ?? missing()) as typeof import('@napi-rs/canvas').Path2D;\nexport const ImageData = (napi?.ImageData ?? missing()) as typeof import('@napi-rs/canvas').ImageData;\nexport const DOMMatrix = (napi?.DOMMatrix ?? missing()) as typeof import('@napi-rs/canvas').DOMMatrix;\nexport const DOMRect = (napi?.DOMRect ?? missing()) as typeof import('@napi-rs/canvas').DOMRect;\nexport const DOMPoint = (napi?.DOMPoint ?? missing()) as typeof import('@napi-rs/canvas').DOMPoint;\nexport const FontKey = (napi?.FontKey ?? missing()) as typeof import('@napi-rs/canvas').FontKey;\nexport const PDFDocument = (napi?.PDFDocument ?? missing()) as typeof import('@napi-rs/canvas').PDFDocument;\nexport const GifEncoder = (napi?.GifEncoder ?? missing()) as typeof import('@napi-rs/canvas').GifEncoder;\nexport const LottieAnimation = (napi?.LottieAnimation ?? missing()) as typeof import('@napi-rs/canvas').LottieAnimation;\nexport const GlobalFonts = (napi?.GlobalFonts ?? missing()) as typeof import('@napi-rs/canvas').GlobalFonts;\nexport const PathOp = (napi?.PathOp ?? missing()) as typeof import('@napi-rs/canvas').PathOp;\nexport const FillType = (napi?.FillType ?? missing()) as typeof import('@napi-rs/canvas').FillType;\nexport const StrokeCap = (napi?.StrokeCap ?? missing()) as typeof import('@napi-rs/canvas').StrokeCap;\nexport const StrokeJoin = (napi?.StrokeJoin ?? missing()) as typeof import('@napi-rs/canvas').StrokeJoin;\nexport const SvgExportFlag = (napi?.SvgExportFlag ?? missing()) as typeof import('@napi-rs/canvas').SvgExportFlag;\nexport const GifDisposal = (napi?.GifDisposal ?? missing()) as typeof import('@napi-rs/canvas').GifDisposal;\nexport const ChromaSubsampling = (napi?.ChromaSubsampling ?? missing()) as typeof import('@napi-rs/canvas').ChromaSubsampling;\nexport const SVGCanvas: any = (napi as any)?.SVGCanvas ?? missing();\nexport const CanvasElement: any = (napi as any)?.CanvasElement ?? missing();\n\nexport function createCanvas(width: number, height: number): import('@napi-rs/canvas').Canvas;\nexport function createCanvas(width: number, height: number, svgExportFlag: import('@napi-rs/canvas').SvgExportFlag): import('@napi-rs/canvas').SvgCanvas;\nexport function createCanvas(width: number, height: number, svgExportFlag?: import('@napi-rs/canvas').SvgExportFlag) {\n if (!Number.isSafeInteger(width) || !Number.isSafeInteger(height) || width < 1 || height < 1) {\n throw new YuzuhaError('CANVAS_OPTIONS', 'Largura e altura devem ser inteiros positivos.');\n }\n if (width > CANVAS_LIMITS.maxPhysicalDimension || height > CANVAS_LIMITS.maxPhysicalDimension\n || width * height > CANVAS_LIMITS.maxPixels) {\n throw new YuzuhaError('CANVAS_OPTIONS', 'Dimensões físicas excedem os limites do Canvas.');\n }\n if (!napi) throw canvasDependency();\n return svgExportFlag === undefined ? napi.createCanvas(width, height) : napi.createCanvas(width, height, svgExportFlag);\n}\n\nexport async function loadImage(source: CanvasLoadImageSource, options: CanvasLoadImageOptions = {}): Promise<import('@napi-rs/canvas').Image> {\n if (!napi) throw canvasDependency();\n return loadCanvasImage(napi, source, options);\n}\n\nexport function clearAllCache(): void {\n if (!napi) throw canvasDependency();\n napi.clearAllCache();\n}\n\nexport function convertSVGTextToPath(svg: Buffer | string): Buffer {\n if (!napi) throw canvasDependency();\n return napi.convertSVGTextToPath(svg);\n}\n\nexport function registerFonts(dir: string): number {\n if (!napi) throw canvasDependency();\n return registerCanvasFonts(napi, dir);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAInC,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG3D;AAED,wBAAsB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMhE;AAED,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAItE;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,UAAO,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAkB3I"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAKnC,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG3D;AAED,wBAAsB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMhE;AAED,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAItE;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,UAAO,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAkB3I"}
@@ -4,6 +4,7 @@ import { pathToFileURL } from 'node:url';
4
4
  import { parseEnv } from 'node:util';
5
5
  import { importModule } from '../framework/module-loader.js';
6
6
  import { Yuzuha } from '../bot.js';
7
+ import { functions } from '../functions.js';
7
8
  import { YuzuhaError } from '../errors.js';
8
9
  export async function exists(path) {
9
10
  try {
@@ -42,7 +43,7 @@ export async function configuredBot(path, environment, loadCommands = true) {
42
43
  const config = module.default;
43
44
  if ((config.commands !== undefined && typeof config.commands !== 'string') || (config.setup !== undefined && typeof config.setup !== 'function'))
44
45
  throw new YuzuhaError('CONFIG_INVALID', 'commands deve ser texto e setup deve ser uma função.');
45
- const bot = new Yuzuha(config);
46
+ const bot = new Yuzuha({ ...config, engine: config.engine ?? functions() });
46
47
  try {
47
48
  await config.setup?.(bot);
48
49
  const commandsPath = resolve(directory, config.commands ?? 'commands');
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile, stat } from 'node:fs/promises';\nimport { dirname, join, resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { parseEnv } from 'node:util';\nimport { importModule } from '../framework/module-loader.js';\nimport { Yuzuha } from '../bot.js';\nimport type { YuzuhaConfig } from '../config.js';\nimport { YuzuhaError } from '../errors.js';\n\nexport async function exists(path: string): Promise<boolean> {\n try { await stat(path); return true; }\n catch (error) { if ((error as NodeJS.ErrnoException).code === 'ENOENT') return false; throw error; }\n}\n\nexport async function findConfig(input?: string): Promise<string> {\n if (input) return resolve(input);\n for (const file of ['yuzuha.config.ts', 'yuzuha.config.js', 'yuzuha.config.mjs']) {\n if (await exists(file)) return resolve(file);\n }\n throw new YuzuhaError('CONFIG_MISSING', 'Config não encontrada. Execute yuzuha init meu-bot ou informe o caminho.');\n}\n\nexport async function loadEnvironment(directory: string): Promise<void> {\n const path = join(directory, '.env');\n if (!(await exists(path))) return;\n for (const [key, value] of Object.entries(parseEnv(await readFile(path, 'utf8')))) process.env[key] ??= value;\n}\n\nexport async function configuredBot(path: string, environment: boolean, loadCommands = true): Promise<{ bot: Yuzuha; commandsPath: string }> {\n const directory = dirname(path);\n if (environment) await loadEnvironment(directory);\n const module = await importModule(pathToFileURL(path).href);\n if (!module.default || typeof module.default !== 'object' || Array.isArray(module.default)) throw new YuzuhaError('CONFIG_INVALID', 'Config deve exportar um objeto default.');\n const config = module.default as YuzuhaConfig;\n if ((config.commands !== undefined && typeof config.commands !== 'string') || (config.setup !== undefined && typeof config.setup !== 'function')) throw new YuzuhaError('CONFIG_INVALID', 'commands deve ser texto e setup deve ser uma função.');\n const bot = new Yuzuha(config);\n try {\n await config.setup?.(bot);\n const commandsPath = resolve(directory, config.commands ?? 'commands');\n if (loadCommands) await bot.load(commandsPath, false);\n return { bot, commandsPath };\n } catch (error) {\n await bot.destroy();\n await config.store?.close?.();\n throw error;\n }\n}\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile, stat } from 'node:fs/promises';\nimport { dirname, join, resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { parseEnv } from 'node:util';\nimport { importModule } from '../framework/module-loader.js';\nimport { Yuzuha } from '../bot.js';\nimport { functions } from '../functions.js';\nimport type { YuzuhaConfig } from '../config.js';\nimport { YuzuhaError } from '../errors.js';\n\nexport async function exists(path: string): Promise<boolean> {\n try { await stat(path); return true; }\n catch (error) { if ((error as NodeJS.ErrnoException).code === 'ENOENT') return false; throw error; }\n}\n\nexport async function findConfig(input?: string): Promise<string> {\n if (input) return resolve(input);\n for (const file of ['yuzuha.config.ts', 'yuzuha.config.js', 'yuzuha.config.mjs']) {\n if (await exists(file)) return resolve(file);\n }\n throw new YuzuhaError('CONFIG_MISSING', 'Config não encontrada. Execute yuzuha init meu-bot ou informe o caminho.');\n}\n\nexport async function loadEnvironment(directory: string): Promise<void> {\n const path = join(directory, '.env');\n if (!(await exists(path))) return;\n for (const [key, value] of Object.entries(parseEnv(await readFile(path, 'utf8')))) process.env[key] ??= value;\n}\n\nexport async function configuredBot(path: string, environment: boolean, loadCommands = true): Promise<{ bot: Yuzuha; commandsPath: string }> {\n const directory = dirname(path);\n if (environment) await loadEnvironment(directory);\n const module = await importModule(pathToFileURL(path).href);\n if (!module.default || typeof module.default !== 'object' || Array.isArray(module.default)) throw new YuzuhaError('CONFIG_INVALID', 'Config deve exportar um objeto default.');\n const config = module.default as YuzuhaConfig;\n if ((config.commands !== undefined && typeof config.commands !== 'string') || (config.setup !== undefined && typeof config.setup !== 'function')) throw new YuzuhaError('CONFIG_INVALID', 'commands deve ser texto e setup deve ser uma função.');\n const bot = new Yuzuha({ ...config, engine: config.engine ?? functions() });\n try {\n await config.setup?.(bot);\n const commandsPath = resolve(directory, config.commands ?? 'commands');\n if (loadCommands) await bot.load(commandsPath, false);\n return { bot, commandsPath };\n } catch (error) {\n await bot.destroy();\n await config.store?.close?.();\n throw error;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/cli/lint.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEjF,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,CAAC,gBAAgB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;CACtD;AAOD,wBAAsB,cAAc,CAAC,YAAY,GAAE,SAAS,MAAM,EAAO,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAYtG;AAED,wEAAwE;AACxE,wBAAsB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,GAAE,SAAS,MAAM,EAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAiCnG"}
1
+ {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/cli/lint.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEjF,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,CAAC,gBAAgB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;CACtD;AAOD,wBAAsB,cAAc,CAAC,YAAY,GAAE,SAAS,MAAM,EAAO,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAYtG;AAED,wEAAwE;AACxE,wBAAsB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,GAAE,SAAS,MAAM,EAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAiCnG"}
package/dist/cli/lint.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import { lstat, readFile, readdir } from 'node:fs/promises';
2
2
  import { extname, join, resolve } from 'node:path';
3
- import { registerBuiltins } from '../functions.js';
4
- import { Runtime } from '../runtime.js';
3
+ import { registerBuiltins, Runtime } from '../functions.js';
5
4
  import { YuzuhaError } from '../errors.js';
6
5
  import { documentDiagnostics, mergeFunctionCatalogs, parseFunctionCatalog } from '../tooling/language.js';
7
6
  const extensions = new Map([
@@ -1 +1 @@
1
- {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/cli/lint.ts"],"names":[],"mappings":"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","sourcesContent":["import { lstat, readFile, readdir } from 'node:fs/promises';\nimport { extname, join, resolve } from 'node:path';\nimport { registerBuiltins } from '../functions.js';\nimport { Runtime } from '../runtime.js';\nimport { YuzuhaError } from '../errors.js';\nimport { documentDiagnostics, mergeFunctionCatalogs, parseFunctionCatalog } from '../tooling/language.js';\nimport type { FunctionMetadata, ScriptDiagnostic } from '../tooling/language.js';\n\nexport interface LintReport {\n valid: boolean;\n offline: true;\n files: number;\n diagnostics: (ScriptDiagnostic & { file: string })[];\n}\nconst extensions = new Map([\n ['.yz', 'yuzuha'], ['.yuzuha', 'yuzuha'], ['.js', 'javascript'], ['.mjs', 'javascript'], ['.cjs', 'javascript'],\n ['.ts', 'typescript'], ['.mts', 'typescript'], ['.cts', 'typescript'], ['.jsx', 'javascriptreact'], ['.tsx', 'typescriptreact'],\n]);\nconst ignored = new Set(['node_modules', '.git', 'dist', 'coverage', 'artifacts']);\n\nexport async function builtinCatalog(catalogPaths: readonly string[] = []): Promise<FunctionMetadata[]> {\n if (catalogPaths.length > 16) throw new YuzuhaError('LINT_CATALOG', 'Informe até 16 catálogos.');\n const builtins = registerBuiltins(new Runtime()).functions().map(({ execute: _execute, ...fn }) => fn);\n const catalogs = await Promise.all(catalogPaths.map(async path => {\n try {\n const info = await lstat(resolve(path));\n if (!info.isFile() || info.size > 2_000_000) throw new Error('Catálogo deve ser arquivo JSON de até 2000000 bytes.');\n return parseFunctionCatalog(await readFile(resolve(path), 'utf8'));\n } catch (cause) { throw new YuzuhaError('LINT_CATALOG', 'Não foi possível validar o catálogo JSON.', { cause }); }\n }));\n try { return mergeFunctionCatalogs(builtins, ...catalogs); }\n catch (cause) { throw new YuzuhaError('LINT_CATALOG', 'Catálogos possuem funções ou aliases duplicados.', { cause }); }\n}\n\n/** Inspects text only. Target files and catalogs are never imported. */\nexport async function lint(input: string, catalogPaths: readonly string[] = []): Promise<LintReport> {\n const catalog = await builtinCatalog(catalogPaths), files: string[] = [];\n async function collect(path: string, depth: number): Promise<void> {\n if (depth > 32) throw new YuzuhaError('LINT_LIMIT', 'Diretório excede 32 níveis.');\n const info = await lstat(path);\n if (info.isSymbolicLink()) return;\n if (info.isDirectory()) {\n const entries = await readdir(path, { withFileTypes: true });\n if (entries.length > 10_000) throw new YuzuhaError('LINT_LIMIT', 'Diretório excede 10000 entradas.');\n for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {\n if (!ignored.has(entry.name) && !entry.isSymbolicLink()) await collect(join(path, entry.name), depth + 1);\n }\n } else if (info.isFile() && extensions.has(extname(path)) && !/\\.d\\.(?:ts|mts|cts)$/.test(path)) {\n if (info.size > 2_000_000) throw new YuzuhaError('LINT_LIMIT', 'Arquivo excede 2000000 bytes.');\n files.push(path);\n if (files.length > 1000) throw new YuzuhaError('LINT_LIMIT', 'Lint aceita até 1000 arquivos por chamada.');\n }\n }\n const root = resolve(input), info = await lstat(root);\n if (info.isSymbolicLink() || (!info.isDirectory() && (!info.isFile() || !extensions.has(extname(root))))) {\n throw new YuzuhaError('LINT_INPUT', 'Informe um arquivo de script/JS/TS ou diretório, sem link simbólico.');\n }\n await collect(root, 0);\n const diagnostics: LintReport['diagnostics'] = [];\n let bytes = 0;\n for (const file of files) {\n const source = await readFile(file, 'utf8');\n bytes += Buffer.byteLength(source);\n if (source.length > 2_000_000 || bytes > 20_000_000) throw new YuzuhaError('LINT_LIMIT', 'Lint excede o limite de leitura de arquivos.');\n diagnostics.push(...documentDiagnostics(source, extensions.get(extname(file))!, catalog).map(value => ({ file, ...value })));\n if (diagnostics.length > 10_000) throw new YuzuhaError('LINT_LIMIT', 'Lint excede 10000 diagnósticos.');\n }\n return { valid: diagnostics.length === 0, offline: true, files: files.length, diagnostics };\n}\n"]}
1
+ {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/cli/lint.ts"],"names":[],"mappings":"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","sourcesContent":["import { lstat, readFile, readdir } from 'node:fs/promises';\nimport { extname, join, resolve } from 'node:path';\nimport { registerBuiltins, Runtime } from '../functions.js';\nimport { YuzuhaError } from '../errors.js';\nimport { documentDiagnostics, mergeFunctionCatalogs, parseFunctionCatalog } from '../tooling/language.js';\nimport type { FunctionMetadata, ScriptDiagnostic } from '../tooling/language.js';\n\nexport interface LintReport {\n valid: boolean;\n offline: true;\n files: number;\n diagnostics: (ScriptDiagnostic & { file: string })[];\n}\nconst extensions = new Map([\n ['.yz', 'yuzuha'], ['.yuzuha', 'yuzuha'], ['.js', 'javascript'], ['.mjs', 'javascript'], ['.cjs', 'javascript'],\n ['.ts', 'typescript'], ['.mts', 'typescript'], ['.cts', 'typescript'], ['.jsx', 'javascriptreact'], ['.tsx', 'typescriptreact'],\n]);\nconst ignored = new Set(['node_modules', '.git', 'dist', 'coverage', 'artifacts']);\n\nexport async function builtinCatalog(catalogPaths: readonly string[] = []): Promise<FunctionMetadata[]> {\n if (catalogPaths.length > 16) throw new YuzuhaError('LINT_CATALOG', 'Informe até 16 catálogos.');\n const builtins = registerBuiltins(new Runtime()).functions().map(({ execute: _execute, ...fn }) => fn);\n const catalogs = await Promise.all(catalogPaths.map(async path => {\n try {\n const info = await lstat(resolve(path));\n if (!info.isFile() || info.size > 2_000_000) throw new Error('Catálogo deve ser arquivo JSON de até 2000000 bytes.');\n return parseFunctionCatalog(await readFile(resolve(path), 'utf8'));\n } catch (cause) { throw new YuzuhaError('LINT_CATALOG', 'Não foi possível validar o catálogo JSON.', { cause }); }\n }));\n try { return mergeFunctionCatalogs(builtins, ...catalogs); }\n catch (cause) { throw new YuzuhaError('LINT_CATALOG', 'Catálogos possuem funções ou aliases duplicados.', { cause }); }\n}\n\n/** Inspects text only. Target files and catalogs are never imported. */\nexport async function lint(input: string, catalogPaths: readonly string[] = []): Promise<LintReport> {\n const catalog = await builtinCatalog(catalogPaths), files: string[] = [];\n async function collect(path: string, depth: number): Promise<void> {\n if (depth > 32) throw new YuzuhaError('LINT_LIMIT', 'Diretório excede 32 níveis.');\n const info = await lstat(path);\n if (info.isSymbolicLink()) return;\n if (info.isDirectory()) {\n const entries = await readdir(path, { withFileTypes: true });\n if (entries.length > 10_000) throw new YuzuhaError('LINT_LIMIT', 'Diretório excede 10000 entradas.');\n for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {\n if (!ignored.has(entry.name) && !entry.isSymbolicLink()) await collect(join(path, entry.name), depth + 1);\n }\n } else if (info.isFile() && extensions.has(extname(path)) && !/\\.d\\.(?:ts|mts|cts)$/.test(path)) {\n if (info.size > 2_000_000) throw new YuzuhaError('LINT_LIMIT', 'Arquivo excede 2000000 bytes.');\n files.push(path);\n if (files.length > 1000) throw new YuzuhaError('LINT_LIMIT', 'Lint aceita até 1000 arquivos por chamada.');\n }\n }\n const root = resolve(input), info = await lstat(root);\n if (info.isSymbolicLink() || (!info.isDirectory() && (!info.isFile() || !extensions.has(extname(root))))) {\n throw new YuzuhaError('LINT_INPUT', 'Informe um arquivo de script/JS/TS ou diretório, sem link simbólico.');\n }\n await collect(root, 0);\n const diagnostics: LintReport['diagnostics'] = [];\n let bytes = 0;\n for (const file of files) {\n const source = await readFile(file, 'utf8');\n bytes += Buffer.byteLength(source);\n if (source.length > 2_000_000 || bytes > 20_000_000) throw new YuzuhaError('LINT_LIMIT', 'Lint excede o limite de leitura de arquivos.');\n diagnostics.push(...documentDiagnostics(source, extensions.get(extname(file))!, catalog).map(value => ({ file, ...value })));\n if (diagnostics.length > 10_000) throw new YuzuhaError('LINT_LIMIT', 'Lint excede 10000 diagnósticos.');\n }\n return { valid: diagnostics.length === 0, offline: true, files: files.length, diagnostics };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAkBA,wBAAsB,IAAI,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyEtE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAQpE"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAiBA,wBAAsB,IAAI,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyEtE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAQpE"}