@odata-effect/odata-effect-generator 0.3.1 → 0.4.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.
Files changed (57) hide show
  1. package/dist/cjs/Cli.js +19 -3
  2. package/dist/cjs/Cli.js.map +1 -1
  3. package/dist/cjs/digester/Digester.js +34 -30
  4. package/dist/cjs/digester/Digester.js.map +1 -1
  5. package/dist/cjs/generator/Generator.js.map +1 -1
  6. package/dist/cjs/generator/ModelsGenerator.js +26 -2
  7. package/dist/cjs/generator/ModelsGenerator.js.map +1 -1
  8. package/dist/cjs/generator/NamingHelper.js +90 -1
  9. package/dist/cjs/generator/NamingHelper.js.map +1 -1
  10. package/dist/cjs/generator/OperationsGenerator.js +44 -16
  11. package/dist/cjs/generator/OperationsGenerator.js.map +1 -1
  12. package/dist/cjs/index.js +7 -3
  13. package/dist/cjs/model/DataModel.js.map +1 -1
  14. package/dist/cjs/model/GeneratorConfig.js +70 -0
  15. package/dist/cjs/model/GeneratorConfig.js.map +1 -0
  16. package/dist/dts/Cli.d.ts.map +1 -1
  17. package/dist/dts/digester/Digester.d.ts +2 -1
  18. package/dist/dts/digester/Digester.d.ts.map +1 -1
  19. package/dist/dts/generator/Generator.d.ts +7 -4
  20. package/dist/dts/generator/Generator.d.ts.map +1 -1
  21. package/dist/dts/generator/NamingHelper.d.ts +49 -0
  22. package/dist/dts/generator/NamingHelper.d.ts.map +1 -1
  23. package/dist/dts/generator/OperationsGenerator.d.ts +1 -0
  24. package/dist/dts/generator/OperationsGenerator.d.ts.map +1 -1
  25. package/dist/dts/index.d.ts +41 -12
  26. package/dist/dts/index.d.ts.map +1 -1
  27. package/dist/dts/model/DataModel.d.ts +1 -0
  28. package/dist/dts/model/DataModel.d.ts.map +1 -1
  29. package/dist/dts/model/GeneratorConfig.d.ts +114 -0
  30. package/dist/dts/model/GeneratorConfig.d.ts.map +1 -0
  31. package/dist/esm/Cli.js +19 -3
  32. package/dist/esm/Cli.js.map +1 -1
  33. package/dist/esm/digester/Digester.js +35 -31
  34. package/dist/esm/digester/Digester.js.map +1 -1
  35. package/dist/esm/generator/Generator.js.map +1 -1
  36. package/dist/esm/generator/ModelsGenerator.js +26 -2
  37. package/dist/esm/generator/ModelsGenerator.js.map +1 -1
  38. package/dist/esm/generator/NamingHelper.js +84 -0
  39. package/dist/esm/generator/NamingHelper.js.map +1 -1
  40. package/dist/esm/generator/OperationsGenerator.js +45 -17
  41. package/dist/esm/generator/OperationsGenerator.js.map +1 -1
  42. package/dist/esm/index.js +41 -12
  43. package/dist/esm/index.js.map +1 -1
  44. package/dist/esm/model/DataModel.js.map +1 -1
  45. package/dist/esm/model/GeneratorConfig.js +60 -0
  46. package/dist/esm/model/GeneratorConfig.js.map +1 -0
  47. package/model/GeneratorConfig/package.json +6 -0
  48. package/package.json +9 -1
  49. package/src/Cli.ts +26 -3
  50. package/src/digester/Digester.ts +55 -29
  51. package/src/generator/Generator.ts +7 -4
  52. package/src/generator/ModelsGenerator.ts +31 -2
  53. package/src/generator/NamingHelper.ts +115 -0
  54. package/src/generator/OperationsGenerator.ts +51 -18
  55. package/src/index.ts +43 -12
  56. package/src/model/DataModel.ts +1 -0
  57. package/src/model/GeneratorConfig.ts +180 -0
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Configuration for code generation including name overrides.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+
7
+ /**
8
+ * Override configuration for property names.
9
+ * Maps OData property names to TypeScript property names.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const overrides: PropertyOverrides = {
14
+ * "ID": "id", // OData "ID" -> TypeScript "id" (instead of "iD")
15
+ * "SKU": "sku" // OData "SKU" -> TypeScript "sku"
16
+ * }
17
+ * ```
18
+ *
19
+ * @since 1.0.0
20
+ * @category config
21
+ */
22
+ export type PropertyOverrides = Record<string, string>
23
+
24
+ /**
25
+ * Override configuration for a single entity or complex type.
26
+ *
27
+ * @since 1.0.0
28
+ * @category config
29
+ */
30
+ export interface TypeOverrides {
31
+ /**
32
+ * Override the TypeScript class name for this type.
33
+ * If not specified, uses the default camelCase conversion.
34
+ */
35
+ readonly name?: string
36
+
37
+ /**
38
+ * Override individual property names.
39
+ * Maps OData property names to TypeScript property names.
40
+ */
41
+ readonly properties?: PropertyOverrides
42
+ }
43
+
44
+ /**
45
+ * Override configuration for an operation (Function/Action/FunctionImport).
46
+ *
47
+ * @since 1.0.0
48
+ * @category config
49
+ */
50
+ export interface OperationOverrides {
51
+ /**
52
+ * Override the TypeScript function name for this operation.
53
+ * If not specified, uses the default camelCase conversion.
54
+ */
55
+ readonly name?: string
56
+
57
+ /**
58
+ * Override individual parameter names.
59
+ * Maps OData parameter names to TypeScript parameter names.
60
+ */
61
+ readonly parameters?: PropertyOverrides
62
+ }
63
+
64
+ /**
65
+ * Override configuration for naming conversions.
66
+ *
67
+ * @since 1.0.0
68
+ * @category config
69
+ */
70
+ export interface NamingOverrides {
71
+ /**
72
+ * Override configurations for entity types.
73
+ * Keys are OData entity type names.
74
+ */
75
+ readonly entities?: Record<string, TypeOverrides>
76
+
77
+ /**
78
+ * Override configurations for complex types.
79
+ * Keys are OData complex type names.
80
+ */
81
+ readonly complexTypes?: Record<string, TypeOverrides>
82
+
83
+ /**
84
+ * Override configurations for operations (Functions/Actions/FunctionImports).
85
+ * Keys are OData operation names.
86
+ */
87
+ readonly operations?: Record<string, OperationOverrides>
88
+
89
+ /**
90
+ * Global property name overrides applied to all types.
91
+ * Type-specific overrides take precedence over global overrides.
92
+ */
93
+ readonly properties?: PropertyOverrides
94
+ }
95
+
96
+ /**
97
+ * Get the overridden property name or undefined if no override exists.
98
+ *
99
+ * @since 1.0.0
100
+ * @category naming
101
+ */
102
+ export const getPropertyOverride = (
103
+ overrides: NamingOverrides | undefined,
104
+ typeName: string,
105
+ typeKind: "entity" | "complex",
106
+ odataPropertyName: string
107
+ ): string | undefined => {
108
+ if (!overrides) return undefined
109
+
110
+ // Check type-specific overrides first
111
+ const typeOverrides = typeKind === "entity"
112
+ ? overrides.entities?.[typeName]
113
+ : overrides.complexTypes?.[typeName]
114
+
115
+ if (typeOverrides?.properties?.[odataPropertyName]) {
116
+ return typeOverrides.properties[odataPropertyName]
117
+ }
118
+
119
+ // Check global property overrides
120
+ if (overrides.properties?.[odataPropertyName]) {
121
+ return overrides.properties[odataPropertyName]
122
+ }
123
+
124
+ return undefined
125
+ }
126
+
127
+ /**
128
+ * Get the overridden type name or undefined if no override exists.
129
+ *
130
+ * @since 1.0.0
131
+ * @category naming
132
+ */
133
+ export const getTypeOverride = (
134
+ overrides: NamingOverrides | undefined,
135
+ typeName: string,
136
+ typeKind: "entity" | "complex"
137
+ ): string | undefined => {
138
+ if (!overrides) return undefined
139
+
140
+ const typeOverrides = typeKind === "entity"
141
+ ? overrides.entities?.[typeName]
142
+ : overrides.complexTypes?.[typeName]
143
+
144
+ return typeOverrides?.name
145
+ }
146
+
147
+ /**
148
+ * Get the overridden operation name or undefined if no override exists.
149
+ *
150
+ * @since 1.0.0
151
+ * @category naming
152
+ */
153
+ export const getOperationOverride = (
154
+ overrides: NamingOverrides | undefined,
155
+ operationName: string
156
+ ): string | undefined => {
157
+ if (!overrides) return undefined
158
+ return overrides.operations?.[operationName]?.name
159
+ }
160
+
161
+ /**
162
+ * Get the overridden operation parameter name or undefined if no override exists.
163
+ *
164
+ * @since 1.0.0
165
+ * @category naming
166
+ */
167
+ export const getOperationParameterOverride = (
168
+ overrides: NamingOverrides | undefined,
169
+ operationName: string,
170
+ parameterName: string
171
+ ): string | undefined => {
172
+ if (!overrides) return undefined
173
+
174
+ // Check operation-specific parameter overrides
175
+ const opOverride = overrides.operations?.[operationName]?.parameters?.[parameterName]
176
+ if (opOverride) return opOverride
177
+
178
+ // Fall back to global property overrides
179
+ return overrides.properties?.[parameterName]
180
+ }