Skip to content

Commit 2db80bf

Browse files
Merge branch 'master' into remove-global-types
2 parents b18521d + 94e70f3 commit 2db80bf

File tree

11 files changed

+1096
-678
lines changed

11 files changed

+1096
-678
lines changed

package-lock.json

Lines changed: 971 additions & 588 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
],
4949
"devDependencies": {
5050
"@types/accept-language-parser": "1.5.2",
51-
"@types/async": "3.2.8",
51+
"@types/async": "3.2.9",
5252
"@types/colors": "1.2.1",
5353
"@types/cross-spawn": "6.0.2",
5454
"@types/errorhandler": "1.5.0",
@@ -58,24 +58,24 @@
5858
"@types/lodash": "4.14.176",
5959
"@types/morgan": "1.9.3",
6060
"@types/multer": "1.4.7",
61-
"@types/node": "16.11.3",
61+
"@types/node": "16.11.6",
6262
"@types/parse-author": "2.0.1",
6363
"@types/read": "0.0.29",
6464
"@types/response-time": "2.3.5",
6565
"@types/semver": "7.3.9",
6666
"@types/targz": "1.0.1",
6767
"@types/yargs": "17.0.4",
68-
"@typescript-eslint/eslint-plugin": "5.1.0",
69-
"@typescript-eslint/parser": "5.1.0",
68+
"@typescript-eslint/eslint-plugin": "5.2.0",
69+
"@typescript-eslint/parser": "5.2.0",
7070
"chai": "4.3.4",
7171
"chalk": "4.1.2",
72-
"eslint": "8.0.1",
72+
"eslint": "8.1.0",
7373
"eslint-config-prettier": "8.3.0",
7474
"eslint-plugin-prettier": "4.0.0",
7575
"glob": "7.2.0",
7676
"husky": "7.0.4",
7777
"injectr": "0.5.1",
78-
"lint-staged": "11.2.3",
78+
"lint-staged": "11.2.6",
7979
"minimist": "1.2.5",
8080
"mocha": "9.1.3",
8181
"node-emoji": "1.11.0",
@@ -84,7 +84,7 @@
8484
"semver-sort": "0.0.4",
8585
"simple-git": "2.47.0",
8686
"sinon": "11.1.2",
87-
"ts-node": "10.3.1",
87+
"ts-node": "10.4.0",
8888
"type-fest": "2.5.1",
8989
"typescript": "4.4.4"
9090
},
@@ -109,18 +109,18 @@
109109
"multer": "1.4.3",
110110
"nice-cache": "0.0.5",
111111
"oc-client": "4.0.1",
112-
"oc-client-browser": "1.5.4",
112+
"oc-client-browser": "1.5.5",
113113
"oc-empty-response-handler": "1.0.2",
114-
"oc-get-unix-utc-timestamp": "1.0.5",
115-
"oc-s3-storage-adapter": "1.1.6",
116-
"oc-storage-adapters-utils": "1.0.4",
117-
"oc-template-es6": "1.0.6",
118-
"oc-template-es6-compiler": "1.1.13",
119-
"oc-template-handlebars": "6.0.24",
120-
"oc-template-handlebars-compiler": "6.2.18",
121-
"oc-template-jade": "7.0.5",
122-
"oc-template-jade-compiler": "7.0.6",
123-
"open": "8.3.0",
114+
"oc-get-unix-utc-timestamp": "1.0.6",
115+
"oc-s3-storage-adapter": "1.2.0",
116+
"oc-storage-adapters-utils": "1.1.0",
117+
"oc-template-es6": "1.0.7",
118+
"oc-template-es6-compiler": "1.2.1",
119+
"oc-template-handlebars": "6.0.25",
120+
"oc-template-handlebars-compiler": "6.3.1",
121+
"oc-template-jade": "7.0.6",
122+
"oc-template-jade-compiler": "7.1.1",
123+
"open": "8.4.0",
124124
"parse-author": "2.0.0",
125125
"read": "1.0.7",
126126
"require-package-name": "2.0.1",

src/cli/facade/dev.ts

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -124,19 +124,16 @@ const dev =
124124
const mockedPlugins = getMockedPlugins(logger, componentsDir);
125125
mockedPlugins.forEach(p => registry.register(p));
126126

