@purveyors/cli 0.32.2 → 0.33.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 (68) hide show
  1. package/README.md +22 -27
  2. package/dist/commands/catalog.d.ts.map +1 -1
  3. package/dist/commands/catalog.js +23 -32
  4. package/dist/commands/catalog.js.map +1 -1
  5. package/dist/commands/inventory.d.ts.map +1 -1
  6. package/dist/commands/inventory.js +46 -36
  7. package/dist/commands/inventory.js.map +1 -1
  8. package/dist/commands/market.d.ts.map +1 -1
  9. package/dist/commands/market.js +9 -6
  10. package/dist/commands/market.js.map +1 -1
  11. package/dist/commands/price-index.d.ts.map +1 -1
  12. package/dist/commands/price-index.js +9 -6
  13. package/dist/commands/price-index.js.map +1 -1
  14. package/dist/commands/procurement.d.ts.map +1 -1
  15. package/dist/commands/procurement.js +9 -6
  16. package/dist/commands/procurement.js.map +1 -1
  17. package/dist/commands/roast.d.ts.map +1 -1
  18. package/dist/commands/roast.js +83 -83
  19. package/dist/commands/roast.js.map +1 -1
  20. package/dist/commands/sales.d.ts.map +1 -1
  21. package/dist/commands/sales.js +29 -30
  22. package/dist/commands/sales.js.map +1 -1
  23. package/dist/commands/tasting.d.ts.map +1 -1
  24. package/dist/commands/tasting.js +22 -16
  25. package/dist/commands/tasting.js.map +1 -1
  26. package/dist/lib/ai.d.ts +5 -43
  27. package/dist/lib/ai.d.ts.map +1 -1
  28. package/dist/lib/ai.js +4 -84
  29. package/dist/lib/ai.js.map +1 -1
  30. package/dist/lib/catalog.d.ts +8 -25
  31. package/dist/lib/catalog.d.ts.map +1 -1
  32. package/dist/lib/catalog.js +44 -129
  33. package/dist/lib/catalog.js.map +1 -1
  34. package/dist/lib/cherry.d.ts +46 -0
  35. package/dist/lib/cherry.d.ts.map +1 -0
  36. package/dist/lib/cherry.js +87 -0
  37. package/dist/lib/cherry.js.map +1 -0
  38. package/dist/lib/interactive/forms.d.ts.map +1 -1
  39. package/dist/lib/interactive/forms.js +16 -10
  40. package/dist/lib/interactive/forms.js.map +1 -1
  41. package/dist/lib/interactive/watch.js +1 -1
  42. package/dist/lib/interactive/watch.js.map +1 -1
  43. package/dist/lib/inventory.d.ts.map +1 -1
  44. package/dist/lib/inventory.js +11 -4
  45. package/dist/lib/inventory.js.map +1 -1
  46. package/dist/lib/manifest.d.ts +2 -0
  47. package/dist/lib/manifest.d.ts.map +1 -1
  48. package/dist/lib/manifest.js +39 -14
  49. package/dist/lib/manifest.js.map +1 -1
  50. package/dist/lib/market.d.ts.map +1 -1
  51. package/dist/lib/numeric-contracts.d.ts +24 -0
  52. package/dist/lib/numeric-contracts.d.ts.map +1 -0
  53. package/dist/lib/numeric-contracts.js +9 -0
  54. package/dist/lib/numeric-contracts.js.map +1 -0
  55. package/dist/lib/roast.d.ts.map +1 -1
  56. package/dist/lib/roast.js +21 -7
  57. package/dist/lib/roast.js.map +1 -1
  58. package/dist/lib/sales.d.ts.map +1 -1
  59. package/dist/lib/sales.js +7 -4
  60. package/dist/lib/sales.js.map +1 -1
  61. package/dist/lib/strict-number.d.ts +20 -0
  62. package/dist/lib/strict-number.d.ts.map +1 -0
  63. package/dist/lib/strict-number.js +41 -0
  64. package/dist/lib/strict-number.js.map +1 -0
  65. package/dist/lib/tasting.d.ts.map +1 -1
  66. package/dist/lib/tasting.js +6 -4
  67. package/dist/lib/tasting.js.map +1 -1
  68. package/package.json +3 -2
package/README.md CHANGED
@@ -112,18 +112,19 @@ The npm package is both a binary and a reusable TypeScript surface for Node.js c
112
112
 
113
113
  `coffee-app` also consumes `@purveyors/sdk` directly. It does not depend on `@purveyors/cli`; the website chat tools and the CLI are separate adapters over the same API contract. Shared data behavior belongs in Parchment and its OpenAPI contract, while terminal concerns such as local credentials, flags, output modes, exit codes, Artisan file handling, and watch mode belong in this package.
114
114
 
115
- | Import path | Use it for |
116
- | -------------------------- | ------------------------------------------------------------------------------------ |
117
- | `@purveyors/cli` | CLI entrypoint package root |
118
- | `@purveyors/cli/catalog` | Catalog search, lookup, stats, premium ranking, supplier aggregates, similar coffees |
119
- | `@purveyors/cli/market` | Market Index value signals, movement stats, and metadata trends |
120
- | `@purveyors/cli/inventory` | Green coffee inventory operations |
121
- | `@purveyors/cli/roast` | Roast profile operations |
122
- | `@purveyors/cli/sales` | Sales record operations |
123
- | `@purveyors/cli/tasting` | Tasting note and rating operations |
124
- | `@purveyors/cli/lib` | Shared library helpers |
125
- | `@purveyors/cli/manifest` | Stable machine-readable CLI manifest |
126
- | `@purveyors/cli/ai` | AI helper surface used by CLI workflows |
115
+ | Import path | Use it for |
116
+ | -------------------------- | ---------------------------------------------------------------------------------------------- |
117
+ | `@purveyors/cli` | CLI entrypoint package root |
118
+ | `@purveyors/cli/catalog` | Catalog search, lookup, stats, premium ranking, supplier aggregates, similar coffees |
119
+ | `@purveyors/cli/market` | Market Index value signals, movement stats, and metadata trends |
120
+ | `@purveyors/cli/inventory` | Green coffee inventory operations |
121
+ | `@purveyors/cli/roast` | Roast profile operations |
122
+ | `@purveyors/cli/sales` | Sales record operations |
123
+ | `@purveyors/cli/tasting` | Tasting note and rating operations |
124
+ | `@purveyors/cli/lib` | Shared library helpers |
125
+ | `@purveyors/cli/manifest` | Stable machine-readable CLI manifest |
126
+ | `@purveyors/cli/cherry` | Primary Cherry roast-classification helper |
127
+ | `@purveyors/cli/ai` | Deprecated compatibility re-export of `@purveyors/cli/cherry`; existing consumers keep working |
127
128
 
128
129
  Shell integrations should usually start with `purvey manifest`. Node.js agents that specifically need CLI semantics may import the smallest relevant CLI subpath instead of shelling out. Application integrations should normally use `@purveyors/sdk` directly so the API contract, rather than the CLI package, remains the cross-surface boundary.
129
130
 
@@ -325,17 +326,14 @@ Notes:
325
326
  - `--processing-confidence-min <n>`; minimum structured process confidence from `0` to `1`
326
327
  - `--price-min <n>`; minimum USD/lb
327
328
  - `--price-max <n>`; maximum USD/lb
328
- - `--flavor <keywords>`; comma-separated flavor terms
329
329
  - `--name <text>`; partial coffee name match
330
- - `--supplier <name>`; partial supplier match
331
330
  - `--ids <n,n,...>`; fetch specific catalog IDs, ignores limit and offset
332
331
  - `--variety <text>`; partial cultivar match
333
- - `--drying-method <text>`; partial drying method match
334
332
  - `--stocked-days <n>`; stocked within N days
335
333
  - `--stocked`; only currently stocked coffees
336
- - `--sort <price|price-desc|name|origin|newest>`
334
+ - `--sort <price|price-desc|name|origin>`
337
335
  - `--offset <n>`; pagination offset
