@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.
- package/Cli/package.json +6 -0
- package/LICENSE +21 -0
- package/README.md +37 -0
- package/bin/package.json +6 -0
- package/digester/Digester/package.json +6 -0
- package/digester/TypeMapper/package.json +6 -0
- package/dist/cjs/Cli.js +95 -0
- package/dist/cjs/Cli.js.map +1 -0
- package/dist/cjs/bin.js +14 -0
- package/dist/cjs/bin.js.map +1 -0
- package/dist/cjs/digester/Digester.js +488 -0
- package/dist/cjs/digester/Digester.js.map +1 -0
- package/dist/cjs/digester/TypeMapper.js +262 -0
- package/dist/cjs/digester/TypeMapper.js.map +1 -0
- package/dist/cjs/generator/Generator.js +126 -0
- package/dist/cjs/generator/Generator.js.map +1 -0
- package/dist/cjs/generator/IndexGenerator.js +164 -0
- package/dist/cjs/generator/IndexGenerator.js.map +1 -0
- package/dist/cjs/generator/ModelsGenerator.js +255 -0
- package/dist/cjs/generator/ModelsGenerator.js.map +1 -0
- package/dist/cjs/generator/NamingHelper.js +164 -0
- package/dist/cjs/generator/NamingHelper.js.map +1 -0
- package/dist/cjs/generator/PackageGenerator.js +168 -0
- package/dist/cjs/generator/PackageGenerator.js.map +1 -0
- package/dist/cjs/generator/QueryModelsGenerator.js +182 -0
- package/dist/cjs/generator/QueryModelsGenerator.js.map +1 -0
- package/dist/cjs/generator/ServiceFnGenerator.js +258 -0
- package/dist/cjs/generator/ServiceFnGenerator.js.map +1 -0
- package/dist/cjs/generator/ServiceFnPromiseGenerator.js +182 -0
- package/dist/cjs/generator/ServiceFnPromiseGenerator.js.map +1 -0
- package/dist/cjs/index.js +38 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/model/DataModel.js +28 -0
- package/dist/cjs/model/DataModel.js.map +1 -0
- package/dist/cjs/parser/EdmxSchema.js +20 -0
- package/dist/cjs/parser/EdmxSchema.js.map +1 -0
- package/dist/cjs/parser/XmlParser.js +47 -0
- package/dist/cjs/parser/XmlParser.js.map +1 -0
- package/dist/dts/Cli.d.ts +9 -0
- package/dist/dts/Cli.d.ts.map +1 -0
- package/dist/dts/bin.d.ts +3 -0
- package/dist/dts/bin.d.ts.map +1 -0
- package/dist/dts/digester/Digester.d.ts +33 -0
- package/dist/dts/digester/Digester.d.ts.map +1 -0
- package/dist/dts/digester/TypeMapper.d.ts +79 -0
- package/dist/dts/digester/TypeMapper.d.ts.map +1 -0
- package/dist/dts/generator/Generator.d.ts +45 -0
- package/dist/dts/generator/Generator.d.ts.map +1 -0
- package/dist/dts/generator/IndexGenerator.d.ts +14 -0
- package/dist/dts/generator/IndexGenerator.d.ts.map +1 -0
- package/dist/dts/generator/ModelsGenerator.d.ts +14 -0
- package/dist/dts/generator/ModelsGenerator.d.ts.map +1 -0
- package/dist/dts/generator/NamingHelper.d.ts +110 -0
- package/dist/dts/generator/NamingHelper.d.ts.map +1 -0
- package/dist/dts/generator/PackageGenerator.d.ts +53 -0
- package/dist/dts/generator/PackageGenerator.d.ts.map +1 -0
- package/dist/dts/generator/QueryModelsGenerator.d.ts +14 -0
- package/dist/dts/generator/QueryModelsGenerator.d.ts.map +1 -0
- package/dist/dts/generator/ServiceFnGenerator.d.ts +37 -0
- package/dist/dts/generator/ServiceFnGenerator.d.ts.map +1 -0
- package/dist/dts/generator/ServiceFnPromiseGenerator.d.ts +40 -0
- package/dist/dts/generator/ServiceFnPromiseGenerator.d.ts.map +1 -0
- package/dist/dts/index.d.ts +101 -0
- package/dist/dts/index.d.ts.map +1 -0
- package/dist/dts/model/DataModel.d.ts +188 -0
- package/dist/dts/model/DataModel.d.ts.map +1 -0
- package/dist/dts/parser/EdmxSchema.d.ts +228 -0
- package/dist/dts/parser/EdmxSchema.d.ts.map +1 -0
- package/dist/dts/parser/XmlParser.d.ts +31 -0
- package/dist/dts/parser/XmlParser.d.ts.map +1 -0
- package/dist/esm/Cli.js +87 -0
- package/dist/esm/Cli.js.map +1 -0
- package/dist/esm/bin.js +12 -0
- package/dist/esm/bin.js.map +1 -0
- package/dist/esm/digester/Digester.js +478 -0
- package/dist/esm/digester/Digester.js.map +1 -0
- package/dist/esm/digester/TypeMapper.js +248 -0
- package/dist/esm/digester/TypeMapper.js.map +1 -0
- package/dist/esm/generator/Generator.js +116 -0
- package/dist/esm/generator/Generator.js.map +1 -0
- package/dist/esm/generator/IndexGenerator.js +157 -0
- package/dist/esm/generator/IndexGenerator.js.map +1 -0
- package/dist/esm/generator/ModelsGenerator.js +248 -0
- package/dist/esm/generator/ModelsGenerator.js.map +1 -0
- package/dist/esm/generator/NamingHelper.js +147 -0
- package/dist/esm/generator/NamingHelper.js.map +1 -0
- package/dist/esm/generator/PackageGenerator.js +156 -0
- package/dist/esm/generator/PackageGenerator.js.map +1 -0
- package/dist/esm/generator/QueryModelsGenerator.js +175 -0
- package/dist/esm/generator/QueryModelsGenerator.js.map +1 -0
- package/dist/esm/generator/ServiceFnGenerator.js +251 -0
- package/dist/esm/generator/ServiceFnGenerator.js.map +1 -0
- package/dist/esm/generator/ServiceFnPromiseGenerator.js +174 -0
- package/dist/esm/generator/ServiceFnPromiseGenerator.js.map +1 -0
- package/dist/esm/index.js +101 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/model/DataModel.js +21 -0
- package/dist/esm/model/DataModel.js.map +1 -0
- package/dist/esm/package.json +4 -0
- package/dist/esm/parser/EdmxSchema.js +13 -0
- package/dist/esm/parser/EdmxSchema.js.map +1 -0
- package/dist/esm/parser/XmlParser.js +37 -0
- package/dist/esm/parser/XmlParser.js.map +1 -0
- package/generator/Generator/package.json +6 -0
- package/generator/IndexGenerator/package.json +6 -0
- package/generator/ModelsGenerator/package.json +6 -0
- package/generator/NamingHelper/package.json +6 -0
- package/generator/PackageGenerator/package.json +6 -0
- package/generator/QueryModelsGenerator/package.json +6 -0
- package/generator/ServiceFnGenerator/package.json +6 -0
- package/generator/ServiceFnPromiseGenerator/package.json +6 -0
- package/model/DataModel/package.json +6 -0
- package/package.json +157 -0
- package/parser/EdmxSchema/package.json +6 -0
- package/parser/XmlParser/package.json +6 -0
- package/src/Cli.ts +115 -0
- package/src/bin.ts +17 -0
- package/src/digester/Digester.ts +600 -0
- package/src/digester/TypeMapper.ts +181 -0
- package/src/generator/Generator.ts +183 -0
- package/src/generator/IndexGenerator.ts +189 -0
- package/src/generator/ModelsGenerator.ts +344 -0
- package/src/generator/NamingHelper.ts +159 -0
- package/src/generator/PackageGenerator.ts +176 -0
- package/src/generator/QueryModelsGenerator.ts +228 -0
- package/src/generator/ServiceFnGenerator.ts +324 -0
- package/src/generator/ServiceFnPromiseGenerator.ts +242 -0
- package/src/index.ts +114 -0
- package/src/model/DataModel.ts +254 -0
- package/src/parser/EdmxSchema.ts +308 -0
- package/src/parser/XmlParser.ts +47 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.generateQueryModels = void 0;
|
|
7
|
+
var _NamingHelper = require("./NamingHelper.js");
|
|
8
|
+
/**
|
|
9
|
+
* Generate the QueryModels.ts file content.
|
|
10
|
+
*
|
|
11
|
+
* @since 1.0.0
|
|
12
|
+
* @category generation
|
|
13
|
+
*/
|
|
14
|
+
const generateQueryModels = dataModel => {
|
|
15
|
+
const lines = [];
|
|
16
|
+
// Collect all query path types needed
|
|
17
|
+
const queryPathTypes = collectQueryPathTypes(dataModel);
|
|
18
|
+
// Header
|
|
19
|
+
lines.push(`/**`);
|
|
20
|
+
lines.push(` * Type-safe query paths for ${dataModel.serviceName} entities.`);
|
|
21
|
+
lines.push(` * Generated by odata-effect-gen.`);
|
|
22
|
+
lines.push(` *`);
|
|
23
|
+
lines.push(` * @since 1.0.0`);
|
|
24
|
+
lines.push(` */`);
|
|
25
|
+
lines.push(`import {`);
|
|
26
|
+
lines.push(` ${Array.from(queryPathTypes).join(",\n ")},`);
|
|
27
|
+
lines.push(` createQueryBuilder,`);
|
|
28
|
+
lines.push(` type QueryBuilder`);
|
|
29
|
+
lines.push(`} from "@odata-effect/odata-effect"`);
|
|
30
|
+
// Import entity types that have entity sets (for QueryBuilder generics)
|
|
31
|
+
const usedEntityNames = [];
|
|
32
|
+
for (const entitySet of dataModel.entitySets.values()) {
|
|
33
|
+
const entityType = dataModel.entityTypes.get(entitySet.entityTypeFqName);
|
|
34
|
+
if (entityType) {
|
|
35
|
+
usedEntityNames.push(entityType.name);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (usedEntityNames.length > 0) {
|
|
39
|
+
lines.push(`import type {`);
|
|
40
|
+
lines.push(` ${usedEntityNames.join(",\n ")}`);
|
|
41
|
+
lines.push(`} from "./Models.js"`);
|
|
42
|
+
}
|
|
43
|
+
lines.push(``);
|
|
44
|
+
// Generate complex type query paths
|
|
45
|
+
for (const complexType of dataModel.complexTypes.values()) {
|
|
46
|
+
for (const line of generateQueryInterface(complexType)) lines.push(line);
|
|
47
|
+
lines.push(``);
|
|
48
|
+
for (const line of generateQueryInstance(complexType)) lines.push(line);
|
|
49
|
+
lines.push(``);
|
|
50
|
+
}
|
|
51
|
+
// Generate entity type query paths
|
|
52
|
+
for (const entityType of dataModel.entityTypes.values()) {
|
|
53
|
+
for (const line of generateQueryInterface(entityType)) lines.push(line);
|
|
54
|
+
lines.push(``);
|
|
55
|
+
for (const line of generateQueryInstance(entityType)) lines.push(line);
|
|
56
|
+
lines.push(``);
|
|
57
|
+
}
|
|
58
|
+
// Generate query builder factories for entity sets
|
|
59
|
+
for (const entitySet of dataModel.entitySets.values()) {
|
|
60
|
+
const entityType = dataModel.entityTypes.get(entitySet.entityTypeFqName);
|
|
61
|
+
if (entityType) {
|
|
62
|
+
for (const line of generateQueryFactory(entityType)) lines.push(line);
|
|
63
|
+
lines.push(``);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return lines.join("\n");
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Collect all query path types used in the model.
|
|
70
|
+
*/
|
|
71
|
+
exports.generateQueryModels = generateQueryModels;
|
|
72
|
+
const collectQueryPathTypes = dataModel => {
|
|
73
|
+
const types = new Set();
|
|
74
|
+
const addPropertyTypes = props => {
|
|
75
|
+
for (const prop of props) {
|
|
76
|
+
types.add(prop.typeMapping.queryPath.split("<")[0]);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
const addNavPropertyTypes = navProps => {
|
|
80
|
+
for (const navProp of navProps) {
|
|
81
|
+
types.add(navProp.isCollection ? "CollectionPath" : "EntityPath");
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
for (const complexType of dataModel.complexTypes.values()) {
|
|
85
|
+
addPropertyTypes(complexType.properties);
|
|
86
|
+
addNavPropertyTypes(complexType.navigationProperties);
|
|
87
|
+
}
|
|
88
|
+
for (const entityType of dataModel.entityTypes.values()) {
|
|
89
|
+
addPropertyTypes(entityType.properties);
|
|
90
|
+
addNavPropertyTypes(entityType.navigationProperties);
|
|
91
|
+
}
|
|
92
|
+
return types;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Generate a query interface for a type.
|
|
96
|
+
*/
|
|
97
|
+
const generateQueryInterface = type => {
|
|
98
|
+
const lines = [];
|
|
99
|
+
const interfaceName = (0, _NamingHelper.getQueryInterfaceName)(type.name);
|
|
100
|
+
lines.push(`/**`);
|
|
101
|
+
lines.push(` * Query paths for ${type.odataName}.`);
|
|
102
|
+
lines.push(` *`);
|
|
103
|
+
lines.push(` * @since 1.0.0`);
|
|
104
|
+
lines.push(` * @category query-paths`);
|
|
105
|
+
lines.push(` */`);
|
|
106
|
+
lines.push(`export interface ${interfaceName} {`);
|
|
107
|
+
for (const prop of type.properties) {
|
|
108
|
+
const basePathType = prop.typeMapping.queryPath;
|
|
109
|
+
// If it's a collection of complex/entity types, wrap in CollectionPath
|
|
110
|
+
const pathType = prop.isCollection && basePathType.startsWith("EntityPath<") ? basePathType.replace("EntityPath<", "CollectionPath<") : basePathType;
|
|
111
|
+
lines.push(` readonly ${prop.name}: ${pathType}`);
|
|
112
|
+
}
|
|
113
|
+
for (const navProp of type.navigationProperties) {
|
|
114
|
+
const targetQName = (0, _NamingHelper.getQueryInterfaceName)((0, _NamingHelper.getClassName)(navProp.targetType));
|
|
115
|
+
const pathType = navProp.isCollection ? `CollectionPath<${targetQName}>` : `EntityPath<${targetQName}>`;
|
|
116
|
+
lines.push(` readonly ${navProp.name}: ${pathType}`);
|
|
117
|
+
}
|
|
118
|
+
lines.push(`}`);
|
|
119
|
+
return lines;
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Generate a query instance for a type.
|
|
123
|
+
*/
|
|
124
|
+
const generateQueryInstance = type => {
|
|
125
|
+
const lines = [];
|
|
126
|
+
const interfaceName = (0, _NamingHelper.getQueryInterfaceName)(type.name);
|
|
127
|
+
const instanceName = (0, _NamingHelper.getQueryInstanceName)(type.name);
|
|
128
|
+
lines.push(`/**`);
|
|
129
|
+
lines.push(` * Query paths instance for ${type.odataName}.`);
|
|
130
|
+
lines.push(` *`);
|
|
131
|
+
lines.push(` * @since 1.0.0`);
|
|
132
|
+
lines.push(` * @category query-paths`);
|
|
133
|
+
lines.push(` */`);
|
|
134
|
+
lines.push(`export const ${instanceName}: ${interfaceName} = {`);
|
|
135
|
+
const allFields = [...type.properties, ...type.navigationProperties];
|
|
136
|
+
for (let i = 0; i < type.properties.length; i++) {
|
|
137
|
+
const prop = type.properties[i];
|
|
138
|
+
let pathClass = prop.typeMapping.queryPath.split("<")[0];
|
|
139
|
+
// If it's a collection of complex/entity types, use CollectionPath instead of EntityPath
|
|
140
|
+
if (prop.isCollection && pathClass === "EntityPath") {
|
|
141
|
+
pathClass = "CollectionPath";
|
|
142
|
+
}
|
|
143
|
+
const isLast = i === allFields.length - 1;
|
|
144
|
+
// For EntityPath and CollectionPath, we need to provide the nested query paths
|
|
145
|
+
if (pathClass === "EntityPath" || pathClass === "CollectionPath") {
|
|
146
|
+
// Extract the target type from the queryPath generic (e.g., "EntityPath<QAddress>" -> "QAddress")
|
|
147
|
+
const targetMatch = prop.typeMapping.queryPath.match(/<Q(\w+)>/);
|
|
148
|
+
const targetInstanceName = targetMatch ? `q${targetMatch[1]}` : "undefined";
|
|
149
|
+
lines.push(` ${prop.name}: new ${pathClass}("${prop.odataName}", () => ${targetInstanceName})${isLast ? "" : ","}`);
|
|
150
|
+
} else {
|
|
151
|
+
lines.push(` ${prop.name}: new ${pathClass}("${prop.odataName}")${isLast ? "" : ","}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
for (let i = 0; i < type.navigationProperties.length; i++) {
|
|
155
|
+
const navProp = type.navigationProperties[i];
|
|
156
|
+
const targetInstanceName = (0, _NamingHelper.getQueryInstanceName)((0, _NamingHelper.getClassName)(navProp.targetType));
|
|
157
|
+
const pathClass = navProp.isCollection ? "CollectionPath" : "EntityPath";
|
|
158
|
+
const isLast = i === type.navigationProperties.length - 1;
|
|
159
|
+
lines.push(` ${navProp.name}: new ${pathClass}("${navProp.odataName}", () => ${targetInstanceName})${isLast ? "" : ","}`);
|
|
160
|
+
}
|
|
161
|
+
lines.push(`}`);
|
|
162
|
+
return lines;
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* Generate a query builder factory for an entity type.
|
|
166
|
+
*/
|
|
167
|
+
const generateQueryFactory = entityType => {
|
|
168
|
+
const lines = [];
|
|
169
|
+
const interfaceName = (0, _NamingHelper.getQueryInterfaceName)(entityType.name);
|
|
170
|
+
const instanceName = (0, _NamingHelper.getQueryInstanceName)(entityType.name);
|
|
171
|
+
const factoryName = (0, _NamingHelper.getQueryFactoryName)(entityType.name);
|
|
172
|
+
lines.push(`/**`);
|
|
173
|
+
lines.push(` * Creates a type-safe query builder for ${entityType.odataName} entities.`);
|
|
174
|
+
lines.push(` *`);
|
|
175
|
+
lines.push(` * @since 1.0.0`);
|
|
176
|
+
lines.push(` * @category constructors`);
|
|
177
|
+
lines.push(` */`);
|
|
178
|
+
lines.push(`export const ${factoryName} = (): QueryBuilder<${entityType.name}, ${interfaceName}> =>`);
|
|
179
|
+
lines.push(` createQueryBuilder<${entityType.name}, ${interfaceName}>(${instanceName})`);
|
|
180
|
+
return lines;
|
|
181
|
+
};
|
|
182
|
+
//# sourceMappingURL=QueryModelsGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryModelsGenerator.js","names":["_NamingHelper","require","generateQueryModels","dataModel","lines","queryPathTypes","collectQueryPathTypes","push","serviceName","Array","from","join","usedEntityNames","entitySet","entitySets","values","entityType","entityTypes","get","entityTypeFqName","name","length","complexType","complexTypes","line","generateQueryInterface","generateQueryInstance","generateQueryFactory","exports","types","Set","addPropertyTypes","props","prop","add","typeMapping","queryPath","split","addNavPropertyTypes","navProps","navProp","isCollection","properties","navigationProperties","type","interfaceName","getQueryInterfaceName","odataName","basePathType","pathType","startsWith","replace","targetQName","getClassName","targetType","instanceName","getQueryInstanceName","allFields","i","pathClass","isLast","targetMatch","match","targetInstanceName","factoryName","getQueryFactoryName"],"sources":["../../../src/generator/QueryModelsGenerator.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.generateServiceFns = void 0;
|
|
7
|
+
var _NamingHelper = require("./NamingHelper.js");
|
|
8
|
+
const V2_CONFIG = {
|
|
9
|
+
odataNamespace: "OData",
|
|
10
|
+
buildEntityPath: "buildEntityPath",
|
|
11
|
+
queryOptionsType: "ODataQueryOptions",
|
|
12
|
+
clientConfigTag: "ODataClientConfig"
|
|
13
|
+
};
|
|
14
|
+
const V4_CONFIG = {
|
|
15
|
+
odataNamespace: "ODataV4",
|
|
16
|
+
buildEntityPath: "buildEntityPathV4",
|
|
17
|
+
queryOptionsType: "ODataV4QueryOptions",
|
|
18
|
+
clientConfigTag: "ODataV4ClientConfig"
|
|
19
|
+
};
|
|
20
|
+
const getVersionConfig = version => version === "V4" ? V4_CONFIG : V2_CONFIG;
|
|
21
|
+
/**
|
|
22
|
+
* Generate all tree-shakable service function files.
|
|
23
|
+
*
|
|
24
|
+
* @since 1.0.0
|
|
25
|
+
* @category generation
|
|
26
|
+
*/
|
|
27
|
+
const generateServiceFns = dataModel => {
|
|
28
|
+
const entityServices = [];
|
|
29
|
+
// Generate individual entity service files
|
|
30
|
+
for (const entitySet of dataModel.entitySets.values()) {
|
|
31
|
+
const entityType = dataModel.entityTypes.get(entitySet.entityTypeFqName);
|
|
32
|
+
if (entityType) {
|
|
33
|
+
const serviceClassName = (0, _NamingHelper.getServiceClassName)(entitySet.name);
|
|
34
|
+
entityServices.push({
|
|
35
|
+
fileName: `${serviceClassName}.ts`,
|
|
36
|
+
content: generateEntityServiceFnFile(entitySet, entityType, dataModel)
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
entityServices
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Generate a single entity service function file.
|
|
46
|
+
*/
|
|
47
|
+
exports.generateServiceFns = generateServiceFns;
|
|
48
|
+
const generateEntityServiceFnFile = (entitySet, entityType, dataModel) => {
|
|
49
|
+
const lines = [];
|
|
50
|
+
const versionConfig = getVersionConfig(dataModel.version);
|
|
51
|
+
const serviceClassName = (0, _NamingHelper.getServiceClassName)(entitySet.name);
|
|
52
|
+
const entityName = entityType.name;
|
|
53
|
+
const idTypeName = (0, _NamingHelper.getIdTypeName)(entityName);
|
|
54
|
+
const editableName = (0, _NamingHelper.getEditableTypeName)(entityName);
|
|
55
|
+
const hasKeys = entityType.keys.length > 0;
|
|
56
|
+
const isV4 = dataModel.version === "V4";
|
|
57
|
+
// Header and imports
|
|
58
|
+
lines.push(`/**`);
|
|
59
|
+
lines.push(` * Tree-shakable ${entityName} service functions for ${dataModel.serviceName} OData ${dataModel.version}.`);
|
|
60
|
+
lines.push(` * Generated by odata-effect-gen.`);
|
|
61
|
+
lines.push(` *`);
|
|
62
|
+
lines.push(` * @example`);
|
|
63
|
+
lines.push(` * \`\`\`ts`);
|
|
64
|
+
lines.push(` * // Namespace import - nice autocomplete, tree-shakable`);
|
|
65
|
+
lines.push(` * import { ${serviceClassName} } from "@template/${dataModel.serviceName.toLowerCase()}-effect"`);
|
|
66
|
+
lines.push(` * const items = yield* ${serviceClassName}.getAll()`);
|
|
67
|
+
lines.push(` *`);
|
|
68
|
+
lines.push(` * // Direct import - maximum tree-shaking`);
|
|
69
|
+
lines.push(` * import { getAll } from "@template/${dataModel.serviceName.toLowerCase()}-effect/${serviceClassName}"`);
|
|
70
|
+
lines.push(` * const items = yield* getAll()`);
|
|
71
|
+
lines.push(` * \`\`\``);
|
|
72
|
+
lines.push(` *`);
|
|
73
|
+
lines.push(` * @since 1.0.0`);
|
|
74
|
+
lines.push(` */`);
|
|
75
|
+
lines.push(`import type * as Effect from "effect/Effect"`);
|
|
76
|
+
lines.push(`import * as Schema from "effect/Schema"`);
|
|
77
|
+
lines.push(`import type { HttpClient } from "@effect/platform"`);
|
|
78
|
+
lines.push(`import type * as HttpClientError from "@effect/platform/HttpClientError"`);
|
|
79
|
+
lines.push(`import type * as HttpBody from "@effect/platform/HttpBody"`);
|
|
80
|
+
lines.push(``);
|
|
81
|
+
// Import models
|
|
82
|
+
lines.push(`import {`);
|
|
83
|
+
lines.push(` ${entityName},`);
|
|
84
|
+
if (hasKeys) {
|
|
85
|
+
lines.push(` type ${idTypeName},`);
|
|
86
|
+
}
|
|
87
|
+
lines.push(` ${editableName}`);
|
|
88
|
+
lines.push(`} from "./Models.js"`);
|
|
89
|
+
lines.push(``);
|
|
90
|
+
// Import OData infrastructure (version-specific)
|
|
91
|
+
lines.push(`import {`);
|
|
92
|
+
lines.push(` ${versionConfig.odataNamespace},`);
|
|
93
|
+
lines.push(` ${versionConfig.buildEntityPath},`);
|
|
94
|
+
lines.push(` ${versionConfig.clientConfigTag},`);
|
|
95
|
+
lines.push(` type ${versionConfig.queryOptionsType},`);
|
|
96
|
+
if (!isV4) {
|
|
97
|
+
lines.push(` type SapError,`);
|
|
98
|
+
}
|
|
99
|
+
lines.push(` type ODataError,`);
|
|
100
|
+
lines.push(` type ParseError`);
|
|
101
|
+
lines.push(`} from "@odata-effect/odata-effect"`);
|
|
102
|
+
lines.push(``);
|
|
103
|
+
// Service error type
|
|
104
|
+
lines.push(`// ============================================================================`);
|
|
105
|
+
lines.push(`// Types`);
|
|
106
|
+
lines.push(`// ============================================================================`);
|
|
107
|
+
lines.push(``);
|
|
108
|
+
lines.push(`/**`);
|
|
109
|
+
lines.push(` * Error type for ${entityName} service operations.`);
|
|
110
|
+
lines.push(` *`);
|
|
111
|
+
lines.push(` * @since 1.0.0`);
|
|
112
|
+
lines.push(` * @category errors`);
|
|
113
|
+
lines.push(` */`);
|
|
114
|
+
lines.push(`export type ${serviceClassName}Error =`);
|
|
115
|
+
lines.push(` | HttpClientError.HttpClientError`);
|
|
116
|
+
lines.push(` | HttpBody.HttpBodyError`);
|
|
117
|
+
lines.push(` | ParseError`);
|
|
118
|
+
if (!isV4) {
|
|
119
|
+
lines.push(` | SapError`);
|
|
120
|
+
}
|
|
121
|
+
lines.push(` | ODataError`);
|
|
122
|
+
lines.push(``);
|
|
123
|
+
// Dependencies type
|
|
124
|
+
lines.push(`/**`);
|
|
125
|
+
lines.push(` * Dependencies required for ${entityName} service operations.`);
|
|
126
|
+
lines.push(` *`);
|
|
127
|
+
lines.push(` * @since 1.0.0`);
|
|
128
|
+
lines.push(` * @category context`);
|
|
129
|
+
lines.push(` */`);
|
|
130
|
+
lines.push(`export type ${serviceClassName}Context = ${versionConfig.clientConfigTag} | HttpClient.HttpClient`);
|
|
131
|
+
lines.push(``);
|
|
132
|
+
// ID normalizer (if entity has keys)
|
|
133
|
+
if (hasKeys) {
|
|
134
|
+
lines.push(`// ============================================================================`);
|
|
135
|
+
lines.push(`// Internal Helpers`);
|
|
136
|
+
lines.push(`// ============================================================================`);
|
|
137
|
+
lines.push(``);
|
|
138
|
+
const normalizeIdFn = `normalizeId`;
|
|
139
|
+
lines.push(`const ${normalizeIdFn} = (id: ${idTypeName}): string =>`);
|
|
140
|
+
if (entityType.keys.length === 1) {
|
|
141
|
+
const keyProp = entityType.keys[0];
|
|
142
|
+
const keyTsType = keyProp.typeMapping.tsType;
|
|
143
|
+
const primitiveCheck = keyTsType === "number" ? "number" : "string";
|
|
144
|
+
lines.push(` typeof id === "${primitiveCheck}" ? String(id) : String(id.${keyProp.name})`);
|
|
145
|
+
} else {
|
|
146
|
+
const keyParts = entityType.keys.map(k => `${k.odataName}='\${String(id.${k.name})}'`).join(",");
|
|
147
|
+
lines.push(` typeof id === "string" ? id : \`${keyParts}\``);
|
|
148
|
+
}
|
|
149
|
+
lines.push(``);
|
|
150
|
+
}
|
|
151
|
+
// Standalone functions
|
|
152
|
+
lines.push(`// ============================================================================`);
|
|
153
|
+
lines.push(`// Standalone Tree-Shakable Functions`);
|
|
154
|
+
lines.push(`// ============================================================================`);
|
|
155
|
+
lines.push(``);
|
|
156
|
+
// getAll
|
|
157
|
+
lines.push(`/**`);
|
|
158
|
+
lines.push(` * Fetch all ${entityName} entities.`);
|
|
159
|
+
lines.push(` *`);
|
|
160
|
+
lines.push(` * @since 1.0.0`);
|
|
161
|
+
lines.push(` * @category operations`);
|
|
162
|
+
lines.push(` */`);
|
|
163
|
+
lines.push(`export const getAll = (`);
|
|
164
|
+
lines.push(` options?: ${versionConfig.queryOptionsType}`);
|
|
165
|
+
lines.push(`): Effect.Effect<`);
|
|
166
|
+
lines.push(` ReadonlyArray<${entityName}>,`);
|
|
167
|
+
lines.push(` ${serviceClassName}Error,`);
|
|
168
|
+
lines.push(` ${serviceClassName}Context`);
|
|
169
|
+
lines.push(`> =>`);
|
|
170
|
+
lines.push(` ${versionConfig.odataNamespace}.getCollection("${entitySet.name}", ${entityName}, options)`);
|
|
171
|
+
lines.push(``);
|
|
172
|
+
// getById (if entity has keys)
|
|
173
|
+
if (hasKeys) {
|
|
174
|
+
const keyObj = entityType.keys.length === 1 ? `{ ${entityType.keys[0].odataName}: normalizeId(id) }` : `normalizeId(id)`;
|
|
175
|
+
lines.push(`/**`);
|
|
176
|
+
lines.push(` * Fetch a single ${entityName} by ID.`);
|
|
177
|
+
lines.push(` *`);
|
|
178
|
+
lines.push(` * @since 1.0.0`);
|
|
179
|
+
lines.push(` * @category operations`);
|
|
180
|
+
lines.push(` */`);
|
|
181
|
+
lines.push(`export const getById = (`);
|
|
182
|
+
lines.push(` id: ${idTypeName}`);
|
|
183
|
+
lines.push(`): Effect.Effect<`);
|
|
184
|
+
lines.push(` ${entityName},`);
|
|
185
|
+
lines.push(` ${serviceClassName}Error,`);
|
|
186
|
+
lines.push(` ${serviceClassName}Context`);
|
|
187
|
+
lines.push(`> =>`);
|
|
188
|
+
lines.push(` ${versionConfig.odataNamespace}.get(`);
|
|
189
|
+
lines.push(` ${versionConfig.buildEntityPath}("${entitySet.name}", ${keyObj}),`);
|
|
190
|
+
lines.push(` ${entityName}`);
|
|
191
|
+
lines.push(` )`);
|
|
192
|
+
lines.push(``);
|
|
193
|
+
}
|
|
194
|
+
// create
|
|
195
|
+
lines.push(`/**`);
|
|
196
|
+
lines.push(` * Create a new ${entityName} entity.`);
|
|
197
|
+
lines.push(` *`);
|
|
198
|
+
lines.push(` * @since 1.0.0`);
|
|
199
|
+
lines.push(` * @category operations`);
|
|
200
|
+
lines.push(` */`);
|
|
201
|
+
lines.push(`export const create = (`);
|
|
202
|
+
lines.push(` entity: ${editableName}`);
|
|
203
|
+
lines.push(`): Effect.Effect<`);
|
|
204
|
+
lines.push(` ${entityName},`);
|
|
205
|
+
lines.push(` ${serviceClassName}Error,`);
|
|
206
|
+
lines.push(` ${serviceClassName}Context`);
|
|
207
|
+
lines.push(`> =>`);
|
|
208
|
+
lines.push(` ${versionConfig.odataNamespace}.post("${entitySet.name}", entity, ${editableName}, ${entityName})`);
|
|
209
|
+
lines.push(``);
|
|
210
|
+
// update (if entity has keys)
|
|
211
|
+
if (hasKeys) {
|
|
212
|
+
const keyObj = entityType.keys.length === 1 ? `{ ${entityType.keys[0].odataName}: normalizeId(id) }` : `normalizeId(id)`;
|
|
213
|
+
lines.push(`/**`);
|
|
214
|
+
lines.push(` * Update an existing ${entityName} entity.`);
|
|
215
|
+
lines.push(` *`);
|
|
216
|
+
lines.push(` * @since 1.0.0`);
|
|
217
|
+
lines.push(` * @category operations`);
|
|
218
|
+
lines.push(` */`);
|
|
219
|
+
lines.push(`export const update = (`);
|
|
220
|
+
lines.push(` id: ${idTypeName},`);
|
|
221
|
+
lines.push(` entity: Partial<${editableName}>`);
|
|
222
|
+
lines.push(`): Effect.Effect<`);
|
|
223
|
+
lines.push(` void,`);
|
|
224
|
+
lines.push(` ${serviceClassName}Error,`);
|
|
225
|
+
lines.push(` ${serviceClassName}Context`);
|
|
226
|
+
lines.push(`> =>`);
|
|
227
|
+
lines.push(` ${versionConfig.odataNamespace}.patch(`);
|
|
228
|
+
lines.push(` ${versionConfig.buildEntityPath}("${entitySet.name}", ${keyObj}),`);
|
|
229
|
+
lines.push(` entity,`);
|
|
230
|
+
lines.push(` Schema.partial(${editableName})`);
|
|
231
|
+
lines.push(` )`);
|
|
232
|
+
lines.push(``);
|
|
233
|
+
// delete
|
|
234
|
+
lines.push(`/**`);
|
|
235
|
+
lines.push(` * Delete a ${entityName} entity.`);
|
|
236
|
+
lines.push(` *`);
|
|
237
|
+
lines.push(` * @since 1.0.0`);
|
|
238
|
+
lines.push(` * @category operations`);
|
|
239
|
+
lines.push(` */`);
|
|
240
|
+
lines.push(`export const del = (`);
|
|
241
|
+
lines.push(` id: ${idTypeName}`);
|
|
242
|
+
lines.push(`): Effect.Effect<`);
|
|
243
|
+
lines.push(` void,`);
|
|
244
|
+
lines.push(` ${serviceClassName}Error,`);
|
|
245
|
+
lines.push(` ${serviceClassName}Context`);
|
|
246
|
+
lines.push(`> =>`);
|
|
247
|
+
lines.push(` ${versionConfig.odataNamespace}.del(`);
|
|
248
|
+
lines.push(` ${versionConfig.buildEntityPath}("${entitySet.name}", ${keyObj})`);
|
|
249
|
+
lines.push(` )`);
|
|
250
|
+
lines.push(``);
|
|
251
|
+
// Alias for nice naming
|
|
252
|
+
lines.push(`// Alias for nice naming`);
|
|
253
|
+
lines.push(`export { del as delete }`);
|
|
254
|
+
lines.push(``);
|
|
255
|
+
}
|
|
256
|
+
return lines.join("\n");
|
|
257
|
+
};
|
|
258
|
+
//# sourceMappingURL=ServiceFnGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceFnGenerator.js","names":["_NamingHelper","require","V2_CONFIG","odataNamespace","buildEntityPath","queryOptionsType","clientConfigTag","V4_CONFIG","getVersionConfig","version","generateServiceFns","dataModel","entityServices","entitySet","entitySets","values","entityType","entityTypes","get","entityTypeFqName","serviceClassName","getServiceClassName","name","push","fileName","content","generateEntityServiceFnFile","exports","lines","versionConfig","entityName","idTypeName","getIdTypeName","editableName","getEditableTypeName","hasKeys","keys","length","isV4","serviceName","toLowerCase","normalizeIdFn","keyProp","keyTsType","typeMapping","tsType","primitiveCheck","keyParts","map","k","odataName","join","keyObj"],"sources":["../../../src/generator/ServiceFnGenerator.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getPromiseServiceName = exports.generatePromiseServiceFns = void 0;
|
|
7
|
+
var _NamingHelper = require("./NamingHelper.js");
|
|
8
|
+
const V2_CONFIG = {
|
|
9
|
+
runtimeType: "ODataRuntime",
|
|
10
|
+
runtimeImport: "type ODataRuntime"
|
|
11
|
+
};
|
|
12
|
+
const V4_CONFIG = {
|
|
13
|
+
runtimeType: "ODataV4Runtime",
|
|
14
|
+
runtimeImport: "type ODataV4Runtime"
|
|
15
|
+
};
|
|
16
|
+
const getVersionConfig = version => version === "V4" ? V4_CONFIG : V2_CONFIG;
|
|
17
|
+
/**
|
|
18
|
+
* Get the Promise service name (e.g., "ProductsServicePromise").
|
|
19
|
+
*/
|
|
20
|
+
const getPromiseServiceName = entitySetName => `${(0, _NamingHelper.getServiceClassName)(entitySetName)}Promise`;
|
|
21
|
+
/**
|
|
22
|
+
* Generate all Promise-based service function files.
|
|
23
|
+
*
|
|
24
|
+
* @since 1.0.0
|
|
25
|
+
* @category generation
|
|
26
|
+
*/
|
|
27
|
+
exports.getPromiseServiceName = getPromiseServiceName;
|
|
28
|
+
const generatePromiseServiceFns = dataModel => {
|
|
29
|
+
const entityServices = [];
|
|
30
|
+
// Generate individual Promise service files
|
|
31
|
+
for (const entitySet of dataModel.entitySets.values()) {
|
|
32
|
+
const entityType = dataModel.entityTypes.get(entitySet.entityTypeFqName);
|
|
33
|
+
if (entityType) {
|
|
34
|
+
const promiseServiceName = getPromiseServiceName(entitySet.name);
|
|
35
|
+
entityServices.push({
|
|
36
|
+
fileName: `${promiseServiceName}.ts`,
|
|
37
|
+
content: generatePromiseServiceFile(entitySet, entityType, dataModel)
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
entityServices
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Generate a single Promise service file.
|
|
47
|
+
*/
|
|
48
|
+
exports.generatePromiseServiceFns = generatePromiseServiceFns;
|
|
49
|
+
const generatePromiseServiceFile = (entitySet, entityType, dataModel) => {
|
|
50
|
+
const lines = [];
|
|
51
|
+
const versionConfig = getVersionConfig(dataModel.version);
|
|
52
|
+
const serviceClassName = (0, _NamingHelper.getServiceClassName)(entitySet.name);
|
|
53
|
+
const promiseServiceName = getPromiseServiceName(entitySet.name);
|
|
54
|
+
const entityName = entityType.name;
|
|
55
|
+
const idTypeName = (0, _NamingHelper.getIdTypeName)(entityName);
|
|
56
|
+
const editableName = (0, _NamingHelper.getEditableTypeName)(entityName);
|
|
57
|
+
const hasKeys = entityType.keys.length > 0;
|
|
58
|
+
// Header and imports
|
|
59
|
+
lines.push(`/**`);
|
|
60
|
+
lines.push(` * Promise-based ${entityName} service functions for ${dataModel.serviceName} OData ${dataModel.version}.`);
|
|
61
|
+
lines.push(` * Generated by odata-effect-gen.`);
|
|
62
|
+
lines.push(` *`);
|
|
63
|
+
lines.push(` * These functions wrap the Effect-based service functions for use in`);
|
|
64
|
+
lines.push(` * non-Effect environments. They take a runtime as the first argument.`);
|
|
65
|
+
lines.push(` *`);
|
|
66
|
+
lines.push(` * @example`);
|
|
67
|
+
lines.push(` * \`\`\`ts`);
|
|
68
|
+
lines.push(` * import { ${versionConfig.runtimeType.replace("OData", "createOData").replace("Runtime", "Runtime")} } from "@odata-effect/odata-effect-promise"`);
|
|
69
|
+
lines.push(` * import { ${promiseServiceName} } from "@template/${dataModel.serviceName.toLowerCase()}-effect"`);
|
|
70
|
+
lines.push(` *`);
|
|
71
|
+
lines.push(` * const runtime = ${versionConfig.runtimeType.replace("OData", "createOData").replace("Runtime", "Runtime")}({`);
|
|
72
|
+
lines.push(` * baseUrl: "https://server.com",`);
|
|
73
|
+
lines.push(` * servicePath: "/odata/${dataModel.version.toLowerCase()}/"`);
|
|
74
|
+
lines.push(` * })`);
|
|
75
|
+
lines.push(` *`);
|
|
76
|
+
lines.push(` * const items = await ${promiseServiceName}.getAll(runtime)`);
|
|
77
|
+
lines.push(` * await runtime.dispose()`);
|
|
78
|
+
lines.push(` * \`\`\``);
|
|
79
|
+
lines.push(` *`);
|
|
80
|
+
lines.push(` * @since 1.0.0`);
|
|
81
|
+
lines.push(` */`);
|
|
82
|
+
lines.push(`import { ${versionConfig.runtimeImport} } from "@odata-effect/odata-effect-promise"`);
|
|
83
|
+
lines.push(`import * as ${serviceClassName} from "./${serviceClassName}.js"`);
|
|
84
|
+
lines.push(``);
|
|
85
|
+
// Import models
|
|
86
|
+
lines.push(`import {`);
|
|
87
|
+
lines.push(` ${entityName},`);
|
|
88
|
+
if (hasKeys) {
|
|
89
|
+
lines.push(` type ${idTypeName},`);
|
|
90
|
+
}
|
|
91
|
+
lines.push(` ${editableName}`);
|
|
92
|
+
lines.push(`} from "./Models.js"`);
|
|
93
|
+
lines.push(``);
|
|
94
|
+
// Query options import
|
|
95
|
+
const queryOptionsType = dataModel.version === "V4" ? "ODataV4QueryOptions" : "ODataQueryOptions";
|
|
96
|
+
lines.push(`import type { ${queryOptionsType} } from "@odata-effect/odata-effect"`);
|
|
97
|
+
lines.push(``);
|
|
98
|
+
// Re-export runtime type for convenience
|
|
99
|
+
lines.push(`// Re-export runtime type for convenience`);
|
|
100
|
+
lines.push(`export type { ${versionConfig.runtimeType} } from "@odata-effect/odata-effect-promise"`);
|
|
101
|
+
lines.push(``);
|
|
102
|
+
lines.push(`// ============================================================================`);
|
|
103
|
+
lines.push(`// Promise-based Functions`);
|
|
104
|
+
lines.push(`// ============================================================================`);
|
|
105
|
+
lines.push(``);
|
|
106
|
+
// getAll
|
|
107
|
+
lines.push(`/**`);
|
|
108
|
+
lines.push(` * Fetch all ${entityName} entities.`);
|
|
109
|
+
lines.push(` *`);
|
|
110
|
+
lines.push(` * @since 1.0.0`);
|
|
111
|
+
lines.push(` * @category operations`);
|
|
112
|
+
lines.push(` */`);
|
|
113
|
+
lines.push(`export const getAll = (`);
|
|
114
|
+
lines.push(` runtime: ${versionConfig.runtimeType},`);
|
|
115
|
+
lines.push(` options?: ${queryOptionsType}`);
|
|
116
|
+
lines.push(`): Promise<ReadonlyArray<${entityName}>> =>`);
|
|
117
|
+
lines.push(` runtime.runPromise(${serviceClassName}.getAll(options))`);
|
|
118
|
+
lines.push(``);
|
|
119
|
+
// getById (if entity has keys)
|
|
120
|
+
if (hasKeys) {
|
|
121
|
+
lines.push(`/**`);
|
|
122
|
+
lines.push(` * Fetch a single ${entityName} by ID.`);
|
|
123
|
+
lines.push(` *`);
|
|
124
|
+
lines.push(` * @since 1.0.0`);
|
|
125
|
+
lines.push(` * @category operations`);
|
|
126
|
+
lines.push(` */`);
|
|
127
|
+
lines.push(`export const getById = (`);
|
|
128
|
+
lines.push(` runtime: ${versionConfig.runtimeType},`);
|
|
129
|
+
lines.push(` id: ${idTypeName}`);
|
|
130
|
+
lines.push(`): Promise<${entityName}> =>`);
|
|
131
|
+
lines.push(` runtime.runPromise(${serviceClassName}.getById(id))`);
|
|
132
|
+
lines.push(``);
|
|
133
|
+
}
|
|
134
|
+
// create
|
|
135
|
+
lines.push(`/**`);
|
|
136
|
+
lines.push(` * Create a new ${entityName} entity.`);
|
|
137
|
+
lines.push(` *`);
|
|
138
|
+
lines.push(` * @since 1.0.0`);
|
|
139
|
+
lines.push(` * @category operations`);
|
|
140
|
+
lines.push(` */`);
|
|
141
|
+
lines.push(`export const create = (`);
|
|
142
|
+
lines.push(` runtime: ${versionConfig.runtimeType},`);
|
|
143
|
+
lines.push(` entity: ${editableName}`);
|
|
144
|
+
lines.push(`): Promise<${entityName}> =>`);
|
|
145
|
+
lines.push(` runtime.runPromise(${serviceClassName}.create(entity))`);
|
|
146
|
+
lines.push(``);
|
|
147
|
+
// update (if entity has keys)
|
|
148
|
+
if (hasKeys) {
|
|
149
|
+
lines.push(`/**`);
|
|
150
|
+
lines.push(` * Update an existing ${entityName} entity.`);
|
|
151
|
+
lines.push(` *`);
|
|
152
|
+
lines.push(` * @since 1.0.0`);
|
|
153
|
+
lines.push(` * @category operations`);
|
|
154
|
+
lines.push(` */`);
|
|
155
|
+
lines.push(`export const update = (`);
|
|
156
|
+
lines.push(` runtime: ${versionConfig.runtimeType},`);
|
|
157
|
+
lines.push(` id: ${idTypeName},`);
|
|
158
|
+
lines.push(` entity: Partial<${editableName}>`);
|
|
159
|
+
lines.push(`): Promise<void> =>`);
|
|
160
|
+
lines.push(` runtime.runPromise(${serviceClassName}.update(id, entity))`);
|
|
161
|
+
lines.push(``);
|
|
162
|
+
// delete
|
|
163
|
+
lines.push(`/**`);
|
|
164
|
+
lines.push(` * Delete a ${entityName} entity.`);
|
|
165
|
+
lines.push(` *`);
|
|
166
|
+
lines.push(` * @since 1.0.0`);
|
|
167
|
+
lines.push(` * @category operations`);
|
|
168
|
+
lines.push(` */`);
|
|
169
|
+
lines.push(`export const del = (`);
|
|
170
|
+
lines.push(` runtime: ${versionConfig.runtimeType},`);
|
|
171
|
+
lines.push(` id: ${idTypeName}`);
|
|
172
|
+
lines.push(`): Promise<void> =>`);
|
|
173
|
+
lines.push(` runtime.runPromise(${serviceClassName}.del(id))`);
|
|
174
|
+
lines.push(``);
|
|
175
|
+
// Alias for nice naming
|
|
176
|
+
lines.push(`// Alias for nice naming`);
|
|
177
|
+
lines.push(`export { del as delete }`);
|
|
178
|
+
lines.push(``);
|
|
179
|
+
}
|
|
180
|
+
return lines.join("\n");
|
|
181
|
+
};
|
|
182
|
+
//# sourceMappingURL=ServiceFnPromiseGenerator.js.map
|