incur 0.1.17 → 0.2.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 (52) hide show
  1. package/README.md +204 -9
  2. package/SKILL.md +173 -0
  3. package/dist/Cli.d.ts +39 -6
  4. package/dist/Cli.d.ts.map +1 -1
  5. package/dist/Cli.js +536 -43
  6. package/dist/Cli.js.map +1 -1
  7. package/dist/Errors.d.ts +4 -0
  8. package/dist/Errors.d.ts.map +1 -1
  9. package/dist/Errors.js +3 -0
  10. package/dist/Errors.js.map +1 -1
  11. package/dist/Fetch.d.ts +26 -0
  12. package/dist/Fetch.d.ts.map +1 -0
  13. package/dist/Fetch.js +150 -0
  14. package/dist/Fetch.js.map +1 -0
  15. package/dist/Filter.d.ts +14 -0
  16. package/dist/Filter.d.ts.map +1 -0
  17. package/dist/Filter.js +134 -0
  18. package/dist/Filter.js.map +1 -0
  19. package/dist/Help.js +2 -0
  20. package/dist/Help.js.map +1 -1
  21. package/dist/Mcp.d.ts +26 -0
  22. package/dist/Mcp.d.ts.map +1 -1
  23. package/dist/Mcp.js +2 -2
  24. package/dist/Mcp.js.map +1 -1
  25. package/dist/Openapi.d.ts +20 -0
  26. package/dist/Openapi.d.ts.map +1 -0
  27. package/dist/Openapi.js +136 -0
  28. package/dist/Openapi.js.map +1 -0
  29. package/dist/index.d.ts +3 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +3 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/middleware.d.ts +8 -2
  34. package/dist/middleware.d.ts.map +1 -1
  35. package/dist/middleware.js.map +1 -1
  36. package/package.json +4 -1
  37. package/src/Cli.test-d.ts +27 -2
  38. package/src/Cli.test.ts +1007 -0
  39. package/src/Cli.ts +676 -47
  40. package/src/Errors.ts +5 -0
  41. package/src/Fetch.test.ts +274 -0
  42. package/src/Fetch.ts +170 -0
  43. package/src/Filter.test.ts +237 -0
  44. package/src/Filter.ts +139 -0
  45. package/src/Help.test.ts +14 -0
  46. package/src/Help.ts +2 -0
  47. package/src/Mcp.ts +3 -3
  48. package/src/Openapi.test.ts +320 -0
  49. package/src/Openapi.ts +196 -0
  50. package/src/e2e.test.ts +778 -0
  51. package/src/index.ts +3 -0
  52. package/src/middleware.ts +9 -2
package/src/Cli.test-d.ts CHANGED
@@ -47,9 +47,9 @@ test('output constrains run return type', () => {
47
47
  },
48
48
  })
49
49
 
50
+ // @ts-expect-error — return doesn't match output schema
50
51
  cli.command('greet', {
51
52
  output: z.object({ message: z.string() }),
52
- // @ts-expect-error — return doesn't match output schema
53
53
  run() {
54
54
  return { wrong: 123 }
55
55
  },
@@ -64,9 +64,9 @@ test('alias keys are constrained to option keys', () => {
64
64
  run: () => ({}),
65
65
  })
66
66
 
67
+ // @ts-expect-error — 'foo' is not an option key
67
68
  cli.command('list', {
68
69
  options: z.object({ state: z.string() }),
69
- // @ts-expect-error — 'foo' is not an option key
70
70
  alias: { foo: 'f' },
71
71
  run: () => ({}),
72
72
  })
@@ -187,6 +187,8 @@ test('middleware() without generic gives empty context', () => {
187
187
  middleware((c, _next) => {
188
188
  expectTypeOf(c.var).toEqualTypeOf<{}>()
189
189
  expectTypeOf(c.env).toEqualTypeOf<{}>()
190
+ expectTypeOf(c.format).toEqualTypeOf<'toon' | 'json' | 'yaml' | 'md' | 'jsonl'>()
191
+ expectTypeOf(c.formatExplicit).toEqualTypeOf<boolean>()
190
192
  })
191
193
  })
192
194
 
@@ -251,6 +253,18 @@ test('middleware error() returns never', () => {
251
253
  })
252
254
  })
253
255
 
256
+ test('c.error() accepts optional exitCode', () => {
257
+ Cli.create('test').command('fail', {
258
+ run(c) {
259
+ // with exitCode
260
+ c.error({ code: 'ERR', message: 'fail', exitCode: 10 })
261
+ // without exitCode
262
+ c.error({ code: 'ERR', message: 'fail' })
263
+ return {}
264
+ },
265
+ })
266
+ })
267
+
254
268
  test('env is typed in per-command middleware', () => {
255
269
  Cli.create('test', {
256
270
  env: z.object({ API_TOKEN: z.string() }),
@@ -264,3 +278,14 @@ test('env is typed in per-command middleware', () => {
264
278
  run: () => ({}),
265
279
  })
266
280
  })
281
+
282
+ test('run() context exposes format metadata', () => {
283
+ const cli = Cli.create('test')
284
+ cli.command('ping', {
285
+ run(c) {
286
+ expectTypeOf(c.format).toEqualTypeOf<'toon' | 'json' | 'yaml' | 'md' | 'jsonl'>()
287
+ expectTypeOf(c.formatExplicit).toEqualTypeOf<boolean>()
288
+ return { pong: true }
289
+ },
290
+ })
291
+ })