ondc-code-generator 0.6.22 → 0.7.0
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.
- package/.github/copilot-instructions.md +128 -0
- package/GOLANG_IMPLEMENTATION.md +156 -0
- package/README.md +4 -1
- package/alpha/possible-json-paths.json +3734 -0
- package/dist/generator/config-compiler.js +6 -0
- package/dist/generator/generators/golang/go-ast.d.ts +1 -0
- package/dist/generator/generators/golang/go-ast.js +60 -0
- package/dist/generator/generators/golang/go-generator.d.ts +23 -0
- package/dist/generator/generators/golang/go-generator.js +511 -0
- package/dist/generator/generators/golang/templates/api-test.mustache +48 -0
- package/dist/generator/generators/golang/templates/json-normalizer.mustache +46 -0
- package/dist/generator/generators/golang/templates/json-path-utils.mustache +21 -0
- package/dist/generator/generators/golang/templates/storage-templates/api-save.mustache +30 -0
- package/dist/generator/generators/golang/templates/storage-templates/index.mustache +41 -0
- package/dist/generator/generators/golang/templates/storage-templates/save-utils.mustache +37 -0
- package/dist/generator/generators/golang/templates/storage-templates/storage-helpers.mustache +51 -0
- package/dist/generator/generators/golang/templates/storage-templates/storage-interface.mustache +96 -0
- package/dist/generator/generators/golang/templates/storage-templates/storage-types.mustache +15 -0
- package/dist/generator/generators/golang/templates/test-config.mustache +39 -0
- package/dist/generator/generators/golang/templates/test-object.mustache +39 -0
- package/dist/generator/generators/golang/templates/validation-code.mustache +51 -0
- package/dist/generator/generators/golang/templates/validation-utils.mustache +246 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.test.js +7 -1
- package/dist/types/compiler-types.d.ts +2 -1
- package/dist/types/compiler-types.js +1 -0
- package/dist/utils/fs-utils.js +40 -0
- package/package.json +1 -1
- package/sample.md +273 -0
- package/test-python-session.js +0 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# ONDC Code Generator - AI Coding Agent Instructions
|
|
2
|
+
|
|
3
|
+
## Project Overview
|
|
4
|
+
|
|
5
|
+
**JVAL** (JSON Validation Language) is a domain-specific language and code generator that creates validation functions in multiple target languages (TypeScript, Python, JavaScript, Golang) from YAML/JSON configurations. It's specifically designed for ONDC (Open Network for Digital Commerce) API validation.
|
|
6
|
+
|
|
7
|
+
## Key Architecture Components
|
|
8
|
+
|
|
9
|
+
### Core Data Flow
|
|
10
|
+
|
|
11
|
+
1. **Build YAML → Schema Extraction** (`src/services/schema-service.ts`)
|
|
12
|
+
2. **Configuration Validation** (`src/generator/validators/config-validator.ts`)
|
|
13
|
+
3. **Code Generation** (`src/generator/generators/`) per target language
|
|
14
|
+
4. **Output Structure**: `generated/{codeName}/` with consistent folder structure
|
|
15
|
+
|
|
16
|
+
### Critical File Structure Patterns
|
|
17
|
+
|
|
18
|
+
- **Generators**: `src/generator/generators/{language}/{language}-generator.ts` - Each extends `AbstractGenerator`
|
|
19
|
+
- **Templates**: Use Mustache templates in `generators/{language}/templates/`
|
|
20
|
+
- **AST Processing**: `src/services/return-complier/` - Custom parser for JVAL syntax
|
|
21
|
+
- **Generated Output**: Always follows pattern: `api-tests/`, `utils/`, `types/`, `interfaces/`
|
|
22
|
+
|
|
23
|
+
## JVAL Syntax System (Essential Knowledge)
|
|
24
|
+
|
|
25
|
+
### Test Object Structure
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"_NAME_": "function_name",
|
|
30
|
+
"_SCOPE_": "$.json.path",
|
|
31
|
+
"variableName": "$.json.path.to.data",
|
|
32
|
+
"_RETURN_": "JVAL_EXPRESSION"
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Custom Functions (src/services/return-complier/tokens.ts)
|
|
37
|
+
|
|
38
|
+
**Unary**: `var1 are present`, `var1 are unique`
|
|
39
|
+
**Binary**: `var1 all in var2`, `var1 follow regex var2`, `var1 greater than var2`
|
|
40
|
+
**Operators**: `&&`, `||`, `!`, parentheses for precedence
|
|
41
|
+
|
|
42
|
+
### Code Generation Pattern
|
|
43
|
+
|
|
44
|
+
- Each test object → individual validation function
|
|
45
|
+
- Variables resolved via JSONPath extraction (`utils/json-path-utils`)
|
|
46
|
+
- JVAL expressions compiled to target language via AST (`{language}-ast.ts`)
|
|
47
|
+
|
|
48
|
+
## Development Workflow
|
|
49
|
+
|
|
50
|
+
### Essential Commands
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm run dev # Watch mode with custom ESM loader
|
|
54
|
+
npm run build # TypeScript compilation + template copying
|
|
55
|
+
npm test # Runs build + test execution
|
|
56
|
+
npm run clean # Remove dist/ folder
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Key Dependencies
|
|
60
|
+
|
|
61
|
+
- **Chevrotain**: Custom DSL parser (JVAL syntax)
|
|
62
|
+
- **JSONPath**: Data extraction from JSON payloads
|
|
63
|
+
- **Mustache**: Template rendering for code generation
|
|
64
|
+
- **Prettier**: Code formatting for generated output
|
|
65
|
+
|
|
66
|
+
## Critical Patterns to Follow
|
|
67
|
+
|
|
68
|
+
### Adding New Language Support
|
|
69
|
+
|
|
70
|
+
1. Create `src/generator/generators/{language}/{lang}-generator.ts` extending `AbstractGenerator`
|
|
71
|
+
2. Implement `{lang}-ast.ts` for JVAL→target language compilation
|
|
72
|
+
3. Add templates in `generators/{language}/templates/`
|
|
73
|
+
4. Update `SupportedLanguages` enum in `src/types/compiler-types.ts`
|
|
74
|
+
|
|
75
|
+
### Working with Generators
|
|
76
|
+
|
|
77
|
+
- Always use `writeAndFormatCode()` from `src/utils/fs-utils.ts`
|
|
78
|
+
- Template data must include: `{codeName, errorCodes, testFunctions}`
|
|
79
|
+
- Each generator creates: validation functions, utils, types, session management
|
|
80
|
+
|
|
81
|
+
### AST Compilation (Critical)
|
|
82
|
+
|
|
83
|
+
Located in `src/services/return-complier/`:
|
|
84
|
+
|
|
85
|
+
- `tokens.ts`: Lexer tokens for JVAL functions
|
|
86
|
+
- `parser.ts`: Chevrotain-based parser rules
|
|
87
|
+
- `ast.ts`: AST node type definitions
|
|
88
|
+
- `{language}-ast.ts`: Language-specific compilation
|
|
89
|
+
|
|
90
|
+
### Configuration Structure
|
|
91
|
+
|
|
92
|
+
- `ValidationConfig`: Contains `_TESTS_` (test sets) and `_SESSION_DATA_`
|
|
93
|
+
- Test validation in `src/generator/validators/tests-config/`
|
|
94
|
+
- JSON Schema validation for build files in `src/services/schema-service.ts`
|
|
95
|
+
|
|
96
|
+
## Integration Points
|
|
97
|
+
|
|
98
|
+
### External Dependencies
|
|
99
|
+
|
|
100
|
+
- Requires **build.yaml** with `x-validations` and `x-errorcodes` sections
|
|
101
|
+
- JSON Schema definitions for payload validation
|
|
102
|
+
- Session data management for cross-request validation state
|
|
103
|
+
|
|
104
|
+
### Usage Pattern
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
import { ConfigCompiler } from "ondc-code-generator";
|
|
108
|
+
const compiler = new ConfigCompiler(SupportedLanguages.Typescript);
|
|
109
|
+
await compiler.initialize(buildYamlString);
|
|
110
|
+
await compiler.generateCode(validationConfig, "L1-validations");
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Debugging & Error Handling
|
|
114
|
+
|
|
115
|
+
### Common Issues
|
|
116
|
+
|
|
117
|
+
- **JSONPath validation**: Check `src/utils/json-path-utils/` for path extraction
|
|
118
|
+
- **JVAL parsing errors**: Debug via `src/services/return-complier/parser.ts`
|
|
119
|
+
- **Template rendering**: Verify data structure matches Mustache template expectations
|
|
120
|
+
- **Schema conflicts**: Use `SchemaExtractionService` for debugging schema resolution
|
|
121
|
+
|
|
122
|
+
### Generated Code Structure
|
|
123
|
+
|
|
124
|
+
All generated code follows consistent patterns:
|
|
125
|
+
|
|
126
|
+
- Entry point: `api-tests/{action}.ts` functions
|
|
127
|
+
- Utilities: `utils/validation-utils.ts`, `utils/json-path-utils.ts`
|
|
128
|
+
- Types: `types/test-config.ts` with `validationInput`/`validationOutput`
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Golang Support Implementation Summary
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Successfully enabled Golang as a supported target language for the ONDC Code Generator (JVAL). The implementation follows the same architecture patterns as TypeScript and Python generators.
|
|
6
|
+
|
|
7
|
+
## Files Created/Modified
|
|
8
|
+
|
|
9
|
+
### New Files Created
|
|
10
|
+
|
|
11
|
+
#### Core Generator Files
|
|
12
|
+
|
|
13
|
+
1. **`src/generator/generators/golang/go-ast.ts`**
|
|
14
|
+
|
|
15
|
+
- AST to Golang code compiler
|
|
16
|
+
- Handles JVAL syntax translation to Go
|
|
17
|
+
- Implements unary and binary function mapping
|
|
18
|
+
|
|
19
|
+
2. **`src/generator/generators/golang/go-generator.ts`**
|
|
20
|
+
- Main Golang generator class extending `AbstractGenerator`
|
|
21
|
+
- Handles code generation orchestration
|
|
22
|
+
- Creates Go modules, validation functions, and utilities
|
|
23
|
+
|
|
24
|
+
#### Template Files (Mustache)
|
|
25
|
+
|
|
26
|
+
1. **`templates/validation-utils.mustache`** - Go validation utility functions
|
|
27
|
+
2. **`templates/json-path-utils.mustache`** - JSONPath extraction for Go
|
|
28
|
+
3. **`templates/json-normalizer.mustache`** - JSON key normalization
|
|
29
|
+
4. **`templates/test-config.mustache`** - Type definitions
|
|
30
|
+
5. **`templates/api-test.mustache`** - API test wrapper template
|
|
31
|
+
6. **`templates/test-object.mustache`** - Individual test function template
|
|
32
|
+
7. **`templates/validation-code.mustache`** - Validation logic template
|
|
33
|
+
|
|
34
|
+
### Modified Files
|
|
35
|
+
|
|
36
|
+
1. **`src/types/compiler-types.ts`**
|
|
37
|
+
|
|
38
|
+
- Added `Golang = "golang"` to `SupportedLanguages` enum
|
|
39
|
+
|
|
40
|
+
2. **`src/generator/config-compiler.ts`**
|
|
41
|
+
|
|
42
|
+
- Imported `GolangGenerator`
|
|
43
|
+
- Added Golang case to the language switch statement
|
|
44
|
+
|
|
45
|
+
3. **`src/index.ts`**
|
|
46
|
+
|
|
47
|
+
- Exported `SupportedLanguages` for external use
|
|
48
|
+
|
|
49
|
+
4. **`src/utils/fs-utils.ts`**
|
|
50
|
+
|
|
51
|
+
- Added `formatGoCode()` function for basic Go formatting
|
|
52
|
+
- Added Go case handling in `formatCode()`
|
|
53
|
+
|
|
54
|
+
5. **`.github/copilot-instructions.md`**
|
|
55
|
+
|
|
56
|
+
- Updated to mention Golang support
|
|
57
|
+
|
|
58
|
+
6. **`README.md`**
|
|
59
|
+
- Updated supported languages list to include Golang
|
|
60
|
+
|
|
61
|
+
## Implementation Details
|
|
62
|
+
|
|
63
|
+
### Go-Specific Features
|
|
64
|
+
|
|
65
|
+
#### Validation Functions
|
|
66
|
+
|
|
67
|
+
All JVAL validation functions implemented in Go:
|
|
68
|
+
|
|
69
|
+
- **Unary**: `AreUnique`, `ArePresent`
|
|
70
|
+
- **Binary**: `AllIn`, `AnyIn`, `NoneIn`, `EqualTo`, `GreaterThan`, `LessThan`, `FollowRegex`
|
|
71
|
+
|
|
72
|
+
#### Type System
|
|
73
|
+
|
|
74
|
+
- Proper Go struct definitions for:
|
|
75
|
+
- `ValidationConfig`
|
|
76
|
+
- `ValidationInput`
|
|
77
|
+
- `ValidationOutput`
|
|
78
|
+
- `ExternalData`
|
|
79
|
+
|
|
80
|
+
#### Dependencies
|
|
81
|
+
|
|
82
|
+
- Uses `github.com/PaesslerAG/jsonpath` for JSONPath support
|
|
83
|
+
- Generates `go.mod` file automatically
|
|
84
|
+
- Go 1.21+ compatible
|
|
85
|
+
|
|
86
|
+
### Code Generation Output Structure
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
generated/{codeName}/
|
|
90
|
+
├── api_tests/
|
|
91
|
+
│ └── {action}.go
|
|
92
|
+
├── utils/
|
|
93
|
+
│ ├── validation_utils.go
|
|
94
|
+
│ ├── json_path_utils.go
|
|
95
|
+
│ └── json_normalizer.go
|
|
96
|
+
├── types/
|
|
97
|
+
│ └── test_config.go
|
|
98
|
+
├── storage/
|
|
99
|
+
│ └── storage_interface.go
|
|
100
|
+
├── error.go
|
|
101
|
+
├── main.go
|
|
102
|
+
├── go.mod
|
|
103
|
+
└── readme.md
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Usage Example
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
import { ConfigCompiler, SupportedLanguages } from "ondc-code-generator";
|
|
110
|
+
|
|
111
|
+
const compiler = new ConfigCompiler(SupportedLanguages.Golang);
|
|
112
|
+
await compiler.initialize(buildYamlString);
|
|
113
|
+
await compiler.generateCode(validationConfig, "MyValidations");
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Testing
|
|
117
|
+
|
|
118
|
+
Created `test-golang.js` to verify:
|
|
119
|
+
|
|
120
|
+
- ✅ Golang code generation works end-to-end
|
|
121
|
+
- ✅ All template files are processed correctly
|
|
122
|
+
- ✅ Generated Go code has proper syntax
|
|
123
|
+
- ✅ go.mod file is created with dependencies
|
|
124
|
+
- ✅ Validation functions are properly generated
|
|
125
|
+
|
|
126
|
+
## Key Design Decisions
|
|
127
|
+
|
|
128
|
+
1. **No External Formatter**: Unlike TypeScript, Go doesn't use Prettier. Instead, basic formatting is applied via custom `formatGoCode()` function. Users can run `gofmt` or `goimports` on generated code if needed.
|
|
129
|
+
|
|
130
|
+
2. **Package Structure**: All generated code is in a single `validations` package for simplicity.
|
|
131
|
+
|
|
132
|
+
3. **JSONPath Library**: Chose `github.com/PaesslerAG/jsonpath` as it provides good compatibility with the RFC 9535 standard.
|
|
133
|
+
|
|
134
|
+
4. **Error Handling**: Go's error handling patterns are used (returning `error` from main function).
|
|
135
|
+
|
|
136
|
+
5. **Type Safety**: Full use of Go's type system with proper structs and interfaces.
|
|
137
|
+
|
|
138
|
+
## Future Enhancements
|
|
139
|
+
|
|
140
|
+
Potential areas for improvement:
|
|
141
|
+
|
|
142
|
+
- [ ] Full storage/session management templates for Go
|
|
143
|
+
- [ ] Integration with `gofmt` for automatic formatting
|
|
144
|
+
- [ ] Support for Go modules in different directory structures
|
|
145
|
+
- [ ] Additional Go-specific optimizations
|
|
146
|
+
- [ ] Unit test generation for Go validations
|
|
147
|
+
|
|
148
|
+
## Compatibility
|
|
149
|
+
|
|
150
|
+
- **Go Version**: 1.21+
|
|
151
|
+
- **Dependencies**: Minimal (only JSONPath library)
|
|
152
|
+
- **Platform**: Cross-platform (Linux, macOS, Windows)
|
|
153
|
+
|
|
154
|
+
## Conclusion
|
|
155
|
+
|
|
156
|
+
Golang is now fully supported as a code generation target, maintaining feature parity with TypeScript and Python implementations. The generator follows Go idioms and best practices while preserving the JVAL DSL semantics.
|
package/README.md
CHANGED