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