yuzuha 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +3 -3
  3. package/VERSIONING.md +18 -5
  4. package/dist/commands/arguments.d.ts.map +1 -1
  5. package/dist/commands/arguments.js +40 -13
  6. package/dist/commands/arguments.js.map +1 -1
  7. package/dist/commands/builders.d.ts +1 -0
  8. package/dist/commands/builders.d.ts.map +1 -1
  9. package/dist/commands/builders.js +5 -0
  10. package/dist/commands/builders.js.map +1 -1
  11. package/dist/commands/context-like.d.ts +4 -0
  12. package/dist/commands/context-like.d.ts.map +1 -0
  13. package/dist/commands/context-like.js +2 -0
  14. package/dist/commands/context-like.js.map +1 -0
  15. package/dist/commands/context.d.ts +16 -2
  16. package/dist/commands/context.d.ts.map +1 -1
  17. package/dist/commands/context.js +53 -11
  18. package/dist/commands/context.js.map +1 -1
  19. package/dist/commands/definition.d.ts +1 -0
  20. package/dist/commands/definition.d.ts.map +1 -1
  21. package/dist/commands/definition.js.map +1 -1
  22. package/dist/commands/typed-arguments.js +2 -2
  23. package/dist/commands/typed-arguments.js.map +1 -1
  24. package/dist/domain/cdn.d.ts +23 -0
  25. package/dist/domain/cdn.d.ts.map +1 -0
  26. package/dist/domain/cdn.js +38 -0
  27. package/dist/domain/cdn.js.map +1 -0
  28. package/dist/domain/resolvers.d.ts +60 -0
  29. package/dist/domain/resolvers.d.ts.map +1 -0
  30. package/dist/domain/resolvers.js +31 -0
  31. package/dist/domain/resolvers.js.map +1 -0
  32. package/dist/domain/values.d.ts +2 -0
  33. package/dist/domain/values.d.ts.map +1 -1
  34. package/dist/domain/values.js +26 -1
  35. package/dist/domain/values.js.map +1 -1
  36. package/dist/framework/bot.d.ts +5 -0
  37. package/dist/framework/bot.d.ts.map +1 -1
  38. package/dist/framework/bot.js +44 -9
  39. package/dist/framework/bot.js.map +1 -1
  40. package/dist/framework/logging.d.ts +4 -1
  41. package/dist/framework/logging.d.ts.map +1 -1
  42. package/dist/framework/logging.js.map +1 -1
  43. package/dist/framework/options.d.ts +12 -0
  44. package/dist/framework/options.d.ts.map +1 -1
  45. package/dist/framework/options.js.map +1 -1
  46. package/dist/index.d.ts +11 -0
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +7 -0
  49. package/dist/index.js.map +1 -1
  50. package/dist/infrastructure/fluxer/resources/channels.d.ts.map +1 -1
  51. package/dist/infrastructure/fluxer/resources/channels.js +62 -8
  52. package/dist/infrastructure/fluxer/resources/channels.js.map +1 -1
  53. package/dist/infrastructure/fluxer/resources/expressions.d.ts.map +1 -1
  54. package/dist/infrastructure/fluxer/resources/expressions.js +2 -1
  55. package/dist/infrastructure/fluxer/resources/expressions.js.map +1 -1
  56. package/dist/infrastructure/fluxer/resources/messages.d.ts +2 -1
  57. package/dist/infrastructure/fluxer/resources/messages.d.ts.map +1 -1
  58. package/dist/infrastructure/fluxer/resources/messages.js +16 -7
  59. package/dist/infrastructure/fluxer/resources/messages.js.map +1 -1
  60. package/dist/infrastructure/fluxer/resources/users.d.ts +1 -1
  61. package/dist/infrastructure/fluxer/resources/users.d.ts.map +1 -1
  62. package/dist/infrastructure/fluxer/resources/users.js +41 -9
  63. package/dist/infrastructure/fluxer/resources/users.js.map +1 -1
  64. package/dist/infrastructure/fluxer/resources.d.ts +3 -1
  65. package/dist/infrastructure/fluxer/resources.d.ts.map +1 -1
  66. package/dist/infrastructure/fluxer/resources.js +8 -3
  67. package/dist/infrastructure/fluxer/resources.js.map +1 -1
  68. package/dist/infrastructure/fluxer/transport.d.ts +4 -1
  69. package/dist/infrastructure/fluxer/transport.d.ts.map +1 -1
  70. package/dist/infrastructure/fluxer/transport.js +41 -14
  71. package/dist/infrastructure/fluxer/transport.js.map +1 -1
  72. package/dist/ports/resources/channels.d.ts +20 -1
  73. package/dist/ports/resources/channels.d.ts.map +1 -1
  74. package/dist/ports/resources/channels.js.map +1 -1
  75. package/dist/ports/resources/users.d.ts +5 -0
  76. package/dist/ports/resources/users.d.ts.map +1 -1
  77. package/dist/ports/resources/users.js.map +1 -1
  78. package/dist/services/authorization.js +9 -9
  79. package/dist/services/authorization.js.map +1 -1
  80. package/dist/services/members.d.ts +5 -0
  81. package/dist/services/members.d.ts.map +1 -1
  82. package/dist/services/members.js +75 -5
  83. package/dist/services/members.js.map +1 -1
  84. package/dist/services/moderation.js +9 -9
  85. package/dist/services/moderation.js.map +1 -1
  86. package/dist/services/resource-authorization.d.ts.map +1 -1
  87. package/dist/services/resource-authorization.js +31 -17
  88. package/dist/services/resource-authorization.js.map +1 -1
  89. package/dist/services/retry.d.ts +17 -0
  90. package/dist/services/retry.d.ts.map +1 -0
  91. package/dist/services/retry.js +67 -0
  92. package/dist/services/retry.js.map +1 -0
  93. package/dist/shared/errors.d.ts +4 -1
  94. package/dist/shared/errors.d.ts.map +1 -1
  95. package/dist/shared/errors.js +8 -1
  96. package/dist/shared/errors.js.map +1 -1
  97. package/dist/testing.d.ts +8 -0
  98. package/dist/testing.d.ts.map +1 -1
  99. package/dist/testing.js +24 -4
  100. package/dist/testing.js.map +1 -1
  101. package/docs/API.md +11 -0
  102. package/docs/CANVAS.md +1 -1
  103. package/docs/FRAMEWORK.md +13 -0
  104. package/docs/IMAGES.md +9 -0
  105. package/docs/NATIVE.md +49 -1
  106. package/docs/PARITY-MATRIX.md +31 -32
  107. package/docs/QUICKSTART.md +2 -2
  108. package/docs/README.md +1 -1
  109. package/docs/TESTING.md +16 -0
  110. package/package.json +1 -1
  111. package/src/commands/arguments.ts +35 -13
  112. package/src/commands/builders.ts +4 -0
  113. package/src/commands/context-like.ts +7 -0
  114. package/src/commands/context.ts +56 -11
  115. package/src/commands/definition.ts +1 -0
  116. package/src/commands/typed-arguments.ts +2 -2
  117. package/src/domain/cdn.ts +55 -0
  118. package/src/domain/resolvers.ts +42 -0
  119. package/src/domain/values.ts +28 -1
  120. package/src/framework/bot.ts +41 -10
  121. package/src/framework/logging.ts +5 -1
  122. package/src/framework/options.ts +4 -0
  123. package/src/index.ts +13 -0
  124. package/src/infrastructure/fluxer/resources/channels.ts +53 -8
  125. package/src/infrastructure/fluxer/resources/expressions.ts +2 -1
  126. package/src/infrastructure/fluxer/resources/messages.ts +17 -6
  127. package/src/infrastructure/fluxer/resources/users.ts +38 -9
  128. package/src/infrastructure/fluxer/resources.ts +4 -3
  129. package/src/infrastructure/fluxer/transport.ts +42 -13
  130. package/src/ports/resources/channels.ts +11 -1
  131. package/src/ports/resources/users.ts +3 -0
  132. package/src/services/authorization.ts +9 -9
  133. package/src/services/members.ts +70 -5
  134. package/src/services/moderation.ts +9 -9
  135. package/src/services/resource-authorization.ts +31 -17
  136. package/src/services/retry.ts +74 -0
  137. package/src/shared/errors.ts +10 -1
  138. package/src/testing.ts +28 -4
