ondc-code-generator 0.7.0 → 0.7.3
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/README.md +6 -0
- package/dist/bin/cli-tool.d.ts +70 -0
- package/dist/bin/cli-tool.js +310 -0
- package/dist/bin/cli.d.ts +2 -0
- package/dist/bin/cli.js +80 -0
- package/dist/generator/config-compiler.d.ts +1 -0
- package/dist/generator/config-compiler.js +10 -2
- package/dist/generator/generators/{golang → go}/go-ast.js +2 -2
- package/dist/generator/generators/go/go-generator.d.ts +13 -0
- package/dist/generator/generators/go/go-generator.js +322 -0
- package/dist/generator/generators/go/templates/api-tests.mustache +65 -0
- package/dist/generator/generators/go/templates/go-mod.mustache +3 -0
- package/dist/generator/generators/go/templates/index.mustache +34 -0
- package/dist/generator/generators/go/templates/json-normalizer.mustache +155 -0
- package/dist/generator/generators/go/templates/json-path-utils.mustache +63 -0
- package/dist/generator/generators/go/templates/storage-templates/api-save-utils.mustache +84 -0
- package/dist/generator/generators/go/templates/storage-templates/api-save.mustache +44 -0
- package/dist/generator/generators/go/templates/storage-templates/index.mustache +72 -0
- package/dist/generator/generators/go/templates/storage-templates/save-utils.mustache +75 -0
- package/dist/generator/generators/{golang → go}/templates/storage-templates/storage-interface.mustache +33 -22
- package/dist/generator/generators/go/templates/test-config.mustache +62 -0
- package/dist/generator/generators/go/templates/test-object.mustache +52 -0
- package/dist/generator/generators/go/templates/validation-code.mustache +66 -0
- package/dist/generator/generators/go/templates/validation-utils.mustache +321 -0
- package/dist/generator/generators/typescript/templates/index.mustache +1 -1
- package/dist/generator/generators/typescript/ts-generator.js +2 -2
- package/dist/index.d.ts +5 -0
- package/dist/index.js +4 -0
- package/dist/index.test.js +1 -0
- package/dist/types/build.d.ts +2 -0
- package/dist/types/compiler-types.d.ts +1 -1
- package/dist/types/compiler-types.js +1 -1
- package/dist/utils/fs-utils.d.ts +1 -0
- package/dist/utils/fs-utils.js +18 -34
- package/dist/utils/general-utils/string-utils.d.ts +1 -0
- package/dist/utils/general-utils/string-utils.js +11 -0
- package/package.json +5 -1
- package/alpha/possible-json-paths.json +0 -3734
- package/dist/generator/generators/golang/go-generator.d.ts +0 -23
- package/dist/generator/generators/golang/go-generator.js +0 -511
- package/dist/generator/generators/golang/templates/api-test.mustache +0 -48
- package/dist/generator/generators/golang/templates/json-normalizer.mustache +0 -46
- package/dist/generator/generators/golang/templates/json-path-utils.mustache +0 -21
- package/dist/generator/generators/golang/templates/storage-templates/api-save.mustache +0 -30
- package/dist/generator/generators/golang/templates/storage-templates/index.mustache +0 -41
- package/dist/generator/generators/golang/templates/storage-templates/save-utils.mustache +0 -37
- package/dist/generator/generators/golang/templates/storage-templates/storage-helpers.mustache +0 -51
- package/dist/generator/generators/golang/templates/storage-templates/storage-types.mustache +0 -15
- package/dist/generator/generators/golang/templates/test-config.mustache +0 -39
- package/dist/generator/generators/golang/templates/test-object.mustache +0 -39
- package/dist/generator/generators/golang/templates/validation-code.mustache +0 -51
- package/dist/generator/generators/golang/templates/validation-utils.mustache +0 -246
- /package/dist/generator/generators/{golang → go}/go-ast.d.ts +0 -0
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
// Code generated by github.com/ONDC-Official/automation-validation-compiler, DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
package validationutils
|
|
4
|
+
|
|
5
|
+
import (
|
|
6
|
+
"fmt"
|
|
7
|
+
"strconv"
|
|
8
|
+
"time"
|
|
9
|
+
|
|
10
|
+
"github.com/dlclark/regexp2"
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
// toStringSlice converts []interface{} to []string, returns false if any element is not a string
|
|
14
|
+
func toStringSlice(operand []interface{}) ([]string, bool) {
|
|
15
|
+
result := make([]string, len(operand))
|
|
16
|
+
for i, v := range operand {
|
|
17
|
+
str, ok := v.(string)
|
|
18
|
+
if !ok {
|
|
19
|
+
// Try to convert to string
|
|
20
|
+
if v == nil {
|
|
21
|
+
result[i] = "null"
|
|
22
|
+
} else {
|
|
23
|
+
result[i] = fmt.Sprintf("%v", v)
|
|
24
|
+
}
|
|
25
|
+
} else {
|
|
26
|
+
result[i] = str
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return result, true
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
func AreUnique(operand []interface{}) bool {
|
|
33
|
+
strs, ok := toStringSlice(operand)
|
|
34
|
+
if !ok {
|
|
35
|
+
return false
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
valuesSet := make(map[string]struct{})
|
|
39
|
+
for _, v := range strs {
|
|
40
|
+
valuesSet[v] = struct{}{}
|
|
41
|
+
}
|
|
42
|
+
return len(valuesSet) == len(strs)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
func ArePresent(operand []interface{}) bool {
|
|
46
|
+
strs, ok := toStringSlice(operand)
|
|
47
|
+
if !ok {
|
|
48
|
+
return false
|
|
49
|
+
}
|
|
50
|
+
return NoneIn(operand, []interface{}{"null", "undefined"}) && len(strs) > 0
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
func AllIn(left []interface{}, right []interface{}) bool {
|
|
54
|
+
leftStrs, ok1 := toStringSlice(left)
|
|
55
|
+
rightStrs, ok2 := toStringSlice(right)
|
|
56
|
+
if !ok1 || !ok2 {
|
|
57
|
+
return false
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if len(leftStrs) == 0 && len(rightStrs) != 0 {
|
|
61
|
+
return false
|
|
62
|
+
}
|
|
63
|
+
for _, v := range leftStrs {
|
|
64
|
+
if !contains(rightStrs, v) {
|
|
65
|
+
return false
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return true
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
func AnyIn(left []interface{}, right []interface{}) bool {
|
|
72
|
+
leftStrs, ok1 := toStringSlice(left)
|
|
73
|
+
rightStrs, ok2 := toStringSlice(right)
|
|
74
|
+
if !ok1 || !ok2 {
|
|
75
|
+
return false
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if len(leftStrs) == 0 && len(rightStrs) != 0 {
|
|
79
|
+
return false
|
|
80
|
+
}
|
|
81
|
+
for _, v := range leftStrs {
|
|
82
|
+
if contains(rightStrs, v) {
|
|
83
|
+
return true
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return false
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
func NoneIn(left []interface{}, right []interface{}) bool {
|
|
90
|
+
leftStrs, ok1 := toStringSlice(left)
|
|
91
|
+
rightStrs, ok2 := toStringSlice(right)
|
|
92
|
+
if !ok1 || !ok2 {
|
|
93
|
+
return false
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
for _, v := range leftStrs {
|
|
97
|
+
if contains(rightStrs, v) {
|
|
98
|
+
return false
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return true
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
func EqualTo(left []interface{}, right []interface{}) bool {
|
|
105
|
+
leftStrs, ok1 := toStringSlice(left)
|
|
106
|
+
rightStrs, ok2 := toStringSlice(right)
|
|
107
|
+
if !ok1 || !ok2 {
|
|
108
|
+
return false
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if len(leftStrs) != len(rightStrs) {
|
|
112
|
+
return false
|
|
113
|
+
}
|
|
114
|
+
for i, v := range leftStrs {
|
|
115
|
+
if v != rightStrs[i] {
|
|
116
|
+
return false
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return true
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
func GreaterThan(left []interface{}, right []interface{}) bool {
|
|
123
|
+
leftStrs, ok1 := toStringSlice(left)
|
|
124
|
+
rightStrs, ok2 := toStringSlice(right)
|
|
125
|
+
if !ok1 || !ok2 {
|
|
126
|
+
return false
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
areAllISO := func(arr []string) bool {
|
|
130
|
+
for _, v := range arr {
|
|
131
|
+
if !isISO8601(v) {
|
|
132
|
+
return false
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return true
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
areAllNumbers := func(arr []string) bool {
|
|
139
|
+
for _, v := range arr {
|
|
140
|
+
if _, err := strconv.ParseFloat(v, 64); err != nil {
|
|
141
|
+
return false
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return true
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if areAllISO(leftStrs) && areAllISO(rightStrs) {
|
|
148
|
+
leftDates := make([]int64, len(leftStrs))
|
|
149
|
+
for i, date := range leftStrs {
|
|
150
|
+
t, _ := time.Parse(time.RFC3339, date)
|
|
151
|
+
leftDates[i] = t.UnixMilli()
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
rightDates := make([]int64, len(rightStrs))
|
|
155
|
+
for i, date := range rightStrs {
|
|
156
|
+
t, _ := time.Parse(time.RFC3339, date)
|
|
157
|
+
rightDates[i] = t.UnixMilli()
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
for i, ld := range leftDates {
|
|
161
|
+
if i >= len(rightDates) || ld <= rightDates[i] {
|
|
162
|
+
if i < len(rightDates) {
|
|
163
|
+
return false
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return true
|
|
168
|
+
} else if areAllNumbers(leftStrs) && areAllNumbers(rightStrs) {
|
|
169
|
+
leftNumbers := make([]float64, len(leftStrs))
|
|
170
|
+
for i, v := range leftStrs {
|
|
171
|
+
leftNumbers[i], _ = strconv.ParseFloat(v, 64)
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
rightNumbers := make([]float64, len(rightStrs))
|
|
175
|
+
for i, v := range rightStrs {
|
|
176
|
+
rightNumbers[i], _ = strconv.ParseFloat(v, 64)
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
for i, ln := range leftNumbers {
|
|
180
|
+
if i >= len(rightNumbers) || ln <= rightNumbers[i] {
|
|
181
|
+
if i < len(rightNumbers) {
|
|
182
|
+
return false
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return true
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
return false
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
func LessThan(left []interface{}, right []interface{}) bool {
|
|
193
|
+
leftStrs, ok1 := toStringSlice(left)
|
|
194
|
+
rightStrs, ok2 := toStringSlice(right)
|
|
195
|
+
if !ok1 || !ok2 {
|
|
196
|
+
return false
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
areAllISO := func(arr []string) bool {
|
|
200
|
+
for _, v := range arr {
|
|
201
|
+
if !isISO8601(v) {
|
|
202
|
+
return false
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return true
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
areAllNumbers := func(arr []string) bool {
|
|
209
|
+
for _, v := range arr {
|
|
210
|
+
if _, err := strconv.ParseFloat(v, 64); err != nil {
|
|
211
|
+
return false
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return true
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
if areAllISO(leftStrs) && areAllISO(rightStrs) {
|
|
218
|
+
leftDates := make([]int64, len(leftStrs))
|
|
219
|
+
for i, date := range leftStrs {
|
|
220
|
+
t, _ := time.Parse(time.RFC3339, date)
|
|
221
|
+
leftDates[i] = t.UnixMilli()
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
rightDates := make([]int64, len(rightStrs))
|
|
225
|
+
for i, date := range rightStrs {
|
|
226
|
+
t, _ := time.Parse(time.RFC3339, date)
|
|
227
|
+
rightDates[i] = t.UnixMilli()
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
for i, ld := range leftDates {
|
|
231
|
+
if i >= len(rightDates) || ld >= rightDates[i] {
|
|
232
|
+
if i < len(rightDates) {
|
|
233
|
+
return false
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return true
|
|
238
|
+
} else if areAllNumbers(leftStrs) && areAllNumbers(rightStrs) {
|
|
239
|
+
leftNumbers := make([]float64, len(leftStrs))
|
|
240
|
+
for i, v := range leftStrs {
|
|
241
|
+
leftNumbers[i], _ = strconv.ParseFloat(v, 64)
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
rightNumbers := make([]float64, len(rightStrs))
|
|
245
|
+
for i, v := range rightStrs {
|
|
246
|
+
rightNumbers[i], _ = strconv.ParseFloat(v, 64)
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
for i, ln := range leftNumbers {
|
|
250
|
+
if i >= len(rightNumbers) || ln >= rightNumbers[i] {
|
|
251
|
+
if i < len(rightNumbers) {
|
|
252
|
+
return false
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return true
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
return false
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
func FollowRegex(left []interface{}, regexArray []interface{}) bool {
|
|
263
|
+
leftStrs, ok1 := toStringSlice(left)
|
|
264
|
+
regexStrs, ok2 := toStringSlice(regexArray)
|
|
265
|
+
if !ok1 || !ok2 {
|
|
266
|
+
return false
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
if len(leftStrs) == 0 && len(regexStrs) != 0 {
|
|
270
|
+
return false
|
|
271
|
+
}
|
|
272
|
+
for _, regexStr := range regexStrs {
|
|
273
|
+
re, err := regexp2.Compile(regexStr, 0)
|
|
274
|
+
if err != nil {
|
|
275
|
+
return false
|
|
276
|
+
}
|
|
277
|
+
for _, v := range leftStrs {
|
|
278
|
+
match, err := re.MatchString(v)
|
|
279
|
+
if err != nil || !match {
|
|
280
|
+
return false
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return true
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
func isISO8601(str string) bool {
|
|
288
|
+
iso8601Regex, err := regexp2.Compile(`^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$`, 0)
|
|
289
|
+
if err != nil {
|
|
290
|
+
return false
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
match, err := iso8601Regex.MatchString(str)
|
|
294
|
+
if err != nil || !match {
|
|
295
|
+
return false
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
_, err = time.Parse(time.RFC3339, str)
|
|
299
|
+
return err == nil
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
func contains(slice []string, item string) bool {
|
|
303
|
+
for _, v := range slice {
|
|
304
|
+
if v == item {
|
|
305
|
+
return true
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return false
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// StringSliceToInterface converts []string to []interface{}
|
|
312
|
+
func StringSliceToInterface(strs []string) []interface{} {
|
|
313
|
+
result := make([]interface{}, len(strs))
|
|
314
|
+
for i, v := range strs {
|
|
315
|
+
result[i] = v
|
|
316
|
+
}
|
|
317
|
+
return result
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// UnusedFunction to avoid unused variable errors
|
|
321
|
+
func UnusedFunction(item interface{}) {}
|
|
@@ -89,7 +89,7 @@ export class TypescriptGenerator extends CodeGenerator {
|
|
|
89
89
|
this.generateCode = async (codeConfig) => {
|
|
90
90
|
this.codeConfig = codeConfig;
|
|
91
91
|
const jsonPathUtilsCode = readFileSync(path.resolve(__dirname, "./templates/json-path-utils.mustache"), "utf-8");
|
|
92
|
-
const
|
|
92
|
+
const validationUtils = readFileSync(path.resolve(__dirname, "./templates/validation-utils.mustache"), "utf-8");
|
|
93
93
|
const typesTemplate = readFileSync(path.resolve(__dirname, "./templates/test-config.mustache"), "utf-8");
|
|
94
94
|
const normalizerTemplate = readFileSync(path.resolve(__dirname, "./templates/json-normalizer.mustache"), "utf-8");
|
|
95
95
|
const typesCode = Mustache.render(typesTemplate, {
|
|
@@ -97,7 +97,7 @@ export class TypescriptGenerator extends CodeGenerator {
|
|
|
97
97
|
});
|
|
98
98
|
writeAndFormatCode(this.rootPath, "./utils/json-path-utils.ts", jsonPathUtilsCode, "typescript");
|
|
99
99
|
writeAndFormatCode(this.rootPath, "./utils/json-normalizer.ts", normalizerTemplate, "typescript");
|
|
100
|
-
writeAndFormatCode(this.rootPath, "./utils/validation-utils.ts",
|
|
100
|
+
writeAndFormatCode(this.rootPath, "./utils/validation-utils.ts", validationUtils, "typescript");
|
|
101
101
|
writeAndFormatCode(this.rootPath, "./types/test-config.ts", typesCode, "typescript");
|
|
102
102
|
await this.generateValidationCode();
|
|
103
103
|
await writeAndFormatCode(this.rootPath, "error.ts", this.generateErrorFile(this.errorCodes), "typescript");
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
import { ConfigCompiler } from "./generator/config-compiler.js";
|
|
2
2
|
import { SupportedLanguages } from "./types/compiler-types.js";
|
|
3
3
|
export { ConfigCompiler, SupportedLanguages };
|
|
4
|
+
declare const _default: {
|
|
5
|
+
ConfigCompiler: typeof ConfigCompiler;
|
|
6
|
+
SupportedLanguages: typeof SupportedLanguages;
|
|
7
|
+
};
|
|
8
|
+
export default _default;
|
package/dist/index.js
CHANGED
package/dist/index.test.js
CHANGED
|
@@ -19,6 +19,7 @@ const main = async () => {
|
|
|
19
19
|
await compilerTy.initialize(buildYaml);
|
|
20
20
|
await compilerTy.generateCode(valConfig, "L1_validations", false, "./alpha/typescript/");
|
|
21
21
|
await compilerTy.generateL0Schema("./alpha/typescript/L0_schema/");
|
|
22
|
+
await compilerTy.generateL0Schema("./alpha/json/", "json");
|
|
22
23
|
const compilerGo = new ConfigCompiler(SupportedLanguages.Golang);
|
|
23
24
|
await compilerGo.initialize(buildYaml);
|
|
24
25
|
await compilerGo.generateCode(valConfig, "L1_validations", false, "./alpha/golang/");
|
package/dist/types/build.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ValidationConfig } from "./config-types";
|
|
1
2
|
import { ErrorDefinition } from "./error-codes";
|
|
2
3
|
export interface Xattributes {
|
|
3
4
|
[key: string]: AttributeSet;
|
|
@@ -45,4 +46,5 @@ export interface BUILD_TYPE {
|
|
|
45
46
|
"x-errorcodes": {
|
|
46
47
|
code: ErrorDefinition[];
|
|
47
48
|
};
|
|
49
|
+
"x-validations"?: ValidationConfig;
|
|
48
50
|
}
|
|
@@ -3,5 +3,5 @@ export var SupportedLanguages;
|
|
|
3
3
|
SupportedLanguages["Typescript"] = "typescript";
|
|
4
4
|
SupportedLanguages["Python"] = "python";
|
|
5
5
|
SupportedLanguages["Javascript"] = "javascript";
|
|
6
|
-
SupportedLanguages["Golang"] = "
|
|
6
|
+
SupportedLanguages["Golang"] = "go";
|
|
7
7
|
})(SupportedLanguages || (SupportedLanguages = {}));
|
package/dist/utils/fs-utils.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export declare function writeFileWithFsExtra(rootPath: string, relativeFilePath: string, content: string): void;
|
|
2
2
|
export declare function formatCode(code: string, lang: string): Promise<string>;
|
|
3
|
+
export declare function formatGo(code: string): string;
|
|
3
4
|
export declare function writeAndFormatCode(rootPath: string, relativeFilePath: string, content: string, lang: string): Promise<void>;
|
package/dist/utils/fs-utils.js
CHANGED
|
@@ -2,6 +2,7 @@ import fs from "fs-extra";
|
|
|
2
2
|
import * as path from "path";
|
|
3
3
|
import prettier from "prettier";
|
|
4
4
|
import logger from "./logger.js";
|
|
5
|
+
import { spawnSync } from "node:child_process";
|
|
5
6
|
export function writeFileWithFsExtra(rootPath, relativeFilePath, content) {
|
|
6
7
|
// Resolve the full file path
|
|
7
8
|
const filePath = path.resolve(rootPath, relativeFilePath);
|
|
@@ -19,7 +20,7 @@ export async function formatCode(code, lang) {
|
|
|
19
20
|
}
|
|
20
21
|
if (lang === "go") {
|
|
21
22
|
// Basic Go formatting - clean up extra whitespace and blank lines
|
|
22
|
-
return
|
|
23
|
+
return formatGo(code);
|
|
23
24
|
}
|
|
24
25
|
return await prettier.format(code, {
|
|
25
26
|
parser: lang,
|
|
@@ -61,43 +62,26 @@ function formatPythonCode(code) {
|
|
|
61
62
|
}
|
|
62
63
|
return cleanedLines.join("\n") + "\n";
|
|
63
64
|
}
|
|
64
|
-
function
|
|
65
|
-
//
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
formattedLines.push("");
|
|
76
|
-
}
|
|
77
|
-
continue;
|
|
78
|
-
}
|
|
79
|
-
// Add the line as-is (preserve existing indentation)
|
|
80
|
-
formattedLines.push(line);
|
|
81
|
-
}
|
|
82
|
-
// Remove multiple consecutive empty lines
|
|
83
|
-
const cleanedLines = [];
|
|
84
|
-
let lastWasEmpty = false;
|
|
85
|
-
for (const line of formattedLines) {
|
|
86
|
-
const isEmpty = line.trim() === "";
|
|
87
|
-
if (isEmpty && lastWasEmpty) {
|
|
88
|
-
continue; // Skip consecutive empty lines
|
|
89
|
-
}
|
|
90
|
-
cleanedLines.push(line);
|
|
91
|
-
lastWasEmpty = isEmpty;
|
|
65
|
+
export function formatGo(code) {
|
|
66
|
+
// return code;
|
|
67
|
+
const result = spawnSync("gofmt", [], {
|
|
68
|
+
input: code,
|
|
69
|
+
encoding: "utf8",
|
|
70
|
+
// stdio: "inherit",
|
|
71
|
+
maxBuffer: 10 * 1024 * 1024, // 10MB (default is 200KB)
|
|
72
|
+
});
|
|
73
|
+
if (result.error) {
|
|
74
|
+
// throw result.error;
|
|
75
|
+
return code; // If gofmt is not available, return the original code
|
|
92
76
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
cleanedLines.pop();
|
|
77
|
+
if (result.status !== 0) {
|
|
78
|
+
// throw new Error(result.stderr);
|
|
79
|
+
return code; // If gofmt fails, return the original code
|
|
97
80
|
}
|
|
98
|
-
return
|
|
81
|
+
return result.stdout;
|
|
99
82
|
}
|
|
100
83
|
export async function writeAndFormatCode(rootPath, relativeFilePath, content, lang) {
|
|
84
|
+
// console.log(`Formatting and writing file: ${relativeFilePath}`);
|
|
101
85
|
const formattedCode = await formatCode(content, lang);
|
|
102
86
|
writeFileWithFsExtra(rootPath, relativeFilePath, formattedCode);
|
|
103
87
|
}
|
|
@@ -25,4 +25,5 @@ export declare function ConvertArrayToStringsInTestObject(testObject: TestObject
|
|
|
25
25
|
_DESCRIPTION_?: string;
|
|
26
26
|
};
|
|
27
27
|
export declare function ConvertArrayToString(arr: any[]): string;
|
|
28
|
+
export declare function ConvertArrayToStringGoStyle(arr: any[]): string;
|
|
28
29
|
export declare function addTabToMarkdown(markdown: string): string;
|
|
@@ -61,6 +61,17 @@ export function ConvertArrayToString(arr) {
|
|
|
61
61
|
values = values.replace(/\\\\\\/g, "\\");
|
|
62
62
|
return values;
|
|
63
63
|
}
|
|
64
|
+
export function ConvertArrayToStringGoStyle(arr) {
|
|
65
|
+
for (const a of arr) {
|
|
66
|
+
if (typeof a !== "string") {
|
|
67
|
+
console.log(arr);
|
|
68
|
+
throw new Error(`Array contains non-string element: ${a}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
let values = arr.map((v) => `\`${v}\``).join(", ");
|
|
72
|
+
values = values.replace(/\\\\/g, "\\");
|
|
73
|
+
return `validationutils.StringSliceToInterface([]string{${values}})`;
|
|
74
|
+
}
|
|
64
75
|
export function addTabToMarkdown(markdown) {
|
|
65
76
|
// Split the markdown into lines, add a tab to each line, and rejoin
|
|
66
77
|
return markdown
|
package/package.json
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ondc-code-generator",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.3",
|
|
4
4
|
"description": "generate code from build.yaml ",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
7
|
+
"bin": {
|
|
8
|
+
"ondc-code-generator": "dist/bin/cli.js"
|
|
9
|
+
},
|
|
7
10
|
"scripts": {
|
|
8
11
|
"build": "tsc && copyfiles -u 1 \"src/**/*.{yaml,html,css,mustache}\" dist/",
|
|
9
12
|
"start": "node ./dist/index.js",
|
|
@@ -31,6 +34,7 @@
|
|
|
31
34
|
"@apidevtools/json-schema-ref-parser": "^11.7.2",
|
|
32
35
|
"chalk": "^4.1.2",
|
|
33
36
|
"chevrotain": "^11.0.3",
|
|
37
|
+
"commander": "^14.0.2",
|
|
34
38
|
"fs-extra": "^11.2.0",
|
|
35
39
|
"js-yaml": "^4.1.0",
|
|
36
40
|
"json-schema": "^0.4.0",
|