@odata-effect/odata-effect-generator 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/Cli/package.json +6 -0
  2. package/LICENSE +21 -0
  3. package/README.md +37 -0
  4. package/bin/package.json +6 -0
  5. package/digester/Digester/package.json +6 -0
  6. package/digester/TypeMapper/package.json +6 -0
  7. package/dist/cjs/Cli.js +95 -0
  8. package/dist/cjs/Cli.js.map +1 -0
  9. package/dist/cjs/bin.js +14 -0
  10. package/dist/cjs/bin.js.map +1 -0
  11. package/dist/cjs/digester/Digester.js +488 -0
  12. package/dist/cjs/digester/Digester.js.map +1 -0
  13. package/dist/cjs/digester/TypeMapper.js +262 -0
  14. package/dist/cjs/digester/TypeMapper.js.map +1 -0
  15. package/dist/cjs/generator/Generator.js +126 -0
  16. package/dist/cjs/generator/Generator.js.map +1 -0
  17. package/dist/cjs/generator/IndexGenerator.js +164 -0
  18. package/dist/cjs/generator/IndexGenerator.js.map +1 -0
  19. package/dist/cjs/generator/ModelsGenerator.js +255 -0
  20. package/dist/cjs/generator/ModelsGenerator.js.map +1 -0
  21. package/dist/cjs/generator/NamingHelper.js +164 -0
  22. package/dist/cjs/generator/NamingHelper.js.map +1 -0
  23. package/dist/cjs/generator/PackageGenerator.js +168 -0
  24. package/dist/cjs/generator/PackageGenerator.js.map +1 -0
  25. package/dist/cjs/generator/QueryModelsGenerator.js +182 -0
  26. package/dist/cjs/generator/QueryModelsGenerator.js.map +1 -0
  27. package/dist/cjs/generator/ServiceFnGenerator.js +258 -0
  28. package/dist/cjs/generator/ServiceFnGenerator.js.map +1 -0
  29. package/dist/cjs/generator/ServiceFnPromiseGenerator.js +182 -0
  30. package/dist/cjs/generator/ServiceFnPromiseGenerator.js.map +1 -0
  31. package/dist/cjs/index.js +38 -0
  32. package/dist/cjs/index.js.map +1 -0
  33. package/dist/cjs/model/DataModel.js +28 -0
  34. package/dist/cjs/model/DataModel.js.map +1 -0
  35. package/dist/cjs/parser/EdmxSchema.js +20 -0
  36. package/dist/cjs/parser/EdmxSchema.js.map +1 -0
  37. package/dist/cjs/parser/XmlParser.js +47 -0
  38. package/dist/cjs/parser/XmlParser.js.map +1 -0
  39. package/dist/dts/Cli.d.ts +9 -0
  40. package/dist/dts/Cli.d.ts.map +1 -0
  41. package/dist/dts/bin.d.ts +3 -0
  42. package/dist/dts/bin.d.ts.map +1 -0
  43. package/dist/dts/digester/Digester.d.ts +33 -0
  44. package/dist/dts/digester/Digester.d.ts.map +1 -0
  45. package/dist/dts/digester/TypeMapper.d.ts +79 -0
  46. package/dist/dts/digester/TypeMapper.d.ts.map +1 -0
  47. package/dist/dts/generator/Generator.d.ts +45 -0
  48. package/dist/dts/generator/Generator.d.ts.map +1 -0
  49. package/dist/dts/generator/IndexGenerator.d.ts +14 -0
  50. package/dist/dts/generator/IndexGenerator.d.ts.map +1 -0
  51. package/dist/dts/generator/ModelsGenerator.d.ts +14 -0
  52. package/dist/dts/generator/ModelsGenerator.d.ts.map +1 -0
  53. package/dist/dts/generator/NamingHelper.d.ts +110 -0
  54. package/dist/dts/generator/NamingHelper.d.ts.map +1 -0
  55. package/dist/dts/generator/PackageGenerator.d.ts +53 -0
  56. package/dist/dts/generator/PackageGenerator.d.ts.map +1 -0
  57. package/dist/dts/generator/QueryModelsGenerator.d.ts +14 -0
  58. package/dist/dts/generator/QueryModelsGenerator.d.ts.map +1 -0
  59. package/dist/dts/generator/ServiceFnGenerator.d.ts +37 -0
  60. package/dist/dts/generator/ServiceFnGenerator.d.ts.map +1 -0
  61. package/dist/dts/generator/ServiceFnPromiseGenerator.d.ts +40 -0
  62. package/dist/dts/generator/ServiceFnPromiseGenerator.d.ts.map +1 -0
  63. package/dist/dts/index.d.ts +101 -0
  64. package/dist/dts/index.d.ts.map +1 -0
  65. package/dist/dts/model/DataModel.d.ts +188 -0
  66. package/dist/dts/model/DataModel.d.ts.map +1 -0
  67. package/dist/dts/parser/EdmxSchema.d.ts +228 -0
  68. package/dist/dts/parser/EdmxSchema.d.ts.map +1 -0
  69. package/dist/dts/parser/XmlParser.d.ts +31 -0
  70. package/dist/dts/parser/XmlParser.d.ts.map +1 -0
  71. package/dist/esm/Cli.js +87 -0
  72. package/dist/esm/Cli.js.map +1 -0
  73. package/dist/esm/bin.js +12 -0
  74. package/dist/esm/bin.js.map +1 -0
  75. package/dist/esm/digester/Digester.js +478 -0
  76. package/dist/esm/digester/Digester.js.map +1 -0
  77. package/dist/esm/digester/TypeMapper.js +248 -0
  78. package/dist/esm/digester/TypeMapper.js.map +1 -0
  79. package/dist/esm/generator/Generator.js +116 -0
  80. package/dist/esm/generator/Generator.js.map +1 -0
  81. package/dist/esm/generator/IndexGenerator.js +157 -0
  82. package/dist/esm/generator/IndexGenerator.js.map +1 -0
  83. package/dist/esm/generator/ModelsGenerator.js +248 -0
  84. package/dist/esm/generator/ModelsGenerator.js.map +1 -0
  85. package/dist/esm/generator/NamingHelper.js +147 -0
  86. package/dist/esm/generator/NamingHelper.js.map +1 -0
  87. package/dist/esm/generator/PackageGenerator.js +156 -0
  88. package/dist/esm/generator/PackageGenerator.js.map +1 -0
  89. package/dist/esm/generator/QueryModelsGenerator.js +175 -0
  90. package/dist/esm/generator/QueryModelsGenerator.js.map +1 -0
  91. package/dist/esm/generator/ServiceFnGenerator.js +251 -0
  92. package/dist/esm/generator/ServiceFnGenerator.js.map +1 -0
  93. package/dist/esm/generator/ServiceFnPromiseGenerator.js +174 -0
  94. package/dist/esm/generator/ServiceFnPromiseGenerator.js.map +1 -0
  95. package/dist/esm/index.js +101 -0
  96. package/dist/esm/index.js.map +1 -0
  97. package/dist/esm/model/DataModel.js +21 -0
  98. package/dist/esm/model/DataModel.js.map +1 -0
  99. package/dist/esm/package.json +4 -0
  100. package/dist/esm/parser/EdmxSchema.js +13 -0
  101. package/dist/esm/parser/EdmxSchema.js.map +1 -0
  102. package/dist/esm/parser/XmlParser.js +37 -0
  103. package/dist/esm/parser/XmlParser.js.map +1 -0
  104. package/generator/Generator/package.json +6 -0
  105. package/generator/IndexGenerator/package.json +6 -0
  106. package/generator/ModelsGenerator/package.json +6 -0
  107. package/generator/NamingHelper/package.json +6 -0
  108. package/generator/PackageGenerator/package.json +6 -0
  109. package/generator/QueryModelsGenerator/package.json +6 -0
  110. package/generator/ServiceFnGenerator/package.json +6 -0
  111. package/generator/ServiceFnPromiseGenerator/package.json +6 -0
  112. package/model/DataModel/package.json +6 -0
  113. package/package.json +157 -0
  114. package/parser/EdmxSchema/package.json +6 -0
  115. package/parser/XmlParser/package.json +6 -0
  116. package/src/Cli.ts +115 -0
  117. package/src/bin.ts +17 -0
  118. package/src/digester/Digester.ts +600 -0
  119. package/src/digester/TypeMapper.ts +181 -0
  120. package/src/generator/Generator.ts +183 -0
  121. package/src/generator/IndexGenerator.ts +189 -0
  122. package/src/generator/ModelsGenerator.ts +344 -0
  123. package/src/generator/NamingHelper.ts +159 -0
  124. package/src/generator/PackageGenerator.ts +176 -0
  125. package/src/generator/QueryModelsGenerator.ts +228 -0
  126. package/src/generator/ServiceFnGenerator.ts +324 -0
  127. package/src/generator/ServiceFnPromiseGenerator.ts +242 -0
  128. package/src/index.ts +114 -0
  129. package/src/model/DataModel.ts +254 -0
  130. package/src/parser/EdmxSchema.ts +308 -0
  131. package/src/parser/XmlParser.ts +47 -0
