@odata-effect/odata-effect-generator 0.1.2 → 0.3.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 (74) hide show
  1. package/README.md +232 -5
  2. package/dist/cjs/Cli.js +5 -1
  3. package/dist/cjs/Cli.js.map +1 -1
  4. package/dist/cjs/generator/Generator.js +35 -25
  5. package/dist/cjs/generator/Generator.js.map +1 -1
  6. package/dist/cjs/generator/IndexGenerator.js +29 -80
  7. package/dist/cjs/generator/IndexGenerator.js.map +1 -1
  8. package/dist/cjs/generator/ModelsGenerator.js +2 -5
  9. package/dist/cjs/generator/ModelsGenerator.js.map +1 -1
  10. package/dist/cjs/generator/NamingHelper.js +4 -1
  11. package/dist/cjs/generator/NamingHelper.js.map +1 -1
  12. package/dist/cjs/generator/NavigationGenerator.js +370 -0
  13. package/dist/cjs/generator/NavigationGenerator.js.map +1 -0
  14. package/dist/cjs/generator/OperationsGenerator.js +384 -0
  15. package/dist/cjs/generator/OperationsGenerator.js.map +1 -0
  16. package/dist/cjs/generator/QueryModelsGenerator.js +2 -2
  17. package/dist/cjs/generator/QueryModelsGenerator.js.map +1 -1
  18. package/dist/cjs/generator/ServiceFnGenerator.js +102 -224
  19. package/dist/cjs/generator/ServiceFnGenerator.js.map +1 -1
  20. package/dist/cjs/index.js +3 -3
  21. package/dist/dts/Cli.d.ts.map +1 -1
  22. package/dist/dts/generator/Generator.d.ts +2 -0
  23. package/dist/dts/generator/Generator.d.ts.map +1 -1
  24. package/dist/dts/generator/IndexGenerator.d.ts.map +1 -1
  25. package/dist/dts/generator/NamingHelper.d.ts.map +1 -1
  26. package/dist/dts/generator/NavigationGenerator.d.ts +55 -0
  27. package/dist/dts/generator/NavigationGenerator.d.ts.map +1 -0
  28. package/dist/dts/generator/OperationsGenerator.d.ts +50 -0
  29. package/dist/dts/generator/OperationsGenerator.d.ts.map +1 -0
  30. package/dist/dts/generator/ServiceFnGenerator.d.ts +10 -11
  31. package/dist/dts/generator/ServiceFnGenerator.d.ts.map +1 -1
  32. package/dist/dts/index.d.ts +4 -4
  33. package/dist/dts/index.d.ts.map +1 -1
  34. package/dist/esm/Cli.js +5 -1
  35. package/dist/esm/Cli.js.map +1 -1
  36. package/dist/esm/generator/Generator.js +35 -25
  37. package/dist/esm/generator/Generator.js.map +1 -1
  38. package/dist/esm/generator/IndexGenerator.js +29 -80
  39. package/dist/esm/generator/IndexGenerator.js.map +1 -1
  40. package/dist/esm/generator/ModelsGenerator.js +2 -5
  41. package/dist/esm/generator/ModelsGenerator.js.map +1 -1
  42. package/dist/esm/generator/NamingHelper.js +4 -1
  43. package/dist/esm/generator/NamingHelper.js.map +1 -1
  44. package/dist/esm/generator/NavigationGenerator.js +362 -0
  45. package/dist/esm/generator/NavigationGenerator.js.map +1 -0
  46. package/dist/esm/generator/OperationsGenerator.js +375 -0
  47. package/dist/esm/generator/OperationsGenerator.js.map +1 -0
  48. package/dist/esm/generator/QueryModelsGenerator.js +2 -2
  49. package/dist/esm/generator/QueryModelsGenerator.js.map +1 -1
  50. package/dist/esm/generator/ServiceFnGenerator.js +102 -224
  51. package/dist/esm/generator/ServiceFnGenerator.js.map +1 -1
  52. package/dist/esm/index.js +4 -4
  53. package/dist/esm/index.js.map +1 -1
  54. package/generator/NavigationGenerator/package.json +6 -0
  55. package/generator/OperationsGenerator/package.json +6 -0
  56. package/package.json +17 -9
  57. package/src/Cli.ts +15 -2
  58. package/src/generator/Generator.ts +44 -23
  59. package/src/generator/IndexGenerator.ts +29 -80
  60. package/src/generator/ModelsGenerator.ts +2 -5
  61. package/src/generator/NamingHelper.ts +8 -1
  62. package/src/generator/NavigationGenerator.ts +485 -0
  63. package/src/generator/OperationsGenerator.ts +507 -0
  64. package/src/generator/QueryModelsGenerator.ts +2 -2
  65. package/src/generator/ServiceFnGenerator.ts +117 -265
  66. package/src/index.ts +4 -4
  67. package/dist/cjs/generator/ServiceFnPromiseGenerator.js +0 -183
  68. package/dist/cjs/generator/ServiceFnPromiseGenerator.js.map +0 -1
  69. package/dist/dts/generator/ServiceFnPromiseGenerator.d.ts +0 -40
  70. package/dist/dts/generator/ServiceFnPromiseGenerator.d.ts.map +0 -1
  71. package/dist/esm/generator/ServiceFnPromiseGenerator.js +0 -175
  72. package/dist/esm/generator/ServiceFnPromiseGenerator.js.map +0 -1
  73. package/generator/ServiceFnPromiseGenerator/package.json +0 -6
  74. package/src/generator/ServiceFnPromiseGenerator.ts +0 -243
@@ -1,262 +1,140 @@
1
1
  import { getEditableTypeName, getIdTypeName, getServiceClassName } from "./NamingHelper.js";
2
- const V2_CONFIG = {
3
- odataNamespace: "OData",
4
- buildEntityPath: "buildEntityPath",
5
- queryOptionsType: "ODataQueryOptions",
6
- clientConfigTag: "ODataClientConfig"
7
- };
8
- const V4_CONFIG = {
9
- odataNamespace: "ODataV4",
10
- buildEntityPath: "buildEntityPathV4",
11
- queryOptionsType: "ODataV4QueryOptions",
12
- clientConfigTag: "ODataV4ClientConfig"
13
- };
14
- const getVersionConfig = version => version === "V4" ? V4_CONFIG : V2_CONFIG;
15
2
  /**
16
- * Generate all tree-shakable service function files.
3
+ * Generate the Services.ts file using crud factory.
17
4
  *
18
5
  * @since 1.0.0
19
6
  * @category generation
20
7
  */
21
8
  export const generateServiceFns = dataModel => {
22
- const entityServices = [];
23
- // Generate individual entity service files
24
- for (const entitySet of dataModel.entitySets.values()) {
25
- const entityType = dataModel.entityTypes.get(entitySet.entityTypeFqName);
26
- if (entityType) {
27
- const serviceClassName = getServiceClassName(entitySet.name);
28
- entityServices.push({
29
- fileName: `${serviceClassName}.ts`,
30
- content: generateEntityServiceFnFile(entitySet, entityType, dataModel)
31
- });
32
- }
33
- }
9
+ const content = generateServicesFile(dataModel);
34
10
  return {
35
- entityServices
11
+ servicesFile: {
12
+ fileName: "Services.ts",
13
+ content
14
+ }
36
15
  };
37
16
  };