package/CHANGELOG.md CHANGED
@@ -21,6 +21,29 @@ documentos. Veja a [política completa](VERSIONING.md).
21
21
 
22
22
  </details>
23
23
 
24
+ ## v0.3.1 · 06/11/2026
25
+
26
+ Erros tipados de guarda, retentativa de transporte, resolvers e helpers de canais e CDN — a atualização da biblioteca Yuzuha foi preparada em 06/11/2026 (v0.3.1).
27
+
28
+ **Notas de comportamento**
29
+ - `GuardError.reason` é aditivo (`code: 'GUARD'` inalterado); `ctx.mod.can*` devolve `false` para `MEMBER_NOT_FOUND`.
30
+ - `YuzuhaOptions.retry` fica LIGADO por padrão (`{ requests: 1, delayMs: 750 }`) só em falhas de rede transitórias; `send`/`reply` reenviam só quando a falha prova que a mensagem não saiu.
31
+ - `Resources` ganhou métodos exigidos — `users.bannerURL`, `users.resolveBan`, `channels.lock`/`unlock` e a opção `merge` de `overwrite`; adapters completos devem implementá-los.
32
+
33
+ - `GuardError` ganhou `reason` tipado (`GuardReason`, ex.: `PERMISSION_MISSING_AUTHOR`, `HIERARCHY`, `SELF_TARGET`, `MEMBER_NOT_FOUND`, `NOT_BANNED`, `COOLDOWN`) e o helper `isGuardReason(error, ...reasons)`; mensagens e `code: 'GUARD'` inalterados.
34
+ - Falhas de alvo ausente em moderação agora viram `GuardError` — `MEMBER_NOT_FOUND` (`Membro não encontrado.`) e `NOT_BANNED` (`Este usuário não está banido.`) — mapeadas pelo adaptador via `code`/`status` do SDK; `ctx.mod.can*` devolve `false` nesses casos.
35
+ - `ctx.deleteCommandMessage()` apaga a mensagem de comando e degrada `reply` para `send`; `transport.reply` reenvia sem referência quando o alvo já não existe (404).
36
+ - `ctx.send`/`ctx.reply` aceitam `{ ttlMs }` (1s–24h) e agendam a exclusão via `timers` injetável do bot; pendências são canceladas em `bot.destroy()` e falhas viram `onLog` `message.ttl_failed`.
37
+ - `YuzuhaOptions.retry` controla retentativas de transporte (`{ requests: 1, delayMs: 750 }` por padrão; `false` desliga) só em falhas transitórias de rede, detectadas por `error.code`/`cause.code` — erros de API nunca repetem; emissões por `onLog` `transport.retry`.
38
+ - `ctx.members.resolve`, `resolveUser` e `resolveBan` resolvem texto livre (menção, ID, nome exato ou prefixo, insensível a caixa e acentos) em `found`/`ambiguous`/`missing`; `users.resolveBan` expõe o mesmo em recursos com guarda `BanMembers`.
39
+ - `createTestBot({ authorization: 'off' })` expõe os recursos brutos nos testes (`unsafeDisableResourceAuthorization`, só para testes, registrado como `authorization.disabled`); `CommandContextLike` tipa helpers de contexto.
40
+ - `arg.user().anywhere()` liga menção ou ID em qualquer posição ao argumento (`purge 2 @user`), removendo o token antes do parse posicional e do `rest()`.
41
+ - `users.bannerURL(userID, guildID?)` resolve o banner pelo perfil (servidor primeiro) e `UserProfileInfo` traz `bannerURL`; assets animados (`a_*`) saem como `.gif` em todos os objetos de info.
42
+ - Novo `cdn`/`ctx.cdn` monta URLs do CDN sem cliente nativo (`avatar`, `banner`, `guildIcon`, `memberBanner`, `emoji`, `sticker`, `asset(url, { size, format })`); `YuzuhaOptions.cdn.mediaBase` define a base.
43
+ - `channels.overwrite` ganhou `merge: true` para PATCH de bits (`allow`/`deny`/`neutral`) preservando bits não relacionados; `channels.lock`/`unlock` bloqueiam a permissão por tipo de canal (`SendMessages`/`Connect`) de forma idempotente.
44
+ - Novo `cleanReason(texto, { maxLength? })` remove menções e trunca no limite de motivos para compor razões de moderação.
45
+ - Novos exports `formatDuration(ms)` (pt-BR, ex.: `10 minutos`) e `MAX_TIMEOUT_MS` (28 dias), junto a `parseDuration`; `CaseRecord.duration` é sempre em milissegundos.
46
+
24
47
  ## v0.3.0 · 04/11/2026
25
48
 
26
49
  Function mode isolado da raiz e `yuzuha/canvas` compatível com `@napi-rs/canvas`. Esta atualização da biblioteca Yuzuha foi preparada em 04/11/2026 (v0.3.0).
package/README.md CHANGED
@@ -10,7 +10,7 @@ pacotes satélites por `yuzuha/sdk/*` (client, errors, message, cluster, interna
10
10
  types, rest, ws, builders, collection e util, além de voice e sharding como peers
11
11
  opcionais).
12
12
 
13
- [0.3.0](CHANGELOG.md) · Node **22.13+** · ESM · [MIT](LICENSE)
13
+ [0.3.1](CHANGELOG.md) · Node **22.13+** · ESM · [MIT](LICENSE)
14
14
 
15
15
  [Começar](#começar) · [Comandos](#escrever-comandos) · [Recursos](#recursos) · [Testes](#testar-sem-token) · [Documentação](#documentação)
16
16
 
@@ -19,7 +19,7 @@ opcionais).
19
19
  ### Criar um bot
20
20
 
21
21
  ```sh
22
- npx yuzuha@0.3.0 init ./meu-bot --ts
22
+ npx yuzuha@0.3.1 init ./meu-bot --ts
23
23
  cd meu-bot
24
24
  npm install
25
25
  npm run check
@@ -45,7 +45,7 @@ para incluir um comando de exemplo com scripts.
45
45
  ### Usar em um projeto existente
46
46
 
47
47
  ```sh
48
- npm install yuzuha@0.3.0
48
+ npm install yuzuha@0.3.1
49
49
  ```
50
50
 
51
51
  Use `"type": "module"` no `package.json`. O [guia inicial](docs/QUICKSTART.md)
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.3.0**.
4
+ A versão desta atualização é **0.3.1**.
5
5
 
6
6
  ## Pacote e histórico
7
7
 
8
8
  | Lugar | Formato nesta versão |
9
9
  |---|---|
10
- | `package.json` e entrada raiz de `package-lock.json` | `0.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` |
10
+ | `package.json` e entrada raiz de `package-lock.json` | `0.3.1` |
11
+ | Pacote npm e saída de `yuzuha --version` | `0.3.1` |
12
+ | Título do changelog | `## v0.3.1 · 06/11/2026` |
13
+ | Tag Git | `v0.3.1` |
14
14
 
15
15
  O SDK e a CLI pertencem ao mesmo pacote. Para bibliotecas, a convenção Hory mantém
16
16
  SemVer sem `m`, sem seções por superfície e sem sufixos de canal.
@@ -42,6 +42,19 @@ gerado por `init` pertence ao consumidor e não precisa acompanhar a biblioteca.
42
42
 
43
43
  ## Preparar uma atualização
44
44
 
45
+ ### Migrar para 0.3.1
46
+
47
+ A 0.3.1 é aditiva com três notas de comportamento: `GuardError` ganhou
48
+ `reason` (aditivo, `code` inalterado); `ctx.mod.can*` passou a devolver
49
+ `false` quando o alvo não existe (`MEMBER_NOT_FOUND` agora é GuardError);
50
+ e `YuzuhaOptions.retry` fica LIGADO por padrão (1 tentativa, 750 ms) só
51
+ para falhas transitórias de rede — deletes, edições, reações e envios que
52
+ comprovadamente não saíram (falha de conexão), nunca erros de API, e o
53
+ 404 na retentativa de delete conta como sucesso. Adapters `Resources`
54
+ completos devem implementar os novos métodos exigidos:
55
+ `users.bannerURL`, `users.resolveBan`, `channels.lock`/`unlock` e a
56
+ opção `merge` de `channels.overwrite`.
57
+
45
58
  ### Migrar para 0.3.0
