@ui5/builder 3.0.0-alpha.9 → 3.0.0-beta.2
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/.reuse/dep5 +2 -2
- package/CHANGELOG.md +59 -1
- package/CONTRIBUTING.md +1 -1
- package/README.md +4 -4
- package/jsdoc.json +2 -2
- package/lib/lbt/UI5ClientConstants.js +7 -8
- package/lib/lbt/analyzer/ComponentAnalyzer.js +60 -22
- package/lib/lbt/analyzer/FioriElementsAnalyzer.js +31 -20
- package/lib/lbt/analyzer/JSModuleAnalyzer.js +119 -77
- package/lib/lbt/analyzer/SmartTemplateAnalyzer.js +31 -20
- package/lib/lbt/analyzer/XMLCompositeAnalyzer.js +35 -25
- package/lib/lbt/analyzer/XMLTemplateAnalyzer.js +71 -18
- package/lib/lbt/analyzer/analyzeLibraryJS.js +22 -6
- package/lib/lbt/bundle/AutoSplitter.js +10 -11
- package/lib/lbt/bundle/Builder.js +33 -36
- package/lib/lbt/bundle/BundleDefinition.js +1 -5
- package/lib/lbt/bundle/BundleWriter.js +1 -2
- package/lib/lbt/bundle/ResolvedBundleDefinition.js +6 -7
- package/lib/lbt/bundle/Resolver.js +11 -12
- package/lib/lbt/calls/SapUiDefine.js +16 -11
- package/lib/lbt/graph/dependencyGraph.js +3 -4
- package/lib/lbt/graph/dominatorTree.js +3 -3
- package/lib/lbt/graph/topologicalSort.js +3 -3
- package/lib/lbt/resources/LibraryFileAnalyzer.js +6 -9
- package/lib/lbt/resources/LocatorResource.js +2 -2
- package/lib/lbt/resources/LocatorResourcePool.js +3 -3
- package/lib/lbt/resources/ModuleInfo.js +2 -3
- package/lib/lbt/resources/Resource.js +3 -4
- package/lib/lbt/resources/ResourceCollector.js +8 -9
- package/lib/lbt/resources/ResourceFilterList.js +38 -40
- package/lib/lbt/resources/ResourceInfo.js +1 -1
- package/lib/lbt/resources/ResourceInfoList.js +5 -3
- package/lib/lbt/resources/ResourcePool.js +15 -21
- package/lib/lbt/utils/ASTUtils.js +60 -44
- package/lib/lbt/utils/JSTokenizer.js +4 -4
- package/lib/lbt/utils/ModuleName.js +10 -20
- package/lib/lbt/utils/escapePropertiesFile.js +4 -4
- package/lib/lbt/utils/parseUtils.js +5 -11
- package/lib/processors/bootstrapHtmlTransformer.js +15 -7
- package/lib/processors/bundlers/flexChangesBundler.js +16 -8
- package/lib/processors/bundlers/moduleBundler.js +26 -15
- package/lib/processors/jsdoc/apiIndexGenerator.js +16 -9
- package/lib/processors/jsdoc/jsdocGenerator.js +37 -25
- package/lib/processors/jsdoc/lib/{createIndexFiles.js → createIndexFiles.cjs} +0 -0
- package/lib/processors/jsdoc/lib/{transformApiJson.js → transformApiJson.cjs} +59 -2
- package/lib/processors/jsdoc/lib/ui5/{plugin.js → plugin.cjs} +310 -119
- package/lib/processors/jsdoc/lib/ui5/template/{publish.js → publish.cjs} +6 -2
- package/lib/processors/jsdoc/lib/ui5/template/utils/{versionUtil.js → versionUtil.cjs} +0 -0
- package/lib/processors/jsdoc/sdkTransformer.js +18 -11
- package/lib/processors/libraryLessGenerator.js +28 -16
- package/lib/processors/manifestCreator.js +15 -14
- package/lib/processors/minifier.js +22 -16
- package/lib/processors/nonAsciiEscaper.js +17 -7
- package/lib/processors/resourceListCreator.js +13 -13
- package/lib/processors/stringReplacer.js +13 -6
- package/lib/processors/themeBuilder.js +33 -24
- package/lib/processors/versionInfoGenerator.js +40 -30
- package/lib/tasks/buildThemes.js +18 -11
- package/lib/tasks/bundlers/generateBundle.js +23 -12
- package/lib/tasks/bundlers/generateComponentPreload.js +23 -12
- package/lib/tasks/bundlers/generateFlexChangesBundle.js +16 -8
- package/lib/tasks/bundlers/generateLibraryPreload.js +33 -17
- package/lib/tasks/bundlers/generateStandaloneAppBundle.js +21 -13
- package/lib/tasks/bundlers/utils/createModuleNameMapping.js +7 -7
- package/lib/tasks/escapeNonAsciiCharacters.js +12 -5
- package/lib/tasks/generateCachebusterInfo.js +17 -9
- package/lib/tasks/generateLibraryManifest.js +14 -8
- package/lib/tasks/generateResourcesJson.js +15 -9
- package/lib/tasks/generateThemeDesignerResources.js +19 -9
- package/lib/tasks/generateVersionInfo.js +12 -5
- package/lib/tasks/jsdoc/executeJsdocSdkTransformation.js +17 -9
- package/lib/tasks/jsdoc/generateApiIndex.js +16 -10
- package/lib/tasks/jsdoc/generateJsdoc.js +131 -119
- package/lib/tasks/minify.js +13 -6
- package/lib/tasks/replaceBuildtime.js +12 -5
- package/lib/tasks/replaceCopyright.js +12 -5
- package/lib/tasks/replaceVersion.js +12 -5
- package/lib/tasks/taskRepository.js +24 -30
- package/lib/tasks/transformBootstrapHtml.js +6 -5
- package/package.json +44 -31
- package/index.js +0 -173
- package/lib/processors/bundlers/manifestBundler.js +0 -172
- package/lib/tasks/bundlers/generateManifestBundle.js +0 -49
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ui5/builder",
|
|
3
|
-
"version": "3.0.0-
|
|
3
|
+
"version": "3.0.0-beta.2",
|
|
4
4
|
"description": "UI5 Tooling - Builder",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "SAP SE",
|
|
@@ -16,9 +16,19 @@
|
|
|
16
16
|
"development",
|
|
17
17
|
"tool"
|
|
18
18
|
],
|
|
19
|
-
"
|
|
19
|
+
"type": "module",
|
|
20
|
+
"exports": {
|
|
21
|
+
"./processors/*": "./lib/processors/*.js",
|
|
22
|
+
"./processors/jsdoc/lib/*": null,
|
|
23
|
+
"./tasks/*": "./lib/tasks/*.js",
|
|
24
|
+
"./tasks/taskRepository": null,
|
|
25
|
+
"./tasks/bundlers/utils/*": null,
|
|
26
|
+
"./package.json": "./package.json",
|
|
27
|
+
"./internal/taskRepository": "./lib/tasks/taskRepository.js",
|
|
28
|
+
"./internal/jsdoc/template/publish": "./lib/processors/jsdoc/lib/ui5/template/publish.cjs"
|
|
29
|
+
},
|
|
20
30
|
"engines": {
|
|
21
|
-
"node": "
|
|
31
|
+
"node": "^16.18.0 || >=18.0.0",
|
|
22
32
|
"npm": ">= 8"
|
|
23
33
|
},
|
|
24
34
|
"scripts": {
|
|
@@ -29,9 +39,9 @@
|
|
|
29
39
|
"unit-verbose": "rimraf test/tmp && cross-env UI5_LOG_LVL=verbose ava --verbose --serial",
|
|
30
40
|
"unit-watch": "rimraf test/tmp && ava --watch",
|
|
31
41
|
"unit-nyan": "rimraf test/tmp && ava --tap | tnyan",
|
|
32
|
-
"unit-xunit": "rimraf test/tmp && ava --tap --timeout=1m | tap-xunit --dontUseCommentsAsTestNames=true > test-results.xml",
|
|
42
|
+
"unit-xunit": "rimraf test/tmp && ava --node-arguments=\"--experimental-loader=@istanbuljs/esm-loader-hook\" --tap --timeout=1m | tap-xunit --dontUseCommentsAsTestNames=true > test-results.xml",
|
|
33
43
|
"unit-inspect": "cross-env UI5_LOG_LVL=verbose ava debug --break",
|
|
34
|
-
"coverage": "nyc
|
|
44
|
+
"coverage": "rimraf test/tmp && nyc ava --node-arguments=\"--experimental-loader=@istanbuljs/esm-loader-hook\"",
|
|
35
45
|
"coverage-xunit": "nyc --reporter=text --reporter=text-summary --reporter=cobertura npm run unit-xunit",
|
|
36
46
|
"jsdoc": "npm run jsdoc-generate && open-cli jsdocs/index.html",
|
|
37
47
|
"jsdoc-generate": "jsdoc -c ./jsdoc.json -t $(node -p 'path.dirname(require.resolve(\"docdash\"))') ./lib/ || (echo 'Error during JSDoc generation! Check log.' && exit 1)",
|
|
@@ -40,10 +50,9 @@
|
|
|
40
50
|
"version": "git-chglog --sort semver --next-tag v$npm_package_version -o CHANGELOG.md && git add CHANGELOG.md",
|
|
41
51
|
"postversion": "git push --follow-tags",
|
|
42
52
|
"release-note": "git-chglog --sort semver -c .chglog/release-config.yml v$npm_package_version",
|
|
43
|
-
"depcheck": "depcheck --ignores docdash --
|
|
53
|
+
"depcheck": "depcheck --ignores @ui5/builder,docdash,@istanbuljs/esm-loader-hook,catharsis --parsers='**/*.js:es6,**/*.cjs:es6'"
|
|
44
54
|
},
|
|
45
55
|
"files": [
|
|
46
|
-
"index.js",
|
|
47
56
|
"CHANGELOG.md",
|
|
48
57
|
"CONTRIBUTING.md",
|
|
49
58
|
"jsdoc.json",
|
|
@@ -57,6 +66,10 @@
|
|
|
57
66
|
],
|
|
58
67
|
"ignoredByWatcher": [
|
|
59
68
|
"test/tmp/**"
|
|
69
|
+
],
|
|
70
|
+
"nodeArguments": [
|
|
71
|
+
"--loader=esmock",
|
|
72
|
+
"--no-warnings"
|
|
60
73
|
]
|
|
61
74
|
},
|
|
62
75
|
"nyc": {
|
|
@@ -71,8 +84,8 @@
|
|
|
71
84
|
"jsdocs/**",
|
|
72
85
|
"coverage/**",
|
|
73
86
|
"test/**",
|
|
74
|
-
".eslintrc.
|
|
75
|
-
"jsdoc-plugin.
|
|
87
|
+
".eslintrc.cjs",
|
|
88
|
+
"jsdoc-plugin.cjs"
|
|
76
89
|
],
|
|
77
90
|
"check-coverage": true,
|
|
78
91
|
"statements": 85,
|
|
@@ -106,42 +119,42 @@
|
|
|
106
119
|
},
|
|
107
120
|
"dependencies": {
|
|
108
121
|
"@jridgewell/sourcemap-codec": "^1.4.14",
|
|
109
|
-
"@ui5/fs": "^3.0.0-
|
|
110
|
-
"@ui5/logger": "^3.0.1-
|
|
111
|
-
"cheerio": "1.0.0-rc.
|
|
122
|
+
"@ui5/fs": "^3.0.0-beta.3",
|
|
123
|
+
"@ui5/logger": "^3.0.1-beta.1",
|
|
124
|
+
"cheerio": "1.0.0-rc.12",
|
|
112
125
|
"escape-unicode": "^0.2.0",
|
|
113
|
-
"escope": "^
|
|
114
|
-
"espree": "^9.
|
|
115
|
-
"graceful-fs": "^4.2.
|
|
116
|
-
"jsdoc": "^3.6.
|
|
126
|
+
"escope": "^4.0.0",
|
|
127
|
+
"espree": "^9.4.1",
|
|
128
|
+
"graceful-fs": "^4.2.10",
|
|
129
|
+
"jsdoc": "^3.6.11",
|
|
117
130
|
"less-openui5": "^0.11.2",
|
|
118
131
|
"make-dir": "^3.1.0",
|
|
119
132
|
"pretty-data": "^0.40.0",
|
|
120
133
|
"replacestream": "^4.0.3",
|
|
121
134
|
"rimraf": "^3.0.2",
|
|
122
|
-
"semver": "^7.3.
|
|
123
|
-
"terser": "^5.
|
|
124
|
-
"xml2js": "^0.4.23"
|
|
125
|
-
"yazl": "^2.5.1"
|
|
135
|
+
"semver": "^7.3.8",
|
|
136
|
+
"terser": "^5.16.0",
|
|
137
|
+
"xml2js": "^0.4.23"
|
|
126
138
|
},
|
|
127
139
|
"devDependencies": {
|
|
128
|
-
"@
|
|
129
|
-
"
|
|
130
|
-
"
|
|
140
|
+
"@istanbuljs/esm-loader-hook": "^0.2.0",
|
|
141
|
+
"@ui5/project": "^3.0.0-beta.3",
|
|
142
|
+
"ava": "^5.1.0",
|
|
143
|
+
"chai": "^4.3.7",
|
|
131
144
|
"chai-fs": "^2.0.0",
|
|
132
145
|
"chokidar-cli": "^3.0.0",
|
|
133
146
|
"cross-env": "^7.0.3",
|
|
134
147
|
"depcheck": "^1.4.3",
|
|
135
|
-
"docdash": "^
|
|
136
|
-
"eslint": "^8.
|
|
148
|
+
"docdash": "^2.0.0",
|
|
149
|
+
"eslint": "^8.28.0",
|
|
137
150
|
"eslint-config-google": "^0.14.0",
|
|
138
|
-
"eslint-plugin-
|
|
139
|
-
"
|
|
140
|
-
"
|
|
151
|
+
"eslint-plugin-ava": "^13.2.0",
|
|
152
|
+
"eslint-plugin-jsdoc": "^39.6.4",
|
|
153
|
+
"esmock": "^2.0.9",
|
|
141
154
|
"nyc": "^15.1.0",
|
|
142
|
-
"open-cli": "^
|
|
143
|
-
"recursive-readdir": "^2.
|
|
144
|
-
"sinon": "^
|
|
155
|
+
"open-cli": "^7.1.0",
|
|
156
|
+
"recursive-readdir": "^2.2.3",
|
|
157
|
+
"sinon": "^14.0.2",
|
|
145
158
|
"tap-nyan": "^1.1.0",
|
|
146
159
|
"tap-xunit": "^2.4.1"
|
|
147
160
|
}
|
package/index.js
DELETED
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module @ui5/builder
|
|
3
|
-
* @public
|
|
4
|
-
*/
|
|
5
|
-
module.exports = {
|
|
6
|
-
/**
|
|
7
|
-
* @public
|
|
8
|
-
* @alias module:@ui5/builder.processors
|
|
9
|
-
* @namespace
|
|
10
|
-
*/
|
|
11
|
-
processors: {
|
|
12
|
-
/**
|
|
13
|
-
* @type {import('./lib/processors/bundlers/flexChangesBundler')}
|
|
14
|
-
*/
|
|
15
|
-
flexChangesBundler: "./lib/processors/bundlers/flexChangesBundler",
|
|
16
|
-
/**
|
|
17
|
-
* @type {import('./lib/processors/bundlers/manifestBundler')}
|
|
18
|
-
*/
|
|
19
|
-
manifestBundler: "./lib/processors/bundlers/manifestBundler",
|
|
20
|
-
/**
|
|
21
|
-
* @type {import('./lib/processors/bundlers/moduleBundler')}
|
|
22
|
-
*/
|
|
23
|
-
moduleBundler: "./lib/processors/bundlers/moduleBundler",
|
|
24
|
-
/**
|
|
25
|
-
* @type {import('./lib/processors/jsdoc/apiIndexGenerator')}
|
|
26
|
-
*/
|
|
27
|
-
apiIndexGenerator: "./lib/processors/jsdoc/apiIndexGenerator",
|
|
28
|
-
/**
|
|
29
|
-
* @type {import('./lib/processors/jsdoc/jsdocGenerator')}
|
|
30
|
-
*/
|
|
31
|
-
jsdocGenerator: "./lib/processors/jsdoc/jsdocGenerator",
|
|
32
|
-
/**
|
|
33
|
-
* @type {import('./lib/processors/jsdoc/sdkTransformer')}
|
|
34
|
-
*/
|
|
35
|
-
sdkTransformer: "./lib/processors/jsdoc/sdkTransformer",
|
|
36
|
-
/**
|
|
37
|
-
* @type {import('./lib/processors/bootstrapHtmlTransformer')}
|
|
38
|
-
*/
|
|
39
|
-
bootstrapHtmlTransformer: "./lib/processors/bootstrapHtmlTransformer",
|
|
40
|
-
/**
|
|
41
|
-
* @type {import('./lib/processors/minifier')}
|
|
42
|
-
*/
|
|
43
|
-
minifier: "./lib/processors/minifier",
|
|
44
|
-
/**
|
|
45
|
-
* @type {import('./lib/processors/libraryLessGenerator')}
|
|
46
|
-
*/
|
|
47
|
-
libraryLessGenerator: "./lib/processors/libraryLessGenerator",
|
|
48
|
-
/**
|
|
49
|
-
* @type {import('./lib/processors/manifestCreator')}
|
|
50
|
-
*/
|
|
51
|
-
manifestCreator: "./lib/processors/manifestCreator",
|
|
52
|
-
/**
|
|
53
|
-
* @type {import('./lib/processors/nonAsciiEscaper')}
|
|
54
|
-
*/
|
|
55
|
-
nonAsciiEscaper: "./lib/processors/nonAsciiEscaper",
|
|
56
|
-
/**
|
|
57
|
-
* @type {import('./lib/processors/stringReplacer')}
|
|
58
|
-
*/
|
|
59
|
-
stringReplacer: "./lib/processors/stringReplacer",
|
|
60
|
-
/**
|
|
61
|
-
* @type {import('./lib/processors/themeBuilder')}
|
|
62
|
-
*/
|
|
63
|
-
themeBuilder: "./lib/processors/themeBuilder",
|
|
64
|
-
/**
|
|
65
|
-
* @type {import('./lib/processors/versionInfoGenerator')}
|
|
66
|
-
*/
|
|
67
|
-
versionInfoGenerator: "./lib/processors/versionInfoGenerator"
|
|
68
|
-
},
|
|
69
|
-
/**
|
|
70
|
-
* @public
|
|
71
|
-
* @alias module:@ui5/builder.tasks
|
|
72
|
-
* @namespace
|
|
73
|
-
*/
|
|
74
|
-
tasks: {
|
|
75
|
-
/**
|
|
76
|
-
* @type {import('./lib/tasks/bundlers/generateComponentPreload')}
|
|
77
|
-
*/
|
|
78
|
-
generateComponentPreload: "./lib/tasks/bundlers/generateComponentPreload",
|
|
79
|
-
/**
|
|
80
|
-
* @type {import('./lib/tasks/bundlers/generateFlexChangesBundle')}
|
|
81
|
-
*/
|
|
82
|
-
generateFlexChangesBundle: "./lib/tasks/bundlers/generateFlexChangesBundle",
|
|
83
|
-
/**
|
|
84
|
-
* @type {import('./lib/tasks/bundlers/generateLibraryPreload')}
|
|
85
|
-
*/
|
|
86
|
-
generateLibraryPreload: "./lib/tasks/bundlers/generateLibraryPreload",
|
|
87
|
-
/**
|
|
88
|
-
* @type {import('./lib/tasks/bundlers/generateManifestBundle')}
|
|
89
|
-
*/
|
|
90
|
-
generateManifestBundle: "./lib/tasks/bundlers/generateManifestBundle",
|
|
91
|
-
/**
|
|
92
|
-
* @type {import('./lib/tasks/bundlers/generateStandaloneAppBundle')}
|
|
93
|
-
*/
|
|
94
|
-
generateStandaloneAppBundle: "./lib/tasks/bundlers/generateStandaloneAppBundle",
|
|
95
|
-
/**
|
|
96
|
-
* @type {import('./lib/tasks/generateThemeDesignerResources')}
|
|
97
|
-
*/
|
|
98
|
-
generateThemeDesignerResources: "./lib/tasks/generateThemeDesignerResources",
|
|
99
|
-
/**
|
|
100
|
-
* @type {import('./lib/tasks/bundlers/generateBundle')}
|
|
101
|
-
*/
|
|
102
|
-
generateBundle: "./lib/tasks/bundlers/generateBundle",
|
|
103
|
-
/**
|
|
104
|
-
* @type {import('./lib/tasks/generateCachebusterInfo')}
|
|
105
|
-
*/
|
|
106
|
-
generateCachebusterInfo: "./lib/tasks/generateCachebusterInfo",
|
|
107
|
-
/**
|
|
108
|
-
* @type {import('./lib/tasks/buildThemes')}
|
|
109
|
-
*/
|
|
110
|
-
buildThemes: "./lib/tasks/buildThemes",
|
|
111
|
-
/**
|
|
112
|
-
* @type {import('./lib/tasks/minify')}
|
|
113
|
-
*/
|
|
114
|
-
minify: "./lib/tasks/minify",
|
|
115
|
-
/**
|
|
116
|
-
* @type {import('./lib/tasks/jsdoc/executeJsdocSdkTransformation')}
|
|
117
|
-
*/
|
|
118
|
-
executeJsdocSdkTransformation: "./lib/tasks/jsdoc/executeJsdocSdkTransformation",
|
|
119
|
-
/**
|
|
120
|
-
* @type {import('./lib/tasks/jsdoc/generateApiIndex')}
|
|
121
|
-
*/
|
|
122
|
-
generateApiIndex: "./lib/tasks/jsdoc/generateApiIndex",
|
|
123
|
-
/**
|
|
124
|
-
* @type {import('./lib/tasks/jsdoc/generateJsdoc')}
|
|
125
|
-
*/
|
|
126
|
-
generateJsdoc: "./lib/tasks/jsdoc/generateJsdoc",
|
|
127
|
-
/**
|
|
128
|
-
* @type {import('./lib/tasks/generateVersionInfo')}
|
|
129
|
-
*/
|
|
130
|
-
generateVersionInfo: "./lib/tasks/generateVersionInfo",
|
|
131
|
-
/**
|
|
132
|
-
* @type {import('./lib/tasks/escapeNonAsciiCharacters')}
|
|
133
|
-
*/
|
|
134
|
-
escapeNonAsciiCharacters: "./lib/tasks/escapeNonAsciiCharacters",
|
|
135
|
-
/**
|
|
136
|
-
* @type {import('./lib/tasks/replaceCopyright')}
|
|
137
|
-
*/
|
|
138
|
-
replaceCopyright: "./lib/tasks/replaceCopyright",
|
|
139
|
-
/**
|
|
140
|
-
* @type {import('./lib/tasks/replaceVersion')}
|
|
141
|
-
*/
|
|
142
|
-
replaceVersion: "./lib/tasks/replaceVersion",
|
|
143
|
-
/**
|
|
144
|
-
* @type {import('./lib/tasks/replaceBuildtime')}
|
|
145
|
-
*/
|
|
146
|
-
replaceBuildtime: "./lib/tasks/replaceBuildtime",
|
|
147
|
-
/**
|
|
148
|
-
* @type {import('./lib/tasks/transformBootstrapHtml')}
|
|
149
|
-
*/
|
|
150
|
-
transformBootstrapHtml: "./lib/tasks/transformBootstrapHtml",
|
|
151
|
-
/**
|
|
152
|
-
* @type {import('./lib/tasks/taskRepository')}
|
|
153
|
-
*/
|
|
154
|
-
taskRepository: "./lib/tasks/taskRepository",
|
|
155
|
-
}
|
|
156
|
-
};
|
|
157
|
-
|
|
158
|
-
function exportModules(exportRoot, modulePaths) {
|
|
159
|
-
for (const moduleName of Object.keys(modulePaths)) {
|
|
160
|
-
if (typeof modulePaths[moduleName] === "object") {
|
|
161
|
-
exportRoot[moduleName] = {};
|
|
162
|
-
exportModules(exportRoot[moduleName], modulePaths[moduleName]);
|
|
163
|
-
} else {
|
|
164
|
-
Object.defineProperty(exportRoot, moduleName, {
|
|
165
|
-
get() {
|
|
166
|
-
return require(modulePaths[moduleName]);
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
exportModules(module.exports, JSON.parse(JSON.stringify(module.exports)));
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
const posixPath = require("path").posix;
|
|
2
|
-
const yazl = require("yazl");
|
|
3
|
-
const resourceFactory = require("@ui5/fs").resourceFactory;
|
|
4
|
-
const log = require("@ui5/logger").getLogger("builder:processors:bundlers:manifestBundler");
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Repository to handle i18n resource files
|
|
8
|
-
*
|
|
9
|
-
* @private
|
|
10
|
-
*/
|
|
11
|
-
class I18nResourceList {
|
|
12
|
-
/**
|
|
13
|
-
* Constructor
|
|
14
|
-
*/
|
|
15
|
-
constructor() {
|
|
16
|
-
this.propertyFiles = new Map();
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Adds a i18n resource to the repository
|
|
21
|
-
*
|
|
22
|
-
* @param {string} directory Path to the i18n resource
|
|
23
|
-
* @param {module:@ui5/fs.Resource} resource i18n resource
|
|
24
|
-
*/
|
|
25
|
-
add(directory, resource) {
|
|
26
|
-
const normalizedDirectory = posixPath.normalize(directory);
|
|
27
|
-
if (!this.propertyFiles.has(normalizedDirectory)) {
|
|
28
|
-
this.propertyFiles.set(normalizedDirectory, [resource]);
|
|
29
|
-
} else {
|
|
30
|
-
this.propertyFiles.get(normalizedDirectory).push(resource);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Gets all registered i18n files within the provided path
|
|
36
|
-
*
|
|
37
|
-
* @param {string} directory Path to search for
|
|
38
|
-
* @returns {Array} Array of resources files
|
|
39
|
-
*/
|
|
40
|
-
get(directory) {
|
|
41
|
-
return this.propertyFiles.get(posixPath.normalize(directory)) || [];
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Creates a manifest bundle from the provided resources.
|
|
47
|
-
*
|
|
48
|
-
* @alias module:@ui5/builder.processors.manifestBundler
|
|
49
|
-
* @public
|
|
50
|
-
* @param {object} parameters Parameters
|
|
51
|
-
* @param {module:@ui5/fs.Resource[]} parameters.resources List of resources to be processed
|
|
52
|
-
* @param {object} parameters.options Options
|
|
53
|
-
* @param {string} parameters.options.namespace Namespace of the project
|
|
54
|
-
* @param {string} parameters.options.bundleName Name of the bundled zip file
|
|
55
|
-
* @param {string} parameters.options.propertiesExtension Extension name of the properties files, e.g. ".properties"
|
|
56
|
-
* @param {string} parameters.options.descriptor Descriptor name
|
|
57
|
-
* @returns {Promise<module:@ui5/fs.Resource[]>} Promise resolving with manifest bundle resources
|
|
58
|
-
*/
|
|
59
|
-
module.exports = ({resources, options: {namespace, bundleName, propertiesExtension, descriptor}}) => {
|
|
60
|
-
function bundleNameToUrl(bundleName, appId) {
|
|
61
|
-
if (!bundleName.startsWith(appId)) {
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
const relativeBundleName = bundleName.substring(appId.length + 1);
|
|
65
|
-
return relativeBundleName.replace(/\./g, "/") + propertiesExtension;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
function addDescriptorI18nInfos(descriptorI18nInfos, manifest) {
|
|
69
|
-
function addI18nInfo(i18nPath) {
|
|
70
|
-
if (i18nPath.startsWith("ui5:")) {
|
|
71
|
-
log.warn(`Using the ui5:// protocol for i18n bundles is currently not supported ('${i18nPath}' in ${manifest.path})`);
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
descriptorI18nInfos.set(
|
|
75
|
-
posixPath.join(posixPath.dirname(manifest.path), posixPath.dirname(i18nPath)),
|
|
76
|
-
posixPath.basename(i18nPath, propertiesExtension)
|
|
77
|
-
);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const content = JSON.parse(manifest.content);
|
|
81
|
-
const appI18n = content["sap.app"]["i18n"];
|
|
82
|
-
let bundleUrl;
|
|
83
|
-
// i18n section in sap.app can be either a string or an object with bundleUrl
|
|
84
|
-
if (typeof appI18n === "object") {
|
|
85
|
-
if (appI18n.bundleUrl) {
|
|
86
|
-
bundleUrl = appI18n.bundleUrl;
|
|
87
|
-
} else if (appI18n.bundleName) {
|
|
88
|
-
bundleUrl = bundleNameToUrl(appI18n.bundleName, content["sap.app"]["id"]);
|
|
89
|
-
}
|
|
90
|
-
} else if (typeof appI18n === "string") {
|
|
91
|
-
bundleUrl = appI18n;
|
|
92
|
-
} else {
|
|
93
|
-
bundleUrl = "i18n/i18n.properties";
|
|
94
|
-
}
|
|
95
|
-
if (bundleUrl) {
|
|
96
|
-
addI18nInfo(bundleUrl);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
if (typeof appI18n === "object" && Array.isArray(appI18n.enhanceWith)) {
|
|
100
|
-
appI18n.enhanceWith.forEach((enhanceWithEntry) => {
|
|
101
|
-
let bundleUrl;
|
|
102
|
-
if (enhanceWithEntry.bundleUrl) {
|
|
103
|
-
bundleUrl = enhanceWithEntry.bundleUrl;
|
|
104
|
-
} else if (enhanceWithEntry.bundleName) {
|
|
105
|
-
bundleUrl = bundleNameToUrl(enhanceWithEntry.bundleName, content["sap.app"]["id"]);
|
|
106
|
-
}
|
|
107
|
-
if (bundleUrl) {
|
|
108
|
-
addI18nInfo(bundleUrl);
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
return Promise.all(resources.map((resource) =>
|
|
115
|
-
resource.getBuffer().then((content) => {
|
|
116
|
-
const basename = posixPath.basename(resource.getPath());
|
|
117
|
-
return {
|
|
118
|
-
name: basename,
|
|
119
|
-
isManifest: basename === descriptor,
|
|
120
|
-
path: resource.getPath(),
|
|
121
|
-
content: content
|
|
122
|
-
};
|
|
123
|
-
})
|
|
124
|
-
)).then((resources) => {
|
|
125
|
-
const archiveContent = new Map();
|
|
126
|
-
const descriptorI18nInfos = new Map();
|
|
127
|
-
const i18nResourceList = new I18nResourceList();
|
|
128
|
-
|
|
129
|
-
resources.forEach((resource) => {
|
|
130
|
-
if (resource.isManifest) {
|
|
131
|
-
addDescriptorI18nInfos(descriptorI18nInfos, resource);
|
|
132
|
-
archiveContent.set(resource.path, resource.content);
|
|
133
|
-
} else {
|
|
134
|
-
const directory = posixPath.dirname(resource.path);
|
|
135
|
-
i18nResourceList.add(directory, resource);
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
descriptorI18nInfos.forEach((rootName, directory) => {
|
|
140
|
-
const i18nResources = i18nResourceList.get(directory)
|
|
141
|
-
.filter((resource) => resource.name.startsWith(rootName));
|
|
142
|
-
|
|
143
|
-
if (i18nResources.length) {
|
|
144
|
-
i18nResources.forEach((resource) => archiveContent.set(resource.path, resource.content));
|
|
145
|
-
} else {
|
|
146
|
-
log.warn(`Could not find any resources for i18n bundle '${directory}'`);
|
|
147
|
-
}
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
return archiveContent;
|
|
151
|
-
}).then((archiveContent) => new Promise((resolve) => {
|
|
152
|
-
const zip = new yazl.ZipFile();
|
|
153
|
-
const basePath = `/resources/${namespace}/`;
|
|
154
|
-
archiveContent.forEach((content, path) => {
|
|
155
|
-
if (!path.startsWith(basePath)) {
|
|
156
|
-
log.verbose(`Not bundling resource with path ${path} since it is not based on path ${basePath}`);
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
// Remove base path. Absolute paths are not allowed in ZIP files
|
|
160
|
-
const normalizedPath = path.replace(basePath, "");
|
|
161
|
-
zip.addBuffer(content, normalizedPath);
|
|
162
|
-
});
|
|
163
|
-
zip.end();
|
|
164
|
-
|
|
165
|
-
const pathPrefix = "/resources/" + namespace + "/";
|
|
166
|
-
const res = resourceFactory.createResource({
|
|
167
|
-
path: pathPrefix + bundleName,
|
|
168
|
-
stream: zip.outputStream
|
|
169
|
-
});
|
|
170
|
-
resolve([res]);
|
|
171
|
-
}));
|
|
172
|
-
};
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
const log = require("@ui5/logger").getLogger("builder:tasks:bundlers:generateManifestBundle");
|
|
2
|
-
const manifestBundler = require("../../processors/bundlers/manifestBundler");
|
|
3
|
-
const DESCRIPTOR = "manifest.json";
|
|
4
|
-
const PROPERTIES_EXT = ".properties";
|
|
5
|
-
const BUNDLE_NAME = "manifest-bundle.zip";
|
|
6
|
-
|
|
7
|
-
/* eslint "jsdoc/check-param-names": ["error", {"disableExtraPropertyReporting":true}] */
|
|
8
|
-
/**
|
|
9
|
-
* Task for manifestBundler.
|
|
10
|
-
*
|
|
11
|
-
* @public
|
|
12
|
-
* @alias module:@ui5/builder.tasks.generateManifestBundle
|
|
13
|
-
* @param {object} parameters Parameters
|
|
14
|
-
* @param {module:@ui5/fs.DuplexCollection} parameters.workspace DuplexCollection to read and write files
|
|
15
|
-
* @param {object} parameters.options Options
|
|
16
|
-
* @param {string} parameters.options.projectName Project name
|
|
17
|
-
* @param {string} parameters.options.projectNamespace Project namespace
|
|
18
|
-
* @returns {Promise<undefined>} Promise resolving with <code>undefined</code> once data has been written
|
|
19
|
-
*/
|
|
20
|
-
module.exports = async function({workspace, options = {}}) {
|
|
21
|
-
const {projectName} = options;
|
|
22
|
-
// Backward compatibility: "namespace" option got renamed to "projectNamespace"
|
|
23
|
-
const namespace = options.projectNamespace || options.namespace;
|
|
24
|
-
|
|
25
|
-
if (!projectName || !namespace) {
|
|
26
|
-
throw new Error("[generateManifestBundle]: One or more mandatory options not provided");
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const allResources = await workspace.byGlob(`/resources/${namespace}/**/{${DESCRIPTOR},*${PROPERTIES_EXT}}`);
|
|
30
|
-
if (allResources.length === 0) {
|
|
31
|
-
log.verbose(`Could not find a "${DESCRIPTOR}" file for project ${projectName}, ` +
|
|
32
|
-
`creation of "${BUNDLE_NAME}" is skipped!`);
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const processedResources = await manifestBundler({
|
|
37
|
-
resources: allResources,
|
|
38
|
-
options: {
|
|
39
|
-
descriptor: DESCRIPTOR,
|
|
40
|
-
propertiesExtension: PROPERTIES_EXT,
|
|
41
|
-
bundleName: BUNDLE_NAME,
|
|
42
|
-
namespace
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
await Promise.all(processedResources.map((resource) => {
|
|
47
|
-
return workspace.write(resource);
|
|
48
|
-
}));
|
|
49
|
-
};
|