338
- - `--limit <n>`; default `10`
336
+ - `--limit <n>`; default `10`, min `1`, max `1000`
339
337
  - `--include-proof`; request canonical proof summaries from `/v1/catalog?include=proof`
340
338
 
341
339
  `catalog similar <id>` options:
@@ -356,7 +354,6 @@ Notes:
356
354
  - `--objective <premium|value|fresh_arrival|rare_origin>`; default `premium`
357
355
  - `--country <country>`; optional country filter
358
356
  - `--process <method>`; optional process filter
359
- - `--supplier <name>`; optional supplier filter
360
357
  - `--stocked`; only include currently stocked coffees. This is the default unless `--all` is passed.
361
358
  - `--all`; use all visible catalog rows instead of the default stocked-only scope
362
359
  - `--price-max <n>`; maximum USD/lb
@@ -369,7 +366,6 @@ Notes:
369
366
 
370
367
  - `--origin <origin>`; optional origin filter
371
368
  - `--process <method>`; optional process filter
372
- - `--supplier <name>`; optional supplier filter
373
369
  - `--stocked`; only include currently stocked coffees
374
370
  - `--price-max <n>`; maximum USD/lb
375
371
  - `--min-score <n>`; minimum Purveyor Score
@@ -381,7 +377,7 @@ Notes:
381
377
 
382
378
  - `supplier-list`: `--country <country>`, `--stocked`, `--non-wholesale-only`, `--sample-size <n>` (catalog rows per fetch page, default `5000`, max `5000`), `--limit <n>`
383
379
  - `supplier-detail <supplier>`: `--country <country>`, `--stocked`, `--non-wholesale-only`, `--top-coffees <n>`, `--sample-size <n>` (catalog rows per fetch page, default `5000`, max `5000`)
384
- - `supplier-rank`: `--country <country>`, `--stocked`, `--non-wholesale-only`, `--min-coffees <n>`, `--sample-size <n>` (catalog rows per fetch page, default `5000`, max `5000`), `--limit <n>`
380
+ - `supplier-rank`: `--country <country>`, `--stocked`, `--non-wholesale-only`, `--min-coffees <n>` (min `1`, max `100`), `--sample-size <n>` (catalog rows per fetch page, default `5000`, max `5000`), `--limit <n>`
385
381
 
386
382
  Examples:
387
383
 
@@ -389,7 +385,7 @@ Examples:
389
385
  purvey catalog search --origin "Ethiopia" --pretty
390
386
  purvey catalog search --processing-base-method "Natural" --fermentation-type "Anaerobic" --pretty
391
387
  purvey catalog search --process-additive "hops" --processing-confidence-min 0.8 --pretty
392
- purvey catalog search --supplier "Royal Coffee" --stocked --pretty
388
+ purvey catalog search --name "Gesha" --stocked --pretty
393
389
  purvey catalog search --ids "1182,1183,1200"
394
390
  purvey catalog search --stocked --sort price --offset 10 --limit 10
395
391
  purvey catalog search --origin "Ethiopia" --include-proof --json
@@ -412,7 +408,6 @@ Notes:
412
408
  - Structured process filters on `catalog search` require an authenticated `member` role.
413
409
  - Structured process filters use the canonical `/v1/catalog` query contract names while preserving the legacy `--process` label filter.
414
410
  - `--include-proof` is an opt-in API-backed catalog read. It consumes the canonical proof summary returned by `/v1/catalog?include=proof`; the CLI does not compute proof fields locally or duplicate web/API proof logic.
415
- - `--include-proof` rejects CLI-only filters that `/v1/catalog` cannot yet preserve exactly, such as `--flavor`, `--supplier`, `--drying-method`, and `--sort newest`.
416
411
  - If you want proof output against a specific API-key deployment, set `PARCHMENT_API_KEY` or `PURVEYORS_API_KEY`. Otherwise the CLI uses the key created by `purvey auth login`.
417
412
  - `catalog get` and `catalog similar` both take `coffee_catalog.catalog_id`.
418
413
  - `catalog rank` and `catalog rank-premium` read `coffee_catalog.purveyor_score` as the canonical quality signal; the CLI does not recompute the upstream Purveyor Score model.
@@ -438,7 +433,7 @@ Notes:
438
433
  - `--to <YYYY-MM-DD>`
439
434
  - `--wholesale <true|false>`
440
435
  - `--page <n>`; 1-based page number
441
- - `--limit <n>`; results per page
436
+ - `--limit <n>`; results per page, min `1`, max `100`
442
437
 
443
438
  Examples:
444
439
 
@@ -470,7 +465,7 @@ Notes:
470
465
  - `--min-discount <n>`
471
466
  - `--min-score <n>`
472
467
  - `--window <7d|30d>`
473
- - `--limit <n>`
468
+ - `--limit <n>`; min `1`, max `100`
474
469
 
475
470
  `market stats` filters:
476
471
 
@@ -515,7 +510,7 @@ Notes:
515
510
  `procurement matches <id>` options:
516
511
 
517
512
  - `--page <n>`; 1-based page number
518
- - `--limit <n>`; matches per page
513
+ - `--limit <n>`; matches per page, min `1`, max `100`
519
514
 
520
515
  Examples:
521
516
 
@@ -671,7 +666,7 @@ Notes:
671
666
  - `--coffee-id` uses inventory IDs.
672
667
  - `roast import` and `roast watch` normalize pasted paths by trimming whitespace, removing one layer of matching quotes, and accepting common shell-escaped characters.
673
668
  - `roast watch --auto-match` is mutually exclusive with `--coffee-id`.
674
- - `roast watch --auto-match` sends roast metadata and the current stocked-inventory candidates to the canonical Parchment `POST /v1/roasts/classify` endpoint via `@purveyors/sdk`; it never calls an AI provider directly.
669
+ - `roast watch --auto-match` uses the `@purveyors/cli/cherry` helper to send roast metadata and the current stocked-inventory candidates to the canonical Parchment `POST /v1/roasts/classify` endpoint via `@purveyors/sdk`; it never calls an AI provider directly.
675
670
  - `roast watch --commit-mode` defaults to `batch`.
676
671
 
677
672
  ### sales
@@ -923,7 +918,7 @@ Agent integration rules of thumb:
923
918
  - Discover first with `purvey manifest`, then call the narrowest command or package subpath that fits the job.
924
919
  - Use `purvey context` when a human-readable operator summary is useful before tool selection.
925
920
  - Use `purvey auth login` for normal user workflows. Parchment coordinates browser approval and returns a machine-scoped API key; the CLI stores no web session, request token, or PKCE verifier. Environment `PURVEYORS_API_KEY` or `PARCHMENT_API_KEY` values remain available for explicit automation overrides.
926
- - Treat `--include-proof` as API output, not a local scoring feature. If a filter cannot round-trip through `/v1/catalog?include=proof`, the CLI rejects that invocation instead of returning misleading proof data.
921
+ - Treat `--include-proof` as API output, not a local scoring feature. Every `catalog search` filter round-trips through the canonical `/v1/catalog` query contract, so proof output always matches the same server-side result set.
927
922
  - Treat `catalog similar` as the canonical `/v1/catalog/{id}/similar` contract. Preserve the distinction between `canonical_candidates` and `similar_recommendations`; do not flatten or re-sort grouped results unless you have a specific downstream reason.
928
923
  - Treat `market`, `price-index`, and `procurement` as SDK-backed canonical API reads. Do not add procurement create/write behavior to this command group until the Phase 2 write contract ships.
929
924
 
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/commands/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAWL,mBAAmB,EACnB,mBAAmB,EAKpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAoB,MAAM,mBAAmB,CAAC;AAIrF,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,CAAC;AAyDpD;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAyqB7C"}
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/commands/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAWL,mBAAmB,EACnB,mBAAmB,EAOpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAoB,MAAM,mBAAmB,CAAC;AAUrF,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,CAAC;AAkEpD;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAgqB7C"}
@@ -1,7 +1,9 @@
1
1
  import { Command } from 'commander';
