@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.
Files changed (48) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +76 -0
  3. package/dist/data/defaults.d.ts +16 -0
  4. package/dist/data/defaults.d.ts.map +1 -0
  5. package/dist/data/defaults.js +62 -0
  6. package/dist/data/defaults.js.map +1 -0
  7. package/dist/data/manifestSettings.d.ts +14 -0
  8. package/dist/data/manifestSettings.d.ts.map +1 -0
  9. package/dist/data/manifestSettings.js +42 -0
  10. package/dist/data/manifestSettings.js.map +1 -0
  11. package/dist/data/templateAttributes.d.ts +34 -0
  12. package/dist/data/templateAttributes.d.ts.map +1 -0
  13. package/dist/data/templateAttributes.js +118 -0
  14. package/dist/data/templateAttributes.js.map +1 -0
  15. package/dist/i18n.d.ts +14 -0
  16. package/dist/i18n.d.ts.map +1 -0
  17. package/dist/i18n.js +50 -0
  18. package/dist/i18n.js.map +1 -0
  19. package/dist/index.d.ts +14 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +92 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/packageConfig.d.ts +27 -0
  24. package/dist/packageConfig.d.ts.map +1 -0
  25. package/dist/packageConfig.js +50 -0
  26. package/dist/packageConfig.js.map +1 -0
  27. package/dist/translations/fiori-elements-writer.i18n.json +11 -0
  28. package/dist/types.d.ts +80 -0
  29. package/dist/types.d.ts.map +1 -0
  30. package/dist/types.js +43 -0
  31. package/dist/types.js.map +1 -0
  32. package/dist/validate.d.ts +14 -0
  33. package/dist/validate.d.ts.map +1 -0
  34. package/dist/validate.js +72 -0
  35. package/dist/validate.js.map +1 -0
  36. package/package.json +46 -0
  37. package/templates/common/add/webapp/Component.js +12 -0
  38. package/templates/common/add/webapp/test/flpSandbox.html +82 -0
  39. package/templates/common/extend/package.json +7 -0
  40. package/templates/v2/alp/extend/webapp/manifest.json +53 -0
  41. package/templates/v2/common/add/webapp/test/changes_loader.js +47 -0
  42. package/templates/v2/common/add/webapp/test/changes_preview.js +206 -0
  43. package/templates/v2/common/extend/webapp/manifest.json +25 -0
  44. package/templates/v2/lrop/extend/webapp/manifest.json +47 -0
  45. package/templates/v2/ovp/extend/webapp/manifest.json +14 -0
  46. package/templates/v2/worklist/extend/webapp/manifest.json +55 -0
  47. package/templates/v4/feop/add/webapp/Component.js +23 -0
  48. 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
@@ -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"}
@@ -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
+ }
@@ -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"}
@@ -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
+ }
@@ -0,0 +1,12 @@
1
+ sap.ui.define(
2
+ ["<%- app.baseComponent %>"],
3
+ function (Component) {
4
+ "use strict";
5
+
6
+ return Component.extend("<%- app.id %>.Component", {
7
+ metadata: {
8
+ manifest: "json"
9
+ }
10
+ });
11
+ }
12
+ );