yuzuha 0.2.0 → 0.3.0

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 (692) hide show
  1. package/CHANGELOG.md +29 -1
  2. package/README.md +22 -14
  3. package/VERSIONING.md +56 -7
  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/context.d.ts.map +1 -1
  29. package/dist/commands/context.js +7 -2
  30. package/dist/commands/context.js.map +1 -1
  31. package/dist/domain/resource-batches.d.ts +6 -0
  32. package/dist/domain/resource-batches.d.ts.map +1 -1
  33. package/dist/domain/resource-batches.js +31 -0
  34. package/dist/domain/resource-batches.js.map +1 -1
  35. package/dist/framework/bot.d.ts +9 -5
  36. package/dist/framework/bot.d.ts.map +1 -1
  37. package/dist/framework/bot.js +51 -27
  38. package/dist/framework/bot.js.map +1 -1
  39. package/dist/framework/command-registry.d.ts +8 -7
  40. package/dist/framework/command-registry.d.ts.map +1 -1
  41. package/dist/framework/command-registry.js +14 -11
  42. package/dist/framework/command-registry.js.map +1 -1
  43. package/dist/framework/options.d.ts +3 -3
  44. package/dist/framework/options.d.ts.map +1 -1
  45. package/dist/framework/options.js.map +1 -1
  46. package/dist/{scripting → functions}/builtins/arguments.d.ts.map +1 -1
  47. package/dist/{scripting → functions}/builtins/arguments.js.map +1 -1
  48. package/dist/functions/builtins/canvas.d.ts +2 -0
  49. package/dist/functions/builtins/canvas.d.ts.map +1 -0
  50. package/dist/{scripting → functions}/builtins/canvas.js +1 -1
  51. package/dist/{scripting → functions}/builtins/canvas.js.map +1 -1
  52. package/dist/functions/builtins/context.d.ts +2 -0
  53. package/dist/functions/builtins/context.d.ts.map +1 -0
  54. package/dist/{scripting → functions}/builtins/context.js.map +1 -1
  55. package/dist/{scripting → functions}/builtins/definition.d.ts +1 -1
  56. package/dist/functions/builtins/definition.d.ts.map +1 -0
  57. package/dist/functions/builtins/definition.js.map +1 -0
  58. package/dist/functions/builtins/embeds.d.ts +3 -0
  59. package/dist/{scripting → functions}/builtins/embeds.d.ts.map +1 -1
  60. package/dist/{scripting → functions}/builtins/embeds.js +1 -1
  61. package/dist/functions/builtins/embeds.js.map +1 -0
  62. package/dist/functions/builtins/events.d.ts +2 -0
  63. package/dist/functions/builtins/events.d.ts.map +1 -0
  64. package/dist/{scripting → functions}/builtins/events.js.map +1 -1
  65. package/dist/functions/builtins/flow.d.ts +2 -0
  66. package/dist/functions/builtins/flow.d.ts.map +1 -0
  67. package/dist/{scripting → functions}/builtins/flow.js +2 -2
  68. package/dist/functions/builtins/flow.js.map +1 -0
  69. package/dist/functions/builtins/guards.d.ts +2 -0
  70. package/dist/functions/builtins/guards.d.ts.map +1 -0
  71. package/dist/{scripting → functions}/builtins/guards.js +1 -1
  72. package/dist/functions/builtins/guards.js.map +1 -0
  73. package/dist/functions/builtins/http.d.ts +2 -0
  74. package/dist/functions/builtins/http.d.ts.map +1 -0
  75. package/dist/{scripting → functions}/builtins/http.js +2 -2
  76. package/dist/functions/builtins/http.js.map +1 -0
  77. package/dist/functions/builtins/index.d.ts +5 -0
  78. package/dist/functions/builtins/index.d.ts.map +1 -0
  79. package/dist/functions/builtins/index.js.map +1 -0
  80. package/dist/functions/builtins/language/array-callbacks.d.ts +2 -0
  81. package/dist/functions/builtins/language/array-callbacks.d.ts.map +1 -0
  82. package/dist/{scripting → functions}/builtins/language/array-callbacks.js +1 -1
  83. package/dist/{scripting → functions}/builtins/language/array-callbacks.js.map +1 -1
  84. package/dist/functions/builtins/language/arrays.d.ts +2 -0
  85. package/dist/functions/builtins/language/arrays.d.ts.map +1 -0
  86. package/dist/{scripting → functions}/builtins/language/arrays.js +1 -1
  87. package/dist/{scripting → functions}/builtins/language/arrays.js.map +1 -1
  88. package/dist/{scripting → functions}/builtins/language/common.d.ts.map +1 -1
  89. package/dist/{scripting → functions}/builtins/language/common.js.map +1 -1
  90. package/dist/functions/builtins/language/decimals.d.ts +2 -0
  91. package/dist/functions/builtins/language/decimals.d.ts.map +1 -0
  92. package/dist/{scripting → functions}/builtins/language/decimals.js.map +1 -1
  93. package/dist/functions/builtins/language/index.d.ts +3 -0
  94. package/dist/functions/builtins/language/index.d.ts.map +1 -0
  95. package/dist/functions/builtins/language/index.js.map +1 -0
  96. package/dist/functions/builtins/language/loops.d.ts +4 -0
  97. package/dist/{scripting → functions}/builtins/language/loops.d.ts.map +1 -1
  98. package/dist/{scripting → functions}/builtins/language/loops.js +3 -3
  99. package/dist/{scripting → functions}/builtins/language/loops.js.map +1 -1
  100. package/dist/functions/builtins/language/numbers.d.ts +2 -0
  101. package/dist/functions/builtins/language/numbers.d.ts.map +1 -0
  102. package/dist/{scripting → functions}/builtins/language/numbers.js.map +1 -1
  103. package/dist/{scripting → functions}/builtins/language/objects.d.ts +1 -1
  104. package/dist/{scripting → functions}/builtins/language/objects.d.ts.map +1 -1
  105. package/dist/{scripting → functions}/builtins/language/objects.js.map +1 -1
  106. package/dist/functions/builtins/language/regex.d.ts +2 -0
  107. package/dist/functions/builtins/language/regex.d.ts.map +1 -0
  108. package/dist/{scripting → functions}/builtins/language/regex.js +1 -1
  109. package/dist/{scripting → functions}/builtins/language/regex.js.map +1 -1
  110. package/dist/functions/builtins/language/sort.d.ts +2 -0
  111. package/dist/functions/builtins/language/sort.d.ts.map +1 -0
  112. package/dist/{scripting → functions}/builtins/language/sort.js.map +1 -1
  113. package/dist/{scripting → functions}/builtins/language/state.d.ts +1 -1
  114. package/dist/{scripting → functions}/builtins/language/state.d.ts.map +1 -1
  115. package/dist/{scripting → functions}/builtins/language/state.js.map +1 -1
  116. package/dist/functions/builtins/language/texts.d.ts +2 -0
  117. package/dist/functions/builtins/language/texts.d.ts.map +1 -0
  118. package/dist/{scripting → functions}/builtins/language/texts.js.map +1 -1
  119. package/dist/functions/builtins/messages.d.ts +2 -0
  120. package/dist/functions/builtins/messages.d.ts.map +1 -0
  121. package/dist/{scripting → functions}/builtins/messages.js.map +1 -1
  122. package/dist/functions/builtins/moderation.d.ts +2 -0
  123. package/dist/functions/builtins/moderation.d.ts.map +1 -0
  124. package/dist/{scripting → functions}/builtins/moderation.js.map +1 -1
  125. package/dist/functions/builtins/native-channels.d.ts +2 -0
  126. package/dist/functions/builtins/native-channels.d.ts.map +1 -0
  127. package/dist/{scripting → functions}/builtins/native-channels.js.map +1 -1
  128. package/dist/functions/builtins/native-collectors.d.ts +2 -0
  129. package/dist/functions/builtins/native-collectors.d.ts.map +1 -0
  130. package/dist/{scripting → functions}/builtins/native-collectors.js.map +1 -1
  131. package/dist/functions/builtins/native-expressions.d.ts +2 -0
  132. package/dist/functions/builtins/native-expressions.d.ts.map +1 -0
  133. package/dist/{scripting → functions}/builtins/native-expressions.js.map +1 -1
  134. package/dist/functions/builtins/native-invites.d.ts +2 -0
  135. package/dist/functions/builtins/native-invites.d.ts.map +1 -0
  136. package/dist/{scripting → functions}/builtins/native-invites.js.map +1 -1
  137. package/dist/functions/builtins/native-messages.d.ts +2 -0
  138. package/dist/functions/builtins/native-messages.d.ts.map +1 -0
  139. package/dist/{scripting → functions}/builtins/native-messages.js.map +1 -1
  140. package/dist/functions/builtins/native-roles.d.ts +2 -0
  141. package/dist/functions/builtins/native-roles.d.ts.map +1 -0
  142. package/dist/{scripting → functions}/builtins/native-roles.js.map +1 -1
  143. package/dist/functions/builtins/native-threads.d.ts +2 -0
  144. package/dist/functions/builtins/native-threads.d.ts.map +1 -0
  145. package/dist/{scripting → functions}/builtins/native-threads.js.map +1 -1
  146. package/dist/functions/builtins/native-users.d.ts +2 -0
  147. package/dist/functions/builtins/native-users.d.ts.map +1 -0
  148. package/dist/{scripting → functions}/builtins/native-users.js.map +1 -1
  149. package/dist/functions/builtins/native-webhooks.d.ts +2 -0
  150. package/dist/functions/builtins/native-webhooks.d.ts.map +1 -0
  151. package/dist/{scripting → functions}/builtins/native-webhooks.js.map +1 -1
  152. package/dist/{scripting → functions}/builtins/payload.d.ts +2 -2
  153. package/dist/functions/builtins/payload.d.ts.map +1 -0
  154. package/dist/{scripting → functions}/builtins/payload.js +1 -1
  155. package/dist/functions/builtins/payload.js.map +1 -0
  156. package/dist/functions/builtins/resource-extras.d.ts +2 -0
  157. package/dist/functions/builtins/resource-extras.d.ts.map +1 -0
  158. package/dist/{scripting → functions}/builtins/resource-extras.js.map +1 -1
  159. package/dist/functions/builtins/schedule.d.ts +2 -0
  160. package/dist/functions/builtins/schedule.d.ts.map +1 -0
  161. package/dist/{scripting → functions}/builtins/schedule.js.map +1 -1
  162. package/dist/functions/builtins/storage.d.ts +2 -0
  163. package/dist/functions/builtins/storage.d.ts.map +1 -0
  164. package/dist/{scripting → functions}/builtins/storage.js.map +1 -1
  165. package/dist/functions/builtins/values.d.ts +2 -0
  166. package/dist/functions/builtins/values.d.ts.map +1 -0
  167. package/dist/{scripting → functions}/builtins/values.js +1 -1
  168. package/dist/functions/builtins/values.js.map +1 -0
  169. package/dist/functions/runtime/ast.d.ts.map +1 -0
  170. package/dist/functions/runtime/ast.js.map +1 -0
  171. package/dist/{scripting → functions/runtime}/canvas-execution.d.ts +1 -1
  172. package/dist/functions/runtime/canvas-execution.d.ts.map +1 -0
  173. package/dist/functions/runtime/canvas-execution.js.map +1 -0
  174. package/dist/functions/runtime/control-flow.d.ts.map +1 -0
  175. package/dist/functions/runtime/control-flow.js.map +1 -0
  176. package/dist/{scripting → functions/runtime}/evaluator.d.ts +1 -1
  177. package/dist/functions/runtime/evaluator.d.ts.map +1 -0
  178. package/dist/{scripting → functions/runtime}/evaluator.js +1 -1
  179. package/dist/functions/runtime/evaluator.js.map +1 -0
  180. package/dist/functions/runtime/limits.d.ts.map +1 -0
  181. package/dist/{scripting → functions/runtime}/limits.js +1 -1
  182. package/dist/functions/runtime/limits.js.map +1 -0
  183. package/dist/functions/runtime/parser.d.ts.map +1 -0
  184. package/dist/{scripting → functions/runtime}/parser.js +1 -1
  185. package/dist/functions/runtime/parser.js.map +1 -0
  186. package/dist/functions/runtime/regex.d.ts.map +1 -0
  187. package/dist/{scripting → functions/runtime}/regex.js +1 -1
  188. package/dist/functions/runtime/regex.js.map +1 -0
  189. package/dist/functions/runtime/registry.d.ts.map +1 -0
  190. package/dist/{scripting → functions/runtime}/registry.js +1 -1
  191. package/dist/functions/runtime/registry.js.map +1 -0
  192. package/dist/{scripting → functions/runtime}/runtime.d.ts +3 -1
  193. package/dist/functions/runtime/runtime.d.ts.map +1 -0
  194. package/dist/{scripting → functions/runtime}/runtime.js +3 -0
  195. package/dist/functions/runtime/runtime.js.map +1 -0
  196. package/dist/{scripting → functions/runtime}/types.d.ts +1 -1
  197. package/dist/functions/runtime/types.d.ts.map +1 -0
  198. package/dist/functions/runtime/types.js.map +1 -0
  199. package/dist/functions/runtime/values.d.ts.map +1 -0
  200. package/dist/functions/runtime/values.js.map +1 -0
  201. package/dist/functions.d.ts +19 -8
  202. package/dist/functions.d.ts.map +1 -1
  203. package/dist/functions.js +18 -6
  204. package/dist/functions.js.map +1 -1
  205. package/dist/index.d.ts +7 -2
  206. package/dist/index.d.ts.map +1 -1
  207. package/dist/index.js.map +1 -1
  208. package/dist/infrastructure/canvas/napi.d.ts +4 -0
  209. package/dist/infrastructure/canvas/napi.d.ts.map +1 -0
  210. package/dist/infrastructure/canvas/napi.js +17 -0
  211. package/dist/infrastructure/canvas/napi.js.map +1 -0
  212. package/dist/infrastructure/fluxer/resources/cache.d.ts +4 -0
  213. package/dist/infrastructure/fluxer/resources/cache.d.ts.map +1 -0
  214. package/dist/infrastructure/fluxer/resources/cache.js +68 -0
  215. package/dist/infrastructure/fluxer/resources/cache.js.map +1 -0
  216. package/dist/infrastructure/fluxer/resources/channels.d.ts +3 -2
  217. package/dist/infrastructure/fluxer/resources/channels.d.ts.map +1 -1
  218. package/dist/infrastructure/fluxer/resources/channels.js +54 -2
  219. package/dist/infrastructure/fluxer/resources/channels.js.map +1 -1
  220. package/dist/infrastructure/fluxer/resources/collectors.d.ts.map +1 -1
  221. package/dist/infrastructure/fluxer/resources/collectors.js +86 -4
  222. package/dist/infrastructure/fluxer/resources/collectors.js.map +1 -1
  223. package/dist/infrastructure/fluxer/resources/expressions.d.ts.map +1 -1
  224. package/dist/infrastructure/fluxer/resources/expressions.js +8 -1
  225. package/dist/infrastructure/fluxer/resources/expressions.js.map +1 -1
  226. package/dist/infrastructure/fluxer/resources/gateway.d.ts +4 -0
  227. package/dist/infrastructure/fluxer/resources/gateway.d.ts.map +1 -0
  228. package/dist/infrastructure/fluxer/resources/gateway.js +31 -0
  229. package/dist/infrastructure/fluxer/resources/gateway.js.map +1 -0
  230. package/dist/infrastructure/fluxer/resources/instance.d.ts +4 -0
  231. package/dist/infrastructure/fluxer/resources/instance.d.ts.map +1 -0
  232. package/dist/infrastructure/fluxer/resources/instance.js +96 -0
  233. package/dist/infrastructure/fluxer/resources/instance.js.map +1 -0
  234. package/dist/infrastructure/fluxer/resources/messages.d.ts +3 -1
  235. package/dist/infrastructure/fluxer/resources/messages.d.ts.map +1 -1
  236. package/dist/infrastructure/fluxer/resources/messages.js +91 -36
  237. package/dist/infrastructure/fluxer/resources/messages.js.map +1 -1
  238. package/dist/infrastructure/fluxer/resources/roles.d.ts.map +1 -1
  239. package/dist/infrastructure/fluxer/resources/roles.js +8 -0
  240. package/dist/infrastructure/fluxer/resources/roles.js.map +1 -1
  241. package/dist/infrastructure/fluxer/resources/self.d.ts +4 -0
  242. package/dist/infrastructure/fluxer/resources/self.d.ts.map +1 -0
  243. package/dist/infrastructure/fluxer/resources/self.js +36 -0
  244. package/dist/infrastructure/fluxer/resources/self.js.map +1 -0
  245. package/dist/infrastructure/fluxer/resources/threads.d.ts.map +1 -1
  246. package/dist/infrastructure/fluxer/resources/threads.js +15 -0
  247. package/dist/infrastructure/fluxer/resources/threads.js.map +1 -1
  248. package/dist/infrastructure/fluxer/resources/users.d.ts +5 -2
  249. package/dist/infrastructure/fluxer/resources/users.d.ts.map +1 -1
  250. package/dist/infrastructure/fluxer/resources/users.js +36 -3
  251. package/dist/infrastructure/fluxer/resources/users.js.map +1 -1
  252. package/dist/infrastructure/fluxer/resources/webhooks.d.ts.map +1 -1
  253. package/dist/infrastructure/fluxer/resources/webhooks.js +9 -0
  254. package/dist/infrastructure/fluxer/resources/webhooks.js.map +1 -1
  255. package/dist/infrastructure/fluxer/resources.d.ts +4 -0
  256. package/dist/infrastructure/fluxer/resources.d.ts.map +1 -1
  257. package/dist/infrastructure/fluxer/resources.js +12 -0
  258. package/dist/infrastructure/fluxer/resources.js.map +1 -1
  259. package/dist/ports/resources/cache.d.ts +74 -0
  260. package/dist/ports/resources/cache.d.ts.map +1 -0
  261. package/dist/ports/resources/cache.js +2 -0
  262. package/dist/ports/resources/cache.js.map +1 -0
  263. package/dist/ports/resources/channels.d.ts +17 -0
  264. package/dist/ports/resources/channels.d.ts.map +1 -1
  265. package/dist/ports/resources/channels.js.map +1 -1
  266. package/dist/ports/resources/collectors.d.ts +18 -0
  267. package/dist/ports/resources/collectors.d.ts.map +1 -1
  268. package/dist/ports/resources/collectors.js.map +1 -1
  269. package/dist/ports/resources/common.d.ts +2 -0
  270. package/dist/ports/resources/common.d.ts.map +1 -1
  271. package/dist/ports/resources/common.js.map +1 -1
  272. package/dist/ports/resources/expressions.d.ts +8 -0
  273. package/dist/ports/resources/expressions.d.ts.map +1 -1
  274. package/dist/ports/resources/expressions.js.map +1 -1
  275. package/dist/ports/resources/gateway.d.ts +48 -0
  276. package/dist/ports/resources/gateway.d.ts.map +1 -0
  277. package/dist/ports/resources/gateway.js +2 -0
  278. package/dist/ports/resources/gateway.js.map +1 -0
  279. package/dist/ports/resources/instance.d.ts +101 -0
  280. package/dist/ports/resources/instance.d.ts.map +1 -0
  281. package/dist/ports/resources/instance.js +2 -0
  282. package/dist/ports/resources/instance.js.map +1 -0
  283. package/dist/ports/resources/messages.d.ts +27 -0
  284. package/dist/ports/resources/messages.d.ts.map +1 -1
  285. package/dist/ports/resources/messages.js.map +1 -1
  286. package/dist/ports/resources/roles.d.ts +6 -0
  287. package/dist/ports/resources/roles.d.ts.map +1 -1
  288. package/dist/ports/resources/roles.js.map +1 -1
  289. package/dist/ports/resources/self.d.ts +30 -0
  290. package/dist/ports/resources/self.d.ts.map +1 -0
  291. package/dist/ports/resources/self.js +2 -0
  292. package/dist/ports/resources/self.js.map +1 -0
  293. package/dist/ports/resources/threads.d.ts +16 -0
  294. package/dist/ports/resources/threads.d.ts.map +1 -1
  295. package/dist/ports/resources/threads.js.map +1 -1
  296. package/dist/ports/resources/users.d.ts +30 -0
  297. package/dist/ports/resources/users.d.ts.map +1 -1
  298. package/dist/ports/resources/users.js.map +1 -1
  299. package/dist/ports/resources/webhooks.d.ts +5 -0
  300. package/dist/ports/resources/webhooks.d.ts.map +1 -1
  301. package/dist/ports/resources/webhooks.js.map +1 -1
  302. package/dist/ports/resources.d.ts +8 -0
  303. package/dist/ports/resources.d.ts.map +1 -1
  304. package/dist/ports/resources.js.map +1 -1
  305. package/dist/ports/script-engine.d.ts +45 -0
  306. package/dist/ports/script-engine.d.ts.map +1 -0
  307. package/dist/ports/script-engine.js +2 -0
  308. package/dist/ports/script-engine.js.map +1 -0
  309. package/dist/sdk/builders.d.ts +2 -0
  310. package/dist/sdk/builders.d.ts.map +1 -0
  311. package/dist/sdk/builders.js +2 -0
  312. package/dist/sdk/builders.js.map +1 -0
  313. package/dist/sdk/client.d.ts +2 -0
  314. package/dist/sdk/client.d.ts.map +1 -0
  315. package/dist/sdk/client.js +2 -0
  316. package/dist/sdk/client.js.map +1 -0
  317. package/dist/sdk/cluster.d.ts +2 -0
  318. package/dist/sdk/cluster.d.ts.map +1 -0
  319. package/dist/sdk/cluster.js +2 -0
  320. package/dist/sdk/cluster.js.map +1 -0
  321. package/dist/sdk/collection.d.ts +2 -0
  322. package/dist/sdk/collection.d.ts.map +1 -0
  323. package/dist/sdk/collection.js +2 -0
  324. package/dist/sdk/collection.js.map +1 -0
  325. package/dist/sdk/errors.d.ts +2 -0
  326. package/dist/sdk/errors.d.ts.map +1 -0
  327. package/dist/sdk/errors.js +2 -0
  328. package/dist/sdk/errors.js.map +1 -0
  329. package/dist/sdk/internal.d.ts +2 -0
  330. package/dist/sdk/internal.d.ts.map +1 -0
  331. package/dist/sdk/internal.js +2 -0
  332. package/dist/sdk/internal.js.map +1 -0
  333. package/dist/sdk/message.d.ts +2 -0
  334. package/dist/sdk/message.d.ts.map +1 -0
  335. package/dist/sdk/message.js +2 -0
  336. package/dist/sdk/message.js.map +1 -0
  337. package/dist/sdk/rest/request-manager.d.ts +2 -0
  338. package/dist/sdk/rest/request-manager.d.ts.map +1 -0
  339. package/dist/sdk/rest/request-manager.js +2 -0
  340. package/dist/sdk/rest/request-manager.js.map +1 -0
  341. package/dist/sdk/rest.d.ts +2 -0
  342. package/dist/sdk/rest.d.ts.map +1 -0
  343. package/dist/sdk/rest.js +2 -0
  344. package/dist/sdk/rest.js.map +1 -0
  345. package/dist/sdk/sharding.d.ts +2 -0
  346. package/dist/sdk/sharding.d.ts.map +1 -0
  347. package/dist/sdk/sharding.js +2 -0
  348. package/dist/sdk/sharding.js.map +1 -0
  349. package/dist/sdk/types/routes.d.ts +2 -0
  350. package/dist/sdk/types/routes.d.ts.map +1 -0
  351. package/dist/sdk/types/routes.js +2 -0
  352. package/dist/sdk/types/routes.js.map +1 -0
  353. package/dist/sdk/types.d.ts +2 -0
  354. package/dist/sdk/types.d.ts.map +1 -0
  355. package/dist/sdk/types.js +2 -0
  356. package/dist/sdk/types.js.map +1 -0
  357. package/dist/sdk/util.d.ts +2 -0
  358. package/dist/sdk/util.d.ts.map +1 -0
  359. package/dist/sdk/util.js +2 -0
  360. package/dist/sdk/util.js.map +1 -0
  361. package/dist/sdk/voice.d.ts +2 -0
  362. package/dist/sdk/voice.d.ts.map +1 -0
  363. package/dist/sdk/voice.js +2 -0
  364. package/dist/sdk/voice.js.map +1 -0
  365. package/dist/sdk/ws.d.ts +2 -0
  366. package/dist/sdk/ws.d.ts.map +1 -0
  367. package/dist/sdk/ws.js +2 -0
  368. package/dist/sdk/ws.js.map +1 -0
  369. package/dist/services/canvas-image.d.ts +12 -0
  370. package/dist/services/canvas-image.d.ts.map +1 -0
  371. package/dist/services/canvas-image.js +56 -0
  372. package/dist/services/canvas-image.js.map +1 -0
  373. package/dist/services/canvas.d.ts +12 -2
  374. package/dist/services/canvas.d.ts.map +1 -1
  375. package/dist/services/canvas.js +91 -5
  376. package/dist/services/canvas.js.map +1 -1
  377. package/dist/services/moderation.d.ts +1 -0
  378. package/dist/services/moderation.d.ts.map +1 -1
  379. package/dist/services/moderation.js +11 -0
  380. package/dist/services/moderation.js.map +1 -1
  381. package/dist/services/native-moderation.d.ts +6 -1
  382. package/dist/services/native-moderation.d.ts.map +1 -1
  383. package/dist/services/native-moderation.js +11 -1
  384. package/dist/services/native-moderation.js.map +1 -1
  385. package/dist/services/resource-authorization.d.ts.map +1 -1
  386. package/dist/services/resource-authorization.js +95 -3
  387. package/dist/services/resource-authorization.js.map +1 -1
  388. package/dist/testing.d.ts.map +1 -1
  389. package/dist/testing.js +4 -0
  390. package/dist/testing.js.map +1 -1
  391. package/docs/API.md +8 -7
  392. package/docs/ARCHITECTURE.md +14 -9
  393. package/docs/BENCHMARKS.md +1 -1
  394. package/docs/CANVAS.md +70 -15
  395. package/docs/EDITOR.md +1 -1
  396. package/docs/FRAMEWORK.md +2 -3
  397. package/docs/HTTP.md +1 -1
  398. package/docs/IMAGES.md +2 -1
  399. package/docs/NATIVE.md +45 -14
  400. package/docs/PARITY-MATRIX.md +853 -843
  401. package/docs/PARITY.md +24 -12
  402. package/docs/PLAN.md +14 -3
  403. package/docs/QUICKSTART.md +5 -5
  404. package/docs/README.md +7 -7
  405. package/docs/REPOSITORY.md +1 -1
  406. package/docs/SCHEDULER.md +1 -1
  407. package/docs/TROUBLESHOOTING.md +1 -1
  408. package/docs/VALIDATION.md +5 -5
  409. package/docs/{FUNCTION-GAPS.md → functions/FUNCTION-GAPS.md} +18 -13
  410. package/docs/{LANGUAGE.md → functions/LANGUAGE.md} +7 -7
  411. package/docs/functions/README.md +33 -0
  412. package/docs/tutorials/DATA.md +2 -2
  413. package/docs/tutorials/FUNCTION-MODE.md +2 -2
  414. package/examples/canvas/napi-style.ts +24 -0
  415. package/examples/canvas/output/napi-style.png +0 -0
  416. package/examples/canvas/profile.d.mts +1 -1
  417. package/examples/canvas/profile.mjs +2 -2
  418. package/examples/canvas/profile.ts +3 -3
  419. package/examples/canvas/ranking.d.mts +1 -1
  420. package/examples/canvas/ranking.mjs +2 -2
  421. package/examples/canvas/ranking.ts +3 -3
  422. package/examples/canvas/render.ts +2 -1
  423. package/examples/canvas/welcome.d.mts +1 -1
  424. package/examples/canvas/welcome.mjs +2 -2
  425. package/examples/canvas/welcome.ts +3 -3
  426. package/examples/embeds/complete-embed-functions.ts +2 -2
  427. package/examples/function-mode.ts +3 -3
  428. package/examples/yuzuha.config.js +2 -0
  429. package/package.json +26 -1
  430. package/src/canvas/card.ts +20 -0
  431. package/src/canvas.ts +69 -17
  432. package/src/cli/config.ts +2 -1
  433. package/src/cli/lint.ts +1 -2
  434. package/src/cli/main.ts +8 -9
  435. package/src/cli/scaffold.ts +1 -1
  436. package/src/cli/scenarios.ts +2 -1
  437. package/src/commands/context.ts +9 -2
  438. package/src/domain/resource-batches.ts +31 -0
  439. package/src/framework/bot.ts +44 -27
  440. package/src/framework/command-registry.ts +15 -10
  441. package/src/framework/options.ts +3 -3
  442. package/src/{scripting → functions}/builtins/canvas.ts +2 -2
  443. package/src/{scripting → functions}/builtins/context.ts +1 -1
  444. package/src/{scripting → functions}/builtins/definition.ts +1 -1
  445. package/src/{scripting → functions}/builtins/embeds.ts +1 -1
  446. package/src/{scripting → functions}/builtins/flow.ts +2 -2
  447. package/src/{scripting → functions}/builtins/guards.ts +1 -1
  448. package/src/{scripting → functions}/builtins/http.ts +2 -2
  449. package/src/{scripting → functions}/builtins/index.ts +2 -2
  450. package/src/{scripting → functions}/builtins/language/array-callbacks.ts +2 -2
  451. package/src/{scripting → functions}/builtins/language/arrays.ts +1 -1
  452. package/src/{scripting → functions}/builtins/language/index.ts +1 -1
  453. package/src/{scripting → functions}/builtins/language/loops.ts +4 -4
  454. package/src/{scripting → functions}/builtins/language/regex.ts +1 -1
  455. package/src/{scripting → functions}/builtins/moderation.ts +1 -1
  456. package/src/{scripting → functions}/builtins/native-channels.ts +1 -1
  457. package/src/{scripting → functions}/builtins/native-roles.ts +1 -1
  458. package/src/{scripting → functions}/builtins/native-users.ts +1 -1
  459. package/src/{scripting → functions}/builtins/payload.ts +2 -2
  460. package/src/{scripting → functions}/builtins/resource-extras.ts +1 -1
  461. package/src/{scripting → functions}/builtins/values.ts +1 -1
  462. package/src/{scripting → functions/runtime}/canvas-execution.ts +1 -1
  463. package/src/{scripting → functions/runtime}/evaluator.ts +2 -2
  464. package/src/{scripting → functions/runtime}/limits.ts +1 -1
  465. package/src/{scripting → functions/runtime}/parser.ts +1 -1
  466. package/src/{scripting → functions/runtime}/regex.ts +1 -1
  467. package/src/{scripting → functions/runtime}/registry.ts +1 -1
  468. package/src/{scripting → functions/runtime}/runtime.ts +6 -1
  469. package/src/{scripting → functions/runtime}/types.ts +1 -1
  470. package/src/functions.ts +28 -8
  471. package/src/index.ts +9 -2
  472. package/src/infrastructure/canvas/napi.ts +17 -0
  473. package/src/infrastructure/fluxer/resources/cache.ts +69 -0
  474. package/src/infrastructure/fluxer/resources/channels.ts +51 -3
  475. package/src/infrastructure/fluxer/resources/collectors.ts +87 -4
  476. package/src/infrastructure/fluxer/resources/expressions.ts +7 -1
  477. package/src/infrastructure/fluxer/resources/gateway.ts +33 -0
  478. package/src/infrastructure/fluxer/resources/instance.ts +105 -0
  479. package/src/infrastructure/fluxer/resources/messages.ts +84 -36
  480. package/src/infrastructure/fluxer/resources/roles.ts +8 -0
  481. package/src/infrastructure/fluxer/resources/self.ts +39 -0
  482. package/src/infrastructure/fluxer/resources/threads.ts +14 -0
  483. package/src/infrastructure/fluxer/resources/users.ts +40 -4
  484. package/src/infrastructure/fluxer/resources/webhooks.ts +9 -0
  485. package/src/infrastructure/fluxer/resources.ts +12 -0
  486. package/src/ports/resources/cache.ts +81 -0
  487. package/src/ports/resources/channels.ts +12 -0
  488. package/src/ports/resources/collectors.ts +20 -0
  489. package/src/ports/resources/common.ts +2 -0
  490. package/src/ports/resources/expressions.ts +6 -0
  491. package/src/ports/resources/gateway.ts +49 -0
  492. package/src/ports/resources/instance.ts +109 -0
  493. package/src/ports/resources/messages.ts +30 -0
  494. package/src/ports/resources/roles.ts +3 -0
  495. package/src/ports/resources/self.ts +30 -0
  496. package/src/ports/resources/threads.ts +15 -0
  497. package/src/ports/resources/users.ts +33 -0
  498. package/src/ports/resources/webhooks.ts +6 -0
  499. package/src/ports/resources.ts +8 -0
  500. package/src/ports/script-engine.ts +42 -0
  501. package/src/sdk/builders.ts +1 -0
  502. package/src/sdk/client.ts +1 -0
  503. package/src/sdk/cluster.ts +1 -0
  504. package/src/sdk/collection.ts +1 -0
  505. package/src/sdk/errors.ts +1 -0
  506. package/src/sdk/internal.ts +1 -0
  507. package/src/sdk/message.ts +1 -0
  508. package/src/sdk/rest/request-manager.ts +1 -0
  509. package/src/sdk/rest.ts +1 -0
  510. package/src/sdk/sharding.ts +1 -0
  511. package/src/sdk/types/routes.ts +1 -0
  512. package/src/sdk/types.ts +1 -0
  513. package/src/sdk/util.ts +1 -0
  514. package/src/sdk/voice.ts +1 -0
  515. package/src/sdk/ws.ts +1 -0
  516. package/src/services/canvas-image.ts +54 -0
  517. package/src/services/canvas.ts +89 -6
  518. package/src/services/moderation.ts +4 -0
  519. package/src/services/native-moderation.ts +11 -1
  520. package/src/services/resource-authorization.ts +89 -3
  521. package/src/testing.ts +4 -0
  522. package/dist/parser.d.ts +0 -3
  523. package/dist/parser.d.ts.map +0 -1
  524. package/dist/parser.js +0 -2
  525. package/dist/parser.js.map +0 -1
  526. package/dist/runtime.d.ts +0 -5
  527. package/dist/runtime.d.ts.map +0 -1
  528. package/dist/runtime.js +0 -4
  529. package/dist/runtime.js.map +0 -1
  530. package/dist/scripting/ast.d.ts.map +0 -1
  531. package/dist/scripting/ast.js.map +0 -1
  532. package/dist/scripting/builtins/canvas.d.ts +0 -2
  533. package/dist/scripting/builtins/canvas.d.ts.map +0 -1
  534. package/dist/scripting/builtins/context.d.ts +0 -2
  535. package/dist/scripting/builtins/context.d.ts.map +0 -1
  536. package/dist/scripting/builtins/definition.d.ts.map +0 -1
  537. package/dist/scripting/builtins/definition.js.map +0 -1
  538. package/dist/scripting/builtins/embeds.d.ts +0 -3
  539. package/dist/scripting/builtins/embeds.js.map +0 -1
  540. package/dist/scripting/builtins/events.d.ts +0 -2
  541. package/dist/scripting/builtins/events.d.ts.map +0 -1
  542. package/dist/scripting/builtins/flow.d.ts +0 -2
  543. package/dist/scripting/builtins/flow.d.ts.map +0 -1
  544. package/dist/scripting/builtins/flow.js.map +0 -1
  545. package/dist/scripting/builtins/guards.d.ts +0 -2
  546. package/dist/scripting/builtins/guards.d.ts.map +0 -1
  547. package/dist/scripting/builtins/guards.js.map +0 -1
  548. package/dist/scripting/builtins/http.d.ts +0 -2
  549. package/dist/scripting/builtins/http.d.ts.map +0 -1
  550. package/dist/scripting/builtins/http.js.map +0 -1
  551. package/dist/scripting/builtins/index.d.ts +0 -5
  552. package/dist/scripting/builtins/index.d.ts.map +0 -1
  553. package/dist/scripting/builtins/index.js.map +0 -1
  554. package/dist/scripting/builtins/language/array-callbacks.d.ts +0 -2
  555. package/dist/scripting/builtins/language/array-callbacks.d.ts.map +0 -1
  556. package/dist/scripting/builtins/language/arrays.d.ts +0 -2
  557. package/dist/scripting/builtins/language/arrays.d.ts.map +0 -1
  558. package/dist/scripting/builtins/language/decimals.d.ts +0 -2
  559. package/dist/scripting/builtins/language/decimals.d.ts.map +0 -1
  560. package/dist/scripting/builtins/language/index.d.ts +0 -3
  561. package/dist/scripting/builtins/language/index.d.ts.map +0 -1
  562. package/dist/scripting/builtins/language/index.js.map +0 -1
  563. package/dist/scripting/builtins/language/loops.d.ts +0 -4
  564. package/dist/scripting/builtins/language/numbers.d.ts +0 -2
  565. package/dist/scripting/builtins/language/numbers.d.ts.map +0 -1
  566. package/dist/scripting/builtins/language/regex.d.ts +0 -2
  567. package/dist/scripting/builtins/language/regex.d.ts.map +0 -1
  568. package/dist/scripting/builtins/language/sort.d.ts +0 -2
  569. package/dist/scripting/builtins/language/sort.d.ts.map +0 -1
  570. package/dist/scripting/builtins/language/texts.d.ts +0 -2
  571. package/dist/scripting/builtins/language/texts.d.ts.map +0 -1
  572. package/dist/scripting/builtins/messages.d.ts +0 -2
  573. package/dist/scripting/builtins/messages.d.ts.map +0 -1
  574. package/dist/scripting/builtins/moderation.d.ts +0 -2
  575. package/dist/scripting/builtins/moderation.d.ts.map +0 -1
  576. package/dist/scripting/builtins/native-channels.d.ts +0 -2
  577. package/dist/scripting/builtins/native-channels.d.ts.map +0 -1
  578. package/dist/scripting/builtins/native-collectors.d.ts +0 -2
  579. package/dist/scripting/builtins/native-collectors.d.ts.map +0 -1
  580. package/dist/scripting/builtins/native-expressions.d.ts +0 -2
  581. package/dist/scripting/builtins/native-expressions.d.ts.map +0 -1
  582. package/dist/scripting/builtins/native-invites.d.ts +0 -2
  583. package/dist/scripting/builtins/native-invites.d.ts.map +0 -1
  584. package/dist/scripting/builtins/native-messages.d.ts +0 -2
  585. package/dist/scripting/builtins/native-messages.d.ts.map +0 -1
  586. package/dist/scripting/builtins/native-roles.d.ts +0 -2
  587. package/dist/scripting/builtins/native-roles.d.ts.map +0 -1
  588. package/dist/scripting/builtins/native-threads.d.ts +0 -2
  589. package/dist/scripting/builtins/native-threads.d.ts.map +0 -1
  590. package/dist/scripting/builtins/native-users.d.ts +0 -2
  591. package/dist/scripting/builtins/native-users.d.ts.map +0 -1
  592. package/dist/scripting/builtins/native-webhooks.d.ts +0 -2
  593. package/dist/scripting/builtins/native-webhooks.d.ts.map +0 -1
  594. package/dist/scripting/builtins/payload.d.ts.map +0 -1
  595. package/dist/scripting/builtins/payload.js.map +0 -1
  596. package/dist/scripting/builtins/resource-extras.d.ts +0 -2
  597. package/dist/scripting/builtins/resource-extras.d.ts.map +0 -1
  598. package/dist/scripting/builtins/schedule.d.ts +0 -2
  599. package/dist/scripting/builtins/schedule.d.ts.map +0 -1
  600. package/dist/scripting/builtins/storage.d.ts +0 -2
  601. package/dist/scripting/builtins/storage.d.ts.map +0 -1
  602. package/dist/scripting/builtins/values.d.ts +0 -2
  603. package/dist/scripting/builtins/values.d.ts.map +0 -1
  604. package/dist/scripting/builtins/values.js.map +0 -1
  605. package/dist/scripting/canvas-execution.d.ts.map +0 -1
  606. package/dist/scripting/canvas-execution.js.map +0 -1
  607. package/dist/scripting/control-flow.d.ts.map +0 -1
  608. package/dist/scripting/control-flow.js.map +0 -1
  609. package/dist/scripting/evaluator.d.ts.map +0 -1
  610. package/dist/scripting/evaluator.js.map +0 -1
  611. package/dist/scripting/limits.d.ts.map +0 -1
  612. package/dist/scripting/limits.js.map +0 -1
  613. package/dist/scripting/parser.d.ts.map +0 -1
  614. package/dist/scripting/parser.js.map +0 -1
  615. package/dist/scripting/regex.d.ts.map +0 -1
  616. package/dist/scripting/regex.js.map +0 -1
  617. package/dist/scripting/registry.d.ts.map +0 -1
  618. package/dist/scripting/registry.js.map +0 -1
  619. package/dist/scripting/runtime.d.ts.map +0 -1
  620. package/dist/scripting/runtime.js.map +0 -1
  621. package/dist/scripting/types.d.ts.map +0 -1
  622. package/dist/scripting/types.js.map +0 -1
  623. package/dist/scripting/values.d.ts.map +0 -1
  624. package/dist/scripting/values.js.map +0 -1
  625. package/src/parser.ts +0 -2
  626. package/src/runtime.ts +0 -4
  627. /package/dist/{scripting → functions}/builtins/arguments.d.ts +0 -0
  628. /package/dist/{scripting → functions}/builtins/arguments.js +0 -0
  629. /package/dist/{scripting → functions}/builtins/context.js +0 -0
  630. /package/dist/{scripting → functions}/builtins/definition.js +0 -0
  631. /package/dist/{scripting → functions}/builtins/events.js +0 -0
  632. /package/dist/{scripting → functions}/builtins/index.js +0 -0
  633. /package/dist/{scripting → functions}/builtins/language/common.d.ts +0 -0
  634. /package/dist/{scripting → functions}/builtins/language/common.js +0 -0
  635. /package/dist/{scripting → functions}/builtins/language/decimals.js +0 -0
  636. /package/dist/{scripting → functions}/builtins/language/index.js +0 -0
  637. /package/dist/{scripting → functions}/builtins/language/numbers.js +0 -0
  638. /package/dist/{scripting → functions}/builtins/language/objects.js +0 -0
  639. /package/dist/{scripting → functions}/builtins/language/sort.js +0 -0
  640. /package/dist/{scripting → functions}/builtins/language/state.js +0 -0
  641. /package/dist/{scripting → functions}/builtins/language/texts.js +0 -0
  642. /package/dist/{scripting → functions}/builtins/messages.js +0 -0
  643. /package/dist/{scripting → functions}/builtins/moderation.js +0 -0
  644. /package/dist/{scripting → functions}/builtins/native-channels.js +0 -0
  645. /package/dist/{scripting → functions}/builtins/native-collectors.js +0 -0
  646. /package/dist/{scripting → functions}/builtins/native-expressions.js +0 -0
  647. /package/dist/{scripting → functions}/builtins/native-invites.js +0 -0
  648. /package/dist/{scripting → functions}/builtins/native-messages.js +0 -0
  649. /package/dist/{scripting → functions}/builtins/native-roles.js +0 -0
  650. /package/dist/{scripting → functions}/builtins/native-threads.js +0 -0
  651. /package/dist/{scripting → functions}/builtins/native-users.js +0 -0
  652. /package/dist/{scripting → functions}/builtins/native-webhooks.js +0 -0
  653. /package/dist/{scripting → functions}/builtins/resource-extras.js +0 -0
  654. /package/dist/{scripting → functions}/builtins/schedule.js +0 -0
  655. /package/dist/{scripting → functions}/builtins/storage.js +0 -0
  656. /package/dist/{scripting → functions/runtime}/ast.d.ts +0 -0
  657. /package/dist/{scripting → functions/runtime}/ast.js +0 -0
  658. /package/dist/{scripting → functions/runtime}/canvas-execution.js +0 -0
  659. /package/dist/{scripting → functions/runtime}/control-flow.d.ts +0 -0
  660. /package/dist/{scripting → functions/runtime}/control-flow.js +0 -0
  661. /package/dist/{scripting → functions/runtime}/limits.d.ts +0 -0
  662. /package/dist/{scripting → functions/runtime}/parser.d.ts +0 -0
  663. /package/dist/{scripting → functions/runtime}/regex-worker.mjs +0 -0
  664. /package/dist/{scripting → functions/runtime}/regex.d.ts +0 -0
  665. /package/dist/{scripting → functions/runtime}/registry.d.ts +0 -0
  666. /package/dist/{scripting → functions/runtime}/types.js +0 -0
  667. /package/dist/{scripting → functions/runtime}/values.d.ts +0 -0
  668. /package/dist/{scripting → functions/runtime}/values.js +0 -0
  669. /package/docs/{FUNCTIONS.md → functions/FUNCTIONS.md} +0 -0
  670. /package/docs/{LANGUAGE-EXTENSIONS.md → functions/LANGUAGE-EXTENSIONS.md} +0 -0
  671. /package/src/{scripting → functions}/builtins/arguments.ts +0 -0
  672. /package/src/{scripting → functions}/builtins/events.ts +0 -0
  673. /package/src/{scripting → functions}/builtins/language/common.ts +0 -0
  674. /package/src/{scripting → functions}/builtins/language/decimals.ts +0 -0
  675. /package/src/{scripting → functions}/builtins/language/numbers.ts +0 -0
  676. /package/src/{scripting → functions}/builtins/language/objects.ts +0 -0
  677. /package/src/{scripting → functions}/builtins/language/sort.ts +0 -0
  678. /package/src/{scripting → functions}/builtins/language/state.ts +0 -0
  679. /package/src/{scripting → functions}/builtins/language/texts.ts +0 -0
  680. /package/src/{scripting → functions}/builtins/messages.ts +0 -0
  681. /package/src/{scripting → functions}/builtins/native-collectors.ts +0 -0
  682. /package/src/{scripting → functions}/builtins/native-expressions.ts +0 -0
  683. /package/src/{scripting → functions}/builtins/native-invites.ts +0 -0
  684. /package/src/{scripting → functions}/builtins/native-messages.ts +0 -0
  685. /package/src/{scripting → functions}/builtins/native-threads.ts +0 -0
  686. /package/src/{scripting → functions}/builtins/native-webhooks.ts +0 -0
  687. /package/src/{scripting → functions}/builtins/schedule.ts +0 -0
  688. /package/src/{scripting → functions}/builtins/storage.ts +0 -0
  689. /package/src/{scripting → functions/runtime}/ast.ts +0 -0
  690. /package/src/{scripting → functions/runtime}/control-flow.ts +0 -0
  691. /package/src/{scripting → functions/runtime}/regex-worker.mjs +0 -0
  692. /package/src/{scripting → functions/runtime}/values.ts +0 -0