2
2
  import { outputData, info } from '../lib/output.js';
3
3
  import { withErrorHandling, PrvrsError } from '../lib/errors.js';
4
- import { searchCatalog, getCatalog, getCatalogStats, getCatalogSimilarity, listCatalogFacets, rankCatalog, catalogRankPremium, supplierList, supplierDetail, supplierRank, computeCatalogStats, sanitizeFilterValue, catalogSortFields, catalogFacetFields, catalogRankObjectives, catalogSimilarityModes, } from '../lib/catalog.js';
4
+ import { searchCatalog, getCatalog, getCatalogStats, getCatalogSimilarity, listCatalogFacets, rankCatalog, catalogRankPremium, supplierList, supplierDetail, supplierRank, computeCatalogStats, sanitizeFilterValue, catalogSortFields, CATALOG_SEARCH_MAX_LIMIT, SUPPLIER_MIN_COFFEES_MAX, catalogFacetFields, catalogRankObjectives, catalogSimilarityModes, } from '../lib/catalog.js';
5
+ import { CLI_NUMERIC_BOUNDS } from '../lib/numeric-contracts.js';
6
+ import { parseStrictInt4Id, parseStrictOffset, parseStrictPositiveCount, } from '../lib/strict-number.js';
5
7
  export { sanitizeFilterValue, computeCatalogStats };
