@ui5/webcomponents-tools 0.0.0-918b4fbe7 → 0.0.0-9261ac932

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 (69) hide show
  1. package/CHANGELOG.md +1305 -0
  2. package/README.md +3 -5
  3. package/assets-meta.js +15 -10
  4. package/components-package/cypress/support/commands.js +39 -0
  5. package/components-package/cypress/support/component-index.html +17 -0
  6. package/components-package/cypress/support/component.d.ts +23 -0
  7. package/components-package/cypress/support/component.js +34 -0
  8. package/components-package/cypress.config.js +19 -0
  9. package/components-package/eslint.js +61 -15
  10. package/components-package/nps.js +68 -49
  11. package/components-package/postcss.components.js +1 -21
  12. package/components-package/postcss.themes.js +1 -26
  13. package/components-package/vite.config.js +6 -5
  14. package/components-package/wdio.js +42 -13
  15. package/icons-collection/nps.js +13 -8
  16. package/lib/amd-to-es6/index.js +102 -0
  17. package/lib/amd-to-es6/no-remaining-require.js +33 -0
  18. package/lib/cem/custom-elements-manifest.config.mjs +527 -0
  19. package/lib/cem/event.mjs +148 -0
  20. package/lib/cem/schema-internal.json +1413 -0
  21. package/lib/cem/schema.json +1098 -0
  22. package/lib/cem/types-internal.d.ts +808 -0
  23. package/lib/cem/types.d.ts +736 -0
  24. package/lib/cem/utils.mjs +398 -0
  25. package/lib/cem/validate.js +70 -0
  26. package/lib/copy-list/index.js +2 -2
  27. package/lib/create-icons/index.js +38 -13
  28. package/lib/create-illustrations/index.js +51 -30
  29. package/lib/create-new-component/index.js +59 -101
  30. package/lib/create-new-component/tsFileContentTemplate.js +71 -0
  31. package/lib/css-processors/css-processor-components.mjs +77 -0
  32. package/lib/css-processors/css-processor-themes.mjs +79 -0
  33. package/lib/css-processors/scope-variables.mjs +49 -0
  34. package/lib/css-processors/shared.mjs +76 -0
  35. package/lib/dev-server/custom-hot-update-plugin.js +39 -0
  36. package/lib/dev-server/{dev-server.js → dev-server.mjs} +4 -4
  37. package/lib/dev-server/virtual-index-html-plugin.js +2 -2
  38. package/lib/generate-js-imports/illustrations.js +78 -64
  39. package/lib/generate-json-imports/i18n.js +45 -61
  40. package/lib/generate-json-imports/themes.js +16 -33
  41. package/lib/hbs2lit/src/compiler.js +9 -6
  42. package/lib/hbs2lit/src/litVisitor2.js +42 -17
  43. package/lib/hbs2lit/src/svgProcessor.js +12 -5
  44. package/lib/hbs2ui5/RenderTemplates/LitRenderer.js +32 -4
  45. package/lib/hbs2ui5/index.js +23 -6
  46. package/lib/i18n/defaults.js +11 -3
  47. package/lib/i18n/toJSON.js +1 -1
  48. package/lib/postcss-combine-duplicated-selectors/index.js +12 -5
  49. package/lib/remove-dev-mode/remove-dev-mode.mjs +37 -0
  50. package/lib/scoping/get-all-tags.js +10 -3
  51. package/lib/scoping/lint-src.js +8 -7
  52. package/lib/scoping/scope-test-pages.js +2 -1
  53. package/lib/test-runner/test-runner.js +10 -2
  54. package/package.json +26 -12
  55. package/tsconfig.json +16 -0
  56. package/types/index.d.ts +1 -0
  57. package/components-package/wdio.sync.js +0 -360
  58. package/lib/esm-abs-to-rel/index.js +0 -58
  59. package/lib/generate-custom-elements-manifest/index.js +0 -369
  60. package/lib/jsdoc/config.json +0 -29
  61. package/lib/jsdoc/configTypescript.json +0 -29
  62. package/lib/jsdoc/plugin.js +0 -2468
  63. package/lib/jsdoc/preprocess.js +0 -60
  64. package/lib/jsdoc/template/publish.js +0 -4120
  65. package/lib/postcss-css-to-esm/index.js +0 -57
  66. package/lib/postcss-css-to-json/index.js +0 -47
  67. package/lib/postcss-new-files/index.js +0 -36
  68. package/lib/postcss-p/postcss-p.mjs +0 -14
  69. package/lib/replace-global-core/index.js +0 -25