package/CHANGELOG.md CHANGED
@@ -21,6 +21,34 @@ documentos. Veja a [política completa](VERSIONING.md).
21
21
 
22
22
  </details>
23
23
 
24
+ ## v0.3.0 · 04/11/2026
25
+
26
+ 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).
27
+
28
+ - `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`.
29
+ - `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.
30
+ - O builder de cartões migrou para `yuzuha/canvas/card` e continua renderizando em processo filho com os mesmos limites.
31
+ - 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`.
32
+ - **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`.
33
+ - 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`).
34
+ - 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`.
35
+ - 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`.
36
+ - **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`.
37
+ - 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()`.
38
+ - 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.
39
+
40
+ ## v0.2.1 · 03/11/2026
41
+
42
+ 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
+
44
+ - `yuzuha/sdk` passa a espelhar os subpaths de `@fluxerjs/core`: `yuzuha/sdk/client`, `/errors`, `/message`, `/cluster` e `/internal`. O teste de consumidor agora compara os exports de cada subpath ao pacote correspondente.
45
+ - Os pacotes satélites do monorepo são reexportados como `yuzuha/sdk/types` (com `/routes`), `yuzuha/sdk/rest` (com `/request-manager`), `yuzuha/sdk/ws`, `yuzuha/sdk/builders`, `yuzuha/sdk/collection` e `yuzuha/sdk/util`, que viram dependências diretas. `yuzuha/sdk/voice` e `yuzuha/sdk/sharding` reexportam os peers opcionais homônimos.
46
+ - Quatro áreas novas em `ctx.resources` e `bot.resources`: `gateway` envia pedidos brutos ao gateway (membros, contagens, não lidos de fórum, assinatura de threads e payload por shard); `instance` descreve a instância, o gateway, a aplicação e metadados de emoji/sticker; `self` cobre o usuário autenticado com verificação sudo; `cache` expõe estatísticas, limites e limpezas.
47
+ - `collectors.collectMessages` e `collectReactions` devolvem `AsyncIterable` sobre os coletores do SDK, com limites `timeMs`/`max`/`signal` e limpeza garantida. Reações exigem `messageID`, como no coletor do SDK. `ReactionVote` ganha `messageID` opcional.
48
+ - `messages.bulkFetch` busca janelas de mensagens por canal com hidratação por padrão ou payloads brutos com `hydrate: false`. `messages.searchAll` usa a busca global do client com os mesmos filtros e paginação de `search`.
49
+ - As novas áreas passam pela autorização compartilhada como autoridade direta, mesmo contrato de `users` e `messages`; o sinal do comando cancela os streams.
50
+ - **Adaptação de integrações:** implementações completas próprias de `Resources` devem fornecer `gateway`, `instance`, `self` e `cache`; `CollectorsResources` e `MessagesResources` ganharam métodos. `@fluxerjs/sharding` declara peer exato em `@fluxerjs/core` 3.0.0 — consumidores que o instalarem precisam de `overrides` para o core fixado. Veja [VERSIONING.md](VERSIONING.md) antes de atualizar.
51
+
24
52
  ## v0.2.0 · 02/11/2026
