Replace the three-state field marker system (Optional/Mandatory/Required)
with a simpler two-state system where the default behavior produces
`field: type` (no marker), `.Required()` produces `field!: type`, and
`.Optional()` produces `field?: type`.
- Remove Mandatory(), IsMandatory(), ForceOptional(), IsForceOptional()
from all param types, StructField, Param interface, and CUE generator
- Replace `mandatory` and `forceOptional` fields with `optional` field
in baseParam and StructField
- Simplify CUE marker resolution to: default=none, Required="!",
Optional="?"
- Remove BeMandatory() matcher and mandatoryParam interface
- Migrate all test usages: .Mandatory() removed (now default behavior),
.ForceOptional() replaced with .Optional()
Signed-off-by: Jerrin Francis <jerrinfrancis7@gmail.com>
* feat(defkit): introduce Mandatory() API and three-state CUE field markers
Add a new .Mandatory() fluent method to all defkit param types and StructField,
giving callers explicit control over all three CUE field presence semantics:
field?: type — optional, emitted by default (no method call)
field: type — non-optional; must have a value, defaults/merging can satisfy (.Mandatory())
field!: type — required in input; user must explicitly provide it (.Required())
Previously, Required() emitted no marker (identical to a mandatory field), making
it impossible to generate the CUE ! marker at all. Now Required() emits ! and
Mandatory() emits no marker, matching their intuitive meanings.
- Add `mandatory bool` field to baseParam and StructField
- Add IsMandatory() accessor to baseParam, StructField, and Param interface
- Add .Mandatory() builder method to all 10 concrete param types and StructField
- Replace the `optional string` variable in cuegen.go with a typed `marker` variable
backed by named constants (fieldMarkerOptional, fieldMarkerNone, fieldMarkerRequired)
- Update IsOptional() to return !required && !mandatory
- Update Optional() to clear mandatory instead of required
- Update all tests to use .Mandatory() for non-optional fields
Signed-off-by: Jerrin Francis <jerrinfrancis7@gmail.com>
* fix(defkit): correct doc comments after Required/Mandatory semantic swap
Fix misleading comments that still described the pre-swap behaviour.
Mandatory() comments incorrectly referenced the "!" marker, and
Required()/IsRequired() accessors had stale descriptions. Aligned
all doc comments and field annotations with the actual semantics:
Required → "!" marker, Mandatory → non-optional (no ? marker).
Signed-off-by: Jerrin Francis <jerrinfrancis7@gmail.com>
* feat(defkit): add BeMandatory matcher and fix BeOptional for three-state semantics
BeOptional incorrectly returned true for mandatory params by checking
!IsRequired(). Now uses IsOptional() which correctly excludes both
required and mandatory params. Adds BeMandatory() matcher and updates
paramAccessor interface with IsOptional/IsMandatory methods.
Signed-off-by: Jerrin Francis <jerrinfrancis7@gmail.com>
* fix(defkit): clear required flag in Optional() for all param types
The previous commit only fixed StringParam.Optional(). Apply the same
fix to Int, Bool, Float, Array, Map, Struct, StructField, Enum, OneOf,
and StringKeyMap so that Optional() consistently resets both mandatory
and required flags across all parameter types.
Signed-off-by: Jerrin Francis <jerrinfrancis7@gmail.com>
* fix(defkit): make Required() and Mandatory() mutually exclusive and fix missing optional markers in CUE generation
Required() and Mandatory() only set their own flag without clearing
the other, allowing both to be true simultaneously via chaining.
Each method now clears the opposite flag so the last call wins,
matching the reset semantics that Optional() already followed.
Also fix CUE generation for int, bool, float, and enum params where
the optional marker was dropped from format strings when a default
value was present, causing those fields to always render without
the field marker regardless of their optional/mandatory/required state.
Signed-off-by: Jerrin Francis <jerrinfrancis7@gmail.com>
* Empty commit to re-trigger e2e
Signed-off-by: Jerrin Francis <jerrinfrancis7@gmail.com>
---------
Signed-off-by: Jerrin Francis <jerrinfrancis7@gmail.com>
* Feat: add MapVariant operation and support for OneOf parameters with default variant
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Feat: enhance string parameter output to include optional prefix in CUE generation
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Feat: add ConditionalOrFieldRef for fallback handling and support inline array values
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Feat: update CUE generation to support inline arrays with conditional wrapping
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Feat: update CUE generation to support inline arrays with conditional wrapping
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Feat: add support for compound optional fields and enhance array builder with guarded filtering
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Feat: add comprehensive tests for ArrayBuilder functionality
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Feat: implement field grouping in StatusBuilder for consolidated CUE output
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Feat: enhance CUE decomposition to support condValues and improve filtering logic
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Feat: add metadata labels to ComponentDefinition and update CUE generation
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Feat: clean up comments and formatting in cuegen and param files
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Feat: enhance CUE generation, trait definitions, and PatchContainer logic
CUE Generation:
- Simplify condition decomposition logic and rename GetDirective method
- Add condition decomposition and lifting logic to improve generated CUE output
- Refactor cueTypeForParamType to use a standalone cueTypeStr function for reusability
Collections:
- Enhance MapVariant operation to merge variant mappings and preserve non-matching items
Trait Definitions:
- Enhance TraitDefinition and PatchContainerConfig with new attributes (MultiContainerCheckField, MultiContainerErrMsg)
- Update emission logic in TraitCUEGenerator for multi-container support
PatchContainer:
- Update error messages to use camelCase for consistency with KubeVela conventions
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Feat: enhance test descriptions for clarity and accuracy in array_builder, collections, and status tests
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Feat: enhance handling of optional fields in collections and improve test descriptions for clarity
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Feat: improve ConditionalOrFieldRef tests for clarity and accuracy in handling primary and fallback fields
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Feat: enhance test descriptions for clarity and accuracy in array_builder and expr tests
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
* Feat: improve formatting of test data in collections tests for better readability
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>
---------
Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com>