@odata-effect/odata-effect-generator 0.1.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 (131) hide show
  1. package/Cli/package.json +6 -0
  2. package/LICENSE +21 -0
  3. package/README.md +37 -0
  4. package/bin/package.json +6 -0
  5. package/digester/Digester/package.json +6 -0
  6. package/digester/TypeMapper/package.json +6 -0
  7. package/dist/cjs/Cli.js +95 -0
  8. package/dist/cjs/Cli.js.map +1 -0
  9. package/dist/cjs/bin.js +14 -0
  10. package/dist/cjs/bin.js.map +1 -0
  11. package/dist/cjs/digester/Digester.js +488 -0
  12. package/dist/cjs/digester/Digester.js.map +1 -0
  13. package/dist/cjs/digester/TypeMapper.js +262 -0
  14. package/dist/cjs/digester/TypeMapper.js.map +1 -0
  15. package/dist/cjs/generator/Generator.js +126 -0
  16. package/dist/cjs/generator/Generator.js.map +1 -0
  17. package/dist/cjs/generator/IndexGenerator.js +164 -0
  18. package/dist/cjs/generator/IndexGenerator.js.map +1 -0
  19. package/dist/cjs/generator/ModelsGenerator.js +255 -0
  20. package/dist/cjs/generator/ModelsGenerator.js.map +1 -0
  21. package/dist/cjs/generator/NamingHelper.js +164 -0
  22. package/dist/cjs/generator/NamingHelper.js.map +1 -0
  23. package/dist/cjs/generator/PackageGenerator.js +168 -0
  24. package/dist/cjs/generator/PackageGenerator.js.map +1 -0
  25. package/dist/cjs/generator/QueryModelsGenerator.js +182 -0
  26. package/dist/cjs/generator/QueryModelsGenerator.js.map +1 -0
  27. package/dist/cjs/generator/ServiceFnGenerator.js +258 -0
  28. package/dist/cjs/generator/ServiceFnGenerator.js.map +1 -0
  29. package/dist/cjs/generator/ServiceFnPromiseGenerator.js +182 -0
  30. package/dist/cjs/generator/ServiceFnPromiseGenerator.js.map +1 -0
  31. package/dist/cjs/index.js +38 -0
  32. package/dist/cjs/index.js.map +1 -0
  33. package/dist/cjs/model/DataModel.js +28 -0
  34. package/dist/cjs/model/DataModel.js.map +1 -0
  35. package/dist/cjs/parser/EdmxSchema.js +20 -0
  36. package/dist/cjs/parser/EdmxSchema.js.map +1 -0
  37. package/dist/cjs/parser/XmlParser.js +47 -0
  38. package/dist/cjs/parser/XmlParser.js.map +1 -0
  39. package/dist/dts/Cli.d.ts +9 -0
  40. package/dist/dts/Cli.d.ts.map +1 -0
  41. package/dist/dts/bin.d.ts +3 -0
  42. package/dist/dts/bin.d.ts.map +1 -0
  43. package/dist/dts/digester/Digester.d.ts +33 -0
  44. package/dist/dts/digester/Digester.d.ts.map +1 -0
  45. package/dist/dts/digester/TypeMapper.d.ts +79 -0
  46. package/dist/dts/digester/TypeMapper.d.ts.map +1 -0
  47. package/dist/dts/generator/Generator.d.ts +45 -0
  48. package/dist/dts/generator/Generator.d.ts.map +1 -0
  49. package/dist/dts/generator/IndexGenerator.d.ts +14 -0
  50. package/dist/dts/generator/IndexGenerator.d.ts.map +1 -0
  51. package/dist/dts/generator/ModelsGenerator.d.ts +14 -0
  52. package/dist/dts/generator/ModelsGenerator.d.ts.map +1 -0
  53. package/dist/dts/generator/NamingHelper.d.ts +110 -0
  54. package/dist/dts/generator/NamingHelper.d.ts.map +1 -0
  55. package/dist/dts/generator/PackageGenerator.d.ts +53 -0
  56. package/dist/dts/generator/PackageGenerator.d.ts.map +1 -0
  57. package/dist/dts/generator/QueryModelsGenerator.d.ts +14 -0
  58. package/dist/dts/generator/QueryModelsGenerator.d.ts.map +1 -0
  59. package/dist/dts/generator/ServiceFnGenerator.d.ts +37 -0
  60. package/dist/dts/generator/ServiceFnGenerator.d.ts.map +1 -0
  61. package/dist/dts/generator/ServiceFnPromiseGenerator.d.ts +40 -0
  62. package/dist/dts/generator/ServiceFnPromiseGenerator.d.ts.map +1 -0
  63. package/dist/dts/index.d.ts +101 -0
  64. package/dist/dts/index.d.ts.map +1 -0
  65. package/dist/dts/model/DataModel.d.ts +188 -0
  66. package/dist/dts/model/DataModel.d.ts.map +1 -0
  67. package/dist/dts/parser/EdmxSchema.d.ts +228 -0
  68. package/dist/dts/parser/EdmxSchema.d.ts.map +1 -0
  69. package/dist/dts/parser/XmlParser.d.ts +31 -0
  70. package/dist/dts/parser/XmlParser.d.ts.map +1 -0
  71. package/dist/esm/Cli.js +87 -0
  72. package/dist/esm/Cli.js.map +1 -0
  73. package/dist/esm/bin.js +12 -0
  74. package/dist/esm/bin.js.map +1 -0
  75. package/dist/esm/digester/Digester.js +478 -0
  76. package/dist/esm/digester/Digester.js.map +1 -0
  77. package/dist/esm/digester/TypeMapper.js +248 -0
  78. package/dist/esm/digester/TypeMapper.js.map +1 -0
  79. package/dist/esm/generator/Generator.js +116 -0
  80. package/dist/esm/generator/Generator.js.map +1 -0
  81. package/dist/esm/generator/IndexGenerator.js +157 -0
  82. package/dist/esm/generator/IndexGenerator.js.map +1 -0
  83. package/dist/esm/generator/ModelsGenerator.js +248 -0
  84. package/dist/esm/generator/ModelsGenerator.js.map +1 -0
  85. package/dist/esm/generator/NamingHelper.js +147 -0
  86. package/dist/esm/generator/NamingHelper.js.map +1 -0
  87. package/dist/esm/generator/PackageGenerator.js +156 -0
  88. package/dist/esm/generator/PackageGenerator.js.map +1 -0
  89. package/dist/esm/generator/QueryModelsGenerator.js +175 -0
  90. package/dist/esm/generator/QueryModelsGenerator.js.map +1 -0
  91. package/dist/esm/generator/ServiceFnGenerator.js +251 -0
  92. package/dist/esm/generator/ServiceFnGenerator.js.map +1 -0
  93. package/dist/esm/generator/ServiceFnPromiseGenerator.js +174 -0
  94. package/dist/esm/generator/ServiceFnPromiseGenerator.js.map +1 -0
  95. package/dist/esm/index.js +101 -0
  96. package/dist/esm/index.js.map +1 -0
  97. package/dist/esm/model/DataModel.js +21 -0
  98. package/dist/esm/model/DataModel.js.map +1 -0
  99. package/dist/esm/package.json +4 -0
  100. package/dist/esm/parser/EdmxSchema.js +13 -0
  101. package/dist/esm/parser/EdmxSchema.js.map +1 -0
  102. package/dist/esm/parser/XmlParser.js +37 -0
  103. package/dist/esm/parser/XmlParser.js.map +1 -0
  104. package/generator/Generator/package.json +6 -0
  105. package/generator/IndexGenerator/package.json +6 -0
  106. package/generator/ModelsGenerator/package.json +6 -0
  107. package/generator/NamingHelper/package.json +6 -0
  108. package/generator/PackageGenerator/package.json +6 -0
  109. package/generator/QueryModelsGenerator/package.json +6 -0
  110. package/generator/ServiceFnGenerator/package.json +6 -0
  111. package/generator/ServiceFnPromiseGenerator/package.json +6 -0
  112. package/model/DataModel/package.json +6 -0
  113. package/package.json +157 -0
  114. package/parser/EdmxSchema/package.json +6 -0
  115. package/parser/XmlParser/package.json +6 -0
  116. package/src/Cli.ts +115 -0
  117. package/src/bin.ts +17 -0
  118. package/src/digester/Digester.ts +600 -0
  119. package/src/digester/TypeMapper.ts +181 -0
  120. package/src/generator/Generator.ts +183 -0
  121. package/src/generator/IndexGenerator.ts +189 -0
  122. package/src/generator/ModelsGenerator.ts +344 -0
  123. package/src/generator/NamingHelper.ts +159 -0
  124. package/src/generator/PackageGenerator.ts +176 -0
  125. package/src/generator/QueryModelsGenerator.ts +228 -0
  126. package/src/generator/ServiceFnGenerator.ts +324 -0
  127. package/src/generator/ServiceFnPromiseGenerator.ts +242 -0
  128. package/src/index.ts +114 -0
  129. package/src/model/DataModel.ts +254 -0
  130. package/src/parser/EdmxSchema.ts +308 -0
  131. package/src/parser/XmlParser.ts +47 -0
