@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,40 +0,0 @@
1
- /**
2
- * Generator for Promise-based service functions.
3
- *
4
- * This module generates Promise-based wrappers around the Effect-based
5
- * service functions, allowing usage in non-Effect environments.
6
- *
7
- * @since 1.0.0
8
- */
9
- import type { DataModel } from "../model/DataModel.js";
10
- /**
11
- * Get the Promise service name (e.g., "ProductsServicePromise").
12
- */
13
- export declare const getPromiseServiceName: (entitySetName: string) => string;
14
- /**
15
- * Generated Promise service file.
16
- *
17
- * @since 1.0.0
18
- * @category types
19
- */
20
- export interface GeneratedPromiseServiceFile {
21
- readonly fileName: string;
22
- readonly content: string;
23
- }
24
- /**
25
- * Result of Promise service generation.
26
- *
27
- * @since 1.0.0
28
- * @category types
29
- */
30
- export interface PromiseServiceGenerationResult {
31
- readonly entityServices: ReadonlyArray<GeneratedPromiseServiceFile>;
32
- }
33
- /**
34
- * Generate all Promise-based service function files.
35
- *
36
- * @since 1.0.0
37
- * @category generation
38
- */
39
- export declare const generatePromiseServiceFns: (dataModel: DataModel) => PromiseServiceGenerationResult;
40
- //# sourceMappingURL=ServiceFnPromiseGenerator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ServiceFnPromiseGenerator.d.ts","sourceRoot":"","sources":["../../../src/generator/ServiceFnPromiseGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAmC,MAAM,uBAAuB,CAAA;AAwBvF;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAI,eAAe,MAAM,KAAG,MAAwD,CAAA;AAEtH;;;;;GAKG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED;;;;;GAKG;AACH,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC,2BAA2B,CAAC,CAAA;CACpE;AAED;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,GAAI,WAAW,SAAS,KAAG,8BAgBhE,CAAA"}
@@ -1,175 +0,0 @@
1
- import { getEditableTypeName, getIdTypeName, getServiceClassName } from "./NamingHelper.js";
2
- const V2_CONFIG = {
3
- runtimeType: "ODataRuntime",
4
- runtimeImport: "type ODataRuntime"
5
- };
6
- const V4_CONFIG = {
7
- runtimeType: "ODataV4Runtime",
8
- runtimeImport: "type ODataV4Runtime"
9
- };
10
- const getVersionConfig = version => version === "V4" ? V4_CONFIG : V2_CONFIG;
11
- /**
12
- * Get the Promise service name (e.g., "ProductsServicePromise").
13
- */
14
- export const getPromiseServiceName = entitySetName => `${getServiceClassName(entitySetName)}Promise`;
15
- /**
16
- * Generate all Promise-based service function files.
17
- *
18
- * @since 1.0.0
19
- * @category generation
20
- */
21
- export const generatePromiseServiceFns = dataModel => {
22
- const entityServices = [];
23
- // Generate individual Promise service files
24
- for (const entitySet of dataModel.entitySets.values()) {
25
- const entityType = dataModel.entityTypes.get(entitySet.entityTypeFqName);
26
- if (entityType) {
27
- const promiseServiceName = getPromiseServiceName(entitySet.name);
28
- entityServices.push({
29
- fileName: `${promiseServiceName}.ts`,
30
- content: generatePromiseServiceFile(entitySet, entityType, dataModel)
31
- });
32
- }
33
- }
34
- return {
35
- entityServices
36
- };
37
- };
38
- /**
39
- * Generate a single Promise service file.
40
- */
41
- const generatePromiseServiceFile = (entitySet, entityType, dataModel) => {
42
- const lines = [];
43
- const versionConfig = getVersionConfig(dataModel.version);
44
- const serviceClassName = getServiceClassName(entitySet.name);
45
- const promiseServiceName = getPromiseServiceName(entitySet.name);
46
- const entityName = entityType.name;
47
- const idTypeName = getIdTypeName(entityName);
48
- const editableName = getEditableTypeName(entityName);
49
- const hasKeys = entityType.keys.length > 0;
50
- // Header and imports
51
- lines.push(`/**`);
52
- lines.push(` * Promise-based ${entityName} service functions for ${dataModel.serviceName} OData ${dataModel.version}.`);
53
- lines.push(` * Generated by odata-effect-gen.`);
54
- lines.push(` *`);
55
- lines.push(` * These functions wrap the Effect-based service functions for use in`);
56
- lines.push(` * non-Effect environments. They take a runtime as the first argument.`);
57
- lines.push(` *`);
58
- lines.push(` * @example`);
59
- lines.push(` * \`\`\`ts`);
60
- lines.push(` * import { ${versionConfig.runtimeType.replace("OData", "createOData").replace("Runtime", "Runtime")} } from "@odata-effect/odata-effect-promise"`);
61
- lines.push(` * import { ${promiseServiceName} } from "@template/${dataModel.serviceName.toLowerCase()}-effect"`);
62
- lines.push(` *`);
63
- lines.push(` * const runtime = ${versionConfig.runtimeType.replace("OData", "createOData").replace("Runtime", "Runtime")}({`);
64
- lines.push(` * baseUrl: "https://server.com",`);
65
- lines.push(` * servicePath: "/odata/${dataModel.version.toLowerCase()}/"`);
66
- lines.push(` * })`);
67
- lines.push(` *`);
68
- lines.push(` * const items = await ${promiseServiceName}.getAll(runtime)`);
69
- lines.push(` * await runtime.dispose()`);
70
- lines.push(` * \`\`\``);
71
- lines.push(` *`);
72
- lines.push(` * @since 1.0.0`);
73
- lines.push(` */`);
74
- lines.push(`import { ${versionConfig.runtimeImport} } from "@odata-effect/odata-effect-promise/Runtime"`);
75
- lines.push(`import * as ${serviceClassName} from "./${serviceClassName}.js"`);
76
- lines.push(``);
77
- // Import models (type-only since they're only used in type annotations)
78
- lines.push(`import type {`);
79
- lines.push(` ${entityName},`);
80
- if (hasKeys) {
81
- lines.push(` ${idTypeName},`);
82
- }
83
- lines.push(` ${editableName}`);
84
- lines.push(`} from "./Models.js"`);
85
- lines.push(``);
86
- // Query options import (using subpath imports for tree-shaking)
87
- const queryOptionsType = dataModel.version === "V4" ? "ODataV4QueryOptions" : "ODataQueryOptions";
88
- const queryOptionsModule = dataModel.version === "V4" ? "ODataV4Client" : "ODataClient";
89
- lines.push(`import type { ${queryOptionsType} } from "@odata-effect/odata-effect/${queryOptionsModule}"`);
90
- lines.push(``);
91
- // Re-export runtime type for convenience
92
- lines.push(`// Re-export runtime type for convenience`);
93
- lines.push(`export type { ${versionConfig.runtimeType} } from "@odata-effect/odata-effect-promise/Runtime"`);
94
- lines.push(``);
95
- lines.push(`// ============================================================================`);
96
- lines.push(`// Promise-based Functions`);
97
- lines.push(`// ============================================================================`);
98
- lines.push(``);
99
- // getAll
100
- lines.push(`/**`);
101
- lines.push(` * Fetch all ${entityName} entities.`);
102
- lines.push(` *`);
103
- lines.push(` * @since 1.0.0`);
104
- lines.push(` * @category operations`);
105
- lines.push(` */`);
106
- lines.push(`export const getAll = (`);
107
- lines.push(` runtime: ${versionConfig.runtimeType},`);
108
- lines.push(` options?: ${queryOptionsType}`);
109
- lines.push(`): Promise<ReadonlyArray<${entityName}>> =>`);
110
- lines.push(` runtime.runPromise(${serviceClassName}.getAll(options))`);
111
- lines.push(``);
112
- // getById (if entity has keys)
113
- if (hasKeys) {
114
- lines.push(`/**`);
115
- lines.push(` * Fetch a single ${entityName} by ID.`);
116
- lines.push(` *`);
117
- lines.push(` * @since 1.0.0`);
118
- lines.push(` * @category operations`);
119
- lines.push(` */`);
120
- lines.push(`export const getById = (`);
121
- lines.push(` runtime: ${versionConfig.runtimeType},`);
122
- lines.push(` id: ${idTypeName}`);
123
- lines.push(`): Promise<${entityName}> =>`);
124
- lines.push(` runtime.runPromise(${serviceClassName}.getById(id))`);
125
- lines.push(``);
126
- }
127
- // create
128
- lines.push(`/**`);
129
- lines.push(` * Create a new ${entityName} entity.`);
130
- lines.push(` *`);
131
- lines.push(` * @since 1.0.0`);
132
- lines.push(` * @category operations`);
133
- lines.push(` */`);
134
- lines.push(`export const create = (`);
135
- lines.push(` runtime: ${versionConfig.runtimeType},`);
136
- lines.push(` entity: ${editableName}`);
137
- lines.push(`): Promise<${entityName}> =>`);
138
- lines.push(` runtime.runPromise(${serviceClassName}.create(entity))`);
139
- lines.push(``);
140
- // update (if entity has keys)
141
- if (hasKeys) {
142
- lines.push(`/**`);
143
- lines.push(` * Update an existing ${entityName} entity.`);
144
- lines.push(` *`);
145
- lines.push(` * @since 1.0.0`);
146
- lines.push(` * @category operations`);
147
- lines.push(` */`);
148
- lines.push(`export const update = (`);
149
- lines.push(` runtime: ${versionConfig.runtimeType},`);
150
- lines.push(` id: ${idTypeName},`);
151
- lines.push(` entity: Partial<${editableName}>`);
152
- lines.push(`): Promise<void> =>`);
153
- lines.push(` runtime.runPromise(${serviceClassName}.update(id, entity))`);
154
- lines.push(``);
155
- // delete
156
- lines.push(`/**`);
157
- lines.push(` * Delete a ${entityName} entity.`);
158
- lines.push(` *`);
159
- lines.push(` * @since 1.0.0`);
160
- lines.push(` * @category operations`);
161
- lines.push(` */`);
162
- lines.push(`export const del = (`);
163
- lines.push(` runtime: ${versionConfig.runtimeType},`);
164
- lines.push(` id: ${idTypeName}`);
165
- lines.push(`): Promise<void> =>`);
166
- lines.push(` runtime.runPromise(${serviceClassName}.del(id))`);
167
- lines.push(``);
168
- // Alias for nice naming
169
- lines.push(`// Alias for nice naming`);
170
- lines.push(`export { del as delete }`);
171
- lines.push(``);
172
- }
173
- return lines.join("\n");
174
- };
175
- //# sourceMappingURL=ServiceFnPromiseGenerator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ServiceFnPromiseGenerator.js","names":["getEditableTypeName","getIdTypeName","getServiceClassName","V2_CONFIG","runtimeType","runtimeImport","V4_CONFIG","getVersionConfig","version","getPromiseServiceName","entitySetName","generatePromiseServiceFns","dataModel","entityServices","entitySet","entitySets","values","entityType","entityTypes","get","entityTypeFqName","promiseServiceName","name","push","fileName","content","generatePromiseServiceFile","lines","versionConfig","serviceClassName","entityName","idTypeName","editableName","hasKeys","keys","length","serviceName","replace","toLowerCase","queryOptionsType","queryOptionsModule","join"],"sources":["../../../src/generator/ServiceFnPromiseGenerator.ts"],"sourcesContent":[null],"mappings":"AAUA,SAASA,mBAAmB,EAAEC,aAAa,EAAEC,mBAAmB,QAAQ,mBAAmB;AAU3F,MAAMC,SAAS,GAAkB;EAC/BC,WAAW,EAAE,cAAc;EAC3BC,aAAa,EAAE;CAChB;AAED,MAAMC,SAAS,GAAkB;EAC/BF,WAAW,EAAE,gBAAgB;EAC7BC,aAAa,EAAE;CAChB;AAED,MAAME,gBAAgB,GAAIC,OAAqB,IAAoBA,OAAO,KAAK,IAAI,GAAGF,SAAS,GAAGH,SAAS;AAE3G;;;AAGA,OAAO,MAAMM,qBAAqB,GAAIC,aAAqB,IAAa,GAAGR,mBAAmB,CAACQ,aAAa,CAAC,SAAS;AAuBtH;;;;;;AAMA,OAAO,MAAMC,yBAAyB,GAAIC,SAAoB,IAAoC;EAChG,MAAMC,cAAc,GAAuC,EAAE;EAE7D;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,kBAAkB,GAAGZ,qBAAqB,CAACK,SAAS,CAACQ,IAAI,CAAC;MAChET,cAAc,CAACU,IAAI,CAAC;QAClBC,QAAQ,EAAE,GAAGH,kBAAkB,KAAK;QACpCI,OAAO,EAAEC,0BAA0B,CAACZ,SAAS,EAAEG,UAAU,EAAEL,SAAS;OACrE,CAAC;IACJ;EACF;EAEA,OAAO;IAAEC;EAAc,CAAE;AAC3B,CAAC;AAED;;;AAGA,MAAMa,0BAA0B,GAAGA,CACjCZ,SAAyB,EACzBG,UAA2B,EAC3BL,SAAoB,KACV;EACV,MAAMe,KAAK,GAAkB,EAAE;EAC/B,MAAMC,aAAa,GAAGrB,gBAAgB,CAACK,SAAS,CAACJ,OAAO,CAAC;EACzD,MAAMqB,gBAAgB,GAAG3B,mBAAmB,CAACY,SAAS,CAACQ,IAAI,CAAC;EAC5D,MAAMD,kBAAkB,GAAGZ,qBAAqB,CAACK,SAAS,CAACQ,IAAI,CAAC;EAChE,MAAMQ,UAAU,GAAGb,UAAU,CAACK,IAAI;EAClC,MAAMS,UAAU,GAAG9B,aAAa,CAAC6B,UAAU,CAAC;EAC5C,MAAME,YAAY,GAAGhC,mBAAmB,CAAC8B,UAAU,CAAC;EACpD,MAAMG,OAAO,GAAGhB,UAAU,CAACiB,IAAI,CAACC,MAAM,GAAG,CAAC;EAE1C;EACAR,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;EACjBI,KAAK,CAACJ,IAAI,CACR,oBAAoBO,UAAU,0BAA0BlB,SAAS,CAACwB,WAAW,UAAUxB,SAAS,CAACJ,OAAO,GAAG,CAC5G;EACDmB,KAAK,CAACJ,IAAI,CAAC,mCAAmC,CAAC;EAC/CI,KAAK,CAACJ,IAAI,CAAC,IAAI,CAAC;EAChBI,KAAK,CAACJ,IAAI,CAAC,uEAAuE,CAAC;EACnFI,KAAK,CAACJ,IAAI,CAAC,wEAAwE,CAAC;EACpFI,KAAK,CAACJ,IAAI,CAAC,IAAI,CAAC;EAChBI,KAAK,CAACJ,IAAI,CAAC,aAAa,CAAC;EACzBI,KAAK,CAACJ,IAAI,CAAC,aAAa,CAAC;EACzBI,KAAK,CAACJ,IAAI,CACR,eACEK,aAAa,CAACxB,WAAW,CAACiC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,CAACA,OAAO,CAAC,SAAS,EAAE,SAAS,CACxF,8CAA8C,CAC/C;EACDV,KAAK,CAACJ,IAAI,CAAC,eAAeF,kBAAkB,sBAAsBT,SAAS,CAACwB,WAAW,CAACE,WAAW,EAAE,UAAU,CAAC;EAChHX,KAAK,CAACJ,IAAI,CAAC,IAAI,CAAC;EAChBI,KAAK,CAACJ,IAAI,CACR,sBAAsBK,aAAa,CAACxB,WAAW,CAACiC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,CAACA,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAClH;EACDV,KAAK,CAACJ,IAAI,CAAC,qCAAqC,CAAC;EACjDI,KAAK,CAACJ,IAAI,CAAC,6BAA6BX,SAAS,CAACJ,OAAO,CAAC8B,WAAW,EAAE,IAAI,CAAC;EAC5EX,KAAK,CAACJ,IAAI,CAAC,OAAO,CAAC;EACnBI,KAAK,CAACJ,IAAI,CAAC,IAAI,CAAC;EAChBI,KAAK,CAACJ,IAAI,CAAC,0BAA0BF,kBAAkB,kBAAkB,CAAC;EAC1EM,KAAK,CAACJ,IAAI,CAAC,4BAA4B,CAAC;EACxCI,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,YAAYK,aAAa,CAACvB,aAAa,sDAAsD,CAAC;EACzGsB,KAAK,CAACJ,IAAI,CAAC,eAAeM,gBAAgB,YAAYA,gBAAgB,MAAM,CAAC;EAC7EF,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;EAEd;EACAI,KAAK,CAACJ,IAAI,CAAC,eAAe,CAAC;EAC3BI,KAAK,CAACJ,IAAI,CAAC,KAAKO,UAAU,GAAG,CAAC;EAC9B,IAAIG,OAAO,EAAE;IACXN,KAAK,CAACJ,IAAI,CAAC,KAAKQ,UAAU,GAAG,CAAC;EAChC;EACAJ,KAAK,CAACJ,IAAI,CAAC,KAAKS,YAAY,EAAE,CAAC;EAC/BL,KAAK,CAACJ,IAAI,CAAC,sBAAsB,CAAC;EAClCI,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;EAEd;EACA,MAAMgB,gBAAgB,GAAG3B,SAAS,CAACJ,OAAO,KAAK,IAAI,GAAG,qBAAqB,GAAG,mBAAmB;EACjG,MAAMgC,kBAAkB,GAAG5B,SAAS,CAACJ,OAAO,KAAK,IAAI,GAAG,eAAe,GAAG,aAAa;EACvFmB,KAAK,CAACJ,IAAI,CAAC,iBAAiBgB,gBAAgB,uCAAuCC,kBAAkB,GAAG,CAAC;EACzGb,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;EAEd;EACAI,KAAK,CAACJ,IAAI,CAAC,2CAA2C,CAAC;EACvDI,KAAK,CAACJ,IAAI,CAAC,iBAAiBK,aAAa,CAACxB,WAAW,sDAAsD,CAAC;EAC5GuB,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;EAEdI,KAAK,CAACJ,IAAI,CAAC,iFAAiF,CAAC;EAC7FI,KAAK,CAACJ,IAAI,CAAC,4BAA4B,CAAC;EACxCI,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,gBAAgBO,UAAU,YAAY,CAAC;EAClDH,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,cAAcK,aAAa,CAACxB,WAAW,GAAG,CAAC;EACtDuB,KAAK,CAACJ,IAAI,CAAC,eAAegB,gBAAgB,EAAE,CAAC;EAC7CZ,KAAK,CAACJ,IAAI,CAAC,4BAA4BO,UAAU,OAAO,CAAC;EACzDH,KAAK,CAACJ,IAAI,CAAC,wBAAwBM,gBAAgB,mBAAmB,CAAC;EACvEF,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;EAEd;EACA,IAAIU,OAAO,EAAE;IACXN,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;IACjBI,KAAK,CAACJ,IAAI,CAAC,qBAAqBO,UAAU,SAAS,CAAC;IACpDH,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,cAAcK,aAAa,CAACxB,WAAW,GAAG,CAAC;IACtDuB,KAAK,CAACJ,IAAI,CAAC,SAASQ,UAAU,EAAE,CAAC;IACjCJ,KAAK,CAACJ,IAAI,CAAC,cAAcO,UAAU,MAAM,CAAC;IAC1CH,KAAK,CAACJ,IAAI,CAAC,wBAAwBM,gBAAgB,eAAe,CAAC;IACnEF,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;EAChB;EAEA;EACAI,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;EACjBI,KAAK,CAACJ,IAAI,CAAC,mBAAmBO,UAAU,UAAU,CAAC;EACnDH,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,cAAcK,aAAa,CAACxB,WAAW,GAAG,CAAC;EACtDuB,KAAK,CAACJ,IAAI,CAAC,aAAaS,YAAY,EAAE,CAAC;EACvCL,KAAK,CAACJ,IAAI,CAAC,cAAcO,UAAU,MAAM,CAAC;EAC1CH,KAAK,CAACJ,IAAI,CAAC,wBAAwBM,gBAAgB,kBAAkB,CAAC;EACtEF,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;EAEd;EACA,IAAIU,OAAO,EAAE;IACXN,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;IACjBI,KAAK,CAACJ,IAAI,CAAC,yBAAyBO,UAAU,UAAU,CAAC;IACzDH,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,cAAcK,aAAa,CAACxB,WAAW,GAAG,CAAC;IACtDuB,KAAK,CAACJ,IAAI,CAAC,SAASQ,UAAU,GAAG,CAAC;IAClCJ,KAAK,CAACJ,IAAI,CAAC,qBAAqBS,YAAY,GAAG,CAAC;IAChDL,KAAK,CAACJ,IAAI,CAAC,qBAAqB,CAAC;IACjCI,KAAK,CAACJ,IAAI,CAAC,wBAAwBM,gBAAgB,sBAAsB,CAAC;IAC1EF,KAAK,CAACJ,IAAI,CAAC,EAAE,CAAC;IAEd;IACAI,KAAK,CAACJ,IAAI,CAAC,KAAK,CAAC;IACjBI,KAAK,CAACJ,IAAI,CAAC,eAAeO,UAAU,UAAU,CAAC;IAC/CH,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,cAAcK,aAAa,CAACxB,WAAW,GAAG,CAAC;IACtDuB,KAAK,CAACJ,IAAI,CAAC,SAASQ,UAAU,EAAE,CAAC;IACjCJ,KAAK,CAACJ,IAAI,CAAC,qBAAqB,CAAC;IACjCI,KAAK,CAACJ,IAAI,CAAC,wBAAwBM,gBAAgB,WAAW,CAAC;IAC/DF,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,CAACc,IAAI,CAAC,IAAI,CAAC;AACzB,CAAC","ignoreList":[]}
@@ -1,6 +0,0 @@
1
- {
2
- "main": "../../dist/cjs/generator/ServiceFnPromiseGenerator.js",
3
- "module": "../../dist/esm/generator/ServiceFnPromiseGenerator.js",
4
- "types": "../../dist/dts/generator/ServiceFnPromiseGenerator.d.ts",
5
- "sideEffects": []
6
- }
@@ -1,243 +0,0 @@
1
- /**
2
- * Generator for Promise-based service functions.
3
- *
4
- * This module generates Promise-based wrappers around the Effect-based
5
- * service functions, allowing usage in non-Effect environments.
6
- *
7
- * @since 1.0.0
8
- */
9
- import type { DataModel, EntitySetModel, EntityTypeModel } from "../model/DataModel.js"
10
- import type { ODataVersion } from "../parser/EdmxSchema.js"
11
- import { getEditableTypeName, getIdTypeName, getServiceClassName } from "./NamingHelper.js"
12
-
13
- /**
14
- * Version-specific imports and identifiers.
15
- */
16
- interface VersionConfig {
17
- readonly runtimeType: string
18
- readonly runtimeImport: string
19
- }
20
-
21
- const V2_CONFIG: VersionConfig = {
22
- runtimeType: "ODataRuntime",
23
- runtimeImport: "type ODataRuntime"
24
- }
25
-
26
- const V4_CONFIG: VersionConfig = {
27
- runtimeType: "ODataV4Runtime",
28
- runtimeImport: "type ODataV4Runtime"
29
- }
30
-
31
- const getVersionConfig = (version: ODataVersion): VersionConfig => version === "V4" ? V4_CONFIG : V2_CONFIG
32
-
33
- /**
34
- * Get the Promise service name (e.g., "ProductsServicePromise").
35
- */
36
- export const getPromiseServiceName = (entitySetName: string): string => `${getServiceClassName(entitySetName)}Promise`
37
-
38
- /**
39
- * Generated Promise service file.
40
- *
41
- * @since 1.0.0
42
- * @category types
43
- */
44
- export interface GeneratedPromiseServiceFile {
45
- readonly fileName: string
46
- readonly content: string
47
- }
48
-
49
- /**
50
- * Result of Promise service generation.
51
- *
52
- * @since 1.0.0
53
- * @category types
54
- */
55
- export interface PromiseServiceGenerationResult {
56
- readonly entityServices: ReadonlyArray<GeneratedPromiseServiceFile>
57
- }
58
-
59
- /**
60
- * Generate all Promise-based service function files.
61
- *
62
- * @since 1.0.0
63
- * @category generation
64
- */
65
- export const generatePromiseServiceFns = (dataModel: DataModel): PromiseServiceGenerationResult => {
66
- const entityServices: Array<GeneratedPromiseServiceFile> = []
67
-
68
- // Generate individual Promise service files
69
- for (const entitySet of dataModel.entitySets.values()) {
70
- const entityType = dataModel.entityTypes.get(entitySet.entityTypeFqName)
71
- if (entityType) {
72
- const promiseServiceName = getPromiseServiceName(entitySet.name)
73
- entityServices.push({
74
- fileName: `${promiseServiceName}.ts`,
75
- content: generatePromiseServiceFile(entitySet, entityType, dataModel)
76
- })
77
- }
78
- }
79
-
80
- return { entityServices }
81
- }
82
-
83
- /**
84
- * Generate a single Promise service file.
85
- */
86
- const generatePromiseServiceFile = (
87
- entitySet: EntitySetModel,
88
- entityType: EntityTypeModel,
89
- dataModel: DataModel
90
- ): string => {
91
- const lines: Array<string> = []
92
- const versionConfig = getVersionConfig(dataModel.version)
93
- const serviceClassName = getServiceClassName(entitySet.name)
94
- const promiseServiceName = getPromiseServiceName(entitySet.name)
95
- const entityName = entityType.name
96
- const idTypeName = getIdTypeName(entityName)
97
- const editableName = getEditableTypeName(entityName)
98
- const hasKeys = entityType.keys.length > 0
99
-
100
- // Header and imports
101
- lines.push(`/**`)
102
- lines.push(
103
- ` * Promise-based ${entityName} service functions for ${dataModel.serviceName} OData ${dataModel.version}.`
104
- )
105
- lines.push(` * Generated by odata-effect-gen.`)
106
- lines.push(` *`)
107
- lines.push(` * These functions wrap the Effect-based service functions for use in`)
108
- lines.push(` * non-Effect environments. They take a runtime as the first argument.`)
109
- lines.push(` *`)
110
- lines.push(` * @example`)
111
- lines.push(` * \`\`\`ts`)
112
- lines.push(
113
- ` * import { ${
114
- versionConfig.runtimeType.replace("OData", "createOData").replace("Runtime", "Runtime")
115
- } } from "@odata-effect/odata-effect-promise"`
116
- )
117
- lines.push(` * import { ${promiseServiceName} } from "@template/${dataModel.serviceName.toLowerCase()}-effect"`)
118
- lines.push(` *`)
119
- lines.push(
120
- ` * const runtime = ${versionConfig.runtimeType.replace("OData", "createOData").replace("Runtime", "Runtime")}({`
121
- )
122
- lines.push(` * baseUrl: "https://server.com",`)
123
- lines.push(` * servicePath: "/odata/${dataModel.version.toLowerCase()}/"`)
124
- lines.push(` * })`)
125
- lines.push(` *`)
126
- lines.push(` * const items = await ${promiseServiceName}.getAll(runtime)`)
127
- lines.push(` * await runtime.dispose()`)
128
- lines.push(` * \`\`\``)
129
- lines.push(` *`)
130
- lines.push(` * @since 1.0.0`)
131
- lines.push(` */`)
132
- lines.push(`import { ${versionConfig.runtimeImport} } from "@odata-effect/odata-effect-promise/Runtime"`)
133
- lines.push(`import * as ${serviceClassName} from "./${serviceClassName}.js"`)
134
- lines.push(``)
135
-
136
- // Import models (type-only since they're only used in type annotations)
137
- lines.push(`import type {`)
138
- lines.push(` ${entityName},`)
139
- if (hasKeys) {
140
- lines.push(` ${idTypeName},`)
141
- }
142
- lines.push(` ${editableName}`)
143
- lines.push(`} from "./Models.js"`)
144
- lines.push(``)
145
-
146
- // Query options import (using subpath imports for tree-shaking)
147
- const queryOptionsType = dataModel.version === "V4" ? "ODataV4QueryOptions" : "ODataQueryOptions"
148
- const queryOptionsModule = dataModel.version === "V4" ? "ODataV4Client" : "ODataClient"
149
- lines.push(`import type { ${queryOptionsType} } from "@odata-effect/odata-effect/${queryOptionsModule}"`)
150
- lines.push(``)
151
-
152
- // Re-export runtime type for convenience
153
- lines.push(`// Re-export runtime type for convenience`)
154
- lines.push(`export type { ${versionConfig.runtimeType} } from "@odata-effect/odata-effect-promise/Runtime"`)
155
- lines.push(``)
156
-
157
- lines.push(`// ============================================================================`)
158
- lines.push(`// Promise-based Functions`)
159
- lines.push(`// ============================================================================`)
160
- lines.push(``)
161
-
162
- // getAll
163
- lines.push(`/**`)
164
- lines.push(` * Fetch all ${entityName} entities.`)
165
- lines.push(` *`)
166
- lines.push(` * @since 1.0.0`)
167
- lines.push(` * @category operations`)
168
- lines.push(` */`)
169
- lines.push(`export const getAll = (`)
170
- lines.push(` runtime: ${versionConfig.runtimeType},`)
171
- lines.push(` options?: ${queryOptionsType}`)
172
- lines.push(`): Promise<ReadonlyArray<${entityName}>> =>`)
173
- lines.push(` runtime.runPromise(${serviceClassName}.getAll(options))`)
174
- lines.push(``)
175
-
176
- // getById (if entity has keys)
177
- if (hasKeys) {
178
- lines.push(`/**`)
179
- lines.push(` * Fetch a single ${entityName} by ID.`)
180
- lines.push(` *`)
181
- lines.push(` * @since 1.0.0`)
182
- lines.push(` * @category operations`)
183
- lines.push(` */`)
184
- lines.push(`export const getById = (`)
185
- lines.push(` runtime: ${versionConfig.runtimeType},`)
186
- lines.push(` id: ${idTypeName}`)
187
- lines.push(`): Promise<${entityName}> =>`)
188
- lines.push(` runtime.runPromise(${serviceClassName}.getById(id))`)
189
- lines.push(``)
190
- }
191
-
192
- // create
193
- lines.push(`/**`)
194
- lines.push(` * Create a new ${entityName} entity.`)
195
- lines.push(` *`)
196
- lines.push(` * @since 1.0.0`)
197
- lines.push(` * @category operations`)
198
- lines.push(` */`)
199
- lines.push(`export const create = (`)
200
- lines.push(` runtime: ${versionConfig.runtimeType},`)
201
- lines.push(` entity: ${editableName}`)
202
- lines.push(`): Promise<${entityName}> =>`)
203
- lines.push(` runtime.runPromise(${serviceClassName}.create(entity))`)
204
- lines.push(``)
205
-
206
- // update (if entity has keys)
207
- if (hasKeys) {
208
- lines.push(`/**`)
209
- lines.push(` * Update an existing ${entityName} entity.`)
210
- lines.push(` *`)
211
- lines.push(` * @since 1.0.0`)
212
- lines.push(` * @category operations`)
213
- lines.push(` */`)
214
- lines.push(`export const update = (`)
215
- lines.push(` runtime: ${versionConfig.runtimeType},`)
216
- lines.push(` id: ${idTypeName},`)
217
- lines.push(` entity: Partial<${editableName}>`)
218
- lines.push(`): Promise<void> =>`)
219
- lines.push(` runtime.runPromise(${serviceClassName}.update(id, entity))`)
220
- lines.push(``)
221
-
222
- // delete
223
- lines.push(`/**`)
224
- lines.push(` * Delete a ${entityName} entity.`)
225
- lines.push(` *`)
226
- lines.push(` * @since 1.0.0`)
227
- lines.push(` * @category operations`)
228
- lines.push(` */`)
229
- lines.push(`export const del = (`)
230
- lines.push(` runtime: ${versionConfig.runtimeType},`)
231
- lines.push(` id: ${idTypeName}`)
232
- lines.push(`): Promise<void> =>`)
233
- lines.push(` runtime.runPromise(${serviceClassName}.del(id))`)
234
- lines.push(``)
235
-
236
- // Alias for nice naming
237
- lines.push(`// Alias for nice naming`)
238
- lines.push(`export { del as delete }`)
239
- lines.push(``)
240
- }
241
-
242
- return lines.join("\n")
243
- }