@@ -1,369 +0,0 @@
1
- const fs = require("fs").promises;
2
- // https://github.com/webcomponents/custom-elements-manifest/blob/main/schema.json
3
-
4
- const camelToKebabMap = new Map();
5
- const apiIndex = new Map();
6
- const processedApiIndex = new Set();
7
- const forbiddenAttributeTypes = ["object", "array"];
8
-
9
- const camelToKebabCase = string => {
10
- if (!camelToKebabMap.has(string)) {
11
- const result = string.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
12
- camelToKebabMap.set(string, result);
13
- }
14
- return camelToKebabMap.get(string);
15
- };
16
-
17
- const generateJavaScriptExport = entity => {
18
- return {
19
- declaration: generateRefenrece(entity),
20
- deprecated: !!entity.deprecated,
21
- kind: "js",
22
- name: "default",
23
- };
24
- };
25
-
26
- const generateCustomElementExport = entity => {
27
- return {
28
- declaration: {
29
- name: entity.basename,
30
- module: `${entity.module}.js`,
31
- },
32
- deprecated: !!entity.deprecated,
33
- kind: "custom-element-definition",
34
- name: entity.tagname,
35
- };
36
- };
37
-
38
- const generateJavaScriptModule = entity => {
39
- return {
40
- kind: "javascript-module",
41
- path: `${entity.basename}.js`,
42
- declarations: [
43
- generateCustomElementDeclaration(entity),
44
- ],
45
- exports: [
46
- generateJavaScriptExport(entity),
47
- generateCustomElementExport(entity),
48
- ],
49
- };
50
- };
51
-
52
- const generateSingleClassField = classField => {
53
- let generatedClassField = {
54
- deprecated: !!classField.deprecated,
55
- kind: "field",
56
- name: classField.name,
57
- privacy: classField.visibility,
58
- static: !!classField.static,
59
- type: generateType(classField.type),
60
- };
61
-
62
- if (classField.defaultValue) {
63
- generatedClassField.default = classField.defaultValue;
64
- }
65
-
66
- if (classField.description) {
67
- generatedClassField.description = classField.description;
68
- }
69
-
70
- return generatedClassField;
71
- };
72
-
73
- const generateSingleParameter = parameter => {
74
- let generatedParameter = {
75
- deprecated: !!parameter.deprecated,
76
- name: parameter.name,
77
- type: generateType(parameter.type),
78
- };
79
-
80
- if (parameter.description) {
81
- generatedParameter.description = parameter.description;
82
- }
83
-
84
- if (parameter.optional) {
85
- generatedParameter.optional = parameter.optional;
86
- }
87
-
88
- return generatedParameter;
89
- };
90
-
91
- const generateParameters = (parameters) => {
92
- return parameters.reduce((newParametersArray, parameter) => {
93
- newParametersArray.push(generateSingleParameter(parameter));
94
-
95
- return newParametersArray;
96
- }, []);
97
- };
98
-
99
- const generateSingleClassMethod = classMethod => {
100
- let generatedClassMethod = {
101
- deprecated: !!classMethod.deprecated,
102
- kind: "method",
103
- name: classMethod.name,
104
- privacy: classMethod.visibility,
105
- static: classMethod.static,
106
- };
107
-
108
- if (classMethod.description) {
109
- generatedClassMethod.description = classMethod.description;
110
- }
111
-
112
- if (classMethod.parameters && classMethod.parameters.length) {
113
- generatedClassMethod.parameters = generateParameters(classMethod.parameters);
114
- }
115
-
116
- if (classMethod.returnValue) {
117
- generatedClassMethod.return = {
118
- type: generateType(classMethod.returnValue.type),
119
- };
120
-
121
- if (classMethod.returnValue.description) {
122
- generatedClassMethod.return.description = classMethod.returnValue.type;
123
- }
124
- }
125
-
126
- return generatedClassMethod;
127
- };
128
-
129
- const generateClassFields = classFields => {
130
- return classFields.reduce((newClassFieldsArray, classField) => {
131
- newClassFieldsArray.push(generateSingleClassField(classField));
132
-
133
- return newClassFieldsArray;
134
- }, []);
135
- };
136
-
137
- const generateClassMethods = classMethods => {
138
- return classMethods.reduce((newClassMethodsArray, classMethod) => {
139
- newClassMethodsArray.push(generateSingleClassMethod(classMethod));
140
-
141
- return newClassMethodsArray;
142
- }, []);
143
- };
144
-
145
- const generateMembers = (classFields, classMethods) => {
146
- return [...generateClassFields(classFields), ...generateClassMethods(classMethods)];
147
- };
148
-
149
- const generateType = type => {
150
- const dataType = apiIndex.get(type);
151
-
152
- return {
153
- text: dataType && dataType.name.includes(".types.") ?
154
- filterPublicApi(dataType.properties)
155
- .map(prop => `"${prop.name}"`)
156
- .join(" | ") : type,
157
- };
158
- };
159
-
160
- const generateSingleAttribute = attribute => {
161
- let generatedAttribute = {
162
- default: attribute.defaultValue,
163
- deprecated: !!attribute.deprecated,
164
- fieldName: attribute.name,
165
- name: camelToKebabCase(attribute.name),
166
- type: generateType(attribute.type),
167
- };
168
-
169
- if (attribute.description) {
170
- generatedAttribute.description = attribute.description;
171
- }
172
-
173
- return generatedAttribute;
174
- };
175
-
176
- const generateAttributes = attributes => {
177
- attributes = attributes.reduce((newAttributesArray, attribute) => {
178
- newAttributesArray.push(generateSingleAttribute(attribute));
179
-
180
- return newAttributesArray;
181
- }, []);
182
-
183
- return attributes;
184
- };
185
-
186
- const generateSingleEvent = event => {
187
- let generatedEvent = {
188
- deprecated: !!event.deprecated,
189
- name: event.name,
190
- type: event.native === "true" ? "NativeEvent" : "CustomEvent",
191
- };
192
-
193
- if (event.description) {
194
- generatedEvent.description = event.description;
195
- }
196
-
197
- return generatedEvent;
198
- };
199
-
200
- const generateEvents = events => {
201
- events = events.reduce((newEventsArray, event) => {
202
- newEventsArray.push(generateSingleEvent(event));
203
-
204
- return newEventsArray;
205
- }, []);
206
-
207
- return events;
208
- };
209
-
210
- const generateSingleSlot = slot => {
211
- return {
212
- deprecated: !!slot.deprecated,
213
- description: slot.description,
214
- name: slot.name,
215
- };
216
- };
217
-
218
- const generateSlots = slots => {
219
- slots = slots.reduce((newSlotsArray, event) => {
220
- newSlotsArray.push(generateSingleSlot(event));
221
-
222
- return newSlotsArray;
223
- }, []);
224
-
225
- return slots;
226
- };
227
-
228
- const generateCustomElementDeclaration = entity => {
229
- entity = generateFullComponentApi(entity);
230
-
231
- let generatedCustomElementDeclaration = {
232
- deprecated: !!entity.deprecated,
233
- customElement: true,
234
- kind: entity.basename,
235
- name: entity.basename,
236
- tagName: entity.tagname,
237
- };
238
-
239
- const slots = filterPublicApi(entity.slots);
240
- const events = filterPublicApi(entity.events);
241
- const classFields = filterPublicApi(entity.properties);
242
- const classMethods = filterPublicApi(entity.methods);
243
- const attributes = classFields.filter(property => {
244
- return property.noattribute !== "true" && property.readonly !== "true" && !forbiddenAttributeTypes.includes(property.type.toLowerCase());
245
- });
246
-
247
- if (slots.length) {
248
- generatedCustomElementDeclaration.slots = generateSlots(slots);
249
- }
250
-
251
- if (events.length) {
252
- generatedCustomElementDeclaration.events = generateEvents(events);
253
- }
254
-
255
- if (attributes.length) {
256
- generatedCustomElementDeclaration.attributes = generateAttributes(attributes);
257
- }
258
-
259
- if (entity.description) {
260
- generatedCustomElementDeclaration.description = entity.description;
261
- }
262
-
263
- if (classFields.length || classMethods.length) {
264
- generatedCustomElementDeclaration.members = generateMembers(classFields, classMethods);
265
- }
266
-
267
- if (entity.extends && entity.extends !== "HTMLElement") {
268
- generatedCustomElementDeclaration.superclass = generateRefenrece(apiIndex.get(entity.extends));
269
- }
270
-
271
- return generatedCustomElementDeclaration;
272
- };
273
-
274
- const generateRefenrece = (entity) => {
275
- let packageName;
276
-
277
- if (entity.name.includes("sap.ui.webcomponents.main")) {
278
- packageName = "@ui5/webcomponents";
279
- } else if (entity.name.includes("sap.ui.webcomponents.fiori")) {
280
- packageName = "@ui5/webcomponents-fiori";
281
- } else if (entity.name.includes("sap.ui.webcomponents.base")) {
282
- packageName = "@ui5/webcomponents-base";
283
- }
284
-
285
- return {
286
- module: `${entity.module}.js`,
287
- name: `${entity.basename}`,
288
- package: packageName,
289
- };
290
- };
291
-
292
- const generateFullComponentApi = entity => {
293
- const componentProps = ["properties", "slots", "events", "methods"];
294
- let parent = apiIndex.get(entity.extends);
295
-
296
- if (!parent) {
297
- processedApiIndex.add(entity.name);
298
-
299
- return entity;
300
- }
301
-
302
- parent = processedApiIndex.has(entity.extends) ? apiIndex.get(entity.extends) : generateFullComponentApi(parent);
303
-
304
- componentProps.forEach(prop => {
305
- if (parent[prop] && parent[prop].length) {
306
- if (entity[prop] && entity[prop].length) {
307
- const uniqueParentState = parent[prop].filter(pSlot => {
308
- return !entity[prop].some(eSlot => eSlot.name === pSlot.name);
309
- });
310
-
311
- entity[prop] = entity[prop].concat(uniqueParentState);
312
- } else {
313
- entity[prop] = [...parent[prop]];
314
- }
315
- }
316
- });
317
-
318
- processedApiIndex.add(entity.name);
319
-
320
- return entity;
321
- };
322
-
323
- const filterPublicApi = array => {
324
- return (array || []).filter(el => el.visibility === "public");
325
- };
326
-
327
- const generate = async () => {
328
- const apiFilesPaths = [
329
- require.resolve("@ui5/webcomponents-base/dist/api.json"),
330
- require.resolve("@ui5/webcomponents/dist/api.json"),
331
- require.resolve("@ui5/webcomponents-fiori/dist/api.json"),
332
- ];
333
-
334
- let apiFiles = new Map();
335
-
336
- await Promise.all(apiFilesPaths.map(async (apiFilePath) => {
337
- const file = JSON.parse(await fs.readFile(apiFilePath));
338
-
339
- apiFiles.set(apiFilePath, file);
340
-
341
- file.symbols.forEach(symbol => {
342
- apiIndex.set(symbol.name, symbol);
343
- });
344
- }));
345
-
346
- await Promise.all(apiFilesPaths.map(async (apiFilePath) => {
347
- if (apiFilePath.includes("base")) {
348
- return;
349
- }
350
-
351
- let customElementsManifest = {
352
- schemaVersion: "1.0.0",
353
- readme: "",
354
- modules: [],
355
- };
356
-
357
- apiFiles.get(apiFilePath).symbols.forEach(entity => {
358
- if (entity.tagname) {
359
- customElementsManifest.modules.push(generateJavaScriptModule(entity));
360
- }
361
- });
362
-
363
- await fs.writeFile(apiFilePath.replace("api.json", "custom-elements.json"), JSON.stringify(customElementsManifest));
364
- }));
365
- };
366
-
367
- generate().then(() => {
368
- console.log("Custom elements manifest generated.");
369
- });
@@ -1,29 +0,0 @@
1
- {
2
- "source": {
3
- "include": "src",
4
- "excludePattern": "(/|\\\\)library-all\\.js|(/|\\\\).*-preload\\.js|^jquery-.*\\.js|^sap-.*\\.js|.+Renderer\\.lit\\.js|.*library\\.js|thirdparty"
5
- },
6
- "opts" : {
7
- "recurse": true,
8
- "template" : "template",
9
- "destination": ""
10
- },
11
- "plugins": [
12
- "./plugin.js"
13
- ],
14
- "templates" : {
15
- "ui5" : {
16
- "variants": [
17
- "apijson"
18
- ],
19
- "version": "1.62",
20
- "apiJsonFolder": "",
21
- "apiJsonFile": "dist/api.json",
22
- "includeSettingsInConstructor": false
23
- }
24
- },
25
- "tags": {
26
- "allowUnknownTags": true,
27
- "dictionaries": ["jsdoc"]
28
- }
29
- }
@@ -1,29 +0,0 @@
1
- {
2
- "source": {
3
- "include": "jsdoc-dist",
4
- "excludePattern": "(/|\\\\)library-all\\.js|(/|\\\\).*-preload\\.js|^jquery-.*\\.js|^sap-.*\\.js|.+Renderer\\.lit\\.js|.*library\\.js|thirdparty"
5
- },
6
- "opts" : {
7
- "recurse": true,
8
- "template" : "template",
9
- "destination": ""
10
- },
11
- "plugins": [
12
- "./plugin.js"
13
- ],
14
- "templates" : {
15
- "ui5" : {
16
- "variants": [
17
- "apijson"
18
- ],
19
- "version": "1.62",
20
- "apiJsonFolder": "",
21
- "apiJsonFile": "dist/api.json",
22
- "includeSettingsInConstructor": false
23
- }
24
- },
25
- "tags": {
26
- "allowUnknownTags": true,
27
- "dictionaries": ["jsdoc"]
28
- }
29
- }