46
59
 
47
60
  As interfaces `Resources` ganharam métodos obrigatórios; quem mantém um adaptador `Resources` próprio precisa implementá-los (veja o CHANGELOG `v0.3.0` para a lista).
@@ -1 +1 @@
1
- {"version":3,"file":"arguments.d.ts","sourceRoot":"","sources":["../../src/commands/arguments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAI1D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAqBtD,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,SAAS,kBAAkB,EAAE,EAAE,WAAW,SAAY,GAAG,IAAI,CAuCrH;AAmCD,wBAAgB,cAAc,CAAC,WAAW,EAAE,SAAS,kBAAkB,EAAE,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAShI;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBhD;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,SAAS,kBAAkB,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAY7G;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,SAAS,kBAAkB,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG;IAC7G,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACrD,CAiCA"}
1
+ {"version":3,"file":"arguments.d.ts","sourceRoot":"","sources":["../../src/commands/arguments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAI1D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAqBtD,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,SAAS,kBAAkB,EAAE,EAAE,WAAW,SAAY,GAAG,IAAI,CA2CrH;AAmCD,wBAAgB,cAAc,CAAC,WAAW,EAAE,SAAS,kBAAkB,EAAE,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAwBhI;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBhD;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,SAAS,kBAAkB,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAe7G;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,SAAS,kBAAkB,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG;IAC7G,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACrD,CAiCA"}
@@ -2,14 +2,14 @@ import { parseDuration, userID } from '../domain/values.js';
2
2
  import { GuardError, YuzuhaError } from '../shared/errors.js';
3
3
  function validateValue(definition, value) {
4
4
  if (definition.choices && !definition.choices.some(choice => String(choice) === String(value))) {
5
- throw new GuardError(`${definition.name}: escolha ${definition.choices.join(', ')}.`);
5
+ throw new GuardError(`${definition.name}: escolha ${definition.choices.join(', ')}.`, 'INVALID_ARGUMENT');
6
6
  }
7
7
  const size = typeof value === 'string' ? value.length : value;
8
8
  if (typeof size === 'number') {
9
9
  if (definition.min !== undefined && size < definition.min)
10
- throw new GuardError(`${definition.name}: mínimo ${definition.min}${typeof value === 'string' ? ' caracteres' : ''}.`);
10
+ throw new GuardError(`${definition.name}: mínimo ${definition.min}${typeof value === 'string' ? ' caracteres' : ''}.`, 'INVALID_ARGUMENT');
11
11
  if (definition.max !== undefined && size > definition.max)
12
- throw new GuardError(`${definition.name}: máximo ${definition.max}${typeof value === 'string' ? ' caracteres' : ''}.`);
12
+ throw new GuardError(`${definition.name}: máximo ${definition.max}${typeof value === 'string' ? ' caracteres' : ''}.`, 'INVALID_ARGUMENT');
13
13
  }
14
14
  for (const validator of definition.validators ?? []) {
15
15
  const accepted = validator.check(value);
@@ -18,15 +18,19 @@ function validateValue(definition, value) {
18
18
  throw new YuzuhaError('COMMAND_ARGS', `Validador de ${definition.name} deve retornar um booleano síncrono.`);
19
19
  }
20
20
  if (!accepted)
21
- throw new GuardError(validator.message);
21
+ throw new GuardError(validator.message, 'INVALID_ARGUMENT');
22
22
  }
23
23
  }
24
24
  export function validateArgumentDefinitions(definitions, commandName = 'comando') {
25
25
  const names = new Set();
26
+ if (definitions.filter(definition => definition.anywhere).length > 1) {
27
+ throw new YuzuhaError('COMMAND_ARGS', `No máximo um argumento anywhere em ${commandName}.`);
28
+ }
26
29
  for (const [index, definition] of definitions.entries()) {
27
30
  if (typeof definition.name !== 'string' || !definition.name || names.has(definition.name)
28
31
  || (definition.required !== undefined && typeof definition.required !== 'boolean')
29
32
  || (definition.rest !== undefined && typeof definition.rest !== 'boolean')
33
+ || (definition.anywhere !== undefined && (typeof definition.anywhere !== 'boolean' || definition.type !== 'user' || definition.rest === true))
30
34
  || (definition.description !== undefined && typeof definition.description !== 'string')
31
35
  || (definition.aliases !== undefined && (!Array.isArray(definition.aliases) || definition.aliases.some(alias => typeof alias !== 'string')))
32
36
  || (definition.rest && index !== definitions.length - 1)
@@ -71,20 +75,20 @@ function parseValue(definition, input, required = definition.required) {
71
75
  return value;
72
76
  }
73
77
  else if (required)
74
- throw new GuardError(`Informe o argumento ${definition.name}.`);
78
+ throw new GuardError(`Informe o argumento ${definition.name}.`, 'INVALID_ARGUMENT');
75
79
  return undefined;
76
80
  }
77
81
  let value = input;
78
82
  if (definition.type === 'number' || definition.type === 'integer') {
79
83
  value = Number(input);
80
84
  if (!input.trim() || !Number.isFinite(value) || (definition.type === 'integer' && !Number.isSafeInteger(value))) {
81
- throw new GuardError(`${definition.name} deve ser um número${definition.type === 'integer' ? ' inteiro' : ''}.`);
85
+ throw new GuardError(`${definition.name} deve ser um número${definition.type === 'integer' ? ' inteiro' : ''}.`, 'INVALID_ARGUMENT');
82
86
  }
83
87
  }
84
88
  else if (definition.type === 'boolean') {
85
89
  const normalized = input.toLowerCase();
86
90
  if (!['true', 'false', 'yes', 'no', 'sim', 'não', 'nao', '1', '0'].includes(normalized)) {
87
- throw new GuardError(`${definition.name} deve ser true ou false.`);
91
+ throw new GuardError(`${definition.name} deve ser true ou false.`, 'INVALID_ARGUMENT');
88
92
  }
89
93
  value = ['true', 'yes', 'sim', '1'].includes(normalized);
90
94
  }
@@ -97,7 +101,7 @@ function parseValue(definition, input, required = definition.required) {
97
101
  catch (error) {
98
102
  if (!(error instanceof YuzuhaError) || error.code !== 'DURATION')
99
103
  throw error;
100
- throw new GuardError(`${definition.name}: ${error.message}`);
104
+ throw new GuardError(`${definition.name}: ${error.message}`, 'INVALID_ARGUMENT');
101
105
  }
102
106
  }
103
107
  validateValue(definition, value);
@@ -105,9 +109,29 @@ function parseValue(definition, input, required = definition.required) {
105
109
  }
106
110
  export function parseArguments(definitions, tokens) {
107
111
  const args = new Map();
112
+ const positional = [...tokens];
113
+ const matched = new Map();
114
+ for (const definition of definitions) {
115
+ if (!definition.anywhere)
116
+ continue;
117
+ let index = positional.findIndex(token => /^<@!?\d+>$/.test(token));
118
+ if (index < 0) {
119
+ for (let candidate = positional.length - 1; candidate >= 0; candidate--) {
120
+ if (/^\d{17,20}$/.test(positional[candidate])) {
121
+ index = candidate;
122
+ break;
123
+ }
124
+ }
125
+ }
126
+ if (index >= 0)
127
+ matched.set(definition.name, positional.splice(index, 1)[0]);
128
+ }
129
+ let position = 0;
108
130
  for (let index = 0; index < definitions.length; index++) {
109
131
  const definition = definitions[index];
110
- const input = definition.rest ? tokens.slice(index).join(' ') : tokens[index];
132
+ const input = definition.rest ? positional.slice(position).join(' ')
133
+ : definition.anywhere ? matched.get(definition.name)
134
+ : positional[position++];
111
135
  const value = parseValue(definition, input);
112
136
  if (value !== undefined)
113
137
  args.set(definition.name, value);
@@ -146,12 +170,15 @@ export function tokenize(input) {
146
170
  }
147
171
  }
148
172
  if (quote)
149
- throw new GuardError('Feche as aspas do argumento.');
173
+ throw new GuardError('Feche as aspas do argumento.', 'INVALID_ARGUMENT');
150
174
  if (started)
151
175
  result.push(token);
152
176
  return result;
153
177
  }
154
178
  export function validateFlagDefinitions(definitions, commandName) {
179
+ if (definitions.some(definition => definition.anywhere)) {
180
+ throw new YuzuhaError('ARGUMENT_SCHEMA', `.anywhere() só vale para argumentos posicionais de user em ${commandName}.`);
181
+ }
155
182
  validateArgumentDefinitions(definitions, commandName);
156
183
  const names = new Set();
157
184
  for (const definition of definitions) {
@@ -191,9 +218,9 @@ export function parseFlags(definitions, tokens) {
191
218
  const match = /^--?([^=]+)(?:=([\s\S]*))?$/.exec(token);
192
219
  const definition = match && lookup.get(match[1]);
193
220
  if (!match || !definition)
194
- throw new GuardError(`Flag desconhecida: ${token.split('=')[0]}.`);
221
+ throw new GuardError(`Flag desconhecida: ${token.split('=')[0]}.`, 'INVALID_ARGUMENT');
195
222
  if (values.has(definition.name))
196
- throw new GuardError(`Flag repetida: --${definition.name}.`);
223
+ throw new GuardError(`Flag repetida: --${definition.name}.`, 'INVALID_ARGUMENT');
197
224
  let input = match[2];
198
225
  if (input === undefined) {
199
226
  if (definition.type === 'boolean')
@@ -201,7 +228,7 @@ export function parseFlags(definitions, tokens) {
201
228
  else {
202
229
  input = tokens[index + 1];
203
230
  if (input === undefined || input.startsWith('--') || /^-[^\d.]/u.test(input))
204
- throw new GuardError(`Informe o valor de --${definition.name}.`);
231
+ throw new GuardError(`Informe o valor de --${definition.name}.`, 'INVALID_ARGUMENT');
205
232
  index++;
206
233
  }
207
234
  }
@@ -1 +1 @@
1
- {"version":3,"file":"arguments.js","sourceRoot":"","sources":["../../src/commands/arguments.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ArgumentDefinition } from './definition.js';\nimport { parseDuration, userID } from '../domain/values.js';\nimport { GuardError, YuzuhaError } from '../shared/errors.js';\n\nexport type ArgumentValue = string | number | boolean;\n\nfunction validateValue(definition: ArgumentDefinition, value: ArgumentValue): void {\n if (definition.choices && !definition.choices.some(choice => String(choice) === String(value))) {\n throw new GuardError(`${definition.name}: escolha ${definition.choices.join(', ')}.`);\n }\n const size = typeof value === 'string' ? value.length : value;\n if (typeof size === 'number') {\n if (definition.min !== undefined && size < definition.min) throw new GuardError(`${definition.name}: mínimo ${definition.min}${typeof value === 'string' ? ' caracteres' : ''}.`);\n if (definition.max !== undefined && size > definition.max) throw new GuardError(`${definition.name}: máximo ${definition.max}${typeof value === 'string' ? ' caracteres' : ''}.`);\n }\n for (const validator of definition.validators ?? []) {\n const accepted: unknown = validator.check(value);\n if (typeof accepted !== 'boolean') {\n void Promise.resolve(accepted).catch(() => undefined);\n throw new YuzuhaError('COMMAND_ARGS', `Validador de ${definition.name} deve retornar um booleano síncrono.`);\n }\n if (!accepted) throw new GuardError(validator.message);\n }\n}\n\nexport function validateArgumentDefinitions(definitions: readonly ArgumentDefinition[], commandName = 'comando'): void {\n const names = new Set<string>();\n for (const [index, definition] of definitions.entries()) {\n if (typeof definition.name !== 'string' || !definition.name || names.has(definition.name)\n || (definition.required !== undefined && typeof definition.required !== 'boolean')\n || (definition.rest !== undefined && typeof definition.rest !== 'boolean')\n || (definition.description !== undefined && typeof definition.description !== 'string')\n || (definition.aliases !== undefined && (!Array.isArray(definition.aliases) || definition.aliases.some(alias => typeof alias !== 'string')))\n || (definition.rest && index !== definitions.length - 1)\n || (definition.type !== undefined && !['string', 'number', 'integer', 'user', 'duration', 'boolean'].includes(definition.type))\n || (definition.choices !== undefined && (!Array.isArray(definition.choices)\n || !definition.choices.length || definition.choices.some(choice => !['string', 'number', 'boolean'].includes(typeof choice))))\n || (definition.min !== undefined && !Number.isFinite(definition.min))\n || (definition.max !== undefined && !Number.isFinite(definition.max))\n || (definition.min !== undefined && definition.max !== undefined && definition.min > definition.max)\n || (definition.type === 'boolean' && (definition.min !== undefined || definition.max !== undefined))\n || (definition.validators !== undefined && (!Array.isArray(definition.validators)\n || definition.validators.some(validator => !validator || typeof validator.check !== 'function' || typeof validator.message !== 'string')))) {\n throw new YuzuhaError('COMMAND_ARGS', `Argumentos inválidos em ${commandName}.`);\n }\n if (definition.defaultValue !== undefined) {\n const value = definition.defaultValue;\n const type = definition.type ?? 'string';\n const invalidType = type === 'boolean' ? typeof value !== 'boolean'\n : ['number', 'integer', 'duration'].includes(type) ? typeof value !== 'number' || !Number.isFinite(value)\n || (type === 'integer' && !Number.isSafeInteger(value))\n || (type === 'duration' && (!Number.isSafeInteger(value) || value <= 0))\n : typeof value !== 'string';\n if (invalidType) throw new YuzuhaError('COMMAND_ARGS', `Valor padrão inválido para ${definition.name} em ${commandName}.`);\n try {\n validateValue(definition, type === 'user' ? userID(String(value)) : value);\n }\n catch (error) {\n if (!(error instanceof GuardError)) throw error;\n throw new YuzuhaError('COMMAND_ARGS', `Valor padrão inválido para ${definition.name}: ${error.message}`);\n }\n }\n names.add(definition.name);\n }\n}\n\nfunction parseValue(definition: ArgumentDefinition, input: string | undefined, required = definition.required): ArgumentValue | undefined {\n if (input === undefined || input.length === 0) {\n if (definition.defaultValue !== undefined) {\n const value = definition.type === 'user' ? userID(String(definition.defaultValue)) : definition.defaultValue;\n validateValue(definition, value);\n return value;\n } else if (required) throw new GuardError(`Informe o argumento ${definition.name}.`);\n return undefined;\n }\n let value: ArgumentValue = input;\n if (definition.type === 'number' || definition.type === 'integer') {\n value = Number(input);\n if (!input.trim() || !Number.isFinite(value) || (definition.type === 'integer' && !Number.isSafeInteger(value))) {\n throw new GuardError(`${definition.name} deve ser um número${definition.type === 'integer' ? ' inteiro' : ''}.`);\n }\n } else if (definition.type === 'boolean') {\n const normalized = input.toLowerCase();\n if (!['true', 'false', 'yes', 'no', 'sim', 'não', 'nao', '1', '0'].includes(normalized)) {\n throw new GuardError(`${definition.name} deve ser true ou false.`);\n }\n value = ['true', 'yes', 'sim', '1'].includes(normalized);\n } else if (definition.type === 'user') value = userID(input);\n else if (definition.type === 'duration') {\n try { value = parseDuration(input); }\n catch (error) {\n if (!(error instanceof YuzuhaError) || error.code !== 'DURATION') throw error;\n throw new GuardError(`${definition.name}: ${error.message}`);\n }\n }\n validateValue(definition, value);\n return value;\n}\n\nexport function parseArguments(definitions: readonly ArgumentDefinition[], tokens: readonly string[]): Map<string, ArgumentValue> {\n const args = new Map<string, ArgumentValue>();\n for (let index = 0; index < definitions.length; index++) {\n const definition = definitions[index]!;\n const input = definition.rest ? tokens.slice(index).join(' ') : tokens[index];\n const value = parseValue(definition, input);\n if (value !== undefined) args.set(definition.name, value);\n }\n return args;\n}\n\nexport function tokenize(input: string): string[] {\n if (!/[\\\\\"']/.test(input)) return input.match(/\\S+/g) ?? [];\n const result: string[] = [];\n let token = '', quote = '', last = '', started = false;\n for (let index = 0; index < input.length; index++) {\n const character = input[index]!;\n if (character === '\\\\' && index + 1 < input.length) { last = input[++index]!; token += last; started = true; }\n else if (quote && character === quote) quote = '';\n else if (!quote && (!started || last === '=') && (character === '\"' || character === \"'\")) { quote = character; started = true; }\n else if (!quote && /\\s/.test(character)) {\n if (started) result.push(token);\n token = ''; last = ''; started = false;\n } else { token += character; last = character; started = true; }\n }\n if (quote) throw new GuardError('Feche as aspas do argumento.');\n if (started) result.push(token);\n return result;\n}\n\nexport function validateFlagDefinitions(definitions: readonly ArgumentDefinition[], commandName: string): void {\n validateArgumentDefinitions(definitions, commandName);\n const names = new Set<string>();\n for (const definition of definitions) {\n if (definition.rest) throw new YuzuhaError('COMMAND_FLAGS', `Flag ${definition.name} não aceita rest().`);\n for (const name of [definition.name, ...definition.aliases ?? []]) {\n if (!/^[\\p{L}][\\p{L}\\p{N}_-]*$/u.test(name) || names.has(name)) {\n throw new YuzuhaError('COMMAND_FLAGS', `Nome ou alias de flag inválido ou duplicado em ${commandName}: ${name}.`);\n }\n names.add(name);\n }\n }\n}\n\nexport function parseFlags(definitions: readonly ArgumentDefinition[] | undefined, tokens: readonly string[]): {\n tokens: string[]; flags: Map<string, ArgumentValue>;\n} {\n if (definitions === undefined) return { tokens: [...tokens], flags: new Map() };\n const lookup = new Map<string, ArgumentDefinition>();\n for (const definition of definitions) for (const name of [definition.name, ...definition.aliases ?? []]) lookup.set(name, definition);\n const values = new Map<string, ArgumentValue>(), positional: string[] = [];\n let terminated = false;\n for (let index = 0; index < tokens.length; index++) {\n const token = tokens[index]!;\n if (terminated) { positional.push(token); continue; }\n if (token === '--') { terminated = true; continue; }\n if (!(token.startsWith('--') || /^-[^\\d.]/u.test(token)) || token === '-') { positional.push(token); continue; }\n const match = /^--?([^=]+)(?:=([\\s\\S]*))?$/.exec(token);\n const definition = match && lookup.get(match[1]!);\n if (!match || !definition) throw new GuardError(`Flag desconhecida: ${token.split('=')[0]}.`);\n if (values.has(definition.name)) throw new GuardError(`Flag repetida: --${definition.name}.`);\n let input = match[2];\n if (input === undefined) {\n if (definition.type === 'boolean') input = 'true';\n else {\n input = tokens[index + 1];\n if (input === undefined || input.startsWith('--') || /^-[^\\d.]/u.test(input)) throw new GuardError(`Informe o valor de --${definition.name}.`);\n index++;\n }\n }\n const value = parseValue(definition, input, true);\n if (value !== undefined) values.set(definition.name, value);\n }\n for (const definition of definitions) {\n if (values.has(definition.name)) continue;\n const value = parseValue(definition, undefined);\n if (value !== undefined) values.set(definition.name, value);\n }\n return { tokens: positional, flags: values };\n}\n"]}
1
+ {"version":3,"file":"arguments.js","sourceRoot":"","sources":["../../src/commands/arguments.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ArgumentDefinition } from './definition.js';\nimport { parseDuration, userID } from '../domain/values.js';\nimport { GuardError, YuzuhaError } from '../shared/errors.js';\n\nexport type ArgumentValue = string | number | boolean;\n\nfunction validateValue(definition: ArgumentDefinition, value: ArgumentValue): void {\n if (definition.choices && !definition.choices.some(choice => String(choice) === String(value))) {\n throw new GuardError(`${definition.name}: escolha ${definition.choices.join(', ')}.`, 'INVALID_ARGUMENT');\n }\n const size = typeof value === 'string' ? value.length : value;\n if (typeof size === 'number') {\n if (definition.min !== undefined && size < definition.min) throw new GuardError(`${definition.name}: mínimo ${definition.min}${typeof value === 'string' ? ' caracteres' : ''}.`, 'INVALID_ARGUMENT');\n if (definition.max !== undefined && size > definition.max) throw new GuardError(`${definition.name}: máximo ${definition.max}${typeof value === 'string' ? ' caracteres' : ''}.`, 'INVALID_ARGUMENT');\n }\n for (const validator of definition.validators ?? []) {\n const accepted: unknown = validator.check(value);\n if (typeof accepted !== 'boolean') {\n void Promise.resolve(accepted).catch(() => undefined);\n throw new YuzuhaError('COMMAND_ARGS', `Validador de ${definition.name} deve retornar um booleano síncrono.`);\n }\n if (!accepted) throw new GuardError(validator.message, 'INVALID_ARGUMENT');\n }\n}\n\nexport function validateArgumentDefinitions(definitions: readonly ArgumentDefinition[], commandName = 'comando'): void {\n const names = new Set<string>();\n if (definitions.filter(definition => definition.anywhere).length > 1) {\n throw new YuzuhaError('COMMAND_ARGS', `No máximo um argumento anywhere em ${commandName}.`);\n }\n for (const [index, definition] of definitions.entries()) {\n if (typeof definition.name !== 'string' || !definition.name || names.has(definition.name)\n || (definition.required !== undefined && typeof definition.required !== 'boolean')\n || (definition.rest !== undefined && typeof definition.rest !== 'boolean')\n || (definition.anywhere !== undefined && (typeof definition.anywhere !== 'boolean' || definition.type !== 'user' || definition.rest === true))\n || (definition.description !== undefined && typeof definition.description !== 'string')\n || (definition.aliases !== undefined && (!Array.isArray(definition.aliases) || definition.aliases.some(alias => typeof alias !== 'string')))\n || (definition.rest && index !== definitions.length - 1)\n || (definition.type !== undefined && !['string', 'number', 'integer', 'user', 'duration', 'boolean'].includes(definition.type))\n || (definition.choices !== undefined && (!Array.isArray(definition.choices)\n || !definition.choices.length || definition.choices.some(choice => !['string', 'number', 'boolean'].includes(typeof choice))))\n || (definition.min !== undefined && !Number.isFinite(definition.min))\n || (definition.max !== undefined && !Number.isFinite(definition.max))\n || (definition.min !== undefined && definition.max !== undefined && definition.min > definition.max)\n || (definition.type === 'boolean' && (definition.min !== undefined || definition.max !== undefined))\n || (definition.validators !== undefined && (!Array.isArray(definition.validators)\n || definition.validators.some(validator => !validator || typeof validator.check !== 'function' || typeof validator.message !== 'string')))) {\n throw new YuzuhaError('COMMAND_ARGS', `Argumentos inválidos em ${commandName}.`);\n }\n if (definition.defaultValue !== undefined) {\n const value = definition.defaultValue;\n const type = definition.type ?? 'string';\n const invalidType = type === 'boolean' ? typeof value !== 'boolean'\n : ['number', 'integer', 'duration'].includes(type) ? typeof value !== 'number' || !Number.isFinite(value)\n || (type === 'integer' && !Number.isSafeInteger(value))\n || (type === 'duration' && (!Number.isSafeInteger(value) || value <= 0))\n : typeof value !== 'string';\n if (invalidType) throw new YuzuhaError('COMMAND_ARGS', `Valor padrão inválido para ${definition.name} em ${commandName}.`);\n try {\n validateValue(definition, type === 'user' ? userID(String(value)) : value);\n }\n catch (error) {\n if (!(error instanceof GuardError)) throw error;\n throw new YuzuhaError('COMMAND_ARGS', `Valor padrão inválido para ${definition.name}: ${error.message}`);\n }\n }\n names.add(definition.name);\n }\n}\n\nfunction parseValue(definition: ArgumentDefinition, input: string | undefined, required = definition.required): ArgumentValue | undefined {\n if (input === undefined || input.length === 0) {\n if (definition.defaultValue !== undefined) {\n const value = definition.type === 'user' ? userID(String(definition.defaultValue)) : definition.defaultValue;\n validateValue(definition, value);\n return value;\n } else if (required) throw new GuardError(`Informe o argumento ${definition.name}.`, 'INVALID_ARGUMENT');\n return undefined;\n }\n let value: ArgumentValue = input;\n if (definition.type === 'number' || definition.type === 'integer') {\n value = Number(input);\n if (!input.trim() || !Number.isFinite(value) || (definition.type === 'integer' && !Number.isSafeInteger(value))) {\n throw new GuardError(`${definition.name} deve ser um número${definition.type === 'integer' ? ' inteiro' : ''}.`, 'INVALID_ARGUMENT');\n }\n } else if (definition.type === 'boolean') {\n const normalized = input.toLowerCase();\n if (!['true', 'false', 'yes', 'no', 'sim', 'não', 'nao', '1', '0'].includes(normalized)) {\n throw new GuardError(`${definition.name} deve ser true ou false.`, 'INVALID_ARGUMENT');\n }\n value = ['true', 'yes', 'sim', '1'].includes(normalized);\n } else if (definition.type === 'user') value = userID(input);\n else if (definition.type === 'duration') {\n try { value = parseDuration(input); }\n catch (error) {\n if (!(error instanceof YuzuhaError) || error.code !== 'DURATION') throw error;\n throw new GuardError(`${definition.name}: ${error.message}`, 'INVALID_ARGUMENT');\n }\n }\n validateValue(definition, value);\n return value;\n}\n\nexport function parseArguments(definitions: readonly ArgumentDefinition[], tokens: readonly string[]): Map<string, ArgumentValue> {\n const args = new Map<string, ArgumentValue>();\n const positional = [...tokens];\n const matched = new Map<string, string>();\n for (const definition of definitions) {\n if (!definition.anywhere) continue;\n let index = positional.findIndex(token => /^<@!?\\d+>$/.test(token));\n if (index < 0) {\n for (let candidate = positional.length - 1; candidate >= 0; candidate--) {\n if (/^\\d{17,20}$/.test(positional[candidate]!)) { index = candidate; break; }\n }\n }\n if (index >= 0) matched.set(definition.name, positional.splice(index, 1)[0]!);\n }\n let position = 0;\n for (let index = 0; index < definitions.length; index++) {\n const definition = definitions[index]!;\n const input = definition.rest ? positional.slice(position).join(' ')\n : definition.anywhere ? matched.get(definition.name)\n : positional[position++];\n const value = parseValue(definition, input);\n if (value !== undefined) args.set(definition.name, value);\n }\n return args;\n}\n\nexport function tokenize(input: string): string[] {\n if (!/[\\\\\"']/.test(input)) return input.match(/\\S+/g) ?? [];\n const result: string[] = [];\n let token = '', quote = '', last = '', started = false;\n for (let index = 0; index < input.length; index++) {\n const character = input[index]!;\n if (character === '\\\\' && index + 1 < input.length) { last = input[++index]!; token += last; started = true; }\n else if (quote && character === quote) quote = '';\n else if (!quote && (!started || last === '=') && (character === '\"' || character === \"'\")) { quote = character; started = true; }\n else if (!quote && /\\s/.test(character)) {\n if (started) result.push(token);\n token = ''; last = ''; started = false;\n } else { token += character; last = character; started = true; }\n }\n if (quote) throw new GuardError('Feche as aspas do argumento.', 'INVALID_ARGUMENT');\n if (started) result.push(token);\n return result;\n}\n\nexport function validateFlagDefinitions(definitions: readonly ArgumentDefinition[], commandName: string): void {\n if (definitions.some(definition => definition.anywhere)) {\n throw new YuzuhaError('ARGUMENT_SCHEMA', `.anywhere() só vale para argumentos posicionais de user em ${commandName}.`);\n }\n validateArgumentDefinitions(definitions, commandName);\n const names = new Set<string>();\n for (const definition of definitions) {\n if (definition.rest) throw new YuzuhaError('COMMAND_FLAGS', `Flag ${definition.name} não aceita rest().`);\n for (const name of [definition.name, ...definition.aliases ?? []]) {\n if (!/^[\\p{L}][\\p{L}\\p{N}_-]*$/u.test(name) || names.has(name)) {\n throw new YuzuhaError('COMMAND_FLAGS', `Nome ou alias de flag inválido ou duplicado em ${commandName}: ${name}.`);\n }\n names.add(name);\n }\n }\n}\n\nexport function parseFlags(definitions: readonly ArgumentDefinition[] | undefined, tokens: readonly string[]): {\n tokens: string[]; flags: Map<string, ArgumentValue>;\n} {\n if (definitions === undefined) return { tokens: [...tokens], flags: new Map() };\n const lookup = new Map<string, ArgumentDefinition>();\n for (const definition of definitions) for (const name of [definition.name, ...definition.aliases ?? []]) lookup.set(name, definition);\n const values = new Map<string, ArgumentValue>(), positional: string[] = [];\n let terminated = false;\n for (let index = 0; index < tokens.length; index++) {\n const token = tokens[index]!;\n if (terminated) { positional.push(token); continue; }\n if (token === '--') { terminated = true; continue; }\n if (!(token.startsWith('--') || /^-[^\\d.]/u.test(token)) || token === '-') { positional.push(token); continue; }\n const match = /^--?([^=]+)(?:=([\\s\\S]*))?$/.exec(token);\n const definition = match && lookup.get(match[1]!);\n if (!match || !definition) throw new GuardError(`Flag desconhecida: ${token.split('=')[0]}.`, 'INVALID_ARGUMENT');\n if (values.has(definition.name)) throw new GuardError(`Flag repetida: --${definition.name}.`, 'INVALID_ARGUMENT');\n let input = match[2];\n if (input === undefined) {\n if (definition.type === 'boolean') input = 'true';\n else {\n input = tokens[index + 1];\n if (input === undefined || input.startsWith('--') || /^-[^\\d.]/u.test(input)) throw new GuardError(`Informe o valor de --${definition.name}.`, 'INVALID_ARGUMENT');\n index++;\n }\n }\n const value = parseValue(definition, input, true);\n if (value !== undefined) values.set(definition.name, value);\n }\n for (const definition of definitions) {\n if (values.has(definition.name)) continue;\n const value = parseValue(definition, undefined);\n if (value !== undefined) values.set(definition.name, value);\n }\n return { tokens: positional, flags: values };\n}\n"]}
@@ -13,6 +13,7 @@ export declare class ArgumentBuilder<T extends ArgumentValue, Required extends b
13
13
  optional(): ArgumentBuilder<T, false>;
14
14
  default(value: T): ArgumentBuilder<T, true>;
15
15
  rest(): ArgumentBuilder<T, Required>;
16
+ anywhere(): ArgumentBuilder<T, Required>;
16
17
  min(value: number): ArgumentBuilder<T, Required>;
17
18
  max(value: number): ArgumentBuilder<T, Required>;
18
19
  alias(...aliases: string[]): ArgumentBuilder<T, Required>;
@@ -1 +1 @@
1
- {"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../../src/commands/builders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/F,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,QAAQ,CAAC,GAC7E,QAAQ,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,KAAK,CAAC;AAEtD,0FAA0F;AAC1F,qBAAa,eAAe,CAAC,CAAC,SAAS,aAAa,EAAE,QAAQ,SAAS,OAAO,GAAG,KAAK;IACpF,SAAiB,SAAS,EAAE,CAAC,CAAC;IAC9B,SAAiB,UAAU,EAAE,QAAQ,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC;gBAEpD,UAAU,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC;IASxD,OAAO,CAAC,IAAI;IAIZ,QAAQ,IAAI,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC;IACpC,QAAQ,IAAI,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC;IACrC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC;IAC3C,IAAI,IAAI,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC;IACpC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC;IAChD,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC;IAChD,KAAK,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC;IACzD,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC;IAC3D,OAAO,CAAC,KAAK,CAAC,MAAM,SAAS,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;IAGrG,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC;CAK1F;AAED,eAAO,MAAM,GAAG;kBACF,eAAe,CAAC,MAAM,CAAC;gBACzB,eAAe,CAAC,MAAM,CAAC;kBACrB,eAAe,CAAC,MAAM,CAAC;mBACtB,eAAe,CAAC,MAAM,CAAC;gBAC1B,eAAe,CAAC,MAAM,CAAC;oBACnB,eAAe,CAAC,MAAM,CAAC;mBACxB,eAAe,CAAC,OAAO,CAAC;EACrC,CAAC;AAEH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,kBAAkB,EAAE,CAKhF"}
1
+ {"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../../src/commands/builders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/F,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,QAAQ,CAAC,GAC7E,QAAQ,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,KAAK,CAAC;AAEtD,0FAA0F;AAC1F,qBAAa,eAAe,CAAC,CAAC,SAAS,aAAa,EAAE,QAAQ,SAAS,OAAO,GAAG,KAAK;IACpF,SAAiB,SAAS,EAAE,CAAC,CAAC;IAC9B,SAAiB,UAAU,EAAE,QAAQ,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC;gBAEpD,UAAU,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC;IASxD,OAAO,CAAC,IAAI;IAIZ,QAAQ,IAAI,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC;IACpC,QAAQ,IAAI,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC;IACrC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC;IAC3C,IAAI,IAAI,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC;IACpC,QAAQ,IAAI,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC;IAIxC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC;IAChD,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC;IAChD,KAAK,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC;IACzD,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC;IAC3D,OAAO,CAAC,KAAK,CAAC,MAAM,SAAS,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;IAGrG,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC;CAK1F;AAED,eAAO,MAAM,GAAG;kBACF,eAAe,CAAC,MAAM,CAAC;gBACzB,eAAe,CAAC,MAAM,CAAC;kBACrB,eAAe,CAAC,MAAM,CAAC;mBACtB,eAAe,CAAC,MAAM,CAAC;gBAC1B,eAAe,CAAC,MAAM,CAAC;oBACnB,eAAe,CAAC,MAAM,CAAC;mBACxB,eAAe,CAAC,OAAO,CAAC;EACrC,CAAC;AAEH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,kBAAkB,EAAE,CAKhF"}
@@ -17,6 +17,11 @@ export class ArgumentBuilder {
17
17
  optional() { return this.copy({ required: false, defaultValue: undefined }); }
18
18
  default(value) { return this.copy({ defaultValue: value, required: false }); }
19
19
  rest() { return this.copy({ rest: true }); }
20
+ anywhere() {
21
+ if (this.definition.type !== 'user')
22
+ throw new YuzuhaError('ARGUMENT_SCHEMA', '.anywhere() só vale para arg.user().');
23
+ return this.copy({ anywhere: true });
24
+ }
20
25
  min(value) { return this.copy({ min: value }); }
21
26
  max(value) { return this.copy({ max: value }); }
22
27
  alias(...aliases) { return this.copy({ aliases: [...aliases] }); }
@@ -1 +1 @@
1
- {"version":3,"file":"builders.js","sourceRoot":"","sources":["../../src/commands/builders.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ArgumentDefinition } from './definition.js';\nimport type { ArgumentValue } from './arguments.js';\nimport { YuzuhaError } from '../shared/errors.js';\n\nexport type ArgumentSchema = Readonly<Record<string, ArgumentBuilder<ArgumentValue, boolean>>>;\nexport type InferArgument<B> = B extends ArgumentBuilder<infer T, infer Required>\n ? Required extends true ? T : T | undefined : never;\n\n/** Immutable argument definition; a builder may safely be reused in multiple commands. */\nexport class ArgumentBuilder<T extends ArgumentValue, Required extends boolean = false> {\n declare readonly valueType: T;\n declare readonly isRequired: Required;\n readonly definition: Readonly<Omit<ArgumentDefinition, 'name'>>;\n\n constructor(definition: Omit<ArgumentDefinition, 'name'>) {\n this.definition = Object.freeze({ ...definition,\n ...(definition.choices ? { choices: Object.freeze([...definition.choices]) } : {}),\n ...(definition.validators ? { validators: Object.freeze(definition.validators.map(validator => Object.freeze({ ...validator }))) } : {}),\n ...(definition.aliases ? { aliases: Object.freeze([...definition.aliases]) } : {}),\n });\n Object.freeze(this);\n }\n\n private copy<V extends ArgumentValue = T, R extends boolean = Required>(changes: Partial<ArgumentDefinition>): ArgumentBuilder<V, R> {\n return new ArgumentBuilder<V, R>({ ...this.definition, ...changes });\n }\n\n required(): ArgumentBuilder<T, true> { return this.copy<T, true>({ required: true }); }\n optional(): ArgumentBuilder<T, false> { return this.copy<T, false>({ required: false, defaultValue: undefined }); }\n default(value: T): ArgumentBuilder<T, true> { return this.copy<T, true>({ defaultValue: value, required: false }); }\n rest(): ArgumentBuilder<T, Required> { return this.copy({ rest: true }); }\n min(value: number): ArgumentBuilder<T, Required> { return this.copy({ min: value }); }\n max(value: number): ArgumentBuilder<T, Required> { return this.copy({ max: value }); }\n alias(...aliases: string[]): ArgumentBuilder<T, Required> { return this.copy({ aliases: [...aliases] }); }\n describe(description: string): ArgumentBuilder<T, Required> { return this.copy({ description }); }\n choices<const Values extends readonly T[]>(values: Values): ArgumentBuilder<Values[number], Required> {\n return this.copy<Values[number]>({ choices: [...values] });\n }\n validate(predicate: (value: T) => boolean, message: string): ArgumentBuilder<T, Required> {\n return this.copy({ validators: [...this.definition.validators ?? [], {\n check: value => predicate(value as T), message,\n }] });\n }\n}\n\nexport const arg = Object.freeze({\n string: (): ArgumentBuilder<string> => new ArgumentBuilder({ type: 'string' }),\n text: (): ArgumentBuilder<string> => new ArgumentBuilder({ type: 'string' }),\n number: (): ArgumentBuilder<number> => new ArgumentBuilder({ type: 'number' }),\n integer: (): ArgumentBuilder<number> => new ArgumentBuilder({ type: 'integer' }),\n user: (): ArgumentBuilder<string> => new ArgumentBuilder({ type: 'user' }),\n duration: (): ArgumentBuilder<number> => new ArgumentBuilder({ type: 'duration' }),\n boolean: (): ArgumentBuilder<boolean> => new ArgumentBuilder({ type: 'boolean' }),\n});\n\nexport function argumentDefinitions(schema: ArgumentSchema): ArgumentDefinition[] {\n return Object.entries(schema).map(([name, builder]) => {\n if (!(builder instanceof ArgumentBuilder)) throw new YuzuhaError('COMMAND_ARGS', `Argumento ${name} deve usar arg.*.`);\n return { ...builder.definition, name };\n });\n}\n"]}
1
+ {"version":3,"file":"builders.js","sourceRoot":"","sources":["../../src/commands/builders.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ArgumentDefinition } from './definition.js';\nimport type { ArgumentValue } from './arguments.js';\nimport { YuzuhaError } from '../shared/errors.js';\n\nexport type ArgumentSchema = Readonly<Record<string, ArgumentBuilder<ArgumentValue, boolean>>>;\nexport type InferArgument<B> = B extends ArgumentBuilder<infer T, infer Required>\n ? Required extends true ? T : T | undefined : never;\n\n/** Immutable argument definition; a builder may safely be reused in multiple commands. */\nexport class ArgumentBuilder<T extends ArgumentValue, Required extends boolean = false> {\n declare readonly valueType: T;\n declare readonly isRequired: Required;\n readonly definition: Readonly<Omit<ArgumentDefinition, 'name'>>;\n\n constructor(definition: Omit<ArgumentDefinition, 'name'>) {\n this.definition = Object.freeze({ ...definition,\n ...(definition.choices ? { choices: Object.freeze([...definition.choices]) } : {}),\n ...(definition.validators ? { validators: Object.freeze(definition.validators.map(validator => Object.freeze({ ...validator }))) } : {}),\n ...(definition.aliases ? { aliases: Object.freeze([...definition.aliases]) } : {}),\n });\n Object.freeze(this);\n }\n\n private copy<V extends ArgumentValue = T, R extends boolean = Required>(changes: Partial<ArgumentDefinition>): ArgumentBuilder<V, R> {\n return new ArgumentBuilder<V, R>({ ...this.definition, ...changes });\n }\n\n required(): ArgumentBuilder<T, true> { return this.copy<T, true>({ required: true }); }\n optional(): ArgumentBuilder<T, false> { return this.copy<T, false>({ required: false, defaultValue: undefined }); }\n default(value: T): ArgumentBuilder<T, true> { return this.copy<T, true>({ defaultValue: value, required: false }); }\n rest(): ArgumentBuilder<T, Required> { return this.copy({ rest: true }); }\n anywhere(): ArgumentBuilder<T, Required> {\n if (this.definition.type !== 'user') throw new YuzuhaError('ARGUMENT_SCHEMA', '.anywhere() só vale para arg.user().');\n return this.copy({ anywhere: true });\n }\n min(value: number): ArgumentBuilder<T, Required> { return this.copy({ min: value }); }\n max(value: number): ArgumentBuilder<T, Required> { return this.copy({ max: value }); }\n alias(...aliases: string[]): ArgumentBuilder<T, Required> { return this.copy({ aliases: [...aliases] }); }\n describe(description: string): ArgumentBuilder<T, Required> { return this.copy({ description }); }\n choices<const Values extends readonly T[]>(values: Values): ArgumentBuilder<Values[number], Required> {\n return this.copy<Values[number]>({ choices: [...values] });\n }\n validate(predicate: (value: T) => boolean, message: string): ArgumentBuilder<T, Required> {\n return this.copy({ validators: [...this.definition.validators ?? [], {\n check: value => predicate(value as T), message,\n }] });\n }\n}\n\nexport const arg = Object.freeze({\n string: (): ArgumentBuilder<string> => new ArgumentBuilder({ type: 'string' }),\n text: (): ArgumentBuilder<string> => new ArgumentBuilder({ type: 'string' }),\n number: (): ArgumentBuilder<number> => new ArgumentBuilder({ type: 'number' }),\n integer: (): ArgumentBuilder<number> => new ArgumentBuilder({ type: 'integer' }),\n user: (): ArgumentBuilder<string> => new ArgumentBuilder({ type: 'user' }),\n duration: (): ArgumentBuilder<number> => new ArgumentBuilder({ type: 'duration' }),\n boolean: (): ArgumentBuilder<boolean> => new ArgumentBuilder({ type: 'boolean' }),\n});\n\nexport function argumentDefinitions(schema: ArgumentSchema): ArgumentDefinition[] {\n return Object.entries(schema).map(([name, builder]) => {\n if (!(builder instanceof ArgumentBuilder)) throw new YuzuhaError('COMMAND_ARGS', `Argumento ${name} deve usar arg.*.`);\n return { ...builder.definition, name };\n });\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { CommandContext } from './context.js';
2
+ /** Structural subset of CommandContext a test fixture may satisfy. */
3
+ export type CommandContextLike = Pick<CommandContext, 'reply' | 'send' | 'edit' | 'delete' | 'react' | 'deleteCommandMessage' | 'authorID' | 'authorName' | 'channelID' | 'guildID' | 'args' | 'members' | 'mod' | 'resources' | 'cdn' | 'canvas' | 'tokens' | 'command' | 'executionID' | 'input' | 'message' | 'event'>;
4
+ //# sourceMappingURL=context-like.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-like.d.ts","sourceRoot":"","sources":["../../src/commands/context-like.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,sEAAsE;AACtE,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAChG,sBAAsB,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GACjG,KAAK,GAAG,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,GACvF,SAAS,GAAG,OAAO,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=context-like.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-like.js","sourceRoot":"","sources":["../../src/commands/context-like.ts"],"names":[],"mappings":"","sourcesContent":["import type { CommandContext } from './context.js';\n\n/** Structural subset of CommandContext a test fixture may satisfy. */\nexport type CommandContextLike = Pick<CommandContext, 'reply' | 'send' | 'edit' | 'delete' | 'react'\n | 'deleteCommandMessage' | 'authorID' | 'authorName' | 'channelID' | 'guildID' | 'args' | 'members'\n | 'mod' | 'resources' | 'cdn' | 'canvas' | 'tokens' | 'command' | 'executionID' | 'input'\n | 'message' | 'event'>;\n"]}
@@ -20,6 +20,9 @@ import type { CanvasRenderer } from '../ports/canvas.js';
20
20
  import { CanvasService } from '../services/canvas.js';
21
21
  import { ArgumentBag } from './typed-arguments.js';
22
22
  import type { Command } from './definition.js';
23
+ export interface SendOptions {
24
+ ttlMs?: number;
25
+ }
23
26
  export interface ContextOptions {
24
27
  message: IncomingMessage;
25
28
  transport: Transport;
@@ -45,6 +48,9 @@ export interface ContextOptions {
45
48
  executionID?: string;
46
49
  event?: Readonly<ScriptEventData>;
47
50
  messageAvailable?: boolean;
51
+ deleteLater?: (channelID: string, messageID: string, ttlMs: number) => void;
52
+ cdn?: import('../domain/cdn.js').Cdn;
53
+ disableResourceAuthorization?: boolean;
48
54
  actor?: {
49
55
  guildID: string;
50
56
  authorID: string;
@@ -66,6 +72,9 @@ export declare class CommandContext {
66
72
  private readonly sourceMessage;
67
73
  readonly event?: Readonly<ScriptEventData>;
68
74
  private readonly messageAvailable;
75
+ private readonly deleteLaterFn?;
76
+ private cdnService;
77
+ private disableResourceAuthorization;
69
78
  private readonly actor?;
70
79
  readonly transport: Transport;
71
80
  readonly store: Store;
@@ -102,6 +111,7 @@ export declare class CommandContext {
102
111
  get flags(): ArgumentBag;
103
112
  guildFeatures(): Promise<string[]>;
104
113
  leaveGuild(): Promise<void>;
114
+ get cdn(): import("../domain/cdn.js").Cdn;
105
115
  get mod(): NativeModeration;
106
116
  get data(): NativeData;
107
117
  get message(): IncomingMessage;
@@ -122,8 +132,12 @@ export declare class CommandContext {
122
132
  get http(): HttpService;
123
133
  requireGuild(): string;
124
134
  assert(condition: unknown, message: string): void;
125
- reply(payload: string | Payload): Promise<string>;
126
- send(payload: string | Payload, channelID?: string): Promise<string>;
135
+ reply(payload: string | Payload, options?: SendOptions): Promise<string>;
136
+ send(payload: string | Payload, channelID?: string, options?: SendOptions): Promise<string>;
137
+ private commandMessageDeleted;
138
+ deleteCommandMessage(): Promise<void>;
139
+ private sendVia;
140
+ private deleteLater;
127
141
  sendStream(source: ReadableStream<Uint8Array>, options: StreamAttachmentOptions, channelID?: string): Promise<string>;
128
142
  edit(messageID: string, payload: string | Payload, channelID?: string): Promise<void>;
129
143
  delete(messageID: string, channelID?: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"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"}