25
53
 
26
54
  Embeds completos em uma API só, nos modos nativo e function mode, com uma matriz automática de paridade com o SDK. Esta atualização da biblioteca Yuzuha foi preparada em 02/11/2026 (v0.2.0); a tag Git `v0.2.0` aponta para esta versão.
@@ -31,7 +59,7 @@ Embeds completos em uma API só, nos modos nativo e function mode, com uma matri
31
59
  - `$fetchMessage` e `$messages` devolvem `embeds` normalizados, com `type`, `provider`, `video`, `audio`, `nsfw` e `children` somente leitura.
32
60
  - 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).
33
61
  - `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.
34
- - Catálogo do function mode: de 322 para **336** funções. [FUNCTION-GAPS.md](docs/FUNCTION-GAPS.md) foi atualizado com a contagem real.
62
+ - 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.
35
63
 
36
64
  ## v0.1.9 · 29/10/2026
37
65
 
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.0](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.0 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.0
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.0**.
4
+ A versão desta atualização é **0.3.0**.
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.0` |
11
- | Pacote npm e saída de `yuzuha --version` | `0.2.0` |
12
- | Título do changelog | `## v0.2.0 · 02/11/2026` |
13
- | Tag Git | `v0.2.0` |
10
+ | `package.json` e entrada raiz de `package-lock.json` | `0.3.0` |
11
+ | Pacote npm e saída de `yuzuha --version` | `0.3.0` |
12
+ | Título do changelog | `## v0.3.0 · 04/11/2026` |
13
+ | Tag Git | `v0.3.0` |
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.
@@ -30,8 +30,9 @@ estivermos em `0.x`. Ao chegar a `1.0.0`, mudanças incompatíveis exigem major;
30
30
  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
