@ui5/webcomponents-tools 0.0.0-07d38e78e → 0.0.0-093de5dd1

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 (105) hide show
  1. package/CHANGELOG.md +1030 -0
  2. package/LICENSE.txt +201 -0
  3. package/README.md +7 -10
  4. package/assets-meta.js +1 -5
  5. package/bin/dev.js +3 -2
  6. package/bin/ui5nps.js +274 -0
  7. package/components-package/eslint.js +59 -31
  8. package/components-package/nps.js +98 -75
  9. package/components-package/vite.config.js +7 -11
  10. package/components-package/wdio.js +12 -5
  11. package/icons-collection/nps.js +30 -21
  12. package/lib/amd-to-es6/index.js +15 -10
  13. package/lib/cem/cem.js +12 -0
  14. package/lib/cem/custom-elements-manifest.config.mjs +90 -45
  15. package/lib/cem/event.mjs +69 -32
  16. package/lib/cem/merge.mjs +220 -0
  17. package/lib/cem/patch/@custom-elements-manifest/analyzer/cli.js +128 -0
  18. package/lib/cem/patch/@custom-elements-manifest/analyzer/package.json +59 -0
  19. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/browser-entrypoint.js +23 -0
  20. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/create.js +117 -0
  21. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/analyse-phase/arrow-function.js +26 -0
  22. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/analyse-phase/class-jsdoc.js +157 -0
  23. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/analyse-phase/classes.js +20 -0
  24. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/analyse-phase/creators/createArrowFunction.js +17 -0
  25. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/analyse-phase/creators/createAttribute.js +24 -0
  26. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/analyse-phase/creators/createClass.js +301 -0
  27. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/analyse-phase/creators/createClassField.js +26 -0
  28. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/analyse-phase/creators/createFunctionLike.js +73 -0
  29. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/analyse-phase/creators/createMixin.js +33 -0
  30. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/analyse-phase/creators/createVariable.js +22 -0
  31. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/analyse-phase/creators/handlers.js +338 -0
  32. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/analyse-phase/custom-elements-define-calls.js +90 -0
  33. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/analyse-phase/exports.js +156 -0
  34. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/analyse-phase/function-like.js +24 -0
  35. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/analyse-phase/mixins.js +29 -0
  36. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/analyse-phase/reexported-wrapped-mixin-exports.js +84 -0
  37. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/analyse-phase/variables.js +34 -0
  38. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/collect-phase/collect-imports.js +101 -0
  39. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/framework-plugins/catalyst/catalyst.js +11 -0
  40. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/framework-plugins/catalyst/controller.js +34 -0
  41. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/framework-plugins/catalyst-major-2/catalyst.js +11 -0
  42. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/framework-plugins/catalyst-major-2/controller.js +34 -0
  43. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/framework-plugins/decorators/attr.js +53 -0
  44. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/framework-plugins/decorators/custom-element-decorator.js +36 -0
  45. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/framework-plugins/fast/fast.js +7 -0
  46. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/framework-plugins/lit/lit.js +13 -0
  47. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/framework-plugins/lit/member-denylist.js +21 -0
  48. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/framework-plugins/lit/method-denylist.js +20 -0
  49. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/framework-plugins/lit/property-decorator.js +94 -0
  50. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/framework-plugins/lit/static-properties.js +121 -0
  51. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/framework-plugins/lit/utils.js +66 -0
  52. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/framework-plugins/stencil/stencil.js +129 -0
  53. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/index.js +80 -0
  54. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/link-phase/cleanup-classes.js +25 -0
  55. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/link-phase/field-denylist.js +22 -0
  56. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/link-phase/method-denylist.js +25 -0
  57. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/post-processing/apply-inheritance.js +78 -0
  58. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/post-processing/is-custom-element.js +34 -0
  59. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/post-processing/link-class-to-tagname.js +27 -0
  60. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/post-processing/remove-unexported-declarations.js +23 -0
  61. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/features/post-processing/resolve-initializers.js +52 -0
  62. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/utils/ast-helpers.js +186 -0
  63. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/utils/cli-helpers.js +164 -0
  64. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/utils/exports.js +44 -0
  65. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/utils/find-external-manifests.js +67 -0
  66. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/utils/imports.js +25 -0
  67. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/utils/index.js +71 -0
  68. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/utils/jsdoc.js +19 -0
  69. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/utils/manifest-helpers.js +194 -0
  70. package/lib/cem/patch/@custom-elements-manifest/analyzer/src/utils/mixins.js +112 -0
  71. package/lib/cem/schema-internal.json +65 -0
  72. package/lib/cem/types-internal.d.ts +14 -2
  73. package/lib/cem/utils.mjs +69 -30
  74. package/lib/cem/validate.js +61 -55
  75. package/lib/chokidar/chokidar.js +28 -0
  76. package/lib/copy-and-watch/index.js +105 -97
  77. package/lib/copy-list/index.js +16 -10
  78. package/lib/create-icons/index.js +24 -19
  79. package/lib/create-illustrations/index.js +49 -27
  80. package/lib/create-new-component/{tsFileContentTemplate.js → Component.js} +12 -9
  81. package/lib/create-new-component/ComponentTemplate.js +12 -0
  82. package/lib/create-new-component/index.js +13 -12
  83. package/lib/css-processors/css-processor-components.mjs +74 -59
  84. package/lib/css-processors/css-processor-themes.mjs +85 -62
  85. package/lib/css-processors/shared.mjs +5 -35
  86. package/lib/dev-server/{dev-server.js → dev-server.mjs} +26 -14
  87. package/lib/dev-server/virtual-index-html-plugin.js +24 -20
  88. package/lib/eslint/eslint.js +44 -0
  89. package/lib/generate-js-imports/illustrations.js +53 -54
  90. package/lib/generate-json-imports/i18n.js +56 -36
  91. package/lib/generate-json-imports/themes.js +27 -14
  92. package/lib/hbs2ui5/RenderTemplates/LitRenderer.js +12 -7
  93. package/lib/hbs2ui5/index.js +3 -3
  94. package/lib/i18n/defaults.js +15 -9
  95. package/lib/i18n/toJSON.js +38 -12
  96. package/lib/icons-hash/icons-hash.mjs +149 -0
  97. package/lib/remove-dev-mode/remove-dev-mode.mjs +38 -24
  98. package/lib/rimraf/rimraf.js +31 -0
  99. package/lib/scoping/get-all-tags.js +9 -2
  100. package/lib/test-runner/test-runner.js +56 -48
  101. package/lib/vite-bundler/vite-bundler.mjs +35 -0
  102. package/package.json +22 -19
  103. package/tsconfig.json +18 -0
  104. package/lib/css-processors/css-processor-component-styles.mjs +0 -48
  105. package/lib/dev-server/ssr-dom-shim-loader.js +0 -26
