Problem Statement
The current output module only supports flat field filtering (e.g., "number,title,state"), which limits users to selecting top-level fields. This prevents:
- Accessing nested properties (
user.name, metadata.created)
- Filtering arrays based on conditions (
issues[?state=='OPEN'])
- Reshaping data structures (projections, multi-select hashes)
- Performing complex queries with conditional logic
Proposed Solution
Add query engine support with both JMESPath (for complex queries) and enhanced simple pick (for basic nested field selection) using separate functions for clarity.
See ADR 0001: Query Engine Support for detailed architectural decisions.
API Design
JMESPath Functions (Complex Queries)
import { outputJsonWithJMESPath, outputToonWithJMESPath } from '@pleaseai/cli-toolkit/output'
// Array filtering
outputJsonWithJMESPath(issues, 'items[?state==`OPEN`].{number: number, title: title}')
// Nested field access with projection
outputToonWithJMESPath(data, 'users[*].{name: name, email: email, org: organization.name}')
// Complex conditional queries
outputJsonWithJMESPath(data, 'issues[?priority>2 && state==`OPEN`]')
Simple Pick Functions (Basic Nested Access)
import { outputJsonWithPick, outputToonWithPick } from '@pleaseai/cli-toolkit/output'
// Dot notation for nested properties
outputJsonWithPick(data, ['user.name', 'metadata.created', 'assignee.login'])
// Array indexing
outputToonWithPick(data, ['items[0].id', 'items[0].title'])
Implementation Checklist
Core Implementation
Output Functions
Testing
Documentation
Package Configuration
"./output/query": {
"types": "./dist/output/query/index.d.ts",
"default": "./dist/output/query/index.js"
}
Success Criteria
- ✅ JMESPath queries work correctly for field selection, array filtering, projections, and nested access
- ✅ Simple pick works correctly for dot notation, array indexing, and multiple paths
- ✅ Both engines work with JSON and TOON output formats
- ✅ Backward compatibility maintained (existing API unchanged)
- ✅ Test coverage ≥ 90% for query module
- ✅ Clear error messages for invalid queries
- ✅ Documentation includes examples and migration guide
Technical Details
Query Pipeline:
Raw Data → Query Engine → Field Filter → Format → Console Output
Processing Order:
- Apply query transformation (JMESPath or Pick) if provided
- Apply field filtering (existing
fields parameter) for backward compatibility
- Format output as JSON or TOON
Backward Compatibility:
All existing functions (outputData, outputJson, outputToon) remain unchanged. New query functions are additive only.
References
Estimated Effort
- Core implementation: ~2-3 hours
- Comprehensive testing: ~1-2 hours
- Documentation: ~1 hour
- Total: 4-6 hours
Problem Statement
The current output module only supports flat field filtering (e.g.,
"number,title,state"), which limits users to selecting top-level fields. This prevents:user.name,metadata.created)issues[?state=='OPEN'])Proposed Solution
Add query engine support with both JMESPath (for complex queries) and enhanced simple pick (for basic nested field selection) using separate functions for clarity.
See ADR 0001: Query Engine Support for detailed architectural decisions.
API Design
JMESPath Functions (Complex Queries)
Simple Pick Functions (Basic Nested Access)
Implementation Checklist
Core Implementation
jmespathand@types/jmespathdependenciessrc/output/query/module structuresrc/output/query/types.ts- Type definitionssrc/output/query/jmespath.ts- JMESPath implementationsrc/output/query/pick.ts- Enhanced pick implementationsrc/output/query/index.ts- Public API exportsOutput Functions
outputJsonWithJMESPath(data, query, fields?)outputJsonWithPick(data, paths, fields?)outputToonWithJMESPath(data, query, fields?)outputToonWithPick(data, paths, fields?)src/output/index.tsexportsTesting
test/output/query/jmespath.test.tstest/output/query/pick.test.tsitems[0].id)test/output/json-query.test.ts- Integration tests with JSON outputtest/output/toon-query.test.ts- Integration tests with TOON outputDocumentation
Package Configuration
package.jsonexports to include query submodule:Success Criteria
Technical Details
Query Pipeline:
Processing Order:
fieldsparameter) for backward compatibilityBackward Compatibility:
All existing functions (
outputData,outputJson,outputToon) remain unchanged. New query functions are additive only.References
Estimated Effort