Skip to content

Commit d24c3e1

Browse files
matz3flovogtd3xter666
authored
[ui5-server][BREAKING] Transform to native ESM (#501)
BREAKING CHANGE: This package has been transformed to native ESM. Therefore it no longer provides a CommonJS export. If your project uses CommonJS, it needs to be converted to ESM or use a dynamic import. For more information see also: - https://sap.github.io/ui5-tooling/updates/migrate-v3/ - https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c Co-authored-by: Florian Vogt <[email protected]> Co-authored-by: Yavor Ivanov <[email protected]>
1 parent 490901f commit d24c3e1

39 files changed

+2037
-2807
lines changed

packages/server/.eslintrc.js renamed to packages/server/.eslintrc.cjs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
module.exports = {
2+
"parserOptions": {
3+
"sourceType": "module",
4+
},
25
"env": {
36
"node": true,
47
"es2021": true
@@ -73,7 +76,8 @@ module.exports = {
7376
"settings": {
7477
"jsdoc": {
7578
"tagNamePreference": {
76-
"return": "returns"
79+
"return": "returns",
80+
"augments": "extends"
7781
}
7882
}
7983
},

packages/server/index.js

Lines changed: 0 additions & 35 deletions
This file was deleted.

packages/server/jsdoc-plugin.cjs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/*
2+
* This plugin fixes unexpected JSDoc behavior that prevents us from using types that start with an at-sign (@).
3+
* JSDoc doesn't see "{@" as a valid type expression, probably as there's also {@link ...}.
4+
*/
5+
exports.handlers = {
6+
jsdocCommentFound: function(e) {
7+
e.comment = e.comment.replace(/{@ui5\//g, "{ @ui5/");
8+
}
9+
};

packages/server/jsdoc-plugin.js

Lines changed: 0 additions & 13 deletions
This file was deleted.

packages/server/jsdoc.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
"allowUnknownTags": false
44
},
55
"source": {
6-
"include": ["README.md", "index.js"],
6+
"include": ["README.md"],
77
"includePattern": ".+\\.js$",
88
"excludePattern": "(node_modules(\\\\|/))"
99
},
1010
"plugins": [
11-
"./jsdoc-plugin"
11+
"./jsdoc-plugin.cjs"
1212
],
1313
"opts": {
1414
"encoding": "utf8",

packages/server/lib/middleware/MiddlewareManager.js

Lines changed: 47 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
1-
const middlewareRepository = require("./middlewareRepository");
2-
const MiddlewareUtil = require("./MiddlewareUtil");
1+
import middlewareRepository from "./middlewareRepository.js";
2+
import MiddlewareUtil from "./MiddlewareUtil.js";
33
const hasOwn = Function.prototype.call.bind(Object.prototype.hasOwnProperty);
44

55
/**
6-
*
7-
* @typedef {object} middlewareResources
8-
* @property {module:@ui5/fs.AbstractReader} all Reader or Collection to read resources of the
6+
* @private
7+
* @typedef {object} MiddlewareResources
8+
* @property {@ui5/fs.AbstractReader} all Reader or Collection to read resources of the
99
* root project and its dependencies
10-
* @property {module:@ui5/fs.AbstractReader} rootProject Reader or Collection to read resources of
10+
* @property {@ui5/fs.AbstractReader} rootProject Reader or Collection to read resources of
1111
* the project the server is started in
12+
* @memberof @ui5/server/internal/MiddlewareManager
1213
*/
1314

1415
/**
16+
* The MiddlewareManager
1517
*
16-
*
17-
* @memberof module:@ui5/server.middleware
18+
* @private
19+
* @class
20+
* @alias @ui5/server/internal/MiddlewareManager
1821
*/
1922
class MiddlewareManager {
2023
constructor({graph, resources, options = {
@@ -33,6 +36,14 @@ class MiddlewareManager {
3336
this.middlewareUtil = new MiddlewareUtil();
3437
}
3538

39+
/**
40+
* Applies the middleware to
41+
*
42+
* @private
43+
* @param {object} app The express application object
44+
* @returns {Promise<Array<undefined>>} Promise resolving to an Array with a length of the number
45+
* of added middlewares. The entries of the Array have a value of <code>undefined</code>.
46+
*/
3647
async applyMiddleware(app) {
3748
await this.addStandardMiddleware();
3849
await this.addCustomMiddleware();
@@ -43,6 +54,18 @@ class MiddlewareManager {
4354
});
4455
}
4556

57+
/**
58+
* Adds the given middleware configuration
59+
*
60+
* @private
61+
* @param {string} configuredMiddlewareName The name of the middleware
62+
* @param {object} [options] The Options of the middleware
63+
* @param {object} [options.customMiddleware] The custom middleware
64+
* @param {Function} [options.wrapperCallback] Callback called when middleware is called
65+
* @param {string} [options.mountPath="/"] The path hosting the middleware
66+
* @param {string} [options.beforeMiddleware] The name of the middleware called before the added middleware
67+
* @param {string} [options.afterMiddleware] The name of the middleware called after the added middleware
68+
*/
4669
async addMiddleware(configuredMiddlewareName, {
4770
customMiddleware, wrapperCallback, mountPath = "/",
4871
beforeMiddleware, afterMiddleware
@@ -51,7 +74,7 @@ class MiddlewareManager {
5174
if (customMiddleware) {
5275
middlewareCallback = customMiddleware;
5376
} else {
54-
const middlewareInfo = middlewareRepository.getMiddleware(configuredMiddlewareName);
77+
const middlewareInfo = await middlewareRepository.getMiddleware(configuredMiddlewareName);
5578
if (wrapperCallback) {
5679
middlewareCallback = wrapperCallback(middlewareInfo);
5780
} else {
@@ -98,6 +121,12 @@ class MiddlewareManager {
98121
};
99122
}
100123

124+
/**
125+
* Adds all registered standard middlewares
126+
*
127+
* @private
128+
* @returns {Promise} Resolving to <code>undefined</code> once all standard middlewares are added
129+
*/
101130
async addStandardMiddleware() {
102131
await this.addMiddleware("csp", {
103132
wrapperCallback: ({middleware: cspModule}) => {
@@ -214,6 +243,12 @@ class MiddlewareManager {
214243
});
215244
}
216245

246+
/**
247+
* Adds all registered custom middlewares
248+
*
249+
* @private
250+
* @returns {Promise} Resolving to <code>undefined</code> once all custom middlewares are added
251+
*/
217252
async addCustomMiddleware() {
218253
const project = this.graph.getRoot();
219254
const projectCustomMiddleware = project.getCustomMiddleware();
@@ -238,7 +273,7 @@ class MiddlewareManager {
238273
`defines neither a "beforeMiddleware" nor an "afterMiddleware" parameter. One must be defined.`);
239274
}
240275
await this.addMiddleware(middlewareDef.name, {
241-
customMiddleware: ({resources, middlewareUtil}) => {
276+
customMiddleware: async ({resources, middlewareUtil}) => {
242277
const customMiddleware = this.graph.getExtension(middlewareDef.name);
243278
const specVersion = customMiddleware.getSpecVersion();
244279
const options = {
@@ -254,7 +289,7 @@ class MiddlewareManager {
254289
// Supply interface to MiddlewareUtil instance starting with specVersion 2.0
255290
params.middlewareUtil = middlewareUtil.getInterface(specVersion);
256291
}
257-
return customMiddleware.getMiddleware()(params);
292+
return (await customMiddleware.getMiddleware())(params);
258293
},
259294
mountPath: middlewareDef.mountPath,
260295
beforeMiddleware: middlewareDef.beforeMiddleware,
@@ -264,4 +299,4 @@ class MiddlewareManager {
264299
}
265300
}
266301

267-
module.exports = MiddlewareManager;
302+
export default MiddlewareManager;

packages/server/lib/middleware/MiddlewareUtil.js

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import parseurl from "parseurl";
2+
import mime from "mime-types";
3+
14
/**
25
* Convenience functions for UI5 Server middleware.
36
* An instance of this class is passed to every standard UI5 Server middleware.
@@ -8,7 +11,9 @@
811
* version defined for the extension.
912
*
1013
* @public
11-
* @memberof module:@ui5/server.middleware
14+
* @class
15+
* @alias @ui5/server/middleware/MiddlewareUtil
16+
* @hideconstructor
1217
*/
1318
class MiddlewareUtil {
1419
/**
@@ -54,7 +59,6 @@ class MiddlewareUtil {
5459
* @public
5560
*/
5661
getPathname(req) {
57-
const parseurl = require("parseurl");
5862
let {pathname} = parseurl(req);
5963
pathname = decodeURIComponent(pathname);
6064
return pathname;
@@ -75,7 +79,7 @@ class MiddlewareUtil {
7579
* @property {string} type Detected content-type for the given resource path
7680
* @property {string} charset Default charset for the detected content-type
7781
* @property {string} contentType Calculated content-type header value
78-
* @memberof module:@ui5/server.middleware.MiddlewareUtil
82+
* @memberof @ui5/server/middleware/MiddlewareUtil
7983
*/
8084
/**
8185
* Returns MIME information derived from a given resource path.
@@ -84,11 +88,10 @@ class MiddlewareUtil {
8488
* <b>Specification Version 2.0 and above</b>.
8589
*
8690
* @param {object} resourcePath
87-
* @returns {module:@ui5/server.middleware.MiddlewareUtil.MimeInfo}
91+
* @returns {@ui5/server/middleware/MiddlewareUtil.MimeInfo}
8892
* @public
8993
*/
9094
getMimeInfo(resourcePath) {
91-
const mime = require("mime-types");
9295
const type = mime.lookup(resourcePath) || "application/octet-stream";
9396
const charset = mime.charset(type);
9497
return {
@@ -99,4 +102,4 @@ class MiddlewareUtil {
99102
}
100103
}
101104

102-
module.exports = MiddlewareUtil;
105+
export default MiddlewareUtil;
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
const ui5connect = require("connect-openui5");
1+
import ui5connect from "connect-openui5";
22

33
function createMiddleware() {
44
return ui5connect.proxy({
55
secure: false
66
});
77
}
88

9-
module.exports = createMiddleware;
9+
export default createMiddleware;

packages/server/lib/middleware/csp.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
const parseurl = require("parseurl");
2-
const Router = require("router");
3-
const querystring = require("querystring");
1+
import parseurl from "parseurl";
2+
import Router from "router";
3+
import querystring from "node:querystring";
4+
import logger from "@ui5/logger";
5+
import bodyParser from "body-parser";
46

5-
const log = require("@ui5/logger").getLogger("server:middleware:csp");
7+
const log = logger.getLogger("server:middleware:csp");
68

79
const HEADER_CONTENT_SECURITY_POLICY = "Content-Security-Policy";
810
const HEADER_CONTENT_SECURITY_POLICY_REPORT_ONLY = "Content-Security-Policy-Report-Only";
@@ -77,7 +79,6 @@ function createMiddleware(sCspUrlParameterName, oConfig) {
7779
// .csplog
7880
// body parser is required to parse csp-report in body (json)
7981
if (serveCSPReports) {
80-
const bodyParser = require("body-parser");
8182
router.post("/.ui5/csp/report.csplog", bodyParser.json({type: "application/csp-report"}));
8283
}
8384
router.post("/.ui5/csp/report.csplog", function(req, res, next) {
@@ -196,4 +197,4 @@ function createMiddleware(sCspUrlParameterName, oConfig) {
196197
return router;
197198
}
198199

199-
module.exports = createMiddleware;
200+
export default createMiddleware;

packages/server/lib/middleware/discovery.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,4 +112,4 @@ function createMiddleware({resources}) {
112112
};
113113
}
114114

115-
module.exports = createMiddleware;
115+
export default createMiddleware;

0 commit comments

Comments
 (0)