@@ -1,70 +1,76 @@
1
1
  const fs = require('fs');
2
2
  const Ajv = require('ajv');
3
3
  const path = require('path');
4
- const yargs = require('yargs/yargs')
5
- const { hideBin } = require('yargs/helpers')
6
- const argv = yargs(hideBin(process.argv))
7
- .argv;
8
-
9
4
  // Load your JSON schema
10
5
  const extenalSchema = require('./schema.json');
11
6
  const internalSchema = require('./schema-internal.json');
12
7
 
13
- // Load your JSON data from the input file
14
- const inputFilePath = path.join(process.cwd(), "dist/custom-elements.json"); // Update with your file path
15
- const customManifest = fs.readFileSync(inputFilePath, 'utf8');
16
- const inputDataInternal = JSON.parse(customManifest);
17
8
 
18
- inputDataInternal.modules.forEach(moduleDoc => {
19
- moduleDoc.exports = moduleDoc.exports.
20
- filter(e => moduleDoc.declarations.find(d => d.name === e.declaration.name && ["class", "function", "variable", "enum"].includes(d.kind)) || e.name === "default");
21
- })
9
+ const validateFn = async () => {
10
+ // Load your JSON data from the input file
11
+ const inputFilePath = path.join(process.cwd(), "dist/custom-elements.json"); // Update with your file path
12
+ const customManifest = fs.readFileSync(inputFilePath, 'utf8');
13
+ const inputDataInternal = JSON.parse(customManifest);
14
+ const devMode = process.env.UI5_CEM_MODE === "dev";
22
15
 
23
- const clearProps = (data) => {
24
- if (Array.isArray(data)) {
25
- for (let i = 0; i < data.length; i++) {
26
- if (typeof data[i] === "object") {
27
- if (["enum", "interface"].includes(data[i].kind)) {
28
- data.splice(i, 1);
29
- i--;
30
- } else {
31
- clearProps(data[i]);
32
- }
33
- }
34
- }
35
- } else if (typeof data === "object") {
36
- Object.keys(data).forEach(prop => {
37
- if (prop.startsWith("_ui5")) {
38
- delete data[prop];
39
- } else if (typeof data[prop] === "object") {
40
- clearProps(data[prop]);
41
- }
42
- });
43
- }
16
+ inputDataInternal.modules.forEach(moduleDoc => {
17
+ moduleDoc.exports = moduleDoc.exports.
18
+ filter(e => moduleDoc.declarations.find(d => d.name === e.declaration.name && ["class", "function", "variable", "enum"].includes(d.kind)) || e.name === "default");
19
+ })
44
20
 
45
- return data;
46
- }
21
+ const clearProps = (data) => {
22
+ if (Array.isArray(data)) {
23
+ for (let i = 0; i < data.length; i++) {
24
+ if (typeof data[i] === "object") {
25
+ if (["enum", "interface"].includes(data[i].kind)) {
26
+ data.splice(i, 1);
27
+ i--;
28
+ } else {
29
+ clearProps(data[i]);
30
+ }
31
+ }
32
+ }
33
+ } else if (typeof data === "object") {
34
+ Object.keys(data).forEach(prop => {
35
+ if (prop.startsWith("_ui5")) {
36
+ delete data[prop];
37
+ } else if (typeof data[prop] === "object") {
38
+ clearProps(data[prop]);
39
+ }
40
+ });
41
+ }
42
+
43
+ return data;
44
+ }
47
45
 
48
- const ajv = new Ajv({ allowUnionTypes: true, allError: true })
49
- let validate = ajv.compile(internalSchema)
46
+ const ajv = new Ajv({ allowUnionTypes: true, allError: true })
47
+ let validate = ajv.compile(internalSchema)
50
48
 
51
- // Validate the JSON data against the schema
52
- if (argv.dev) {
53
- if (validate(inputDataInternal)) {
54
- console.log('Internal custom element manifest is validated successfully');
55
- } else {
56
- throw new Error(`Validation of internal custom elements manifest failed: ${validate.errors}`);
57
- }
49
+ // Validate the JSON data against the schema
50
+ if (devMode) {
51
+ if (validate(inputDataInternal)) {
52
+ console.log('Internal custom element manifest is validated successfully');
53
+ } else {
54
+ console.log(validate.errors)
55
+ throw new Error(`Validation of internal custom elements manifest failed: ${validate.errors}`);
56
+ }
57
+ }
58
+
59
+ const inputDataExternal = clearProps(JSON.parse(JSON.stringify(inputDataInternal)));
60
+ validate = ajv.compile(extenalSchema)
61
+
62
+ // Validate the JSON data against the schema
63
+ if (validate(inputDataExternal)) {
64
+ console.log('Custom element manifest is validated successfully');
65
+ fs.writeFileSync(inputFilePath, JSON.stringify(inputDataExternal, null, 2), 'utf8');
66
+ fs.writeFileSync(inputFilePath.replace("custom-elements", "custom-elements-internal"), JSON.stringify(inputDataInternal, null, 2), 'utf8');
67
+ } else if (devMode) {
68
+ throw new Error(`Validation of public custom elements manifest failed: ${validate.errors}`);
69
+ }
58
70
  }
59
71
 
60
- const inputDataExternal = clearProps(JSON.parse(JSON.stringify(inputDataInternal)));
61
- validate = ajv.compile(extenalSchema)
72
+ if (require.main === module) {
73
+ validateFn()
74
+ }
62
75
 
63
- // Validate the JSON data against the schema
64
- if (validate(inputDataExternal)) {
65
- console.log('Custom element manifest is validated successfully');
66
- fs.writeFileSync(inputFilePath, JSON.stringify(inputDataExternal, null, 2), 'utf8');
67
- fs.writeFileSync(inputFilePath.replace("custom-elements", "custom-elements-internal"), JSON.stringify(inputDataInternal, null, 2), 'utf8');
68
- } else if (argv.dev) {
69
- throw new Error(`Validation of public custom elements manifest failed: ${validate.errors}`);
70
- }
76
+ exports._ui5mainFn = validateFn;
@@ -0,0 +1,28 @@
1
+ const chokidar = require('chokidar');
2
+ const { exec } = require("child_process");
3
+
4
+ const main = async (argv) => {
5
+ if (argv.length < 4) {
6
+ console.error("Please provide a file pattern to watch and a command to execute on changes.");
7
+ console.error("<file-pattern> <command>");
8
+ process.exit(1);
9
+ }
10
+
11
+ const filePattern = argv[2];
12
+ const command = argv.slice(3).join(' ');
13
+
14
+ const watcher = new chokidar.FSWatcher();
15
+
16
+ watcher.add(filePattern);
17
+ watcher.unwatch("src/generated");
18
+
19
+ watcher.on('change', async () => {
20
+ exec(command);
21
+ });
22
+ };
23
+
24
+ if (require.main === module) {
25
+ main(process.argv)
26
+ }
27
+
28
+ exports._ui5mainFn = main;
@@ -30,116 +30,124 @@ const globParent = require('glob-parent');
30
30
 
31
31
  /* CODE */
32
32
 
33
- const args = process.argv.slice(2);
34
- const options = {};
35
-
36
- ['watch', 'clean', 'skip-initial-copy', 'safe', 'silent'].forEach(key => {
37
- const index = args.indexOf(`--${key}`);
38
- if (index >= 0) {
39
- options[key] = true;
40
- args.splice(index, 1);
33
+ const copyAndWatchFn = async (argv) => {
34
+ const args = argv.slice(2);
35
+ const options = {};
36
+
37
+ ['watch', 'clean', 'skip-initial-copy', 'safe', 'silent'].forEach(key => {
38
+ const index = args.indexOf(`--${key}`);
39
+ if (index >= 0) {
40
+ options[key] = true;
41
+ args.splice(index, 1);
42
+ }
43
+ });
44
+
45
+ if (args.length < 2) {
46
+ console.error('Not enough arguments: copy-and-watch [options] <sources> <target>');
47
+ process.exit(1);
41
48
  }
42
- });
43
49
 
44
- if (args.length < 2) {
45
- console.error('Not enough arguments: copy-and-watch [options] <sources> <target>'.red);
46
- process.exit(1);
47
- }
50
+ if (options['skip-initial-copy'] && !options['watch']) {
51
+ console.error('--skip-initial-copy argument is meant to be used with --watch, otherwise no files will be copied');
52
+ process.exit(1);
53
+ }
48
54
 
49
- if (options['skip-initial-copy'] && !options['watch']) {
50
- console.error('--skip-initial-copy argument is meant to be used with --watch, otherwise no files will be copied'.red);
51
- process.exit(1);
52
- }
55
+ const target = args.pop();
56
+ const sources = args;
57
+ const parents = [...new Set(sources.map(globParent))];
53
58
 
54
- const target = args.pop();
55
- const sources = args;
56
- const parents = [...new Set(sources.map(globParent))];
57
-
58
- const findTarget = from => {
59
- const parent = parents
60
- .filter(p => from.indexOf(p) >= 0)
61
- .sort()
62
- .reverse()[0];
63
- return path.join(target, path.relative(parent, from));
64
- };
65
- const createDirIfNotExist = to => {
66
- 'use strict';
67
-
68
- const dirs = [];
69
- let dir = path.dirname(to);
70
-
71
- while (dir !== path.dirname(dir)) {
72
- dirs.unshift(dir);
73
- dir = path.dirname(dir);
74
- }
59
+ const findTarget = from => {
60
+ const parent = parents
61
+ .filter(p => from.indexOf(p) >= 0)
62
+ .sort()
63
+ .reverse()[0];
64
+ return path.join(target, path.relative(parent, from));
65
+ };
66
+ const createDirIfNotExist = to => {
67
+ 'use strict';
68
+
69
+ const dirs = [];
70
+ let dir = path.dirname(to);
75
71
 
76
- dirs.forEach(dir => {
77
- if (!fs.existsSync(dir)) {
78
- fs.mkdirSync(dir);
72
+ while (dir !== path.dirname(dir)) {
73
+ dirs.unshift(dir);
74
+ dir = path.dirname(dir);
79
75
  }
80
- });
81
- };
82
- const copy = from => {
83
- const to = findTarget(from);
84
- createDirIfNotExist(to);
85
- const stats = fs.statSync(from);
86
- if (stats.isDirectory()) {
87
- return;
88
- }
89
- fs.writeFileSync(to, fs.readFileSync(from));
90
- options.silent || console.log('[COPY]'.yellow, from, 'to'.yellow, to);
91
- };
92
- const remove = from => {
93
- const to = findTarget(from);
94
- fs.unlinkSync(to);
95
- options.silent || console.log('[DELETE]'.yellow, to);
96
- };
97
- const rimraf = dir => {
98
- if (fs.existsSync(dir)) {
99
- fs.readdirSync(dir).forEach(entry => {
100
- const entryPath = path.join(dir, entry);
101
- if (fs.lstatSync(entryPath).isDirectory()) {
102
- rimraf(entryPath);
103
- } else {
104
- fs.unlinkSync(entryPath);
76
+
77
+ dirs.forEach(dir => {
78
+ if (!fs.existsSync(dir)) {
79
+ fs.mkdirSync(dir);
105
80
  }
106
81
  });
107
- fs.rmdirSync(dir);
82
+ };
83
+ const copy = from => {
84
+ const to = findTarget(from);
85
+ createDirIfNotExist(to);
86
+ const stats = fs.statSync(from);
87
+ if (stats.isDirectory()) {
88
+ return;
89
+ }
90
+ fs.writeFileSync(to, fs.readFileSync(from));
91
+ options.silent || console.log('[COPY]', from, 'to', to);
92
+ };
93
+ const remove = from => {
94
+ const to = findTarget(from);
95
+ fs.unlinkSync(to);
96
+ options.silent || console.log('[DELETE]', to);
97
+ };
98
+ const rimraf = dir => {
99
+ if (fs.existsSync(dir)) {
100
+ fs.readdirSync(dir).forEach(entry => {
101
+ const entryPath = path.join(dir, entry);
102
+ if (fs.lstatSync(entryPath).isDirectory()) {
103
+ rimraf(entryPath);
104
+ } else {
105
+ fs.unlinkSync(entryPath);
106
+ }
107
+ });
108
+ fs.rmdirSync(dir);
109
+ }
110
+ };
111
+
112
+ // clean
113
+ if (options.clean) {
114
+ rimraf(target);
108
115
  }
109
- };
110
116
 
111
- // clean
112
- if (options.clean) {
113
- rimraf(target);
114
- }
117
+ // initial copy
118
+ if (!options['skip-initial-copy']) {
119
+ sources.forEach(s => glob.sync(s).forEach(copy));
120
+ }
115
121
 
116
- // initial copy
117
- if (!options['skip-initial-copy']) {
118
- sources.forEach(s => glob.sync(s).forEach(copy));
119
- }
122
+ // watch
123
+ if (options.watch) {
124
+ const chokidarOptions = {
125
+ ignoreInitial: true
126
+ };
120
127
 
121
- // watch
122
- if (options.watch) {
123
- const chokidarOptions = {
124
- ignoreInitial: true
125
- };
128
+ if (options.safe) {
129
+ chokidarOptions.awaitWriteFinish = {
130
+ stabilityThreshold: 500,
131
+ pollInterval: 100
132
+ };
133
+ }
126
134
 
127
- if (options.safe) {
128
- chokidarOptions.awaitWriteFinish = {
129
- stabilityThreshold: 500,
130
- pollInterval: 100
131
- };
135
+ chokidar
136
+ .watch(sources, chokidarOptions)
137
+ .on('ready', () => sources.forEach(s => {
138
+ options.silent || console.log('[WATCH]', s);
139
+ }))
140
+ .on('add', copy)
141
+ .on('addDir', copy)
142
+ .on('change', copy)
143
+ .on('unlink', remove)
144
+ .on('unlinkDir', remove)
145
+ .on('error', e => console.log('[ERROR]', e));
132
146
  }
147
+ }
133
148
 
134
- chokidar
135
- .watch(sources, chokidarOptions)
136
- .on('ready', () => sources.forEach(s => {
137
- options.silent || console.log('[WATCH]'.yellow, s);
138
- }))
139
- .on('add', copy)
140
- .on('addDir', copy)
141
- .on('change', copy)
142
- .on('unlink', remove)
143
- .on('unlinkDir', remove)
144
- .on('error', e => console.log('[ERROR]'.red, e));
149
+ if (require.main === module) {
150
+ copyAndWatchFn(process.argv)
145
151
  }
152
+
153
+ exports._ui5mainFn = copyAndWatchFn;
@@ -1,11 +1,10 @@
1
1
  const fs = require("fs").promises;
2
2
  const path = require("path");
3
3
 
4
- const fileList = process.argv[2];
5
- const dest = process.argv[3];
6
- const src = "@openui5/sap.ui.core/src/";
7
-
8
- const generate = async () => {
4
+ const generate = async (argv) => {
5
+ const fileList = argv[2];
6
+ const dest = argv[3];
7
+ const src = "@openui5/sap.ui.core/src/";
9
8
  const filesToCopy = (await fs.readFile(fileList)).toString();
10
9
  // console.log(filesToCopy);
11
10
 
@@ -14,15 +13,22 @@ const generate = async () => {
14
13
 
15
14
  const trimFile = file => file.trim();
16
15
 
17
- return filesToCopy.split("\n").map(trimFile).filter(shouldCopy).map(async moduleName => {
18
- const srcPath = require.resolve(path.join(src, moduleName), {paths: [process.cwd()]});
16
+ const promises = filesToCopy.split("\n").map(trimFile).filter(shouldCopy).map(async moduleName => {
17
+ const srcPath = require.resolve(path.join(src, moduleName), { paths: [process.cwd()] });
19
18
  const destPath = path.join(dest, moduleName);
20
19
 
21
20
  await fs.mkdir(path.dirname(destPath), { recursive: true });
22
21
  return fs.copyFile(srcPath, destPath);
23
22
  });
23
+
24
+ return Promise.all(promises).then(() => {
25
+ console.log("Files copied.");
26
+ });
24
27
  };
25
28
 
26
- generate().then(() => {
27
- console.log("Files copied.");
28
- });
29
+
30
+ if (require.main === module) {
31
+ generate(process.argv)
32
+ }
33
+
34
+ exports._ui5mainFn = generate;
@@ -1,11 +1,6 @@
1
1
  const fs = require("fs").promises;
2
2
  const path = require("path");
3
3
 
4
- const collectionName = process.argv[2] || "SAP-icons-v4";
5
- const collectionVersion = process.argv[3];
6
- const srcFile = collectionVersion ? path.normalize(`src/${collectionVersion}/${collectionName}.json`) : path.normalize(`src/${collectionName}.json`);
7
- const destDir = collectionVersion ? path.normalize(`dist/${collectionVersion}/`) : path.normalize("dist/");
8
-
9
4
  const iconTemplate = (name, pathData, ltr, collection, packageName) => `import { registerIcon } from "@ui5/webcomponents-base/dist/asset-registries/Icons.js";
10
5
 
11
6
  const name = "${name}";
@@ -21,8 +16,8 @@ export default "${collection}/${name}";
21
16
  export { pathData, ltr, accData };`;
22
17
 
23
18
 
24
- const iconAccTemplate = (name, pathData, ltr, accData, collection, packageName) => `import { registerIcon } from "@ui5/webcomponents-base/dist/asset-registries/Icons.js";
25
- import { ${accData.key} } from "../generated/i18n/i18n-defaults.js";
19
+ const iconAccTemplate = (name, pathData, ltr, accData, collection, packageName, versioned) => `import { registerIcon } from "@ui5/webcomponents-base/dist/asset-registries/Icons.js";
20
+ import { ${accData.key} } from "${versioned ? "../" : "./"}generated/i18n/i18n-defaults.js";
26
21
 
27
22
  const name = "${name}";
28
23
  const pathData = "${pathData}";
@@ -71,10 +66,14 @@ const svgTemplate = (pathData) => `<svg xmlns="http://www.w3.org/2000/svg" viewB
71
66
  <path d="${pathData}"/>
72
67
  </svg>`;
73
68
 
74
- const createIcons = async (file) => {
69
+ const createIcons = async (argv) => {
70
+ const collectionName = argv[2] || "SAP-icons-v4";
71
+ const collectionVersion = argv[3];
72
+ const srcFile = collectionVersion ? path.normalize(`src/${collectionVersion}/${collectionName}.json`) : path.normalize(`src/${collectionName}.json`);
73
+ const destDir = collectionVersion ? path.normalize(`dist/${collectionVersion}/`) : path.normalize("dist/");
75
74
  await fs.mkdir(destDir, { recursive: true });
76
75
 
77
- const json = JSON.parse(await fs.readFile(file));
76
+ const json = JSON.parse(await fs.readFile(srcFile));
78
77
 
79
78
  const promises = [];
80
79
  for (let name in json.data) {
@@ -82,10 +81,11 @@ const createIcons = async (file) => {
82
81
  const pathData = iconData.path;
83
82
  const ltr = !!iconData.ltr;
84
83
  const acc = iconData.acc;
85
- const packageName = json.packageName;
86
- const collection = json.collection;
84
+ const packageName = json.packageName;
85
+ const collection = json.collection;
86
+ const versioned = json.version;
87
87
 
88
- const content = acc ? iconAccTemplate(name, pathData, ltr, acc, collection, packageName) : iconTemplate(name, pathData, ltr, collection, packageName);
88
+ const content = acc ? iconAccTemplate(name, pathData, ltr, acc, collection, packageName, versioned) : iconTemplate(name, pathData, ltr, collection, packageName);
89
89
 
90
90
  promises.push(fs.writeFile(path.join(destDir, `${name}.js`), content));
91
91
  promises.push(fs.writeFile(path.join(destDir, `${name}.svg`), svgTemplate(pathData)));
@@ -96,21 +96,24 @@ const createIcons = async (file) => {
96
96
  // - "@ui5/ui5-webcomponents-icons/dist/v5/accept.js"
97
97
  // - "@ui5/ui5-webcomponents-icons/dist/v4/accept.js"
98
98
 
99
- if (json.version) {
99
+ if (versioned) {
100
100
  // The exported value from the top level (unversioned) icon module depends on whether the collection is the default,
101
101
  // to add or not the collection name to the exported value:
102
102
  // For the default collection (SAPIcons) we export just the icon name - "export default { 'accept' }"
103
103
  // For non-default collections (SAPTNTIcons and SAPBSIcons) we export the full name - "export default { 'tnt/actor' }"
104
104
  const effectiveName = isDefaultCollection(collection) ? name : getUnversionedFullIconName(name, collection);
105
105
  promises.push(fs.writeFile(path.join(path.normalize("dist/"), `${name}.js`), collectionTemplate(name, json.versions, effectiveName)));
106
- promises.push(fs.writeFile(path.join(path.normalize("dist/"), `${name}.d.ts`), collectionTypeDefinitionTemplate(effectiveName, acc)));
106
+ promises.push(fs.writeFile(path.join(path.normalize("dist/"), `${name}.d.ts`), collectionTypeDefinitionTemplate(effectiveName, acc)));
107
107
  }
108
108
  }
109
109
 
110
- return Promise.all(promises);
110
+ return Promise.all(promises)
111
+ .then(() => {
112
+ console.log("Icons created.");
113
+ });
111
114
  };
112
115
 
113
- const isDefaultCollection = collectionName => collectionName === "SAP-icons-v4" || collectionName === "SAP-icons-v5";
116
+ const isDefaultCollection = collectionName => collectionName === "SAP-icons-v4" || collectionName === "SAP-icons-v5";
114
117
  const getUnversionedFullIconName = (name, collection) => `${getUnversionedCollectionName(collection)}/${name}`;
115
118
  const getUnversionedCollectionName = collectionName => CollectionVersionedToUnversionedMap[collectionName] || collectionName;
116
119
 
@@ -121,6 +124,8 @@ const CollectionVersionedToUnversionedMap = {
121
124
  "business-suite-v2": "business-suite",
122
125
  };
123
126
 
124
- createIcons(srcFile).then(() => {
125
- console.log("Icons created.");
126
- });
127
+ if (require.main === module) {
128
+ createIcons(process.argv)
129
+ }
130
+
131
+ exports._ui5mainFn = createIcons;
@@ -1,11 +1,10 @@
1
1
  const fs = require("fs").promises;
2
2
  const path = require("path");
3
3
 
4
- if (process.argv.length < 7) {
5
- throw new Error("Not enough arguments");
6
- }
7
-
8
- const generate = async () => {
4
+ const generate = async (argv) => {
5
+ if (argv.length < 7) {
6
+ throw new Error("Not enough arguments");
7
+ }
9
8
 
10
9
  const ORIGINAL_TEXTS = {
11
10
  UnableToLoad: "UnableToLoad",
@@ -20,7 +19,15 @@ const generate = async () => {
20
19
  SuccessScreen: "SuccessScreen",
21
20
  NoMail: "NoMail",
22
21
  NoSavedItems: "NoSavedItems",
23
- NoTasks: "NoTasks"
22
+ NoTasks: "NoTasks",
23
+ NoDimensionsSet: "NoDimensionsSet",
24
+ AddPeople: "AddPeople",
25
+ AddColumn: "AddColumn",
26
+ SortColumn: "SortColumn",
27
+ FilterTable: "FilterTable",
28
+ ResizeColumn: "ResizeColumn",
29
+ GroupTable: "GroupTable",
30
+ UploadCollection: "UploadCollection"
24
31
  };
25
32
 
26
33
  const FALLBACK_TEXTS = {
@@ -47,17 +54,27 @@ const generate = async () => {
47
54
  SimpleNotFoundMagnifier: ORIGINAL_TEXTS.NoSearchResults,
48
55
  SimpleReload: ORIGINAL_TEXTS.UnableToLoad,
49
56
  SimpleTask: ORIGINAL_TEXTS.NoTasks,
57
+ NoChartData: ORIGINAL_TEXTS.NoDimensionsSet,
58
+ AddingColumns: ORIGINAL_TEXTS.AddColumn,
59
+ SortingColumns: ORIGINAL_TEXTS.SortColumn,
60
+ FilteringColumns: ORIGINAL_TEXTS.FilterTable,
61
+ ResizingColumns: ORIGINAL_TEXTS.ResizeColumn,
62
+ GroupingColumns: ORIGINAL_TEXTS.GroupTable,
63
+ AddPeopleToCalendar: ORIGINAL_TEXTS.AddPeople,
64
+ DragFilesToUpload: ORIGINAL_TEXTS.UploadCollection,
65
+ KeyTask: ORIGINAL_TEXTS.SuccessScreen,
66
+ ReceiveAppreciation: ORIGINAL_TEXTS.BalloonSky,
50
67
  SuccessBalloon: ORIGINAL_TEXTS.BalloonSky,
51
68
  SuccessCheckMark: ORIGINAL_TEXTS.SuccessScreen,
52
69
  SuccessHighFive: ORIGINAL_TEXTS.BalloonSky
53
70
  };
54
71
 
55
- const srcPath = process.argv[2];
56
- const defaultText = process.argv[3] === "true";
57
- const illustrationsPrefix = process.argv[4];
58
- const illustrationSet = process.argv[5];
59
- const destPath = process.argv[6];
60
- const collection = process.argv[7];
72
+ const srcPath = argv[2];
73
+ const defaultText = argv[3] === "true";
74
+ const illustrationsPrefix = argv[4];
75
+ const illustrationSet = argv[5];
76
+ const destPath = argv[6];
77
+ const collection = argv[7];
61
78
  const fileNamePattern = new RegExp(`${illustrationsPrefix}-.+-(.+).svg`);
62
79
  // collect each illustration name because each one should have Sample.js file
63
80
  const fileNames = new Set();
@@ -104,12 +121,11 @@ const generate = async () => {
104
121
  // If no Dot is present, Spot will be imported as Dot
105
122
  const hasDot = dotIllustrationNames.indexOf(illustrationName) !== -1 ? 'Dot' : 'Spot';
106
123
 
107
- return `import { registerIllustration } from "@ui5/webcomponents-base/dist/asset-registries/Illustrations.js";
124
+ return `import { unsafeRegisterIllustration } from "@ui5/webcomponents-base/dist/asset-registries/Illustrations.js";
108
125
  import dialogSvg from "./${illustrationsPrefix}-Dialog-${illustrationName}.js";
109
126
  import sceneSvg from "./${illustrationsPrefix}-Scene-${illustrationName}.js";
110
127
  import spotSvg from "./${illustrationsPrefix}-Spot-${illustrationName}.js";
111
- import dotSvg from "./${illustrationsPrefix}-${hasDot}-${illustrationName}.js";${
112
- defaultText ? `import {
128
+ import dotSvg from "./${illustrationsPrefix}-${hasDot}-${illustrationName}.js";${defaultText ? `import {
113
129
  IM_TITLE_${illustrationNameUpperCase},
114
130
  IM_SUBTITLE_${illustrationNameUpperCase},
115
131
  } from "../generated/i18n/i18n-defaults.js";` : ``}
@@ -120,7 +136,7 @@ const collection = "${collection}";${defaultText ? `
120
136
  const title = IM_TITLE_${illustrationNameUpperCase};
121
137
  const subtitle = IM_SUBTITLE_${illustrationNameUpperCase};` : ``}
122
138
 
123
- registerIllustration(name, {
139
+ unsafeRegisterIllustration(name, {
124
140
  dialogSvg,
125
141
  sceneSvg,
126
142
  spotSvg,
@@ -166,17 +182,23 @@ export { dialogSvg, sceneSvg, spotSvg, dotSvg };`
166
182
  }
167
183
  });
168
184
 
169
- return Promise.all(promises).then(() => {
170
- const nestedPromises = [];
171
- for (let illustrationName of fileNames) {
172
- nestedPromises.push(fs.writeFile(path.join(destPath, `${illustrationName}.js`), illustrationImportTemplate(illustrationName)));
173
- nestedPromises.push(fs.writeFile(path.join(destPath, `${illustrationName}.d.ts`), illustrationTypeDefinition(illustrationName)));
174
- }
185
+ return Promise.all(promises)
186
+ .then(() => {
187
+ const nestedPromises = [];
188
+ for (let illustrationName of fileNames) {
189
+ nestedPromises.push(fs.writeFile(path.join(destPath, `${illustrationName}.js`), illustrationImportTemplate(illustrationName)));
190
+ nestedPromises.push(fs.writeFile(path.join(destPath, `${illustrationName}.d.ts`), illustrationTypeDefinition(illustrationName)));
191
+ }
175
192
 
176
- return Promise.all(nestedPromises);
177
- });
193
+ return Promise.all(nestedPromises);
194
+ })
195
+ .then(() => {
196
+ console.log("Illustrations generated.");
197
+ });
178
198
  };
179
199
 
180
- generate().then(() => {
181
- console.log("Illustrations generated.");
182
- });
200
+ if (require.main === module) {
201
+ generate(process.argv)
202
+ }
203
+
204
+ exports._ui5mainFn = generate;