@@ -0,0 +1,87 @@
1
+ /**
2
+ * CLI for OData Effect Generator.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+ import { Args, Command, Options } from "@effect/cli";
7
+ import * as FileSystem from "@effect/platform/FileSystem";
8
+ import * as Console from "effect/Console";
9
+ import * as Effect from "effect/Effect";
10
+ import { digestMetadata } from "./digester/Digester.js";
11
+ import { generate } from "./generator/Generator.js";
12
+ import { parseODataMetadata } from "./parser/XmlParser.js";
13
+ // ============================================================================
14
+ // Arguments and Options
15
+ // ============================================================================
16
+ const metadataPath = /*#__PURE__*/Args.path({
17
+ name: "metadata-path"
18
+ }).pipe(/*#__PURE__*/Args.withDescription("Path to OData metadata XML file"));
19
+ const outputDir = /*#__PURE__*/Args.path({
20
+ name: "output-dir"
21
+ }).pipe(/*#__PURE__*/Args.withDescription("Directory for generated TypeScript files"));
22
+ const serviceName = /*#__PURE__*/Options.text("service-name").pipe(Options.optional, /*#__PURE__*/Options.withDescription("Override service name (defaults to EntityContainer name)"));
23
+ const packageName = /*#__PURE__*/Options.text("package-name").pipe(Options.optional, /*#__PURE__*/Options.withDescription("NPM package name (defaults to @template/<service-name>-effect)"));
24
+ const force = /*#__PURE__*/Options.boolean("force").pipe(/*#__PURE__*/Options.withDefault(false), /*#__PURE__*/Options.withDescription("Overwrite existing files"));
25
+ // ============================================================================
26
+ // Generate Command
27
+ // ============================================================================
28
+ const generateCommand = /*#__PURE__*/Command.make("generate", {
29
+ metadataPath,
30
+ outputDir,
31
+ serviceName,
32
+ packageName,
33
+ force
34
+ }).pipe(/*#__PURE__*/Command.withDescription("Generate Effect OData client from metadata"), /*#__PURE__*/Command.withHandler(({
35
+ force: forceOverwrite,
36
+ metadataPath: metaPath,
37
+ outputDir: outDir,
38
+ packageName: pkgName,
39
+ serviceName: svcName
40
+ }) => Effect.gen(function* () {
41
+ const fs = yield* FileSystem.FileSystem;
42
+ yield* Console.log(`Reading metadata from: ${metaPath}`);
43
+ // Read metadata file
44
+ const metadataContent = yield* fs.readFileString(metaPath).pipe(Effect.mapError(error => new Error(`Failed to read metadata file: ${metaPath}. ${error}`)));
45
+ yield* Console.log("Parsing metadata...");
46
+ // Parse XML
47
+ const edmx = yield* parseODataMetadata(metadataContent);
48
+ yield* Console.log("Digesting metadata...");
49
+ // Digest metadata
50
+ const dataModel = yield* digestMetadata(edmx);
51
+ yield* Console.log(`Detected OData ${dataModel.version}`);
52
+ yield* Console.log(`Namespace: ${dataModel.namespace}`);
53
+ yield* Console.log(`Service: ${dataModel.serviceName}`);
54
+ yield* Console.log(`Entity Types: ${dataModel.entityTypes.size}`);
55
+ yield* Console.log(`Complex Types: ${dataModel.complexTypes.size}`);
56
+ yield* Console.log(`Enum Types: ${dataModel.enumTypes.size}`);
57
+ yield* Console.log(`Entity Sets: ${dataModel.entitySets.size}`);
58
+ yield* Console.log(`\nGenerating code to: ${outDir}`);
59
+ // Generate code
60
+ const config = {
61
+ outputDir: outDir,
62
+ force: forceOverwrite,
63
+ ...(svcName._tag === "Some" ? {
64
+ serviceName: svcName.value
65
+ } : {}),
66
+ ...(pkgName._tag === "Some" ? {
67
+ packageName: pkgName.value
68
+ } : {})
69
+ };
70
+ yield* generate(dataModel, config);
71
+ yield* Console.log("\nDone!");
72
+ })));
73
+ // ============================================================================
74
+ // Root Command
75
+ // ============================================================================
76
+ const rootCommand = /*#__PURE__*/Command.make("odata-effect-gen").pipe(/*#__PURE__*/Command.withSubcommands([generateCommand]));
77
+ /**
78
+ * CLI entry point.
79
+ *
80
+ * @since 1.0.0
81
+ * @category cli
82
+ */
83
+ export const cli = /*#__PURE__*/Command.run(rootCommand, {
84
+ name: "OData Effect Generator",
85
+ version: "0.0.1"
86
+ });
87
+ //# sourceMappingURL=Cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Cli.js","names":["Args","Command","Options","FileSystem","Console","Effect","digestMetadata","generate","parseODataMetadata","metadataPath","path","name","pipe","withDescription","outputDir","serviceName","text","optional","packageName","force","boolean","withDefault","generateCommand","make","withHandler","forceOverwrite","metaPath","outDir","pkgName","svcName","gen","fs","log","metadataContent","readFileString","mapError","error","Error","edmx","dataModel","version","namespace","entityTypes","size","complexTypes","enumTypes","entitySets","config","_tag","value","rootCommand","withSubcommands","cli","run"],"sources":["../../src/Cli.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI entry point for OData Effect Generator.
4
+ *
5
+ * @since 1.0.0
6
+ */
7
+ import { NodeContext, NodeRuntime } from "@effect/platform-node";
8
+ import { Effect } from "effect";
9
+ import { cli } from "./Cli.js";
10
+ const MainLive = NodeContext.layer;
11
+ cli(process.argv).pipe(Effect.provide(MainLive), NodeRuntime.runMain);
12
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","names":["NodeContext","NodeRuntime","Effect","cli","MainLive","layer","process","argv","pipe","provide","runMain"],"sources":["../../src/bin.ts"],"sourcesContent":[null],"mappings":";AAEA;;;;;AAKA,SAASA,WAAW,EAAEC,WAAW,QAAQ,uBAAuB;AAChE,SAASC,MAAM,QAAQ,QAAQ;AAC/B,SAASC,GAAG,QAAQ,UAAU;AAE9B,MAAMC,QAAQ,GAAGJ,WAAW,CAACK,KAAK;AAElCF,GAAG,CAACG,OAAO,CAACC,IAAI,CAAC,CAACC,IAAI,CACpBN,MAAM,CAACO,OAAO,CAACL,QAAQ,CAAC,EACxBH,WAAW,CAACS,OAAO,CACpB","ignoreList":[]}
@@ -0,0 +1,478 @@
1
+ /**
2
+ * Digester for converting parsed EDMX into a DataModel.
3
+ * Supports both OData V2 and V4.
4
+ *
5
+ * @since 1.0.0
6
+ */
7
+ import * as Effect from "effect/Effect";
8
+ import * as Schema from "effect/Schema";
9
+ import { getClassName, getPropertyName } from "../generator/NamingHelper.js";
10
+ import { createDataModel } from "../model/DataModel.js";
11
+ import { detectODataVersion } from "../parser/EdmxSchema.js";
12
+ import { getComplexTypeMapping, getEnumTypeMapping, getPrimitiveTypeMapping, getSimpleTypeName, isPrimitiveType, parseODataType } from "./TypeMapper.js";
13
+ /**
14
+ * Error thrown during metadata digestion.
15
+ *
16
+ * @since 1.0.0
17
+ * @category errors
18
+ */
19
+ export class DigestError extends /*#__PURE__*/Schema.TaggedError()("DigestError", {
20
+ message: Schema.String,
21
+ cause: /*#__PURE__*/Schema.optional(Schema.Unknown)
22
+ }) {}
23
+ /**
24
+ * Digest OData metadata into a DataModel.
25
+ *
26
+ * @since 1.0.0
27
+ * @category digestion
28
+ */
29
+ export const digestMetadata = edmx => Effect.try({
30
+ try: () => {
31
+ const version = detectODataVersion(edmx);
32
+ const dataServices = edmx["edmx:Edmx"]["edmx:DataServices"][0];
33
+ const schemas = dataServices.Schema;
34
+ if (!schemas || schemas.length === 0) {
35
+ throw new Error("No schemas found in metadata");
36
+ }
37
+ // Use the first schema's namespace as the main namespace
38
+ const mainSchema = schemas[0];
39
+ const namespace = mainSchema.$.Namespace;
40
+ // Find entity container
41
+ let entityContainer;
42
+ for (const schema of schemas) {
43
+ if (schema.EntityContainer && schema.EntityContainer.length > 0) {
44
+ entityContainer = schema.EntityContainer[0];
45
+ break;
46
+ }
47
+ }
48
+ const serviceName = entityContainer?.$.Name ?? "ODataService";
49
+ const dataModel = createDataModel(version, namespace, serviceName);
50
+ // Build context for type resolution
51
+ const context = buildContext(version, namespace, schemas);
52
+ // First pass: collect all type names
53
+ for (const schema of schemas) {
54
+ collectTypeNames(schema, context);
55
+ }
56
+ // Second pass: digest all types
57
+ for (const schema of schemas) {
58
+ digestSchema(schema, dataModel, context);
59
+ }
60
+ // Digest entity container
61
+ if (entityContainer) {
62
+ digestEntityContainer(entityContainer, dataModel, context);
63
+ }
64
+ return dataModel;
65
+ },
66
+ catch: error => new DigestError({
67
+ message: error instanceof Error ? error.message : "Failed to digest metadata",
68
+ cause: error
69
+ })
70
+ });
71
+ /**
72
+ * Build digestion context from schemas.
73
+ */
74
+ const buildContext = (version, namespace, schemas) => {
75
+ const associations = new Map();
76
+ // Collect V2 associations
77
+ for (const schema of schemas) {
78
+ if (schema.Association) {
79
+ for (const assoc of schema.Association) {
80
+ const fqName = `${schema.$.Namespace}.${assoc.$.Name}`;
81
+ associations.set(fqName, assoc);
82
+ }
83
+ }
84
+ }
85
+ return {
86
+ version,
87
+ namespace,
88
+ associations,
89
+ enumTypes: new Set(),
90
+ complexTypes: new Set(),
91
+ entityTypes: new Set()
92
+ };
93
+ };
94
+ /**
95
+ * First pass: collect all type names for resolution.
96
+ */
97
+ const collectTypeNames = (schema, context) => {
98
+ const ns = schema.$.Namespace;
99
+ if (schema.EnumType) {
100
+ for (const enumType of schema.EnumType) {
101
+ context.enumTypes.add(`${ns}.${enumType.$.Name}`);
102
+ }
103
+ }
104
+ if (schema.ComplexType) {
105
+ for (const complexType of schema.ComplexType) {
106
+ context.complexTypes.add(`${ns}.${complexType.$.Name}`);
107
+ }
108
+ }
109
+ if (schema.EntityType) {
110
+ for (const entityType of schema.EntityType) {
111
+ context.entityTypes.add(`${ns}.${entityType.$.Name}`);
112
+ }
113
+ }
114
+ };
115
+ /**
116
+ * Digest a single schema.
117
+ */
118
+ const digestSchema = (schema, dataModel, context) => {
119
+ const ns = schema.$.Namespace;
120
+ // Digest enum types
121
+ if (schema.EnumType) {
122
+ for (const enumType of schema.EnumType) {
123
+ const model = digestEnumType(enumType, ns);
124
+ dataModel.enumTypes.set(model.fqName, model);
125
+ }
126
+ }
127
+ // Digest complex types
128
+ if (schema.ComplexType) {
129
+ for (const complexType of schema.ComplexType) {
130
+ const model = digestComplexType(complexType, ns, context);
131
+ dataModel.complexTypes.set(model.fqName, model);
132
+ }
133
+ }
134
+ // Digest entity types
135
+ if (schema.EntityType) {
136
+ for (const entityType of schema.EntityType) {
137
+ const model = digestEntityType(entityType, ns, context);
138
+ dataModel.entityTypes.set(model.fqName, model);
139
+ }
140
+ }
141
+ // Digest operations (V4 functions and actions)
142
+ if (schema.Function) {
143
+ for (const func of schema.Function) {
144
+ const model = digestOperation(func, ns, "Function", context);
145
+ dataModel.operations.set(model.fqName, model);
146
+ }
147
+ }
148
+ if (schema.Action) {
149
+ for (const action of schema.Action) {
150
+ const model = digestOperation(action, ns, "Action", context);
151
+ dataModel.operations.set(model.fqName, model);
152
+ }
153
+ }
154
+ };
155
+ /**
156
+ * Digest an enum type.
157
+ */
158
+ const digestEnumType = (enumType, namespace) => {
159
+ const name = enumType.$.Name;
160
+ const members = enumType.Member.map((member, index) => ({
161
+ name: member.$.Name,
162
+ value: member.$.Value !== undefined ? parseInt(member.$.Value, 10) : index
163
+ }));
164
+ return {
165
+ fqName: `${namespace}.${name}`,
166
+ odataName: name,
167
+ name: getClassName(name),
168
+ members,
169
+ isFlags: enumType.$.IsFlags === "true"
170
+ };
171
+ };
172
+ /**
173
+ * Digest a complex type.
174
+ */
175
+ const digestComplexType = (complexType, namespace, context) => {
176
+ const name = complexType.$.Name;
177
+ const properties = (complexType.Property ?? []).map(p => digestProperty(p, [], context));
178
+ const navigationProperties = (complexType.NavigationProperty ?? []).map(np => digestNavigationProperty(np, context));
179
+ const result = {
180
+ fqName: `${namespace}.${name}`,
181
+ odataName: name,
182
+ name: getClassName(name),
183
+ properties,
184
+ navigationProperties,
185
+ isAbstract: complexType.$.Abstract === "true",
186
+ isOpen: complexType.$.OpenType === "true"
187
+ };
188
+ if (complexType.$.BaseType) {
189
+ return {
190
+ ...result,
191
+ baseType: complexType.$.BaseType
192
+ };
193
+ }
194
+ return result;
195
+ };
196
+ /**
197
+ * Digest an entity type.
198
+ */
199
+ const digestEntityType = (entityType, namespace, context) => {
200
+ const name = entityType.$.Name;
201
+ const keyNames = new Set();
202
+ // Collect key property names
203
+ if (entityType.Key && entityType.Key[0]?.PropertyRef) {
204
+ for (const keyRef of entityType.Key[0].PropertyRef) {
205
+ keyNames.add(keyRef.$.Name);
206
+ }
207
+ }
208
+ const properties = (entityType.Property ?? []).map(p => digestProperty(p, Array.from(keyNames), context));
209
+ const keys = properties.filter(p => p.isKey);
210
+ const navigationProperties = (entityType.NavigationProperty ?? []).map(np => digestNavigationProperty(np, context));
211
+ const result = {
212
+ fqName: `${namespace}.${name}`,
213
+ odataName: name,
214
+ name: getClassName(name),
215
+ keys,
216
+ properties,
217
+ navigationProperties,
218
+ isAbstract: entityType.$.Abstract === "true",
219
+ isOpen: entityType.$.OpenType === "true"
220
+ };
221
+ if (entityType.$.BaseType) {
222
+ return {
223
+ ...result,
224
+ baseType: entityType.$.BaseType
225
+ };
226
+ }
227
+ return result;
228
+ };
229
+ /**
230
+ * Digest a property.
231
+ */
232
+ const digestProperty = (property, keyNames, context) => {
233
+ const odataName = property.$.Name;
234
+ const odataType = property.$.Type;
235
+ const {
236
+ baseType,
237
+ isCollection
238
+ } = parseODataType(odataType);
239
+ const isKey = keyNames.includes(odataName);
240
+ const isNullable = property.$.Nullable !== "false" && !isKey;
241
+ const typeMapping = resolveTypeMapping(baseType, context);
242
+ const result = {
243
+ odataName,
244
+ name: getPropertyName(odataName),
245
+ odataType,
246
+ typeMapping,
247
+ isCollection,
248
+ isNullable,
249
+ isKey
250
+ };
251
+ const withMaxLength = property.$.MaxLength ? {
252
+ ...result,
253
+ maxLength: parseInt(property.$.MaxLength, 10)
254
+ } : result;
255
+ const withPrecision = property.$.Precision ? {
256
+ ...withMaxLength,
257
+ precision: parseInt(property.$.Precision, 10)
258
+ } : withMaxLength;
259
+ const withScale = property.$.Scale ? {
260
+ ...withPrecision,
261
+ scale: parseInt(property.$.Scale, 10)
262
+ } : withPrecision;
263
+ return withScale;
264
+ };
265
+ /**
266
+ * Check if a navigation property is V4 style (has Type attribute).
267
+ */
268
+ const isV4NavigationProperty = navProp => {
269
+ return "Type" in navProp.$;
270
+ };
271
+ /**
272
+ * Digest a navigation property.
273
+ */
274
+ const digestNavigationProperty = (navProp, context) => {
275
+ const odataName = navProp.$.Name;
276
+ // V4 style navigation property (has Type attribute)
277
+ if (isV4NavigationProperty(navProp)) {
278
+ const {
279
+ baseType,
280
+ isCollection
281
+ } = parseODataType(navProp.$.Type);
282
+ const targetTypeName = getSimpleTypeName(baseType);
283
+ const result = {
284
+ odataName,
285
+ name: getPropertyName(odataName),
286
+ targetType: targetTypeName,
287
+ isCollection,
288
+ isNullable: navProp.$.Nullable !== "false"
289
+ };
290
+ if (navProp.$.Partner) {
291
+ return {
292
+ ...result,
293
+ partner: navProp.$.Partner
294
+ };
295
+ }
296
+ return result;
297
+ }
298
+ // V2 style navigation property (uses Relationship)
299
+ const v2NavProp = navProp;
300
+ const relationship = v2NavProp.$.Relationship;
301
+ const toRole = v2NavProp.$.ToRole;
302
+ const association = context.associations.get(relationship);
303
+ let targetType = "unknown";
304
+ let isCollection = false;
305
+ if (association) {
306
+ const targetEnd = association.End.find(end => end.$.Role === toRole);
307
+ if (targetEnd) {
308
+ targetType = getSimpleTypeName(targetEnd.$.Type);
309
+ isCollection = targetEnd.$.Multiplicity === "*";
310
+ }
311
+ }
312
+ return {
313
+ odataName,
314
+ name: getPropertyName(odataName),
315
+ targetType,
316
+ isCollection,
317
+ isNullable: true
318
+ };
319
+ };
320
+ /**
321
+ * Digest entity container.
322
+ */
323
+ const digestEntityContainer = (container, dataModel, context) => {
324
+ // Digest entity sets
325
+ if (container.EntitySet) {
326
+ for (const entitySet of container.EntitySet) {
327
+ const model = {
328
+ name: entitySet.$.Name,
329
+ entityTypeFqName: entitySet.$.EntityType,
330
+ entityTypeName: getSimpleTypeName(entitySet.$.EntityType)
331
+ };
332
+ dataModel.entitySets.set(model.name, model);
333
+ }
334
+ }
335
+ // Digest singletons (V4)
336
+ if (container.Singleton) {
337
+ for (const singleton of container.Singleton) {
338
+ const model = {
339
+ name: singleton.$.Name,
340
+ typeFqName: singleton.$.Type,
341
+ typeName: getSimpleTypeName(singleton.$.Type)
342
+ };
343
+ dataModel.singletons.set(model.name, model);
344
+ }
345
+ }
346
+ // Digest V2 function imports
347
+ if (container.FunctionImport) {
348
+ for (const funcImport of container.FunctionImport) {
349
+ // Only process V2 function imports (no Function reference)
350
+ if (!funcImport.$.Function) {
351
+ const params = (funcImport.Parameter ?? []).map(p => {
352
+ const {
353
+ baseType,
354
+ isCollection
355
+ } = parseODataType(p.$.Type);
356
+ return {
357
+ name: getPropertyName(p.$.Name),
358
+ odataType: p.$.Type,
359
+ typeMapping: resolveTypeMapping(baseType, context),
360
+ isNullable: p.$.Nullable !== "false",
361
+ isCollection
362
+ };
363
+ });
364
+ let model = {
365
+ fqName: `${context.namespace}.${funcImport.$.Name}`,
366
+ odataName: funcImport.$.Name,
367
+ name: getPropertyName(funcImport.$.Name),
368
+ type: "Function",
369
+ isBound: false,
370
+ parameters: params
371
+ };
372
+ if (funcImport.$.ReturnType) {
373
+ const {
374
+ baseType,
375
+ isCollection
376
+ } = parseODataType(funcImport.$.ReturnType);
377
+ model = {
378
+ ...model,
379
+ returnType: {
380
+ odataType: funcImport.$.ReturnType,
381
+ typeMapping: resolveTypeMapping(baseType, context),
382
+ isCollection,
383
+ isNullable: false
384
+ }
385
+ };
386
+ }
387
+ if (funcImport.$.EntitySet) {
388
+ model = {
389
+ ...model,
390
+ entitySetPath: funcImport.$.EntitySet
391
+ };
392
+ }
393
+ dataModel.operations.set(model.fqName, model);
394
+ }
395
+ }
396
+ }
397
+ };
398
+ /**
399
+ * Digest an operation (Function or Action).
400
+ */
401
+ const digestOperation = (operation, namespace, type, context) => {
402
+ const name = operation.$.Name;
403
+ const isBound = operation.$.IsBound === "true";
404
+ const allParams = (operation.Parameter ?? []).map(p => {
405
+ const {
406
+ baseType,
407
+ isCollection
408
+ } = parseODataType(p.$.Type);
409
+ return {
410
+ name: getPropertyName(p.$.Name),
411
+ odataType: p.$.Type,
412
+ typeMapping: resolveTypeMapping(baseType, context),
413
+ isNullable: p.$.Nullable !== "false",
414
+ isCollection
415
+ };
416
+ });
417
+ // First parameter is binding parameter if bound
418
+ const bindingParameter = isBound && allParams.length > 0 ? allParams[0] : undefined;
419
+ const parameters = isBound ? allParams.slice(1) : allParams;
420
+ let model = {
421
+ fqName: `${namespace}.${name}`,
422
+ odataName: name,
423
+ name: getPropertyName(name),
424
+ type,
425
+ isBound,
426
+ parameters
427
+ };
428
+ if (bindingParameter) {
429
+ model = {
430
+ ...model,
431
+ bindingParameter
432
+ };
433
+ }
434
+ if (operation.ReturnType && operation.ReturnType.length > 0) {
435
+ const rt = operation.ReturnType[0];
436
+ const typeStr = rt.$?.Type ?? rt.Type ?? "";
437
+ if (typeStr) {
438
+ const {
439
+ baseType,
440
+ isCollection
441
+ } = parseODataType(typeStr);
442
+ model = {
443
+ ...model,
444
+ returnType: {
445
+ odataType: typeStr,
446
+ typeMapping: resolveTypeMapping(baseType, context),
447
+ isCollection,
448
+ isNullable: rt.$?.Nullable !== "false"
449
+ }
450
+ };
451
+ }
452
+ }
453
+ if (operation.$.EntitySetPath) {
454
+ model = {
455
+ ...model,
456
+ entitySetPath: operation.$.EntitySetPath
457
+ };
458
+ }
459
+ return model;
460
+ };
461
+ /**
462
+ * Resolve type mapping based on context.
463
+ */
464
+ const resolveTypeMapping = (type, context) => {
465
+ if (isPrimitiveType(type)) {
466
+ return getPrimitiveTypeMapping(context.version, type);
467
+ }
468
+ const simpleTypeName = getSimpleTypeName(type);
469
+ if (context.enumTypes.has(type)) {
470
+ return getEnumTypeMapping(getClassName(simpleTypeName));
471
+ }
472
+ if (context.complexTypes.has(type) || context.entityTypes.has(type)) {
473
+ return getComplexTypeMapping(getClassName(simpleTypeName));
474
+ }
475
+ // Default to complex type mapping for unknown types
476
+ return getComplexTypeMapping(getClassName(simpleTypeName));
477
+ };
478
+ //# sourceMappingURL=Digester.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Digester.js","names":["Effect","Schema","getClassName","getPropertyName","createDataModel","detectODataVersion","getComplexTypeMapping","getEnumTypeMapping","getPrimitiveTypeMapping","getSimpleTypeName","isPrimitiveType","parseODataType","DigestError","TaggedError","message","String","cause","optional","Unknown","digestMetadata","edmx","try","version","dataServices","schemas","length","Error","mainSchema","namespace","$","Namespace","entityContainer","schema","EntityContainer","serviceName","Name","dataModel","context","buildContext","collectTypeNames","digestSchema","digestEntityContainer","catch","error","associations","Map","Association","assoc","fqName","set","enumTypes","Set","complexTypes","entityTypes","ns","EnumType","enumType","add","ComplexType","complexType","EntityType","entityType","model","digestEnumType","digestComplexType","digestEntityType","Function","func","digestOperation","operations","Action","action","name","members","Member","map","member","index","value","Value","undefined","parseInt","odataName","isFlags","IsFlags","properties","Property","p","digestProperty","navigationProperties","NavigationProperty","np","digestNavigationProperty","result","isAbstract","Abstract","isOpen","OpenType","BaseType","baseType","keyNames","Key","PropertyRef","keyRef","Array","from","keys","filter","isKey","property","odataType","Type","isCollection","includes","isNullable","Nullable","typeMapping","resolveTypeMapping","withMaxLength","MaxLength","maxLength","withPrecision","Precision","precision","withScale","Scale","scale","isV4NavigationProperty","navProp","targetTypeName","targetType","Partner","partner","v2NavProp","relationship","Relationship","toRole","ToRole","association","get","targetEnd","End","find","end","Role","Multiplicity","container","EntitySet","entitySet","entityTypeFqName","entityTypeName","entitySets","Singleton","singleton","typeFqName","typeName","singletons","FunctionImport","funcImport","params","Parameter","type","isBound","parameters","ReturnType","returnType","entitySetPath","operation","IsBound","allParams","bindingParameter","slice","rt","typeStr","EntitySetPath","simpleTypeName","has"],"sources":["../../../src/digester/Digester.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}