@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,182 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.generateQueryModels = void 0;
7
+ var _NamingHelper = require("./NamingHelper.js");
8
+ /**
9
+ * Generate the QueryModels.ts file content.
10
+ *
11
+ * @since 1.0.0
12
+ * @category generation
13
+ */
14
+ const generateQueryModels = dataModel => {
15
+ const lines = [];
16
+ // Collect all query path types needed
17
+ const queryPathTypes = collectQueryPathTypes(dataModel);
18
+ // Header
19
+ lines.push(`/**`);
20
+ lines.push(` * Type-safe query paths for ${dataModel.serviceName} entities.`);
21
+ lines.push(` * Generated by odata-effect-gen.`);
22
+ lines.push(` *`);
23
+ lines.push(` * @since 1.0.0`);
24
+ lines.push(` */`);
25
+ lines.push(`import {`);
26
+ lines.push(` ${Array.from(queryPathTypes).join(",\n ")},`);
27
+ lines.push(` createQueryBuilder,`);
28
+ lines.push(` type QueryBuilder`);
29
+ lines.push(`} from "@odata-effect/odata-effect"`);
30
+ // Import entity types that have entity sets (for QueryBuilder generics)
31
+ const usedEntityNames = [];
32
+ for (const entitySet of dataModel.entitySets.values()) {
33
+ const entityType = dataModel.entityTypes.get(entitySet.entityTypeFqName);
34
+ if (entityType) {
35
+ usedEntityNames.push(entityType.name);
36
+ }
37
+ }
38
+ if (usedEntityNames.length > 0) {
39
+ lines.push(`import type {`);
40
+ lines.push(` ${usedEntityNames.join(",\n ")}`);
41
+ lines.push(`} from "./Models.js"`);
42
+ }
43
+ lines.push(``);
44
+ // Generate complex type query paths
45
+ for (const complexType of dataModel.complexTypes.values()) {
46
+ for (const line of generateQueryInterface(complexType)) lines.push(line);
47
+ lines.push(``);
48
+ for (const line of generateQueryInstance(complexType)) lines.push(line);
49
+ lines.push(``);
50
+ }
51
+ // Generate entity type query paths
52
+ for (const entityType of dataModel.entityTypes.values()) {
53
+ for (const line of generateQueryInterface(entityType)) lines.push(line);
54
+ lines.push(``);
55
+ for (const line of generateQueryInstance(entityType)) lines.push(line);
56
+ lines.push(``);
57
+ }
58
+ // Generate query builder factories for entity sets
59
+ for (const entitySet of dataModel.entitySets.values()) {
60
+ const entityType = dataModel.entityTypes.get(entitySet.entityTypeFqName);
61
+ if (entityType) {
62
+ for (const line of generateQueryFactory(entityType)) lines.push(line);
63
+ lines.push(``);
64
+ }
65
+ }
66
+ return lines.join("\n");
67
+ };
68
+ /**
69
+ * Collect all query path types used in the model.
70
+ */
71
+ exports.generateQueryModels = generateQueryModels;
72
+ const collectQueryPathTypes = dataModel => {
73
+ const types = new Set();
74
+ const addPropertyTypes = props => {
75
+ for (const prop of props) {
76
+ types.add(prop.typeMapping.queryPath.split("<")[0]);
77
+ }
78
+ };
79
+ const addNavPropertyTypes = navProps => {
80
+ for (const navProp of navProps) {
81
+ types.add(navProp.isCollection ? "CollectionPath" : "EntityPath");
82
+ }
83
+ };
84
+ for (const complexType of dataModel.complexTypes.values()) {
85
+ addPropertyTypes(complexType.properties);
86
+ addNavPropertyTypes(complexType.navigationProperties);
87
+ }
88
+ for (const entityType of dataModel.entityTypes.values()) {
89
+ addPropertyTypes(entityType.properties);
90
+ addNavPropertyTypes(entityType.navigationProperties);
91
+ }
92
+ return types;
93
+ };
94
+ /**
95
+ * Generate a query interface for a type.
96
+ */
97
+ const generateQueryInterface = type => {
98
+ const lines = [];
99
+ const interfaceName = (0, _NamingHelper.getQueryInterfaceName)(type.name);
100
+ lines.push(`/**`);
101
+ lines.push(` * Query paths for ${type.odataName}.`);
102
+ lines.push(` *`);
103
+ lines.push(` * @since 1.0.0`);
104
+ lines.push(` * @category query-paths`);
105
+ lines.push(` */`);
106
+ lines.push(`export interface ${interfaceName} {`);
107
+ for (const prop of type.properties) {
108
+ const basePathType = prop.typeMapping.queryPath;
109
+ // If it's a collection of complex/entity types, wrap in CollectionPath
110
+ const pathType = prop.isCollection && basePathType.startsWith("EntityPath<") ? basePathType.replace("EntityPath<", "CollectionPath<") : basePathType;
111
+ lines.push(` readonly ${prop.name}: ${pathType}`);
112
+ }
113
+ for (const navProp of type.navigationProperties) {
114
+ const targetQName = (0, _NamingHelper.getQueryInterfaceName)((0, _NamingHelper.getClassName)(navProp.targetType));
115
+ const pathType = navProp.isCollection ? `CollectionPath<${targetQName}>` : `EntityPath<${targetQName}>`;
116
+ lines.push(` readonly ${navProp.name}: ${pathType}`);
117
+ }
118
+ lines.push(`}`);
119
+ return lines;
120
+ };
121
+ /**
122
+ * Generate a query instance for a type.
123
+ */
124
+ const generateQueryInstance = type => {
125
+ const lines = [];
126
+ const interfaceName = (0, _NamingHelper.getQueryInterfaceName)(type.name);
127
+ const instanceName = (0, _NamingHelper.getQueryInstanceName)(type.name);
128
+ lines.push(`/**`);
129
+ lines.push(` * Query paths instance for ${type.odataName}.`);
130
+ lines.push(` *`);
131
+ lines.push(` * @since 1.0.0`);
132
+ lines.push(` * @category query-paths`);
133
+ lines.push(` */`);
134
+ lines.push(`export const ${instanceName}: ${interfaceName} = {`);
135
+ const allFields = [...type.properties, ...type.navigationProperties];
136
+ for (let i = 0; i < type.properties.length; i++) {
137
+ const prop = type.properties[i];
138
+ let pathClass = prop.typeMapping.queryPath.split("<")[0];
139
+ // If it's a collection of complex/entity types, use CollectionPath instead of EntityPath
140
+ if (prop.isCollection && pathClass === "EntityPath") {
141
+ pathClass = "CollectionPath";
142
+ }
143
+ const isLast = i === allFields.length - 1;
144
+ // For EntityPath and CollectionPath, we need to provide the nested query paths
145
+ if (pathClass === "EntityPath" || pathClass === "CollectionPath") {
146
+ // Extract the target type from the queryPath generic (e.g., "EntityPath<QAddress>" -> "QAddress")
147
+ const targetMatch = prop.typeMapping.queryPath.match(/<Q(\w+)>/);
148
+ const targetInstanceName = targetMatch ? `q${targetMatch[1]}` : "undefined";
149
+ lines.push(` ${prop.name}: new ${pathClass}("${prop.odataName}", () => ${targetInstanceName})${isLast ? "" : ","}`);
150
+ } else {
151
+ lines.push(` ${prop.name}: new ${pathClass}("${prop.odataName}")${isLast ? "" : ","}`);
152
+ }
153
+ }
154
+ for (let i = 0; i < type.navigationProperties.length; i++) {
155
+ const navProp = type.navigationProperties[i];
156
+ const targetInstanceName = (0, _NamingHelper.getQueryInstanceName)((0, _NamingHelper.getClassName)(navProp.targetType));
157
+ const pathClass = navProp.isCollection ? "CollectionPath" : "EntityPath";
158
+ const isLast = i === type.navigationProperties.length - 1;
159
+ lines.push(` ${navProp.name}: new ${pathClass}("${navProp.odataName}", () => ${targetInstanceName})${isLast ? "" : ","}`);
160
+ }
161
+ lines.push(`}`);
162
+ return lines;
163
+ };
164
+ /**
165
+ * Generate a query builder factory for an entity type.
166
+ */
167
+ const generateQueryFactory = entityType => {
168
+ const lines = [];
169
+ const interfaceName = (0, _NamingHelper.getQueryInterfaceName)(entityType.name);
170
+ const instanceName = (0, _NamingHelper.getQueryInstanceName)(entityType.name);
171
+ const factoryName = (0, _NamingHelper.getQueryFactoryName)(entityType.name);
172
+ lines.push(`/**`);
173
+ lines.push(` * Creates a type-safe query builder for ${entityType.odataName} entities.`);
174
+ lines.push(` *`);
175
+ lines.push(` * @since 1.0.0`);
176
+ lines.push(` * @category constructors`);
177
+ lines.push(` */`);
178
+ lines.push(`export const ${factoryName} = (): QueryBuilder<${entityType.name}, ${interfaceName}> =>`);
179
+ lines.push(` createQueryBuilder<${entityType.name}, ${interfaceName}>(${instanceName})`);
180
+ return lines;
181
+ };
182
+ //# sourceMappingURL=QueryModelsGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryModelsGenerator.js","names":["_NamingHelper","require","generateQueryModels","dataModel","lines","queryPathTypes","collectQueryPathTypes","push","serviceName","Array","from","join","usedEntityNames","entitySet","entitySets","values","entityType","entityTypes","get","entityTypeFqName","name","length","complexType","complexTypes","line","generateQueryInterface","generateQueryInstance","generateQueryFactory","exports","types","Set","addPropertyTypes","props","prop","add","typeMapping","queryPath","split","addNavPropertyTypes","navProps","navProp","isCollection","properties","navigationProperties","type","interfaceName","getQueryInterfaceName","odataName","basePathType","pathType","startsWith","replace","targetQName","getClassName","targetType","instanceName","getQueryInstanceName","allFields","i","pathClass","isLast","targetMatch","match","targetInstanceName","factoryName","getQueryFactoryName"],"sources":["../../../src/generator/QueryModelsGenerator.ts"],"sourcesContent":[null],"mappings":";;;;;;AAYA,IAAAA,aAAA,GAAAC,OAAA;AAEA;;;;;;AAMO,MAAMC,mBAAmB,GAAIC,SAAoB,IAAY;EAClE,MAAMC,KAAK,GAAkB,EAAE;EAE/B;EACA,MAAMC,cAAc,GAAGC,qBAAqB,CAACH,SAAS,CAAC;EAEvD;EACAC,KAAK,CAACG,IAAI,CAAC,KAAK,CAAC;EACjBH,KAAK,CAACG,IAAI,CAAC,gCAAgCJ,SAAS,CAACK,WAAW,YAAY,CAAC;EAC7EJ,KAAK,CAACG,IAAI,CAAC,mCAAmC,CAAC;EAC/CH,KAAK,CAACG,IAAI,CAAC,IAAI,CAAC;EAChBH,KAAK,CAACG,IAAI,CAAC,iBAAiB,CAAC;EAC7BH,KAAK,CAACG,IAAI,CAAC,KAAK,CAAC;EACjBH,KAAK,CAACG,IAAI,CAAC,UAAU,CAAC;EACtBH,KAAK,CAACG,IAAI,CAAC,KAAKE,KAAK,CAACC,IAAI,CAACL,cAAc,CAAC,CAACM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;EAC5DP,KAAK,CAACG,IAAI,CAAC,uBAAuB,CAAC;EACnCH,KAAK,CAACG,IAAI,CAAC,qBAAqB,CAAC;EACjCH,KAAK,CAACG,IAAI,CAAC,qCAAqC,CAAC;EAEjD;EACA,MAAMK,eAAe,GAAkB,EAAE;EACzC,KAAK,MAAMC,SAAS,IAAIV,SAAS,CAACW,UAAU,CAACC,MAAM,EAAE,EAAE;IACrD,MAAMC,UAAU,GAAGb,SAAS,CAACc,WAAW,CAACC,GAAG,CAACL,SAAS,CAACM,gBAAgB,CAAC;IACxE,IAAIH,UAAU,EAAE;MACdJ,eAAe,CAACL,IAAI,CAACS,UAAU,CAACI,IAAI,CAAC;IACvC;EACF;EACA,IAAIR,eAAe,CAACS,MAAM,GAAG,CAAC,EAAE;IAC9BjB,KAAK,CAACG,IAAI,CAAC,eAAe,CAAC;IAC3BH,KAAK,CAACG,IAAI,CAAC,KAAKK,eAAe,CAACD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IAChDP,KAAK,CAACG,IAAI,CAAC,sBAAsB,CAAC;EACpC;EACAH,KAAK,CAACG,IAAI,CAAC,EAAE,CAAC;EAEd;EACA,KAAK,MAAMe,WAAW,IAAInB,SAAS,CAACoB,YAAY,CAACR,MAAM,EAAE,EAAE;IACzD,KAAK,MAAMS,IAAI,IAAIC,sBAAsB,CAACH,WAAW,CAAC,EAAElB,KAAK,CAACG,IAAI,CAACiB,IAAI,CAAC;IACxEpB,KAAK,CAACG,IAAI,CAAC,EAAE,CAAC;IACd,KAAK,MAAMiB,IAAI,IAAIE,qBAAqB,CAACJ,WAAW,CAAC,EAAElB,KAAK,CAACG,IAAI,CAACiB,IAAI,CAAC;IACvEpB,KAAK,CAACG,IAAI,CAAC,EAAE,CAAC;EAChB;EAEA;EACA,KAAK,MAAMS,UAAU,IAAIb,SAAS,CAACc,WAAW,CAACF,MAAM,EAAE,EAAE;IACvD,KAAK,MAAMS,IAAI,IAAIC,sBAAsB,CAACT,UAAU,CAAC,EAAEZ,KAAK,CAACG,IAAI,CAACiB,IAAI,CAAC;IACvEpB,KAAK,CAACG,IAAI,CAAC,EAAE,CAAC;IACd,KAAK,MAAMiB,IAAI,IAAIE,qBAAqB,CAACV,UAAU,CAAC,EAAEZ,KAAK,CAACG,IAAI,CAACiB,IAAI,CAAC;IACtEpB,KAAK,CAACG,IAAI,CAAC,EAAE,CAAC;EAChB;EAEA;EACA,KAAK,MAAMM,SAAS,IAAIV,SAAS,CAACW,UAAU,CAACC,MAAM,EAAE,EAAE;IACrD,MAAMC,UAAU,GAAGb,SAAS,CAACc,WAAW,CAACC,GAAG,CAACL,SAAS,CAACM,gBAAgB,CAAC;IACxE,IAAIH,UAAU,EAAE;MACd,KAAK,MAAMQ,IAAI,IAAIG,oBAAoB,CAACX,UAAU,CAAC,EAAEZ,KAAK,CAACG,IAAI,CAACiB,IAAI,CAAC;MACrEpB,KAAK,CAACG,IAAI,CAAC,EAAE,CAAC;IAChB;EACF;EAEA,OAAOH,KAAK,CAACO,IAAI,CAAC,IAAI,CAAC;AACzB,CAAC;AAED;;;AAAAiB,OAAA,CAAA1B,mBAAA,GAAAA,mBAAA;AAGA,MAAMI,qBAAqB,GAAIH,SAAoB,IAAiB;EAClE,MAAM0B,KAAK,GAAG,IAAIC,GAAG,EAAU;EAE/B,MAAMC,gBAAgB,GAAIC,KAAmC,IAAI;IAC/D,KAAK,MAAMC,IAAI,IAAID,KAAK,EAAE;MACxBH,KAAK,CAACK,GAAG,CAACD,IAAI,CAACE,WAAW,CAACC,SAAS,CAACC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD;EACF,CAAC;EAED,MAAMC,mBAAmB,GAAIC,QAAgD,IAAI;IAC/E,KAAK,MAAMC,OAAO,IAAID,QAAQ,EAAE;MAC9BV,KAAK,CAACK,GAAG,CAACM,OAAO,CAACC,YAAY,GAAG,gBAAgB,GAAG,YAAY,CAAC;IACnE;EACF,CAAC;EAED,KAAK,MAAMnB,WAAW,IAAInB,SAAS,CAACoB,YAAY,CAACR,MAAM,EAAE,EAAE;IACzDgB,gBAAgB,CAACT,WAAW,CAACoB,UAAU,CAAC;IACxCJ,mBAAmB,CAAChB,WAAW,CAACqB,oBAAoB,CAAC;EACvD;EAEA,KAAK,MAAM3B,UAAU,IAAIb,SAAS,CAACc,WAAW,CAACF,MAAM,EAAE,EAAE;IACvDgB,gBAAgB,CAACf,UAAU,CAAC0B,UAAU,CAAC;IACvCJ,mBAAmB,CAACtB,UAAU,CAAC2B,oBAAoB,CAAC;EACtD;EAEA,OAAOd,KAAK;AACd,CAAC;AAED;;;AAGA,MAAMJ,sBAAsB,GAC1BmB,IAAwC,IACvB;EACjB,MAAMxC,KAAK,GAAkB,EAAE;EAC/B,MAAMyC,aAAa,GAAG,IAAAC,mCAAqB,EAACF,IAAI,CAACxB,IAAI,CAAC;EAEtDhB,KAAK,CAACG,IAAI,CAAC,KAAK,CAAC;EACjBH,KAAK,CAACG,IAAI,CAAC,sBAAsBqC,IAAI,CAACG,SAAS,GAAG,CAAC;EACnD3C,KAAK,CAACG,IAAI,CAAC,IAAI,CAAC;EAChBH,KAAK,CAACG,IAAI,CAAC,iBAAiB,CAAC;EAC7BH,KAAK,CAACG,IAAI,CAAC,0BAA0B,CAAC;EACtCH,KAAK,CAACG,IAAI,CAAC,KAAK,CAAC;EACjBH,KAAK,CAACG,IAAI,CAAC,oBAAoBsC,aAAa,IAAI,CAAC;EAEjD,KAAK,MAAMZ,IAAI,IAAIW,IAAI,CAACF,UAAU,EAAE;IAClC,MAAMM,YAAY,GAAGf,IAAI,CAACE,WAAW,CAACC,SAAS;IAC/C;IACA,MAAMa,QAAQ,GAAGhB,IAAI,CAACQ,YAAY,IAAIO,YAAY,CAACE,UAAU,CAAC,aAAa,CAAC,GACxEF,YAAY,CAACG,OAAO,CAAC,aAAa,EAAE,iBAAiB,CAAC,GACtDH,YAAY;IAChB5C,KAAK,CAACG,IAAI,CAAC,cAAc0B,IAAI,CAACb,IAAI,KAAK6B,QAAQ,EAAE,CAAC;EACpD;EAEA,KAAK,MAAMT,OAAO,IAAII,IAAI,CAACD,oBAAoB,EAAE;IAC/C,MAAMS,WAAW,GAAG,IAAAN,mCAAqB,EAAC,IAAAO,0BAAY,EAACb,OAAO,CAACc,UAAU,CAAC,CAAC;IAC3E,MAAML,QAAQ,GAAGT,OAAO,CAACC,YAAY,GACjC,kBAAkBW,WAAW,GAAG,GAChC,cAAcA,WAAW,GAAG;IAChChD,KAAK,CAACG,IAAI,CAAC,cAAciC,OAAO,CAACpB,IAAI,KAAK6B,QAAQ,EAAE,CAAC;EACvD;EAEA7C,KAAK,CAACG,IAAI,CAAC,GAAG,CAAC;EAEf,OAAOH,KAAK;AACd,CAAC;AAED;;;AAGA,MAAMsB,qBAAqB,GACzBkB,IAAwC,IACvB;EACjB,MAAMxC,KAAK,GAAkB,EAAE;EAC/B,MAAMyC,aAAa,GAAG,IAAAC,mCAAqB,EAACF,IAAI,CAACxB,IAAI,CAAC;EACtD,MAAMmC,YAAY,GAAG,IAAAC,kCAAoB,EAACZ,IAAI,CAACxB,IAAI,CAAC;EAEpDhB,KAAK,CAACG,IAAI,CAAC,KAAK,CAAC;EACjBH,KAAK,CAACG,IAAI,CAAC,+BAA+BqC,IAAI,CAACG,SAAS,GAAG,CAAC;EAC5D3C,KAAK,CAACG,IAAI,CAAC,IAAI,CAAC;EAChBH,KAAK,CAACG,IAAI,CAAC,iBAAiB,CAAC;EAC7BH,KAAK,CAACG,IAAI,CAAC,0BAA0B,CAAC;EACtCH,KAAK,CAACG,IAAI,CAAC,KAAK,CAAC;EACjBH,KAAK,CAACG,IAAI,CAAC,gBAAgBgD,YAAY,KAAKV,aAAa,MAAM,CAAC;EAEhE,MAAMY,SAAS,GAAG,CAAC,GAAGb,IAAI,CAACF,UAAU,EAAE,GAAGE,IAAI,CAACD,oBAAoB,CAAC;EACpE,KAAK,IAAIe,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGd,IAAI,CAACF,UAAU,CAACrB,MAAM,EAAEqC,CAAC,EAAE,EAAE;IAC/C,MAAMzB,IAAI,GAAGW,IAAI,CAACF,UAAU,CAACgB,CAAC,CAAC;IAC/B,IAAIC,SAAS,GAAG1B,IAAI,CAACE,WAAW,CAACC,SAAS,CAACC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxD;IACA,IAAIJ,IAAI,CAACQ,YAAY,IAAIkB,SAAS,KAAK,YAAY,EAAE;MACnDA,SAAS,GAAG,gBAAgB;IAC9B;IACA,MAAMC,MAAM,GAAGF,CAAC,KAAKD,SAAS,CAACpC,MAAM,GAAG,CAAC;IAEzC;IACA,IAAIsC,SAAS,KAAK,YAAY,IAAIA,SAAS,KAAK,gBAAgB,EAAE;MAChE;MACA,MAAME,WAAW,GAAG5B,IAAI,CAACE,WAAW,CAACC,SAAS,CAAC0B,KAAK,CAAC,UAAU,CAAC;MAChE,MAAMC,kBAAkB,GAAGF,WAAW,GAAG,IAAIA,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW;MAC3EzD,KAAK,CAACG,IAAI,CACR,KAAK0B,IAAI,CAACb,IAAI,SAASuC,SAAS,KAAK1B,IAAI,CAACc,SAAS,YAAYgB,kBAAkB,IAAIH,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,CACzG;IACH,CAAC,MAAM;MACLxD,KAAK,CAACG,IAAI,CAAC,KAAK0B,IAAI,CAACb,IAAI,SAASuC,SAAS,KAAK1B,IAAI,CAACc,SAAS,KAAKa,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;IACzF;EACF;EAEA,KAAK,IAAIF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGd,IAAI,CAACD,oBAAoB,CAACtB,MAAM,EAAEqC,CAAC,EAAE,EAAE;IACzD,MAAMlB,OAAO,GAAGI,IAAI,CAACD,oBAAoB,CAACe,CAAC,CAAC;IAC5C,MAAMK,kBAAkB,GAAG,IAAAP,kCAAoB,EAAC,IAAAH,0BAAY,EAACb,OAAO,CAACc,UAAU,CAAC,CAAC;IACjF,MAAMK,SAAS,GAAGnB,OAAO,CAACC,YAAY,GAAG,gBAAgB,GAAG,YAAY;IACxE,MAAMmB,MAAM,GAAGF,CAAC,KAAKd,IAAI,CAACD,oBAAoB,CAACtB,MAAM,GAAG,CAAC;IACzDjB,KAAK,CAACG,IAAI,CACR,KAAKiC,OAAO,CAACpB,IAAI,SAASuC,SAAS,KAAKnB,OAAO,CAACO,SAAS,YAAYgB,kBAAkB,IAAIH,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,CAC/G;EACH;EAEAxD,KAAK,CAACG,IAAI,CAAC,GAAG,CAAC;EAEf,OAAOH,KAAK;AACd,CAAC;AAED;;;AAGA,MAAMuB,oBAAoB,GAAIX,UAA2B,IAAmB;EAC1E,MAAMZ,KAAK,GAAkB,EAAE;EAC/B,MAAMyC,aAAa,GAAG,IAAAC,mCAAqB,EAAC9B,UAAU,CAACI,IAAI,CAAC;EAC5D,MAAMmC,YAAY,GAAG,IAAAC,kCAAoB,EAACxC,UAAU,CAACI,IAAI,CAAC;EAC1D,MAAM4C,WAAW,GAAG,IAAAC,iCAAmB,EAACjD,UAAU,CAACI,IAAI,CAAC;EAExDhB,KAAK,CAACG,IAAI,CAAC,KAAK,CAAC;EACjBH,KAAK,CAACG,IAAI,CAAC,4CAA4CS,UAAU,CAAC+B,SAAS,YAAY,CAAC;EACxF3C,KAAK,CAACG,IAAI,CAAC,IAAI,CAAC;EAChBH,KAAK,CAACG,IAAI,CAAC,iBAAiB,CAAC;EAC7BH,KAAK,CAACG,IAAI,CAAC,2BAA2B,CAAC;EACvCH,KAAK,CAACG,IAAI,CAAC,KAAK,CAAC;EACjBH,KAAK,CAACG,IAAI,CAAC,gBAAgByD,WAAW,uBAAuBhD,UAAU,CAACI,IAAI,KAAKyB,aAAa,MAAM,CAAC;EACrGzC,KAAK,CAACG,IAAI,CAAC,wBAAwBS,UAAU,CAACI,IAAI,KAAKyB,aAAa,KAAKU,YAAY,GAAG,CAAC;EAEzF,OAAOnD,KAAK;AACd,CAAC","ignoreList":[]}
@@ -0,0 +1,258 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.generateServiceFns = void 0;
7
+ var _NamingHelper = require("./NamingHelper.js");
8
+ const V2_CONFIG = {
9
+ odataNamespace: "OData",
10
+ buildEntityPath: "buildEntityPath",
11
+ queryOptionsType: "ODataQueryOptions",
12
+ clientConfigTag: "ODataClientConfig"
13
+ };
14
+ const V4_CONFIG = {
15
+ odataNamespace: "ODataV4",
16
+ buildEntityPath: "buildEntityPathV4",
17
+ queryOptionsType: "ODataV4QueryOptions",
18
+ clientConfigTag: "ODataV4ClientConfig"
19
+ };
20
+ const getVersionConfig = version => version === "V4" ? V4_CONFIG : V2_CONFIG;
21
+ /**
22
+ * Generate all tree-shakable service function files.
23
+ *
24
+ * @since 1.0.0
25
+ * @category generation
26
+ */
27
+ const generateServiceFns = dataModel => {
28
+ const entityServices = [];
29
+ // Generate individual entity service files
30
+ for (const entitySet of dataModel.entitySets.values()) {
31
+ const entityType = dataModel.entityTypes.get(entitySet.entityTypeFqName);
32
+ if (entityType) {
33
+ const serviceClassName = (0, _NamingHelper.getServiceClassName)(entitySet.name);
34
+ entityServices.push({
35
+ fileName: `${serviceClassName}.ts`,
36
+ content: generateEntityServiceFnFile(entitySet, entityType, dataModel)
37
+ });
38
+ }
39
+ }
40
+ return {
41
+ entityServices
42
+ };
43
+ };
44
+ /**
45
+ * Generate a single entity service function file.
46
+ */
47
+ exports.generateServiceFns = generateServiceFns;
48
+ const generateEntityServiceFnFile = (entitySet, entityType, dataModel) => {
49
+ const lines = [];
50
+ const versionConfig = getVersionConfig(dataModel.version);
51
+ const serviceClassName = (0, _NamingHelper.getServiceClassName)(entitySet.name);
52
+ const entityName = entityType.name;
53
+ const idTypeName = (0, _NamingHelper.getIdTypeName)(entityName);
54
+ const editableName = (0, _NamingHelper.getEditableTypeName)(entityName);
55
+ const hasKeys = entityType.keys.length > 0;
56
+ const isV4 = dataModel.version === "V4";
57
+ // Header and imports
58
+ lines.push(`/**`);
59
+ lines.push(` * Tree-shakable ${entityName} service functions for ${dataModel.serviceName} OData ${dataModel.version}.`);
60
+ lines.push(` * Generated by odata-effect-gen.`);
61
+ lines.push(` *`);
62
+ lines.push(` * @example`);
63
+ lines.push(` * \`\`\`ts`);
64
+ lines.push(` * // Namespace import - nice autocomplete, tree-shakable`);
65
+ lines.push(` * import { ${serviceClassName} } from "@template/${dataModel.serviceName.toLowerCase()}-effect"`);
66
+ lines.push(` * const items = yield* ${serviceClassName}.getAll()`);
67
+ lines.push(` *`);
68
+ lines.push(` * // Direct import - maximum tree-shaking`);
69
+ lines.push(` * import { getAll } from "@template/${dataModel.serviceName.toLowerCase()}-effect/${serviceClassName}"`);
70
+ lines.push(` * const items = yield* getAll()`);
71
+ lines.push(` * \`\`\``);
72
+ lines.push(` *`);
73
+ lines.push(` * @since 1.0.0`);
74
+ lines.push(` */`);
75
+ lines.push(`import type * as Effect from "effect/Effect"`);
76
+ lines.push(`import * as Schema from "effect/Schema"`);
77
+ lines.push(`import type { HttpClient } from "@effect/platform"`);
78
+ lines.push(`import type * as HttpClientError from "@effect/platform/HttpClientError"`);
79
+ lines.push(`import type * as HttpBody from "@effect/platform/HttpBody"`);
80
+ lines.push(``);
81
+ // Import models
82
+ lines.push(`import {`);
83
+ lines.push(` ${entityName},`);
84
+ if (hasKeys) {
85
+ lines.push(` type ${idTypeName},`);
86
+ }
87
+ lines.push(` ${editableName}`);
88
+ lines.push(`} from "./Models.js"`);
89
+ lines.push(``);
90
+ // Import OData infrastructure (version-specific)
91
+ lines.push(`import {`);
92
+ lines.push(` ${versionConfig.odataNamespace},`);
93
+ lines.push(` ${versionConfig.buildEntityPath},`);
94
+ lines.push(` ${versionConfig.clientConfigTag},`);
95
+ lines.push(` type ${versionConfig.queryOptionsType},`);
96
+ if (!isV4) {
97
+ lines.push(` type SapError,`);
98
+ }
99
+ lines.push(` type ODataError,`);
100
+ lines.push(` type ParseError`);
101
+ lines.push(`} from "@odata-effect/odata-effect"`);
102
+ lines.push(``);
103
+ // Service error type
104
+ lines.push(`// ============================================================================`);
105
+ lines.push(`// Types`);
106
+ lines.push(`// ============================================================================`);
107
+ lines.push(``);
108
+ lines.push(`/**`);
109
+ lines.push(` * Error type for ${entityName} service operations.`);
110
+ lines.push(` *`);
111
+ lines.push(` * @since 1.0.0`);
112
+ lines.push(` * @category errors`);
113
+ lines.push(` */`);
114
+ lines.push(`export type ${serviceClassName}Error =`);
115
+ lines.push(` | HttpClientError.HttpClientError`);
116
+ lines.push(` | HttpBody.HttpBodyError`);
117
+ lines.push(` | ParseError`);
118
+ if (!isV4) {
119
+ lines.push(` | SapError`);
120
+ }
121
+ lines.push(` | ODataError`);
122
+ lines.push(``);
123
+ // Dependencies type
124
+ lines.push(`/**`);
125
+ lines.push(` * Dependencies required for ${entityName} service operations.`);
126
+ lines.push(` *`);
127
+ lines.push(` * @since 1.0.0`);
128
+ lines.push(` * @category context`);
129
+ lines.push(` */`);
130
+ lines.push(`export type ${serviceClassName}Context = ${versionConfig.clientConfigTag} | HttpClient.HttpClient`);
131
+ lines.push(``);
132
+ // ID normalizer (if entity has keys)
133
+ if (hasKeys) {
134
+ lines.push(`// ============================================================================`);
135
+ lines.push(`// Internal Helpers`);
136
+ lines.push(`// ============================================================================`);
137
+ lines.push(``);
138
+ const normalizeIdFn = `normalizeId`;
139
+ lines.push(`const ${normalizeIdFn} = (id: ${idTypeName}): string =>`);
140
+ if (entityType.keys.length === 1) {
141
+ const keyProp = entityType.keys[0];
142
+ const keyTsType = keyProp.typeMapping.tsType;
143
+ const primitiveCheck = keyTsType === "number" ? "number" : "string";
144
+ lines.push(` typeof id === "${primitiveCheck}" ? String(id) : String(id.${keyProp.name})`);
145
+ } else {
146
+ const keyParts = entityType.keys.map(k => `${k.odataName}='\${String(id.${k.name})}'`).join(",");
147
+ lines.push(` typeof id === "string" ? id : \`${keyParts}\``);
148
+ }
149
+ lines.push(``);
150
+ }
151
+ // Standalone functions
152
+ lines.push(`// ============================================================================`);
153
+ lines.push(`// Standalone Tree-Shakable Functions`);
154
+ lines.push(`// ============================================================================`);
155
+ lines.push(``);
156
+ // getAll
157
+ lines.push(`/**`);
158
+ lines.push(` * Fetch all ${entityName} entities.`);
159
+ lines.push(` *`);
160
+ lines.push(` * @since 1.0.0`);
161
+ lines.push(` * @category operations`);
162
+ lines.push(` */`);
163
+ lines.push(`export const getAll = (`);
164
+ lines.push(` options?: ${versionConfig.queryOptionsType}`);
165
+ lines.push(`): Effect.Effect<`);
166
+ lines.push(` ReadonlyArray<${entityName}>,`);
167
+ lines.push(` ${serviceClassName}Error,`);
168
+ lines.push(` ${serviceClassName}Context`);
169
+ lines.push(`> =>`);
170
+ lines.push(` ${versionConfig.odataNamespace}.getCollection("${entitySet.name}", ${entityName}, options)`);
171
+ lines.push(``);
172
+ // getById (if entity has keys)
173
+ if (hasKeys) {
174
+ const keyObj = entityType.keys.length === 1 ? `{ ${entityType.keys[0].odataName}: normalizeId(id) }` : `normalizeId(id)`;
175
+ lines.push(`/**`);
176
+ lines.push(` * Fetch a single ${entityName} by ID.`);
177
+ lines.push(` *`);
178
+ lines.push(` * @since 1.0.0`);
179
+ lines.push(` * @category operations`);
180
+ lines.push(` */`);
181
+ lines.push(`export const getById = (`);
182
+ lines.push(` id: ${idTypeName}`);
183
+ lines.push(`): Effect.Effect<`);
184
+ lines.push(` ${entityName},`);
185
+ lines.push(` ${serviceClassName}Error,`);
186
+ lines.push(` ${serviceClassName}Context`);
187
+ lines.push(`> =>`);
188
+ lines.push(` ${versionConfig.odataNamespace}.get(`);
189
+ lines.push(` ${versionConfig.buildEntityPath}("${entitySet.name}", ${keyObj}),`);
190
+ lines.push(` ${entityName}`);
191
+ lines.push(` )`);
192
+ lines.push(``);
193
+ }
194
+ // create
195
+ lines.push(`/**`);
196
+ lines.push(` * Create a new ${entityName} entity.`);
197
+ lines.push(` *`);
198
+ lines.push(` * @since 1.0.0`);
199
+ lines.push(` * @category operations`);
200
+ lines.push(` */`);
201
+ lines.push(`export const create = (`);
202
+ lines.push(` entity: ${editableName}`);
203
+ lines.push(`): Effect.Effect<`);
204
+ lines.push(` ${entityName},`);
205
+ lines.push(` ${serviceClassName}Error,`);
206
+ lines.push(` ${serviceClassName}Context`);
207
+ lines.push(`> =>`);
208
+ lines.push(` ${versionConfig.odataNamespace}.post("${entitySet.name}", entity, ${editableName}, ${entityName})`);
209
+ lines.push(``);
210
+ // update (if entity has keys)
211
+ if (hasKeys) {
212
+ const keyObj = entityType.keys.length === 1 ? `{ ${entityType.keys[0].odataName}: normalizeId(id) }` : `normalizeId(id)`;
213
+ lines.push(`/**`);
214
+ lines.push(` * Update an existing ${entityName} entity.`);
215
+ lines.push(` *`);
216
+ lines.push(` * @since 1.0.0`);
217
+ lines.push(` * @category operations`);
218
+ lines.push(` */`);
219
+ lines.push(`export const update = (`);
220
+ lines.push(` id: ${idTypeName},`);
221
+ lines.push(` entity: Partial<${editableName}>`);
222
+ lines.push(`): Effect.Effect<`);
223
+ lines.push(` void,`);
224
+ lines.push(` ${serviceClassName}Error,`);
225
+ lines.push(` ${serviceClassName}Context`);
226
+ lines.push(`> =>`);
227
+ lines.push(` ${versionConfig.odataNamespace}.patch(`);
228
+ lines.push(` ${versionConfig.buildEntityPath}("${entitySet.name}", ${keyObj}),`);
229
+ lines.push(` entity,`);
230
+ lines.push(` Schema.partial(${editableName})`);
231
+ lines.push(` )`);
232
+ lines.push(``);
233
+ // delete
234
+ lines.push(`/**`);
235
+ lines.push(` * Delete a ${entityName} entity.`);
236
+ lines.push(` *`);
237
+ lines.push(` * @since 1.0.0`);
238
+ lines.push(` * @category operations`);
239
+ lines.push(` */`);
240
+ lines.push(`export const del = (`);
241
+ lines.push(` id: ${idTypeName}`);
242
+ lines.push(`): Effect.Effect<`);
243
+ lines.push(` void,`);
244
+ lines.push(` ${serviceClassName}Error,`);
245
+ lines.push(` ${serviceClassName}Context`);
246
+ lines.push(`> =>`);
247
+ lines.push(` ${versionConfig.odataNamespace}.del(`);
248
+ lines.push(` ${versionConfig.buildEntityPath}("${entitySet.name}", ${keyObj})`);
249
+ lines.push(` )`);
250
+ lines.push(``);
251
+ // Alias for nice naming
252
+ lines.push(`// Alias for nice naming`);
253
+ lines.push(`export { del as delete }`);
254
+ lines.push(``);
255
+ }
256
+ return lines.join("\n");
257
+ };
258
+ //# sourceMappingURL=ServiceFnGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceFnGenerator.js","names":["_NamingHelper","require","V2_CONFIG","odataNamespace","buildEntityPath","queryOptionsType","clientConfigTag","V4_CONFIG","getVersionConfig","version","generateServiceFns","dataModel","entityServices","entitySet","entitySets","values","entityType","entityTypes","get","entityTypeFqName","serviceClassName","getServiceClassName","name","push","fileName","content","generateEntityServiceFnFile","exports","lines","versionConfig","entityName","idTypeName","getIdTypeName","editableName","getEditableTypeName","hasKeys","keys","length","isV4","serviceName","toLowerCase","normalizeIdFn","keyProp","keyTsType","typeMapping","tsType","primitiveCheck","keyParts","map","k","odataName","join","keyObj"],"sources":["../../../src/generator/ServiceFnGenerator.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getPromiseServiceName = exports.generatePromiseServiceFns = void 0;
7
+ var _NamingHelper = require("./NamingHelper.js");
8
+ const V2_CONFIG = {
9
+ runtimeType: "ODataRuntime",
10
+ runtimeImport: "type ODataRuntime"
11
+ };
12
+ const V4_CONFIG = {
13
+ runtimeType: "ODataV4Runtime",
14
+ runtimeImport: "type ODataV4Runtime"
15
+ };
16
+ const getVersionConfig = version => version === "V4" ? V4_CONFIG : V2_CONFIG;
17
+ /**
18
+ * Get the Promise service name (e.g., "ProductsServicePromise").
19
+ */
20
+ const getPromiseServiceName = entitySetName => `${(0, _NamingHelper.getServiceClassName)(entitySetName)}Promise`;
21
+ /**
22
+ * Generate all Promise-based service function files.
23
+ *
24
+ * @since 1.0.0
25
+ * @category generation
26
+ */
27
+ exports.getPromiseServiceName = getPromiseServiceName;
28
+ const generatePromiseServiceFns = dataModel => {
29
+ const entityServices = [];
30
+ // Generate individual Promise service files
31
+ for (const entitySet of dataModel.entitySets.values()) {
32
+ const entityType = dataModel.entityTypes.get(entitySet.entityTypeFqName);
33
+ if (entityType) {
34
+ const promiseServiceName = getPromiseServiceName(entitySet.name);
35
+ entityServices.push({
36
+ fileName: `${promiseServiceName}.ts`,
37
+ content: generatePromiseServiceFile(entitySet, entityType, dataModel)
38
+ });
39
+ }
40
+ }
41
+ return {
42
+ entityServices
43
+ };
44
+ };
45
+ /**
46
+ * Generate a single Promise service file.
47
+ */
48
+ exports.generatePromiseServiceFns = generatePromiseServiceFns;
49
+ const generatePromiseServiceFile = (entitySet, entityType, dataModel) => {
50
+ const lines = [];
51
+ const versionConfig = getVersionConfig(dataModel.version);
52
+ const serviceClassName = (0, _NamingHelper.getServiceClassName)(entitySet.name);
53
+ const promiseServiceName = getPromiseServiceName(entitySet.name);
54
+ const entityName = entityType.name;
55
+ const idTypeName = (0, _NamingHelper.getIdTypeName)(entityName);
56
+ const editableName = (0, _NamingHelper.getEditableTypeName)(entityName);
57
+ const hasKeys = entityType.keys.length > 0;
58
+ // Header and imports
59
+ lines.push(`/**`);
60
+ lines.push(` * Promise-based ${entityName} service functions for ${dataModel.serviceName} OData ${dataModel.version}.`);
61
+ lines.push(` * Generated by odata-effect-gen.`);
62
+ lines.push(` *`);
63
+ lines.push(` * These functions wrap the Effect-based service functions for use in`);
64
+ lines.push(` * non-Effect environments. They take a runtime as the first argument.`);
65
+ lines.push(` *`);
66
+ lines.push(` * @example`);
67
+ lines.push(` * \`\`\`ts`);
68
+ lines.push(` * import { ${versionConfig.runtimeType.replace("OData", "createOData").replace("Runtime", "Runtime")} } from "@odata-effect/odata-effect-promise"`);
69
+ lines.push(` * import { ${promiseServiceName} } from "@template/${dataModel.serviceName.toLowerCase()}-effect"`);
70
+ lines.push(` *`);
71
+ lines.push(` * const runtime = ${versionConfig.runtimeType.replace("OData", "createOData").replace("Runtime", "Runtime")}({`);
72
+ lines.push(` * baseUrl: "https://server.com",`);
73
+ lines.push(` * servicePath: "/odata/${dataModel.version.toLowerCase()}/"`);
74
+ lines.push(` * })`);
75
+ lines.push(` *`);
76
+ lines.push(` * const items = await ${promiseServiceName}.getAll(runtime)`);
77
+ lines.push(` * await runtime.dispose()`);
78
+ lines.push(` * \`\`\``);
79
+ lines.push(` *`);
80
+ lines.push(` * @since 1.0.0`);
81
+ lines.push(` */`);
82
+ lines.push(`import { ${versionConfig.runtimeImport} } from "@odata-effect/odata-effect-promise"`);
83
+ lines.push(`import * as ${serviceClassName} from "./${serviceClassName}.js"`);
84
+ lines.push(``);
85
+ // Import models
86
+ lines.push(`import {`);
87
+ lines.push(` ${entityName},`);
88
+ if (hasKeys) {
89
+ lines.push(` type ${idTypeName},`);
90
+ }
91
+ lines.push(` ${editableName}`);
92
+ lines.push(`} from "./Models.js"`);
93
+ lines.push(``);
94
+ // Query options import
95
+ const queryOptionsType = dataModel.version === "V4" ? "ODataV4QueryOptions" : "ODataQueryOptions";
96
+ lines.push(`import type { ${queryOptionsType} } from "@odata-effect/odata-effect"`);
97
+ lines.push(``);
98
+ // Re-export runtime type for convenience
99
+ lines.push(`// Re-export runtime type for convenience`);
100
+ lines.push(`export type { ${versionConfig.runtimeType} } from "@odata-effect/odata-effect-promise"`);
101
+ lines.push(``);
102
+ lines.push(`// ============================================================================`);
103
+ lines.push(`// Promise-based Functions`);
104
+ lines.push(`// ============================================================================`);
105
+ lines.push(``);
106
+ // getAll
107
+ lines.push(`/**`);
108
+ lines.push(` * Fetch all ${entityName} entities.`);
109
+ lines.push(` *`);
110
+ lines.push(` * @since 1.0.0`);
111
+ lines.push(` * @category operations`);
112
+ lines.push(` */`);
113
+ lines.push(`export const getAll = (`);
114
+ lines.push(` runtime: ${versionConfig.runtimeType},`);
115
+ lines.push(` options?: ${queryOptionsType}`);
116
+ lines.push(`): Promise<ReadonlyArray<${entityName}>> =>`);
117
+ lines.push(` runtime.runPromise(${serviceClassName}.getAll(options))`);
118
+ lines.push(``);
119
+ // getById (if entity has keys)
120
+ if (hasKeys) {
121
+ lines.push(`/**`);
122
+ lines.push(` * Fetch a single ${entityName} by ID.`);
123
+ lines.push(` *`);
124
+ lines.push(` * @since 1.0.0`);
125
+ lines.push(` * @category operations`);
126
+ lines.push(` */`);
127
+ lines.push(`export const getById = (`);
128
+ lines.push(` runtime: ${versionConfig.runtimeType},`);
129
+ lines.push(` id: ${idTypeName}`);
130
+ lines.push(`): Promise<${entityName}> =>`);
131
+ lines.push(` runtime.runPromise(${serviceClassName}.getById(id))`);
132
+ lines.push(``);
133
+ }
134
+ // create
135
+ lines.push(`/**`);
136
+ lines.push(` * Create a new ${entityName} entity.`);
137
+ lines.push(` *`);
138
+ lines.push(` * @since 1.0.0`);
139
+ lines.push(` * @category operations`);
140
+ lines.push(` */`);
141
+ lines.push(`export const create = (`);
142
+ lines.push(` runtime: ${versionConfig.runtimeType},`);
143
+ lines.push(` entity: ${editableName}`);
144
+ lines.push(`): Promise<${entityName}> =>`);
145
+ lines.push(` runtime.runPromise(${serviceClassName}.create(entity))`);
146
+ lines.push(``);
147
+ // update (if entity has keys)
148
+ if (hasKeys) {
149
+ lines.push(`/**`);
150
+ lines.push(` * Update an existing ${entityName} entity.`);
151
+ lines.push(` *`);
152
+ lines.push(` * @since 1.0.0`);
153
+ lines.push(` * @category operations`);
154
+ lines.push(` */`);
155
+ lines.push(`export const update = (`);
156
+ lines.push(` runtime: ${versionConfig.runtimeType},`);
157
+ lines.push(` id: ${idTypeName},`);
158
+ lines.push(` entity: Partial<${editableName}>`);
159
+ lines.push(`): Promise<void> =>`);
160
+ lines.push(` runtime.runPromise(${serviceClassName}.update(id, entity))`);
161
+ lines.push(``);
162
+ // delete
163
+ lines.push(`/**`);
164
+ lines.push(` * Delete a ${entityName} entity.`);
165
+ lines.push(` *`);
166
+ lines.push(` * @since 1.0.0`);
167
+ lines.push(` * @category operations`);
168
+ lines.push(` */`);
169
+ lines.push(`export const del = (`);
170
+ lines.push(` runtime: ${versionConfig.runtimeType},`);
171
+ lines.push(` id: ${idTypeName}`);
172
+ lines.push(`): Promise<void> =>`);
173
+ lines.push(` runtime.runPromise(${serviceClassName}.del(id))`);
174
+ lines.push(``);
175
+ // Alias for nice naming
176
+ lines.push(`// Alias for nice naming`);
177
+ lines.push(`export { del as delete }`);
178
+ lines.push(``);
179
+ }
180
+ return lines.join("\n");
181
+ };
182
+ //# sourceMappingURL=ServiceFnPromiseGenerator.js.map