@sap-ux/fiori-elements-writer 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/LICENSE +201 -0
- package/README.md +76 -0
- package/dist/data/defaults.d.ts +16 -0
- package/dist/data/defaults.d.ts.map +1 -0
- package/dist/data/defaults.js +62 -0
- package/dist/data/defaults.js.map +1 -0
- package/dist/data/manifestSettings.d.ts +14 -0
- package/dist/data/manifestSettings.d.ts.map +1 -0
- package/dist/data/manifestSettings.js +42 -0
- package/dist/data/manifestSettings.js.map +1 -0
- package/dist/data/templateAttributes.d.ts +34 -0
- package/dist/data/templateAttributes.d.ts.map +1 -0
- package/dist/data/templateAttributes.js +118 -0
- package/dist/data/templateAttributes.js.map +1 -0
- package/dist/i18n.d.ts +14 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +50 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +92 -0
- package/dist/index.js.map +1 -0
- package/dist/packageConfig.d.ts +27 -0
- package/dist/packageConfig.d.ts.map +1 -0
- package/dist/packageConfig.js +50 -0
- package/dist/packageConfig.js.map +1 -0
- package/dist/translations/fiori-elements-writer.i18n.json +11 -0
- package/dist/types.d.ts +80 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +43 -0
- package/dist/types.js.map +1 -0
- package/dist/validate.d.ts +14 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +72 -0
- package/dist/validate.js.map +1 -0
- package/package.json +46 -0
- package/templates/common/add/webapp/Component.js +12 -0
- package/templates/common/add/webapp/test/flpSandbox.html +82 -0
- package/templates/common/extend/package.json +7 -0
- package/templates/v2/alp/extend/webapp/manifest.json +53 -0
- package/templates/v2/common/add/webapp/test/changes_loader.js +47 -0
- package/templates/v2/common/add/webapp/test/changes_preview.js +206 -0
- package/templates/v2/common/extend/webapp/manifest.json +25 -0
- package/templates/v2/lrop/extend/webapp/manifest.json +47 -0
- package/templates/v2/ovp/extend/webapp/manifest.json +14 -0
- package/templates/v2/worklist/extend/webapp/manifest.json +55 -0
- package/templates/v4/feop/add/webapp/Component.js +23 -0
- package/templates/v4/lrop/extend/webapp/manifest.json +107 -0
package/dist/i18n.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.t = exports.initI18n = void 0;
|
|
16
|
+
const i18next_1 = __importDefault(require("i18next"));
|
|
17
|
+
const fiori_elements_writer_i18n_json_1 = __importDefault(require("./translations/fiori-elements-writer.i18n.json"));
|
|
18
|
+
const NS = 'fiori-freestyle-writer';
|
|
19
|
+
/**
|
|
20
|
+
* Initialize i18next with the translations for this module.
|
|
21
|
+
*/
|
|
22
|
+
function initI18n() {
|
|
23
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
24
|
+
yield i18next_1.default.init({
|
|
25
|
+
resources: {
|
|
26
|
+
en: {
|
|
27
|
+
[NS]: fiori_elements_writer_i18n_json_1.default
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
lng: 'en',
|
|
31
|
+
fallbackLng: 'en',
|
|
32
|
+
defaultNS: NS,
|
|
33
|
+
ns: [NS]
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
exports.initI18n = initI18n;
|
|
38
|
+
/**
|
|
39
|
+
* Helper function facading the call to i18next.
|
|
40
|
+
*
|
|
41
|
+
* @param key i18n key
|
|
42
|
+
* @param options additional options
|
|
43
|
+
* @returns {string} localized string stored for the given key
|
|
44
|
+
*/
|
|
45
|
+
function t(key, options) {
|
|
46
|
+
return i18next_1.default.t(key, options);
|
|
47
|
+
}
|
|
48
|
+
exports.t = t;
|
|
49
|
+
initI18n();
|
|
50
|
+
//# sourceMappingURL=i18n.js.map
|
package/dist/i18n.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,sDAA4C;AAC5C,qHAA0E;AAE1E,MAAM,EAAE,GAAG,wBAAwB,CAAC;AAEpC;;GAEG;AACH,SAAsB,QAAQ;;QAC1B,MAAM,iBAAO,CAAC,IAAI,CAAC;YACf,SAAS,EAAE;gBACP,EAAE,EAAE;oBACA,CAAC,EAAE,CAAC,EAAE,yCAAY;iBACrB;aACJ;YACD,GAAG,EAAE,IAAI;YACT,WAAW,EAAE,IAAI;YACjB,SAAS,EAAE,EAAE;YACb,EAAE,EAAE,CAAC,EAAE,CAAC;SACX,CAAC,CAAC;IACP,CAAC;CAAA;AAZD,4BAYC;AAED;;;;;;GAMG;AACH,SAAgB,CAAC,CAAC,GAAW,EAAE,OAAkB;IAC7C,OAAO,iBAAO,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC;AAFD,cAEC;AAED,QAAQ,EAAE,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Editor } from 'mem-fs-editor';
|
|
2
|
+
import { FioriElementsApp } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Generate a UI5 application based on the specified Fiori Elements floorplan template.
|
|
5
|
+
*
|
|
6
|
+
* @param basePath - the absolute target path where the application will be generated
|
|
7
|
+
* @param data - configuration to generate the Fiori elements application
|
|
8
|
+
* @param fs - an optional reference to a mem-fs editor
|
|
9
|
+
* @returns Reference to a mem-fs-editor
|
|
10
|
+
*/
|
|
11
|
+
declare function generate<T>(basePath: string, data: FioriElementsApp<T>, fs?: Editor): Promise<Editor>;
|
|
12
|
+
export { generate, FioriElementsApp };
|
|
13
|
+
export * from './types';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAMvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAO3C;;;;;;;GAOG;AACH,iBAAe,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA+DpG;AAED,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;AACtC,cAAc,SAAS,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
13
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
14
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
15
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
16
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
17
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
18
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.generate = void 0;
|
|
26
|
+
const path_1 = require("path");
|
|
27
|
+
const ejs_1 = require("ejs");
|
|
28
|
+
const ui5_application_writer_1 = require("@sap-ux/ui5-application-writer");
|
|
29
|
+
const odata_service_writer_1 = require("@sap-ux/odata-service-writer");
|
|
30
|
+
const packageConfig_1 = require("./packageConfig");
|
|
31
|
+
const cloneDeep_1 = __importDefault(require("lodash/cloneDeep"));
|
|
32
|
+
const validate_1 = require("./validate");
|
|
33
|
+
const defaults_1 = require("./data/defaults");
|
|
34
|
+
const templateAttributes_1 = require("./data/templateAttributes");
|
|
35
|
+
const manifestSettings_1 = require("./data/manifestSettings");
|
|
36
|
+
const semver_1 = __importDefault(require("semver"));
|
|
37
|
+
/**
|
|
38
|
+
* Generate a UI5 application based on the specified Fiori Elements floorplan template.
|
|
39
|
+
*
|
|
40
|
+
* @param basePath - the absolute target path where the application will be generated
|
|
41
|
+
* @param data - configuration to generate the Fiori elements application
|
|
42
|
+
* @param fs - an optional reference to a mem-fs editor
|
|
43
|
+
* @returns Reference to a mem-fs-editor
|
|
44
|
+
*/
|
|
45
|
+
function generate(basePath, data, fs) {
|
|
46
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
47
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
// Clone rather than modifying callers refs
|
|
49
|
+
const feApp = (0, cloneDeep_1.default)(data);
|
|
50
|
+
// Ensure input data contains at least the manadatory properties required for app genertation
|
|
51
|
+
(0, validate_1.validateRequiredProperties)(feApp);
|
|
52
|
+
(0, defaults_1.setAppDefaults)(feApp);
|
|
53
|
+
fs = yield (0, ui5_application_writer_1.generate)(basePath, feApp, fs);
|
|
54
|
+
feApp.template.settings = (0, defaults_1.setDefaultTemplateSettings)(feApp.template);
|
|
55
|
+
// This is done after `generateUi5Project` since defaults are set if values are not provided
|
|
56
|
+
(0, validate_1.validateApp)(feApp);
|
|
57
|
+
yield (0, odata_service_writer_1.generate)(basePath, feApp.service, fs);
|
|
58
|
+
const templateOptions = {
|
|
59
|
+
changesPreview: semver_1.default.lt(semver_1.default.coerce((_a = feApp.ui5) === null || _a === void 0 ? void 0 : _a.version), templateAttributes_1.changesPreviewToVersion),
|
|
60
|
+
changesLoader: feApp.service.version === odata_service_writer_1.OdataVersion.v2
|
|
61
|
+
};
|
|
62
|
+
// Add new files from templates e.g.
|
|
63
|
+
const rootTemplatesPath = (0, path_1.join)(__dirname, '..', 'templates');
|
|
64
|
+
// Add templates common to all template types
|
|
65
|
+
fs.copyTpl((0, path_1.join)(rootTemplatesPath, 'common', 'add', '**/*.*'), basePath, Object.assign(Object.assign({}, feApp), { templateOptions, escapeFLPText: templateAttributes_1.escapeFLPText }));
|
|
66
|
+
// Extend common files
|
|
67
|
+
const packagePath = (0, path_1.join)(basePath, 'package.json');
|
|
68
|
+
// Extend package.json
|
|
69
|
+
fs.extendJSON(packagePath, JSON.parse((0, ejs_1.render)(fs.read((0, path_1.join)((0, path_1.join)(rootTemplatesPath, 'common', 'extend'), 'package.json')), feApp)));
|
|
70
|
+
const templateVersionPath = (0, path_1.join)(rootTemplatesPath, `v${(_b = feApp.service) === null || _b === void 0 ? void 0 : _b.version}`);
|
|
71
|
+
// Copy version specific common templates and version specific, floorplan specific templates
|
|
72
|
+
[(0, path_1.join)(templateVersionPath, 'common', 'add'), (0, path_1.join)(templateVersionPath, feApp.template.type, 'add')].forEach((templatePath) => {
|
|
73
|
+
fs.copyTpl((0, path_1.join)(templatePath, '**/*.*'), basePath, feApp, {}, { ignoreNoMatch: true });
|
|
74
|
+
});
|
|
75
|
+
// Update manifest.json with template specific settings
|
|
76
|
+
(0, manifestSettings_1.extendManifestJson)(fs, basePath, rootTemplatesPath, feApp);
|
|
77
|
+
const packageJson = JSON.parse(fs.read(packagePath));
|
|
78
|
+
packageJson.scripts = Object.assign(packageJson.scripts, Object.assign({}, (0, packageConfig_1.getPackageJsonTasks)({
|
|
79
|
+
localOnly: !((_c = feApp.service) === null || _c === void 0 ? void 0 : _c.url),
|
|
80
|
+
addMock: !!((_d = feApp.service) === null || _d === void 0 ? void 0 : _d.metadata),
|
|
81
|
+
sapClient: (_e = feApp.service) === null || _e === void 0 ? void 0 : _e.client,
|
|
82
|
+
flpAppId: feApp.app.flpAppId,
|
|
83
|
+
startFile: (_f = data === null || data === void 0 ? void 0 : data.app) === null || _f === void 0 ? void 0 : _f.startFile,
|
|
84
|
+
localStartFile: (_g = data === null || data === void 0 ? void 0 : data.app) === null || _g === void 0 ? void 0 : _g.localStartFile
|
|
85
|
+
})));
|
|
86
|
+
fs.writeJSON(packagePath, packageJson);
|
|
87
|
+
return fs;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
exports.generate = generate;
|
|
91
|
+
__exportStar(require("./types"), exports);
|
|
92
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get and object reflecting the scripts that need to be added to the package.json.
|
|
3
|
+
*
|
|
4
|
+
* @param options Collection of mostly optional settings.
|
|
5
|
+
* @param options.localOnly no server available
|
|
6
|
+
* @param options.addMock add a script for using the mockserver
|
|
7
|
+
* @param options.sapClient SAP client required for connecting to the backend
|
|
8
|
+
* @param options.flpAppId local FLP id
|
|
9
|
+
* @param options.startFile path that should be opened with the start script
|
|
10
|
+
* @param options.localStartFile path that should be opend with the start-local script
|
|
11
|
+
* @description Generates the package.json scripts
|
|
12
|
+
* @returns package.json scripts
|
|
13
|
+
*/
|
|
14
|
+
export declare function getPackageJsonTasks({ localOnly, addMock, sapClient, flpAppId, startFile, localStartFile }: {
|
|
15
|
+
localOnly: boolean;
|
|
16
|
+
addMock: boolean;
|
|
17
|
+
sapClient?: string;
|
|
18
|
+
flpAppId?: string;
|
|
19
|
+
startFile?: string;
|
|
20
|
+
localStartFile?: string;
|
|
21
|
+
}): {
|
|
22
|
+
start: string;
|
|
23
|
+
'start-local': string;
|
|
24
|
+
'start-noflp': string;
|
|
25
|
+
'start-mock'?: string;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=packageConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packageConfig.d.ts","sourceRoot":"","sources":["../src/packageConfig.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,EAChC,SAAS,EACT,OAAc,EACd,SAAS,EACT,QAAa,EACb,SAAS,EACT,cAAc,EACjB,EAAE;IACC,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAsCzF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPackageJsonTasks = void 0;
|
|
4
|
+
const i18n_1 = require("./i18n");
|
|
5
|
+
/**
|
|
6
|
+
* Get and object reflecting the scripts that need to be added to the package.json.
|
|
7
|
+
*
|
|
8
|
+
* @param options Collection of mostly optional settings.
|
|
9
|
+
* @param options.localOnly no server available
|
|
10
|
+
* @param options.addMock add a script for using the mockserver
|
|
11
|
+
* @param options.sapClient SAP client required for connecting to the backend
|
|
12
|
+
* @param options.flpAppId local FLP id
|
|
13
|
+
* @param options.startFile path that should be opened with the start script
|
|
14
|
+
* @param options.localStartFile path that should be opend with the start-local script
|
|
15
|
+
* @description Generates the package.json scripts
|
|
16
|
+
* @returns package.json scripts
|
|
17
|
+
*/
|
|
18
|
+
function getPackageJsonTasks({ localOnly, addMock = true, sapClient, flpAppId = '', startFile, localStartFile }) {
|
|
19
|
+
// Build search param part of preview launch url
|
|
20
|
+
const searchParamList = [];
|
|
21
|
+
if (sapClient) {
|
|
22
|
+
searchParamList.push([`sap-client`, `${sapClient}`]);
|
|
23
|
+
}
|
|
24
|
+
searchParamList.push(['sap-ui-xx-viewCache', 'false']);
|
|
25
|
+
let searchParam = new URLSearchParams(searchParamList).toString();
|
|
26
|
+
searchParam = searchParam ? `?${searchParam}` : '';
|
|
27
|
+
// Build fragment identifier part of url
|
|
28
|
+
const hashFragment = flpAppId ? `#${flpAppId}` : '';
|
|
29
|
+
// Full parameter section composed by search param and fragment identifier
|
|
30
|
+
const params = `${searchParam}${hashFragment}`;
|
|
31
|
+
const startCommand = localOnly
|
|
32
|
+
? `echo \\"${(0, i18n_1.t)('info.mockOnlyWarning')}\\"`
|
|
33
|
+
: `fiori run --open "${startFile || 'test/flpSandbox.html'}${params}"`;
|
|
34
|
+
const startLocalCommand = `fiori run --config ./ui5-local.yaml --open "${localStartFile || 'test/flpSandbox.html'}${params}"`;
|
|
35
|
+
const startNoFlpCommand = localOnly
|
|
36
|
+
? `echo \\"${(0, i18n_1.t)('info.mockOnlyWarning')}\\"`
|
|
37
|
+
: `fiori run --open "${'index.html'}${searchParam}"`;
|
|
38
|
+
const mockTask = `fiori run --config ./ui5-mock.yaml --open "test/flpSandbox.html${params}"`;
|
|
39
|
+
return Object.assign({
|
|
40
|
+
start: startCommand,
|
|
41
|
+
'start-local': startLocalCommand,
|
|
42
|
+
'start-noflp': startNoFlpCommand
|
|
43
|
+
}, addMock
|
|
44
|
+
? {
|
|
45
|
+
'start-mock': mockTask
|
|
46
|
+
}
|
|
47
|
+
: {});
|
|
48
|
+
}
|
|
49
|
+
exports.getPackageJsonTasks = getPackageJsonTasks;
|
|
50
|
+
//# sourceMappingURL=packageConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packageConfig.js","sourceRoot":"","sources":["../src/packageConfig.ts"],"names":[],"mappings":";;;AAAA,iCAA2B;AAE3B;;;;;;;;;;;;GAYG;AACH,SAAgB,mBAAmB,CAAC,EAChC,SAAS,EACT,OAAO,GAAG,IAAI,EACd,SAAS,EACT,QAAQ,GAAG,EAAE,EACb,SAAS,EACT,cAAc,EAQjB;IACG,gDAAgD;IAChD,MAAM,eAAe,GAAe,EAAE,CAAC;IACvC,IAAI,SAAS,EAAE;QACX,eAAe,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;KACxD;IACD,eAAe,CAAC,IAAI,CAAC,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC,CAAC;IAEvD,IAAI,WAAW,GAAG,IAAI,eAAe,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC;IAClE,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,wCAAwC;IACxC,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,0EAA0E;IAC1E,MAAM,MAAM,GAAG,GAAG,WAAW,GAAG,YAAY,EAAE,CAAC;IAE/C,MAAM,YAAY,GAAG,SAAS;QAC1B,CAAC,CAAC,WAAW,IAAA,QAAC,EAAC,sBAAsB,CAAC,KAAK;QAC3C,CAAC,CAAC,qBAAqB,SAAS,IAAI,sBAAsB,GAAG,MAAM,GAAG,CAAC;IAC3E,MAAM,iBAAiB,GAAG,+CACtB,cAAc,IAAI,sBACtB,GAAG,MAAM,GAAG,CAAC;IACb,MAAM,iBAAiB,GAAG,SAAS;QAC/B,CAAC,CAAC,WAAW,IAAA,QAAC,EAAC,sBAAsB,CAAC,KAAK;QAC3C,CAAC,CAAC,qBAAqB,YAAY,GAAG,WAAW,GAAG,CAAC;IAEzD,MAAM,QAAQ,GAAG,kEAAkE,MAAM,GAAG,CAAC;IAC7F,OAAO,MAAM,CAAC,MAAM,CAChB;QACI,KAAK,EAAE,YAAY;QACnB,aAAa,EAAE,iBAAiB;QAChC,aAAa,EAAE,iBAAiB;KACnC,EACD,OAAO;QACH,CAAC,CAAC;YACI,YAAY,EAAE,QAAQ;SACzB;QACH,CAAC,CAAC,EAAE,CACX,CAAC;AACN,CAAC;AApDD,kDAoDC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"info": {
|
|
3
|
+
"mockOnlyWarning": "This application was generated with a local metadata file and does not reference a live server. Please add the required server configuration or start this application with mock data using the target: npm run start-mock"
|
|
4
|
+
},
|
|
5
|
+
"error": {
|
|
6
|
+
"unsupportedOdataVersion": "OData Version of the specified service: {{ serviceVersion }}, is not supported by the template type: {{ templateType }}",
|
|
7
|
+
"unsupportedUI5Version": "Specified UI5 property '{{ versionProperty }}': {{ ui5Version }}, is not supported by the template type: {{ templateType }}",
|
|
8
|
+
"invalidUI5Version": "Specified UI5 property '{{ versionProperty }}': {{ ui5Version }}, is not a valid semantic version",
|
|
9
|
+
"missingRequiredProperty": "A property required for application generation is not specified: '{{ propertyName }}'."
|
|
10
|
+
}
|
|
11
|
+
}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { Ui5App, App } from '@sap-ux/ui5-application-writer';
|
|
2
|
+
import { OdataService } from '@sap-ux/odata-service-writer';
|
|
3
|
+
export declare enum TemplateType {
|
|
4
|
+
Worklist = "worklist",
|
|
5
|
+
ListReportObjectPage = "lrop",
|
|
6
|
+
AnalyticalListPage = "alp",
|
|
7
|
+
OverviewPage = "ovp",
|
|
8
|
+
FormEntryObjectPage = "feop"
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* General validation error thrown if app config options contain invalid combinations
|
|
12
|
+
*/
|
|
13
|
+
export declare class ValidationError extends Error {
|
|
14
|
+
/**
|
|
15
|
+
* ValidationError constructor.
|
|
16
|
+
*
|
|
17
|
+
* @param message - the error message
|
|
18
|
+
*/
|
|
19
|
+
constructor(message: string);
|
|
20
|
+
}
|
|
21
|
+
export interface EntityConfig {
|
|
22
|
+
mainEntity?: {
|
|
23
|
+
entityName: string;
|
|
24
|
+
type?: any;
|
|
25
|
+
};
|
|
26
|
+
filterEntityType?: string;
|
|
27
|
+
navigationEntity?: {
|
|
28
|
+
EntitySet: string;
|
|
29
|
+
Name: string;
|
|
30
|
+
Role?: string;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export declare enum TableType {
|
|
34
|
+
GRID = "GridTable",
|
|
35
|
+
ANALYTICAL = "AnalyticalTable",
|
|
36
|
+
RESPONSIVE = "ResponsiveTable"
|
|
37
|
+
}
|
|
38
|
+
export declare enum TableSelectionMode {
|
|
39
|
+
NONE = "None",
|
|
40
|
+
AUTO = "Auto",
|
|
41
|
+
MULTI = "Multi",
|
|
42
|
+
SINGLE = "Single"
|
|
43
|
+
}
|
|
44
|
+
export interface LROPSettings {
|
|
45
|
+
entityConfig: EntityConfig;
|
|
46
|
+
}
|
|
47
|
+
export interface WorklistSettings {
|
|
48
|
+
entityConfig: EntityConfig;
|
|
49
|
+
}
|
|
50
|
+
export interface FEOPSettings {
|
|
51
|
+
entityConfig: EntityConfig;
|
|
52
|
+
}
|
|
53
|
+
export interface OVPSettings {
|
|
54
|
+
entityConfig: EntityConfig;
|
|
55
|
+
}
|
|
56
|
+
export interface ALPSettings {
|
|
57
|
+
entityConfig: EntityConfig;
|
|
58
|
+
tableType?: TableType;
|
|
59
|
+
selectionMode?: TableSelectionMode;
|
|
60
|
+
}
|
|
61
|
+
export interface ALPSettingsV2 extends ALPSettings {
|
|
62
|
+
smartVariantManagement?: boolean;
|
|
63
|
+
multiSelect?: boolean;
|
|
64
|
+
qualifier?: string;
|
|
65
|
+
autoHide?: boolean;
|
|
66
|
+
}
|
|
67
|
+
export interface Template<T = {}> {
|
|
68
|
+
type: TemplateType;
|
|
69
|
+
settings: T;
|
|
70
|
+
}
|
|
71
|
+
export interface FioriApp extends App {
|
|
72
|
+
flpAppId?: string;
|
|
73
|
+
}
|
|
74
|
+
export interface FioriElementsApp<T> extends Ui5App {
|
|
75
|
+
template: Template<T>;
|
|
76
|
+
service: OdataService;
|
|
77
|
+
app: FioriApp;
|
|
78
|
+
}
|
|
79
|
+
export { OdataVersion } from '@sap-ux/odata-service-writer';
|
|
80
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,oBAAY,YAAY;IACpB,QAAQ,aAAa;IACrB,oBAAoB,SAAS;IAC7B,kBAAkB,QAAQ;IAC1B,YAAY,QAAQ;IACpB,mBAAmB,SAAS;CAC/B;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACtC;;;;OAIG;gBACS,OAAO,EAAE,MAAM;CAI9B;AAED,MAAM,WAAW,YAAY;IACzB,UAAU,CAAC,EAAE;QACT,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,GAAG,CAAC;KACd,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACL;AAED,oBAAY,SAAS;IACjB,IAAI,cAAc;IAClB,UAAU,oBAAoB;IAC9B,UAAU,oBAAoB;CACjC;AAED,oBAAY,kBAAkB;IAC1B,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;IACf,MAAM,WAAW;CACpB;AAED,MAAM,WAAW,YAAY;IACzB,YAAY,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC7B,YAAY,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IACzB,YAAY,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IACxB,YAAY,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,aAAa,CAAC,EAAE,kBAAkB,CAAC;CACtC;AACD,MAAM,WAAW,aAAc,SAAQ,WAAW;IAC9C,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,EAAE;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,CAAC,CAAC;CACf;AAED,MAAM,WAAW,QAAS,SAAQ,GAAG;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AACD,MAAM,WAAW,gBAAgB,CAAC,CAAC,CAAE,SAAQ,MAAM;IAC/C,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtB,OAAO,EAAE,YAAY,CAAC;IACtB,GAAG,EAAE,QAAQ,CAAC;CACjB;AAGD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OdataVersion = exports.TableSelectionMode = exports.TableType = exports.ValidationError = exports.TemplateType = void 0;
|
|
4
|
+
var TemplateType;
|
|
5
|
+
(function (TemplateType) {
|
|
6
|
+
TemplateType["Worklist"] = "worklist";
|
|
7
|
+
TemplateType["ListReportObjectPage"] = "lrop";
|
|
8
|
+
TemplateType["AnalyticalListPage"] = "alp";
|
|
9
|
+
TemplateType["OverviewPage"] = "ovp";
|
|
10
|
+
TemplateType["FormEntryObjectPage"] = "feop";
|
|
11
|
+
})(TemplateType = exports.TemplateType || (exports.TemplateType = {}));
|
|
12
|
+
/**
|
|
13
|
+
* General validation error thrown if app config options contain invalid combinations
|
|
14
|
+
*/
|
|
15
|
+
class ValidationError extends Error {
|
|
16
|
+
/**
|
|
17
|
+
* ValidationError constructor.
|
|
18
|
+
*
|
|
19
|
+
* @param message - the error message
|
|
20
|
+
*/
|
|
21
|
+
constructor(message) {
|
|
22
|
+
super(`Validation error: ${message}`);
|
|
23
|
+
this.name = this.constructor.name;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.ValidationError = ValidationError;
|
|
27
|
+
var TableType;
|
|
28
|
+
(function (TableType) {
|
|
29
|
+
TableType["GRID"] = "GridTable";
|
|
30
|
+
TableType["ANALYTICAL"] = "AnalyticalTable";
|
|
31
|
+
TableType["RESPONSIVE"] = "ResponsiveTable";
|
|
32
|
+
})(TableType = exports.TableType || (exports.TableType = {}));
|
|
33
|
+
var TableSelectionMode;
|
|
34
|
+
(function (TableSelectionMode) {
|
|
35
|
+
TableSelectionMode["NONE"] = "None";
|
|
36
|
+
TableSelectionMode["AUTO"] = "Auto";
|
|
37
|
+
TableSelectionMode["MULTI"] = "Multi";
|
|
38
|
+
TableSelectionMode["SINGLE"] = "Single";
|
|
39
|
+
})(TableSelectionMode = exports.TableSelectionMode || (exports.TableSelectionMode = {}));
|
|
40
|
+
// We need this for the service version
|
|
41
|
+
var odata_service_writer_1 = require("@sap-ux/odata-service-writer");
|
|
42
|
+
Object.defineProperty(exports, "OdataVersion", { enumerable: true, get: function () { return odata_service_writer_1.OdataVersion; } });
|
|
43
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAGA,IAAY,YAMX;AAND,WAAY,YAAY;IACpB,qCAAqB,CAAA;IACrB,6CAA6B,CAAA;IAC7B,0CAA0B,CAAA;IAC1B,oCAAoB,CAAA;IACpB,4CAA4B,CAAA;AAChC,CAAC,EANW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAMvB;AAED;;GAEG;AACH,MAAa,eAAgB,SAAQ,KAAK;IACtC;;;;OAIG;IACH,YAAY,OAAe;QACvB,KAAK,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACtC,CAAC;CACJ;AAVD,0CAUC;AAeD,IAAY,SAIX;AAJD,WAAY,SAAS;IACjB,+BAAkB,CAAA;IAClB,2CAA8B,CAAA;IAC9B,2CAA8B,CAAA;AAClC,CAAC,EAJW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAIpB;AAED,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC1B,mCAAa,CAAA;IACb,mCAAa,CAAA;IACb,qCAAe,CAAA;IACf,uCAAiB,CAAA;AACrB,CAAC,EALW,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QAK7B;AA4CD,uCAAuC;AACvC,qEAA4D;AAAnD,oHAAA,YAAY,OAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { FioriElementsApp } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Validates a selection of specified app settings.
|
|
4
|
+
*
|
|
5
|
+
* @param feApp - Fiori elements application configuration
|
|
6
|
+
*/
|
|
7
|
+
export declare function validateApp<T>(feApp: FioriElementsApp<T>): void;
|
|
8
|
+
/**
|
|
9
|
+
* Validates the specified FioriElementsApp contains the required properties.
|
|
10
|
+
*
|
|
11
|
+
* @param feApp - Fiori elements application configuration
|
|
12
|
+
*/
|
|
13
|
+
export declare function validateRequiredProperties<T>(feApp: FioriElementsApp<T>): void;
|
|
14
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,SAAS,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI,CA0D/D;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI,CAS9E"}
|
package/dist/validate.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
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.validateRequiredProperties = exports.validateApp = void 0;
|
|
7
|
+
const semver_1 = __importDefault(require("semver"));
|
|
8
|
+
const templateAttributes_1 = require("./data/templateAttributes");
|
|
9
|
+
const i18n_1 = require("./i18n");
|
|
10
|
+
const types_1 = require("./types");
|
|
11
|
+
/**
|
|
12
|
+
* Validates a selection of specified app settings.
|
|
13
|
+
*
|
|
14
|
+
* @param feApp - Fiori elements application configuration
|
|
15
|
+
*/
|
|
16
|
+
function validateApp(feApp) {
|
|
17
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
18
|
+
// Validate odata version
|
|
19
|
+
if (feApp.service.version &&
|
|
20
|
+
!templateAttributes_1.TemplateTypeAttributes[feApp.template.type].supportedODataVersions.includes(feApp.service.version)) {
|
|
21
|
+
throw new types_1.ValidationError((0, i18n_1.t)('error.unsupportedOdataVersion', {
|
|
22
|
+
serviceVersion: feApp.service.version,
|
|
23
|
+
templateType: feApp.template.type
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
// Validate ui5 versions if present (defaults will apply otherwise)
|
|
27
|
+
let ui5Version;
|
|
28
|
+
if ((_a = feApp.ui5) === null || _a === void 0 ? void 0 : _a.version) {
|
|
29
|
+
ui5Version = semver_1.default.coerce((_b = feApp.ui5) === null || _b === void 0 ? void 0 : _b.version);
|
|
30
|
+
if (!ui5Version) {
|
|
31
|
+
throw new types_1.ValidationError((0, i18n_1.t)('error.invalidUI5Version', { versionProperty: 'version', ui5Version: (_c = feApp.ui5) === null || _c === void 0 ? void 0 : _c.version }));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
let minUI5Version;
|
|
35
|
+
if ((_d = feApp.ui5) === null || _d === void 0 ? void 0 : _d.minUI5Version) {
|
|
36
|
+
minUI5Version = semver_1.default.coerce((_e = feApp.ui5) === null || _e === void 0 ? void 0 : _e.minUI5Version);
|
|
37
|
+
if (!minUI5Version) {
|
|
38
|
+
throw new types_1.ValidationError((0, i18n_1.t)('error.invalidUI5Version', { versionProperty: 'minUI5Version', ui5Version: (_f = feApp.ui5) === null || _f === void 0 ? void 0 : _f.minUI5Version }));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const minRequiredUi5Version = templateAttributes_1.TemplateTypeAttributes[feApp.template.type].minimumUi5Version[feApp.service.version];
|
|
42
|
+
if (semver_1.default.lt(ui5Version, minRequiredUi5Version)) {
|
|
43
|
+
throw new types_1.ValidationError((0, i18n_1.t)('error.unsupportedUI5Version', {
|
|
44
|
+
versionProperty: 'version',
|
|
45
|
+
ui5Version: (_g = feApp.ui5) === null || _g === void 0 ? void 0 : _g.version,
|
|
46
|
+
templateType: feApp.template.type
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
if (semver_1.default.lt(minUI5Version, minRequiredUi5Version)) {
|
|
50
|
+
throw new types_1.ValidationError((0, i18n_1.t)('error.unsupportedUI5Version', {
|
|
51
|
+
versionProperty: 'minUI5Version',
|
|
52
|
+
ui5Version: (_h = feApp.ui5) === null || _h === void 0 ? void 0 : _h.minUI5Version,
|
|
53
|
+
templateType: feApp.template.type
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.validateApp = validateApp;
|
|
58
|
+
/**
|
|
59
|
+
* Validates the specified FioriElementsApp contains the required properties.
|
|
60
|
+
*
|
|
61
|
+
* @param feApp - Fiori elements application configuration
|
|
62
|
+
*/
|
|
63
|
+
function validateRequiredProperties(feApp) {
|
|
64
|
+
// Service is mandatory for generation of Fiori Elements apps
|
|
65
|
+
if (!feApp.service) {
|
|
66
|
+
throw new types_1.ValidationError((0, i18n_1.t)('error.missingRequiredProperty', {
|
|
67
|
+
propertyName: 'FioriElementsApp.service'
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.validateRequiredProperties = validateRequiredProperties;
|
|
72
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAwC;AACxC,kEAAmE;AACnE,iCAA2B;AAC3B,mCAA4D;AAE5D;;;;GAIG;AACH,SAAgB,WAAW,CAAI,KAA0B;;IACrD,yBAAyB;IACzB,IACI,KAAK,CAAC,OAAO,CAAC,OAAO;QACrB,CAAC,2CAAsB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EACrG;QACE,MAAM,IAAI,uBAAe,CACrB,IAAA,QAAC,EAAC,+BAA+B,EAAE;YAC/B,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;YACrC,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;SACpC,CAAC,CACL,CAAC;KACL;IAED,mEAAmE;IACnE,IAAI,UAAyB,CAAC;IAE9B,IAAI,MAAA,KAAK,CAAC,GAAG,0CAAE,OAAO,EAAE;QACpB,UAAU,GAAG,gBAAM,CAAC,MAAM,CAAC,MAAA,KAAK,CAAC,GAAG,0CAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,EAAE;YACb,MAAM,IAAI,uBAAe,CACrB,IAAA,QAAC,EAAC,yBAAyB,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,MAAA,KAAK,CAAC,GAAG,0CAAE,OAAO,EAAE,CAAC,CAC/F,CAAC;SACL;KACJ;IAED,IAAI,aAA4B,CAAC;IAEjC,IAAI,MAAA,KAAK,CAAC,GAAG,0CAAE,aAAa,EAAE;QAC1B,aAAa,GAAG,gBAAM,CAAC,MAAM,CAAC,MAAA,KAAK,CAAC,GAAG,0CAAE,aAAa,CAAC,CAAC;QACxD,IAAI,CAAC,aAAa,EAAE;YAChB,MAAM,IAAI,uBAAe,CACrB,IAAA,QAAC,EAAC,yBAAyB,EAAE,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,MAAA,KAAK,CAAC,GAAG,0CAAE,aAAa,EAAE,CAAC,CAC3G,CAAC;SACL;KACJ;IAED,MAAM,qBAAqB,GAAG,2CAAsB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAE,CAAC;IAEpH,IAAI,gBAAM,CAAC,EAAE,CAAC,UAAW,EAAE,qBAAqB,CAAC,EAAE;QAC/C,MAAM,IAAI,uBAAe,CACrB,IAAA,QAAC,EAAC,6BAA6B,EAAE;YAC7B,eAAe,EAAE,SAAS;YAC1B,UAAU,EAAE,MAAA,KAAK,CAAC,GAAG,0CAAE,OAAO;YAC9B,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;SACpC,CAAC,CACL,CAAC;KACL;IAED,IAAI,gBAAM,CAAC,EAAE,CAAC,aAAc,EAAE,qBAAqB,CAAC,EAAE;QAClD,MAAM,IAAI,uBAAe,CACrB,IAAA,QAAC,EAAC,6BAA6B,EAAE;YAC7B,eAAe,EAAE,eAAe;YAChC,UAAU,EAAE,MAAA,KAAK,CAAC,GAAG,0CAAE,aAAa;YACpC,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;SACpC,CAAC,CACL,CAAC;KACL;AACL,CAAC;AA1DD,kCA0DC;AAED;;;;GAIG;AACH,SAAgB,0BAA0B,CAAI,KAA0B;IACpE,6DAA6D;IAC7D,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;QAChB,MAAM,IAAI,uBAAe,CACrB,IAAA,QAAC,EAAC,+BAA+B,EAAE;YAC/B,YAAY,EAAE,0BAA0B;SAC3C,CAAC,CACL,CAAC;KACL;AACL,CAAC;AATD,gEASC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@sap-ux/fiori-elements-writer",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"license": "Apache-2.0",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"files": [
|
|
7
|
+
"LICENSE",
|
|
8
|
+
"dist",
|
|
9
|
+
"templates"
|
|
10
|
+
],
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"@sap-ux/odata-service-writer": "0.11.1",
|
|
13
|
+
"@sap-ux/ui5-application-writer": "0.12.0",
|
|
14
|
+
"@sap-ux/ui5-config": "0.12.0",
|
|
15
|
+
"ejs": "3.1.6",
|
|
16
|
+
"i18next": "20.3.2",
|
|
17
|
+
"lodash": "4.17.21",
|
|
18
|
+
"mem-fs": "2.1.0",
|
|
19
|
+
"mem-fs-editor": "9.0.0",
|
|
20
|
+
"read-pkg-up": "7.0.1",
|
|
21
|
+
"semver": "7.3.5"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@types/ejs": "3.1.0",
|
|
25
|
+
"@types/fs-extra": "9.0.13",
|
|
26
|
+
"@types/lodash": "4.14.176",
|
|
27
|
+
"@types/mem-fs-editor": "7.0.1",
|
|
28
|
+
"fs-extra": "10.0.0"
|
|
29
|
+
},
|
|
30
|
+
"engines": {
|
|
31
|
+
"pnpm": ">=6.26.1",
|
|
32
|
+
"node": ">=12.22.5 < 13.0.0 || >= 14.16.0 < 15.0.0 || >=16.1.0 < 17.0.0"
|
|
33
|
+
},
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "rimraf dist && tsc",
|
|
36
|
+
"clean": "rimraf dist test/test-output coverage",
|
|
37
|
+
"watch": "tsc --watch",
|
|
38
|
+
"lint": "eslint . --ext .ts",
|
|
39
|
+
"test": "jest --ci --forceExit --detectOpenHandles --colors",
|
|
40
|
+
"test-u": "jest --ci --forceExit --detectOpenHandles --colors -u",
|
|
41
|
+
"test:local": "node -r ts-node/register test/index.ts",
|
|
42
|
+
"link": "pnpm link --global",
|
|
43
|
+
"unlink": "pnpm unlink --global"
|
|
44
|
+
},
|
|
45
|
+
"readme": "# @sap-ux/fiori-elements-writer\n\nEasy to use Fiori Elements project files writer for use within Yeoman generator and other prompting libraries. \n\n\n## Installation\nNpm\n`npm install --save @sap-ux/fiori-elements-writer`\n\nYarn\n`yarn add @sap-ux/fiori-elements-writer`\n\nPnpm\n`pnpm add @sap-ux/fiori-elements-writer`\n\n## Usage\n\n\nCalling the `generate` function\n```javascript\nimport { FioriElementsApp, generate, OdataVersion, TemplateType } from '@sap-ux/fiori-elements-writer'\nimport { join } from 'path';\n\nconst exampleWriter = async () => {\n\n const appConfig = {\n app: {\n id: 'test.me',\n title: 'My Test App',\n flpAppId: 'testme-app'\n },\n package: {\n name: 'test.me'\n },\n service: {\n url: 'https://services.odata.org',\n path: '/V2/Northwind/Northwind.svc',\n version: OdataVersion.v2,\n metadata: // Fetch from: https://services.odata.org/V2/Northwind/Northwind.svc$metadata\n },\n ui5: {\n localVersion: '1.90.0',\n version: '1.98.0',\n ui5Theme: 'sap_fiori_3'\n },\n template: {\n type: TemplateType.ListReportObjectPage,\n settings: {\n entityConfig: {\n mainEntity: {\n entityName: 'Suppliers'\n },\n navigationEntity: {\n EntitySet: 'Products',\n Name: 'Products',\n Role: ''\n }\n }\n }\n }\n };\n\n const projectPath = join(curTestOutPath, name);\n const fs = await generate(join(projectPath), appConfig);\n return new Promise((resolve) => {\n fs.commit(resolve); // When using with Yeoman it handle the fs commit.\n });\n}\n\n// Calling the function\nawait exampleWriter();\n\n```\n\n## Keywords\nSAP Fiori Elements\n"
|
|
46
|
+
}
|