- `yuzuha/testing`, `yuzuha/tooling`, `yuzuha/music`, `yuzuha/images` e
34
- `yuzuha/canvas`. A organização interna de `src/` não cria estabilidade de deep
33
+ `yuzuha/sdk/*`, `yuzuha/testing`, `yuzuha/tooling`, `yuzuha/music`,
34
+ `yuzuha/images`, `yuzuha/canvas` e `yuzuha/canvas/card`. A organização interna de `src/` não cria
35
+ estabilidade de deep
35
36
  imports. Schema persistido,
36
37
  gramática e funções documentadas também fazem parte da compatibilidade.
37
38
 
@@ -41,6 +42,54 @@ gerado por `init` pertence ao consumidor e não precisa acompanhar a biblioteca.
41
42
 
42
43
  ## Preparar uma atualização
43
44
 
45
+ ### Migrar para 0.3.0
46
+
47
+ 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).
48
+
49
+ A 0.3.0 isola o function mode da raiz e transforma `yuzuha/canvas` na API
50
+ compatível com `@napi-rs/canvas`. Há três mudanças incompatíveis:
51
+
52
+ - `yuzuha/canvas` passa a exportar a API napi em processo (`createCanvas`,
53
+ `loadImage`, `registerFonts`, `GlobalFonts` e demais exports do peer). O
54
+ antigo builder de cartões migrou para `yuzuha/canvas/card`: troque
55
+ `import { createCanvas } from 'yuzuha/canvas'` por
56
+ `import { createCard } from 'yuzuha/canvas/card'` e renomeie a chamada.
57
+ - Comandos com `code`, eventos de script e plugins com `functions` exigem um
58
+ engine instalado: `new Yuzuha({ ..., engine: functions() })` ou
59
+ `bot.useEngine(functions())` com `functions` importado de `yuzuha/functions`.
60
+ Sem engine, o registro falha com `FUNCTIONS_REQUIRED`. A CLI injeta o engine
61
+ automaticamente, então `yuzuha.config.js` continua igual.
62
+ - `bot.runtime`, `bot.enableFunctions()` e `YuzuhaOptions.limits` foram
63
+ removidos. Use `bot.engine` (o `ScriptEngine` instalado), o engine passado nas
64
+ opções e `functions({ limits })` para limites próprios.
65
+
66
+ O schema persistido permanece em 2 e o SDK em 3.3.0; não há migração de dados.
67
+
68
+ ```sh
69
+ npm install yuzuha@0.3.0
70
+ ```
71
+
72
+ ### Migrar para 0.2.1
73
+
74
+ A 0.2.1 amplia a paridade nativa com o Fluxer.js. Os subpaths `yuzuha/sdk/*`
75
+ espelham `@fluxerjs/core/*` e os pacotes satélites `@fluxerjs/types`, `/rest`,
76
+ `/ws`, `/builders`, `/collection` e `/util`, que viram dependências diretas.
77
+ `yuzuha/sdk/voice` e `yuzuha/sdk/sharding` reexportam peers opcionais; instale-os
78
+ para usar esses caminhos. `@fluxerjs/sharding` declara peer exato em
79
+ `@fluxerjs/core` 3.0.0: consumidores precisam de `overrides` apontando o core
80
+ fixado, como no manifesto do próprio Yuzuha.
81
+
82
+ `ctx.resources` ganha quatro áreas novas — `gateway`, `instance`, `self` e
83
+ `cache` — e `collectors` ganha os streams `collectMessages`/`collectReactions`.
84
+ `messages` ganha `bulkFetch` e `searchAll`. Implementações completas próprias de
85
+ `Resources` precisam fornecer as novas áreas; `mockResources` continua aceitando
86
+ parciais. O schema persistido permanece em 2 e o SDK em 3.3.0; não há migração
87
+ de dados.
88
+
89
+ ```sh
90
+ npm install yuzuha@0.2.1
91
+ ```
92
+
44
93
  ### Migrar para 0.2.0
45
94
 
46
95
  A 0.2.0 acrescenta campos a `Embed` (`url`, `timestamp`, `author`, `footer.iconURL`,
@@ -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"}