6
8
  function parseFiniteNumberArg(rawValue, message) {
7
9
  const trimmed = rawValue.trim();
@@ -15,8 +17,15 @@ function parseFiniteNumberArg(rawValue, message) {
15
17
  return parsed;
16
18
  }
17
19
  function parsePositiveIntegerArg(rawValue, message) {
18
- const parsed = parseFiniteNumberArg(rawValue, message);
19
- if (!Number.isInteger(parsed) || parsed <= 0) {
20
+ const parsed = parseStrictPositiveCount(rawValue);
21
+ if (!Number.isFinite(parsed)) {
22
+ throw new PrvrsError('INVALID_ARGUMENT', message);
23
+ }
24
+ return parsed;
25
+ }
26
+ function parseInt4IdArg(rawValue, message) {
27
+ const parsed = parseStrictInt4Id(rawValue);
28
+ if (!Number.isFinite(parsed)) {
20
29
  throw new PrvrsError('INVALID_ARGUMENT', message);
21
30
  }
22
31
  return parsed;
@@ -29,8 +38,8 @@ function parseBoundedPositiveIntegerArg(rawValue, flag, min, max) {
29
38
  return parsed;
30
39
  }
31
40
  function parseNonNegativeIntegerArg(rawValue, message) {
32
- const parsed = parseFiniteNumberArg(rawValue, message);
33
- if (!Number.isInteger(parsed) || parsed < 0) {
41
+ const parsed = parseStrictOffset(rawValue);
42
+ if (!Number.isFinite(parsed)) {
34
43
  throw new PrvrsError('INVALID_ARGUMENT', message);
35
44
  }
36
45
  return parsed;
@@ -47,7 +56,7 @@ export function buildCatalogCommand() {
47
56
  // ── catalog search ────────────────────────────────────────────────────────
48
57
  catalog
49
58
  .command('search')
50
- .description('Search coffees by origin, process, price, or flavor')
59
+ .description('Search coffees by origin, process, price, or catalog metadata')
51
60
  .option('--origin <origin>', 'Filter by origin (country, continent, or region)')
52
61
  .option('--process <method>', 'Filter by processing method (e.g. natural, washed)')
53
62
  .option('--processing-base-method <method>', 'Filter by canonical process base method')
@@ -57,36 +66,29 @@ export function buildCatalogCommand() {
57
66
  .option('--processing-confidence-min <n>', 'Minimum process metadata confidence (0-1)')
58
67
  .option('--price-min <n>', 'Minimum price per lb (USD)')
59
68
  .option('--price-max <n>', 'Maximum price per lb (USD)')
60
- .option('--flavor <keywords>', 'Flavor keywords, comma-separated (e.g. "berry,chocolate")')
61
69
  .option('--name <text>', 'Filter by coffee name (partial match, case-insensitive)')
62
- .option('--supplier <name>', 'Filter by supplier/source name (partial match, case-insensitive)')
63
70
  .option('--ids <n,n,...>', 'Fetch specific catalog IDs (comma-separated, ignores limit)')
64
71
  .option('--variety <text>', 'Filter by coffee variety/cultivar (partial match)')
65
- .option('--drying-method <text>', 'Filter by drying method (partial match)')
66
72
  .option('--stocked-days <n>', 'Only show coffees stocked within N days')
67
73
  .option('--stocked', 'Only show currently stocked coffees')
68
74
  .option('--sort <field>', `Sort results by: ${catalogSortFields.join(', ')}`)
69
75
  .option('--offset <n>', 'Skip N results (for pagination)', '0')
70
- .option('--limit <n>', 'Maximum results to return', '10')
76
+ .option('--limit <n>', `Maximum results to return (${CLI_NUMERIC_BOUNDS.catalogSearchLimit.minimum}-${CLI_NUMERIC_BOUNDS.catalogSearchLimit.maximum})`, '10')
71
77
  .option('--include-proof', 'Request canonical catalog proof summaries from /v1/catalog')
72
78
  .addHelpText('after', `
73
79
  Examples:
74
80
  purvey catalog search --origin "Ethiopia" --pretty
75
81
  purvey catalog search --origin "Colombia" --process "honey" --pretty
76
- purvey catalog search --process "natural" --flavor "blueberry,citrus" --stocked
77
82
  purvey catalog search --processing-base-method "Natural" --fermentation-type "Anaerobic" --pretty
78
83
  purvey catalog search --process-additive "hops" --processing-confidence-min 0.8 --pretty
79
84
  purvey catalog search --price-min 5 --price-max 12 --stocked --limit 20
80
85
  purvey catalog search --stocked --sort price --pretty
81
- purvey catalog search --sort newest --limit 20
82
86
  purvey catalog search --stocked --limit 10 --offset 10 # page 2
83
87
  purvey catalog search --origin "Ethiopia" --csv > ethiopia.csv
84
88
  purvey catalog search --stocked --limit 50 | jq '.[].name'
85
89
  purvey catalog search --name "Guji" --pretty
86
- purvey catalog search --supplier "Royal Coffee" --stocked --pretty
87
90
  purvey catalog search --ids "1182,1183,1200"
88
91
  purvey catalog search --variety "gesha" --stocked --pretty
89
- purvey catalog search --drying-method "sun" --origin "Ethiopia" --pretty
90
92
  purvey catalog search --stocked-days 30 --pretty
91
93
  purvey catalog search --origin "Ethiopia" --include-proof --json
92
94
 
@@ -95,7 +97,6 @@ Sort fields:
95
97
  price-desc most expensive first
96
98
  name alphabetical by name
97
99
  origin alphabetical by country
98
- newest most recently updated first
99
100
 
100
101
  Notes:
101
102
  All filters are optional. Without flags, returns up to --limit results.
@@ -108,9 +109,7 @@ Notes:
108
109
  --processing-base-method, --fermentation-type, --process-additive, and
109
110
  --processing-disclosure-level require exact structured metadata matches.
110
111
  --processing-confidence-min accepts a decimal from 0 to 1.
111
- --name and --supplier accept partial matches (case-insensitive).
112
112
  --variety filters on cultivar_detail (partial match, case-insensitive).
113
- --drying-method filters on drying_method (partial match, case-insensitive).
114
113
  --stocked-days N shows only coffees stocked within the last N days.
115
114
  --ids fetches specific catalog items by ID, ignoring --limit and --offset.
116
115
  --offset + --limit enables pagination through large result sets.
@@ -134,7 +133,7 @@ Notes:
134
133
  .filter(Boolean);
135
134
  const nums = [];
136
135
  for (const token of raw) {
137
- nums.push(parsePositiveIntegerArg(token, `Invalid --ids value: "${token}". Each ID must be a positive integer.`));
136
+ nums.push(parseInt4IdArg(token, `Invalid --ids value: "${token}". Each ID must be a positive integer.`));
138
137
  }
139
138
  parsedIds = nums;
140
139
  }
@@ -157,19 +156,16 @@ Notes:
157
156
  const offset = opts.offset !== undefined
158
157
  ? parseNonNegativeIntegerArg(opts.offset, `Invalid --offset: "${opts.offset}". Must be a non-negative integer.`)
159
158
  : undefined;
160
- const limit = parsePositiveIntegerArg(opts.limit, `Invalid --limit: "${opts.limit}". Must be a positive integer.`);
159
+ const limit = parseBoundedPositiveIntegerArg(opts.limit, '--limit', CLI_NUMERIC_BOUNDS.catalogSearchLimit.minimum, CATALOG_SEARCH_MAX_LIMIT);
161
160
  const includeProof = opts.includeProof ? true : undefined;
162
161
  const data = await searchCatalog({
163
162
  origin: opts.origin,
164
163
  process: opts.process,
165
164
  priceMin,
166
165
  priceMax,
167
- flavor: opts.flavor,
168
166
  name: opts.name,
169
- supplier: opts.supplier,
170
167
  ids: parsedIds,
171
168
  variety: opts.variety,
172
- dryingMethod: opts.dryingMethod,
173
169
  stockedDays,
174
170
  processingBaseMethod: opts.processingBaseMethod,
175
171
  fermentationType: opts.fermentationType,
@@ -209,7 +205,7 @@ Notes:
209
205
  `)
210
206
  .action(withErrorHandling(async (id, opts, cmd) => {
211
207
  const globalOpts = cmd.optsWithGlobals();
212
- const catalogId = parsePositiveIntegerArg(id, `Invalid ID: "${id}". Please provide a numeric coffee_catalog ID.`);
208
+ const catalogId = parseInt4IdArg(id, `Invalid ID: "${id}". Please provide a numeric coffee_catalog ID.`);
213
209
  const includeProof = opts.includeProof ? true : undefined;
214
210
  const data = await getCatalog(catalogId, {
215
211
  includeProof,
@@ -277,7 +273,6 @@ Notes:
277
273
  .option('--objective <objective>', `Ranking objective: ${catalogRankObjectives.join(', ')}`, 'premium')
278
274
  .option('--country <country>', 'Filter by country')
279
275
  .option('--process <method>', 'Filter by processing method')
280
- .option('--supplier <name>', 'Filter by supplier/source name')
281
276
  .option('--stocked', 'Only include currently stocked coffees')
282
277
  .option('--all', 'Use all visible catalog rows instead of default stocked-only scope')
283
278
  .option('--price-max <n>', 'Maximum price per lb (USD)')
@@ -308,7 +303,6 @@ Notes:
308
303
  objective: objective,
309
304
  country: opts.country,
310
305
  process: opts.process,
311
- supplier: opts.supplier,
312
306
  stockedOnly: opts.all ? false : opts.stocked ? true : true,
313
307
  priceMax: opts.priceMax !== undefined
314
308
  ? parseFiniteNumberArg(opts.priceMax, `Invalid --price-max: "${opts.priceMax}". Must be a number.`)
@@ -329,7 +323,6 @@ Notes:
329
323
  .description('Rank premium catalog candidates by Purveyor Score')
330
324
  .option('--origin <origin>', 'Filter by origin (country, continent, or region)')
331
325
  .option('--process <method>', 'Filter by processing method')
332
- .option('--supplier <name>', 'Filter by supplier/source name')
333
326
  .option('--stocked', 'Only include currently stocked coffees')
334
327
  .option('--price-max <n>', 'Maximum price per lb (USD)')
335
328
  .option('--min-score <n>', 'Minimum Purveyor Score')
@@ -340,7 +333,6 @@ Notes:
340
333
  Examples:
341
334
  purvey catalog rank-premium --stocked --limit 10 --pretty
342
335
  purvey catalog rank-premium --origin Ethiopia --min-score 88 --json
343
- purvey catalog rank-premium --supplier "Royal Coffee" --price-max 12 --pretty
344
336
 
345
337
  Notes:
346
338
  Ranks by coffee_catalog.score_value, exposed as purveyor_score in output.
@@ -353,7 +345,6 @@ Notes:
353
345
  const input = {
354
346
  origin: opts.origin,
355
347
  process: opts.process,
356
- supplier: opts.supplier,
357
348
  stocked: opts.stocked ? true : undefined,
358
349
  priceMax: opts.priceMax !== undefined
359
350
  ? parseFiniteNumberArg(opts.priceMax, `Invalid --price-max: "${opts.priceMax}". Must be a number.`)
@@ -436,7 +427,7 @@ Notes:
436
427
  .option('--country <country>', 'Filter by country')
437
428
  .option('--stocked', 'Only include currently stocked coffees')
438
429
  .option('--non-wholesale-only', 'Exclude wholesale listings before aggregation')
439
- .option('--min-coffees <n>', 'Minimum catalog rows required per supplier', '1')
430
+ .option('--min-coffees <n>', `Minimum catalog rows required per supplier (${CLI_NUMERIC_BOUNDS.supplierMinCoffees.minimum}-${CLI_NUMERIC_BOUNDS.supplierMinCoffees.maximum})`, '1')
440
431
  .option('--sample-size <n>', 'Catalog rows to fetch per page before aggregation (1-5000)', '5000')
441
432
  .option('--limit <n>', 'Maximum suppliers to return (1-100)', '25')
442
433
  .addHelpText('after', `
@@ -454,7 +445,7 @@ Notes:
454
445
  country: opts.country,
455
446
  stocked: opts.stocked ? true : undefined,
456
447
  nonWholesaleOnly: opts.nonWholesaleOnly ? true : undefined,
457
- minCoffees: parsePositiveIntegerArg(opts.minCoffees, `Invalid --min-coffees: "${opts.minCoffees}". Must be a positive integer.`),
448
+ minCoffees: parseBoundedPositiveIntegerArg(opts.minCoffees, '--min-coffees', CLI_NUMERIC_BOUNDS.supplierMinCoffees.minimum, SUPPLIER_MIN_COFFEES_MAX),
458
449
  sampleSize: parseBoundedPositiveIntegerArg(opts.sampleSize, '--sample-size', 1, 5000),
459
450
  limit: parseBoundedPositiveIntegerArg(opts.limit, '--limit', 1, 100),
460
451
  };
@@ -490,9 +481,9 @@ Notes:
490
481
  `)
491
482
  .action(withErrorHandling(async (id, opts, cmd) => {
492
483
  const globalOpts = cmd.optsWithGlobals();
493
- const coffeeId = parsePositiveIntegerArg(id, `Invalid ID: "${id}". Please provide a numeric coffee_catalog ID.`);
484
+ const coffeeId = parseInt4IdArg(id, `Invalid ID: "${id}". Please provide a numeric coffee_catalog ID.`);
494
485
  const threshold = parseFiniteNumberArg(opts.threshold, `Invalid --threshold: "${opts.threshold}". Must be a number between 0 and 1.`);
495
- const limit = parsePositiveIntegerArg(opts.limit, `Invalid --limit: "${opts.limit}". Must be a positive integer.`);
486
+ const limit = parseBoundedPositiveIntegerArg(opts.limit, '--limit', 1, 25);
496
487
  if (threshold < 0.5 || threshold > 0.99) {
497
488
  throw new PrvrsError('INVALID_ARGUMENT', `Invalid --threshold: "${opts.threshold}". Must be a number between 0.5 and 0.99.`);
498
489
  }
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/commands/catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/commands/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EACL,aAAa,EACb,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,CAAC;AAEpD,SAAS,oBAAoB,CAAC,QAAgB,EAAE,OAAe;IAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,UAAU,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,UAAU,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,uBAAuB,CAAC,QAAgB,EAAE,OAAe;IAChE,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,UAAU,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB,EAAE,OAAe;IACvD,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,UAAU,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,8BAA8B,CACrC,QAAgB,EAChB,IAAY,EACZ,GAAW,EACX,GAAW;IAEX,MAAM,MAAM,GAAG,uBAAuB,CACpC,QAAQ,EACR,WAAW,IAAI,MAAM,QAAQ,gCAAgC,CAC9D,CAAC;IAEF,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QACjC,MAAM,IAAI,UAAU,CAClB,kBAAkB,EAClB,WAAW,IAAI,MAAM,QAAQ,sBAAsB,GAAG,QAAQ,GAAG,GAAG,CACrE,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,0BAA0B,CAAC,QAAgB,EAAE,OAAe;IACnE,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,UAAU,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iFAAiF;AAEjF;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;IAEhF,6EAA6E;IAC7E,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,+DAA+D,CAAC;SAC5E,MAAM,CAAC,mBAAmB,EAAE,kDAAkD,CAAC;SAC/E,MAAM,CAAC,oBAAoB,EAAE,oDAAoD,CAAC;SAClF,MAAM,CAAC,mCAAmC,EAAE,yCAAyC,CAAC;SACtF,MAAM,CAAC,4BAA4B,EAAE,wCAAwC,CAAC;SAC9E,MAAM,CAAC,+BAA+B,EAAE,sCAAsC,CAAC;SAC/E,MAAM,CAAC,uCAAuC,EAAE,oCAAoC,CAAC;SACrF,MAAM,CAAC,iCAAiC,EAAE,2CAA2C,CAAC;SACtF,MAAM,CAAC,iBAAiB,EAAE,4BAA4B,CAAC;SACvD,MAAM,CAAC,iBAAiB,EAAE,4BAA4B,CAAC;SACvD,MAAM,CAAC,eAAe,EAAE,yDAAyD,CAAC;SAClF,MAAM,CAAC,iBAAiB,EAAE,6DAA6D,CAAC;SACxF,MAAM,CAAC,kBAAkB,EAAE,mDAAmD,CAAC;SAC/E,MAAM,CAAC,oBAAoB,EAAE,yCAAyC,CAAC;SACvE,MAAM,CAAC,WAAW,EAAE,qCAAqC,CAAC;SAC1D,MAAM,CAAC,gBAAgB,EAAE,oBAAoB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SAC5E,MAAM,CAAC,cAAc,EAAE,iCAAiC,EAAE,GAAG,CAAC;SAC9D,MAAM,CACL,aAAa,EACb,8BAA8B,kBAAkB,CAAC,kBAAkB,CAAC,OAAO,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,OAAO,GAAG,EAC/H,IAAI,CACL;SACA,MAAM,CAAC,iBAAiB,EAAE,4DAA4D,CAAC;SACvF,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCL,CACI;SACA,MAAM,CACL,iBAAiB,CAAC,KAAK,EAAE,IAA6B,EAAE,GAAY,EAAE,EAAE;QACtE,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAmB,CAAC;QAE1D,8BAA8B;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,IAA0B,CAAC;QAClD,IAAI,SAAS,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,SAA6B,CAAC,EAAE,CAAC;YAC5E,MAAM,IAAI,UAAU,CAClB,kBAAkB,EAClB,0BAA0B,SAAS,sBAAsB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxF,CAAC;QACJ,CAAC;QAED,wCAAwC;QACxC,IAAI,SAA+B,CAAC;QACpC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAI,IAAI,CAAC,GAAc;iBAC7B,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBACpB,MAAM,CAAC,OAAO,CAAC,CAAC;YACnB,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;gBACxB,IAAI,CAAC,IAAI,CACP,cAAc,CACZ,KAAK,EACL,yBAAyB,KAAK,wCAAwC,CACvE,CACF,CAAC;YACJ,CAAC;YACD,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ,KAAK,SAAS;YACzB,CAAC,CAAC,oBAAoB,CAClB,IAAI,CAAC,QAAkB,EACvB,yBAAyB,IAAI,CAAC,QAAQ,sBAAsB,CAC7D;YACH,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ,KAAK,SAAS;YACzB,CAAC,CAAC,oBAAoB,CAClB,IAAI,CAAC,QAAkB,EACvB,yBAAyB,IAAI,CAAC,QAAQ,sBAAsB,CAC7D;YACH,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,WAAW,GACf,IAAI,CAAC,WAAW,KAAK,SAAS;YAC5B,CAAC,CAAC,uBAAuB,CACrB,IAAI,CAAC,WAAqB,EAC1B,4BAA4B,IAAI,CAAC,WAAW,gCAAgC,CAC7E;YACH,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,uBAAuB,GAC3B,IAAI,CAAC,uBAAuB,KAAK,SAAS;YACxC,CAAC,CAAC,oBAAoB,CAClB,IAAI,CAAC,uBAAiC,EACtC,yCAAyC,IAAI,CAAC,uBAAuB,kCAAkC,CACxG;YACH,CAAC,CAAC,SAAS,CAAC;QAChB,IACE,uBAAuB,KAAK,SAAS;YACrC,CAAC,uBAAuB,GAAG,CAAC,IAAI,uBAAuB,GAAG,CAAC,CAAC,EAC5D,CAAC;YACD,MAAM,IAAI,UAAU,CAClB,kBAAkB,EAClB,yCAAyC,IAAI,CAAC,uBAAuB,kCAAkC,CACxG,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GACV,IAAI,CAAC,MAAM,KAAK,SAAS;YACvB,CAAC,CAAC,0BAA0B,CACxB,IAAI,CAAC,MAAgB,EACrB,sBAAsB,IAAI,CAAC,MAAM,oCAAoC,CACtE;YACH,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,KAAK,GAAG,8BAA8B,CAC1C,IAAI,CAAC,KAAe,EACpB,SAAS,EACT,kBAAkB,CAAC,kBAAkB,CAAC,OAAO,EAC7C,wBAAwB,CACzB,CAAC;QAEF,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1D,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC;YAC/B,MAAM,EAAE,IAAI,CAAC,MAA4B;YACzC,OAAO,EAAE,IAAI,CAAC,OAA6B;YAC3C,QAAQ;YACR,QAAQ;YACR,IAAI,EAAE,IAAI,CAAC,IAA0B;YACrC,GAAG,EAAE,SAAS;YACd,OAAO,EAAE,IAAI,CAAC,OAA6B;YAC3C,WAAW;YACX,oBAAoB,EAAE,IAAI,CAAC,oBAA0C;YACrE,gBAAgB,EAAE,IAAI,CAAC,gBAAsC;YAC7D,eAAe,EAAE,IAAI,CAAC,eAAqC;YAC3D,yBAAyB,EAAE,IAAI,CAAC,yBAA+C;YAC/E,uBAAuB;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACxC,IAAI,EAAE,SAAyC;YAC/C,MAAM;YACN,KAAK;YACL,YAAY;SACb,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,0CAA0C,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QAED,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEJ,6EAA6E;IAC7E,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,iBAAiB,EAAE,8DAA8D,CAAC;SACzF,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;CAaL,CACI;SACA,MAAM,CACL,iBAAiB,CAAC,KAAK,EAAE,EAAU,EAAE,IAA6B,EAAE,GAAY,EAAE,EAAE;QAClF,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAmB,CAAC;QAC1D,MAAM,SAAS,GAAG,cAAc,CAC9B,EAAE,EACF,gBAAgB,EAAE,gDAAgD,CACnE,CAAC;QAEF,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1D,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE;YACvC,YAAY;SACb,CAAC,CAAC;QACH,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEJ,6EAA6E;IAC7E,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,WAAW,CACV,OAAO,EACP;;;;;;;;;;CAUL,CACI;SACA,MAAM,CACL,iBAAiB,CAAC,KAAK,EAAE,KAA8B,EAAE,GAAY,EAAE,EAAE;QACvE,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAmB,CAAC;QAC1D,MAAM,KAAK,GAAG,MAAM,eAAe,EAAE,CAAC;QACtC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAChC,CAAC,CAAC,CACH,CAAC;IAEJ,4EAA4E;IAC5E,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,OAAO,EAAE,oEAAoE,CAAC;SACrF,MAAM,CAAC,aAAa,EAAE,wCAAwC,EAAE,IAAI,CAAC;SACrE,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;CAcL,CACI;SACA,MAAM,CACL,iBAAiB,CAAC,KAAK,EAAE,KAAa,EAAE,IAA6B,EAAE,GAAY,EAAE,EAAE;QACrF,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAmB,CAAC;QAC1D,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAA4C,CAAC,EAAE,CAAC;YAC/E,MAAM,IAAI,UAAU,CAClB,kBAAkB,EAClB,mBAAmB,KAAK,sBAAsB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC/E,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG;YACZ,KAAK,EAAE,KAA4C;YACnD,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;YACpC,KAAK,EAAE,8BAA8B,CAAC,IAAI,CAAC,KAAe,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC;SAC/E,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAE5C,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEJ,4EAA4E;IAC5E,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,sDAAsD,CAAC;SACnE,MAAM,CACL,yBAAyB,EACzB,sBAAsB,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACxD,SAAS,CACV;SACA,MAAM,CAAC,qBAAqB,EAAE,mBAAmB,CAAC;SAClD,MAAM,CAAC,oBAAoB,EAAE,6BAA6B,CAAC;SAC3D,MAAM,CAAC,WAAW,EAAE,wCAAwC,CAAC;SAC7D,MAAM,CAAC,OAAO,EAAE,oEAAoE,CAAC;SACrF,MAAM,CAAC,iBAAiB,EAAE,4BAA4B,CAAC;SACvD,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;SACnD,MAAM,CAAC,sBAAsB,EAAE,4CAA4C,CAAC;SAC5E,MAAM,CAAC,mBAAmB,EAAE,wCAAwC,EAAE,MAAM,CAAC;SAC7E,MAAM,CAAC,aAAa,EAAE,yCAAyC,EAAE,IAAI,CAAC;SACtE,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;CAYL,CACI;SACA,MAAM,CACL,iBAAiB,CAAC,KAAK,EAAE,IAA6B,EAAE,GAAY,EAAE,EAAE;QACtE,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAmB,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAmB,CAAC;QAC3C,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,SAAmD,CAAC,EAAE,CAAC;YACzF,MAAM,IAAI,UAAU,CAClB,kBAAkB,EAClB,yBAAyB,SAAS,sBAAsB,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC5F,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG;YACZ,SAAS,EAAE,SAAmD;YAC9D,OAAO,EAAE,IAAI,CAAC,OAA6B;YAC3C,OAAO,EAAE,IAAI,CAAC,OAA6B;YAC3C,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;YAC1D,QAAQ,EACN,IAAI,CAAC,QAAQ,KAAK,SAAS;gBACzB,CAAC,CAAC,oBAAoB,CAClB,IAAI,CAAC,QAAkB,EACvB,yBAAyB,IAAI,CAAC,QAAQ,sBAAsB,CAC7D;gBACH,CAAC,CAAC,SAAS;YACf,QAAQ,EACN,IAAI,CAAC,QAAQ,KAAK,SAAS;gBACzB,CAAC,CAAC,oBAAoB,CAClB,IAAI,CAAC,QAAkB,EACvB,yBAAyB,IAAI,CAAC,QAAQ,sBAAsB,CAC7D;gBACH,CAAC,CAAC,SAAS;YACf,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC1D,UAAU,EAAE,8BAA8B,CACxC,IAAI,CAAC,UAAoB,EACzB,eAAe,EACf,CAAC,EACD,IAAI,CACL;YACD,KAAK,EAAE,8BAA8B,CAAC,IAAI,CAAC,KAAe,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;SAC9E,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;QAEtC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEJ,4EAA4E;IAC5E,OAAO;SACJ,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,mBAAmB,EAAE,kDAAkD,CAAC;SAC/E,MAAM,CAAC,oBAAoB,EAAE,6BAA6B,CAAC;SAC3D,MAAM,CAAC,WAAW,EAAE,wCAAwC,CAAC;SAC7D,MAAM,CAAC,iBAAiB,EAAE,4BAA4B,CAAC;SACvD,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;SACnD,MAAM,CAAC,oBAAoB,EAAE,iDAAiD,CAAC;SAC/E,MAAM,CAAC,mBAAmB,EAAE,wCAAwC,EAAE,KAAK,CAAC;SAC5E,MAAM,CAAC,aAAa,EAAE,yCAAyC,EAAE,IAAI,CAAC;SACtE,WAAW,CACV,OAAO,EACP;;;;;;;;;;CAUL,CACI;SACA,MAAM,CACL,iBAAiB,CAAC,KAAK,EAAE,IAA6B,EAAE,GAAY,EAAE,EAAE;QACtE,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAmB,CAAC;QAC1D,MAAM,KAAK,GAAG;YACZ,MAAM,EAAE,IAAI,CAAC,MAA4B;YACzC,OAAO,EAAE,IAAI,CAAC,OAA6B;YAC3C,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACxC,QAAQ,EACN,IAAI,CAAC,QAAQ,KAAK,SAAS;gBACzB,CAAC,CAAC,oBAAoB,CAClB,IAAI,CAAC,QAAkB,EACvB,yBAAyB,IAAI,CAAC,QAAQ,sBAAsB,CAC7D;gBACH,CAAC,CAAC,SAAS;YACf,QAAQ,EACN,IAAI,CAAC,QAAQ,KAAK,SAAS;gBACzB,CAAC,CAAC,oBAAoB,CAClB,IAAI,CAAC,QAAkB,EACvB,yBAAyB,IAAI,CAAC,QAAQ,sBAAsB,CAC7D;gBACH,CAAC,CAAC,SAAS;YACf,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACxD,UAAU,EAAE,8BAA8B,CACxC,IAAI,CAAC,UAAoB,EACzB,eAAe,EACf,CAAC,EACD,IAAI,CACL;YACD,KAAK,EAAE,8BAA8B,CAAC,IAAI,CAAC,KAAe,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;SAC9E,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAE7C,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEJ,4EAA4E;IAC5E,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,qBAAqB,EAAE,mBAAmB,CAAC;SAClD,MAAM,CAAC,WAAW,EAAE,wCAAwC,CAAC;SAC7D,MAAM,CAAC,sBAAsB,EAAE,+CAA+C,CAAC;SAC/E,MAAM,CACL,mBAAmB,EACnB,4DAA4D,EAC5D,MAAM,CACP;SACA,MAAM,CAAC,aAAa,EAAE,qCAAqC,EAAE,IAAI,CAAC;SAClE,WAAW,CACV,OAAO,EACP;;;;;;;;;;CAUL,CACI;SACA,MAAM,CACL,iBAAiB,CAAC,KAAK,EAAE,IAA6B,EAAE,GAAY,EAAE,EAAE;QACtE,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAmB,CAAC;QAC1D,MAAM,KAAK,GAAG;YACZ,OAAO,EAAE,IAAI,CAAC,OAA6B;YAC3C,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACxC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC1D,UAAU,EAAE,8BAA8B,CACxC,IAAI,CAAC,UAAoB,EACzB,eAAe,EACf,CAAC,EACD,IAAI,CACL;YACD,KAAK,EAAE,8BAA8B,CAAC,IAAI,CAAC,KAAe,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC;SAC/E,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;QAEvC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEJ,OAAO;SACJ,OAAO,CAAC,4BAA4B,CAAC;SACrC,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,qBAAqB,EAAE,mBAAmB,CAAC;SAClD,MAAM,CAAC,WAAW,EAAE,wCAAwC,CAAC;SAC7D,MAAM,CAAC,sBAAsB,EAAE,+CAA+C,CAAC;SAC/E,MAAM,CAAC,mBAAmB,EAAE,8CAA8C,EAAE,GAAG,CAAC;SAChF,MAAM,CACL,mBAAmB,EACnB,4DAA4D,EAC5D,MAAM,CACP;SACA,WAAW,CACV,OAAO,EACP;;;;;;;;CAQL,CACI;SACA,MAAM,CACL,iBAAiB,CAAC,KAAK,EAAE,QAAgB,EAAE,IAA6B,EAAE,GAAY,EAAE,EAAE;QACxF,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAmB,CAAC;QAC1D,MAAM,KAAK,GAAG;YACZ,QAAQ;YACR,OAAO,EAAE,IAAI,CAAC,OAA6B;YAC3C,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACxC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC1D,UAAU,EAAE,8BAA8B,CACxC,IAAI,CAAC,UAAoB,EACzB,eAAe,EACf,CAAC,EACD,EAAE,CACH;YACD,UAAU,EAAE,8BAA8B,CACxC,IAAI,CAAC,UAAoB,EACzB,eAAe,EACf,CAAC,EACD,IAAI,CACL;SACF,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;QAEzC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEJ,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,+DAA+D,CAAC;SAC5E,MAAM,CAAC,qBAAqB,EAAE,mBAAmB,CAAC;SAClD,MAAM,CAAC,WAAW,EAAE,wCAAwC,CAAC;SAC7D,MAAM,CAAC,sBAAsB,EAAE,+CAA+C,CAAC;SAC/E,MAAM,CACL,mBAAmB,EACnB,+CAA+C,kBAAkB,CAAC,kBAAkB,CAAC,OAAO,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,OAAO,GAAG,EAChJ,GAAG,CACJ;SACA,MAAM,CACL,mBAAmB,EACnB,4DAA4D,EAC5D,MAAM,CACP;SACA,MAAM,CAAC,aAAa,EAAE,qCAAqC,EAAE,IAAI,CAAC;SAClE,WAAW,CACV,OAAO,EACP;;;;;;;;CAQL,CACI;SACA,MAAM,CACL,iBAAiB,CAAC,KAAK,EAAE,IAA6B,EAAE,GAAY,EAAE,EAAE;QACtE,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAmB,CAAC;QAC1D,MAAM,KAAK,GAAG;YACZ,OAAO,EAAE,IAAI,CAAC,OAA6B;YAC3C,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACxC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC1D,UAAU,EAAE,8BAA8B,CACxC,IAAI,CAAC,UAAoB,EACzB,eAAe,EACf,kBAAkB,CAAC,kBAAkB,CAAC,OAAO,EAC7C,wBAAwB,CACzB;YACD,UAAU,EAAE,8BAA8B,CACxC,IAAI,CAAC,UAAoB,EACzB,eAAe,EACf,CAAC,EACD,IAAI,CACL;YACD,KAAK,EAAE,8BAA8B,CAAC,IAAI,CAAC,KAAe,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC;SAC/E,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;QAEvC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEJ,6EAA6E;IAC7E,OAAO;SACJ,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,4EAA4E,CAAC;SACzF,MAAM,CAAC,qBAAqB,EAAE,mDAAmD,EAAE,MAAM,CAAC;SAC1F,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,IAAI,CAAC;SACrD,MAAM,CAAC,gBAAgB,EAAE,mCAAmC,CAAC;SAC7D,MAAM,CACL,eAAe,EACf,oCAAoC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACvE,KAAK,CACN;SACA,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;;;;;CAkBL,CACI;SACA,MAAM,CACL,iBAAiB,CAAC,KAAK,EAAE,EAAU,EAAE,IAA6B,EAAE,GAAY,EAAE,EAAE;QAClF,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAmB,CAAC;QAE1D,MAAM,QAAQ,GAAG,cAAc,CAC7B,EAAE,EACF,gBAAgB,EAAE,gDAAgD,CACnE,CAAC;QAEF,MAAM,SAAS,GAAG,oBAAoB,CACpC,IAAI,CAAC,SAAmB,EACxB,yBAAyB,IAAI,CAAC,SAAS,sCAAsC,CAC9E,CAAC;QACF,MAAM,KAAK,GAAG,8BAA8B,CAAC,IAAI,CAAC,KAAe,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACrF,IAAI,SAAS,GAAG,GAAG,IAAI,SAAS,GAAG,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,UAAU,CAClB,kBAAkB,EAClB,yBAAyB,IAAI,CAAC,SAAS,2CAA2C,CACnF,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,UAAU,CAClB,kBAAkB,EAClB,qBAAqB,IAAI,CAAC,KAAK,yCAAyC,CACzE,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAc,CAAC;QACjC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAA+C,CAAC,EAAE,CAAC;YACtF,MAAM,IAAI,UAAU,CAClB,kBAAkB,EAClB,oBAAoB,IAAI,sBAAsB,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACnF,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC;YAC1C,SAAS,EAAE,QAAQ;YACnB,SAAS;YACT,KAAK;YACL,WAAW;YACX,IAAI,EAAE,IAA+C;SACtD,CAAC,CAAC;QAEH,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACnC,CAAC,CAAC,CACH,CAAC;IAEJ,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"inventory.d.ts","sourceRoot":"","sources":["../../src/commands/inventory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,OAAO,KAAK,EAAE,aAAa,EAAyB,MAAM,qBAAqB,CAAC;AAKhF,YAAY,EAAE,aAAa,EAAE,CAAC;AAI9B;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CA2X/C"}
1
+ {"version":3,"file":"inventory.d.ts","sourceRoot":"","sources":["../../src/commands/inventory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,OAAO,KAAK,EAAE,aAAa,EAAyB,MAAM,qBAAqB,CAAC;AAWhF,YAAY,EAAE,aAAa,EAAE,CAAC;AAwB9B;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAqX/C"}
@@ -7,6 +7,22 @@ import { requireAuth } from '../lib/auth-guard.js';
7
7
  import { confirm, todayIso } from '../lib/prompts.js';
8
8
  import { listInventory, getInventory, addInventory, updateInventory, deleteInventory, } from '../lib/inventory.js';
9
9
  import { pickCatalogItem, guardCancel } from '../lib/interactive/forms.js';
10
+ import { parseStrictFiniteNumber, parseStrictInt4Id, parseStrictOffset, parseStrictPositiveCount, } from '../lib/strict-number.js';
11
+ function parseInventoryId(value, label) {
12
+ const parsed = parseStrictInt4Id(value);
13
+ if (!Number.isFinite(parsed)) {
14
+ throw new PrvrsError('INVALID_ARGUMENT', `Invalid ${label}: "${value}".`);
15
+ }
16
+ return parsed;
17
+ }
18
+ function parseListCount(value, flag) {
19
+ const parsed = flag === '--offset' ? parseStrictOffset(value) : parseStrictPositiveCount(value);
20
+ if (!Number.isFinite(parsed)) {
21
+ const requirement = flag === '--offset' ? 'a non-negative integer' : 'a positive integer';
22
+ throw new PrvrsError('INVALID_ARGUMENT', `Invalid ${flag}: "${value}". Must be ${requirement}.`);
23
+ }
24
+ return parsed;
25
+ }
10
26
  // ─── Command builder ──────────────────────────────────────────────────────────
11
27
  /**
12
28
  * `purvey inventory` — Manage your green coffee inventory.
@@ -48,16 +64,12 @@ Notes:
48
64
  const globalOpts = cmd.optsWithGlobals();
49
65
  let catalogId;
50
66
  if (opts.catalogId !== undefined) {
51
- catalogId = parseInt(opts.catalogId, 10);
52
- if (isNaN(catalogId)) {
53
- throw new PrvrsError('INVALID_ARGUMENT', `Invalid --catalog-id: "${opts.catalogId}".`);
54
- }
67
+ catalogId = parseInventoryId(opts.catalogId, '--catalog-id');
55
68
  }
56
- const offsetVal = parseInt(opts.offset, 10);
57
69
  const data = await listInventory({
58
70
  stocked_only: opts.stocked ? true : undefined,
59
- limit: Math.max(1, parseInt(opts.limit, 10)),
60
- offset: isNaN(offsetVal) || offsetVal < 0 ? 0 : offsetVal,
71
+ limit: parseListCount(opts.limit, '--limit'),
72
+ offset: parseListCount(opts.offset, '--offset'),
61
73
  catalogId,
62
74
  purchaseDateStart: opts.purchaseDateStart,
63
75
  purchaseDateEnd: opts.purchaseDateEnd,
@@ -85,7 +97,7 @@ Notes:
85
97
  `)
86
98
  .action(withErrorHandling(async (id, _opts, cmd) => {
87
99
  const globalOpts = cmd.optsWithGlobals();
88
- const data = await getInventory(parseInt(id, 10));
100
+ const data = await getInventory(parseInventoryId(id, 'inventory ID'));
89
101
  outputData(data, globalOpts);
90
102
  }));
91
103
  // ── inventory add ─────────────────────────────────────────────────────────
@@ -125,8 +137,8 @@ Required flags: --catalog-id, --qty
125
137
  message: 'Quantity (lbs)',
126
138
  placeholder: '5',
127
139
  validate: (v) => {
128
- const n = parseFloat(String(v));
129
- if (isNaN(n) || n <= 0)
140
+ const n = parseStrictFiniteNumber(String(v));
141
+ if (!Number.isFinite(n) || n <= 0)
130
142
  return 'Must be a positive number.';
131
143
  },
132
144
  });
@@ -134,6 +146,13 @@ Required flags: --catalog-id, --qty
134
146
  const costRaw = await p.text({
135
147
  message: 'Cost per lb ($)',
136
148
  placeholder: 'optional',
149
+ validate: (v) => {
150
+ if (!v || v.trim() === '')
151
+ return;
152
+ const n = parseStrictFiniteNumber(v);
153
+ if (!Number.isFinite(n))
154
+ return 'Must be a number.';
155
+ },
137
156
  });
138
157
  guardCancel(costRaw);
139
158
  const notesRaw = await p.text({
@@ -148,7 +167,7 @@ Required flags: --catalog-id, --qty
148
167
  return;
149
168
  }
150
169
  const costStr = String(costRaw).trim();
151
- const cost = costStr !== '' ? parseFloat(costStr) : undefined;
170
+ const cost = costStr !== '' ? parseStrictFiniteNumber(costStr) : undefined;
152
171
  const notesStr = String(notesRaw).trim();
153
172
  const notes = notesStr !== '' ? notesStr : undefined;
154
173
  const qtyStr = String(qtyRaw);
@@ -160,7 +179,7 @@ Required flags: --catalog-id, --qty
160
179
  }
161
180
  const data = await addInventory({
162
181
  catalogId: catalogItem.id,
163
- qty: parseFloat(qtyStr),
182
+ qty: parseStrictFiniteNumber(qtyStr),
164
183
  cost,
165
184
  notes,
166
185
  purchaseDate: todayIso(),
@@ -177,20 +196,17 @@ Required flags: --catalog-id, --qty
177
196
  if (!opts.qty) {
178
197
  throw new PrvrsError('INVALID_ARGUMENT', 'Missing --qty. Use --form for interactive mode.');
179
198
  }
180
- const catalogId = parseInt(opts.catalogId, 10);
181
- if (isNaN(catalogId)) {
182
- throw new PrvrsError('INVALID_ARGUMENT', `Invalid --catalog-id: "${opts.catalogId}".`);
183
- }
184
- const qty = parseFloat(opts.qty);
185
- if (isNaN(qty) || qty <= 0) {
199
+ const catalogId = parseInventoryId(opts.catalogId, '--catalog-id');
200
+ const qty = parseStrictFiniteNumber(opts.qty);
201
+ if (!Number.isFinite(qty) || qty <= 0) {
186
202
  throw new PrvrsError('INVALID_ARGUMENT', `Invalid --qty: "${opts.qty}". Must be a positive number.`);
187
203
  }
188
- const cost = opts.cost !== undefined ? parseFloat(opts.cost) : undefined;
189
- if (cost !== undefined && isNaN(cost)) {
204
+ const cost = opts.cost !== undefined ? parseStrictFiniteNumber(opts.cost) : undefined;
205
+ if (cost !== undefined && !Number.isFinite(cost)) {
190
206
  throw new PrvrsError('INVALID_ARGUMENT', `Invalid --cost: "${opts.cost}".`);
191
207
  }
192
- const taxShip = opts.taxShip !== undefined ? parseFloat(opts.taxShip) : undefined;
193
- if (taxShip !== undefined && isNaN(taxShip)) {
208
+ const taxShip = opts.taxShip !== undefined ? parseStrictFiniteNumber(opts.taxShip) : undefined;
209
+ if (taxShip !== undefined && !Number.isFinite(taxShip)) {
194
210
  throw new PrvrsError('INVALID_ARGUMENT', `Invalid --tax-ship: "${opts.taxShip}".`);
195
211
  }
196
212
  const data = await addInventory({
@@ -227,27 +243,24 @@ Notes:
227
243
  `)
228
244
  .action(withErrorHandling(async (id, opts, cmd) => {
229
245
  const globalOpts = cmd.optsWithGlobals();
230
- const itemId = parseInt(id, 10);
231
- if (isNaN(itemId)) {
232
- throw new PrvrsError('INVALID_ARGUMENT', `Invalid inventory ID: "${id}".`);
233
- }
246
+ const itemId = parseInventoryId(id, 'inventory ID');
234
247
  // Parse CLI strings into typed values
235
248
  let qty;
236
249
  if (opts.qty !== undefined) {
237
- qty = parseFloat(opts.qty);
238
- if (isNaN(qty) || qty <= 0)
250
+ qty = parseStrictFiniteNumber(opts.qty);
251
+ if (!Number.isFinite(qty) || qty <= 0)
239
252
  throw new PrvrsError('INVALID_ARGUMENT', `Invalid --qty: "${opts.qty}".`);
240
253
  }
241
254
  let cost;
242
255
  if (opts.cost !== undefined) {
243
- cost = parseFloat(opts.cost);
244
- if (isNaN(cost))
256
+ cost = parseStrictFiniteNumber(opts.cost);
257
+ if (!Number.isFinite(cost))
245
258
  throw new PrvrsError('INVALID_ARGUMENT', `Invalid --cost: "${opts.cost}".`);
246
259
  }
247
260
  let taxShip;
248
261
  if (opts.taxShip !== undefined) {
249
- taxShip = parseFloat(opts.taxShip);
250
- if (isNaN(taxShip))
262
+ taxShip = parseStrictFiniteNumber(opts.taxShip);
263
+ if (!Number.isFinite(taxShip))
251
264
  throw new PrvrsError('INVALID_ARGUMENT', `Invalid --tax-ship: "${opts.taxShip}".`);
252
265
  }
253
266
  let stocked;
@@ -294,10 +307,7 @@ Notes:
294
307
  `)
295
308
  .action(withErrorHandling(async (id, opts, cmd) => {
296
309
  const globalOpts = cmd.optsWithGlobals();
297
- const itemId = parseInt(id, 10);
298
- if (isNaN(itemId)) {
299
- throw new PrvrsError('INVALID_ARGUMENT', `Invalid inventory ID: "${id}".`);
300
- }
310
+ const itemId = parseInventoryId(id, 'inventory ID');
301
311
  if (!opts.yes) {
302
312
  const ok = await confirm(`Delete inventory item ${itemId}?`);
303
313
  if (!ok) {