minimonolith 0.7.0 → 0.8.1
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/index.js +1 -1
- package/package.json +1 -1
- package/src/service/methodHandler.js +25 -15
- package/src/service/registerMethods.js +16 -4
- package/src/service/registerService.js +13 -9
- package/src/service/validationHandler.js +6 -1
- /package/src/{server → local}/index.js +0 -0
- /package/src/{server → local}/lambdaServer.js +0 -0
- /package/src/{server → local}/loadEnvFile.js +0 -0
- /package/src/{server → local}/serverHandler.js +0 -0
package/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
|
|
3
3
|
import { createAPI } from './src/api/index.js';
|
|
4
|
-
import { runLambdaServer, loadEnvFile } from './src/
|
|
4
|
+
import { runLambdaServer, loadEnvFile } from './src/local/index.js';
|
|
5
5
|
|
|
6
6
|
export { runLambdaServer, loadEnvFile, createAPI, z };
|
package/package.json
CHANGED
|
@@ -1,23 +1,33 @@
|
|
|
1
1
|
import { validationHandler } from './validationHandler.js';
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
const VALIDATION_ERROR = await validationHandler(event, METHOD, API.MODELS, ROUTE_CODE);
|
|
6
|
-
if (VALIDATION_ERROR) {
|
|
7
|
-
console.error({ ROUTE_CODE, VALIDATION_ERROR: VALIDATION_ERROR.toString() });
|
|
8
|
-
return VALIDATION_ERROR;
|
|
9
|
-
}
|
|
3
|
+
const validatedMethodHandler = async (event, API, METHOD, ROUTE_CODE) => {
|
|
4
|
+
await validationHandler(event, METHOD, API.MODELS, ROUTE_CODE);
|
|
10
5
|
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
const EVENT_CONTEXT = { event, MODELS: API.MODELS, SERVICES: API.SERVICES, ROUTE_CODE };
|
|
7
|
+
const METHOD_RESPONSE = await METHOD.handler(EVENT_CONTEXT);
|
|
13
8
|
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
return METHOD_RESPONSE;
|
|
10
|
+
};
|
|
16
11
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
const exposedMethodHandler = async (event, res, API, METHOD, ROUTE_CODE) => {
|
|
13
|
+
try {
|
|
14
|
+
const METHOD_RESPONSE = await validatedMethodHandler(event, API, METHOD, ROUTE_CODE);
|
|
15
|
+
console.log({ ROUTE_CODE, METHOD_RESPONSE: METHOD_RESPONSE.toString() });
|
|
16
|
+
//console.log({ ROUTE_CODE, METHOD_RESPONSE: JSON.stringify(METHOD_RESPONSE, null, 2) });
|
|
17
|
+
res.status(200).json(METHOD_RESPONSE);
|
|
18
|
+
|
|
19
|
+
}
|
|
20
|
+
catch (METHOD_ERROR) {
|
|
21
|
+
switch (METHOD_ERROR.code) {
|
|
22
|
+
case 'VALIDATION_ERROR':
|
|
23
|
+
res.status(400).json({ ROUTE_CODE, VALIDATION_ERROR: METHOD_ERROR.error });
|
|
24
|
+
break;
|
|
25
|
+
default:
|
|
26
|
+
//console.error({ ROUTE_CODE, METHOD_ERROR: JSON.stringify(METHOD_ERROR, null, 2) });
|
|
27
|
+
console.error({ ROUTE_CODE, METHOD_ERROR: METHOD_ERROR.toString() });
|
|
28
|
+
res.status(500).json({ ROUTE_CODE, METHOD_ERROR: METHOD_ERROR.toString() });
|
|
29
|
+
}
|
|
20
30
|
}
|
|
21
31
|
};
|
|
22
32
|
|
|
23
|
-
export {
|
|
33
|
+
export { validatedMethodHandler, exposedMethodHandler };
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import url from 'url';
|
|
1
3
|
import path from 'path';
|
|
4
|
+
import { z } from 'zod';
|
|
2
5
|
|
|
3
6
|
import { getMethodRouteCode } from './getMethodRouteCode.js';
|
|
4
7
|
|
|
@@ -7,12 +10,21 @@ const registerMethods = methodNames => async (SERVICE_NAME, SERVICE_URL) => {
|
|
|
7
10
|
|
|
8
11
|
try {
|
|
9
12
|
const methods = await methodNames.reduce(async (prevMethods, METHOD_NAME) => {
|
|
10
|
-
ROUTE_CODE = 'CREATE_METHOD_' + getMethodRouteCode(SERVICE_NAME, METHOD_NAME);
|
|
11
13
|
const methods = await prevMethods;
|
|
14
|
+
ROUTE_CODE = 'REGISTER_METHODS_' + getMethodRouteCode(SERVICE_NAME, METHOD_NAME);
|
|
15
|
+
console.log(' FOUND_METHOD', METHOD_NAME);
|
|
12
16
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
17
|
+
methods[METHOD_NAME] = { VALIDATOR: (MODELS, ROUTE_CODE) => z.undefined() };
|
|
18
|
+
methods[METHOD_NAME].handler =
|
|
19
|
+
(await import(new URL(`${METHOD_NAME}/handler.js`, SERVICE_URL))).default;
|
|
20
|
+
|
|
21
|
+
const VALIDATOR_URL = new URL(`${METHOD_NAME}/valid.js`, SERVICE_URL);
|
|
22
|
+
if (fs.existsSync(url.fileURLToPath(VALIDATOR_URL))) {
|
|
23
|
+
console.log(' FOUND_VALIDATOR');
|
|
24
|
+
const VALIDATOR_BODY = (await import(VALIDATOR_URL)).default;
|
|
25
|
+
methods[METHOD_NAME].VALIDATOR = (MODELS, ROUTE_CODE) =>
|
|
26
|
+
z.object(VALIDATOR_BODY(MODELS, ROUTE_CODE)).strict();
|
|
27
|
+
}
|
|
16
28
|
|
|
17
29
|
return methods;
|
|
18
30
|
}, Promise.resolve({}));
|
|
@@ -1,20 +1,28 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
1
2
|
import url from 'url'
|
|
2
3
|
|
|
3
4
|
import { getProjectRoot } from '../path/index.js';
|
|
4
5
|
import { registerModel } from '../model/index.js';
|
|
5
|
-
import {
|
|
6
|
+
import { exposedMethodHandler, validatedMethodHandler } from './methodHandler.js';
|
|
6
7
|
import { getMethodType } from './getMethodType.js';
|
|
7
8
|
import { getMethodRouteCode } from './getMethodRouteCode.js';
|
|
8
9
|
import { registerMethods } from './registerMethods.js';
|
|
9
10
|
|
|
11
|
+
const ROUTE_CODE = 'REGISTER_SERVICE';
|
|
12
|
+
|
|
10
13
|
const registerService = async (API, SERVICE_NAME, SRC_FOLDER, MODULE_FOLDER) => {
|
|
11
14
|
try {
|
|
15
|
+
console.log(ROUTE_CODE, SERVICE_NAME);
|
|
12
16
|
const PROJECT_ROOT_PATH = getProjectRoot(import.meta.url, MODULE_FOLDER)+'/';
|
|
13
17
|
const PROJECT_RELATIVE_SERVICE_PATH = './' + SRC_FOLDER + `${SERVICE_NAME}/`;
|
|
14
18
|
const SERVICE_URL = new URL(PROJECT_RELATIVE_SERVICE_PATH, PROJECT_ROOT_PATH);
|
|
15
19
|
|
|
16
20
|
const SERVICE_MODULE = await import(`${SERVICE_URL}index.js`);
|
|
17
|
-
if (
|
|
21
|
+
if (fs.existsSync(url.fileURLToPath(`${SERVICE_URL}model.js`))) {
|
|
22
|
+
console.log(' FOUND_MODEL');
|
|
23
|
+
registerModel(SERVICE_NAME, SERVICE_URL);
|
|
24
|
+
}
|
|
25
|
+
|
|
18
26
|
const SERVICE_METHODS = await registerMethods(SERVICE_MODULE.methods)(SERVICE_NAME, SERVICE_URL);
|
|
19
27
|
|
|
20
28
|
API.SERVICES[SERVICE_NAME] = {};
|
|
@@ -22,21 +30,17 @@ const registerService = async (API, SERVICE_NAME, SRC_FOLDER, MODULE_FOLDER) =>
|
|
|
22
30
|
const ROUTE_CODE = getMethodRouteCode(SERVICE_NAME, METHOD_NAME);
|
|
23
31
|
|
|
24
32
|
API.SERVICES[SERVICE_NAME][METHOD_NAME] = async body => {
|
|
25
|
-
|
|
26
|
-
await methodHandler({ body }, API, SERVICE_METHODS[METHOD_NAME], ROUTE_CODE);
|
|
27
|
-
return eventResponse.body;
|
|
33
|
+
return await validatedMethodHandler({ body }, API, SERVICE_METHODS[METHOD_NAME], ROUTE_CODE);
|
|
28
34
|
}
|
|
29
35
|
|
|
30
36
|
const methodType = getMethodType(METHOD_NAME);
|
|
31
37
|
API[methodType](`/${SERVICE_NAME}/${METHOD_NAME}`, async (event, res) => {
|
|
32
|
-
|
|
33
|
-
await methodHandler(event, API, SERVICE_METHODS[METHOD_NAME], ROUTE_CODE);
|
|
34
|
-
res.status(statusCode).json(body);
|
|
38
|
+
await exposedMethodHandler(event, res, API, SERVICE_METHODS[METHOD_NAME], ROUTE_CODE);
|
|
35
39
|
});
|
|
36
40
|
});
|
|
37
41
|
} catch (SERVICE_HANDLER_ERROR) {
|
|
38
42
|
console.error({
|
|
39
|
-
ROUTE_CODE
|
|
43
|
+
ROUTE_CODE,
|
|
40
44
|
SERVICE_NAME,
|
|
41
45
|
SERVICE_HANDLER_ERROR,
|
|
42
46
|
});
|
|
@@ -3,7 +3,12 @@ const validationHandler = async (event, METHOD, MODELS, ROUTE_CODE) => {
|
|
|
3
3
|
const validation = await METHOD.VALIDATOR(MODELS, ROUTE_CODE).safeParseAsync(event.body);
|
|
4
4
|
if (validation.success) return;
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
const VALIDATION_ERROR = new Error('VALIDATION_ERROR');
|
|
7
|
+
VALIDATION_ERROR.error = validation.error.format()
|
|
8
|
+
VALIDATION_ERROR.code = 'VALIDATION_ERROR';
|
|
9
|
+
console.error({ ROUTE_CODE, VALIDATION_ERROR: VALIDATION_ERROR.error });
|
|
10
|
+
//console.error({ ROUTE_CODE, VALIDATION_ERROR: JSON.stringify(VALIDATION_ERROR, null, 2) });
|
|
11
|
+
throw VALIDATION_ERROR;
|
|
7
12
|
};
|
|
8
13
|
|
|
9
14
|
export { validationHandler };
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|