127-
registry.on(
128-
'request',
129-
(data: { errorCode: string; errorDetails: string }) => {
130-
if (data.errorCode === 'PLUGIN_MISSING_FROM_REGISTRY') {
131-
logger.err(
132-
cliErrors.PLUGIN_MISSING_FROM_REGISTRY(
133-
data.errorDetails,
134-
colors.blue(strings.commands.cli.MOCK_PLUGIN)
135-
)
136-
);
137-
}
127+
registry.on('request', data => {
128+
if (data.errorCode === 'PLUGIN_MISSING_FROM_REGISTRY') {
129+
logger.err(
130+
cliErrors.PLUGIN_MISSING_FROM_REGISTRY(
131+
data.errorDetails!,
132+
colors.blue(strings.commands.cli.MOCK_PLUGIN)
133+
)
134+
);
138135
}
139-
);
136+
});
140137
};
141138

142139
logger.warn(cliMessages.SCANNING_COMPONENTS, true);

src/registry/domain/components-cache/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import _ from 'lodash';
22
import getComponentsList from './components-list';
3-
import * as eventsHandler from '../events-handler';
3+
import eventsHandler from '../events-handler';
44
import getUnixUTCTimestamp from 'oc-get-unix-utc-timestamp';
55
import { Cdn, ComponentsList, Config } from '../../../types';
66

