@ui5/webcomponents-tools 0.0.0-a8e886a07 → 0.0.0-acc6fea96

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 (68) hide show
  1. package/CHANGELOG.md +1465 -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 +84 -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 +35 -13
  15. package/icons-collection/nps.js +13 -9
  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 +168 -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 +413 -0
  25. package/lib/cem/validate.js +70 -0
  26. package/lib/create-icons/index.js +38 -13
  27. package/lib/create-illustrations/index.js +51 -30
  28. package/lib/create-new-component/index.js +59 -101
  29. package/lib/create-new-component/tsFileContentTemplate.js +71 -0
  30. package/lib/css-processors/css-processor-components.mjs +77 -0
  31. package/lib/css-processors/css-processor-themes.mjs +74 -0
  32. package/lib/css-processors/scope-variables.mjs +49 -0
  33. package/lib/css-processors/shared.mjs +56 -0
  34. package/lib/dev-server/custom-hot-update-plugin.js +39 -0
  35. package/lib/dev-server/{dev-server.js → dev-server.mjs} +4 -4
  36. package/lib/dev-server/virtual-index-html-plugin.js +1 -2
  37. package/lib/generate-js-imports/illustrations.js +78 -64
  38. package/lib/generate-json-imports/i18n.js +45 -61
  39. package/lib/generate-json-imports/themes.js +16 -33
  40. package/lib/hbs2lit/src/compiler.js +9 -6
  41. package/lib/hbs2lit/src/litVisitor2.js +42 -17
  42. package/lib/hbs2lit/src/svgProcessor.js +12 -5
  43. package/lib/hbs2ui5/RenderTemplates/LitRenderer.js +39 -6
  44. package/lib/hbs2ui5/index.js +23 -6
  45. package/lib/i18n/defaults.js +11 -3
  46. package/lib/i18n/toJSON.js +1 -1
  47. package/lib/postcss-combine-duplicated-selectors/index.js +12 -5
  48. package/lib/remove-dev-mode/remove-dev-mode.mjs +37 -0
  49. package/lib/scoping/get-all-tags.js +10 -3
  50. package/lib/scoping/lint-src.js +8 -7
  51. package/lib/scoping/scope-test-pages.js +2 -1
  52. package/lib/test-runner/test-runner.js +10 -2
  53. package/package.json +27 -13
  54. package/tsconfig.json +18 -0
  55. package/types/index.d.ts +1 -0
  56. package/components-package/wdio.sync.js +0 -360
  57. package/lib/esm-abs-to-rel/index.js +0 -58
  58. package/lib/generate-custom-elements-manifest/index.js +0 -373
  59. package/lib/jsdoc/config.json +0 -29
  60. package/lib/jsdoc/configTypescript.json +0 -29
  61. package/lib/jsdoc/plugin.js +0 -2468
  62. package/lib/jsdoc/preprocess.js +0 -146
  63. package/lib/jsdoc/template/publish.js +0 -4120
  64. package/lib/postcss-css-to-esm/index.js +0 -57
  65. package/lib/postcss-css-to-json/index.js +0 -47
  66. package/lib/postcss-new-files/index.js +0 -36
  67. package/lib/postcss-p/postcss-p.mjs +0 -14
  68. package/lib/replace-global-core/index.js +0 -25
@@ -1,373 +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) {
278
- throw new Error("JSDoc error: entity not found in api.json.");
279
- }
280
-
281
- if (entity.name.includes("sap.ui.webc.main")) {
282
- packageName = "@ui5/webcomponents";
283
- } else if (entity.name.includes("sap.ui.webc.fiori")) {
284
- packageName = "@ui5/webcomponents-fiori";
285
- } else if (entity.name.includes("sap.ui.webc.base")) {
286
- packageName = "@ui5/webcomponents-base";
287
- }
288
-
289
- return {
290
- module: `${entity.module}.js`,
291
- name: `${entity.basename}`,
292
- package: packageName,
293
- };
294
- };
295
-
296
- const generateFullComponentApi = entity => {
297
- const componentProps = ["properties", "slots", "events", "methods"];
298
- let parent = apiIndex.get(entity.extends);
299
-
300
- if (!parent) {
301
- processedApiIndex.add(entity.name);
302
-
303
- return entity;
304
- }
305
-
306
- parent = processedApiIndex.has(entity.extends) ? apiIndex.get(entity.extends) : generateFullComponentApi(parent);
307
-
308
- componentProps.forEach(prop => {
309
- if (parent[prop] && parent[prop].length) {
310
- if (entity[prop] && entity[prop].length) {
311
- const uniqueParentState = parent[prop].filter(pSlot => {
312
- return !entity[prop].some(eSlot => eSlot.name === pSlot.name);
313
- });
314
-
315
- entity[prop] = entity[prop].concat(uniqueParentState);
316
- } else {
317
- entity[prop] = [...parent[prop]];
318
- }
319
- }
320
- });
321
-
322
- processedApiIndex.add(entity.name);
323
-
324
- return entity;
325
- };
326
-
327
- const filterPublicApi = array => {
328
- return (array || []).filter(el => el.visibility === "public");
329
- };
330
-
331
- const generate = async () => {
332
- const apiFilesPaths = [
333
- require.resolve("@ui5/webcomponents-base/dist/api.json"),
334
- require.resolve("@ui5/webcomponents/dist/api.json"),
335
- require.resolve("@ui5/webcomponents-fiori/dist/api.json"),
336
- ];
337
-
338
- let apiFiles = new Map();
339
-
340
- await Promise.all(apiFilesPaths.map(async (apiFilePath) => {
341
- const file = JSON.parse(await fs.readFile(apiFilePath));
342
-
343
- apiFiles.set(apiFilePath, file);
344
-
345
- file.symbols.forEach(symbol => {
346
- apiIndex.set(symbol.name, symbol);
347
- });
348
- }));
349
-
350
- await Promise.all(apiFilesPaths.map(async (apiFilePath) => {
351
- if (apiFilePath.includes("base")) {
352
- return;
353
- }
354
-
355
- let customElementsManifest = {
356
- schemaVersion: "1.0.0",
357
- readme: "",
358
- modules: [],
359
- };
360
-
361
- apiFiles.get(apiFilePath).symbols.forEach(entity => {
362
- if (entity.tagname) {
363
- customElementsManifest.modules.push(generateJavaScriptModule(entity));
364
- }
365
- });
366
-
367
- await fs.writeFile(apiFilePath.replace("api.json", "custom-elements.json"), JSON.stringify(customElementsManifest));
368
- }));
369
- };
370
-
371
- generate().then(() => {
372
- console.log("Custom elements manifest generated.");
373
- });
@@ -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
- }