@ui5/builder 5.0.0-alpha.1 → 5.0.0-alpha.3
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.
- package/CHANGELOG.md +38 -0
- package/lib/lbt/bundle/Resolver.js +2 -1
- package/lib/lbt/resources/ModuleInfo.js +4 -3
- package/lib/lbt/resources/ResourceFilterList.js +3 -2
- package/lib/lbt/utils/JSTokenizer.js +2 -1
- package/lib/processors/bundlers/moduleBundler.js +5 -1
- package/lib/processors/jsdoc/lib/createIndexFiles.js +1 -1
- package/lib/processors/jsdoc/lib/transformApiJson.js +1 -1
- package/lib/processors/jsdoc/lib/ui5/plugin.js +1 -1
- package/lib/processors/jsdoc/lib/ui5/template/publish.js +1 -1
- package/lib/processors/jsdoc/lib/ui5/template/utils/typeParser.js +1 -1
- package/lib/processors/manifestCreator.js +8 -1
- package/lib/processors/manifestEnhancer.js +6 -0
- package/lib/processors/nonAsciiEscaper.js +3 -3
- package/lib/processors/versionInfoGenerator.js +6 -4
- package/lib/tasks/bundlers/generateLibraryPreload.js +207 -39
- package/lib/tasks/generateResourcesJson.js +4 -1
- package/package.json +8 -29
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,44 @@ This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html
|
|
|
4
4
|
|
|
5
5
|
A list of unreleased changes can be found [here](https://github.com/SAP/ui5-builder/compare/v4.0.11...HEAD).
|
|
6
6
|
|
|
7
|
+
## [5.0.0-alpha.3](https://github.com/UI5/cli/compare/builder-v5.0.0-alpha.2...builder-v5.0.0-alpha.3) (2026-02-13)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
* Change Markdown syntax to [@example](https://github.com/example) in one place ([f7e2e73](https://github.com/UI5/cli/commit/f7e2e732570e3948d87c200ed5d64f65891a866d))
|
|
13
|
+
* Fix gray code blocks in Markdown ([1cdd610](https://github.com/UI5/cli/commit/1cdd61060bd592b5c5f573635444d5ba37a8dc98))
|
|
14
|
+
* Remove unnecessary space ([892ebca](https://github.com/UI5/cli/commit/892ebcadbd9ac4a3c0db84c7fb12c8c1e5daa1b6))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Dependencies
|
|
18
|
+
|
|
19
|
+
* Bump escape-unicode from 0.2.0 to 0.3.0 ([#1160](https://github.com/UI5/cli/issues/1160)) ([90d07bd](https://github.com/UI5/cli/commit/90d07bdf9703e1072a8453a58302c00ac60ad83e))
|
|
20
|
+
* Bump workerpool from 9.3.4 to 10.0.1 ([#1171](https://github.com/UI5/cli/issues/1171)) ([1f659b4](https://github.com/UI5/cli/commit/1f659b405038f91f6aa62d0cc29c32376e4e24d3))
|
|
21
|
+
* The following workspace dependencies were updated
|
|
22
|
+
* dependencies
|
|
23
|
+
* @ui5/fs bumped from ^5.0.0-alpha.2 to ^5.0.0-alpha.3
|
|
24
|
+
* @ui5/logger bumped from ^5.0.0-alpha.2 to ^5.0.0-alpha.3
|
|
25
|
+
* devDependencies
|
|
26
|
+
* @ui5/project bumped from ^5.0.0-alpha.2 to ^5.0.0-alpha.3
|
|
27
|
+
|
|
28
|
+
## [5.0.0-alpha.2](https://github.com/UI5/cli/compare/builder-v5.0.0-alpha.1...builder-v5.0.0-alpha.2) (2025-12-15)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
### chore
|
|
32
|
+
|
|
33
|
+
* **builder:** Synchronize ui5-cli-packages versions
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### Dependencies
|
|
37
|
+
|
|
38
|
+
* The following workspace dependencies were updated
|
|
39
|
+
* dependencies
|
|
40
|
+
* @ui5/fs bumped from ^5.0.0-alpha.1 to ^5.0.0-alpha.2
|
|
41
|
+
* @ui5/logger bumped from ^5.0.0-alpha.1 to ^5.0.0-alpha.2
|
|
42
|
+
* devDependencies
|
|
43
|
+
* @ui5/project bumped from ^5.0.0-alpha.1 to ^5.0.0-alpha.2
|
|
44
|
+
|
|
7
45
|
<a name="5.0.0-alpha.1"></a>
|
|
8
46
|
## [5.0.0-alpha.1](https://github.com/UI5/cli/compare/builder-v5.0.0-alpha.0...builder-v5.0.0-alpha.1) (2025-12-10)
|
|
9
47
|
|
|
@@ -56,6 +56,7 @@ class BundleResolver {
|
|
|
56
56
|
* in the resource pool.
|
|
57
57
|
*/
|
|
58
58
|
const missingModules = Object.create(null);
|
|
59
|
+
const ignoreMissingModules = pool.getIgnoreMissingModules();
|
|
59
60
|
/**
|
|
60
61
|
* Names of modules that are included in non-decomposable bundles.
|
|
61
62
|
* If they occur in the missingModules, then this is not an error.
|
|
@@ -123,7 +124,7 @@ class BundleResolver {
|
|
|
123
124
|
done = pool.findResourceWithInfo(resourceName)
|
|
124
125
|
.catch( (err) => {
|
|
125
126
|
// if the caller provided an error message, log it
|
|
126
|
-
if ( msg ) {
|
|
127
|
+
if ( msg && !ignoreMissingModules ) {
|
|
127
128
|
missingModules[resourceName] ??= [];
|
|
128
129
|
missingModules[resourceName].push(msg);
|
|
129
130
|
}
|
|
@@ -84,9 +84,10 @@ class ModuleInfo {
|
|
|
84
84
|
* global scope. If a module declares global variables, all of them will be exported
|
|
85
85
|
* with additional code of the form:
|
|
86
86
|
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
87
|
+
* ```js
|
|
88
|
+
* this["name"] = name;
|
|
89
|
+
* ```
|
|
90
|
+
*
|
|
90
91
|
*
|
|
91
92
|
* To avoid this, developers can either add "name" to the <code>ignoreGlobals</code>
|
|
92
93
|
* attribute of a raw-module or they can completely suppress embedding of the module
|
|
@@ -141,10 +141,11 @@ export default class ResourceFilterList {
|
|
|
141
141
|
* and vice versa.
|
|
142
142
|
*
|
|
143
143
|
* Example:
|
|
144
|
-
*
|
|
144
|
+
* ```
|
|
145
145
|
* !sap/ui/core/
|
|
146
146
|
* +sap/ui/core/utils/
|
|
147
|
-
|
|
147
|
+
* ```
|
|
148
|
+
*
|
|
148
149
|
* excludes everything from sap/ui/core, but includes everything from the subpackage sap/ui/core/utils/.
|
|
149
150
|
*
|
|
150
151
|
* Note that the filter operates on the full name of each resource. If a resource name
|
|
@@ -29,10 +29,11 @@
|
|
|
29
29
|
*
|
|
30
30
|
* Contains functions to consume tokens on an input string.
|
|
31
31
|
*
|
|
32
|
-
*
|
|
32
|
+
* ```js
|
|
33
33
|
* sap.ui.require(["sap/base/util/JSTokenizer"], function(JSTokenizer){
|
|
34
34
|
* JSTokenizer().parseJS("{test:'123'}"); // {test:'123'}
|
|
35
35
|
* });
|
|
36
|
+
* ```
|
|
36
37
|
*
|
|
37
38
|
* @class sap/base/util/JSTokenizer
|
|
38
39
|
* @since 1.58
|
|
@@ -57,7 +57,10 @@ const log = getLogger("builder:processors:bundlers:moduleBundler");
|
|
|
57
57
|
* denote an arbitrary number of characters or folder names.
|
|
58
58
|
* Excludes should be marked with a leading exclamation mark '!'. The order of filters is relevant; a later
|
|
59
59
|
* exclusion overrides an earlier inclusion, and vice versa.
|
|
60
|
-
*
|
|
60
|
+
*
|
|
61
|
+
* <caption>List of modules as glob patterns that should be in- or excluded</caption>
|
|
62
|
+
*
|
|
63
|
+
* ```js
|
|
61
64
|
* // Includes everything from "some/path/to/module/",
|
|
62
65
|
* // but excludes the subfolder "some/path/to/module/to/be/excluded/"
|
|
63
66
|
* const section = {
|
|
@@ -66,6 +69,7 @@ const log = getLogger("builder:processors:bundlers:moduleBundler");
|
|
|
66
69
|
* "!some/path/to/module/to/be/excluded/"
|
|
67
70
|
* ]
|
|
68
71
|
* };
|
|
72
|
+
* ```
|
|
69
73
|
*
|
|
70
74
|
* @property {boolean} [resolve=false] Whether (transitive) dependencies of modules that match the given filters
|
|
71
75
|
* should be resolved and added to the module set
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Node script to create cross-library API index files for use in the UI5 SDKs.
|
|
3
3
|
*
|
|
4
|
-
* (c) Copyright
|
|
4
|
+
* (c) Copyright 2026 SAP SE or an SAP affiliate company.
|
|
5
5
|
* Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Node script to preprocess api.json files for use in the UI5 SDKs.
|
|
3
3
|
*
|
|
4
|
-
* (c) Copyright
|
|
4
|
+
* (c) Copyright 2026 SAP SE or an SAP affiliate company.
|
|
5
5
|
* Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -491,11 +491,18 @@ async function createManifest(
|
|
|
491
491
|
}
|
|
492
492
|
}
|
|
493
493
|
|
|
494
|
-
|
|
494
|
+
const libraryMetadata = {
|
|
495
495
|
i18n: i18n(),
|
|
496
496
|
css: css(),
|
|
497
497
|
content: content()
|
|
498
498
|
};
|
|
499
|
+
|
|
500
|
+
if (process.env.UI5_CLI_EXPERIMENTAL_BUNDLE_INFO_PRELOAD) {
|
|
501
|
+
// Add flag indicating that the (currently experimental) bundleVersion 2 preload bundling is used
|
|
502
|
+
libraryMetadata.bundleVersion = 2;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
return libraryMetadata;
|
|
499
506
|
}
|
|
500
507
|
|
|
501
508
|
const sapUI5 = {
|
|
@@ -441,6 +441,12 @@ class ManifestEnhancer {
|
|
|
441
441
|
|
|
442
442
|
if (this.manifest["sap.app"].type === "library") {
|
|
443
443
|
await this.processSapUi5LibraryI18n();
|
|
444
|
+
|
|
445
|
+
if (process.env.UI5_CLI_EXPERIMENTAL_BUNDLE_INFO_PRELOAD) {
|
|
446
|
+
// Add flag indicating that the (currently experimental) bundleVersion 2 preload bundling is used
|
|
447
|
+
this.manifest["sap.ui5"].library ??= {};
|
|
448
|
+
this.manifest["sap.ui5"].library.bundleVersion = 2;
|
|
449
|
+
}
|
|
444
450
|
} else {
|
|
445
451
|
await Promise.all([
|
|
446
452
|
this.processSapAppI18n(),
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import escapeUnicode from "escape-unicode";
|
|
1
|
+
import {escapeUnicode} from "escape-unicode";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @public
|
|
@@ -57,10 +57,10 @@ const escapeNonAscii = function(string) {
|
|
|
57
57
|
/**
|
|
58
58
|
* Escapes non ASCII characters with unicode escape sequences.
|
|
59
59
|
*
|
|
60
|
-
*
|
|
60
|
+
* ```js
|
|
61
61
|
* const encoding = nonAsciiEscaper.getEncodingFromAlias("ISO-8859-1");
|
|
62
62
|
* nonAsciiEscaper({resources, options: {encoding}});
|
|
63
|
-
*
|
|
63
|
+
* ```
|
|
64
64
|
*
|
|
65
65
|
* @public
|
|
66
66
|
* @function default
|
|
@@ -28,14 +28,14 @@ function getTimestamp() {
|
|
|
28
28
|
* @typedef {Object<string, {lazy: boolean}>} ManifestLibraries
|
|
29
29
|
*
|
|
30
30
|
* sample:
|
|
31
|
-
*
|
|
31
|
+
* ```json
|
|
32
32
|
* {
|
|
33
33
|
* "sap.chart": {
|
|
34
34
|
* "lazy": true
|
|
35
35
|
* },
|
|
36
36
|
* "sap.f": { }
|
|
37
37
|
* }
|
|
38
|
-
*
|
|
38
|
+
* ```
|
|
39
39
|
*/
|
|
40
40
|
|
|
41
41
|
/**
|
|
@@ -366,14 +366,16 @@ const processLibraryInfo = async (libraryInfo) => {
|
|
|
366
366
|
* @param {string} parameters.options.rootProjectVersion Version of the root project
|
|
367
367
|
* @param {module:@ui5/builder/processors/versionInfoGenerator~LibraryInfo[]} parameters.options.libraryInfos Array of
|
|
368
368
|
* objects representing libraries,
|
|
369
|
-
* e.g.
|
|
369
|
+
* e.g.
|
|
370
|
+
* ```json
|
|
370
371
|
* {
|
|
371
372
|
* name: "lib.x",
|
|
372
373
|
* version: "1.0.0",
|
|
373
374
|
* libraryManifest: @ui5/fs/Resource,
|
|
374
375
|
* embeddedManifests: @ui5/fs/Resource[]
|
|
375
376
|
* }
|
|
376
|
-
*
|
|
377
|
+
* ```
|
|
378
|
+
*
|
|
377
379
|
* @returns {Promise<@ui5/fs/Resource[]>} Promise resolving with an array containing the versionInfo resource
|
|
378
380
|
*/
|
|
379
381
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import semver from "semver";
|
|
1
2
|
import {getLogger} from "@ui5/logger";
|
|
2
3
|
const log = getLogger("builder:tasks:bundlers:generateLibraryPreload");
|
|
3
4
|
import moduleBundler from "../../processors/bundlers/moduleBundler.js";
|
|
@@ -32,6 +33,32 @@ function getDefaultLibraryPreloadFilters(namespace, excludes) {
|
|
|
32
33
|
return filters;
|
|
33
34
|
}
|
|
34
35
|
|
|
36
|
+
function getExperimentalDefaultLibraryPreloadFilters(namespace, excludes) {
|
|
37
|
+
const filters = [
|
|
38
|
+
`${namespace}/library.js`,
|
|
39
|
+
`!${namespace}/**/*-preload.js`, // exclude all bundles
|
|
40
|
+
`!${namespace}/designtime/`,
|
|
41
|
+
`!${namespace}/**/*.designtime.js`,
|
|
42
|
+
`!${namespace}/**/*.support.js`
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
if (Array.isArray(excludes)) {
|
|
46
|
+
const allFilterExcludes = negateFilters(excludes);
|
|
47
|
+
// Add configured excludes at the end of filter list
|
|
48
|
+
allFilterExcludes.forEach((filterExclude) => {
|
|
49
|
+
// Allow all excludes (!) and limit re-includes (+) to the library namespace
|
|
50
|
+
if (filterExclude.startsWith("!") || filterExclude.startsWith(`+${namespace}/`)) {
|
|
51
|
+
filters.push(filterExclude);
|
|
52
|
+
} else {
|
|
53
|
+
log.warn(`Configured preload exclude contains invalid re-include: !${filterExclude.substr(1)}. ` +
|
|
54
|
+
`Re-includes must start with the library's namespace ${namespace}`);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return filters;
|
|
60
|
+
}
|
|
61
|
+
|
|
35
62
|
function getBundleDefinition(namespace, excludes) {
|
|
36
63
|
// Note: This configuration is only used when no bundle definition in ui5.yaml exists (see "skipBundles" parameter)
|
|
37
64
|
|
|
@@ -106,6 +133,69 @@ function getBundleDefinition(namespace, excludes) {
|
|
|
106
133
|
};
|
|
107
134
|
}
|
|
108
135
|
|
|
136
|
+
function getBundleInfoPreloadDefinition(namespace, excludes, coreVersion) {
|
|
137
|
+
const sections = [{
|
|
138
|
+
mode: "preload",
|
|
139
|
+
filters: getExperimentalDefaultLibraryPreloadFilters(namespace, excludes),
|
|
140
|
+
resolve: true
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
mode: "bundleInfo",
|
|
144
|
+
name: `${namespace}/_library-content.js`,
|
|
145
|
+
filters: getDefaultLibraryPreloadFilters(namespace, excludes),
|
|
146
|
+
resolve: false,
|
|
147
|
+
resolveConditional: false,
|
|
148
|
+
renderer: true
|
|
149
|
+
}];
|
|
150
|
+
|
|
151
|
+
if (coreVersion) {
|
|
152
|
+
const parsedVersion = semver.parse(coreVersion);
|
|
153
|
+
let targetUi5CoreVersionMajor = parsedVersion.major;
|
|
154
|
+
|
|
155
|
+
// legacy-free versions include changes of the upcoming major version
|
|
156
|
+
// so we should treat them the same as the next major version
|
|
157
|
+
if (
|
|
158
|
+
parsedVersion.prerelease.includes("legacy-free") ||
|
|
159
|
+
parsedVersion.prerelease.includes("legacy-free-SNAPSHOT") // Maven snapshot version
|
|
160
|
+
) {
|
|
161
|
+
targetUi5CoreVersionMajor += 1;
|
|
162
|
+
}
|
|
163
|
+
if (parsedVersion) {
|
|
164
|
+
if (targetUi5CoreVersionMajor >= 2) {
|
|
165
|
+
// Do not include manifest.json in UI5 2.x and higher to allow for loading it upfront for all libraries
|
|
166
|
+
sections.unshift({
|
|
167
|
+
mode: "provided",
|
|
168
|
+
filters: [
|
|
169
|
+
`${namespace}/manifest.json`,
|
|
170
|
+
]
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
return {
|
|
177
|
+
name: `${namespace}/library-preload.js`,
|
|
178
|
+
sections,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function getContentBundleDefinition(namespace, excludes) {
|
|
183
|
+
return {
|
|
184
|
+
name: `${namespace}/_library-content.js`,
|
|
185
|
+
sections: [{
|
|
186
|
+
mode: "provided",
|
|
187
|
+
filters: getExperimentalDefaultLibraryPreloadFilters(namespace, excludes),
|
|
188
|
+
resolve: true
|
|
189
|
+
}, {
|
|
190
|
+
mode: "preload",
|
|
191
|
+
filters: getDefaultLibraryPreloadFilters(namespace, excludes),
|
|
192
|
+
resolve: false,
|
|
193
|
+
resolveConditional: false,
|
|
194
|
+
renderer: true
|
|
195
|
+
}]
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
|
|
109
199
|
function getDesigntimeBundleDefinition(namespace) {
|
|
110
200
|
return {
|
|
111
201
|
name: `${namespace}/designtime/library-preload.designtime.js`,
|
|
@@ -258,6 +348,7 @@ export default async function({workspace, taskUtil, options: {skipBundles = [],
|
|
|
258
348
|
}
|
|
259
349
|
const coreVersion = taskUtil?.getProject("sap.ui.core")?.getVersion();
|
|
260
350
|
const allowStringBundling = taskUtil?.getProject().getSpecVersion().lt("4.0");
|
|
351
|
+
const createBundleInfoPreload = !!process.env.UI5_CLI_EXPERIMENTAL_BUNDLE_INFO_PRELOAD;
|
|
261
352
|
const execModuleBundlerIfNeeded = ({options, resources}) => {
|
|
262
353
|
if (skipBundles.includes(options.bundleDefinition.name)) {
|
|
263
354
|
log.verbose(`Skipping generation of bundle ${options.bundleDefinition.name}`);
|
|
@@ -271,7 +362,9 @@ export default async function({workspace, taskUtil, options: {skipBundles = [],
|
|
|
271
362
|
return moduleBundler({options, resources});
|
|
272
363
|
};
|
|
273
364
|
|
|
274
|
-
return nonDbgWorkspace.byGlob(
|
|
365
|
+
return nonDbgWorkspace.byGlob(
|
|
366
|
+
"/resources/**/*.{js,json,xml,html,properties,library,js.map}"
|
|
367
|
+
).then(async (resources) => {
|
|
275
368
|
// Find all libraries and create a library-preload.js bundle
|
|
276
369
|
|
|
277
370
|
let p = Promise.resolve();
|
|
@@ -299,8 +392,8 @@ export default async function({workspace, taskUtil, options: {skipBundles = [],
|
|
|
299
392
|
return !taskUtil.getTag(resource, taskUtil.STANDARD_TAGS.HasDebugVariant);
|
|
300
393
|
}
|
|
301
394
|
});
|
|
302
|
-
unoptimizedResources =
|
|
303
|
-
|
|
395
|
+
unoptimizedResources = await unoptimizedWorkspace.byGlob(
|
|
396
|
+
"/resources/**/*.{js,json,xml,html,properties,library,js.map}");
|
|
304
397
|
|
|
305
398
|
unoptimizedModuleNameMapping = createModuleNameMapping({
|
|
306
399
|
resources: unoptimizedResources,
|
|
@@ -390,42 +483,117 @@ export default async function({workspace, taskUtil, options: {skipBundles = [],
|
|
|
390
483
|
const libraryNamespaceMatch = libraryIndicatorPath.match(libraryNamespacePattern);
|
|
391
484
|
if (libraryNamespaceMatch && libraryNamespaceMatch[1]) {
|
|
392
485
|
const libraryNamespace = libraryNamespaceMatch[1];
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
486
|
+
let results;
|
|
487
|
+
if (!createBundleInfoPreload) {
|
|
488
|
+
// Regular bundling
|
|
489
|
+
results = await Promise.all([
|
|
490
|
+
execModuleBundlerIfNeeded({
|
|
491
|
+
options: {
|
|
492
|
+
bundleDefinition: getBundleDefinition(libraryNamespace, excludes),
|
|
493
|
+
bundleOptions: {
|
|
494
|
+
optimize: true,
|
|
495
|
+
ignoreMissingModules: true
|
|
496
|
+
}
|
|
497
|
+
},
|
|
498
|
+
resources
|
|
499
|
+
}),
|
|
500
|
+
execModuleBundlerIfNeeded({
|
|
501
|
+
options: {
|
|
502
|
+
bundleDefinition: getDesigntimeBundleDefinition(libraryNamespace),
|
|
503
|
+
bundleOptions: {
|
|
504
|
+
optimize: true,
|
|
505
|
+
ignoreMissingModules: true,
|
|
506
|
+
skipIfEmpty: true
|
|
507
|
+
}
|
|
508
|
+
},
|
|
509
|
+
resources
|
|
510
|
+
}),
|
|
511
|
+
execModuleBundlerIfNeeded({
|
|
512
|
+
options: {
|
|
513
|
+
bundleDefinition: getSupportFilesBundleDefinition(libraryNamespace),
|
|
514
|
+
bundleOptions: {
|
|
515
|
+
optimize: false,
|
|
516
|
+
ignoreMissingModules: true,
|
|
517
|
+
skipIfEmpty: true
|
|
518
|
+
}
|
|
519
|
+
// Note: Although the bundle uses optimize=false, there is
|
|
520
|
+
// no moduleNameMapping needed, as support files are excluded from minification.
|
|
521
|
+
},
|
|
522
|
+
resources
|
|
523
|
+
})
|
|
524
|
+
]);
|
|
525
|
+
} else {
|
|
526
|
+
log.info(
|
|
527
|
+
`Using experimental bundling with bundle info preload ` +
|
|
528
|
+
`for library ${libraryNamespace} in project ${projectName}`);
|
|
529
|
+
log.info(`Detected sap.ui.core version is ${coreVersion || "unknown"}`);
|
|
530
|
+
|
|
531
|
+
|
|
532
|
+
if (skipBundles.includes(`${libraryNamespace}/library-preload.js`) &&
|
|
533
|
+
!skipBundles.includes(`${libraryNamespace}/_library-content.js`)) {
|
|
534
|
+
// If the standard preload bundle is skipped, ensure to also skip the content bundle,
|
|
535
|
+
// since they depend on each other
|
|
536
|
+
skipBundles.push(`${libraryNamespace}/_library-content.js`);
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
if (skipBundles.includes(`${libraryNamespace}/_library-content.js`) &&
|
|
540
|
+
!skipBundles.includes(`${libraryNamespace}/library-preload.js`)) {
|
|
541
|
+
// If the content bundle is skipped, the default preload bundle must be skipped as well
|
|
542
|
+
throw new Error(
|
|
543
|
+
`A custom bundle '${libraryNamespace}/_library-content.js' has been defined, ` +
|
|
544
|
+
`but it also requires a corresponding custom bundle definition for ` +
|
|
545
|
+
`'${libraryNamespace}/library-preload.js'`);
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
// Experimental bundling with bundle info preload
|
|
549
|
+
results = await Promise.all([
|
|
550
|
+
execModuleBundlerIfNeeded({
|
|
551
|
+
options: {
|
|
552
|
+
bundleDefinition:
|
|
553
|
+
getBundleInfoPreloadDefinition(libraryNamespace, excludes, coreVersion),
|
|
554
|
+
bundleOptions: {
|
|
555
|
+
optimize: true,
|
|
556
|
+
ignoreMissingModules: true
|
|
557
|
+
}
|
|
558
|
+
},
|
|
559
|
+
resources
|
|
560
|
+
}),
|
|
561
|
+
execModuleBundlerIfNeeded({
|
|
562
|
+
options: {
|
|
563
|
+
bundleDefinition: getContentBundleDefinition(libraryNamespace, excludes),
|
|
564
|
+
bundleOptions: {
|
|
565
|
+
optimize: true,
|
|
566
|
+
ignoreMissingModules: true
|
|
567
|
+
}
|
|
568
|
+
},
|
|
569
|
+
resources
|
|
570
|
+
}),
|
|
571
|
+
execModuleBundlerIfNeeded({
|
|
572
|
+
options: {
|
|
573
|
+
bundleDefinition: getDesigntimeBundleDefinition(libraryNamespace),
|
|
574
|
+
bundleOptions: {
|
|
575
|
+
optimize: true,
|
|
576
|
+
ignoreMissingModules: true,
|
|
577
|
+
skipIfEmpty: true
|
|
578
|
+
}
|
|
579
|
+
},
|
|
580
|
+
resources
|
|
581
|
+
}),
|
|
582
|
+
execModuleBundlerIfNeeded({
|
|
583
|
+
options: {
|
|
584
|
+
bundleDefinition: getSupportFilesBundleDefinition(libraryNamespace),
|
|
585
|
+
bundleOptions: {
|
|
586
|
+
optimize: false,
|
|
587
|
+
ignoreMissingModules: true,
|
|
588
|
+
skipIfEmpty: true
|
|
589
|
+
}
|
|
590
|
+
// Note: Although the bundle uses optimize=false, there is
|
|
591
|
+
// no moduleNameMapping needed, as support files are excluded from minification.
|
|
592
|
+
},
|
|
593
|
+
resources
|
|
594
|
+
})
|
|
595
|
+
]);
|
|
596
|
+
}
|
|
429
597
|
const bundles = Array.prototype.concat.apply([], results).filter(Boolean);
|
|
430
598
|
return Promise.all(bundles.map(({bundle, sourceMap} = {}) => {
|
|
431
599
|
if (bundle) {
|
|
@@ -55,7 +55,9 @@ function getCreatorOptions(projectName) {
|
|
|
55
55
|
* Therefore it is also not supported in combination with self-contained build.
|
|
56
56
|
* </p>
|
|
57
57
|
*
|
|
58
|
-
*
|
|
58
|
+
* <caption>sample resources.json</caption>
|
|
59
|
+
*
|
|
60
|
+
* ```js
|
|
59
61
|
* const resourcesJson = {
|
|
60
62
|
* "_version": "1.1.0",
|
|
61
63
|
* "resources": [
|
|
@@ -95,6 +97,7 @@ function getCreatorOptions(projectName) {
|
|
|
95
97
|
* }
|
|
96
98
|
* ]
|
|
97
99
|
* };
|
|
100
|
+
* ```
|
|
98
101
|
*
|
|
99
102
|
* @public
|
|
100
103
|
* @function default
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ui5/builder",
|
|
3
|
-
"version": "5.0.0-alpha.
|
|
3
|
+
"version": "5.0.0-alpha.3",
|
|
4
4
|
"description": "UI5 CLI - Builder",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "SAP SE",
|
|
@@ -33,39 +33,19 @@
|
|
|
33
33
|
"npm": ">= 8"
|
|
34
34
|
},
|
|
35
35
|
"scripts": {
|
|
36
|
-
"test": "npm run lint && npm run coverage
|
|
36
|
+
"test": "npm run lint && npm run coverage",
|
|
37
37
|
"lint": "eslint ./",
|
|
38
38
|
"unit": "rimraf test/tmp && ava",
|
|
39
39
|
"unit-verbose": "rimraf test/tmp && cross-env UI5_LOG_LVL=verbose ava --verbose --serial",
|
|
40
40
|
"unit-watch": "rimraf test/tmp && ava --watch",
|
|
41
41
|
"unit-inspect": "cross-env UI5_LOG_LVL=verbose ava debug --break",
|
|
42
|
-
"coverage": "rimraf test/tmp && nyc ava --node-arguments=\"--experimental-loader=@istanbuljs/esm-loader-hook\""
|
|
43
|
-
"preversion": "npm test",
|
|
44
|
-
"version": "git-chglog --sort semver --next-tag v$npm_package_version -o CHANGELOG.md v4.0.0.. && git add CHANGELOG.md",
|
|
45
|
-
"prepublishOnly": "git push --follow-tags",
|
|
46
|
-
"release-note": "git-chglog --sort semver -c .chglog/release-config.yml v$npm_package_version",
|
|
47
|
-
"depcheck": "depcheck --ignores @ui5/builder,@istanbuljs/esm-loader-hook,catharsis,rimraf,jsdoc --parsers='**/*.js:es6,**/*.cjs:es6'"
|
|
42
|
+
"coverage": "rimraf test/tmp && nyc ava --node-arguments=\"--experimental-loader=@istanbuljs/esm-loader-hook\""
|
|
48
43
|
},
|
|
49
44
|
"files": [
|
|
50
45
|
"CHANGELOG.md",
|
|
51
46
|
"lib/**",
|
|
52
47
|
"LICENSES/**"
|
|
53
48
|
],
|
|
54
|
-
"ava": {
|
|
55
|
-
"files": [
|
|
56
|
-
"test/lib/**/*.js"
|
|
57
|
-
],
|
|
58
|
-
"watchMode": {
|
|
59
|
-
"ignoreChanges": [
|
|
60
|
-
"test/tmp/**"
|
|
61
|
-
]
|
|
62
|
-
},
|
|
63
|
-
"nodeArguments": [
|
|
64
|
-
"--loader=esmock",
|
|
65
|
-
"--no-warnings"
|
|
66
|
-
],
|
|
67
|
-
"workerThreads": false
|
|
68
|
-
},
|
|
69
49
|
"nyc": {
|
|
70
50
|
"reporter": [
|
|
71
51
|
"lcov",
|
|
@@ -111,10 +91,10 @@
|
|
|
111
91
|
},
|
|
112
92
|
"dependencies": {
|
|
113
93
|
"@jridgewell/sourcemap-codec": "^1.5.5",
|
|
114
|
-
"@ui5/fs": "^5.0.0-alpha.
|
|
115
|
-
"@ui5/logger": "^5.0.0-alpha.
|
|
94
|
+
"@ui5/fs": "^5.0.0-alpha.3",
|
|
95
|
+
"@ui5/logger": "^5.0.0-alpha.3",
|
|
116
96
|
"cheerio": "1.0.0",
|
|
117
|
-
"escape-unicode": "^0.
|
|
97
|
+
"escape-unicode": "^0.3.0",
|
|
118
98
|
"escope": "^4.0.0",
|
|
119
99
|
"espree": "^10.4.0",
|
|
120
100
|
"graceful-fs": "^4.2.11",
|
|
@@ -123,16 +103,15 @@
|
|
|
123
103
|
"pretty-data": "^0.40.0",
|
|
124
104
|
"semver": "^7.7.2",
|
|
125
105
|
"terser": "^5.44.0",
|
|
126
|
-
"workerpool": "^
|
|
106
|
+
"workerpool": "^10.0.1",
|
|
127
107
|
"xml2js": "^0.6.2"
|
|
128
108
|
},
|
|
129
109
|
"devDependencies": {
|
|
130
110
|
"@istanbuljs/esm-loader-hook": "^0.3.0",
|
|
131
111
|
"@jridgewell/trace-mapping": "^0.3.31",
|
|
132
|
-
"@ui5/project": "^5.0.0-alpha.
|
|
112
|
+
"@ui5/project": "^5.0.0-alpha.3",
|
|
133
113
|
"ava": "^6.4.1",
|
|
134
114
|
"cross-env": "^7.0.3",
|
|
135
|
-
"depcheck": "^1.4.7",
|
|
136
115
|
"eslint": "^9.36.0",
|
|
137
116
|
"esmock": "^2.7.3",
|
|
138
117
|
"line-column": "^1.0.2",
|