@ui5/create-webcomponents-package 0.0.0-2f7664755 → 0.0.0-33967dd12

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 (32) hide show
  1. package/CHANGELOG.md +268 -0
  2. package/README.md +10 -8
  3. package/create-package.js +106 -43
  4. package/package.json +1 -1
  5. package/template/.eslintignore +2 -1
  6. package/template/.eslintrc.js +5 -0
  7. package/template/gitignore +4 -0
  8. package/template/npmrc +2 -0
  9. package/template/src/MyFirstComponent.hbs +1 -1
  10. package/template/src/MyFirstComponent.js +20 -5
  11. package/template/src/MyFirstComponent.ts +25 -17
  12. package/template/src/i18n/messagebundle.properties +3 -2
  13. package/template/src/i18n/messagebundle_de.properties +1 -1
  14. package/template/src/i18n/messagebundle_en.properties +1 -1
  15. package/template/src/i18n/messagebundle_es.properties +1 -1
  16. package/template/src/i18n/messagebundle_fr.properties +1 -1
  17. package/template/src/themes/MyFirstComponent.css +14 -9
  18. package/template/src/themes/sap_fiori_3/parameters-bundle.css +1 -1
  19. package/template/src/themes/sap_horizon_dark/parameters-bundle.css +3 -0
  20. package/template/src/themes/sap_horizon_hcb/parameters-bundle.css +3 -0
  21. package/template/test/pages/css/index.css +36 -0
  22. package/template/test/pages/img/logo.png +0 -0
  23. package/template/test/pages/index.html +35 -30
  24. package/template/test/specs/Demo.spec.js +3 -2
  25. package/template/tsconfig.json +1 -0
  26. package/template/global.d.ts +0 -12
  27. package/template/src/themes/sap_belize_hcw/parameters-bundle.css +0 -3
  28. package/template/src/themes/sap_fiori_3_dark/parameters-bundle.css +0 -3
  29. package/template/src/themes/sap_fiori_3_hcb/parameters-bundle.css +0 -3
  30. package/template/src/themes/sap_fiori_3_hcw/parameters-bundle.css +0 -3
  31. /package/template/src/themes/{sap_belize → sap_horizon}/parameters-bundle.css +0 -0
  32. /package/template/src/themes/{sap_belize_hcb → sap_horizon_hcw}/parameters-bundle.css +0 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,274 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [1.16.0-rc.3](https://github.com/SAP/ui5-webcomponents/compare/v1.16.0-rc.2...v1.16.0-rc.3) (2023-07-27)
7
+
8
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
9
+
10
+
11
+
12
+
13
+
14
+ # [1.16.0-rc.2](https://github.com/SAP/ui5-webcomponents/compare/v1.16.0-rc.1...v1.16.0-rc.2) (2023-07-20)
15
+
16
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
17
+
18
+
19
+
20
+
21
+
22
+ # [1.16.0-rc.1](https://github.com/SAP/ui5-webcomponents/compare/v1.16.0-rc.0...v1.16.0-rc.1) (2023-07-13)
23
+
24
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
25
+
26
+
27
+
28
+
29
+
30
+ # [1.16.0-rc.0](https://github.com/SAP/ui5-webcomponents/compare/v1.15.1...v1.16.0-rc.0) (2023-07-06)
31
+
32
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
33
+
34
+
35
+
36
+
37
+
38
+ ## [1.15.1](https://github.com/SAP/ui5-webcomponents/compare/v1.15.0...v1.15.1) (2023-06-30)
39
+
40
+
41
+ ### Bug Fixes
42
+
43
+ * **framework:** fix links in starting page of new pkg [ci skip] ([475fed5](https://github.com/SAP/ui5-webcomponents/commit/475fed55504f4a15e8b26aaf3c9e4d73b55976ec))
44
+
45
+
46
+
47
+
48
+
49
+ # [1.15.0](https://github.com/SAP/ui5-webcomponents/compare/v1.15.0-rc.2...v1.15.0) (2023-06-30)
50
+
51
+
52
+ ### Bug Fixes
53
+
54
+ * fix image in `create-webcomponent-package` ([#7253](https://github.com/SAP/ui5-webcomponents/issues/7253)) ([3317e64](https://github.com/SAP/ui5-webcomponents/commit/3317e64b911f992abf34b88a48e6003a723f7b9e))
55
+
56
+
57
+
58
+
59
+
60
+ # [1.15.0-rc.2](https://github.com/SAP/ui5-webcomponents/compare/v1.15.0-rc.1...v1.15.0-rc.2) (2023-06-22)
61
+
62
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
63
+
64
+
65
+
66
+
67
+
68
+ # [1.15.0-rc.1](https://github.com/SAP/ui5-webcomponents/compare/v1.15.0-rc.0...v1.15.0-rc.1) (2023-06-15)
69
+
70
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+ # [1.15.0-rc.0](https://github.com/SAP/ui5-webcomponents/compare/v1.14.0...v1.15.0-rc.0) (2023-06-08)
81
+
82
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
83
+
84
+
85
+
86
+
87
+
88
+ # [1.14.0](https://github.com/SAP/ui5-webcomponents/compare/v1.14.0-rc.2...v1.14.0) (2023-06-01)
89
+
90
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
91
+
92
+
93
+
94
+
95
+
96
+ # [1.14.0-rc.2](https://github.com/SAP/ui5-webcomponents/compare/v1.14.0-rc.1...v1.14.0-rc.2) (2023-06-01)
97
+
98
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
99
+
100
+
101
+
102
+
103
+
104
+ # [1.14.0-rc.1](https://github.com/SAP/ui5-webcomponents/compare/v1.14.0-rc.0...v1.14.0-rc.1) (2023-05-25)
105
+
106
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
107
+
108
+
109
+
110
+
111
+
112
+ # [1.14.0-rc.0](https://github.com/SAP/ui5-webcomponents/compare/v1.13.2...v1.14.0-rc.0) (2023-05-18)
113
+
114
+
115
+ ### Features
116
+
117
+ * users can provide a JSDoc namespeace when creating a package ([#7034](https://github.com/SAP/ui5-webcomponents/issues/7034)) ([0af8d23](https://github.com/SAP/ui5-webcomponents/commit/0af8d2376e25e5abe6d940c72286ab7c682eea56))
118
+
119
+
120
+
121
+
122
+
123
+ ## [1.13.1](https://github.com/SAP/ui5-webcomponents/compare/v1.13.0-rc.5...v1.13.1) (2023-05-11)
124
+
125
+
126
+ ### Bug Fixes
127
+
128
+ * **create-package:** revert `moduleResolution` setting to `node` ([#7020](https://github.com/SAP/ui5-webcomponents/issues/7020)) ([9fc84e2](https://github.com/SAP/ui5-webcomponents/commit/9fc84e288452616ee72f3a2b6fc31d9752f05f6f))
129
+
130
+
131
+
132
+
133
+
134
+ # [1.13.0-rc.5](https://github.com/SAP/ui5-webcomponents/compare/v1.13.0-rc.4...v1.13.0-rc.5) (2023-05-11)
135
+
136
+
137
+ ### Bug Fixes
138
+
139
+ * **create-webcomponents-package:** fix package creation issues with test and lint ([#6976](https://github.com/SAP/ui5-webcomponents/issues/6976)) ([dd70f3a](https://github.com/SAP/ui5-webcomponents/commit/dd70f3aa8ef70b592f1d4e0f3f9894c6280fb1bf))
140
+
141
+
142
+
143
+
144
+
145
+ # [1.13.0-rc.4](https://github.com/SAP/ui5-webcomponents/compare/v1.13.0-rc.3...v1.13.0-rc.4) (2023-05-04)
146
+
147
+
148
+ ### Features
149
+
150
+ * generate TS from HBS templates ([#6558](https://github.com/SAP/ui5-webcomponents/issues/6558)) ([02611b2](https://github.com/SAP/ui5-webcomponents/commit/02611b2e24b2c2a06129b8e60a8bc680d9501e39))
151
+
152
+
153
+
154
+
155
+
156
+ # [1.13.0-rc.3](https://github.com/SAP/ui5-webcomponents/compare/v1.13.0-rc.2...v1.13.0-rc.3) (2023-04-27)
157
+
158
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
159
+
160
+
161
+
162
+
163
+
164
+ # [1.13.0-rc.2](https://github.com/SAP/ui5-webcomponents/compare/v1.13.0-rc.1...v1.13.0-rc.2) (2023-04-20)
165
+
166
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
167
+
168
+
169
+
170
+
171
+
172
+ # [1.13.0-rc.1](https://github.com/SAP/ui5-webcomponents/compare/v1.13.0-rc.0...v1.13.0-rc.1) (2023-04-13)
173
+
174
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
175
+
176
+
177
+
178
+
179
+
180
+ # [1.13.0-rc.0](https://github.com/SAP/ui5-webcomponents/compare/v1.12.0...v1.13.0-rc.0) (2023-04-06)
181
+
182
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
183
+
184
+
185
+
186
+
187
+
188
+ # [1.12.0](https://github.com/SAP/ui5-webcomponents/compare/v1.12.0-rc.3...v1.12.0) (2023-04-04)
189
+
190
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
191
+
192
+
193
+
194
+
195
+
196
+ # [1.12.0-rc.3](https://github.com/SAP/ui5-webcomponents/compare/v1.12.0-rc.2...v1.12.0-rc.3) (2023-03-30)
197
+
198
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
199
+
200
+
201
+
202
+
203
+
204
+ # [1.12.0-rc.2](https://github.com/SAP/ui5-webcomponents/compare/v1.12.0-rc.1...v1.12.0-rc.2) (2023-03-23)
205
+
206
+
207
+ ### Bug Fixes
208
+
209
+ * inline sources in the .map file so the src folder is not mandatory ([#6732](https://github.com/SAP/ui5-webcomponents/issues/6732)) ([16771a6](https://github.com/SAP/ui5-webcomponents/commit/16771a64d7b13f418af9afa1a03b224fe3762775))
210
+
211
+
212
+
213
+
214
+
215
+ # [1.12.0-rc.1](https://github.com/SAP/ui5-webcomponents/compare/v1.12.0-rc.0...v1.12.0-rc.1) (2023-03-16)
216
+
217
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
218
+
219
+
220
+
221
+
222
+
223
+ # [1.12.0-rc.0](https://github.com/SAP/ui5-webcomponents/compare/v1.11.0...v1.12.0-rc.0) (2023-03-09)
224
+
225
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
226
+
227
+
228
+
229
+
230
+
231
+ # [1.11.0](https://github.com/SAP/ui5-webcomponents/compare/v1.11.0-rc.4...v1.11.0) (2023-03-06)
232
+
233
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
234
+
235
+
236
+
237
+
238
+
239
+ # [1.11.0-rc.4](https://github.com/SAP/ui5-webcomponents/compare/v1.11.0-rc.3...v1.11.0-rc.4) (2023-03-02)
240
+
241
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
242
+
243
+
244
+
245
+
246
+
247
+ # [1.11.0-rc.3](https://github.com/SAP/ui5-webcomponents/compare/v1.11.0-rc.2...v1.11.0-rc.3) (2023-02-23)
248
+
249
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
250
+
251
+
252
+
253
+
254
+
255
+ # [1.11.0-rc.2](https://github.com/SAP/ui5-webcomponents/compare/v1.11.0-rc.1...v1.11.0-rc.2) (2023-02-16)
256
+
257
+ **Note:** Version bump only for package @ui5/create-webcomponents-package
258
+
259
+
260
+
261
+
262
+
263
+ # [1.11.0-rc.1](https://github.com/SAP/ui5-webcomponents/compare/v1.11.0-rc.0...v1.11.0-rc.1) (2023-02-09)
264
+
265
+
266
+ ### Features
267
+
268
+ * **framework:** add option to define package name, tag and typescript support from CLI ([#6379](https://github.com/SAP/ui5-webcomponents/issues/6379)) ([687c0f7](https://github.com/SAP/ui5-webcomponents/commit/687c0f7a420a72f77f294ace2898223c48708ae2)), closes [#6382](https://github.com/SAP/ui5-webcomponents/issues/6382)
269
+
270
+
271
+
272
+
273
+
6
274
  # [1.11.0-rc.0](https://github.com/SAP/ui5-webcomponents/compare/v1.10.4-rc.0...v1.11.0-rc.0) (2023-02-02)
7
275
 
8
276
  **Note:** Version bump only for package @ui5/create-webcomponents-package
package/README.md CHANGED
@@ -13,13 +13,14 @@ Usage:
13
13
 
14
14
  # npm 6.x
15
15
  npm init @ui5/webcomponents-package [OPTIONS]
16
- # npm 7+, extra double-dash is needed:
16
+ # npm 7+, an extra double-dash is needed:
17
17
  npm init @ui5/webcomponents-package -- [OPTIONS]
18
18
 
19
19
  Options:
20
- --name <string> - defines package name
21
- --tag <string> - defines predefined custom element tag name
22
- --enable-typescript - enables TypeScript support to the package
20
+ --name <string> - defines the package name
21
+ --component-name <string> - defines the component class name that will be created in your new package
22
+ --tag <string> - defines the tag name of the sample web component that will be created in your new package. The tag will be derived from the component name if not provided.
23
+ --enable-typescript - enables TypeScript support for the package
23
24
  --skip - skips configuration and generates package with a default value for each parameter that wasn't passed
24
25
  ```
25
26
 
@@ -32,10 +33,11 @@ components package.
32
33
  Usage:
33
34
  yarn create @ui5/webcomponents-package [OPTIONS]
34
35
  Options:
35
- --name <string> - defines package name
36
- --tag <string> - defines predefined custom element tag name
37
- --enable-typescript - enables TypeScript support to the package
38
- --skip - skips all configurations and generates package with default configurations
36
+ --name <string> - defines the package name
37
+ --component-name <string> - defines the component class name that will be created in your new package
38
+ --tag <string> - defines the tag name of the sample web component that will be created in your new package
39
+ --enable-typescript - enables TypeScript support for the package
40
+ --skip - skips configuration and generates package with a default value for each parameter that wasn't passed
39
41
  ```
40
42
 
41
43
  The script creates a new directory, and fills it with a `package.json` file and all necessary source files, and resources for a new
package/create-package.js CHANGED
@@ -5,8 +5,8 @@ const path = require("path");
5
5
  const mkdirp = require("mkdirp");
6
6
  const prompts = require("prompts");
7
7
  const parser = require("npm-config-user-agent-parser");
8
- const yargs = require('yargs/yargs');
9
- const { hideBin } = require('yargs/helpers');
8
+ const yargs = require("yargs/yargs");
9
+ const { hideBin } = require("yargs/helpers");
10
10
 
11
11
  const argv = yargs(hideBin(process.argv)).argv;
12
12
 
@@ -16,21 +16,41 @@ const version = JSON.parse(fs.readFileSync(path.join(__dirname, "package.json"))
16
16
  const TEMPLATE_DIR = path.join(`${__dirname}`, `template/`);
17
17
 
18
18
  // String utils
19
- const capitalizeFirst = str => str.substr(0,1).toUpperCase() + str.substr(1);
20
- const kebabToCamelCase = string => toCamelCase(string.split("-"));
21
- const toCamelCase = parts => {
22
- return parts.map((string, index) => {
23
- return index === 0 ? string.toLowerCase() : string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
24
- }).join("");
19
+ const isTSRelatedFile = sourcePath => {
20
+ return ["Assets.ts", "MyFirstComponent.ts", "tsconfig.json", "global.d.ts"].some(fileName => sourcePath.includes(fileName));
21
+ };
22
+ const isJSRelatedFile = sourcePath => {
23
+ return ["Assets.js", "MyFirstComponent.js"].some(fileName => sourcePath.includes(fileName));
24
+ };
25
+ const isGitIgnore = sourcePath => {
26
+ return sourcePath.includes("gitignore");
27
+ };
28
+ const isLogo = sourcePath => {
29
+ return sourcePath.includes("logo");
30
+ };
31
+ const isNPMRC = sourcePath => {
32
+ return sourcePath.includes("npmrc");
25
33
  };
26
- const isTypescriptRelatedFile = sourcePath => {
27
- return ["Аssets.ts", "MyFirstComponent.ts", "tsconfig.json", "global.d.ts"].some(fileName => sourcePath.includes(fileName));
28
- }
29
34
 
30
35
  // Validation of user input
31
- const isNameValid = name => typeof name === "string" && name.match(/^[a-zA-Z0-9\-_]+$/);
36
+ const ComponentNamePattern = /^[A-Z][A-Za-z0-9]+$/;
37
+ const NamespacePattern = /^[a-z][a-z0-9\.\-]+$/;
38
+ const isPackageNameValid = name => typeof name === "string" && name.match(/^(@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/);
39
+ const isComponentNameValid = name => typeof name === "string" && ComponentNamePattern.test(name);
40
+ const isNamespaceValid = name => typeof name === "string" && NamespacePattern.test(name);
32
41
  const isTagValid = tag => typeof tag === "string" && tag.match(/^[a-z0-9]+?-[a-zA-Z0-9\-_]+?[a-z0-9]$/);
33
42
 
43
+ /**
44
+ * Hyphanates the given PascalCase string, f.e.:
45
+ * Foo -> "my-foo" (adds preffix)
46
+ * FooBar -> "foo-bar"
47
+ */
48
+ const hyphaneteComponentName = (componentName) => {
49
+ const result = componentName.replace(/([a-z])([A-Z])/g, '$1-$2' ).toLowerCase();
50
+
51
+ return result.includes("-") ? result : `my-${result}`;
52
+ };
53
+
34
54
  // Utils for building the file structure
35
55
  const replaceVarsInFileContent = (vars, content) => {
36
56
  for (let key in vars) {
@@ -45,17 +65,33 @@ const replaceVarsInFileName = (vars, fileName) => {
45
65
  };
46
66
 
47
67
  const copyFile = (vars, sourcePath, destPath) => {
48
- const ignoreJsRelated = vars.INIT_PACKAGE_VAR_TYPESCRIPT && sourcePath.includes("MyFirstComponent.js")
49
- const ignoreTsRelated = !vars.INIT_PACKAGE_VAR_TYPESCRIPT && isTypescriptRelatedFile(sourcePath)
68
+ const ignoreJsRelated = vars.INIT_PACKAGE_VAR_TYPESCRIPT && isJSRelatedFile(sourcePath);
69
+ const ignoreTsRelated = !vars.INIT_PACKAGE_VAR_TYPESCRIPT && isTSRelatedFile(sourcePath);
50
70
 
51
71
  if (ignoreJsRelated || ignoreTsRelated) {
52
72
  return;
53
73
  }
54
74
 
55
- let content = fs.readFileSync(sourcePath, {encoding: "UTF-8"});
75
+ if (isLogo(sourcePath)) {
76
+ fs.copyFileSync(sourcePath, destPath);
77
+ return;
78
+ }
79
+
80
+ let content = fs.readFileSync(sourcePath, { encoding: "UTF-8" });
56
81
  content = replaceVarsInFileContent(vars, content);
57
82
  destPath = replaceVarsInFileName(vars, destPath);
83
+
58
84
  fs.writeFileSync(destPath, content);
85
+
86
+ // Rename "gitignore" to ".gitignore" (npm init won't include ".gitignore", so we add it as "gitignore" and rename it later)
87
+ if (isGitIgnore(sourcePath)) {
88
+ fs.renameSync(destPath, destPath.replace("gitignore", ".gitignore"))
89
+ }
90
+
91
+ // Rename "npmrc" to ".npmrc" (npm init won't include ".npmrc", so we add it as "npmrc" and rename it later)
92
+ if (isNPMRC(sourcePath)) {
93
+ fs.renameSync(destPath, destPath.replace("npmrc", ".npmrc"));
94
+ }
59
95
  };
60
96
 
61
97
  const copyFiles = (vars, sourcePath, destPath) => {
@@ -72,20 +108,20 @@ const copyFiles = (vars, sourcePath, destPath) => {
72
108
  }
73
109
  };
74
110
 
75
-
76
- const generateFilesContent = (name, tag, typescript) => {
77
- const className = capitalizeFirst(kebabToCamelCase(tag));
111
+ const generateFilesContent = (packageName, componentName, namespace, typescript, skipSubfolder) => {
112
+ const tagName = argv.tag || hyphaneteComponentName(componentName);
78
113
 
79
114
  // All variables that will be replaced in the content of the resources/
80
115
  const vars = {
81
- INIT_PACKAGE_VAR_NAME: name,
82
- INIT_PACKAGE_VAR_TAG: tag,
83
- INIT_PACKAGE_VAR_CLASS_NAME: className,
84
- INIT_PACKAGE_VAR_TYPESCRIPT: typescript
116
+ INIT_PACKAGE_VAR_NAMESPACE: namespace, // namespace must be replaced before name
117
+ INIT_PACKAGE_VAR_NAME: packageName,
118
+ INIT_PACKAGE_VAR_TAG: tagName,
119
+ INIT_PACKAGE_VAR_CLASS_NAME: componentName,
120
+ INIT_PACKAGE_VAR_TYPESCRIPT: typescript,
85
121
  };
86
122
 
87
123
  const packageContent = {
88
- name,
124
+ name: packageName,
89
125
  version: "0.0.1",
90
126
  ui5: {
91
127
  webComponentsPackage: true,
@@ -117,15 +153,21 @@ const generateFilesContent = (name, tag, typescript) => {
117
153
  },
118
154
  };
119
155
 
156
+ if (typescript) {
157
+ packageContent.devDependencies.typescript = "^4.9.4";
158
+ }
159
+
120
160
  // Update package.json
121
- const destDir = path.join(`./`, name);
161
+ let destDir = packageName.includes("@") ? packageName.slice(packageName.lastIndexOf("/") + 1) : packageName;
162
+
163
+ destDir = skipSubfolder ? path.join("./") : path.join("./", destDir);
122
164
  mkdirp.sync(destDir);
123
165
  fs.writeFileSync(path.join(destDir, "package.json"), JSON.stringify(packageContent, null, 2));
124
166
  // Copy files
125
167
  copyFiles(vars, TEMPLATE_DIR, destDir);
126
168
 
127
169
  console.log("\nPackage successfully created!\nNext steps:\n");
128
- console.log(`$ cd ${name}`);
170
+ console.log(`$ cd ${destDir}`);
129
171
 
130
172
  let userAgentInfo;
131
173
  try {
@@ -141,25 +183,35 @@ const generateFilesContent = (name, tag, typescript) => {
141
183
  }
142
184
 
143
185
  console.log("\n");
144
- }
186
+ };
145
187
 
146
188
  // Main function
147
189
  const createWebcomponentsPackage = async () => {
148
190
  let response;
149
- if (argv.name && !isNameValid(argv.name)) {
150
- throw new Error("The package name should be a string (a-z, A-Z, 0-9).");
191
+ if (argv.name && !isPackageNameValid(argv.name)) {
192
+ throw new Error("The package name should be a string, starting with letter and containing the following symbols [a-z, A-Z, 0-9].");
193
+ }
194
+
195
+ if (argv.componentName && !isComponentNameValid(argv.componentName)) {
196
+ throw new Error("The component name should be a string, starting with a capital letter [A-Z][a-z], for example: Button, MyButton, etc.");
197
+ }
198
+
199
+ if (argv.namespace && !isNamespaceValid(argv.namespace)) {
200
+ throw new Error("The JSDoc namespace must start with a letter and can only contain small-case letters, numbers, dots and dashes.");
151
201
  }
152
202
 
153
203
  if (argv.tag && !isTagValid(argv.tag) ) {
154
- throw new Error("The tag should be in kebab-case (my-first-component f.e) and it can't be a single word.");
204
+ throw new Error("The tag should be in kebab-case (f.e my-component) and it can't be a single word.");
155
205
  }
156
206
 
157
- let name = argv.name || "my-package";
158
- let tag = argv.tag || "my-first-component";
207
+ let packageName = argv.name || "my-package";
208
+ let componentName = argv.componentName || "MyComponent";
209
+ let namespace = argv.namespace || "demo.components";
159
210
  let typescriptSupport = !!argv.enableTypescript;
211
+ const skipSubfolder = !!argv.skipSubfolder;
160
212
 
161
- if (!!argv.skip) {
162
- return generateFilesContent(name, tag, typescriptSupport);
213
+ if (argv.skip) {
214
+ return generateFilesContent(packageName, componentName, namespace, typescriptSupport, skipSubfolder);
163
215
  }
164
216
 
165
217
  if (!argv.name) {
@@ -167,9 +219,9 @@ const createWebcomponentsPackage = async () => {
167
219
  type: "text",
168
220
  name: "name",
169
221
  message: "Package name:",
170
- validate: isNameValid,
222
+ validate: (value) => isPackageNameValid(value) ? true : "Package name should be a string, starting with a letter and containing the following symbols [a-z, A-Z ,0-9, _, -].",
171
223
  });
172
- name = response.name;
224
+ packageName = response.name;
173
225
  }
174
226
 
175
227
  if (!typescriptSupport) {
@@ -186,23 +238,34 @@ const createWebcomponentsPackage = async () => {
186
238
  title: "TypeScript",
187
239
  value: true,
188
240
  },
189
- ]
241
+ ],
190
242
  });
191
- typescript = response.language;
243
+ typescriptSupport = response.language;
192
244
  }
193
245
 
194
- if (!argv.tag) {
246
+ if (!argv.componentName) {
195
247
  response = await prompts({
196
248
  type: "text",
197
- name: "tag",
249
+ name: "componentName",
198
250
  message: "Component name:",
199
- initial: "my-first-component",
200
- validate: isTagValid,
251
+ initial: "MyComponent",
252
+ validate: (value) => isComponentNameValid(value) ? true : "Component name should follow PascalCase naming convention (f.e. Button, MyButton, etc.).",
253
+ });
254
+ componentName = response.componentName;
255
+ }
256
+
257
+ if (!argv.namespace) {
258
+ response = await prompts({
259
+ type: "text",
260
+ name: "namespace",
261
+ message: "JSDoc namespace:",
262
+ initial: "demo.components",
263
+ validate: (value) => isNamespaceValid(value) ? true : "The JSDoc namespace must start with a letter and can only contain small-case letters, numbers, dots and dashes.",
201
264
  });
202
- tag = response.tag;
265
+ namespace = response.namespace;
203
266
  }
204
267
 
205
- return generateFilesContent(name, tag, typescript);
268
+ return generateFilesContent(packageName, componentName, namespace, typescriptSupport, skipSubfolder);
206
269
  };
207
270
 
208
271
  createWebcomponentsPackage();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ui5/create-webcomponents-package",
3
- "version": "0.0.0-2f7664755",
3
+ "version": "0.0.0-33967dd12",
4
4
  "description": "UI5 Web Components: create package",
5
5
  "author": "SAP SE (https://www.sap.com)",
6
6
  "license": "Apache-2.0",
@@ -2,4 +2,5 @@
2
2
  dist
3
3
  test
4
4
  src/generated
5
- jsdoc-dist
5
+ jsdoc-dist
6
+ .eslintrc.js
@@ -0,0 +1,5 @@
1
+ const config = require("@ui5/webcomponents-tools/components-package/eslint.js");
2
+
3
+ // This eslint config is defined @ui5/webcomponents-tools,
4
+ // Feel free to override part of the configuration or provide entirely new config to fit your dev requirements.
5
+ module.exports = config;
@@ -0,0 +1,4 @@
1
+ node_modules
2
+ dist
3
+ jsdoc-dist
4
+ src/generated
package/template/npmrc ADDED
@@ -0,0 +1,2 @@
1
+ # Auto detect the chromedriver version
2
+ detect_chromedriver_version=true
@@ -1 +1 @@
1
- <div>This is: INIT_PACKAGE_VAR_TAG. {{pleaseWaitText}}</div>
1
+ <div @click="{{onClick}}">{{counterText}} :: {{count}}</div>
@@ -1,6 +1,7 @@
1
1
  import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
2
  import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
3
3
  import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
4
+ import Integer from "@ui5/webcomponents-base/dist/types/Integer.js";
4
5
 
5
6
  // Template
6
7
  import INIT_PACKAGE_VAR_CLASS_NAMETemplate from "./generated/templates/INIT_PACKAGE_VAR_CLASS_NAMETemplate.lit.js";
@@ -8,14 +9,24 @@ import INIT_PACKAGE_VAR_CLASS_NAMETemplate from "./generated/templates/INIT_PACK
8
9
  // Styles
9
10
  import INIT_PACKAGE_VAR_CLASS_NAMECss from "./generated/themes/INIT_PACKAGE_VAR_CLASS_NAME.css.js";
10
11
 
11
- import { PLEASE_WAIT } from "./generated/i18n/i18n-defaults.js";
12
+ import { COUNT } from "./generated/i18n/i18n-defaults.js";
12
13
 
13
14
  /**
14
15
  * @public
15
16
  */
16
17
  const metadata = {
17
18
  tag: "INIT_PACKAGE_VAR_TAG",
18
- properties: {
19
+ properties: /** @lends INIT_PACKAGE_VAR_NAMESPACE.INIT_PACKAGE_VAR_CLASS_NAME.prototype */ {
20
+ /**
21
+ * Defines the count of the component.
22
+ * @type { sap.ui.webc.base.types.Integer }
23
+ * @defaultvalue 0
24
+ * @public
25
+ */
26
+ count: {
27
+ type: Integer,
28
+ defaultValue: 0,
29
+ },
19
30
  },
20
31
  slots: {
21
32
  },
@@ -31,7 +42,7 @@ const metadata = {
31
42
  * The <code>INIT_PACKAGE_VAR_TAG</code> component is a demo component that displays some text.
32
43
  *
33
44
  * @constructor
34
- * @alias demo.components.INIT_PACKAGE_VAR_CLASS_NAME
45
+ * @alias INIT_PACKAGE_VAR_NAMESPACE.INIT_PACKAGE_VAR_CLASS_NAME
35
46
  * @extends sap.ui.webc.base.UI5Element
36
47
  * @tagname INIT_PACKAGE_VAR_TAG
37
48
  * @public
@@ -57,8 +68,12 @@ class INIT_PACKAGE_VAR_CLASS_NAME extends UI5Element {
57
68
  INIT_PACKAGE_VAR_CLASS_NAME.i18nBundle = await getI18nBundle("INIT_PACKAGE_VAR_NAME");
58
69
  }
59
70
 
60
- get pleaseWaitText() {
61
- return INIT_PACKAGE_VAR_CLASS_NAME.i18nBundle.getText(PLEASE_WAIT);
71
+ onClick() {
72
+ this.count++;
73
+ }
74
+
75
+ get counterText() {
76
+ return INIT_PACKAGE_VAR_CLASS_NAME.i18nBundle.getText(COUNT);
62
77
  }
63
78
  }
64
79
 
@@ -1,8 +1,10 @@
1
1
  import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
2
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
3
+ import property from "@ui5/webcomponents-base/dist/decorators/property.js";
3
4
  import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
4
5
  import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
5
6
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
7
+ import Integer from "@ui5/webcomponents-base/dist/types/Integer.js";
6
8
 
7
9
  // Template
8
10
  import INIT_PACKAGE_VAR_CLASS_NAMETemplate from "./generated/templates/INIT_PACKAGE_VAR_CLASS_NAMETemplate.lit.js";
@@ -10,7 +12,7 @@ import INIT_PACKAGE_VAR_CLASS_NAMETemplate from "./generated/templates/INIT_PACK
10
12
  // Styles
11
13
  import INIT_PACKAGE_VAR_CLASS_NAMECss from "./generated/themes/INIT_PACKAGE_VAR_CLASS_NAME.css.js";
12
14
 
13
- import { PLEASE_WAIT } from "./generated/i18n/i18n-defaults.js";
15
+ import { COUNT } from "./generated/i18n/i18n-defaults.js";
14
16
 
15
17
  /**
16
18
  * @class
@@ -20,33 +22,39 @@ import { PLEASE_WAIT } from "./generated/i18n/i18n-defaults.js";
20
22
  * The <code>INIT_PACKAGE_VAR_TAG</code> component is a demo component that displays some text.
21
23
  *
22
24
  * @constructor
23
- * @alias demo.components.INIT_PACKAGE_VAR_CLASS_NAME
25
+ * @alias INIT_PACKAGE_VAR_NAMESPACE.INIT_PACKAGE_VAR_CLASS_NAME
24
26
  * @extends sap.ui.webc.base.UI5Element
25
27
  * @tagname INIT_PACKAGE_VAR_TAG
26
28
  * @public
27
29
  */
28
- @customElement("INIT_PACKAGE_VAR_TAG")
30
+ @customElement({
31
+ tag: "INIT_PACKAGE_VAR_TAG",
32
+ renderer: litRender,
33
+ styles: INIT_PACKAGE_VAR_CLASS_NAMECss,
34
+ template: INIT_PACKAGE_VAR_CLASS_NAMETemplate,
35
+ })
29
36
  class INIT_PACKAGE_VAR_CLASS_NAME extends UI5Element {
30
37
  static i18nBundle: I18nBundle;
31
38
 
32
- static get render() {
33
- return litRender;
34
- }
35
-
36
- static get template() {
37
- return INIT_PACKAGE_VAR_CLASS_NAMETemplate;
38
- }
39
-
40
- static get styles() {
41
- return INIT_PACKAGE_VAR_CLASS_NAMECss;
42
- }
43
-
44
39
  static async onDefine() {
45
40
  INIT_PACKAGE_VAR_CLASS_NAME.i18nBundle = await getI18nBundle("INIT_PACKAGE_VAR_NAME");
46
41
  }
47
42
 
48
- get pleaseWaitText() {
49
- return INIT_PACKAGE_VAR_CLASS_NAME.i18nBundle.getText(PLEASE_WAIT);
43
+ /**
44
+ * Defines the component count.
45
+ * @name INIT_PACKAGE_VAR_NAMESPACE.INIT_PACKAGE_VAR_CLASS_NAME.prototype.count
46
+ * @public
47
+ * @type { sap.ui.webc.base.types.Integer }
48
+ */
49
+ @property({ validator: Integer, defaultValue: 0 })
50
+ count!: number;
51
+
52
+ onClick() {
53
+ this.count++;
54
+ }
55
+
56
+ get counterText() {
57
+ return INIT_PACKAGE_VAR_CLASS_NAME.i18nBundle.getText(COUNT);
50
58
  }
51
59
  }
52
60
 
@@ -1,2 +1,3 @@
1
- #please wait text for the sample component
2
- PLEASE_WAIT=wait
1
+ # the "counter" text for the sample component
2
+ COUNT=Count
3
+
@@ -1 +1 @@
1
- PLEASE_WAIT=Bitte warten
1
+ COUNT=Zählung
@@ -1 +1 @@
1
- PLEASE_WAIT=Please wait
1
+ COUNT=Count
@@ -1 +1 @@
1
- PLEASE_WAIT=Espere
1
+ COUNT=Cuenta
@@ -1 +1 @@
1
- PLEASE_WAIT=Patientez.
1
+ COUNT=Comte
@@ -1,11 +1,16 @@
1
1
  :host {
2
- border: 2px solid var(--my-component-border-color);
3
- background-color: var(--sapBackgroundColor);
4
- color: var(--sapTextColor);
5
- display: block;
6
- width: 24rem;
7
- height: 3rem;
8
- text-align: center;
9
- vertical-align: middle;
10
- line-height: 3rem;
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ flex-direction: column;
6
+ padding: 0 2rem;
7
+ color: var(--sapAvatar_6_TextColor);
8
+ background-color: var(--sapAvatar_6_Background);
9
+ border: 2px solid var(--my-component-border-color);
10
+ border-radius: 0.5rem;
11
+ box-shadow: var(--sapContent_Shadow0);
12
+ text-align: center;
13
+ line-height: 3rem;
14
+ font-size: 1.25rem;
15
+ user-select: none;
11
16
  }
@@ -1,3 +1,3 @@
1
1
  :root {
2
- --my-component-border-color: green;
2
+ --my-component-border-color: blue;
3
3
  }
@@ -0,0 +1,3 @@
1
+ :root {
2
+ --my-component-border-color: darkblue;
3
+ }
@@ -0,0 +1,3 @@
1
+ :root {
2
+ --my-component-border-color: white;
3
+ }
@@ -0,0 +1,36 @@
1
+ body {
2
+ color: var(--sapTextColor);
3
+ background-color: var(--sapBackgroundColor);
4
+ font-size: var(--sapFontSize);
5
+ font-family: var(--sapFontFamily);
6
+ }
7
+
8
+ h1 {
9
+ font-size: var(--sapFontHeader2Size);
10
+ margin-bottom: 0.5rem;
11
+ }
12
+
13
+ h2 {
14
+ font-size: var(--sapFontHeader3Size);
15
+ margin-bottom: 0.5rem;
16
+ }
17
+
18
+ .app, .app-settings, .app-docs, .app-first-component {
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ flex-direction: column;
23
+ }
24
+
25
+ .app-first-component {
26
+ margin-bottom: 3rem;
27
+ }
28
+
29
+ .app-docs {
30
+ margin-top: 3rem;
31
+ }
32
+
33
+ a {
34
+ margin: 0.25rem;
35
+ color: var(--sapLinkColor);
36
+ }
Binary file
@@ -10,43 +10,48 @@
10
10
 
11
11
  <script data-ui5-config type="application/json">
12
12
  {
13
+ "theme": "sap_horizon_dark",
13
14
  "language": "EN"
14
15
  }
15
16
  </script>
16
17
 
18
+ <link rel="stylesheet" type="text/css" href="./css/index.css">
17
19
  <script src="../../bundle.esm.js" type="module"></script>
18
-
19
- <style>
20
- code { color: blue; font-size: small; }
21
- </style>
22
-
23
20
  </head>
24
21
 
25
22
  <body>
26
- <ul>
27
- <li><a href="?sap-ui-theme=sap_fiori_3">Fiori 3</a></li>
28
- <li><a href="?sap-ui-theme=sap_fiori_3_dark">Fiori 3 Dark</a></li>
29
- <li><a href="?sap-ui-theme=sap_fiori_3_hcb">Fiori 3 High Contrast Black</a></li>
30
- <li><a href="?sap-ui-theme=sap_fiori_3_hcw">Fiori 3 High Contrast White</a></li>
31
- <li><a href="?sap-ui-theme=sap_belize">Belize</a></li>
32
- <li><a href="?sap-ui-theme=sap_belize_hcb">Belize High Contrast Black</a></li>
33
- <li><a href="?sap-ui-theme=sap_belize_hcw">Belize High Contrast White</a></li>
34
- </ul>
35
- <br>
36
- <span>or in the browser console, for example:</span>
37
- <code>window['sap-ui-webcomponents-bundle'].configuration.setTheme("sap_belize_hcb")</code>
38
-
39
- <br><br>
40
-
41
- <a href="?sap-ui-language=en">English</a> |
42
- <a href="?sap-ui-language=de">German</a> |
43
- <a href="?sap-ui-language=es">Spanish</a> |
44
- <a href="?sap-ui-language=fr">French</a>
45
-
46
- <br><br>
47
-
48
- <h1>Test your web components here</h1>
49
- <INIT_PACKAGE_VAR_TAG id="myFirstComponent"></INIT_PACKAGE_VAR_TAG>
23
+ <div class="app">
24
+ <a href="https://sap.github.io/ui5-webcomponents/playground/?path=/docs/docs-getting-started-first-steps--docs" target="_blank"><img src="./img/logo.png" alt="logo"/></a>
25
+
26
+ <div class="app-first-component">
27
+ <h1>Hooray! It's Your First Web Component!</h1>
28
+ <div> <pre>&lt;INIT_PACKAGE_VAR_TAG>&lt;/INIT_PACKAGE_VAR_TAG> </pre></div>
29
+ <INIT_PACKAGE_VAR_TAG id="myFirstComponent"></INIT_PACKAGE_VAR_TAG>
30
+ </div>
31
+
32
+ <div class="app-settings">
33
+
34
+ <h2>Switch themes</h2>
35
+ <div style="display: flex; flex-direction: row;">
36
+ <a class="link" href="?sap-ui-theme=sap_horizon">Horizon</a>
37
+ <a class="link" href="?sap-ui-theme=sap_horizon_dark">Horizon Dark</a>
38
+ <a class="link" href="?sap-ui-theme=sap_horizon_hcb">Horizon High Contrast Black</a>
39
+ <a class="link" href="?sap-ui-theme=sap_horizon_hcw">Horizon High Contrast White</a>
40
+ </div>
41
+
42
+ <h2>Switch language</h2>
43
+ <div>
44
+ <a class="link" href="?sap-ui-language=en">English</a>
45
+ <a class="link" href="?sap-ui-language=de">German</a>
46
+ <a class="link" href="?sap-ui-language=es">Spanish</a>
47
+ <a class="link" href="?sap-ui-language=fr">French</a>
48
+ </div>
49
+ </div>
50
+
51
+ <div class="app-docs">
52
+ <h2>Documentation</h2>
53
+ <a class="link" href="https://sap.github.io/ui5-webcomponents/playground/?path=/docs/docs-development-custom-ui5-web-components-packages--docs">Custom Component Development</a>
54
+ </div>
55
+ </div>
50
56
  </body>
51
-
52
57
  </html>
@@ -1,10 +1,11 @@
1
1
  const assert = require("assert");
2
2
 
3
3
  describe("INIT_PACKAGE_VAR_TAG rendering", async () => {
4
- await browser.url("test/pages/index.html");
4
+ before(async () => {
5
+ await browser.url("test/pages/index.html");
6
+ });
5
7
 
6
8
  it("tests if web component is correctly rendered", async () => {
7
-
8
9
  const innerContent = await browser.$("#myFirstComponent").shadow$("div");
9
10
 
10
11
  assert.ok(innerContent, "content rendered");
@@ -7,6 +7,7 @@
7
7
  "outDir": "dist",
8
8
  "skipLibCheck": true,
9
9
  "sourceMap": true,
10
+ "inlineSources": true,
10
11
  "strict": true,
11
12
  "moduleResolution": "node",
12
13
  "experimentalDecorators": true,
@@ -1,12 +0,0 @@
1
- // eslint-disable-next-line
2
- import "@ui5/webcomponents-base/dist/global";
3
- import { TemplateFunction } from "@ui5/webcomponents-base/dist/renderer/executeTemplate.js";
4
-
5
- export {};
6
-
7
- declare global {
8
- module "*.lit.js" {
9
- const content: TemplateFunction;
10
- export default content;
11
- }
12
- }
@@ -1,3 +0,0 @@
1
- :root {
2
- --my-component-border-color: black;
3
- }
@@ -1,3 +0,0 @@
1
- :root {
2
- --my-component-border-color: blue;
3
- }
@@ -1,3 +0,0 @@
1
- :root {
2
- --my-component-border-color: lightblue;
3
- }
@@ -1,3 +0,0 @@
1
- :root {
2
- --my-component-border-color: gray;
3
- }