@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
@@ -0,0 +1,362 @@
1
+ import { getClassName, toCamelCase } from "./NamingHelper.js";
2
+ const V2_CONFIG = {
3
+ odataNamespace: "OData",
4
+ clientModule: "ODataClient",
5
+ queryOptionsType: "ODataQueryOptions"
6
+ };
7
+ const V4_CONFIG = {
8
+ odataNamespace: "ODataV4",
9
+ clientModule: "ODataV4Client",
10
+ queryOptionsType: "ODataV4QueryOptions"
11
+ };
12
+ const getVersionConfig = version => version === "V4" ? V4_CONFIG : V2_CONFIG;
13
+ /**
14
+ * Get the path builders module name.
15
+ */
16
+ export const getPathBuildersModuleName = () => "PathBuilders";
17
+ /**
18
+ * Collect all navigation properties across all entity types.
19
+ */
20
+ const collectAllNavigationProperties = dataModel => {
21
+ const navProps = [];
22
+ for (const entityType of dataModel.entityTypes.values()) {
23
+ for (const navProp of entityType.navigationProperties) {
24
+ const targetTypeName = getClassName(navProp.targetType);
25
+ navProps.push({
26
+ propertyName: navProp.name,
27
+ odataName: navProp.odataName,
28
+ sourceEntityName: entityType.name,
29
+ targetEntityName: targetTypeName,
30
+ isCollection: navProp.isCollection
31
+ });
32
+ }
33
+ }
34
+ return navProps;
35
+ };
36
+ /**
37
+ * Check if a navigation property name has collisions (same name, different source entities).
38
+ */
39
+ const findCollisions = navProps => {
40
+ const collisions = new Set();
41
+ const seen = new Map();
42
+ for (const prop of navProps) {
43
+ const existing = seen.get(prop.propertyName);
44
+ if (existing) {
45
+ // Collision if same name but different source entity
46
+ if (existing.sourceEntityName !== prop.sourceEntityName) {
47
+ collisions.add(prop.propertyName);
48
+ }
49
+ } else {
50
+ seen.set(prop.propertyName, prop);
51
+ }
52
+ }
53
+ return collisions;
54
+ };
55
+ /**
56
+ * Get the function name for a navigation property.
57
+ */
58
+ const getNavFunctionName = (prop, hasCollision) => {
59
+ if (hasCollision) {
60
+ // Qualified name: personTrips, orderTrips
61
+ return toCamelCase(`${prop.sourceEntityName}_${prop.propertyName}`);
62
+ }
63
+ return toCamelCase(prop.propertyName);
64
+ };
65
+ /**
66
+ * Collect derived types for an entity type (for type casting).
67
+ */
68
+ const getDerivedTypes = (baseTypeFqName, dataModel) => {
69
+ const derived = [];
70
+ for (const entityType of dataModel.entityTypes.values()) {
71
+ if (entityType.baseType === baseTypeFqName) {
72
+ derived.push(entityType);
73
+ // Recursively get further derived types
74
+ const furtherDerived = getDerivedTypes(entityType.fqName, dataModel);
75
+ for (const d of furtherDerived) {
76
+ derived.push(d);
77
+ }
78
+ }
79
+ }
80
+ return derived;
81
+ };
82
+ /**
83
+ * Generate navigation builders.
84
+ *
85
+ * @since 1.0.0
86
+ * @category generation
87
+ */
88
+ export const generateNavigations = dataModel => {
89
+ const moduleName = getPathBuildersModuleName();
90
+ const content = generatePathBuildersFile(dataModel);
91
+ return {
92
+ navigationFiles: [{
93
+ fileName: `${moduleName}.ts`,
94
+ content
95
+ }]
96
+ };
97
+ };
98
+ /**
99
+ * Generate the PathBuilders.ts file.
100
+ */
101
+ const generatePathBuildersFile = dataModel => {
102
+ const lines = [];
103
+ const versionConfig = getVersionConfig(dataModel.version);
104
+ // Collect all nav properties and find collisions
105
+ const allNavProps = collectAllNavigationProperties(dataModel);
106
+ const collisions = findCollisions(allNavProps);
107
+ // Collect all entity type names that need to be referenced
108
+ const referencedTypes = collectReferencedTypes(dataModel);
109
+ // Header
110
+ lines.push(`/**`);
111
+ lines.push(` * Type-safe, tree-shakable path builders for OData navigation.`);
112
+ lines.push(` * Generated by odata-effect-gen.`);
113
+ lines.push(` *`);
114
+ lines.push(` * @example`);
115
+ lines.push(` * \`\`\`typescript`);
116
+ lines.push(` * import { pipe } from "effect"`);
117
+ lines.push(` * import { People, byKey, trips, planItems } from "./PathBuilders"`);
118
+ lines.push(` *`);
119
+ lines.push(` * const path = pipe(`);
120
+ lines.push(` * People,`);
121
+ lines.push(` * byKey("russellwhyte"),`);
122
+ lines.push(` * trips,`);
123
+ lines.push(` * byKey(0),`);
124
+ lines.push(` * planItems`);
125
+ lines.push(` * )`);
126
+ lines.push(` * \`\`\``);
127
+ lines.push(` *`);
128
+ lines.push(` * @since 1.0.0`);
129
+ lines.push(` */`);
130
+ lines.push(``);
131
+ // Imports
132
+ lines.push(`import { ${versionConfig.odataNamespace}, ${versionConfig.clientModule}} from "@odata-effect/odata-effect"`);
133
+ const runtimeType = dataModel.version === "V4" ? "ODataV4Runtime" : "ODataRuntime";
134
+ lines.push(`import type { Runtime } from "@odata-effect/odata-effect-promise"`);
135
+ lines.push(`import type { Effect, Schema } from "effect"`);
136
+ lines.push(``);
137
+ // Import model types with Model suffix to avoid collision with entity set names
138
+ if (referencedTypes.size > 0) {
139
+ lines.push(`import type {`);
140
+ const typesList = Array.from(referencedTypes).sort();
141
+ for (let i = 0; i < typesList.length; i++) {
142
+ const isLast = i === typesList.length - 1;
143
+ lines.push(` ${typesList[i]} as ${typesList[i]}Model${isLast ? "" : ","}`);
144
+ }
145
+ lines.push(`} from "./Models"`);
146
+ lines.push(``);
147
+ }
148
+ // Path branded type
149
+ lines.push(`// ============================================================================`);
150
+ lines.push(`// Path Types`);
151
+ lines.push(`// ============================================================================`);
152
+ lines.push(``);
153
+ lines.push(`/**`);
154
+ lines.push(` * Branded path type that tracks the entity type and whether it's a collection.`);
155
+ lines.push(` * This enables type-safe navigation - you can only navigate to properties`);
156
+ lines.push(` * that exist on the current entity type.`);
157
+ lines.push(` *`);
158
+ lines.push(` * @since 1.0.0`);
159
+ lines.push(` * @category types`);
160
+ lines.push(` */`);
161
+ lines.push(`export type Path<TEntity, IsCollection extends boolean = false> = string & {`);
162
+ lines.push(` readonly _entity: TEntity`);
163
+ lines.push(` readonly _collection: IsCollection`);
164
+ lines.push(`}`);
165
+ lines.push(``);
166
+ // Entity set roots (PascalCase, types use Model suffix to avoid collision)
167
+ lines.push(`// ============================================================================`);
168
+ lines.push(`// Entity Set Roots`);
169
+ lines.push(`// ============================================================================`);
170
+ lines.push(``);
171
+ for (const entitySet of dataModel.entitySets.values()) {
172
+ const entityType = dataModel.entityTypes.get(entitySet.entityTypeFqName);
173
+ if (entityType) {
174
+ lines.push(`/**`);
175
+ lines.push(` * Root path for ${entitySet.name} entity set.`);
176
+ lines.push(` *`);
177
+ lines.push(` * @since 1.0.0`);
178
+ lines.push(` * @category entity-sets`);
179
+ lines.push(` */`);
180
+ lines.push(`export const ${entitySet.name}: Path<${entityType.name}Model, true> = "${entitySet.name}" as Path<${entityType.name}Model, true>`);
181
+ lines.push(``);
182
+ }
183
+ }
184
+ // byKey function
185
+ lines.push(`// ============================================================================`);
186
+ lines.push(`// Key Access`);
187
+ lines.push(`// ============================================================================`);
188
+ lines.push(``);
189
+ lines.push(`/**`);
190
+ lines.push(` * Navigate to a specific entity by key.`);
191
+ lines.push(` * Works on any collection path.`);
192
+ lines.push(` *`);
193
+ lines.push(` * @example`);
194
+ lines.push(` * \`\`\`typescript`);
195
+ lines.push(` * pipe(People, byKey("russellwhyte")) // Path<PersonModel, false>`);
196
+ lines.push(` * pipe(Airports, byKey("KSFO")) // Path<AirportModel, false>`);
197
+ lines.push(` * \`\`\``);
198
+ lines.push(` *`);
199
+ lines.push(` * @since 1.0.0`);
200
+ lines.push(` * @category navigation`);
201
+ lines.push(` */`);
202
+ lines.push(`export const byKey = <T>(key: string | number) =>`);
203
+ lines.push(` (base: Path<T, true>): Path<T, false> =>`);
204
+ lines.push(` \`\${base}(\${typeof key === "string" ? \`'\${key}'\` : key})\` as Path<T, false>`);
205
+ lines.push(``);
206
+ // Navigation property functions
207
+ lines.push(`// ============================================================================`);
208
+ lines.push(`// Navigation Properties`);
209
+ lines.push(`// ============================================================================`);
210
+ lines.push(``);
211
+ // Group nav props by source entity for better organization
212
+ const navPropsBySource = new Map();
213
+ for (const prop of allNavProps) {
214
+ const existing = navPropsBySource.get(prop.sourceEntityName) || [];
215
+ existing.push(prop);
216
+ navPropsBySource.set(prop.sourceEntityName, existing);
217
+ }
218
+ for (const [sourceEntity, props] of navPropsBySource) {
219
+ lines.push(`// From ${sourceEntity}`);
220
+ for (const prop of props) {
221
+ const hasCollision = collisions.has(prop.propertyName);
222
+ const fnName = getNavFunctionName(prop, hasCollision);
223
+ const targetType = prop.targetEntityName;
224
+ lines.push(`/**`);
225
+ lines.push(` * Navigate to ${prop.odataName}${prop.isCollection ? " collection" : ""}.`);
226
+ lines.push(` *`);
227
+ lines.push(` * @since 1.0.0`);
228
+ lines.push(` * @category navigation`);
229
+ lines.push(` */`);
230
+ lines.push(`export const ${fnName} = (base: Path<${sourceEntity}Model, false>): Path<${targetType}Model, ${prop.isCollection}> =>`);
231
+ lines.push(` \`\${base}/${prop.odataName}\` as Path<${targetType}Model, ${prop.isCollection}>`);
232
+ lines.push(``);
233
+ }
234
+ }
235
+ // Type casting functions for derived types
236
+ const castFunctions = generateTypeCastFunctions(dataModel);
237
+ if (castFunctions.length > 0) {
238
+ lines.push(`// ============================================================================`);
239
+ lines.push(`// Type Casting (for entity inheritance)`);
240
+ lines.push(`// ============================================================================`);
241
+ lines.push(``);
242
+ for (const castFunction of castFunctions) {
243
+ lines.push(castFunction);
244
+ }
245
+ }
246
+ // Terminal operations (Effect-based)
247
+ lines.push(`// ============================================================================`);
248
+ lines.push(`// Terminal Operations (Effect-based)`);
249
+ lines.push(`// ============================================================================`);
250
+ lines.push(``);
251
+ lines.push(`/**`);
252
+ lines.push(` * Fetch a collection of entities at the given path (Effect-based).`);
253
+ lines.push(` *`);
254
+ lines.push(` * @example`);
255
+ lines.push(` * \`\`\`typescript`);
256
+ lines.push(` * const allPeople = yield* pipe(People, fetchCollection(Person))`);
257
+ lines.push(` * \`\`\``);
258
+ lines.push(` *`);
259
+ lines.push(` * @since 1.0.0`);
260
+ lines.push(` * @category operations`);
261
+ lines.push(` */`);
262
+ lines.push(`export const fetchCollection = <T, I>(schema: Schema.Schema<T, I>) =>`);
263
+ lines.push(` (path: Path<T, true>, options?: ${versionConfig.clientModule}.${versionConfig.queryOptionsType}) =>`);
264
+ lines.push(` ${versionConfig.odataNamespace}.getCollection(path, schema, options)`);
265
+ lines.push(``);
266
+ lines.push(`/**`);
267
+ lines.push(` * Fetch a single entity at the given path (Effect-based).`);
268
+ lines.push(` *`);
269
+ lines.push(` * @example`);
270
+ lines.push(` * \`\`\`typescript`);
271
+ lines.push(` * const person = yield* pipe(People, byKey("russell"), fetchOne(Person))`);
272
+ lines.push(` * \`\`\``);
273
+ lines.push(` *`);
274
+ lines.push(` * @since 1.0.0`);
275
+ lines.push(` * @category operations`);
276
+ lines.push(` */`);
277
+ lines.push(`export const fetchOne = <T, I>(schema: Schema.Schema<T, I>) =>`);
278
+ lines.push(` (path: Path<T, false>, options?: ${versionConfig.clientModule}.${versionConfig.queryOptionsType}) =>`);
279
+ lines.push(` ${versionConfig.odataNamespace}.get(path, schema, options)`);
280
+ lines.push(``);
281
+ // Promise conversion (pipe-friendly)
282
+ lines.push(`// ============================================================================`);
283
+ lines.push(`// Promise Conversion`);
284
+ lines.push(`// ============================================================================`);
285
+ lines.push(``);
286
+ lines.push(`/**`);
287
+ lines.push(` * Convert an Effect to a Promise. Use at the end of a pipe chain.`);
288
+ lines.push(` *`);
289
+ lines.push(` * @example`);
290
+ lines.push(` * \`\`\`typescript`);
291
+ lines.push(` * const myTrips = await pipe(`);
292
+ lines.push(` * People,`);
293
+ lines.push(` * byKey("russell"),`);
294
+ lines.push(` * trips,`);
295
+ lines.push(` * fetchCollection(Trip),`);
296
+ lines.push(` * toPromise(runtime)`);
297
+ lines.push(` * )`);
298
+ lines.push(` * \`\`\``);
299
+ lines.push(` *`);
300
+ lines.push(` * @since 1.0.0`);
301
+ lines.push(` * @category operations`);
302
+ lines.push(` */`);
303
+ lines.push(`export const toPromise = (runtime: Runtime.${runtimeType}) =>`);
304
+ lines.push(` <A, E, R>(effect: Effect.Effect<A, E, R>): Promise<A> =>`);
305
+ lines.push(` runtime.runPromise(effect as any)`);
306
+ lines.push(``);
307
+ return lines.join("\n");
308
+ };
309
+ /**
310
+ * Generate type casting functions for derived types.
311
+ */
312
+ const generateTypeCastFunctions = dataModel => {
313
+ const lines = [];
314
+ const processed = new Set();
315
+ for (const entityType of dataModel.entityTypes.values()) {
316
+ const derivedTypes = getDerivedTypes(entityType.fqName, dataModel);
317
+ for (const derived of derivedTypes) {
318
+ const fnName = `as${derived.name}`;
319
+ if (processed.has(fnName)) continue;
320
+ processed.add(fnName);
321
+ const castPath = `${dataModel.namespace}.${derived.odataName}`;
322
+ lines.push(`/**`);
323
+ lines.push(` * Cast collection to ${derived.name} (filters to derived type).`);
324
+ lines.push(` *`);
325
+ lines.push(` * @since 1.0.0`);
326
+ lines.push(` * @category casting`);
327
+ lines.push(` */`);
328
+ lines.push(`export const ${fnName} = (base: Path<${entityType.name}Model, true>): Path<${derived.name}Model, true> =>`);
329
+ lines.push(` \`\${base}/${castPath}\` as Path<${derived.name}Model, true>`);
330
+ lines.push(``);
331
+ }
332
+ }
333
+ return lines;
334
+ };
335
+ /**
336
+ * Collect all entity type names referenced in paths.
337
+ */
338
+ const collectReferencedTypes = dataModel => {
339
+ const types = new Set();
340
+ // Entity set entity types
341
+ for (const entitySet of dataModel.entitySets.values()) {
342
+ const entityType = dataModel.entityTypes.get(entitySet.entityTypeFqName);
343
+ if (entityType) {
344
+ types.add(entityType.name);
345
+ }
346
+ }
347
+ // Navigation target types
348
+ for (const entityType of dataModel.entityTypes.values()) {
349
+ for (const navProp of entityType.navigationProperties) {
350
+ types.add(getClassName(navProp.targetType));
351
+ }
352
+ }
353
+ // Derived types
354
+ for (const entityType of dataModel.entityTypes.values()) {
355
+ const derivedTypes = getDerivedTypes(entityType.fqName, dataModel);
356
+ for (const derived of derivedTypes) {
357
+ types.add(derived.name);
358
+ }
359
+ }
360
+ return types;
361
+ };
362
+ //# sourceMappingURL=NavigationGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavigationGenerator.js","names":["getClassName","toCamelCase","V2_CONFIG","odataNamespace","clientModule","queryOptionsType","V4_CONFIG","getVersionConfig","version","getPathBuildersModuleName","collectAllNavigationProperties","dataModel","navProps","entityType","entityTypes","values","navProp","navigationProperties","targetTypeName","targetType","push","propertyName","name","odataName","sourceEntityName","targetEntityName","isCollection","findCollisions","collisions","Set","seen","Map","prop","existing","get","add","set","getNavFunctionName","hasCollision","getDerivedTypes","baseTypeFqName","derived","baseType","furtherDerived","fqName","d","generateNavigations","moduleName","content","generatePathBuildersFile","navigationFiles","fileName","lines","versionConfig","allNavProps","referencedTypes","collectReferencedTypes","runtimeType","size","typesList","Array","from","sort","i","length","isLast","entitySet","entitySets","entityTypeFqName","navPropsBySource","sourceEntity","props","has","fnName","castFunctions","generateTypeCastFunctions","castFunction","join","processed","derivedTypes","castPath","namespace","types"],"sources":["../../../src/generator/NavigationGenerator.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}