38
17
  /**
39
- * Generate a single entity service function file.
18
+ * Generate the Services.ts file content.
40
19
  */
41
- const generateEntityServiceFnFile = (entitySet, entityType, dataModel) => {
20
+ const generateServicesFile = dataModel => {
42
21
  const lines = [];
43
- const versionConfig = getVersionConfig(dataModel.version);
44
- const serviceClassName = getServiceClassName(entitySet.name);
45
- const entityName = entityType.name;
46
- const idTypeName = getIdTypeName(entityName);
47
- const editableName = getEditableTypeName(entityName);
48
- const hasKeys = entityType.keys.length > 0;
49
22
  const isV4 = dataModel.version === "V4";
50
- // Header and imports
23
+ const crudImportPath = isV4 ? "@odata-effect/odata-effect/CrudV4" : "@odata-effect/odata-effect/Crud";
24
+ // Collect all entity sets with their types
25
+ const entitySets = [];
26
+ for (const entitySet of dataModel.entitySets.values()) {
27
+ const entityType = dataModel.entityTypes.get(entitySet.entityTypeFqName);
28
+ if (entityType) {
29
+ entitySets.push({
30
+ entitySet,
31
+ entityType
32
+ });
33
+ }
34
+ }
35
+ // Header
51
36
  lines.push(`/**`);
52
- lines.push(` * Tree-shakable ${entityName} service functions for ${dataModel.serviceName} OData ${dataModel.version}.`);
37
+ lines.push(` * Entity services for ${dataModel.serviceName} OData ${dataModel.version}.`);
53
38
  lines.push(` * Generated by odata-effect-gen.`);
54
39
  lines.push(` *`);
55
- lines.push(` * @example`);
56
- lines.push(` * \`\`\`ts`);
57
- lines.push(` * // Namespace import - nice autocomplete, tree-shakable`);
58
- lines.push(` * import { ${serviceClassName} } from "@template/${dataModel.serviceName.toLowerCase()}-effect"`);
59
- lines.push(` * const items = yield* ${serviceClassName}.getAll()`);
60
- lines.push(` *`);
61
- lines.push(` * // Direct import - maximum tree-shaking`);
62
- lines.push(` * import { getAll } from "@template/${dataModel.serviceName.toLowerCase()}-effect/${serviceClassName}"`);
63
- lines.push(` * const items = yield* getAll()`);
64
- lines.push(` * \`\`\``);
40
+ lines.push(` * Uses the crud factory for minimal generated code.`);
65
41
  lines.push(` *`);
66
42
  lines.push(` * @since 1.0.0`);
67
43
  lines.push(` */`);
68
- lines.push(`import type * as Effect from "effect/Effect"`);
69
- lines.push(`import * as Schema from "effect/Schema"`);
70
- lines.push(`import type { HttpClient } from "@effect/platform"`);
71
- lines.push(`import type * as HttpClientError from "@effect/platform/HttpClientError"`);
72
- lines.push(`import type * as HttpBody from "@effect/platform/HttpBody"`);
44
+ lines.push(`import { crud } from "${crudImportPath}"`);
73
45
  lines.push(``);
74
- // Import models
75
- lines.push(`import {`);
76
- lines.push(` ${entityName},`);
77
- if (hasKeys) {
78
- lines.push(` type ${idTypeName},`);
79
- }
80
- lines.push(` ${editableName}`);
81
- lines.push(`} from "./Models.js"`);
82
- lines.push(``);
83
- // Import OData infrastructure (version-specific) using subpath imports for tree-shaking
84
- if (isV4) {
85
- lines.push(`import * as ${versionConfig.odataNamespace} from "@odata-effect/odata-effect/ODataV4"`);
86
- lines.push(`import {`);
87
- lines.push(` type ${versionConfig.clientConfigTag},`);
88
- lines.push(` ${versionConfig.buildEntityPath},`);
89
- lines.push(` type ${versionConfig.queryOptionsType}`);
90
- lines.push(`} from "@odata-effect/odata-effect/ODataV4Client"`);
91
- } else {
92
- lines.push(`import * as ${versionConfig.odataNamespace} from "@odata-effect/odata-effect/OData"`);
93
- lines.push(`import {`);
94
- lines.push(` type ${versionConfig.clientConfigTag},`);
95
- lines.push(` ${versionConfig.buildEntityPath},`);
96
- lines.push(` type ${versionConfig.queryOptionsType}`);
97
- lines.push(`} from "@odata-effect/odata-effect/ODataClient"`);
46
+ // Import all entity types
47
+ const modelImports = [];
48
+ for (const {
49
+ entityType
50
+ } of entitySets) {
51
+ modelImports.push(entityType.name);
52
+ if (entityType.keys.length > 0) {
53
+ modelImports.push(`type ${getIdTypeName(entityType.name)}`);
54
+ }
55
+ modelImports.push(getEditableTypeName(entityType.name));
98
56
  }
99
57
  lines.push(`import {`);
100
- if (!isV4) {
101
- lines.push(` type SapError,`);
58
+ for (let i = 0; i < modelImports.length; i++) {
59
+ const isLast = i === modelImports.length - 1;
60
+ lines.push(` ${modelImports[i]}${isLast ? "" : ","}`);
102
61
  }
103
- lines.push(` type ODataError,`);
104
- lines.push(` type ParseError`);
105
- lines.push(`} from "@odata-effect/odata-effect/Errors"`);
62
+ lines.push(`} from "./Models"`);
106
63
  lines.push(``);
107
- // Service error type
108
- lines.push(`// ============================================================================`);
109
- lines.push(`// Types`);
110
- lines.push(`// ============================================================================`);
64
+ // Re-export types from the crud module
65
+ lines.push(`// Re-export types for convenience`);
66
+ lines.push(`export type { CrudError, CrudContext, CrudService } from "${crudImportPath}"`);
111
67
  lines.push(``);
112
- lines.push(`/**`);
113
- lines.push(` * Error type for ${entityName} service operations.`);
114
- lines.push(` *`);
115
- lines.push(` * @since 1.0.0`);
116
- lines.push(` * @category errors`);
117
- lines.push(` */`);
118
- lines.push(`export type ${serviceClassName}Error =`);
119
- lines.push(` | HttpClientError.HttpClientError`);
120
- lines.push(` | HttpBody.HttpBodyError`);
121
- lines.push(` | ParseError`);
122
- if (!isV4) {
123
- lines.push(` | SapError`);
124
- }
125
- lines.push(` | ODataError`);
126
- lines.push(``);
127
- // Dependencies type
128
- lines.push(`/**`);
129
- lines.push(` * Dependencies required for ${entityName} service operations.`);
130
- lines.push(` *`);
131
- lines.push(` * @since 1.0.0`);
132
- lines.push(` * @category context`);
133
- lines.push(` */`);
134
- lines.push(`export type ${serviceClassName}Context = ${versionConfig.clientConfigTag} | HttpClient.HttpClient`);
135
- lines.push(``);
136
- // ID normalizer (if entity has keys)
137
- if (hasKeys) {
138
- lines.push(`// ============================================================================`);
139
- lines.push(`// Internal Helpers`);
140
- lines.push(`// ============================================================================`);
141
- lines.push(``);
142
- const normalizeIdFn = `normalizeId`;
143
- lines.push(`const ${normalizeIdFn} = (id: ${idTypeName}): string =>`);
144
- if (entityType.keys.length === 1) {
145
- const keyProp = entityType.keys[0];
146
- const keyTsType = keyProp.typeMapping.tsType;
147
- const primitiveCheck = keyTsType === "number" ? "number" : "string";
148
- lines.push(` typeof id === "${primitiveCheck}" ? String(id) : String(id.${keyProp.name})`);
149
- } else {
150
- const keyParts = entityType.keys.map(k => `${k.odataName}='\${String(id.${k.name})}'`).join(",");
151
- lines.push(` typeof id === "string" ? id : \`${keyParts}\``);
152
- }
153
- lines.push(``);
154
- }
155
- // Standalone functions
68
+ // Generate each service
156
69
  lines.push(`// ============================================================================`);
157
- lines.push(`// Standalone Tree-Shakable Functions`);
70
+ lines.push(`// Entity Services`);
158
71
  lines.push(`// ============================================================================`);
159
72
  lines.push(``);
160
- // getAll
161
- lines.push(`/**`);
162
- lines.push(` * Fetch all ${entityName} entities.`);
163
- lines.push(` *`);
164
- lines.push(` * @since 1.0.0`);
165
- lines.push(` * @category operations`);
166
- lines.push(` */`);
167
- lines.push(`export const getAll = (`);
168
- lines.push(` options?: ${versionConfig.queryOptionsType}`);
169
- lines.push(`): Effect.Effect<`);
170
- lines.push(` ReadonlyArray<${entityName}>,`);
171
- lines.push(` ${serviceClassName}Error,`);
172
- lines.push(` ${serviceClassName}Context`);
173
- lines.push(`> =>`);
174
- lines.push(` ${versionConfig.odataNamespace}.getCollection("${entitySet.name}", ${entityName}, options)`);
175
- lines.push(``);
176
- // getById (if entity has keys)
177
- if (hasKeys) {
178
- const keyObj = entityType.keys.length === 1 ? `{ ${entityType.keys[0].odataName}: normalizeId(id) }` : `normalizeId(id)`;
73
+ for (const {
74
+ entitySet,
75
+ entityType
76
+ } of entitySets) {
77
+ const serviceClassName = getServiceClassName(entitySet.name);
78
+ const entityName = entityType.name;
79
+ const editableName = getEditableTypeName(entityName);
80
+ const hasKeys = entityType.keys.length > 0;
179
81
  lines.push(`/**`);
180
- lines.push(` * Fetch a single ${entityName} by ID.`);
82
+ lines.push(` * CRUD service for ${entityName} entities.`);
181
83
  lines.push(` *`);
182
84
  lines.push(` * @since 1.0.0`);
183
- lines.push(` * @category operations`);
85
+ lines.push(` * @category services`);
184
86
  lines.push(` */`);
185
- lines.push(`export const getById = (`);
186
- lines.push(` id: ${idTypeName}`);
187
- lines.push(`): Effect.Effect<`);
188
- lines.push(` ${entityName},`);
189
- lines.push(` ${serviceClassName}Error,`);
190
- lines.push(` ${serviceClassName}Context`);
191
- lines.push(`> =>`);
192
- lines.push(` ${versionConfig.odataNamespace}.get(`);
193
- lines.push(` ${versionConfig.buildEntityPath}("${entitySet.name}", ${keyObj}),`);
194
- lines.push(` ${entityName}`);
195
- lines.push(` )`);
196
- lines.push(``);
197
- }
198
- // create
199
- lines.push(`/**`);
200
- lines.push(` * Create a new ${entityName} entity.`);
201
- lines.push(` *`);
202
- lines.push(` * @since 1.0.0`);
203
- lines.push(` * @category operations`);
204
- lines.push(` */`);
205
- lines.push(`export const create = (`);
206
- lines.push(` entity: ${editableName}`);
207
- lines.push(`): Effect.Effect<`);
208
- lines.push(` ${entityName},`);
209
- lines.push(` ${serviceClassName}Error,`);
210
- lines.push(` ${serviceClassName}Context`);
211
- lines.push(`> =>`);
212
- lines.push(` ${versionConfig.odataNamespace}.post("${entitySet.name}", entity, ${editableName}, ${entityName})`);
213
- lines.push(``);
214
- // update (if entity has keys)
215
- if (hasKeys) {
216
- const keyObj = entityType.keys.length === 1 ? `{ ${entityType.keys[0].odataName}: normalizeId(id) }` : `normalizeId(id)`;
217
- lines.push(`/**`);
218
- lines.push(` * Update an existing ${entityName} entity.`);
219
- lines.push(` *`);
220
- lines.push(` * @since 1.0.0`);
221
- lines.push(` * @category operations`);
222
- lines.push(` */`);
223
- lines.push(`export const update = (`);
224
- lines.push(` id: ${idTypeName},`);
225
- lines.push(` entity: Partial<${editableName}>`);
226
- lines.push(`): Effect.Effect<`);
227
- lines.push(` void,`);
228
- lines.push(` ${serviceClassName}Error,`);
229
- lines.push(` ${serviceClassName}Context`);
230
- lines.push(`> =>`);
231
- lines.push(` ${versionConfig.odataNamespace}.patch(`);
232
- lines.push(` ${versionConfig.buildEntityPath}("${entitySet.name}", ${keyObj}),`);
233
- lines.push(` entity,`);
234
- lines.push(` Schema.partial(${editableName})`);
235
- lines.push(` )`);
236
- lines.push(``);
237
- // delete
238
- lines.push(`/**`);
239
- lines.push(` * Delete a ${entityName} entity.`);
240
- lines.push(` *`);
241
- lines.push(` * @since 1.0.0`);
242
- lines.push(` * @category operations`);
243
- lines.push(` */`);
244
- lines.push(`export const del = (`);
245
- lines.push(` id: ${idTypeName}`);
246
- lines.push(`): Effect.Effect<`);
247
- lines.push(` void,`);
248
- lines.push(` ${serviceClassName}Error,`);
249
- lines.push(` ${serviceClassName}Context`);
250
- lines.push(`> =>`);
251
- lines.push(` ${versionConfig.odataNamespace}.del(`);
252
- lines.push(` ${versionConfig.buildEntityPath}("${entitySet.name}", ${keyObj})`);
253
- lines.push(` )`);
254
- lines.push(``);
255
- // Alias for nice naming
256
- lines.push(`// Alias for nice naming`);
257
- lines.push(`export { del as delete }`);
87
+ if (hasKeys) {
88
+ lines.push(`export const ${serviceClassName} = crud({`);
89
+ lines.push(` path: "${entitySet.name}",`);
90
+ lines.push(` schema: ${entityName},`);
91
+ lines.push(` editableSchema: ${editableName},`);
92
+ lines.push(` idToKey: ${generateIdToKeyFunction(entityType, dataModel.version)}`);
93
+ lines.push(`})`);
94
+ } else {
95
+ // Entity without keys - can only getAll and create
96
+ lines.push(`export const ${serviceClassName} = crud({`);
97
+ lines.push(` path: "${entitySet.name}",`);
98
+ lines.push(` schema: ${entityName},`);
99
+ lines.push(` editableSchema: ${editableName},`);
100
+ lines.push(` idToKey: (_id: never) => { throw new Error("Entity has no keys") }`);
101
+ lines.push(`})`);
102
+ }
258
103
  lines.push(``);
259
104
  }
260
105
  return lines.join("\n");
261
106
  };
107
+ /**
108
+ * Generate the idToKey function for an entity type.
109
+ */
110
+ const generateIdToKeyFunction = (entityType, version) => {
111
+ const idTypeName = getIdTypeName(entityType.name);
112
+ const isV4 = version === "V4";
113
+ if (entityType.keys.length === 1) {
114
+ const keyProp = entityType.keys[0];
115
+ const keyTsType = keyProp.typeMapping.tsType;
116
+ const primitiveCheck = keyTsType === "number" ? "number" : "string";
117
+ if (isV4) {
118
+ // V4 can use number keys directly
119
+ if (keyTsType === "number") {
120
+ return `(id: ${idTypeName}) => typeof id === "number" ? id : id.${keyProp.name}`;
121
+ } else {
122
+ return `(id: ${idTypeName}) => typeof id === "string" ? { ${keyProp.odataName}: id } : { ${keyProp.odataName}: id.${keyProp.name} }`;
123
+ }
124
+ } else {
125
+ // V2 needs string keys
126
+ return `(id: ${idTypeName}) => typeof id === "${primitiveCheck}" ? { ${keyProp.odataName}: String(id) } : { ${keyProp.odataName}: String(id.${keyProp.name}) }`;
127
+ }
128
+ } else {
129
+ // Composite key
130
+ const keyMapping = entityType.keys.map(k => {
131
+ if (isV4) {
132
+ return `${k.odataName}: id.${k.name}`;
133
+ } else {
134
+ return `${k.odataName}: String(id.${k.name})`;
135
+ }
136
+ }).join(", ");
137
+ return `(id: ${idTypeName}) => ({ ${keyMapping} })`;
138
+ }
139
+ };
262
140
  //# sourceMappingURL=ServiceFnGenerator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceFnGenerator.js","names":["getEditableTypeName","getIdTypeName","getServiceClassName","V2_CONFIG","odataNamespace","buildEntityPath","queryOptionsType","clientConfigTag","V4_CONFIG","getVersionConfig","version","generateServiceFns","dataModel","entityServices","entitySet","entitySets","values","entityType","entityTypes","get","entityTypeFqName","serviceClassName","name","push","fileName","content","generateEntityServiceFnFile","lines","versionConfig","entityName","idTypeName","editableName","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":"AAWA,SAASA,mBAAmB,EAAEC,aAAa,EAAEC,mBAAmB,QAAQ,mBAAmB;AAY3F,MAAMC,SAAS,GAAkB;EAC/BC,cAAc,EAAE,OAAO;EACvBC,eAAe,EAAE,iBAAiB;EAClCC,gBAAgB,EAAE,mBAAmB;EACrCC,eAAe,EAAE;CAClB;AAED,MAAMC,SAAS,GAAkB;EAC/BJ,cAAc,EAAE,SAAS;EACzBC,eAAe,EAAE,mBAAmB;EACpCC,gBAAgB,EAAE,qBAAqB;EACvCC,eAAe,EAAE;CAClB;AAED,MAAME,gBAAgB,GAAIC,OAAqB,IAAoBA,OAAO,KAAK,IAAI,GAAGF,SAAS,GAAGL,SAAS;AAuB3G;;;;;;AAMA,OAAO,MAAMQ,kBAAkB,GAAIC,SAAoB,IAA+B;EACpF,MAAMC,cAAc,GAAkC,EAAE;EAExD;EACA,KAAK,MAAMC,SAAS,IAAIF,SAAS,CAACG,UAAU,CAACC,MAAM,EAAE,EAAE;IACrD,MAAMC,UAAU,GAAGL,SAAS,CAACM,WAAW,CAACC,GAAG,CAACL,SAAS,CAACM,gBAAgB,CAAC;IACxE,IAAIH,UAAU,EAAE;MACd,MAAMI,gBAAgB,GAAGnB,mBAAmB,CAACY,SAAS,CAACQ,IAAI,CAAC;MAC5DT,cAAc,CAACU,IAAI,CAAC;QAClBC,QAAQ,EAAE,GAAGH,gBAAgB,KAAK;QAClCI,OAAO,EAAEC,2BAA2B,CAACZ,SAAS,EAAEG,UAAU,EAAEL,SAAS;OACtE,CAAC;IACJ;EACF;EAEA,OAAO;IAAEC;EAAc,CAAE;AAC3B,CAAC;AAED;;;AAGA,MAAMa,2BAA2B,GAAGA,CAClCZ,SAAyB,EACzBG,UAA2B,EAC3BL,SAAoB,KACV;EACV,MAAMe,KAAK,GAAkB,EAAE;EAC/B,MAAMC,aAAa,GAAGnB,gBAAgB,CAACG,SAAS,CAACF,OAAO,CAAC;EACzD,MAAMW,gBAAgB,GAAGnB,mBAAmB,CAACY,SAAS,CAACQ,IAAI,CAAC;EAC5D,MAAMO,UAAU,GAAGZ,UAAU,CAACK,IAAI;EAClC,MAAMQ,UAAU,GAAG7B,aAAa,CAAC4B,UAAU,CAAC;EAC5C,MAAME,YAAY,GAAG/B,mBAAmB,CAAC6B,UAAU,CAAC;EACpD,MAAMG,OAAO,GAAGf,UAAU,CAACgB,IAAI,CAACC,MAAM,GAAG,CAAC;EAC1C,MAAMC,IAAI,GAAGvB,SAAS,CAACF,OAAO,KAAK,IAAI;EAEvC;EACAiB,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;EACjBI,KAAK,CAACJ,IAAI,CACR,oBAAoBM,UAAU,0BAA0BjB,SAAS,CAACwB,WAAW,UAAUxB,SAAS,CAACF,OAAO,GAAG,CAC5G;EACDiB,KAAK,CAACJ,IAAI,CAAC,mCAAmC,CAAC;EAC/CI,KAAK,CAACJ,IAAI,CAAC,IAAI,CAAC;EAChBI,KAAK,CAACJ,IAAI,CAAC,aAAa,CAAC;EACzBI,KAAK,CAACJ,IAAI,CAAC,aAAa,CAAC;EACzBI,KAAK,CAACJ,IAAI,CAAC,2DAA2D,CAAC;EACvEI,KAAK,CAACJ,IAAI,CAAC,eAAeF,gBAAgB,sBAAsBT,SAAS,CAACwB,WAAW,CAACC,WAAW,EAAE,UAAU,CAAC;EAC9GV,KAAK,CAACJ,IAAI,CAAC,2BAA2BF,gBAAgB,WAAW,CAAC;EAClEM,KAAK,CAACJ,IAAI,CAAC,IAAI,CAAC;EAChBI,KAAK,CAACJ,IAAI,CAAC,4CAA4C,CAAC;EACxDI,KAAK,CAACJ,IAAI,CAAC,wCAAwCX,SAAS,CAACwB,WAAW,CAACC,WAAW,EAAE,WAAWhB,gBAAgB,GAAG,CAAC;EACrHM,KAAK,CAACJ,IAAI,CAAC,kCAAkC,CAAC;EAC9CI,KAAK,CAACJ,IAAI,CAAC,WAAW,CAAC;EACvBI,KAAK,CAACJ,IAAI,CAAC,IAAI,CAAC;EAChBI,KAAK,CAACJ,IAAI,CAAC,iBAAiB,CAAC;EAC7BI,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;EACjBI,KAAK,CAACJ,IAAI,CAAC,8CAA8C,CAAC;EAC1DI,KAAK,CAACJ,IAAI,CAAC,yCAAyC,CAAC;EACrDI,KAAK,CAACJ,IAAI,CAAC,oDAAoD,CAAC;EAChEI,KAAK,CAACJ,IAAI,CAAC,0EAA0E,CAAC;EACtFI,KAAK,CAACJ,IAAI,CAAC,4DAA4D,CAAC;EACxEI,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;EAEd;EACAI,KAAK,CAACJ,IAAI,CAAC,UAAU,CAAC;EACtBI,KAAK,CAACJ,IAAI,CAAC,KAAKM,UAAU,GAAG,CAAC;EAC9B,IAAIG,OAAO,EAAE;IACXL,KAAK,CAACJ,IAAI,CAAC,UAAUO,UAAU,GAAG,CAAC;EACrC;EACAH,KAAK,CAACJ,IAAI,CAAC,KAAKQ,YAAY,EAAE,CAAC;EAC/BJ,KAAK,CAACJ,IAAI,CAAC,sBAAsB,CAAC;EAClCI,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;EAEd;EACA,IAAIY,IAAI,EAAE;IACRR,KAAK,CAACJ,IAAI,CAAC,eAAeK,aAAa,CAACxB,cAAc,4CAA4C,CAAC;IACnGuB,KAAK,CAACJ,IAAI,CAAC,UAAU,CAAC;IACtBI,KAAK,CAACJ,IAAI,CAAC,UAAUK,aAAa,CAACrB,eAAe,GAAG,CAAC;IACtDoB,KAAK,CAACJ,IAAI,CAAC,KAAKK,aAAa,CAACvB,eAAe,GAAG,CAAC;IACjDsB,KAAK,CAACJ,IAAI,CAAC,UAAUK,aAAa,CAACtB,gBAAgB,EAAE,CAAC;IACtDqB,KAAK,CAACJ,IAAI,CAAC,mDAAmD,CAAC;EACjE,CAAC,MAAM;IACLI,KAAK,CAACJ,IAAI,CAAC,eAAeK,aAAa,CAACxB,cAAc,0CAA0C,CAAC;IACjGuB,KAAK,CAACJ,IAAI,CAAC,UAAU,CAAC;IACtBI,KAAK,CAACJ,IAAI,CAAC,UAAUK,aAAa,CAACrB,eAAe,GAAG,CAAC;IACtDoB,KAAK,CAACJ,IAAI,CAAC,KAAKK,aAAa,CAACvB,eAAe,GAAG,CAAC;IACjDsB,KAAK,CAACJ,IAAI,CAAC,UAAUK,aAAa,CAACtB,gBAAgB,EAAE,CAAC;IACtDqB,KAAK,CAACJ,IAAI,CAAC,iDAAiD,CAAC;EAC/D;EACAI,KAAK,CAACJ,IAAI,CAAC,UAAU,CAAC;EACtB,IAAI,CAACY,IAAI,EAAE;IACTR,KAAK,CAACJ,IAAI,CAAC,kBAAkB,CAAC;EAChC;EACAI,KAAK,CAACJ,IAAI,CAAC,oBAAoB,CAAC;EAChCI,KAAK,CAACJ,IAAI,CAAC,mBAAmB,CAAC;EAC/BI,KAAK,CAACJ,IAAI,CAAC,4CAA4C,CAAC;EACxDI,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;EAEd;EACAI,KAAK,CAACJ,IAAI,CAAC,iFAAiF,CAAC;EAC7FI,KAAK,CAACJ,IAAI,CAAC,UAAU,CAAC;EACtBI,KAAK,CAACJ,IAAI,CAAC,iFAAiF,CAAC;EAC7FI,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;EACdI,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;EACjBI,KAAK,CAACJ,IAAI,CAAC,qBAAqBM,UAAU,sBAAsB,CAAC;EACjEF,KAAK,CAACJ,IAAI,CAAC,IAAI,CAAC;EAChBI,KAAK,CAACJ,IAAI,CAAC,iBAAiB,CAAC;EAC7BI,KAAK,CAACJ,IAAI,CAAC,qBAAqB,CAAC;EACjCI,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;EACjBI,KAAK,CAACJ,IAAI,CAAC,eAAeF,gBAAgB,SAAS,CAAC;EACpDM,KAAK,CAACJ,IAAI,CAAC,qCAAqC,CAAC;EACjDI,KAAK,CAACJ,IAAI,CAAC,4BAA4B,CAAC;EACxCI,KAAK,CAACJ,IAAI,CAAC,gBAAgB,CAAC;EAC5B,IAAI,CAACY,IAAI,EAAE;IACTR,KAAK,CAACJ,IAAI,CAAC,cAAc,CAAC;EAC5B;EACAI,KAAK,CAACJ,IAAI,CAAC,gBAAgB,CAAC;EAC5BI,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;EAEd;EACAI,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;EACjBI,KAAK,CAACJ,IAAI,CAAC,gCAAgCM,UAAU,sBAAsB,CAAC;EAC5EF,KAAK,CAACJ,IAAI,CAAC,IAAI,CAAC;EAChBI,KAAK,CAACJ,IAAI,CAAC,iBAAiB,CAAC;EAC7BI,KAAK,CAACJ,IAAI,CAAC,sBAAsB,CAAC;EAClCI,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;EACjBI,KAAK,CAACJ,IAAI,CAAC,eAAeF,gBAAgB,aAAaO,aAAa,CAACrB,eAAe,0BAA0B,CAAC;EAC/GoB,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;EAEd;EACA,IAAIS,OAAO,EAAE;IACXL,KAAK,CAACJ,IAAI,CAAC,iFAAiF,CAAC;IAC7FI,KAAK,CAACJ,IAAI,CAAC,qBAAqB,CAAC;IACjCI,KAAK,CAACJ,IAAI,CAAC,iFAAiF,CAAC;IAC7FI,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;IACd,MAAMe,aAAa,GAAG,aAAa;IACnCX,KAAK,CAACJ,IAAI,CAAC,SAASe,aAAa,WAAWR,UAAU,cAAc,CAAC;IAErE,IAAIb,UAAU,CAACgB,IAAI,CAACC,MAAM,KAAK,CAAC,EAAE;MAChC,MAAMK,OAAO,GAAGtB,UAAU,CAACgB,IAAI,CAAC,CAAC,CAAC;MAClC,MAAMO,SAAS,GAAGD,OAAO,CAACE,WAAW,CAACC,MAAM;MAC5C,MAAMC,cAAc,GAAGH,SAAS,KAAK,QAAQ,GAAG,QAAQ,GAAG,QAAQ;MACnEb,KAAK,CAACJ,IAAI,CAAC,oBAAoBoB,cAAc,8BAA8BJ,OAAO,CAACjB,IAAI,GAAG,CAAC;IAC7F,CAAC,MAAM;MACL,MAAMsB,QAAQ,GAAG3B,UAAU,CAACgB,IAAI,CAACY,GAAG,CAAEC,CAAC,IAAK,GAAGA,CAAC,CAACC,SAAS,kBAAkBD,CAAC,CAACxB,IAAI,KAAK,CAAC,CAAC0B,IAAI,CAAC,GAAG,CAAC;MAClGrB,KAAK,CAACJ,IAAI,CAAC,qCAAqCqB,QAAQ,IAAI,CAAC;IAC/D;IACAjB,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;EAChB;EAEA;EACAI,KAAK,CAACJ,IAAI,CAAC,iFAAiF,CAAC;EAC7FI,KAAK,CAACJ,IAAI,CAAC,uCAAuC,CAAC;EACnDI,KAAK,CAACJ,IAAI,CAAC,iFAAiF,CAAC;EAC7FI,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;EAEd;EACAI,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;EACjBI,KAAK,CAACJ,IAAI,CAAC,gBAAgBM,UAAU,YAAY,CAAC;EAClDF,KAAK,CAACJ,IAAI,CAAC,IAAI,CAAC;EAChBI,KAAK,CAACJ,IAAI,CAAC,iBAAiB,CAAC;EAC7BI,KAAK,CAACJ,IAAI,CAAC,yBAAyB,CAAC;EACrCI,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;EACjBI,KAAK,CAACJ,IAAI,CAAC,yBAAyB,CAAC;EACrCI,KAAK,CAACJ,IAAI,CAAC,eAAeK,aAAa,CAACtB,gBAAgB,EAAE,CAAC;EAC3DqB,KAAK,CAACJ,IAAI,CAAC,mBAAmB,CAAC;EAC/BI,KAAK,CAACJ,IAAI,CAAC,mBAAmBM,UAAU,IAAI,CAAC;EAC7CF,KAAK,CAACJ,IAAI,CAAC,KAAKF,gBAAgB,QAAQ,CAAC;EACzCM,KAAK,CAACJ,IAAI,CAAC,KAAKF,gBAAgB,SAAS,CAAC;EAC1CM,KAAK,CAACJ,IAAI,CAAC,MAAM,CAAC;EAClBI,KAAK,CAACJ,IAAI,CAAC,KAAKK,aAAa,CAACxB,cAAc,mBAAmBU,SAAS,CAACQ,IAAI,MAAMO,UAAU,YAAY,CAAC;EAC1GF,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;EAEd;EACA,IAAIS,OAAO,EAAE;IACX,MAAMiB,MAAM,GAAGhC,UAAU,CAACgB,IAAI,CAACC,MAAM,KAAK,CAAC,GACvC,KAAKjB,UAAU,CAACgB,IAAI,CAAC,CAAC,CAAC,CAACc,SAAS,qBAAqB,GACtD,iBAAiB;IAErBpB,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;IACjBI,KAAK,CAACJ,IAAI,CAAC,qBAAqBM,UAAU,SAAS,CAAC;IACpDF,KAAK,CAACJ,IAAI,CAAC,IAAI,CAAC;IAChBI,KAAK,CAACJ,IAAI,CAAC,iBAAiB,CAAC;IAC7BI,KAAK,CAACJ,IAAI,CAAC,yBAAyB,CAAC;IACrCI,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;IACjBI,KAAK,CAACJ,IAAI,CAAC,0BAA0B,CAAC;IACtCI,KAAK,CAACJ,IAAI,CAAC,SAASO,UAAU,EAAE,CAAC;IACjCH,KAAK,CAACJ,IAAI,CAAC,mBAAmB,CAAC;IAC/BI,KAAK,CAACJ,IAAI,CAAC,KAAKM,UAAU,GAAG,CAAC;IAC9BF,KAAK,CAACJ,IAAI,CAAC,KAAKF,gBAAgB,QAAQ,CAAC;IACzCM,KAAK,CAACJ,IAAI,CAAC,KAAKF,gBAAgB,SAAS,CAAC;IAC1CM,KAAK,CAACJ,IAAI,CAAC,MAAM,CAAC;IAClBI,KAAK,CAACJ,IAAI,CAAC,KAAKK,aAAa,CAACxB,cAAc,OAAO,CAAC;IACpDuB,KAAK,CAACJ,IAAI,CAAC,OAAOK,aAAa,CAACvB,eAAe,KAAKS,SAAS,CAACQ,IAAI,MAAM2B,MAAM,IAAI,CAAC;IACnFtB,KAAK,CAACJ,IAAI,CAAC,OAAOM,UAAU,EAAE,CAAC;IAC/BF,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;IACjBI,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;EAChB;EAEA;EACAI,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;EACjBI,KAAK,CAACJ,IAAI,CAAC,mBAAmBM,UAAU,UAAU,CAAC;EACnDF,KAAK,CAACJ,IAAI,CAAC,IAAI,CAAC;EAChBI,KAAK,CAACJ,IAAI,CAAC,iBAAiB,CAAC;EAC7BI,KAAK,CAACJ,IAAI,CAAC,yBAAyB,CAAC;EACrCI,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;EACjBI,KAAK,CAACJ,IAAI,CAAC,yBAAyB,CAAC;EACrCI,KAAK,CAACJ,IAAI,CAAC,aAAaQ,YAAY,EAAE,CAAC;EACvCJ,KAAK,CAACJ,IAAI,CAAC,mBAAmB,CAAC;EAC/BI,KAAK,CAACJ,IAAI,CAAC,KAAKM,UAAU,GAAG,CAAC;EAC9BF,KAAK,CAACJ,IAAI,CAAC,KAAKF,gBAAgB,QAAQ,CAAC;EACzCM,KAAK,CAACJ,IAAI,CAAC,KAAKF,gBAAgB,SAAS,CAAC;EAC1CM,KAAK,CAACJ,IAAI,CAAC,MAAM,CAAC;EAClBI,KAAK,CAACJ,IAAI,CAAC,KAAKK,aAAa,CAACxB,cAAc,UAAUU,SAAS,CAACQ,IAAI,cAAcS,YAAY,KAAKF,UAAU,GAAG,CAAC;EACjHF,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;EAEd;EACA,IAAIS,OAAO,EAAE;IACX,MAAMiB,MAAM,GAAGhC,UAAU,CAACgB,IAAI,CAACC,MAAM,KAAK,CAAC,GACvC,KAAKjB,UAAU,CAACgB,IAAI,CAAC,CAAC,CAAC,CAACc,SAAS,qBAAqB,GACtD,iBAAiB;IAErBpB,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;IACjBI,KAAK,CAACJ,IAAI,CAAC,yBAAyBM,UAAU,UAAU,CAAC;IACzDF,KAAK,CAACJ,IAAI,CAAC,IAAI,CAAC;IAChBI,KAAK,CAACJ,IAAI,CAAC,iBAAiB,CAAC;IAC7BI,KAAK,CAACJ,IAAI,CAAC,yBAAyB,CAAC;IACrCI,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;IACjBI,KAAK,CAACJ,IAAI,CAAC,yBAAyB,CAAC;IACrCI,KAAK,CAACJ,IAAI,CAAC,SAASO,UAAU,GAAG,CAAC;IAClCH,KAAK,CAACJ,IAAI,CAAC,qBAAqBQ,YAAY,GAAG,CAAC;IAChDJ,KAAK,CAACJ,IAAI,CAAC,mBAAmB,CAAC;IAC/BI,KAAK,CAACJ,IAAI,CAAC,SAAS,CAAC;IACrBI,KAAK,CAACJ,IAAI,CAAC,KAAKF,gBAAgB,QAAQ,CAAC;IACzCM,KAAK,CAACJ,IAAI,CAAC,KAAKF,gBAAgB,SAAS,CAAC;IAC1CM,KAAK,CAACJ,IAAI,CAAC,MAAM,CAAC;IAClBI,KAAK,CAACJ,IAAI,CAAC,KAAKK,aAAa,CAACxB,cAAc,SAAS,CAAC;IACtDuB,KAAK,CAACJ,IAAI,CAAC,OAAOK,aAAa,CAACvB,eAAe,KAAKS,SAAS,CAACQ,IAAI,MAAM2B,MAAM,IAAI,CAAC;IACnFtB,KAAK,CAACJ,IAAI,CAAC,aAAa,CAAC;IACzBI,KAAK,CAACJ,IAAI,CAAC,sBAAsBQ,YAAY,GAAG,CAAC;IACjDJ,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;IACjBI,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;IAEd;IACAI,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;IACjBI,KAAK,CAACJ,IAAI,CAAC,eAAeM,UAAU,UAAU,CAAC;IAC/CF,KAAK,CAACJ,IAAI,CAAC,IAAI,CAAC;IAChBI,KAAK,CAACJ,IAAI,CAAC,iBAAiB,CAAC;IAC7BI,KAAK,CAACJ,IAAI,CAAC,yBAAyB,CAAC;IACrCI,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;IACjBI,KAAK,CAACJ,IAAI,CAAC,sBAAsB,CAAC;IAClCI,KAAK,CAACJ,IAAI,CAAC,SAASO,UAAU,EAAE,CAAC;IACjCH,KAAK,CAACJ,IAAI,CAAC,mBAAmB,CAAC;IAC/BI,KAAK,CAACJ,IAAI,CAAC,SAAS,CAAC;IACrBI,KAAK,CAACJ,IAAI,CAAC,KAAKF,gBAAgB,QAAQ,CAAC;IACzCM,KAAK,CAACJ,IAAI,CAAC,KAAKF,gBAAgB,SAAS,CAAC;IAC1CM,KAAK,CAACJ,IAAI,CAAC,MAAM,CAAC;IAClBI,KAAK,CAACJ,IAAI,CAAC,KAAKK,aAAa,CAACxB,cAAc,OAAO,CAAC;IACpDuB,KAAK,CAACJ,IAAI,CAAC,OAAOK,aAAa,CAACvB,eAAe,KAAKS,SAAS,CAACQ,IAAI,MAAM2B,MAAM,GAAG,CAAC;IAClFtB,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;IACjBI,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;IAEd;IACAI,KAAK,CAACJ,IAAI,CAAC,0BAA0B,CAAC;IACtCI,KAAK,CAACJ,IAAI,CAAC,0BAA0B,CAAC;IACtCI,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;EAChB;EAEA,OAAOI,KAAK,CAACqB,IAAI,CAAC,IAAI,CAAC;AACzB,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"ServiceFnGenerator.js","names":["getEditableTypeName","getIdTypeName","getServiceClassName","generateServiceFns","dataModel","content","generateServicesFile","servicesFile","fileName","lines","isV4","version","crudImportPath","entitySets","entitySet","values","entityType","entityTypes","get","entityTypeFqName","push","serviceName","modelImports","name","keys","length","i","isLast","serviceClassName","entityName","editableName","hasKeys","generateIdToKeyFunction","join","idTypeName","keyProp","keyTsType","typeMapping","tsType","primitiveCheck","odataName","keyMapping","map","k"],"sources":["../../../src/generator/ServiceFnGenerator.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/dist/esm/index.js CHANGED
@@ -70,14 +70,14 @@ export * as QueryModelsGenerator from "./generator/QueryModelsGenerator.js";
70
70
  */
71
71
  export * as ServiceFnGenerator from "./generator/ServiceFnGenerator.js";
72
72
  /**
73
- * Generator for Promise-based service functions.
73
+ * Generator for tree-shakable navigation path builders.
74
74
  *
75
- * This module generates Promise-based wrappers around the Effect-based
76
- * service functions, allowing usage in non-Effect environments.
75
+ * This module generates pipe-based navigation functions and the toPromise
76
+ * helper for Promise-based environments.
77
77
  *
78
78
  * @since 1.0.0
79
79
  */
80
- export * as ServiceFnPromiseGenerator from "./generator/ServiceFnPromiseGenerator.js";
80
+ export * as NavigationGenerator from "./generator/NavigationGenerator.js";
81
81
  /**
82
82
  * Intermediate representation for OData metadata.
83
83
  * This is the central data model that digesters create and generators consume.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Cli","bin","Digester","TypeMapper","Generator","IndexGenerator","ModelsGenerator","NamingHelper","PackageGenerator","QueryModelsGenerator","ServiceFnGenerator","ServiceFnPromiseGenerator","DataModel","EdmxSchema","XmlParser"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;AAKA,OAAO,KAAKA,GAAG,MAAM,UAAU;AAE/B;;;;;AAKA,OAAO,KAAKC,GAAG,MAAM,UAAU;AAE/B;;;;;;AAMA,OAAO,KAAKC,QAAQ,MAAM,wBAAwB;AAElD;;;;;AAKA,OAAO,KAAKC,UAAU,MAAM,0BAA0B;AAEtD;;;;;AAKA,OAAO,KAAKC,SAAS,MAAM,0BAA0B;AAErD;;;;;AAKA,OAAO,KAAKC,cAAc,MAAM,+BAA+B;AAE/D;;;;;AAKA,OAAO,KAAKC,eAAe,MAAM,gCAAgC;AAEjE;;;;;AAKA,OAAO,KAAKC,YAAY,MAAM,6BAA6B;AAE3D;;;;;AAKA,OAAO,KAAKC,gBAAgB,MAAM,iCAAiC;AAEnE;;;;;AAKA,OAAO,KAAKC,oBAAoB,MAAM,qCAAqC;AAE3E;;;;;;;;;AASA,OAAO,KAAKC,kBAAkB,MAAM,mCAAmC;AAEvE;;;;;;;;AAQA,OAAO,KAAKC,yBAAyB,MAAM,0CAA0C;AAErF;;;;;;AAMA,OAAO,KAAKC,SAAS,MAAM,sBAAsB;AAEjD;;;;;;AAMA,OAAO,KAAKC,UAAU,MAAM,wBAAwB;AAEpD;;;;;AAKA,OAAO,KAAKC,SAAS,MAAM,uBAAuB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["Cli","bin","Digester","TypeMapper","Generator","IndexGenerator","ModelsGenerator","NamingHelper","PackageGenerator","QueryModelsGenerator","ServiceFnGenerator","NavigationGenerator","DataModel","EdmxSchema","XmlParser"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;AAKA,OAAO,KAAKA,GAAG,MAAM,UAAU;AAE/B;;;;;AAKA,OAAO,KAAKC,GAAG,MAAM,UAAU;AAE/B;;;;;;AAMA,OAAO,KAAKC,QAAQ,MAAM,wBAAwB;AAElD;;;;;AAKA,OAAO,KAAKC,UAAU,MAAM,0BAA0B;AAEtD;;;;;AAKA,OAAO,KAAKC,SAAS,MAAM,0BAA0B;AAErD;;;;;AAKA,OAAO,KAAKC,cAAc,MAAM,+BAA+B;AAE/D;;;;;AAKA,OAAO,KAAKC,eAAe,MAAM,gCAAgC;AAEjE;;;;;AAKA,OAAO,KAAKC,YAAY,MAAM,6BAA6B;AAE3D;;;;;AAKA,OAAO,KAAKC,gBAAgB,MAAM,iCAAiC;AAEnE;;;;;AAKA,OAAO,KAAKC,oBAAoB,MAAM,qCAAqC;AAE3E;;;;;;;;;AASA,OAAO,KAAKC,kBAAkB,MAAM,mCAAmC;AAEvE;;;;;;;;AAQA,OAAO,KAAKC,mBAAmB,MAAM,oCAAoC;AAEzE;;;;;;AAMA,OAAO,KAAKC,SAAS,MAAM,sBAAsB;AAEjD;;;;;;AAMA,OAAO,KAAKC,UAAU,MAAM,wBAAwB;AAEpD;;;;;AAKA,OAAO,KAAKC,SAAS,MAAM,uBAAuB","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../dist/cjs/generator/NavigationGenerator.js",
3
+ "module": "../../dist/esm/generator/NavigationGenerator.js",
4
+ "types": "../../dist/dts/generator/NavigationGenerator.d.ts",
5
+ "sideEffects": []
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../dist/cjs/generator/OperationsGenerator.js",
3
+ "module": "../../dist/esm/generator/OperationsGenerator.js",
4
+ "types": "../../dist/dts/generator/OperationsGenerator.d.ts",
5
+ "sideEffects": []
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odata-effect/odata-effect-generator",
3
- "version": "0.1.2",
3
+ "version": "0.3.0",
4
4
  "description": "Effect-based OData service code generator",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -69,6 +69,16 @@
69
69
  "import": "./dist/esm/generator/NamingHelper.js",
70
70
  "default": "./dist/cjs/generator/NamingHelper.js"
71
71
  },
72
+ "./generator/NavigationGenerator": {
73
+ "types": "./dist/dts/generator/NavigationGenerator.d.ts",
74
+ "import": "./dist/esm/generator/NavigationGenerator.js",
75
+ "default": "./dist/cjs/generator/NavigationGenerator.js"
76
+ },
77
+ "./generator/OperationsGenerator": {
78
+ "types": "./dist/dts/generator/OperationsGenerator.d.ts",
79
+ "import": "./dist/esm/generator/OperationsGenerator.js",
80
+ "default": "./dist/cjs/generator/OperationsGenerator.js"
81
+ },
72
82
  "./generator/PackageGenerator": {
73
83
  "types": "./dist/dts/generator/PackageGenerator.d.ts",
74
84
  "import": "./dist/esm/generator/PackageGenerator.js",
@@ -84,11 +94,6 @@
84
94
  "import": "./dist/esm/generator/ServiceFnGenerator.js",
85
95
  "default": "./dist/cjs/generator/ServiceFnGenerator.js"
86
96
  },
87
- "./generator/ServiceFnPromiseGenerator": {
88
- "types": "./dist/dts/generator/ServiceFnPromiseGenerator.d.ts",
89
- "import": "./dist/esm/generator/ServiceFnPromiseGenerator.js",
90
- "default": "./dist/cjs/generator/ServiceFnPromiseGenerator.js"
91
- },
92
97
  "./model/DataModel": {
93
98
  "types": "./dist/dts/model/DataModel.d.ts",
94
99
  "import": "./dist/esm/model/DataModel.js",
@@ -131,6 +136,12 @@
131
136
  "generator/NamingHelper": [
132
137
  "./dist/dts/generator/NamingHelper.d.ts"
133
138
  ],
139
+ "generator/NavigationGenerator": [
140
+ "./dist/dts/generator/NavigationGenerator.d.ts"
141
+ ],
142
+ "generator/OperationsGenerator": [
143
+ "./dist/dts/generator/OperationsGenerator.d.ts"
144
+ ],
134
145
  "generator/PackageGenerator": [
135
146
  "./dist/dts/generator/PackageGenerator.d.ts"
136
147
  ],
@@ -140,9 +151,6 @@
140
151
  "generator/ServiceFnGenerator": [
141
152
  "./dist/dts/generator/ServiceFnGenerator.d.ts"
142
153
  ],
143
- "generator/ServiceFnPromiseGenerator": [
144
- "./dist/dts/generator/ServiceFnPromiseGenerator.d.ts"
145
- ],
146
154
  "model/DataModel": [
147
155
  "./dist/dts/model/DataModel.d.ts"
148
156
  ],
package/src/Cli.ts CHANGED
@@ -39,17 +39,29 @@ const force = Options.boolean("force").pipe(
39
39
  Options.withDescription("Overwrite existing files")
40
40
  )
41
41
 
42
+ const filesOnly = Options.boolean("files-only").pipe(
43
+ Options.withDefault(false),
44
+ Options.withDescription("Generate only source files (no package.json, tsconfig, etc.) directly in output-dir")
45
+ )
46
+
42
47
  // ============================================================================
43
48
  // Generate Command
44
49
  // ============================================================================
45
50
 
46
51
  const generateCommand = Command.make(
47
52
  "generate",
48
- { metadataPath, outputDir, serviceName, packageName, force }
53
+ { metadataPath, outputDir, serviceName, packageName, force, filesOnly }
49
54
  ).pipe(
50
55
  Command.withDescription("Generate Effect OData client from metadata"),
51
56
  Command.withHandler((
52
- { force: forceOverwrite, metadataPath: metaPath, outputDir: outDir, packageName: pkgName, serviceName: svcName }
57
+ {
58
+ filesOnly: onlyFiles,
59
+ force: forceOverwrite,
60
+ metadataPath: metaPath,
61
+ outputDir: outDir,
62
+ packageName: pkgName,
63
+ serviceName: svcName
64
+ }
53
65
  ) =>
54
66
  Effect.gen(function*() {
55
67
  const fs = yield* FileSystem.FileSystem
@@ -85,6 +97,7 @@ const generateCommand = Command.make(
85
97
  const config = {
86
98
  outputDir: outDir,
87
99
  force: forceOverwrite,
100
+ filesOnly: onlyFiles,
88
101
  ...(svcName._tag === "Some" ? { serviceName: svcName.value } : {}),
89
102
  ...(pkgName._tag === "Some" ? { packageName: pkgName.value } : {})
90
103
  }