@@ -0,0 +1,248 @@
1
+ // ============================================================================
2
+ // Type Mappings
3
+ // ============================================================================
4
+ /**
5
+ * Default type mapping for unknown types.
6
+ */
7
+ const UNKNOWN_TYPE = {
8
+ effectSchema: "Schema.Unknown",
9
+ queryPath: "StringPath",
10
+ tsType: "unknown"
11
+ };
12
+ /**
13
+ * OData V2 type mappings.
14
+ */
15
+ const V2_TYPE_MAP = {
16
+ "Edm.String": {
17
+ effectSchema: "Schema.String",
18
+ queryPath: "StringPath",
19
+ tsType: "string"
20
+ },
21
+ "Edm.Boolean": {
22
+ effectSchema: "Schema.Boolean",
23
+ queryPath: "BooleanPath",
24
+ tsType: "boolean"
25
+ },
26
+ "Edm.Byte": {
27
+ effectSchema: "Schema.Number",
28
+ queryPath: "NumberPath",
29
+ tsType: "number"
30
+ },
31
+ "Edm.SByte": {
32
+ effectSchema: "Schema.Number",
33
+ queryPath: "NumberPath",
34
+ tsType: "number"
35
+ },
36
+ "Edm.Int16": {
37
+ effectSchema: "Schema.Number",
38
+ queryPath: "NumberPath",
39
+ tsType: "number"
40
+ },
41
+ "Edm.Int32": {
42
+ effectSchema: "Schema.Number",
43
+ queryPath: "NumberPath",
44
+ tsType: "number"
45
+ },
46
+ "Edm.Int64": {
47
+ effectSchema: "Schema.String",
48
+ queryPath: "StringPath",
49
+ tsType: "string"
50
+ },
51
+ "Edm.Single": {
52
+ effectSchema: "Schema.Number",
53
+ queryPath: "NumberPath",
54
+ tsType: "number"
55
+ },
56
+ "Edm.Double": {
57
+ effectSchema: "Schema.Number",
58
+ queryPath: "NumberPath",
59
+ tsType: "number"
60
+ },
61
+ "Edm.Decimal": {
62
+ effectSchema: "Schema.String",
63
+ queryPath: "StringPath",
64
+ tsType: "string"
65
+ },
66
+ "Edm.Guid": {
67
+ effectSchema: "Schema.String",
68
+ queryPath: "StringPath",
69
+ tsType: "string"
70
+ },
71
+ "Edm.Time": {
72
+ effectSchema: "Schema.String",
73
+ queryPath: "StringPath",
74
+ tsType: "string"
75
+ },
76
+ "Edm.DateTime": {
77
+ effectSchema: "Schema.Date",
78
+ queryPath: "DateTimePath",
79
+ tsType: "Date"
80
+ },
81
+ "Edm.DateTimeOffset": {
82
+ effectSchema: "Schema.Date",
83
+ queryPath: "DateTimePath",
84
+ tsType: "Date"
85
+ },
86
+ "Edm.Binary": {
87
+ effectSchema: "Schema.String",
88
+ queryPath: "StringPath",
89
+ tsType: "string"
90
+ }
91
+ };
92
+ /**
93
+ * OData V4 type mappings (extends V2).
94
+ */
95
+ const V4_TYPE_MAP = {
96
+ ...V2_TYPE_MAP,
97
+ "Edm.Date": {
98
+ effectSchema: "Schema.String",
99
+ queryPath: "StringPath",
100
+ tsType: "string"
101
+ },
102
+ "Edm.TimeOfDay": {
103
+ effectSchema: "Schema.String",
104
+ queryPath: "StringPath",
105
+ tsType: "string"
106
+ },
107
+ "Edm.Duration": {
108
+ effectSchema: "Schema.String",
109
+ queryPath: "StringPath",
110
+ tsType: "string"
111
+ },
112
+ "Edm.Stream": {
113
+ effectSchema: "Schema.String",
114
+ queryPath: "StringPath",
115
+ tsType: "string"
116
+ },
117
+ "Edm.GeographyPoint": {
118
+ effectSchema: "Schema.Unknown",
119
+ queryPath: "StringPath",
120
+ tsType: "unknown"
121
+ },
122
+ "Edm.GeographyLineString": {
123
+ effectSchema: "Schema.Unknown",
124
+ queryPath: "StringPath",
125
+ tsType: "unknown"
126
+ },
127
+ "Edm.GeographyPolygon": {
128
+ effectSchema: "Schema.Unknown",
129
+ queryPath: "StringPath",
130
+ tsType: "unknown"
131
+ },
132
+ "Edm.GeometryPoint": {
133
+ effectSchema: "Schema.Unknown",
134
+ queryPath: "StringPath",
135
+ tsType: "unknown"
136
+ },
137
+ "Edm.GeometryLineString": {
138
+ effectSchema: "Schema.Unknown",
139
+ queryPath: "StringPath",
140
+ tsType: "unknown"
141
+ },
142
+ "Edm.GeometryPolygon": {
143
+ effectSchema: "Schema.Unknown",
144
+ queryPath: "StringPath",
145
+ tsType: "unknown"
146
+ }
147
+ };
148
+ /**
149
+ * Parse an OData type string to extract base type and collection info.
150
+ *
151
+ * @example
152
+ * parseODataType("Edm.String") // { baseType: "Edm.String", isCollection: false }
153
+ * parseODataType("Collection(Edm.String)") // { baseType: "Edm.String", isCollection: true }
154
+ *
155
+ * @since 1.0.0
156
+ * @category parsing
157
+ */
158
+ export const parseODataType = typeString => {
159
+ const collectionMatch = typeString.match(/^Collection\((.+)\)$/);
160
+ if (collectionMatch) {
161
+ return {
162
+ baseType: collectionMatch[1],
163
+ isCollection: true
164
+ };
165
+ }
166
+ return {
167
+ baseType: typeString,
168
+ isCollection: false
169
+ };
170
+ };
171
+ /**
172
+ * Check if a type is a primitive EDM type.
173
+ *
174
+ * @since 1.0.0
175
+ * @category type-checking
176
+ */
177
+ export const isPrimitiveType = type => {
178
+ return type.startsWith("Edm.");
179
+ };
180
+ /**
181
+ * Get the type mapping for a primitive OData type.
182
+ *
183
+ * @since 1.0.0
184
+ * @category type-mapping
185
+ */
186
+ export const getPrimitiveTypeMapping = (version, type) => {
187
+ const typeMap = version === "V2" ? V2_TYPE_MAP : V4_TYPE_MAP;
188
+ return typeMap[type] ?? UNKNOWN_TYPE;
189
+ };
190
+ /**
191
+ * Create a type mapping for a complex type reference.
192
+ *
193
+ * @since 1.0.0
194
+ * @category type-mapping
195
+ */
196
+ export const getComplexTypeMapping = typeName => ({
197
+ effectSchema: typeName,
198
+ queryPath: `EntityPath<Q${typeName}>`,
199
+ tsType: typeName
200
+ });
201
+ /**
202
+ * Create a type mapping for an enum type reference.
203
+ *
204
+ * @since 1.0.0
205
+ * @category type-mapping
206
+ */
207
+ export const getEnumTypeMapping = typeName => ({
208
+ effectSchema: typeName,
209
+ queryPath: "StringPath",
210
+ tsType: typeName
211
+ });
212
+ /**
213
+ * Create a type mapping for a navigation property (single entity).
214
+ *
215
+ * @since 1.0.0
216
+ * @category type-mapping
217
+ */
218
+ export const getNavigationTypeMapping = typeName => ({
219
+ effectSchema: `Schema.optional(${typeName})`,
220
+ queryPath: `EntityPath<Q${typeName}>`,
221
+ tsType: `${typeName} | undefined`
222
+ });
223
+ /**
224
+ * Create a type mapping for a navigation property (collection).
225
+ *
226
+ * @since 1.0.0
227
+ * @category type-mapping
228
+ */
229
+ export const getCollectionNavigationTypeMapping = typeName => ({
230
+ effectSchema: `Schema.optional(Schema.Array(${typeName}))`,
231
+ queryPath: `CollectionPath<Q${typeName}>`,
232
+ tsType: `ReadonlyArray<${typeName}> | undefined`
233
+ });
234
+ /**
235
+ * Extract the simple type name from a fully qualified name.
236
+ *
237
+ * @example
238
+ * getSimpleTypeName("ODataDemo.Product") // "Product"
239
+ * getSimpleTypeName("Product") // "Product"
240
+ *
241
+ * @since 1.0.0
242
+ * @category naming
243
+ */
244
+ export const getSimpleTypeName = fqName => {
245
+ const parts = fqName.split(".");
246
+ return parts[parts.length - 1];
247
+ };
248
+ //# sourceMappingURL=TypeMapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypeMapper.js","names":["UNKNOWN_TYPE","effectSchema","queryPath","tsType","V2_TYPE_MAP","V4_TYPE_MAP","parseODataType","typeString","collectionMatch","match","baseType","isCollection","isPrimitiveType","type","startsWith","getPrimitiveTypeMapping","version","typeMap","getComplexTypeMapping","typeName","getEnumTypeMapping","getNavigationTypeMapping","getCollectionNavigationTypeMapping","getSimpleTypeName","fqName","parts","split","length"],"sources":["../../../src/digester/TypeMapper.ts"],"sourcesContent":[null],"mappings":"AAQA;AACA;AACA;AAEA;;;AAGA,MAAMA,YAAY,GAAgB;EAChCC,YAAY,EAAE,gBAAgB;EAC9BC,SAAS,EAAE,YAAY;EACvBC,MAAM,EAAE;CACT;AAED;;;AAGA,MAAMC,WAAW,GAAgC;EAC/C,YAAY,EAAE;IAAEH,YAAY,EAAE,eAAe;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAQ,CAAE;EAC1F,aAAa,EAAE;IAAEF,YAAY,EAAE,gBAAgB;IAAEC,SAAS,EAAE,aAAa;IAAEC,MAAM,EAAE;EAAS,CAAE;EAC9F,UAAU,EAAE;IAAEF,YAAY,EAAE,eAAe;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAQ,CAAE;EACxF,WAAW,EAAE;IAAEF,YAAY,EAAE,eAAe;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAQ,CAAE;EACzF,WAAW,EAAE;IAAEF,YAAY,EAAE,eAAe;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAQ,CAAE;EACzF,WAAW,EAAE;IAAEF,YAAY,EAAE,eAAe;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAQ,CAAE;EACzF,WAAW,EAAE;IAAEF,YAAY,EAAE,eAAe;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAQ,CAAE;EACzF,YAAY,EAAE;IAAEF,YAAY,EAAE,eAAe;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAQ,CAAE;EAC1F,YAAY,EAAE;IAAEF,YAAY,EAAE,eAAe;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAQ,CAAE;EAC1F,aAAa,EAAE;IAAEF,YAAY,EAAE,eAAe;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAQ,CAAE;EAC3F,UAAU,EAAE;IAAEF,YAAY,EAAE,eAAe;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAQ,CAAE;EACxF,UAAU,EAAE;IAAEF,YAAY,EAAE,eAAe;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAQ,CAAE;EACxF,cAAc,EAAE;IAAEF,YAAY,EAAE,aAAa;IAAEC,SAAS,EAAE,cAAc;IAAEC,MAAM,EAAE;EAAM,CAAE;EAC1F,oBAAoB,EAAE;IAAEF,YAAY,EAAE,aAAa;IAAEC,SAAS,EAAE,cAAc;IAAEC,MAAM,EAAE;EAAM,CAAE;EAChG,YAAY,EAAE;IAAEF,YAAY,EAAE,eAAe;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAQ;CACzF;AAED;;;AAGA,MAAME,WAAW,GAAgC;EAC/C,GAAGD,WAAW;EACd,UAAU,EAAE;IAAEH,YAAY,EAAE,eAAe;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAQ,CAAE;EACxF,eAAe,EAAE;IAAEF,YAAY,EAAE,eAAe;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAQ,CAAE;EAC7F,cAAc,EAAE;IAAEF,YAAY,EAAE,eAAe;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAQ,CAAE;EAC5F,YAAY,EAAE;IAAEF,YAAY,EAAE,eAAe;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAQ,CAAE;EAC1F,oBAAoB,EAAE;IAAEF,YAAY,EAAE,gBAAgB;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAS,CAAE;EACpG,yBAAyB,EAAE;IAAEF,YAAY,EAAE,gBAAgB;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAS,CAAE;EACzG,sBAAsB,EAAE;IAAEF,YAAY,EAAE,gBAAgB;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAS,CAAE;EACtG,mBAAmB,EAAE;IAAEF,YAAY,EAAE,gBAAgB;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAS,CAAE;EACnG,wBAAwB,EAAE;IAAEF,YAAY,EAAE,gBAAgB;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAS,CAAE;EACxG,qBAAqB,EAAE;IAAEF,YAAY,EAAE,gBAAgB;IAAEC,SAAS,EAAE,YAAY;IAAEC,MAAM,EAAE;EAAS;CACpG;AAcD;;;;;;;;;;AAUA,OAAO,MAAMG,cAAc,GAAIC,UAAkB,IAAgB;EAC/D,MAAMC,eAAe,GAAGD,UAAU,CAACE,KAAK,CAAC,sBAAsB,CAAC;EAChE,IAAID,eAAe,EAAE;IACnB,OAAO;MACLE,QAAQ,EAAEF,eAAe,CAAC,CAAC,CAAC;MAC5BG,YAAY,EAAE;KACf;EACH;EACA,OAAO;IACLD,QAAQ,EAAEH,UAAU;IACpBI,YAAY,EAAE;GACf;AACH,CAAC;AAED;;;;;;AAMA,OAAO,MAAMC,eAAe,GAAIC,IAAY,IAAa;EACvD,OAAOA,IAAI,CAACC,UAAU,CAAC,MAAM,CAAC;AAChC,CAAC;AAED;;;;;;AAMA,OAAO,MAAMC,uBAAuB,GAAGA,CACrCC,OAAqB,EACrBH,IAAY,KACG;EACf,MAAMI,OAAO,GAAGD,OAAO,KAAK,IAAI,GAAGZ,WAAW,GAAGC,WAAW;EAC5D,OAAOY,OAAO,CAACJ,IAAI,CAAC,IAAIb,YAAY;AACtC,CAAC;AAED;;;;;;AAMA,OAAO,MAAMkB,qBAAqB,GAAIC,QAAgB,KAAmB;EACvElB,YAAY,EAAEkB,QAAQ;EACtBjB,SAAS,EAAE,eAAeiB,QAAQ,GAAG;EACrChB,MAAM,EAAEgB;CACT,CAAC;AAEF;;;;;;AAMA,OAAO,MAAMC,kBAAkB,GAAID,QAAgB,KAAmB;EACpElB,YAAY,EAAEkB,QAAQ;EACtBjB,SAAS,EAAE,YAAY;EACvBC,MAAM,EAAEgB;CACT,CAAC;AAEF;;;;;;AAMA,OAAO,MAAME,wBAAwB,GAAIF,QAAgB,KAAmB;EAC1ElB,YAAY,EAAE,mBAAmBkB,QAAQ,GAAG;EAC5CjB,SAAS,EAAE,eAAeiB,QAAQ,GAAG;EACrChB,MAAM,EAAE,GAAGgB,QAAQ;CACpB,CAAC;AAEF;;;;;;AAMA,OAAO,MAAMG,kCAAkC,GAAIH,QAAgB,KAAmB;EACpFlB,YAAY,EAAE,gCAAgCkB,QAAQ,IAAI;EAC1DjB,SAAS,EAAE,mBAAmBiB,QAAQ,GAAG;EACzChB,MAAM,EAAE,iBAAiBgB,QAAQ;CAClC,CAAC;AAEF;;;;;;;;;;AAUA,OAAO,MAAMI,iBAAiB,GAAIC,MAAc,IAAY;EAC1D,MAAMC,KAAK,GAAGD,MAAM,CAACE,KAAK,CAAC,GAAG,CAAC;EAC/B,OAAOD,KAAK,CAACA,KAAK,CAACE,MAAM,GAAG,CAAC,CAAC;AAChC,CAAC","ignoreList":[]}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Main generator that orchestrates all code generation.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+ import * as FileSystem from "@effect/platform/FileSystem";
7
+ import * as Path from "@effect/platform/Path";
8
+ import * as Effect from "effect/Effect";
9
+ import * as Schema from "effect/Schema";
10
+ import { generateIndex } from "./IndexGenerator.js";
11
+ import { generateModels } from "./ModelsGenerator.js";
12
+ import { generatePackageJson, generateTsconfig, generateTsconfigBuild, generateTsconfigSrc, generateTsconfigTest, generateVitestConfig } from "./PackageGenerator.js";
13
+ import { generateQueryModels } from "./QueryModelsGenerator.js";
14
+ import { generateServiceFns } from "./ServiceFnGenerator.js";
15
+ import { generatePromiseServiceFns } from "./ServiceFnPromiseGenerator.js";
16
+ /**
17
+ * Error thrown during code generation.
18
+ *
19
+ * @since 1.0.0
20
+ * @category errors
21
+ */
22
+ export class GeneratorError extends /*#__PURE__*/Schema.TaggedError()("GeneratorError", {
23
+ message: Schema.String,
24
+ cause: /*#__PURE__*/Schema.optional(Schema.Unknown)
25
+ }) {}
26
+ /**
27
+ * Generate all code from a data model.
28
+ *
29
+ * @since 1.0.0
30
+ * @category generation
31
+ */
32
+ export const generate = (dataModel, config) => Effect.gen(function* () {
33
+ const fs = yield* FileSystem.FileSystem;
34
+ const path = yield* Path.Path;
35
+ const outputDir = config.outputDir;
36
+ const serviceName = config.serviceName ?? dataModel.serviceName;
37
+ const packageName = config.packageName ?? `@template/${serviceName.toLowerCase()}-effect`;
38
+ const packageConfig = {
39
+ packageName,
40
+ serviceName
41
+ };
42
+ // Generate tree-shakable service function files
43
+ const serviceResult = generateServiceFns(dataModel);
44
+ // Generate Promise-based service function files
45
+ const promiseServiceResult = generatePromiseServiceFns(dataModel);
46
+ // Generate all files
47
+ const files = [
48
+ // Source files
49
+ {
50
+ path: path.join(outputDir, "src", "Models.ts"),
51
+ content: generateModels(dataModel)
52
+ }, {
53
+ path: path.join(outputDir, "src", "QueryModels.ts"),
54
+ content: generateQueryModels(dataModel)
55
+ },
56
+ // Individual entity service function files (tree-shakable)
57
+ ...serviceResult.entityServices.map(svc => ({
58
+ path: path.join(outputDir, "src", svc.fileName),
59
+ content: svc.content
60
+ })),
61
+ // Promise-based entity service function files
62
+ ...promiseServiceResult.entityServices.map(svc => ({
63
+ path: path.join(outputDir, "src", svc.fileName),
64
+ content: svc.content
65
+ })), {
66
+ path: path.join(outputDir, "src", "index.ts"),
67
+ content: generateIndex(dataModel)
68
+ },
69
+ // Package configuration files
70
+ {
71
+ path: path.join(outputDir, "package.json"),
72
+ content: generatePackageJson(dataModel, packageConfig)
73
+ }, {
74
+ path: path.join(outputDir, "tsconfig.json"),
75
+ content: generateTsconfig()
76
+ }, {
77
+ path: path.join(outputDir, "tsconfig.src.json"),
78
+ content: generateTsconfigSrc()
79
+ }, {
80
+ path: path.join(outputDir, "tsconfig.test.json"),
81
+ content: generateTsconfigTest()
82
+ }, {
83
+ path: path.join(outputDir, "tsconfig.build.json"),
84
+ content: generateTsconfigBuild()
85
+ }, {
86
+ path: path.join(outputDir, "vitest.config.ts"),
87
+ content: generateVitestConfig()
88
+ }];
89
+ // Create output directories
90
+ yield* fs.makeDirectory(path.join(outputDir, "src"), {
91
+ recursive: true
92
+ }).pipe(Effect.mapError(error => new GeneratorError({
93
+ message: `Failed to create output directory: ${outputDir}/src`,
94
+ cause: error
95
+ })));
96
+ // Write all files
97
+ for (const file of files) {
98
+ // Check if file exists and force is not set
99
+ if (!config.force) {
100
+ const exists = yield* fs.exists(file.path).pipe(Effect.mapError(() => new GeneratorError({
101
+ message: `Failed to check file existence: ${file.path}`
102
+ })));
103
+ if (exists) {
104
+ yield* Effect.logWarning(`Skipping existing file: ${file.path}`);
105
+ continue;
106
+ }
107
+ }
108
+ yield* fs.writeFileString(file.path, file.content).pipe(Effect.mapError(error => new GeneratorError({
109
+ message: `Failed to write file: ${file.path}`,
110
+ cause: error
111
+ })));
112
+ yield* Effect.logInfo(`Generated: ${file.path}`);
113
+ }
114
+ yield* Effect.logInfo(`Generation complete. Output: ${outputDir}`);
115
+ });
116
+ //# sourceMappingURL=Generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Generator.js","names":["FileSystem","Path","Effect","Schema","generateIndex","generateModels","generatePackageJson","generateTsconfig","generateTsconfigBuild","generateTsconfigSrc","generateTsconfigTest","generateVitestConfig","generateQueryModels","generateServiceFns","generatePromiseServiceFns","GeneratorError","TaggedError","message","String","cause","optional","Unknown","generate","dataModel","config","gen","fs","path","outputDir","serviceName","packageName","toLowerCase","packageConfig","serviceResult","promiseServiceResult","files","join","content","entityServices","map","svc","fileName","makeDirectory","recursive","pipe","mapError","error","file","force","exists","logWarning","writeFileString","logInfo"],"sources":["../../../src/generator/Generator.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,157 @@
1
+ import { getEditableTypeName, getIdTypeName, getQueryFactoryName, getQueryInstanceName, getQueryInterfaceName, getServiceClassName } from "./NamingHelper.js";
2
+ import { getPromiseServiceName } from "./ServiceFnPromiseGenerator.js";
3
+ /**
4
+ * Generate the index.ts file content.
5
+ *
6
+ * @since 1.0.0
7
+ * @category generation
8
+ */
9
+ export const generateIndex = dataModel => {
10
+ const lines = [];
11
+ // Header
12
+ lines.push(`/**`);
13
+ lines.push(` * Effect-based OData client for ${dataModel.serviceName} service.`);
14
+ lines.push(` * Generated by odata-effect-gen.`);
15
+ lines.push(` *`);
16
+ lines.push(` * @since 1.0.0`);
17
+ lines.push(` */`);
18
+ lines.push(``);
19
+ // Models
20
+ lines.push(`// Models`);
21
+ lines.push(`export {`);
22
+ const modelExports = [];
23
+ // Enums
24
+ for (const enumType of dataModel.enumTypes.values()) {
25
+ modelExports.push(enumType.name);
26
+ }
27
+ // Complex types
28
+ for (const complexType of dataModel.complexTypes.values()) {
29
+ modelExports.push(complexType.name);
30
+ modelExports.push(getEditableTypeName(complexType.name));
31
+ }
32
+ // Entity types
33
+ for (const entityType of dataModel.entityTypes.values()) {
34
+ modelExports.push(entityType.name);
35
+ if (entityType.keys.length > 0) {
36
+ modelExports.push(getIdTypeName(entityType.name));
37
+ }
38
+ modelExports.push(getEditableTypeName(entityType.name));
39
+ }
40
+ for (let i = 0; i < modelExports.length; i++) {
41
+ const isLast = i === modelExports.length - 1;
42
+ lines.push(` ${modelExports[i]}${isLast ? "" : ","}`);
43
+ }
44
+ lines.push(`} from "./Models.js"`);
45
+ lines.push(``);
46
+ // Re-export OData infrastructure
47
+ const isV4 = dataModel.version === "V4";
48
+ lines.push(`// Re-export OData infrastructure from @odata-effect/odata-effect`);
49
+ lines.push(`export {`);
50
+ lines.push(` // Errors`);
51
+ if (!isV4) {
52
+ lines.push(` SapErrorDetail,`);
53
+ lines.push(` SapErrorResolution,`);
54
+ lines.push(` SapApplication,`);
55
+ lines.push(` SapInnerError,`);
56
+ lines.push(` SapErrorMessage,`);
57
+ lines.push(` SapErrorBody,`);
58
+ lines.push(` SapErrorResponse,`);
59
+ lines.push(` SapError,`);
60
+ }
61
+ lines.push(` ODataError,`);
62
+ lines.push(` EntityNotFoundError,`);
63
+ lines.push(` ParseError,`);
64
+ if (isV4) {
65
+ // V4 exports
66
+ lines.push(` // OData V4`);
67
+ lines.push(` ODataV4,`);
68
+ lines.push(` ODataV4CollectionResponse,`);
69
+ lines.push(` ODataV4ValueResponse,`);
70
+ lines.push(` ODataV4Annotations,`);
71
+ lines.push(` ODataV4ClientConfig,`);
72
+ lines.push(` buildEntityPathV4,`);
73
+ lines.push(` type ODataV4QueryOptions,`);
74
+ lines.push(` type ODataV4RequestOptions,`);
75
+ lines.push(` type ODataV4ClientConfigService,`);
76
+ lines.push(` type PagedResultV4,`);
77
+ } else {
78
+ // V2 exports
79
+ lines.push(` // OData V2`);
80
+ lines.push(` OData,`);
81
+ lines.push(` ODataSingleResponse,`);
82
+ lines.push(` ODataCollectionResponse,`);
83
+ lines.push(` ODataCollectionResponseWithMeta,`);
84
+ lines.push(` ODataValueResponse,`);
85
+ lines.push(` EntityMetadata,`);
86
+ lines.push(` MediaMetadata,`);
87
+ lines.push(` DeferredContent,`);
88
+ lines.push(` ODataClientConfig,`);
89
+ lines.push(` buildEntityPath,`);
90
+ lines.push(` DEFAULT_HEADERS,`);
91
+ lines.push(` MERGE_HEADERS,`);
92
+ lines.push(` type ODataQueryOptions,`);
93
+ lines.push(` type ODataRequestOptions,`);
94
+ lines.push(` type ODataClientConfigService,`);
95
+ lines.push(` type PagedResult,`);
96
+ }
97
+ lines.push(` // Query Builder`);
98
+ lines.push(` FilterExpression,`);
99
+ lines.push(` StringPath,`);
100
+ lines.push(` NumberPath,`);
101
+ lines.push(` BooleanPath,`);
102
+ lines.push(` DateTimePath,`);
103
+ lines.push(` EntityPath,`);
104
+ lines.push(` CollectionPath,`);
105
+ lines.push(` QueryBuilder,`);
106
+ lines.push(` createQueryPaths,`);
107
+ lines.push(` createQueryBuilder,`);
108
+ lines.push(` type FieldToPath,`);
109
+ lines.push(` type QueryPaths,`);
110
+ lines.push(` type SelectableKeys,`);
111
+ lines.push(` type ExpandableKeys,`);
112
+ lines.push(` type BuiltQuery`);
113
+ lines.push(`} from "@odata-effect/odata-effect"`);
114
+ lines.push(``);
115
+ // Individual Entity Services (tree-shakable module namespace re-exports)
116
+ lines.push(`// Individual Entity Services (tree-shakable)`);
117
+ for (const entitySet of dataModel.entitySets.values()) {
118
+ const serviceClassName = getServiceClassName(entitySet.name);
119
+ lines.push(`export * as ${serviceClassName} from "./${serviceClassName}.js"`);
120
+ }
121
+ lines.push(``);
122
+ // Promise-based Entity Services (for non-Effect environments)
123
+ lines.push(`// Promise-based Entity Services (for non-Effect environments)`);
124
+ for (const entitySet of dataModel.entitySets.values()) {
125
+ const promiseServiceName = getPromiseServiceName(entitySet.name);
126
+ lines.push(`export * as ${promiseServiceName} from "./${promiseServiceName}.js"`);
127
+ }
128
+ lines.push(``);
129
+ // Query Models
130
+ lines.push(`// Query Models`);
131
+ lines.push(`export {`);
132
+ const queryExports = [];
133
+ // Complex types
134
+ for (const complexType of dataModel.complexTypes.values()) {
135
+ queryExports.push(getQueryInstanceName(complexType.name));
136
+ queryExports.push(`type ${getQueryInterfaceName(complexType.name)}`);
137
+ }
138
+ // Entity types
139
+ for (const entityType of dataModel.entityTypes.values()) {
140
+ queryExports.push(getQueryInstanceName(entityType.name));
141
+ queryExports.push(`type ${getQueryInterfaceName(entityType.name)}`);
142
+ }
143
+ // Query factories for entity sets
144
+ for (const entitySet of dataModel.entitySets.values()) {
145
+ const entityType = dataModel.entityTypes.get(entitySet.entityTypeFqName);
146
+ if (entityType) {
147
+ queryExports.push(getQueryFactoryName(entityType.name));
148
+ }
149
+ }
150
+ for (let i = 0; i < queryExports.length; i++) {
151
+ const isLast = i === queryExports.length - 1;
152
+ lines.push(` ${queryExports[i]}${isLast ? "" : ","}`);
153
+ }
154
+ lines.push(`} from "./QueryModels.js"`);
155
+ return lines.join("\n");
156
+ };
157
+ //# sourceMappingURL=IndexGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IndexGenerator.js","names":["getEditableTypeName","getIdTypeName","getQueryFactoryName","getQueryInstanceName","getQueryInterfaceName","getServiceClassName","getPromiseServiceName","generateIndex","dataModel","lines","push","serviceName","modelExports","enumType","enumTypes","values","name","complexType","complexTypes","entityType","entityTypes","keys","length","i","isLast","isV4","version","entitySet","entitySets","serviceClassName","promiseServiceName","queryExports","get","entityTypeFqName","join"],"sources":["../../../src/generator/IndexGenerator.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}