@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,248 @@
1
+ import { getClassName, getEditableTypeName, getIdTypeName } from "./NamingHelper.js";
2
+ /**
3
+ * Get dependencies for a type (complex types it references via properties or baseType).
4
+ */
5
+ const getTypeDependencies = (type, allComplexTypes, allEntityTypes) => {
6
+ const deps = new Set();
7
+ // Add base type dependency if it exists
8
+ if (type.baseType) {
9
+ const baseTypeName = getClassName(type.baseType.split(".").pop() ?? type.baseType);
10
+ if (allComplexTypes.has(baseTypeName) || allEntityTypes.has(baseTypeName)) {
11
+ deps.add(baseTypeName);
12
+ }
13
+ }
14
+ // Add property type dependencies (for complex types referenced in properties)
15
+ for (const prop of type.properties) {
16
+ const propTypeName = prop.typeMapping.effectSchema;
17
+ if (allComplexTypes.has(propTypeName)) {
18
+ deps.add(propTypeName);
19
+ }
20
+ }
21
+ return deps;
22
+ };
23
+ /**
24
+ * Topologically sort types based on their dependencies.
25
+ */
26
+ const sortTypesByDependency = (types, allComplexTypes, allEntityTypes) => {
27
+ const sorted = [];
28
+ const visited = new Set();
29
+ const visiting = new Set();
30
+ const visit = type => {
31
+ if (visited.has(type.name)) return;
32
+ if (visiting.has(type.name)) {
33
+ // Circular dependency - just add it
34
+ visited.add(type.name);
35
+ sorted.push(type);
36
+ return;
37
+ }
38
+ visiting.add(type.name);
39
+ const deps = getTypeDependencies(type, allComplexTypes, allEntityTypes);
40
+ for (const depName of deps) {
41
+ const depType = types.find(t => t.name === depName);
42
+ if (depType && !visited.has(depName)) {
43
+ visit(depType);
44
+ }
45
+ }
46
+ visiting.delete(type.name);
47
+ visited.add(type.name);
48
+ sorted.push(type);
49
+ };
50
+ for (const type of types) {
51
+ visit(type);
52
+ }
53
+ return sorted;
54
+ };
55
+ /**
56
+ * Generate the Models.ts file content.
57
+ *
58
+ * @since 1.0.0
59
+ * @category generation
60
+ */
61
+ export const generateModels = dataModel => {
62
+ const lines = [];
63
+ // Collect all type names for dependency resolution
64
+ const allComplexTypes = new Set(Array.from(dataModel.complexTypes.values()).map(t => t.name));
65
+ const allEntityTypes = new Set(Array.from(dataModel.entityTypes.values()).map(t => t.name));
66
+ // Header
67
+ lines.push(`/**`);
68
+ lines.push(` * Effect Schema models for ${dataModel.serviceName} OData service.`);
69
+ lines.push(` * Generated by odata-effect-gen.`);
70
+ lines.push(` *`);
71
+ lines.push(` * @since 1.0.0`);
72
+ lines.push(` */`);
73
+ lines.push(`import * as Schema from "effect/Schema"`);
74
+ lines.push(``);
75
+ // Generate enum types (no dependencies, always first)
76
+ for (const enumType of dataModel.enumTypes.values()) {
77
+ for (const line of generateEnumType(enumType)) lines.push(line);
78
+ lines.push(``);
79
+ }
80
+ // Generate complex types in dependency order
81
+ const sortedComplexTypes = sortTypesByDependency(Array.from(dataModel.complexTypes.values()), allComplexTypes, allEntityTypes);
82
+ for (const complexType of sortedComplexTypes) {
83
+ for (const line of generateComplexType(complexType, dataModel)) lines.push(line);
84
+ lines.push(``);
85
+ }
86
+ // Generate entity types in dependency order
87
+ const sortedEntityTypes = sortTypesByDependency(Array.from(dataModel.entityTypes.values()), allComplexTypes, allEntityTypes);
88
+ for (const entityType of sortedEntityTypes) {
89
+ for (const line of generateEntityType(entityType, dataModel)) lines.push(line);
90
+ lines.push(``);
91
+ }
92
+ return lines.join("\n");
93
+ };
94
+ /**
95
+ * Generate an enum type.
96
+ */
97
+ const generateEnumType = enumType => {
98
+ const lines = [];
99
+ const members = enumType.members.map(m => `"${m.name}"`).join(", ");
100
+ lines.push(`/**`);
101
+ lines.push(` * ${enumType.odataName} enum type.`);
102
+ lines.push(` *`);
103
+ lines.push(` * @since 1.0.0`);
104
+ lines.push(` * @category enums`);
105
+ lines.push(` */`);
106
+ lines.push(`export const ${enumType.name} = Schema.Literal(${members})`);
107
+ lines.push(`export type ${enumType.name} = Schema.Schema.Type<typeof ${enumType.name}>`);
108
+ return lines;
109
+ };
110
+ /**
111
+ * Generate a complex type.
112
+ */
113
+ const generateComplexType = (complexType, dataModel) => {
114
+ const lines = [];
115
+ lines.push(`/**`);
116
+ lines.push(` * ${complexType.odataName} complex type.`);
117
+ lines.push(` *`);
118
+ lines.push(` * @since 1.0.0`);
119
+ lines.push(` * @category models`);
120
+ lines.push(` */`);
121
+ const fields = generateSchemaFields(complexType.properties, complexType.navigationProperties, dataModel);
122
+ lines.push(`export class ${complexType.name} extends Schema.Class<${complexType.name}>("${complexType.name}")({`);
123
+ for (const f of fields) lines.push(` ${f}`);
124
+ lines.push(`}) {}`);
125
+ // Generate editable type
126
+ lines.push(``);
127
+ lines.push(`/**`);
128
+ lines.push(` * Editable ${complexType.odataName} for creating/updating operations.`);
129
+ lines.push(` *`);
130
+ lines.push(` * @since 1.0.0`);
131
+ lines.push(` * @category models`);
132
+ lines.push(` */`);
133
+ const editableFields = generateEditableSchemaFields(complexType.properties);
134
+ const editableName = getEditableTypeName(complexType.name);
135
+ lines.push(`export const ${editableName} = Schema.Struct({`);
136
+ for (const f of editableFields) lines.push(` ${f}`);
137
+ lines.push(`})`);
138
+ lines.push(`export type ${editableName} = Schema.Schema.Type<typeof ${editableName}>`);
139
+ return lines;
140
+ };
141
+ /**
142
+ * Generate an entity type with ID and editable variants.
143
+ */
144
+ const generateEntityType = (entityType, dataModel) => {
145
+ const lines = [];
146
+ // Main entity class
147
+ lines.push(`/**`);
148
+ lines.push(` * ${entityType.odataName} entity type.`);
149
+ lines.push(` *`);
150
+ lines.push(` * @since 1.0.0`);
151
+ lines.push(` * @category models`);
152
+ lines.push(` */`);
153
+ const fields = generateSchemaFields(entityType.properties, entityType.navigationProperties, dataModel);
154
+ lines.push(`export class ${entityType.name} extends Schema.Class<${entityType.name}>("${entityType.name}")({`);
155
+ for (const f of fields) lines.push(` ${f}`);
156
+ lines.push(`}) {}`);
157
+ // ID type
158
+ if (entityType.keys.length > 0) {
159
+ lines.push(``);
160
+ lines.push(`/**`);
161
+ lines.push(` * ${entityType.odataName} ID type.`);
162
+ lines.push(` *`);
163
+ lines.push(` * @since 1.0.0`);
164
+ lines.push(` * @category models`);
165
+ lines.push(` */`);
166
+ const idTypeName = getIdTypeName(entityType.name);
167
+ if (entityType.keys.length === 1) {
168
+ const key = entityType.keys[0];
169
+ const keySchema = getPropertySchemaType(key, false);
170
+ lines.push(`export const ${idTypeName} = Schema.Union(`);
171
+ lines.push(` ${keySchema},`);
172
+ lines.push(` Schema.Struct({ ${key.name}: ${keySchema} })`);
173
+ lines.push(`)`);
174
+ } else {
175
+ // Composite key
176
+ const keyFields = entityType.keys.map(k => {
177
+ const schema = getPropertySchemaType(k, false);
178
+ return `${k.name}: ${schema}`;
179
+ });
180
+ lines.push(`export const ${idTypeName} = Schema.Union(`);
181
+ lines.push(` Schema.String,`);
182
+ lines.push(` Schema.Struct({ ${keyFields.join(", ")} })`);
183
+ lines.push(`)`);
184
+ }
185
+ lines.push(`export type ${idTypeName} = Schema.Schema.Type<typeof ${idTypeName}>`);
186
+ }
187
+ // Editable type
188
+ lines.push(``);
189
+ lines.push(`/**`);
190
+ lines.push(` * Editable ${entityType.odataName} for creating/updating operations.`);
191
+ lines.push(` *`);
192
+ lines.push(` * @since 1.0.0`);
193
+ lines.push(` * @category models`);
194
+ lines.push(` */`);
195
+ const editableFields = generateEditableSchemaFields(entityType.properties.filter(p => !p.isKey));
196
+ const editableName = getEditableTypeName(entityType.name);
197
+ lines.push(`export const ${editableName} = Schema.Struct({`);
198
+ for (const f of editableFields) lines.push(` ${f}`);
199
+ lines.push(`})`);
200
+ lines.push(`export type ${editableName} = Schema.Schema.Type<typeof ${editableName}>`);
201
+ return lines;
202
+ };
203
+ /**
204
+ * Generate schema field definitions for a class.
205
+ * Note: Navigation properties are excluded to avoid circular reference issues.
206
+ * They can be loaded via $expand queries.
207
+ */
208
+ const generateSchemaFields = (properties, _navigationProperties, _dataModel) => {
209
+ const fields = [];
210
+ for (let i = 0; i < properties.length; i++) {
211
+ const prop = properties[i];
212
+ const schemaType = getPropertySchemaType(prop, prop.isNullable && !prop.isKey);
213
+ const isLast = i === properties.length - 1;
214
+ fields.push(`${prop.name}: ${schemaType}${isLast ? "" : ","}`);
215
+ }
216
+ // Navigation properties are intentionally excluded from Schema.Class
217
+ // to avoid circular reference issues. They can be loaded via $expand.
218
+ return fields;
219
+ };
220
+ /**
221
+ * Generate schema field definitions for an editable struct.
222
+ */
223
+ const generateEditableSchemaFields = properties => {
224
+ const fields = [];
225
+ for (let i = 0; i < properties.length; i++) {
226
+ const prop = properties[i];
227
+ const schemaType = getPropertySchemaType(prop, prop.isNullable);
228
+ const isLast = i === properties.length - 1;
229
+ fields.push(`${prop.name}: ${schemaType}${isLast ? "" : ","}`);
230
+ }
231
+ return fields;
232
+ };
233
+ /**
234
+ * Get the Schema type for a property.
235
+ */
236
+ const getPropertySchemaType = (prop, makeOptional) => {
237
+ let baseType = prop.typeMapping.effectSchema;
238
+ // Handle collection
239
+ if (prop.isCollection) {
240
+ baseType = `Schema.Array(${baseType})`;
241
+ }
242
+ // Handle nullable/optional
243
+ if (makeOptional) {
244
+ return `Schema.optionalWith(${baseType}, { nullable: true })`;
245
+ }
246
+ return baseType;
247
+ };
248
+ //# sourceMappingURL=ModelsGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelsGenerator.js","names":["getClassName","getEditableTypeName","getIdTypeName","getTypeDependencies","type","allComplexTypes","allEntityTypes","deps","Set","baseType","baseTypeName","split","pop","has","add","prop","properties","propTypeName","typeMapping","effectSchema","sortTypesByDependency","types","sorted","visited","visiting","visit","name","push","depName","depType","find","t","delete","generateModels","dataModel","lines","Array","from","complexTypes","values","map","entityTypes","serviceName","enumType","enumTypes","line","generateEnumType","sortedComplexTypes","complexType","generateComplexType","sortedEntityTypes","entityType","generateEntityType","join","members","m","odataName","fields","generateSchemaFields","navigationProperties","f","editableFields","generateEditableSchemaFields","editableName","keys","length","idTypeName","key","keySchema","getPropertySchemaType","keyFields","k","schema","filter","p","isKey","_navigationProperties","_dataModel","i","schemaType","isNullable","isLast","makeOptional","isCollection"],"sources":["../../../src/generator/ModelsGenerator.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Naming utilities for code generation.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+ /**
7
+ * Convert a string to PascalCase.
8
+ *
9
+ * @example
10
+ * toPascalCase("hello_world") // "HelloWorld"
11
+ * toPascalCase("helloWorld") // "HelloWorld"
12
+ *
13
+ * @since 1.0.0
14
+ * @category naming
15
+ */
16
+ export const toPascalCase = str => {
17
+ return str.replace(/[-_](.)/g, (_, char) => char.toUpperCase()).replace(/^(.)/, char => char.toUpperCase());
18
+ };
19
+ /**
20
+ * Convert a string to camelCase.
21
+ *
22
+ * @example
23
+ * toCamelCase("HelloWorld") // "helloWorld"
24
+ * toCamelCase("hello_world") // "helloWorld"
25
+ *
26
+ * @since 1.0.0
27
+ * @category naming
28
+ */
29
+ export const toCamelCase = str => {
30
+ const pascal = toPascalCase(str);
31
+ return pascal.charAt(0).toLowerCase() + pascal.slice(1);
32
+ };
33
+ /**
34
+ * Ensure a string is a valid TypeScript identifier.
35
+ * Prefixes with underscore if it starts with a number.
36
+ *
37
+ * @since 1.0.0
38
+ * @category naming
39
+ */
40
+ export const toValidIdentifier = str => {
41
+ // If starts with a number, prefix with underscore
42
+ if (/^[0-9]/.test(str)) {
43
+ return `_${str}`;
44
+ }
45
+ // Replace invalid characters with underscores
46
+ return str.replace(/[^a-zA-Z0-9_$]/g, "_");
47
+ };
48
+ /**
49
+ * Get the TypeScript property name for an OData property.
50
+ *
51
+ * @since 1.0.0
52
+ * @category naming
53
+ */
54
+ export const getPropertyName = odataName => {
55
+ return toCamelCase(toValidIdentifier(odataName));
56
+ };
57
+ /**
58
+ * Get the TypeScript class name for an OData entity or complex type.
59
+ *
60
+ * @since 1.0.0
61
+ * @category naming
62
+ */
63
+ export const getClassName = odataName => {
64
+ return toPascalCase(toValidIdentifier(odataName));
65
+ };
66
+ /**
67
+ * Get the service class name for an entity set.
68
+ *
69
+ * @example
70
+ * getServiceClassName("Products") // "ProductService"
71
+ *
72
+ * @since 1.0.0
73
+ * @category naming
74
+ */
75
+ export const getServiceClassName = entitySetName => {
76
+ // Remove trailing 's' if present to singularize
77
+ let singular = entitySetName;
78
+ if (singular.endsWith("ies")) {
79
+ singular = singular.slice(0, -3) + "y";
80
+ } else if (singular.endsWith("es") && !singular.endsWith("ses")) {
81
+ singular = singular.slice(0, -2);
82
+ } else if (singular.endsWith("s") && !singular.endsWith("ss")) {
83
+ singular = singular.slice(0, -1);
84
+ }
85
+ return `${toPascalCase(singular)}Service`;
86
+ };
87
+ /**
88
+ * Get the query paths interface name for a type.
89
+ *
90
+ * @example
91
+ * getQueryInterfaceName("Product") // "QProduct"
92
+ *
93
+ * @since 1.0.0
94
+ * @category naming
95
+ */
96
+ export const getQueryInterfaceName = typeName => {
97
+ return `Q${toPascalCase(typeName)}`;
98
+ };
99
+ /**
100
+ * Get the query paths instance name for a type.
101
+ *
102
+ * @example
103
+ * getQueryInstanceName("Product") // "qProduct"
104
+ *
105
+ * @since 1.0.0
106
+ * @category naming
107
+ */
108
+ export const getQueryInstanceName = typeName => {
109
+ return `q${toPascalCase(typeName)}`;
110
+ };
111
+ /**
112
+ * Get the query builder factory function name for a type.
113
+ *
114
+ * @example
115
+ * getQueryFactoryName("Product") // "productQuery"
116
+ *
117
+ * @since 1.0.0
118
+ * @category naming
119
+ */
120
+ export const getQueryFactoryName = typeName => {
121
+ return `${toCamelCase(typeName)}Query`;
122
+ };
123
+ /**
124
+ * Get the editable type name for an entity type.
125
+ *
126
+ * @example
127
+ * getEditableTypeName("Product") // "EditableProduct"
128
+ *
129
+ * @since 1.0.0
130
+ * @category naming
131
+ */
132
+ export const getEditableTypeName = typeName => {
133
+ return `Editable${toPascalCase(typeName)}`;
134
+ };
135
+ /**
136
+ * Get the ID type name for an entity type.
137
+ *
138
+ * @example
139
+ * getIdTypeName("Product") // "ProductId"
140
+ *
141
+ * @since 1.0.0
142
+ * @category naming
143
+ */
144
+ export const getIdTypeName = typeName => {
145
+ return `${toPascalCase(typeName)}Id`;
146
+ };
147
+ //# sourceMappingURL=NamingHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NamingHelper.js","names":["toPascalCase","str","replace","_","char","toUpperCase","toCamelCase","pascal","charAt","toLowerCase","slice","toValidIdentifier","test","getPropertyName","odataName","getClassName","getServiceClassName","entitySetName","singular","endsWith","getQueryInterfaceName","typeName","getQueryInstanceName","getQueryFactoryName","getEditableTypeName","getIdTypeName"],"sources":["../../../src/generator/NamingHelper.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;AAMA;;;;;;;;;;AAUA,OAAO,MAAMA,YAAY,GAAIC,GAAW,IAAY;EAClD,OAAOA,GAAG,CACPC,OAAO,CAAC,UAAU,EAAE,CAACC,CAAC,EAAEC,IAAI,KAAKA,IAAI,CAACC,WAAW,EAAE,CAAC,CACpDH,OAAO,CAAC,MAAM,EAAGE,IAAI,IAAKA,IAAI,CAACC,WAAW,EAAE,CAAC;AAClD,CAAC;AAED;;;;;;;;;;AAUA,OAAO,MAAMC,WAAW,GAAIL,GAAW,IAAY;EACjD,MAAMM,MAAM,GAAGP,YAAY,CAACC,GAAG,CAAC;EAChC,OAAOM,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,EAAE,GAAGF,MAAM,CAACG,KAAK,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;AAOA,OAAO,MAAMC,iBAAiB,GAAIV,GAAW,IAAY;EACvD;EACA,IAAI,QAAQ,CAACW,IAAI,CAACX,GAAG,CAAC,EAAE;IACtB,OAAO,IAAIA,GAAG,EAAE;EAClB;EACA;EACA,OAAOA,GAAG,CAACC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC;AAC5C,CAAC;AAED;;;;;;AAMA,OAAO,MAAMW,eAAe,GAAIC,SAAiB,IAAY;EAC3D,OAAOR,WAAW,CAACK,iBAAiB,CAACG,SAAS,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;AAMA,OAAO,MAAMC,YAAY,GAAID,SAAiB,IAAY;EACxD,OAAOd,YAAY,CAACW,iBAAiB,CAACG,SAAS,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;;;AASA,OAAO,MAAME,mBAAmB,GAAIC,aAAqB,IAAY;EACnE;EACA,IAAIC,QAAQ,GAAGD,aAAa;EAC5B,IAAIC,QAAQ,CAACC,QAAQ,CAAC,KAAK,CAAC,EAAE;IAC5BD,QAAQ,GAAGA,QAAQ,CAACR,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG;EACxC,CAAC,MAAM,IAAIQ,QAAQ,CAACC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAACD,QAAQ,CAACC,QAAQ,CAAC,KAAK,CAAC,EAAE;IAC/DD,QAAQ,GAAGA,QAAQ,CAACR,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAClC,CAAC,MAAM,IAAIQ,QAAQ,CAACC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAACD,QAAQ,CAACC,QAAQ,CAAC,IAAI,CAAC,EAAE;IAC7DD,QAAQ,GAAGA,QAAQ,CAACR,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAClC;EACA,OAAO,GAAGV,YAAY,CAACkB,QAAQ,CAAC,SAAS;AAC3C,CAAC;AAED;;;;;;;;;AASA,OAAO,MAAME,qBAAqB,GAAIC,QAAgB,IAAY;EAChE,OAAO,IAAIrB,YAAY,CAACqB,QAAQ,CAAC,EAAE;AACrC,CAAC;AAED;;;;;;;;;AASA,OAAO,MAAMC,oBAAoB,GAAID,QAAgB,IAAY;EAC/D,OAAO,IAAIrB,YAAY,CAACqB,QAAQ,CAAC,EAAE;AACrC,CAAC;AAED;;;;;;;;;AASA,OAAO,MAAME,mBAAmB,GAAIF,QAAgB,IAAY;EAC9D,OAAO,GAAGf,WAAW,CAACe,QAAQ,CAAC,OAAO;AACxC,CAAC;AAED;;;;;;;;;AASA,OAAO,MAAMG,mBAAmB,GAAIH,QAAgB,IAAY;EAC9D,OAAO,WAAWrB,YAAY,CAACqB,QAAQ,CAAC,EAAE;AAC5C,CAAC;AAED;;;;;;;;;AASA,OAAO,MAAMI,aAAa,GAAIJ,QAAgB,IAAY;EACxD,OAAO,GAAGrB,YAAY,CAACqB,QAAQ,CAAC,IAAI;AACtC,CAAC","ignoreList":[]}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Generate package.json content.
3
+ *
4
+ * @since 1.0.0
5
+ * @category generation
6
+ */
7
+ export const generatePackageJson = (dataModel, config) => {
8
+ const packageJson = {
9
+ name: config.packageName,
10
+ version: "0.0.0",
11
+ type: "module",
12
+ license: "MIT",
13
+ description: `Effect-based OData client for ${dataModel.serviceName} service`,
14
+ publishConfig: {
15
+ access: "public",
16
+ directory: "dist"
17
+ },
18
+ scripts: {
19
+ codegen: "build-utils prepare-v2",
20
+ build: "pnpm build-esm && pnpm build-annotate && pnpm build-cjs && build-utils pack-v2",
21
+ "build-esm": "tsc -b tsconfig.build.json",
22
+ "build-cjs": "babel build/esm --plugins @babel/transform-export-namespace-from --plugins @babel/transform-modules-commonjs --out-dir build/cjs --source-maps",
23
+ "build-annotate": "babel build/esm --plugins annotate-pure-calls --out-dir build/esm --source-maps",
24
+ check: "tsc -b tsconfig.json",
25
+ test: "vitest",
26
+ coverage: "vitest --coverage"
27
+ },
28
+ dependencies: {
29
+ "@effect/platform": "^0.94.0",
30
+ "@odata-effect/odata-effect": "workspace:*",
31
+ "@odata-effect/odata-effect-promise": "workspace:*",
32
+ effect: "^3.10.7"
33
+ },
34
+ devDependencies: {
35
+ "@odata-effect/odata-effect": "workspace:*",
36
+ "@odata-effect/odata-effect-promise": "workspace:*"
37
+ },
38
+ effect: {
39
+ generateExports: {
40
+ include: ["**/*.ts"]
41
+ },
42
+ generateIndex: {
43
+ include: ["**/*.ts"]
44
+ }
45
+ }
46
+ };
47
+ return JSON.stringify(packageJson, null, 2);
48
+ };
49
+ /**
50
+ * Generate tsconfig.json content.
51
+ *
52
+ * @since 1.0.0
53
+ * @category generation
54
+ */
55
+ export const generateTsconfig = () => {
56
+ const tsconfig = {
57
+ extends: "../../tsconfig.base.json",
58
+ include: [],
59
+ references: [{
60
+ path: "tsconfig.src.json"
61
+ }, {
62
+ path: "tsconfig.test.json"
63
+ }]
64
+ };
65
+ return JSON.stringify(tsconfig, null, 2);
66
+ };
67
+ /**
68
+ * Generate tsconfig.src.json content.
69
+ *
70
+ * @since 1.0.0
71
+ * @category generation
72
+ */
73
+ export const generateTsconfigSrc = () => {
74
+ const tsconfig = {
75
+ extends: "../../tsconfig.base.json",
76
+ include: ["src"],
77
+ references: [{
78
+ path: "../ODataEffect/tsconfig.src.json"
79
+ }, {
80
+ path: "../ODataEffectPromise/tsconfig.src.json"
81
+ }],
82
+ compilerOptions: {
83
+ types: ["node"],
84
+ outDir: "build/src",
85
+ tsBuildInfoFile: ".tsbuildinfo/src.tsbuildinfo",
86
+ rootDir: "src"
87
+ }
88
+ };
89
+ return JSON.stringify(tsconfig, null, 2);
90
+ };
91
+ /**
92
+ * Generate tsconfig.test.json content.
93
+ *
94
+ * @since 1.0.0
95
+ * @category generation
96
+ */
97
+ export const generateTsconfigTest = () => {
98
+ const tsconfig = {
99
+ extends: "../../tsconfig.base.json",
100
+ include: ["test"],
101
+ references: [{
102
+ path: "tsconfig.src.json"
103
+ }, {
104
+ path: "../ODataEffect/tsconfig.src.json"
105
+ }, {
106
+ path: "../ODataEffectPromise/tsconfig.src.json"
107
+ }],
108
+ compilerOptions: {
109
+ types: ["node"],
110
+ tsBuildInfoFile: ".tsbuildinfo/test.tsbuildinfo",
111
+ rootDir: "test",
112
+ noEmit: true
113
+ }
114
+ };
115
+ return JSON.stringify(tsconfig, null, 2);
116
+ };
117
+ /**
118
+ * Generate tsconfig.build.json content.
119
+ *
120
+ * @since 1.0.0
121
+ * @category generation
122
+ */
123
+ export const generateTsconfigBuild = () => {
124
+ const tsconfig = {
125
+ extends: "./tsconfig.src.json",
126
+ references: [{
127
+ path: "../ODataEffect/tsconfig.build.json"
128
+ }, {
129
+ path: "../ODataEffectPromise/tsconfig.build.json"
130
+ }],
131
+ compilerOptions: {
132
+ types: ["node"],
133
+ tsBuildInfoFile: ".tsbuildinfo/build.tsbuildinfo",
134
+ outDir: "build/esm",
135
+ declarationDir: "build/dts",
136
+ stripInternal: true
137
+ }
138
+ };
139
+ return JSON.stringify(tsconfig, null, 2);
140
+ };
141
+ /**
142
+ * Generate vitest.config.ts content.
143
+ *
144
+ * @since 1.0.0
145
+ * @category generation
146
+ */
147
+ export const generateVitestConfig = () => {
148
+ return `import { mergeConfig, type UserConfigExport } from "vitest/config"
149
+ import shared from "../../vitest.shared.js"
150
+
151
+ const config: UserConfigExport = {}
152
+
153
+ export default mergeConfig(shared, config)
154
+ `;
155
+ };
156
+ //# sourceMappingURL=PackageGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PackageGenerator.js","names":["generatePackageJson","dataModel","config","packageJson","name","packageName","version","type","license","description","serviceName","publishConfig","access","directory","scripts","codegen","build","check","test","coverage","dependencies","effect","devDependencies","generateExports","include","generateIndex","JSON","stringify","generateTsconfig","tsconfig","extends","references","path","generateTsconfigSrc","compilerOptions","types","outDir","tsBuildInfoFile","rootDir","generateTsconfigTest","noEmit","generateTsconfigBuild","declarationDir","stripInternal","generateVitestConfig"],"sources":["../../../src/generator/PackageGenerator.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}