@sap-ux/fe-mockserver-admin 0.0.10 → 0.0.12
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/dist/cli.js +29 -1
- package/dist/cli.js.map +1 -1
- package/dist/generate-entity-files.d.ts +5 -0
- package/dist/generate-entity-files.d.ts.map +1 -1
- package/dist/generate-entity-files.js +122 -124
- package/dist/generate-entity-files.js.map +1 -1
- package/dist/generate-types.d.ts +2 -0
- package/dist/generate-types.d.ts.map +1 -0
- package/dist/generate-types.js +169 -0
- package/dist/generate-types.js.map +1 -0
- package/dist/mockdata/EntityContainer.d.ts +6 -3
- package/dist/mockdata/EntityContainer.d.ts.map +1 -1
- package/dist/mockdata/EntityContainer.js +8 -2
- package/dist/mockdata/EntityContainer.js.map +1 -1
- package/dist/mockdata/Services.d.ts +12 -3
- package/dist/mockdata/Services.d.ts.map +1 -1
- package/dist/mockdata/Services.js +10 -5
- package/dist/mockdata/Services.js.map +1 -1
- package/package.json +2 -2
package/dist/cli.js
CHANGED
|
@@ -29,7 +29,35 @@ const fs = __importStar(require("fs"));
|
|
|
29
29
|
const path = __importStar(require("path"));
|
|
30
30
|
const generate_entity_files_1 = require("./generate-entity-files");
|
|
31
31
|
const program = new commander_1.Command();
|
|
32
|
-
program.name('fe-mockserver-admin').description('CLI for FE Mockserver administration tasks').version('0.0.
|
|
32
|
+
program.name('fe-mockserver-admin').description('CLI for FE Mockserver administration tasks').version('0.0.2');
|
|
33
|
+
program
|
|
34
|
+
.command('generate-types')
|
|
35
|
+
.description('Generate TypeScript types from OData metadata')
|
|
36
|
+
.requiredOption('-m, --metadata <path>', 'Path to the metadata.xml file')
|
|
37
|
+
.option('-o, --output <path>', 'Output directory for generated types (defaults to metadata directory)')
|
|
38
|
+
.action(async (options) => {
|
|
39
|
+
try {
|
|
40
|
+
const metadataPath = path.resolve(options.metadata);
|
|
41
|
+
const outputDir = options.output ? path.resolve(options.output) : path.dirname(metadataPath);
|
|
42
|
+
// Validate metadata file exists
|
|
43
|
+
if (!fs.existsSync(metadataPath)) {
|
|
44
|
+
console.error(`Error: Metadata file not found at: ${metadataPath}`);
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
// Ensure output directory exists
|
|
48
|
+
if (!fs.existsSync(outputDir)) {
|
|
49
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
50
|
+
}
|
|
51
|
+
console.log(`Loading metadata from: ${metadataPath}`);
|
|
52
|
+
console.log(`Output directory: ${outputDir}`);
|
|
53
|
+
const { generateTypes } = await Promise.resolve().then(() => __importStar(require('./generate-types')));
|
|
54
|
+
await generateTypes(metadataPath, outputDir);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
console.error('Error generating types:', error);
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
33
61
|
program
|
|
34
62
|
.command('generate-entity-files')
|
|
35
63
|
.description('Generate entity files from OData metadata')
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,uCAAyB;AACzB,2CAA6B;AAC7B,mEAA8D;AAE9D,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAE/G,OAAO;KACF,OAAO,CAAC,uBAAuB,CAAC;KAChC,WAAW,CAAC,2CAA2C,CAAC;KACxD,cAAc,CAAC,uBAAuB,EAAE,+BAA+B,CAAC;KACxE,MAAM,CAAC,qBAAqB,EAAE,uEAAuE,CAAC;KACtG,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACtB,IAAI;QACA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAE7F,gCAAgC;QAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;YAC9B,OAAO,CAAC,KAAK,CAAC,sCAAsC,YAAY,EAAE,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACnB;QAED,iCAAiC;QACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;YAC3B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;SAChD;QAED,OAAO,CAAC,GAAG,CAAC,0BAA0B,YAAY,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,qBAAqB,SAAS,EAAE,CAAC,CAAC;QAE9C,MAAM,IAAA,2CAAmB,EAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAEnD,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;KAC3D;IAAC,OAAO,KAAK,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACnB;AACL,CAAC,CAAC,CAAC;AAEP,8BAA8B;AAC9B,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-entity-files.d.ts","sourceRoot":"","sources":["../src/generate-entity-files.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate-entity-files.d.ts","sourceRoot":"","sources":["../src/generate-entity-files.ts"],"names":[],"mappings":"AAgBA;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAyBlF"}
|
|
@@ -28,6 +28,12 @@ const annotation_converter_1 = require("@sap-ux/annotation-converter");
|
|
|
28
28
|
const edmx_parser_1 = require("@sap-ux/edmx-parser");
|
|
29
29
|
const fs = __importStar(require("fs"));
|
|
30
30
|
const path = __importStar(require("path"));
|
|
31
|
+
const generate_types_1 = require("./generate-types");
|
|
32
|
+
/**
|
|
33
|
+
*
|
|
34
|
+
* @param METADATA_PATH
|
|
35
|
+
* @param OUTPUT_DIR
|
|
36
|
+
*/
|
|
31
37
|
async function generateEntityFiles(METADATA_PATH, OUTPUT_DIR) {
|
|
32
38
|
try {
|
|
33
39
|
console.log('Loading metadata.xml...');
|
|
@@ -36,6 +42,7 @@ async function generateEntityFiles(METADATA_PATH, OUTPUT_DIR) {
|
|
|
36
42
|
const parsedMetadata = (0, edmx_parser_1.parse)(metadataContent);
|
|
37
43
|
console.log('Converting metadata with annotation converter...');
|
|
38
44
|
const convertedMetadata = (0, annotation_converter_1.convert)(parsedMetadata);
|
|
45
|
+
await (0, generate_types_1.generateTypes)(METADATA_PATH, OUTPUT_DIR);
|
|
39
46
|
// Generate TS files for each entity set
|
|
40
47
|
for (const entitySet of convertedMetadata.entitySets) {
|
|
41
48
|
console.log(`Generating TS file for ${entitySet.name}...`);
|
|
@@ -50,33 +57,68 @@ async function generateEntityFiles(METADATA_PATH, OUTPUT_DIR) {
|
|
|
50
57
|
}
|
|
51
58
|
}
|
|
52
59
|
exports.generateEntityFiles = generateEntityFiles;
|
|
60
|
+
/**
|
|
61
|
+
*
|
|
62
|
+
* @param convertedMetadata
|
|
63
|
+
* @param OUTPUT_DIR
|
|
64
|
+
*/
|
|
53
65
|
async function generateEntityContainerFile(convertedMetadata, OUTPUT_DIR) {
|
|
54
66
|
const actions = convertedMetadata.actionImports;
|
|
55
67
|
if (actions.length > 0) {
|
|
68
|
+
const actionFunctionCase = actions
|
|
69
|
+
.map((action) => {
|
|
70
|
+
let returnType = 'unknown';
|
|
71
|
+
const actionDataType = `EntityContainerAction_${action.name}Data`;
|
|
72
|
+
if (action.action.returnType) {
|
|
73
|
+
returnType = mapODataTypeToTypeScript(action.action.returnType, action.action.returnTypeReference);
|
|
74
|
+
}
|
|
75
|
+
if (action.action.returnCollection) {
|
|
76
|
+
returnType += '[]';
|
|
77
|
+
}
|
|
78
|
+
return ` async ${action.name}(_actionDefinition: Action, _actionData: ${actionDataType}, _keys: KeyDefinitions, _odataRequest: ODataRequest): Promise<${returnType}> {
|
|
79
|
+
throw new Error('${action.name} is not implemented');
|
|
80
|
+
}`;
|
|
81
|
+
})
|
|
82
|
+
.join('\n');
|
|
56
83
|
const actionSwitchCase = actions
|
|
57
84
|
.map((action) => {
|
|
58
85
|
return `case '${action.name}':
|
|
59
|
-
|
|
86
|
+
return this.${action.name}(actionDefinition, actionData, keys, odataRequest);`;
|
|
60
87
|
})
|
|
61
88
|
.join('\n');
|
|
62
|
-
const
|
|
89
|
+
const importMap = new Set();
|
|
90
|
+
const entityActionParams = generateEntityActionParams('EntityContainer', actions.reduce((acc, action) => {
|
|
91
|
+
acc[action.name] = action.action;
|
|
92
|
+
return acc;
|
|
93
|
+
}, {}), importMap);
|
|
94
|
+
const outputPath = path.join(OUTPUT_DIR, `EntityContainer.ts`);
|
|
95
|
+
const mockEntityContainer = `import type {ODataRequest, Action, KeyDefinitions} from "@sap-ux/ui5-middleware-fe-mockserver";
|
|
96
|
+
import {MockEntityContainerContributorClass} from "@sap-ux/ui5-middleware-fe-mockserver";
|
|
97
|
+
import type { ${Array.from(importMap).join(', ')}} from "./ODataTypes";
|
|
98
|
+
${entityActionParams}
|
|
63
99
|
|
|
100
|
+
export default class EntityContainer extends MockEntityContainerContributorClass {
|
|
64
101
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
102
|
+
${actionFunctionCase}
|
|
103
|
+
|
|
104
|
+
async executeAction(actionDefinition: Action, actionData: EntityContainerActionData, keys: KeyDefinitions, odataRequest: ODataRequest): Promise<unknown> {
|
|
105
|
+
switch(actionData._type) {
|
|
68
106
|
${actionSwitchCase}
|
|
69
|
-
// Implement action handlers here
|
|
70
107
|
default:
|
|
71
|
-
|
|
108
|
+
this.throwError(\`Action \${actionDefinition.name} not implemented\`, 501);
|
|
109
|
+
return;
|
|
72
110
|
}
|
|
73
111
|
}
|
|
74
|
-
}
|
|
75
|
-
export default EntityContainer;`;
|
|
76
|
-
const outputPath = path.join(OUTPUT_DIR, `EntityContainer.ts`);
|
|
112
|
+
}`;
|
|
77
113
|
fs.writeFileSync(outputPath, mockEntityContainer);
|
|
78
114
|
}
|
|
79
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
*
|
|
118
|
+
* @param entitySet
|
|
119
|
+
* @param metadata
|
|
120
|
+
* @param OUTPUT_DIR
|
|
121
|
+
*/
|
|
80
122
|
async function generateEntityFile(entitySet, metadata, OUTPUT_DIR) {
|
|
81
123
|
const entityType = entitySet.entityType;
|
|
82
124
|
const keyName = entityType.name.split('.').pop() + 'Keys';
|
|
@@ -94,44 +136,68 @@ async function generateEntityFile(entitySet, metadata, OUTPUT_DIR) {
|
|
|
94
136
|
((_c = prop.targetType.navigationProperties.by_name(prop.partner)) === null || _c === void 0 ? void 0 : _c.referentialConstraint.length) === 0);
|
|
95
137
|
});
|
|
96
138
|
// Generate TypeScript interface for the entity
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
const entityActionParams = generateEntityActionParams(entitySet, actions);
|
|
139
|
+
const importMap = new Set();
|
|
140
|
+
importMap.add(entityType.name);
|
|
141
|
+
importMap.add(entityType.name + 'Keys');
|
|
142
|
+
const entityActionParams = generateEntityActionParams(entitySet.entityType.name, actions, importMap);
|
|
101
143
|
// Generate action switch cases
|
|
144
|
+
const actionFunctionCase = Object.keys(actions)
|
|
145
|
+
.filter((actionName) => {
|
|
146
|
+
return (!actionName.endsWith('draftEdit') &&
|
|
147
|
+
!actionName.endsWith('draftActivate') &&
|
|
148
|
+
!actionName.endsWith('draftPrepare') &&
|
|
149
|
+
!actionName.endsWith('draftDiscard'));
|
|
150
|
+
})
|
|
151
|
+
.map((actionName) => {
|
|
152
|
+
const action = actions[actionName];
|
|
153
|
+
let returnType = 'unknown';
|
|
154
|
+
const actionDataType = `${entitySet.entityType.name}Action_${action.name}Data`;
|
|
155
|
+
if (action.returnType) {
|
|
156
|
+
returnType = mapODataTypeToTypeScript(action.returnType, action.returnTypeReference);
|
|
157
|
+
}
|
|
158
|
+
if (action.returnCollection) {
|
|
159
|
+
returnType += '[]';
|
|
160
|
+
}
|
|
161
|
+
return ` async ${action.name}(_actionDefinition: Action, _actionData: ${actionDataType}, _keys: ${keyName}, _odataRequest: ODataRequest): Promise<${returnType}> {
|
|
162
|
+
throw new Error('${action.name} is not implemented');
|
|
163
|
+
}`;
|
|
164
|
+
})
|
|
165
|
+
.join('\n');
|
|
102
166
|
const actionSwitchCases = generateActionSwitchCases(actions);
|
|
103
167
|
let executeActionMethod = '';
|
|
104
|
-
if (
|
|
105
|
-
executeActionMethod = `async executeAction(actionDefinition: Action, actionData: ${actionDataName},
|
|
168
|
+
if (entityActionParams.length > 0) {
|
|
169
|
+
executeActionMethod = `async executeAction(actionDefinition: Action, actionData: ${actionDataName}, keys: ${keyName}, odataRequest: ODataRequest): Promise<object | undefined> {
|
|
106
170
|
switch(actionData._type) {
|
|
107
171
|
${actionSwitchCases}
|
|
108
172
|
default:
|
|
109
|
-
|
|
110
|
-
return
|
|
173
|
+
this.throwError(\`Action \${actionDefinition.name} not implemented\`, 501);
|
|
174
|
+
return;
|
|
111
175
|
}
|
|
112
176
|
}`;
|
|
113
177
|
}
|
|
114
178
|
// Generate getReferentialConstraints method
|
|
115
179
|
const getReferentialConstraintsMethod = generateGetReferentialConstraintsMethod(entityNavPropsWithoutConstraints);
|
|
116
180
|
const allMethods = [];
|
|
181
|
+
if (actionFunctionCase.length) {
|
|
182
|
+
allMethods.push(actionFunctionCase);
|
|
183
|
+
}
|
|
117
184
|
if (executeActionMethod.length) {
|
|
118
185
|
allMethods.push(executeActionMethod);
|
|
119
186
|
}
|
|
120
187
|
if (getReferentialConstraintsMethod.length) {
|
|
121
188
|
allMethods.push(getReferentialConstraintsMethod);
|
|
122
189
|
}
|
|
123
|
-
const fileContent = `import type {
|
|
124
|
-
|
|
125
|
-
${
|
|
126
|
-
${entityInterface}
|
|
190
|
+
const fileContent = `import type { ODataRequest, Action, NavigationProperty, PartialReferentialConstraint } from "@sap-ux/ui5-middleware-fe-mockserver"
|
|
191
|
+
import { MockDataContributorClass } from "@sap-ux/ui5-middleware-fe-mockserver"
|
|
192
|
+
import type { ${Array.from(importMap).join(', ')}} from "./ODataTypes";
|
|
127
193
|
${entityActionParams}
|
|
128
194
|
|
|
129
195
|
|
|
130
|
-
|
|
131
|
-
|
|
196
|
+
export default class ${entitySet.name}Contributor extends MockDataContributorClass<${entitySet.entityTypeName
|
|
197
|
+
.split('.')
|
|
198
|
+
.pop()}> {
|
|
199
|
+
${allMethods.join('\n\n')}
|
|
132
200
|
}
|
|
133
|
-
|
|
134
|
-
export default ${entitySet.name};
|
|
135
201
|
`;
|
|
136
202
|
//if(allMethods.length > 0) {
|
|
137
203
|
const outputPath = path.join(OUTPUT_DIR, `${entitySet.name}.ts`);
|
|
@@ -141,95 +207,7 @@ export default ${entitySet.name};
|
|
|
141
207
|
// console.log(`No method to generate for ${entitySet.name}, skipping file creation.`);
|
|
142
208
|
//}
|
|
143
209
|
}
|
|
144
|
-
function
|
|
145
|
-
const typeName = entityType.name.split('.').pop() + 'NavPropNames';
|
|
146
|
-
const properties = [];
|
|
147
|
-
for (const prop of entityType.navigationProperties) {
|
|
148
|
-
if (prop.name !== 'DraftAdministrativeData') {
|
|
149
|
-
properties.push(`"${prop.name}"`);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
if (!entityType || !entityType.navigationProperties || properties.length === 0) {
|
|
153
|
-
return `export type ${typeName} = {
|
|
154
|
-
// Navigation properties not available in metadata
|
|
155
|
-
}`;
|
|
156
|
-
}
|
|
157
|
-
return `export type ${typeName} = ${properties.join(' | ')};`;
|
|
158
|
-
}
|
|
159
|
-
function generateEntityNavPropTypesInterface(entityType) {
|
|
160
|
-
const currentType = entityType.name.split('.').pop() + 'Type';
|
|
161
|
-
const typeName = entityType.name.split('.').pop() + 'NavPropTypes';
|
|
162
|
-
const importStatements = new Set();
|
|
163
|
-
if (!entityType || !entityType.navigationProperties) {
|
|
164
|
-
return `export type ${typeName} = {
|
|
165
|
-
// Navigation properties not available in metadata
|
|
166
|
-
}`;
|
|
167
|
-
}
|
|
168
|
-
const properties = [];
|
|
169
|
-
for (const prop of entityType.navigationProperties) {
|
|
170
|
-
const targetTypeName = prop.targetType.name.split('.').pop() + 'Type';
|
|
171
|
-
if (targetTypeName !== 'DraftAdministrativeDataType' && targetTypeName !== currentType) {
|
|
172
|
-
importStatements.add(`import type { ${targetTypeName} } from "./${prop.targetType.name.split('.').pop()}";`);
|
|
173
|
-
}
|
|
174
|
-
if (targetTypeName !== 'DraftAdministrativeDataType') {
|
|
175
|
-
if (prop.isCollection) {
|
|
176
|
-
properties.push(`${prop.name}: ${targetTypeName}[];`);
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
properties.push(`${prop.name}: ${targetTypeName};`);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
return `${Array.from(importStatements).join('\n')}
|
|
184
|
-
export type ${typeName} = {
|
|
185
|
-
${properties.join('\n')}
|
|
186
|
-
}`;
|
|
187
|
-
}
|
|
188
|
-
function generateEntityInterface(entityType) {
|
|
189
|
-
var _a;
|
|
190
|
-
const typeName = entityType.name.split('.').pop() + 'Type';
|
|
191
|
-
const keyName = entityType.name.split('.').pop() + 'Keys';
|
|
192
|
-
if (!entityType || !entityType.keys) {
|
|
193
|
-
return `export type ${typeName} = {
|
|
194
|
-
// Entity type definition not available in metadata
|
|
195
|
-
};
|
|
196
|
-
export type ${keyName} = {
|
|
197
|
-
// Entity type definition not available in metadata
|
|
198
|
-
};`;
|
|
199
|
-
}
|
|
200
|
-
const keys = [];
|
|
201
|
-
const properties = [];
|
|
202
|
-
// Add key properties
|
|
203
|
-
if (entityType.keys) {
|
|
204
|
-
for (const key of entityType.keys) {
|
|
205
|
-
const prop = entityType.entityProperties.by_name(key.name);
|
|
206
|
-
if (prop) {
|
|
207
|
-
const tsType = mapODataTypeToTypeScript(prop.type);
|
|
208
|
-
const nullable = prop.nullable ? '?' : '';
|
|
209
|
-
properties.push(` ${key.name}${nullable}: ${tsType};`);
|
|
210
|
-
keys.push(` ${key.name}${nullable}: ${tsType};`);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
// Add other entity properties
|
|
215
|
-
if (entityType.entityProperties) {
|
|
216
|
-
for (const prop of entityType.entityProperties) {
|
|
217
|
-
if (!((_a = entityType.keys) === null || _a === void 0 ? void 0 : _a.some((k) => k.name === prop.name))) {
|
|
218
|
-
const tsType = mapODataTypeToTypeScript(prop.type);
|
|
219
|
-
const nullable = prop.nullable ? '?' : '';
|
|
220
|
-
properties.push(` ${prop.name}${nullable}: ${tsType};`);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
return `export type ${typeName} = {
|
|
225
|
-
${properties.join('\n')}
|
|
226
|
-
};
|
|
227
|
-
|
|
228
|
-
export type ${keyName} = {
|
|
229
|
-
${keys.join('\n')}
|
|
230
|
-
};`;
|
|
231
|
-
}
|
|
232
|
-
function mapODataTypeToTypeScript(odataType) {
|
|
210
|
+
function mapODataTypeToTypeScript(odataType, typeReference) {
|
|
233
211
|
const typeMap = {
|
|
234
212
|
'Edm.String': 'string',
|
|
235
213
|
'Edm.Int32': 'number',
|
|
@@ -244,12 +222,13 @@ function mapODataTypeToTypeScript(odataType) {
|
|
|
244
222
|
'Edm.Guid': 'string',
|
|
245
223
|
'Edm.Binary': 'string'
|
|
246
224
|
};
|
|
247
|
-
return typeMap[odataType] || 'any';
|
|
225
|
+
return typeMap[odataType] || (typeReference === null || typeReference === void 0 ? void 0 : typeReference.name) || 'any';
|
|
248
226
|
}
|
|
249
|
-
function generateEntityActionParams(
|
|
227
|
+
function generateEntityActionParams(entityTypeName, actions, importMap) {
|
|
250
228
|
if (Object.keys(actions).length === 0) {
|
|
251
229
|
return '';
|
|
252
230
|
}
|
|
231
|
+
const actionDataTypes = [];
|
|
253
232
|
const actionParams = Object.keys(actions)
|
|
254
233
|
.filter((actionName) => {
|
|
255
234
|
return (!actionName.endsWith('draftEdit') &&
|
|
@@ -259,22 +238,43 @@ function generateEntityActionParams(entitySet, actions) {
|
|
|
259
238
|
})
|
|
260
239
|
.map((actionName) => {
|
|
261
240
|
const action = actions[actionName];
|
|
241
|
+
let actionReturnType = mapODataTypeToTypeScript(action.returnType);
|
|
242
|
+
if (actionReturnType === 'any' && action.returnTypeReference) {
|
|
243
|
+
actionReturnType = action.returnTypeReference.name;
|
|
244
|
+
importMap.add(actionReturnType);
|
|
245
|
+
}
|
|
262
246
|
if (action.parameters && action.parameters.length > 0) {
|
|
263
247
|
const params = action.parameters
|
|
264
248
|
.map((param) => {
|
|
265
249
|
let tsType = mapODataTypeToTypeScript(param.type);
|
|
266
|
-
if (tsType === 'any' && param.
|
|
267
|
-
tsType =
|
|
250
|
+
if (tsType === 'any' && param.typeReference) {
|
|
251
|
+
tsType = param.typeReference.name;
|
|
252
|
+
importMap.add(tsType);
|
|
253
|
+
}
|
|
254
|
+
if (param.isCollection) {
|
|
255
|
+
tsType += '[]';
|
|
268
256
|
}
|
|
269
257
|
const optional = param.nullable ? '?' : '';
|
|
270
258
|
return ` ${param.name}${optional}: ${tsType};`;
|
|
271
259
|
})
|
|
272
260
|
.join('\n');
|
|
273
|
-
|
|
261
|
+
const actionDataTypeName = `${entityTypeName}Action_${action.name}Data`;
|
|
262
|
+
const actionDataType = `type ${actionDataTypeName} = {\n${params}\n}`;
|
|
263
|
+
actionDataTypes.push(actionDataType);
|
|
264
|
+
return ` | {\n _type: '${action.name}';\n} & ${actionDataTypeName}`;
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
const actionDataTypeName = `${entityTypeName}Action_${action.name}Data`;
|
|
268
|
+
const actionDataType = `type ${actionDataTypeName} = {\n}`;
|
|
269
|
+
actionDataTypes.push(actionDataType);
|
|
270
|
+
return ` | {\n _type: '${action.name}';\n} `;
|
|
274
271
|
}
|
|
275
272
|
})
|
|
276
273
|
.join('\n');
|
|
277
|
-
|
|
274
|
+
if (actionParams.length > 0) {
|
|
275
|
+
return `${actionDataTypes.join('\n')}\n;export type ${entityTypeName}ActionData =\n${actionParams};`;
|
|
276
|
+
}
|
|
277
|
+
return '';
|
|
278
278
|
}
|
|
279
279
|
function generateActionSwitchCases(actions) {
|
|
280
280
|
return Object.keys(actions)
|
|
@@ -283,9 +283,7 @@ function generateActionSwitchCases(actions) {
|
|
|
283
283
|
!actionName.endsWith('draftPrepare') &&
|
|
284
284
|
!actionName.endsWith('draftDiscard'))
|
|
285
285
|
.map((actionName) => ` case '${actions[actionName].name}':
|
|
286
|
-
|
|
287
|
-
console.log('Executing action: ${actions[actionName].name}');
|
|
288
|
-
return {};`)
|
|
286
|
+
return this.${actions[actionName].name}(actionDefinition, actionData, keys, odataRequest);`)
|
|
289
287
|
.join('\n');
|
|
290
288
|
}
|
|
291
289
|
function generateGetReferentialConstraintsMethod(navPropsWithoutConstraints) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-entity-files.js","sourceRoot":"","sources":["../src/generate-entity-files.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uEAAuD;AACvD,qDAA4C;
|
|
1
|
+
{"version":3,"file":"generate-entity-files.js","sourceRoot":"","sources":["../src/generate-entity-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-types.d.ts","sourceRoot":"","sources":["../src/generate-types.ts"],"names":[],"mappings":"AA0IA,wBAAsB,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAmD5E"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.generateTypes = void 0;
|
|
7
|
+
const annotation_converter_1 = require("@sap-ux/annotation-converter");
|
|
8
|
+
const edmx_parser_1 = require("@sap-ux/edmx-parser");
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
// Helper to build lookup maps for types
|
|
11
|
+
function buildTypeMaps(metadata) {
|
|
12
|
+
const entityTypeMap = new Map();
|
|
13
|
+
const complexTypeMap = new Map();
|
|
14
|
+
const typeDefMap = new Map();
|
|
15
|
+
for (const et of metadata.entityTypes) {
|
|
16
|
+
entityTypeMap.set(et.fullyQualifiedName || et.name, et);
|
|
17
|
+
}
|
|
18
|
+
for (const ct of metadata.complexTypes) {
|
|
19
|
+
complexTypeMap.set(ct.fullyQualifiedName || ct.name, ct);
|
|
20
|
+
}
|
|
21
|
+
for (const td of metadata.typeDefinitions) {
|
|
22
|
+
typeDefMap.set(td.fullyQualifiedName || td.name, td);
|
|
23
|
+
}
|
|
24
|
+
return { entityTypeMap, complexTypeMap, typeDefMap };
|
|
25
|
+
}
|
|
26
|
+
// Enhanced mapping function to handle complex types and typeDefs
|
|
27
|
+
function mapEdmTypeToTsType(edmType, typeMaps) {
|
|
28
|
+
// Handle collection types
|
|
29
|
+
const collectionMatch = edmType.match(/^Collection\((.+)\)$/);
|
|
30
|
+
if (collectionMatch) {
|
|
31
|
+
const innerType = mapEdmTypeToTsType(collectionMatch[1], typeMaps);
|
|
32
|
+
return `${innerType}[]`;
|
|
33
|
+
}
|
|
34
|
+
// Primitive EDM types
|
|
35
|
+
switch (edmType) {
|
|
36
|
+
case 'Edm.String':
|
|
37
|
+
return 'string';
|
|
38
|
+
case 'Edm.Boolean':
|
|
39
|
+
return 'boolean';
|
|
40
|
+
case 'Edm.Int32':
|
|
41
|
+
case 'Edm.Int16':
|
|
42
|
+
case 'Edm.Int64':
|
|
43
|
+
case 'Edm.Decimal':
|
|
44
|
+
case 'Edm.Double':
|
|
45
|
+
case 'Edm.Single':
|
|
46
|
+
case 'Edm.Byte':
|
|
47
|
+
case 'Edm.SByte':
|
|
48
|
+
return 'number';
|
|
49
|
+
case 'Edm.DateTimeOffset':
|
|
50
|
+
case 'Edm.Date':
|
|
51
|
+
case 'Edm.TimeOfDay':
|
|
52
|
+
return 'string';
|
|
53
|
+
case 'Edm.Guid':
|
|
54
|
+
case 'Edm.Binary':
|
|
55
|
+
return 'string';
|
|
56
|
+
}
|
|
57
|
+
// Complex types
|
|
58
|
+
if (typeMaps.complexTypeMap.has(edmType)) {
|
|
59
|
+
return typeMaps.complexTypeMap.get(edmType).name;
|
|
60
|
+
}
|
|
61
|
+
// Type definitions
|
|
62
|
+
if (typeMaps.typeDefMap.has(edmType)) {
|
|
63
|
+
return typeMaps.typeDefMap.get(edmType).name;
|
|
64
|
+
}
|
|
65
|
+
// Entity types (rare for property, but possible for navigation)
|
|
66
|
+
if (typeMaps.entityTypeMap.has(edmType)) {
|
|
67
|
+
return typeMaps.entityTypeMap.get(edmType).name;
|
|
68
|
+
}
|
|
69
|
+
// Fallback: strip namespace if present
|
|
70
|
+
return edmType.split('.').pop() || edmType;
|
|
71
|
+
}
|
|
72
|
+
// Generate TypeScript type for an entity type and its keys
|
|
73
|
+
function generateEntityType(entityType, typeMaps) {
|
|
74
|
+
var _a;
|
|
75
|
+
let result = `export type ${entityType.name} = {\n`;
|
|
76
|
+
for (const prop of entityType.entityProperties) {
|
|
77
|
+
const tsType = mapEdmTypeToTsType(prop.type, typeMaps);
|
|
78
|
+
result += ` ${prop.name}${prop.nullable ? '?' : ''}: ${tsType};\n`;
|
|
79
|
+
}
|
|
80
|
+
// Include navigation properties (wrapped with NavPropTo<...>)
|
|
81
|
+
if (entityType.navigationProperties && entityType.navigationProperties.length > 0) {
|
|
82
|
+
for (const nav of entityType.navigationProperties) {
|
|
83
|
+
// Resolve target entity type name
|
|
84
|
+
let targetName;
|
|
85
|
+
if (nav.targetType && nav.targetType.name) {
|
|
86
|
+
targetName = nav.targetType.name;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
const fqn = nav.targetTypeName || ((_a = nav.targetType) === null || _a === void 0 ? void 0 : _a.fullyQualifiedName) || '';
|
|
90
|
+
const et = typeMaps.entityTypeMap.get(fqn) || typeMaps.entityTypeMap.get((fqn || '').toString());
|
|
91
|
+
targetName = (et === null || et === void 0 ? void 0 : et.name) || (fqn ? fqn.split('.').pop() : 'any');
|
|
92
|
+
}
|
|
93
|
+
const navInnerType = nav.isCollection ? `${targetName}[]` : targetName;
|
|
94
|
+
// Navigation properties are typically optional in generated types
|
|
95
|
+
result += ` ${nav.name}?: NavPropTo<${navInnerType}>;\n`;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
result += '}\n';
|
|
99
|
+
result += `export type ${entityType.name}Keys = {\n`;
|
|
100
|
+
for (const prop of entityType.keys) {
|
|
101
|
+
const tsType = mapEdmTypeToTsType(prop.type, typeMaps);
|
|
102
|
+
result += ` ${prop.name}${prop.nullable ? '?' : ''}: ${tsType};\n`;
|
|
103
|
+
}
|
|
104
|
+
result += '}\n';
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
// Generate TypeScript type for a complex type
|
|
108
|
+
function generateComplexType(complexType, typeMaps) {
|
|
109
|
+
let result = `export type ${complexType.name} = {\n`;
|
|
110
|
+
for (const prop of complexType.properties) {
|
|
111
|
+
const tsType = mapEdmTypeToTsType(prop.type, typeMaps);
|
|
112
|
+
result += ` ${prop.name}${prop.nullable ? '?' : ''}: ${tsType};\n`;
|
|
113
|
+
}
|
|
114
|
+
result += '}\n';
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
// Generate TypeScript type alias for a type definition
|
|
118
|
+
function generateTypeDefinition(typeDefinition, typeMaps) {
|
|
119
|
+
const tsType = mapEdmTypeToTsType(typeDefinition.underlyingType, typeMaps);
|
|
120
|
+
return `export type ${typeDefinition.name} = ${tsType};\n`;
|
|
121
|
+
}
|
|
122
|
+
async function generateTypes(METADATA_PATH, OUTPUT_DIR) {
|
|
123
|
+
try {
|
|
124
|
+
console.log('Loading metadata.xml...');
|
|
125
|
+
const metadataContent = fs_1.default.readFileSync(METADATA_PATH, 'utf8');
|
|
126
|
+
console.log('Parsing EDMX...');
|
|
127
|
+
const parsedMetadata = (0, edmx_parser_1.parse)(metadataContent);
|
|
128
|
+
console.log('Converting metadata with annotation converter...');
|
|
129
|
+
const convertedMetadata = (0, annotation_converter_1.convert)(parsedMetadata);
|
|
130
|
+
// Build type maps for reference resolution
|
|
131
|
+
const typeMaps = buildTypeMaps(convertedMetadata);
|
|
132
|
+
let typeDefinitions = 'export type NavPropTo<T> = T;';
|
|
133
|
+
// Generate TS files for each entity set
|
|
134
|
+
typeDefinitions += '// ====== Entity Types ======\n\n';
|
|
135
|
+
for (const entityType of convertedMetadata.entityTypes) {
|
|
136
|
+
console.log(`Generating TS file for ${entityType.name}...`);
|
|
137
|
+
typeDefinitions += '// Type definitions for ' + entityType.name + '\n';
|
|
138
|
+
typeDefinitions += generateEntityType(entityType, typeMaps);
|
|
139
|
+
typeDefinitions += '\n';
|
|
140
|
+
}
|
|
141
|
+
if (convertedMetadata.complexTypes.length > 0) {
|
|
142
|
+
typeDefinitions += '// ====== Complex Types ======\n\n';
|
|
143
|
+
for (const complexType of convertedMetadata.complexTypes) {
|
|
144
|
+
console.log(`Generating TS file for ${complexType.name}...`);
|
|
145
|
+
typeDefinitions += '// Type definitions for ' + complexType.name + '\n';
|
|
146
|
+
typeDefinitions += generateComplexType(complexType, typeMaps);
|
|
147
|
+
typeDefinitions += '\n';
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (convertedMetadata.typeDefinitions.length > 0) {
|
|
151
|
+
typeDefinitions += '// ====== Type Definition ===\n\n';
|
|
152
|
+
for (const typeDefinition of convertedMetadata.typeDefinitions) {
|
|
153
|
+
console.log(`Generating TS file for ${typeDefinition.name}...`);
|
|
154
|
+
typeDefinitions += '// Type definitions for ' + typeDefinition.name + '\n';
|
|
155
|
+
typeDefinitions += generateTypeDefinition(typeDefinition, typeMaps);
|
|
156
|
+
typeDefinitions += '\n';
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
const outputPath = `${OUTPUT_DIR}/ODataTypes.d.ts`;
|
|
160
|
+
fs_1.default.writeFileSync(outputPath, typeDefinitions, 'utf8');
|
|
161
|
+
console.log(`Type definitions written to ${outputPath}`);
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
console.error('Error generating entity files:', error);
|
|
165
|
+
process.exit(1);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
exports.generateTypes = generateTypes;
|
|
169
|
+
//# sourceMappingURL=generate-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-types.js","sourceRoot":"","sources":["../src/generate-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
export default MockEntityContainer
|
|
1
|
+
import type { ODataRequest } from '@sap-ux/fe-mockserver-core';
|
|
2
|
+
import { MockEntityContainerContributorClass } from '@sap-ux/fe-mockserver-core';
|
|
3
|
+
export default class MockEntityContainer extends MockEntityContainerContributorClass {
|
|
4
|
+
handleRequest(odataRequest: ODataRequest): Promise<unknown>;
|
|
5
|
+
myMethod(): void;
|
|
6
|
+
}
|
|
4
7
|
//# sourceMappingURL=EntityContainer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityContainer.d.ts","sourceRoot":"","sources":["../../src/mockdata/EntityContainer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"EntityContainer.d.ts","sourceRoot":"","sources":["../../src/mockdata/EntityContainer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,mCAAmC,EAAE,MAAM,4BAA4B,CAAC;AAEjF,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,mCAAmC;IAC1E,aAAa,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAMjE,QAAQ,IAAI,IAAI;CAGnB"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
3
|
+
const fe_mockserver_core_1 = require("@sap-ux/fe-mockserver-core");
|
|
4
|
+
class MockEntityContainer extends fe_mockserver_core_1.MockEntityContainerContributorClass {
|
|
4
5
|
async handleRequest(odataRequest) {
|
|
6
|
+
this.myMethod();
|
|
7
|
+
// Example of handling a request and returning a custom response
|
|
5
8
|
odataRequest.addResponseHeader('content-type', 'text/html ;charset=utf-8');
|
|
6
9
|
return `<html><body><h1>Hello</h1></body></html>`;
|
|
7
10
|
}
|
|
8
|
-
|
|
11
|
+
myMethod() {
|
|
12
|
+
this.base.getEntityInterface('eoeoe');
|
|
13
|
+
}
|
|
14
|
+
}
|
|
9
15
|
exports.default = MockEntityContainer;
|
|
10
16
|
//# sourceMappingURL=EntityContainer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityContainer.js","sourceRoot":"","sources":["../../src/mockdata/EntityContainer.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"EntityContainer.js","sourceRoot":"","sources":["../../src/mockdata/EntityContainer.ts"],"names":[],"mappings":";;AACA,mEAAiF;AAEjF,MAAqB,mBAAoB,SAAQ,wDAAmC;IAChF,KAAK,CAAC,aAAa,CAAC,YAA0B;QAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,gEAAgE;QAChE,YAAY,CAAC,iBAAiB,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;QAC3E,OAAO,0CAA0C,CAAC;IACtD,CAAC;IACD,QAAQ;QACJ,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;CACJ;AAVD,sCAUC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { MockDataContributorClass } from '@sap-ux/fe-mockserver-core';
|
|
2
|
+
import type ODataRequest from '@sap-ux/fe-mockserver-core/dist/request/odataRequest';
|
|
2
3
|
type ServiceDefinition = {
|
|
3
4
|
url: string;
|
|
4
5
|
alias?: string;
|
|
@@ -6,6 +7,14 @@ type ServiceDefinition = {
|
|
|
6
7
|
/**
|
|
7
8
|
* Mock data contributor for services.
|
|
8
9
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
export default class Services extends MockDataContributorClass<ServiceDefinition> {
|
|
11
|
+
/**
|
|
12
|
+
* Return all the service definitions.
|
|
13
|
+
* @param __odataRequest
|
|
14
|
+
* @returns A promise that resolves to an array of service definitions.
|
|
15
|
+
*/
|
|
16
|
+
getAllEntries(__odataRequest: ODataRequest): Promise<ServiceDefinition[]>;
|
|
17
|
+
doSomething(): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
11
20
|
//# sourceMappingURL=Services.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Services.d.ts","sourceRoot":"","sources":["../../src/mockdata/Services.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Services.d.ts","sourceRoot":"","sources":["../../src/mockdata/Services.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,YAAY,MAAM,sDAAsD,CAAC;AAGrF,KAAK,iBAAiB,GAAG;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AACF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,wBAAwB,CAAC,iBAAiB,CAAC;IAC7E;;;;OAIG;IACG,aAAa,CAAC,cAAc,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAoBzE,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAGrC"}
|
|
@@ -3,20 +3,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fe_mockserver_core_1 = require("@sap-ux/fe-mockserver-core");
|
|
6
7
|
const node_path_1 = __importDefault(require("node:path"));
|
|
7
8
|
/**
|
|
8
9
|
* Mock data contributor for services.
|
|
9
10
|
*/
|
|
10
|
-
|
|
11
|
+
class Services extends fe_mockserver_core_1.MockDataContributorClass {
|
|
11
12
|
/**
|
|
12
13
|
* Return all the service definitions.
|
|
13
14
|
* @param __odataRequest
|
|
14
15
|
* @returns A promise that resolves to an array of service definitions.
|
|
15
16
|
*/
|
|
16
17
|
async getAllEntries(__odataRequest) {
|
|
17
|
-
var _a
|
|
18
|
-
|
|
19
|
-
(
|
|
18
|
+
var _a;
|
|
19
|
+
this.doSomething();
|
|
20
|
+
const configs = (_a = this.base.getServiceRegistry().getServices()) !== null && _a !== void 0 ? _a : [];
|
|
21
|
+
this.base.getServiceRegistry().loadServices([
|
|
20
22
|
{
|
|
21
23
|
alias: `AdminService${configs.length}`,
|
|
22
24
|
urlPath: `/admin-${configs.length}`,
|
|
@@ -32,6 +34,9 @@ const Services = {
|
|
|
32
34
|
};
|
|
33
35
|
});
|
|
34
36
|
}
|
|
35
|
-
|
|
37
|
+
async doSomething() {
|
|
38
|
+
await this.base.getServiceRegistry().loadServices([]);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
36
41
|
exports.default = Services;
|
|
37
42
|
//# sourceMappingURL=Services.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Services.js","sourceRoot":"","sources":["../../src/mockdata/Services.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"Services.js","sourceRoot":"","sources":["../../src/mockdata/Services.ts"],"names":[],"mappings":";;;;;AACA,mEAAsE;AAEtE,0DAA6B;AAM7B;;GAEG;AACH,MAAqB,QAAS,SAAQ,6CAA2C;IAC7E;;;;OAIG;IACH,KAAK,CAAC,aAAa,CAAC,cAA4B;;QAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,OAAO,GAAoB,MAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,WAAW,EAAE,mCAAI,EAAE,CAAC;QACpF,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,YAAY,CAAC;YACxC;gBACI,KAAK,EAAE,eAAe,OAAO,CAAC,MAAM,EAAE;gBACtC,OAAO,EAAE,UAAU,OAAO,CAAC,MAAM,EAAE;gBACnC,YAAY,EAAE,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC;gBACrD,YAAY,EAAE,mBAAI,CAAC,IAAI,CAAC,SAAS,CAAC;gBAClC,gBAAgB,EAAE,KAAK;aAC1B;SACJ,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAC1B,OAAO;gBACH,GAAG,EAAE,MAAM,CAAC,OAAO;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;aACtB,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,WAAW;QACb,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;CACJ;AA7BD,2BA6BC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sap-ux/fe-mockserver-admin",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.12",
|
|
4
4
|
"description": "SAP Fiori OData - Mockserver admin service to list running services",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"commander": "^11.1.0",
|
|
21
21
|
"router": "2.0.0",
|
|
22
|
+
"@sap-ux/fe-mockserver-core": "1.6.16",
|
|
22
23
|
"@sap-ux/edmx-parser": "0.9.6",
|
|
23
|
-
"@sap-ux/fe-mockserver-core": "1.6.14",
|
|
24
24
|
"@sap-ux/annotation-converter": "0.10.7",
|
|
25
25
|
"@sap-ux/vocabularies-types": "0.13.0"
|
|
26
26
|
},
|