@koeroesi86/node-webserver 22.3.132-5e488e1 → 26.10.36827003109-master
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/README.md +6 -4
- package/dist/configuration.example.d.ts +29 -0
- package/dist/configuration.example.js +37 -0
- package/dist/configuration.example.js.map +1 -0
- package/dist/constants/index.d.ts +4 -0
- package/dist/constants/index.js +17 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/middlewares/accessLogs.d.ts +5 -0
- package/dist/middlewares/accessLogs.js +49 -0
- package/dist/middlewares/accessLogs.js.map +1 -0
- package/dist/middlewares/lambda.d.ts +4 -0
- package/dist/middlewares/lambda.js +24 -0
- package/dist/middlewares/lambda.js.map +1 -0
- package/dist/middlewares/proxy.d.ts +4 -0
- package/dist/middlewares/proxy.js +35 -0
- package/dist/middlewares/proxy.js.map +1 -0
- package/dist/middlewares/staticWorker.d.ts +3 -0
- package/dist/middlewares/staticWorker.js +164 -0
- package/dist/middlewares/staticWorker.js.map +1 -0
- package/dist/middlewares/stdoutListener.d.ts +9 -0
- package/dist/middlewares/stdoutListener.js +32 -0
- package/dist/middlewares/stdoutListener.js.map +1 -0
- package/dist/scripts/server.d.ts +1 -0
- package/dist/scripts/server.js +21 -0
- package/dist/scripts/server.js.map +1 -0
- package/dist/types.d.ts +74 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/exitHandler.d.ts +3 -0
- package/dist/utils/exitHandler.js +51 -0
- package/dist/utils/exitHandler.js.map +1 -0
- package/dist/utils/fileDriver.d.ts +6 -0
- package/dist/utils/fileDriver.js +13 -0
- package/dist/utils/fileDriver.js.map +1 -0
- package/dist/utils/getDate.d.ts +2 -0
- package/dist/utils/getDate.js +9 -0
- package/dist/utils/getDate.js.map +1 -0
- package/dist/utils/getURL.d.ts +2 -0
- package/dist/utils/getURL.js +12 -0
- package/dist/utils/getURL.js.map +1 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.js +36 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/parseArgv.d.ts +5 -0
- package/dist/utils/parseArgv.js +36 -0
- package/dist/utils/parseArgv.js.map +1 -0
- package/dist/utils/ports.d.ts +6 -0
- package/dist/utils/ports.js +38 -0
- package/dist/utils/ports.js.map +1 -0
- package/dist/utils/serializer.d.ts +5 -0
- package/dist/utils/serializer.js +8 -0
- package/dist/utils/serializer.js.map +1 -0
- package/dist/utils/setupChildListener.d.ts +3 -0
- package/dist/utils/setupChildListener.js +30 -0
- package/dist/utils/setupChildListener.js.map +1 -0
- package/dist/utils/setupChildListeners.d.ts +3 -0
- package/dist/utils/setupChildListeners.js +15 -0
- package/dist/utils/setupChildListeners.js.map +1 -0
- package/dist/utils/setupSecureContexts.d.ts +3 -0
- package/dist/utils/setupSecureContexts.js +39 -0
- package/dist/utils/setupSecureContexts.js.map +1 -0
- package/dist/utils/setupStatsHandler.d.ts +4 -0
- package/dist/utils/setupStatsHandler.js +59 -0
- package/dist/utils/setupStatsHandler.js.map +1 -0
- package/dist/utils/setupVirtualHosts.d.ts +4 -0
- package/dist/utils/setupVirtualHosts.js +71 -0
- package/dist/utils/setupVirtualHosts.js.map +1 -0
- package/dist/utils/startServer.d.ts +7 -0
- package/dist/utils/startServer.js +59 -0
- package/dist/utils/startServer.js.map +1 -0
- package/dist/utils/storage.d.ts +15 -0
- package/dist/utils/storage.js +45 -0
- package/dist/utils/storage.js.map +1 -0
- package/examples/exampleLambda.js +3 -3
- package/examples/staticServer.js +2 -2
- package/examples/websocket/exampleWorker.js +1 -1
- package/logs/.gitkeep +0 -0
- package/package.json +32 -11
- package/requests/.gitkeep +0 -0
- package/responses/.gitkeep +0 -0
- package/tmp/.gitkeep +0 -0
- package/.travis.yml +0 -19
- package/configuration.example.js +0 -36
- package/constants/index.js +0 -14
- package/index.js +0 -5
- package/jest.config.js +0 -18
- package/middlewares/accessLogs.js +0 -47
- package/middlewares/lambda.js +0 -18
- package/middlewares/proxy.js +0 -45
- package/middlewares/staticWorker.js +0 -177
- package/middlewares/stdoutListener.js +0 -33
- package/scripts/server.js +0 -16
- package/scripts/tests.js +0 -22
- package/scripts/version.js +0 -9
- package/utils/exitHandler.js +0 -58
- package/utils/fileDriver.js +0 -22
- package/utils/getDate.js +0 -3
- package/utils/getURL.js +0 -13
- package/utils/logger.js +0 -48
- package/utils/parseArgv.js +0 -38
- package/utils/ports.js +0 -49
- package/utils/ports.test.js +0 -30
- package/utils/serializer.js +0 -4
- package/utils/setupChildListener.js +0 -27
- package/utils/setupChildListeners.js +0 -11
- package/utils/setupSecureContexts.js +0 -40
- package/utils/setupStatsHandler.js +0 -90
- package/utils/setupVirtualHosts.js +0 -64
- package/utils/startServer.js +0 -80
- package/utils/storage.js +0 -78
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ This package brings ability to deploy webapps a lot easier. Just copy [configura
|
|
|
4
4
|
|
|
5
5
|
### Dependencies to run
|
|
6
6
|
* [NodeJS](https://nodejs.org/en/)
|
|
7
|
-
* [
|
|
7
|
+
* [pnpm](https://pnpm.io/) (`corepack enable`)
|
|
8
8
|
* For Windows usage
|
|
9
9
|
1. [Python](https://www.python.org/)
|
|
10
10
|
1. [Visual C++ Build Tools](https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2017)
|
|
@@ -19,12 +19,14 @@ This package brings ability to deploy webapps a lot easier. Just copy [configura
|
|
|
19
19
|
|
|
20
20
|
Please enter in a console/terminal:
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
pnpm install
|
|
23
|
+
pnpm start
|
|
24
|
+
|
|
25
|
+
`pnpm start` compiles the TypeScript sources in `src/` to `dist/` and restarts on changes. `pnpm build` creates the published `dist/` output once, `pnpm test` runs the Jest suite and `pnpm lint` checks formatting.
|
|
24
26
|
|
|
25
27
|
|
|
26
28
|
### Build
|
|
27
29
|
|
|
28
30
|
TODO: Set up tests for build
|
|
29
31
|
|
|
30
|
-
[](https://github.com/Koeroesi86/node-webserver/actions/workflows/publish.yml)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
declare const configuration: {
|
|
2
|
+
fileLogPath: string;
|
|
3
|
+
logLevels: {
|
|
4
|
+
system: true;
|
|
5
|
+
info: true;
|
|
6
|
+
success: true;
|
|
7
|
+
error: true;
|
|
8
|
+
warning: true;
|
|
9
|
+
};
|
|
10
|
+
portHttp: number;
|
|
11
|
+
portHttps: number;
|
|
12
|
+
portLookup: {
|
|
13
|
+
from: number;
|
|
14
|
+
to: number;
|
|
15
|
+
address: string;
|
|
16
|
+
};
|
|
17
|
+
statsDomain: string;
|
|
18
|
+
statsRefreshInterval: number;
|
|
19
|
+
servers: {
|
|
20
|
+
hostname: string;
|
|
21
|
+
protocol: string;
|
|
22
|
+
type: "worker";
|
|
23
|
+
options: {
|
|
24
|
+
root: string;
|
|
25
|
+
index: string[];
|
|
26
|
+
};
|
|
27
|
+
}[];
|
|
28
|
+
};
|
|
29
|
+
export = configuration;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const path_1 = require("path");
|
|
3
|
+
const constants_1 = require("./constants");
|
|
4
|
+
const configuration = {
|
|
5
|
+
fileLogPath: (0, path_1.resolve)(constants_1.PACKAGE_ROOT, './logs/'),
|
|
6
|
+
logLevels: {
|
|
7
|
+
system: true,
|
|
8
|
+
info: true,
|
|
9
|
+
success: true,
|
|
10
|
+
error: true,
|
|
11
|
+
warning: true,
|
|
12
|
+
},
|
|
13
|
+
portHttp: 80,
|
|
14
|
+
portHttps: 443,
|
|
15
|
+
portLookup: {
|
|
16
|
+
from: 3000,
|
|
17
|
+
to: 3010,
|
|
18
|
+
address: 'localhost',
|
|
19
|
+
},
|
|
20
|
+
statsDomain: 'stats.localhost', // set to false to disable
|
|
21
|
+
statsRefreshInterval: 10000,
|
|
22
|
+
servers: [
|
|
23
|
+
{
|
|
24
|
+
hostname: 'web.localhost',
|
|
25
|
+
protocol: 'http',
|
|
26
|
+
// key: resolve(__dirname, './.certificates/localhost/privkey1.pem'),
|
|
27
|
+
// cert: resolve(__dirname, './.certificates/localhost/cert1.pem'),
|
|
28
|
+
type: 'worker', // 'child'|'lambda'|'worker'
|
|
29
|
+
options: {
|
|
30
|
+
root: (0, path_1.resolve)(constants_1.PACKAGE_ROOT, 'examples'),
|
|
31
|
+
index: ['exampleWorker.js'],
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
module.exports = configuration;
|
|
37
|
+
//# sourceMappingURL=configuration.example.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configuration.example.js","sourceRoot":"","sources":["../src/configuration.example.ts"],"names":[],"mappings":";AAAA,+BAA+B;AAC/B,2CAA2C;AAG3C,MAAM,aAAa,GAAG;IACpB,WAAW,EAAE,IAAA,cAAO,EAAC,wBAAY,EAAE,SAAS,CAAC;IAC7C,SAAS,EAAE;QACT,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,IAAI;KACd;IACD,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,GAAG;IACd,UAAU,EAAE;QACV,IAAI,EAAE,IAAI;QACV,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,WAAW;KACrB;IACD,WAAW,EAAE,iBAAiB,EAAE,0BAA0B;IAC1D,oBAAoB,EAAE,KAAK;IAC3B,OAAO,EAAE;QACP;YACE,QAAQ,EAAE,eAAe;YACzB,QAAQ,EAAE,MAAM;YAChB,qEAAqE;YACrE,mEAAmE;YACnE,IAAI,EAAE,QAAQ,EAAE,4BAA4B;YAC5C,OAAO,EAAE;gBACP,IAAI,EAAE,IAAA,cAAO,EAAC,wBAAY,EAAE,UAAU,CAAC;gBACvC,KAAK,EAAE,CAAC,kBAAkB,CAAC;aAC5B;SACF;KACF;CACsB,CAAC;AAE1B,iBAAS,aAAa,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PROXY_PROTOCOLS = exports.DEFAULT_PORTS = exports.PACKAGE_ROOT = void 0;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
/** folder of the package, both from src/ and dist/ */
|
|
6
|
+
exports.PACKAGE_ROOT = (0, path_1.resolve)(__dirname, '../..');
|
|
7
|
+
exports.DEFAULT_PORTS = {
|
|
8
|
+
http: 80,
|
|
9
|
+
https: 443,
|
|
10
|
+
};
|
|
11
|
+
exports.PROXY_PROTOCOLS = {
|
|
12
|
+
http: 'http',
|
|
13
|
+
https: 'http',
|
|
14
|
+
ws: 'ws',
|
|
15
|
+
wss: 'ws',
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAE/B,sDAAsD;AACzC,QAAA,YAAY,GAAG,IAAA,cAAO,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAE3C,QAAA,aAAa,GAA2B;IACnD,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,GAAG;CACX,CAAC;AAEW,QAAA,eAAe,GAA2B;IACrD,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,MAAM;IACb,EAAE,EAAE,IAAI;IACR,GAAG,EAAE,IAAI;CACV,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as ports from './utils/ports';
|
|
2
|
+
declare const api: ((configuration: Partial<import("./types").Configuration>) => Promise<{
|
|
3
|
+
httpApp: import("express").Express;
|
|
4
|
+
httpsApp: import("express").Express;
|
|
5
|
+
}>) & {
|
|
6
|
+
default: (configuration: Partial<import("./types").Configuration>) => Promise<{
|
|
7
|
+
httpApp: import("express").Express;
|
|
8
|
+
httpsApp: import("express").Express;
|
|
9
|
+
}>;
|
|
10
|
+
startServer: (configuration: Partial<import("./types").Configuration>) => Promise<{
|
|
11
|
+
httpApp: import("express").Express;
|
|
12
|
+
httpsApp: import("express").Express;
|
|
13
|
+
}>;
|
|
14
|
+
ports: typeof ports;
|
|
15
|
+
};
|
|
16
|
+
export = api;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
const startServer_1 = __importDefault(require("./utils/startServer"));
|
|
39
|
+
const ports = __importStar(require("./utils/ports"));
|
|
40
|
+
const api = Object.assign(startServer_1.default, { default: startServer_1.default, startServer: startServer_1.default, ports });
|
|
41
|
+
module.exports = api;
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sEAA8C;AAC9C,qDAAuC;AAEvC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAW,EAAE,EAAE,OAAO,EAAE,qBAAW,EAAE,WAAW,EAAX,qBAAW,EAAE,KAAK,EAAE,CAAC,CAAC;AAErF,iBAAS,GAAG,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const getDate_1 = __importDefault(require("../utils/getDate"));
|
|
7
|
+
const logger_1 = __importDefault(require("../utils/logger"));
|
|
8
|
+
const fullUrl = (request) => `${request.protocol}://${request.get('host')}${request.originalUrl}`;
|
|
9
|
+
const serialiseHeaders = (request) => JSON.stringify(Object.fromEntries(Object.keys(request.headers)
|
|
10
|
+
.sort()
|
|
11
|
+
.map((key) => [key, request.headers[key]])));
|
|
12
|
+
const getResponseLogger = (statusCode) => {
|
|
13
|
+
if (statusCode < 400)
|
|
14
|
+
return logger_1.default.success;
|
|
15
|
+
if (statusCode >= 400)
|
|
16
|
+
return logger_1.default.error;
|
|
17
|
+
return logger_1.default.info;
|
|
18
|
+
};
|
|
19
|
+
const accessLogsMiddleware = ({ alias = 'APP' }) => (request, response, next) => {
|
|
20
|
+
setTimeout(() => {
|
|
21
|
+
const timePrefix = `[${(0, getDate_1.default)()}]`;
|
|
22
|
+
logger_1.default.success([
|
|
23
|
+
timePrefix,
|
|
24
|
+
`[${alias}]`,
|
|
25
|
+
'REQUEST',
|
|
26
|
+
(request.method || '!no-method!').toUpperCase(),
|
|
27
|
+
fullUrl(request),
|
|
28
|
+
'HEADERS',
|
|
29
|
+
`${serialiseHeaders(request)}`,
|
|
30
|
+
].join(' '));
|
|
31
|
+
}, 0);
|
|
32
|
+
response.on('finish', () => {
|
|
33
|
+
const timePrefix = `[${(0, getDate_1.default)()}]`;
|
|
34
|
+
const logLine = [
|
|
35
|
+
timePrefix,
|
|
36
|
+
`[${alias}]`,
|
|
37
|
+
'RESPONSE',
|
|
38
|
+
(request.method || '!no-method!').toUpperCase(),
|
|
39
|
+
fullUrl(request),
|
|
40
|
+
response.statusCode,
|
|
41
|
+
response.statusMessage,
|
|
42
|
+
`${response.get('Content-Length') || 0}b sent`,
|
|
43
|
+
].join(' ');
|
|
44
|
+
getResponseLogger(response.statusCode)(logLine);
|
|
45
|
+
});
|
|
46
|
+
next();
|
|
47
|
+
};
|
|
48
|
+
exports.default = accessLogsMiddleware;
|
|
49
|
+
//# sourceMappingURL=accessLogs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessLogs.js","sourceRoot":"","sources":["../../src/middlewares/accessLogs.ts"],"names":[],"mappings":";;;;;AACA,+DAAuC;AACvC,6DAAqC;AAErC,MAAM,OAAO,GAAG,CAAC,OAAgB,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;AAE3G,MAAM,gBAAgB,GAAG,CAAC,OAAgB,EAAE,EAAE,CAC5C,IAAI,CAAC,SAAS,CACZ,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;KACzB,IAAI,EAAE;KACN,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAC7C,CACF,CAAC;AAEJ,MAAM,iBAAiB,GAAG,CAAC,UAAkB,EAAE,EAAE;IAC/C,IAAI,UAAU,GAAG,GAAG;QAAE,OAAO,gBAAM,CAAC,OAAO,CAAC;IAC5C,IAAI,UAAU,IAAI,GAAG;QAAE,OAAO,gBAAM,CAAC,KAAK,CAAC;IAC3C,OAAO,gBAAM,CAAC,IAAI,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,oBAAoB,GACxB,CAAC,EAAE,KAAK,GAAG,KAAK,EAAsB,EAAE,EAAE,CAC1C,CAAC,OAAgB,EAAE,QAAkB,EAAE,IAAkB,EAAE,EAAE;IAC3D,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,UAAU,GAAG,IAAI,IAAA,iBAAO,GAAE,GAAG,CAAC;QACpC,gBAAM,CAAC,OAAO,CACZ;YACE,UAAU;YACV,IAAI,KAAK,GAAG;YACZ,SAAS;YACT,CAAC,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,WAAW,EAAE;YAC/C,OAAO,CAAC,OAAO,CAAC;YAChB,SAAS;YACT,GAAG,gBAAgB,CAAC,OAAO,CAAC,EAAE;SAC/B,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ,CAAC;IACJ,CAAC,EAAE,CAAC,CAAC,CAAC;IACN,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACzB,MAAM,UAAU,GAAG,IAAI,IAAA,iBAAO,GAAE,GAAG,CAAC;QACpC,MAAM,OAAO,GAAG;YACd,UAAU;YACV,IAAI,KAAK,GAAG;YACZ,UAAU;YACV,CAAC,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,WAAW,EAAE;YAC/C,OAAO,CAAC,OAAO,CAAC;YAChB,QAAQ,CAAC,UAAU;YACnB,QAAQ,CAAC,aAAa;YACtB,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ;SAC/C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,iBAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IACH,IAAI,EAAE,CAAC;AACT,CAAC,CAAC;AAEJ,kBAAe,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const rimraf_1 = __importDefault(require("rimraf"));
|
|
8
|
+
const node_lambda_invoke_1 = require("@koeroesi86/node-lambda-invoke");
|
|
9
|
+
const logger_1 = __importDefault(require("../utils/logger"));
|
|
10
|
+
const constants_1 = require("../constants");
|
|
11
|
+
const lambdaMiddleware = (instance) => {
|
|
12
|
+
const { lambdaOptions: config } = instance;
|
|
13
|
+
const storageDriver = (0, path_1.resolve)(__dirname, '../utils/storage').replace(/\\/g, '/');
|
|
14
|
+
const lambdaToInvoke = (config?.lambda || '').replace(/\\/g, '/');
|
|
15
|
+
const handlerKey = config?.handler || 'handler';
|
|
16
|
+
rimraf_1.default.sync((0, path_1.resolve)(constants_1.PACKAGE_ROOT, 'requests/*'), { glob: { silent: true } });
|
|
17
|
+
rimraf_1.default.sync((0, path_1.resolve)(constants_1.PACKAGE_ROOT, 'responses/*'), { glob: { silent: true } });
|
|
18
|
+
// The installed @koeroesi86/node-lambda-invoke takes a single options object, while this call still uses the older positional
|
|
19
|
+
// signature, which makes the middleware a no-op at runtime. Behaviour is kept as it was until the call is migrated.
|
|
20
|
+
// @ts-expect-error positional arguments are not part of the current signature
|
|
21
|
+
return (0, node_lambda_invoke_1.httpMiddleware)(lambdaToInvoke, handlerKey, logger_1.default.info, storageDriver);
|
|
22
|
+
};
|
|
23
|
+
exports.default = lambdaMiddleware;
|
|
24
|
+
//# sourceMappingURL=lambda.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lambda.js","sourceRoot":"","sources":["../../src/middlewares/lambda.ts"],"names":[],"mappings":";;;;;AAAA,+BAA+B;AAE/B,oDAA4B;AAC5B,uEAAgE;AAChE,6DAAqC;AACrC,4CAA4C;AAG5C,MAAM,gBAAgB,GAAG,CAAC,QAAwB,EAAkB,EAAE;IACpE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;IAC3C,MAAM,aAAa,GAAG,IAAA,cAAO,EAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACjF,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,MAAM,EAAE,OAAO,IAAI,SAAS,CAAC;IAEhD,gBAAM,CAAC,IAAI,CAAC,IAAA,cAAO,EAAC,wBAAY,EAAE,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7E,gBAAM,CAAC,IAAI,CAAC,IAAA,cAAO,EAAC,wBAAY,EAAE,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAE9E,8HAA8H;IAC9H,oHAAoH;IACpH,8EAA8E;IAC9E,OAAO,IAAA,mCAAc,EAAC,cAAc,EAAE,UAAU,EAAE,gBAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AAChF,CAAC,CAAC;AAEF,kBAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const child_process_1 = require("child_process");
|
|
7
|
+
/** https://github.com/nodejitsu/node-http-proxy */
|
|
8
|
+
const http_proxy_1 = __importDefault(require("http-proxy"));
|
|
9
|
+
const ports_1 = require("../utils/ports");
|
|
10
|
+
const constants_1 = require("../constants");
|
|
11
|
+
const proxyMiddleware = (instance) => {
|
|
12
|
+
const { childOptions, proxyOptions, serverOptions } = instance;
|
|
13
|
+
if (!childOptions || !proxyOptions || !serverOptions) {
|
|
14
|
+
throw new Error('childOptions, proxyOptions and serverOptions are required for child servers.');
|
|
15
|
+
}
|
|
16
|
+
const { command, args } = childOptions;
|
|
17
|
+
let childArgs = typeof args === 'function' ? undefined : args;
|
|
18
|
+
if (!proxyOptions.hostname) {
|
|
19
|
+
proxyOptions.hostname = 'localhost';
|
|
20
|
+
}
|
|
21
|
+
if (!proxyOptions.port) {
|
|
22
|
+
const port = (0, ports_1.getFreePort)();
|
|
23
|
+
proxyOptions.port = port;
|
|
24
|
+
childArgs = (typeof args === 'function' ? args(port) : args)?.map((childArg) => childArg.replace(/%PORT%/gi, `${port}`));
|
|
25
|
+
serverOptions.proxyTarget = `${constants_1.PROXY_PROTOCOLS[serverOptions.protocol]}://${proxyOptions.hostname}:${port}`;
|
|
26
|
+
}
|
|
27
|
+
instance.child = (0, child_process_1.spawn)(command, childArgs || [], { stdio: 'pipe' });
|
|
28
|
+
instance.proxy = http_proxy_1.default.createProxyServer(proxyOptions);
|
|
29
|
+
const { proxy } = instance;
|
|
30
|
+
return (req, res) => {
|
|
31
|
+
proxy.web(req, res, { target: serverOptions.proxyTarget });
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
exports.default = proxyMiddleware;
|
|
35
|
+
//# sourceMappingURL=proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/middlewares/proxy.ts"],"names":[],"mappings":";;;;;AAAA,iDAAsC;AAGtC,mDAAmD;AACnD,4DAAmC;AAEnC,0CAA6C;AAC7C,4CAA+C;AAG/C,MAAM,eAAe,GAAG,CAAC,QAAwB,EAAkB,EAAE;IACnE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,QAAQ,CAAC;IAE/D,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;IACvC,IAAI,SAAS,GAAG,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAE9D,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC3B,YAAY,CAAC,QAAQ,GAAG,WAAW,CAAC;IACtC,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAA,mBAAW,GAAE,CAAC;QAC3B,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC;QAEzB,SAAS,GAAG,CAAC,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QAEzH,aAAa,CAAC,WAAW,GAAG,GAAG,2BAAe,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,YAAY,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;IAC9G,CAAC;IAED,QAAQ,CAAC,KAAK,GAAG,IAAA,qBAAK,EAAC,OAAO,EAAE,SAAS,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACpE,QAAQ,CAAC,KAAK,GAAG,oBAAS,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC3D,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;IAE3B,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAClB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
const path_1 = __importDefault(require("path"));
|
|
6
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
+
let timer;
|
|
9
|
+
function debounce(fn = () => { }, timeout = 0) {
|
|
10
|
+
if (timer)
|
|
11
|
+
clearTimeout(timer);
|
|
12
|
+
timer = setTimeout(() => {
|
|
13
|
+
timer = undefined;
|
|
14
|
+
fn();
|
|
15
|
+
}, timeout);
|
|
16
|
+
}
|
|
17
|
+
const contentTypes = {
|
|
18
|
+
'.aac': 'audio/aac',
|
|
19
|
+
'.abw': 'application/x-abiword',
|
|
20
|
+
'.arc': 'application/x-freearc',
|
|
21
|
+
'.avi': 'video/x-msvideo',
|
|
22
|
+
'.azw': 'application/vnd.amazon.ebook',
|
|
23
|
+
'.bin': 'application/octet-stream',
|
|
24
|
+
'.bmp': 'image/bmp',
|
|
25
|
+
'.bz': 'application/x-bzip',
|
|
26
|
+
'.bz2': 'application/x-bzip2',
|
|
27
|
+
'.csh': 'application/x-csh',
|
|
28
|
+
'.css': 'text/css',
|
|
29
|
+
'.csv': 'text/csv',
|
|
30
|
+
'.doc': 'application/msword',
|
|
31
|
+
'.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
32
|
+
'.eot': 'application/vnd.ms-fontobject',
|
|
33
|
+
'.epub': 'application/epub+zip',
|
|
34
|
+
'.gz': 'application/gzip',
|
|
35
|
+
'.gif': 'image/gif',
|
|
36
|
+
'.htm': 'text/html',
|
|
37
|
+
'.html': 'text/html',
|
|
38
|
+
'.ico': 'image/vnd.microsoft.icon',
|
|
39
|
+
'.ics': 'text/calendar',
|
|
40
|
+
'.jar': 'application/java-archive',
|
|
41
|
+
'.jpeg': 'image/jpeg',
|
|
42
|
+
'.jpg': 'image/jpeg',
|
|
43
|
+
'.js': 'text/javascript',
|
|
44
|
+
'.json': 'application/json',
|
|
45
|
+
'.jsonld': 'application/ld+json',
|
|
46
|
+
'.mid': 'audio/midi',
|
|
47
|
+
'.midi': 'audio/x-midi',
|
|
48
|
+
'.mjs': 'text/javascript',
|
|
49
|
+
'.mp3': 'audio/mpeg',
|
|
50
|
+
'.mpeg': 'video/mpeg',
|
|
51
|
+
'.mpkg': 'application/vnd.apple.installer+xml',
|
|
52
|
+
'.odp': 'application/vnd.oasis.opendocument.presentation',
|
|
53
|
+
'.ods': 'application/vnd.oasis.opendocument.spreadsheet',
|
|
54
|
+
'.odt': 'application/vnd.oasis.opendocument.text',
|
|
55
|
+
'.oga': 'audio/ogg',
|
|
56
|
+
'.ogv': 'video/ogg',
|
|
57
|
+
'.ogx': 'application/ogg',
|
|
58
|
+
'.opus': 'audio/opus',
|
|
59
|
+
'.otf': 'font/otf',
|
|
60
|
+
'.png': 'image/png',
|
|
61
|
+
'.pdf': 'application/pdf',
|
|
62
|
+
'.php': 'application/php',
|
|
63
|
+
'.ppt': 'application/vnd.ms-powerpoint',
|
|
64
|
+
'.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
|
65
|
+
'.rar': 'application/vnd.rar',
|
|
66
|
+
'.rtf': 'application/rtf',
|
|
67
|
+
'.sh': 'application/x-sh',
|
|
68
|
+
'.svg': 'image/svg+xml',
|
|
69
|
+
'.swf': 'application/x-shockwave-flash',
|
|
70
|
+
'.tar': 'application/x-tar',
|
|
71
|
+
'.tif': 'image/tiff',
|
|
72
|
+
'.tiff': 'image/tiff',
|
|
73
|
+
'.ts': 'video/mp2t',
|
|
74
|
+
'.ttf': 'font/ttf',
|
|
75
|
+
'.txt': 'text/plain',
|
|
76
|
+
'.vsd': 'application/vnd.visio',
|
|
77
|
+
'.wav': 'audio/wav',
|
|
78
|
+
'.weba': 'audio/webm',
|
|
79
|
+
'.webm': 'video/webm',
|
|
80
|
+
'.webp': 'image/webp',
|
|
81
|
+
'.woff': 'font/woff',
|
|
82
|
+
'.woff2': 'font/woff2',
|
|
83
|
+
'.xhtml': 'application/xhtml+xml',
|
|
84
|
+
'.xls': 'application/vnd.ms-excel',
|
|
85
|
+
'.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
86
|
+
'.xml': 'application/xml',
|
|
87
|
+
'.xul': 'application/vnd.mozilla.xul+xml',
|
|
88
|
+
'.zip': 'application/zip',
|
|
89
|
+
'.3gp': 'video/3gpp',
|
|
90
|
+
'.3g2': 'video/3gpp2',
|
|
91
|
+
'.7z': 'application/x-7z-compressed',
|
|
92
|
+
};
|
|
93
|
+
function getContentType(extension = '') {
|
|
94
|
+
return contentTypes[extension] || contentTypes['.txt'];
|
|
95
|
+
}
|
|
96
|
+
function etag(body) {
|
|
97
|
+
if (body.length === 0) {
|
|
98
|
+
// fast-path empty
|
|
99
|
+
return '"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk"';
|
|
100
|
+
}
|
|
101
|
+
// compute hash of entity
|
|
102
|
+
const hash = crypto_1.default.createHash('sha1').update(body).digest('base64').substring(0, 27);
|
|
103
|
+
// compute length of entity
|
|
104
|
+
const len = typeof body === 'string' ? Buffer.byteLength(body, 'utf8') : body.length;
|
|
105
|
+
return `"${len.toString(16)}-${hash}"`;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* TODO: implement
|
|
109
|
+
*/
|
|
110
|
+
function getCharset(body) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
const staticWorker = (event, callback = () => { }) => {
|
|
114
|
+
debounce(() => {
|
|
115
|
+
// console.log('Exiting static worker.')
|
|
116
|
+
}, 5000);
|
|
117
|
+
const currentPath = `${event.path.replace(/\.{2,}/, '')}${/\/$/.test(event.path) ? 'index.html' : ''}`;
|
|
118
|
+
const fileName = path_1.default.resolve(event.rootPath, `.${currentPath}`);
|
|
119
|
+
if (fs_1.default.existsSync(fileName)) {
|
|
120
|
+
// TODO: range request
|
|
121
|
+
const bodyBuffer = fs_1.default.readFileSync(fileName);
|
|
122
|
+
const stats = fs_1.default.statSync(fileName);
|
|
123
|
+
const extension = path_1.default.extname(fileName);
|
|
124
|
+
const contentType = getContentType(extension);
|
|
125
|
+
const currentEtag = etag(bodyBuffer);
|
|
126
|
+
const charset = getCharset(bodyBuffer);
|
|
127
|
+
const lastModified = new Date(stats.mtime);
|
|
128
|
+
let isModified = true;
|
|
129
|
+
if (event.headers['if-none-match'] === currentEtag) {
|
|
130
|
+
isModified = false;
|
|
131
|
+
}
|
|
132
|
+
else if (event.headers['if-modified-since']) {
|
|
133
|
+
const ifModifiedSince = new Date(event.headers['if-modified-since']);
|
|
134
|
+
if (ifModifiedSince.toUTCString() === lastModified.toUTCString()) {
|
|
135
|
+
isModified = false;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
callback({
|
|
139
|
+
statusCode: isModified ? 200 : 304,
|
|
140
|
+
headers: {
|
|
141
|
+
'Content-Type': `${contentType}${charset ? `; charset=${charset}` : ''}`,
|
|
142
|
+
'Cache-Control': 'public, max-age=0',
|
|
143
|
+
'Content-Length': `${bodyBuffer.length}`,
|
|
144
|
+
ETag: currentEtag,
|
|
145
|
+
...(stats.mtime && { 'Last-Modified': lastModified.toUTCString() }),
|
|
146
|
+
},
|
|
147
|
+
body: bodyBuffer.toString('base64'),
|
|
148
|
+
isBase64Encoded: true,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
callback({
|
|
153
|
+
statusCode: 404,
|
|
154
|
+
headers: {
|
|
155
|
+
'Content-Type': 'text/plain',
|
|
156
|
+
'Cache-Control': 'public, max-age=0',
|
|
157
|
+
},
|
|
158
|
+
body: `${fileName} does not exist`,
|
|
159
|
+
isBase64Encoded: false,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
module.exports = staticWorker;
|
|
164
|
+
//# sourceMappingURL=staticWorker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staticWorker.js","sourceRoot":"","sources":["../../src/middlewares/staticWorker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Readable } from 'stream';
|
|
2
|
+
interface ListenableWorker {
|
|
3
|
+
stdout?: Readable | null;
|
|
4
|
+
stderr?: Readable | null;
|
|
5
|
+
instance?: unknown;
|
|
6
|
+
addEventListenerOnce: (event: string, listener: (code?: number) => void) => void;
|
|
7
|
+
}
|
|
8
|
+
declare const stdoutListener: (childProcess: ListenableWorker, logger?: (message: string) => void) => void;
|
|
9
|
+
export default stdoutListener;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const getDate_1 = __importDefault(require("../utils/getDate"));
|
|
7
|
+
let currentLogger = () => { };
|
|
8
|
+
const messageListener = (data) => {
|
|
9
|
+
currentLogger(data.toString().trim());
|
|
10
|
+
};
|
|
11
|
+
const stdoutListener = (childProcess, logger = () => { }) => {
|
|
12
|
+
currentLogger = logger;
|
|
13
|
+
if (childProcess.stdout && !childProcess.stdout.listeners('data').includes(messageListener)) {
|
|
14
|
+
childProcess.stdout.on('data', messageListener);
|
|
15
|
+
}
|
|
16
|
+
if (childProcess.stderr && !childProcess.stderr.listeners('data').includes(messageListener)) {
|
|
17
|
+
childProcess.stderr.on('data', messageListener);
|
|
18
|
+
}
|
|
19
|
+
const closeListener = (code) => {
|
|
20
|
+
if (code)
|
|
21
|
+
logger(`[${(0, getDate_1.default)()}] child process exited with code ${code}`);
|
|
22
|
+
if (childProcess && childProcess.instance) {
|
|
23
|
+
if (childProcess.stdout)
|
|
24
|
+
childProcess.stdout.off('data', messageListener);
|
|
25
|
+
if (childProcess.stderr)
|
|
26
|
+
childProcess.stderr.off('data', messageListener);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
childProcess.addEventListenerOnce('close', closeListener);
|
|
30
|
+
};
|
|
31
|
+
exports.default = stdoutListener;
|
|
32
|
+
//# sourceMappingURL=stdoutListener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdoutListener.js","sourceRoot":"","sources":["../../src/middlewares/stdoutListener.ts"],"names":[],"mappings":";;;;;AACA,+DAAuC;AASvC,IAAI,aAAa,GAA8B,GAAG,EAAE,GAAE,CAAC,CAAC;AACxD,MAAM,eAAe,GAAG,CAAC,IAAqB,EAAE,EAAE;IAChD,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,YAA8B,EAAE,SAAoC,GAAG,EAAE,GAAE,CAAC,EAAE,EAAE;IACtG,aAAa,GAAG,MAAM,CAAC;IAEvB,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAC5F,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAC5F,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,aAAa,GAAG,CAAC,IAAa,EAAE,EAAE;QACtC,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,IAAA,iBAAO,GAAE,oCAAoC,IAAI,EAAE,CAAC,CAAC;QAE1E,IAAI,YAAY,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC1C,IAAI,YAAY,CAAC,MAAM;gBAAE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YAC1E,IAAI,YAAY,CAAC,MAAM;gBAAE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC;IACF,YAAY,CAAC,oBAAoB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,kBAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const ports_1 = require("../utils/ports");
|
|
7
|
+
const logger_1 = __importDefault(require("../utils/logger"));
|
|
8
|
+
const startServer_1 = __importDefault(require("../utils/startServer"));
|
|
9
|
+
const configuration_example_1 = __importDefault(require("../configuration.example"));
|
|
10
|
+
(async () => {
|
|
11
|
+
try {
|
|
12
|
+
if (configuration_example_1.default.portLookup) {
|
|
13
|
+
await (0, ports_1.findPorts)(configuration_example_1.default.portLookup);
|
|
14
|
+
}
|
|
15
|
+
await (0, startServer_1.default)(configuration_example_1.default);
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
logger_1.default.error(error);
|
|
19
|
+
}
|
|
20
|
+
})();
|
|
21
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/scripts/server.ts"],"names":[],"mappings":";;;;;AAAA,0CAA2C;AAC3C,6DAAqC;AACrC,uEAA+C;AAC/C,qFAAqD;AAErD,CAAC,KAAK,IAAI,EAAE;IACV,IAAI,CAAC;QACH,IAAI,+BAAa,CAAC,UAAU,EAAE,CAAC;YAC7B,MAAM,IAAA,iBAAS,EAAC,+BAAa,CAAC,UAAU,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,IAAA,qBAAW,EAAC,+BAAa,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,gBAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC,CAAC,EAAE,CAAC"}
|