src/registry/domain/components-details.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import async from 'async';
22
import _ from 'lodash';
3-
import * as eventsHandler from './events-handler';
3+
import eventsHandler from './events-handler';
44
import getUnixUTCTimestamp from 'oc-get-unix-utc-timestamp';
55
import {
66
Cdn,
@@ -16,7 +16,10 @@ export default function componentsDetails(conf: Config, cdn: Cdn) {
1616
message: string | Error,
1717
callback: (code: string) => void
1818
) => {
19-
eventsHandler.fire('error', { code, message });
19+
eventsHandler.fire('error', {
20+
code,
21+
message: (message as Error)?.message ?? message
22+
});
2023
return callback(code);
2124
};
2225

src/registry/domain/events-handler.ts

Lines changed: 73 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,86 @@
1+
import { IncomingHttpHeaders } from 'http';
12
import strings from '../../resources';
23

34
type Subscription<T = any> = (data: T) => void;
45
let subscriptions: Record<string, Array<Subscription>> = {};
56

6-
export function fire(eventName: string, eventData: unknown): void {
7-
if (subscriptions[eventName]) {
8-
subscriptions[eventName].forEach(callback => {
9-
callback(eventData);
10-
});
11-
}
7+
export interface RequestData {
8+
body: any;
9+
duration: number;
10+
headers: IncomingHttpHeaders;
11+
method: string;
12+
path: string;
13+
relativeUrl: string;
14+
query: Record<string, any>;
15+
url: string;
16+
statusCode: number;
17+
errorDetails?: string;
18+
errorCode?: string;
1219
}
1320

14-
export function on(eventName: string, callback: Subscription): void {
15-
if (typeof callback !== 'function') {
16-
throw strings.errors.registry.CONFIGURATION_ONREQUEST_MUST_BE_FUNCTION;
17-
}
21+
type Events = {
22+
error: { code: string; message: string };
23+
start: unknown;
24+
'cache-poll': number;
25+
request: RequestData;
26+
'component-retrieved': {
27+
headers: IncomingHttpHeaders;
28+
name: string;
29+
parameters: IncomingHttpHeaders;
30+
requestVersion: string;
31+
duration: number;
32+
};
33+
};
1834

19-
if (!subscriptions[eventName]) {
20-
subscriptions[eventName] = [];
21-
}
35+
type EventsHandler = {
36+
fire<T extends keyof Events>(eventName: T, data: Events[T]): void;
37+
on<T extends keyof Events>(
38+
eventName: T,
39+
listener: Subscription<Events[T]>
40+
): void;
41+
off<T extends keyof Events>(
42+
eventName: T,
43+
listener: Subscription<Events[T]>
44+
): void;
45+
reset(): void;
46+
};
2247

23-
subscriptions[eventName].push(callback);
24-
}
48+
const eventsHandler: EventsHandler = {
49+
fire(eventName: string, eventData: unknown): void {
50+
if (subscriptions[eventName]) {
51+
subscriptions[eventName].forEach(callback => {
52+
callback(eventData);
53+
});
54+
}
55+
},
2556

26-
export function off(eventName: string, callback: Subscription): void {
27-
if (typeof callback !== 'function') {
28-
throw strings.errors.registry.CONFIGURATION_OFFREQUEST_MUST_BE_FUNCTION;
29-
}
57+
on(eventName: string, callback: Subscription): void {
58+
if (typeof callback !== 'function') {
59+
throw strings.errors.registry.CONFIGURATION_ONREQUEST_MUST_BE_FUNCTION;
60+
}
61+
62+
if (!subscriptions[eventName]) {
63+
subscriptions[eventName] = [];
64+
}
3065

31-
if (subscriptions[eventName]) {
32-
subscriptions[eventName] = subscriptions[eventName].filter(
33-
sub => sub !== callback
34-
);
66+
subscriptions[eventName].push(callback);
67+
},
68+
69+
off(eventName: string, callback: Subscription): void {
70+
if (typeof callback !== 'function') {
71+
throw strings.errors.registry.CONFIGURATION_OFFREQUEST_MUST_BE_FUNCTION;
72+
}
73+
74+
if (subscriptions[eventName]) {
75+
subscriptions[eventName] = subscriptions[eventName].filter(
76+
sub => sub !== callback
77+
);
78+
}
79+
},
80+
81+
reset(): void {
82+
subscriptions = {};
3583
}
36-
}
84+
};
3785

38-
export function reset(): void {
39-
subscriptions = {};
40-
}
86+
export default eventsHandler;

src/registry/index.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import http from 'http';
55
import _ from 'lodash';
66

77
import appStart from './app-start';
8-
import * as eventsHandler from './domain/events-handler';
8+
import eventsHandler from './domain/events-handler';
99
import * as middleware from './middleware';
1010
import * as pluginsInitialiser from './domain/plugins-initialiser';
1111
import Repository from './domain/repository';
@@ -124,9 +124,12 @@ export default function registry(inputOptions: Input) {
124124
callback(null, { app, server });
125125
});
126126

127-
server.on('error', message => {
128-
eventsHandler.fire('error', { code: 'EXPRESS_ERROR', message });
129-
callback(message, undefined as any);
127+
server.on('error', error => {
128+
eventsHandler.fire('error', {
129+
code: 'EXPRESS_ERROR',
130+
message: error?.message ?? String(error)
131+
});
132+
callback(error, undefined as any);
130133
});
131134
}
132135
);

src/registry/middleware/request-handler.ts

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,11 @@
11
import { Request, RequestHandler, Response } from 'express';
2-
import { IncomingHttpHeaders } from 'http';
32
import responseTime from 'response-time';
43

5-
import * as eventsHandler from '../domain/events-handler';
6-
7-
interface ResponseTimeData {
8-
body: any;
9-
duration: number;
10-
headers: IncomingHttpHeaders;
11-
method: string;
12-
path: string;
13-
relativeUrl: string;
14-
query: Record<string, any>;
15-
url: string;
16-
statusCode: number;
17-
errorDetails?: string;
18-
errorCode?: string;
19-
}
4+
import eventsHandler, { RequestData } from '../domain/events-handler';
205

216
export default function requestHandler(): RequestHandler {
227
return responseTime((req: Request, res: Response, time) => {
23-
const data: ResponseTimeData = {
8+
const data: RequestData = {
249
body: req.body,
2510
duration: parseInt(String(time * 1000)),
2611
headers: req.headers,
@@ -32,12 +17,12 @@ export default function requestHandler(): RequestHandler {
3217
statusCode: res.statusCode
3318
};
3419

35-
if ((res as any).errorDetails) {
36-
data.errorDetails = (res as any).errorDetails;
20+
if (res.errorDetails) {
21+
data.errorDetails = res.errorDetails;
3722
}
3823

39-
if ((res as any).errorCode) {
40-
data.errorCode = (res as any).errorCode;
24+
if (res.errorCode) {
25+
data.errorCode = res.errorCode;
4126
}
4227

4328
eventsHandler.fire('request', data);

src/registry/routes/helpers/get-component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import vm from 'vm';
77
import _ from 'lodash';
88

99
import applyDefaultValues from './apply-default-values';
10-
import * as eventsHandler from '../../domain/events-handler';
10+
import eventsHandler from '../../domain/events-handler';
1111
import GetComponentRetrievingInfo from './get-component-retrieving-info';
1212
import * as getComponentFallback from './get-component-fallback';
1313
import isTemplateLegacy from '../../../utils/is-template-legacy';

src/registry/routes/static-redirector.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import fs from 'fs-extra';
22
import path from 'path';
33

4-
import { getFileInfo } from 'oc-storage-adapters-utils';
4+
import storageUtils from 'oc-storage-adapters-utils';
55
import { Request, Response } from 'express';
66
import { Repository } from '../../types';
77

@@ -57,7 +57,7 @@ export default function staticRedirector(repository: Repository) {
5757
}
5858

5959
const fileStream = fs.createReadStream(filePath);
60-
const fileInfo = getFileInfo(filePath);
60+
const fileInfo = storageUtils.getFileInfo(filePath);
6161

6262
if (fileInfo.mimeType) {
6363
res.set('Content-Type', fileInfo.mimeType);

0 commit comments

Comments
 (0)