minimonolith 0.8.0 → 0.9.0

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 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/server/index.js';
4
+ import { runLambdaServer, loadEnvFile } from './src/local/index.js';
5
5
 
6
6
  export { runLambdaServer, loadEnvFile, createAPI, z };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "minimonolith",
3
3
  "type": "module",
4
- "version": "0.8.0",
4
+ "version": "0.9.0",
5
5
  "main": "index.js",
6
6
  "license": "MIT",
7
7
  "scripts": {
@@ -1,17 +1,17 @@
1
1
  import { validationHandler } from './validationHandler.js';
2
2
 
3
- const validatedMethodHandler = async (event, API, METHOD, ROUTE_CODE) => {
4
- await validationHandler(event, METHOD, API.MODELS, ROUTE_CODE);
3
+ const validatedMethodHandler = async (body, API, METHOD, ROUTE_CODE) => {
4
+ await validationHandler(body, METHOD, API.MODELS, ROUTE_CODE);
5
5
 
6
- const EVENT_CONTEXT = { event, MODELS: API.MODELS, SERVICES: API.SERVICES, ROUTE_CODE };
6
+ const EVENT_CONTEXT = { body, MODELS: API.MODELS, SERVICES: API.SERVICES, ROUTE_CODE };
7
7
  const METHOD_RESPONSE = await METHOD.handler(EVENT_CONTEXT);
8
8
 
9
9
  return METHOD_RESPONSE;
10
10
  };
11
11
 
12
- const exposedMethodHandler = async (event, res, API, METHOD, ROUTE_CODE) => {
12
+ const exposedMethodHandler = async (body, res, API, METHOD, ROUTE_CODE) => {
13
13
  try {
14
- const METHOD_RESPONSE = await validatedMethodHandler(event, API, METHOD, ROUTE_CODE);
14
+ const METHOD_RESPONSE = await validatedMethodHandler(body, API, METHOD, ROUTE_CODE);
15
15
  console.log({ ROUTE_CODE, METHOD_RESPONSE: METHOD_RESPONSE.toString() });
16
16
  //console.log({ ROUTE_CODE, METHOD_RESPONSE: JSON.stringify(METHOD_RESPONSE, null, 2) });
17
17
  res.status(200).json(METHOD_RESPONSE);
@@ -24,8 +24,10 @@ const exposedMethodHandler = async (event, res, API, METHOD, ROUTE_CODE) => {
24
24
  break;
25
25
  default:
26
26
  //console.error({ ROUTE_CODE, METHOD_ERROR: JSON.stringify(METHOD_ERROR, null, 2) });
27
- console.error({ ROUTE_CODE, METHOD_ERROR: METHOD_ERROR.toString() });
27
+ //console.error({ ROUTE_CODE, METHOD_ERROR: METHOD_ERROR.toString() });
28
+ console.error({ ROUTE_CODE, METHOD_ERROR: METHOD_ERROR.stack });
28
29
  res.status(500).json({ ROUTE_CODE, METHOD_ERROR: METHOD_ERROR.toString() });
30
+
29
31
  }
30
32
  }
31
33
  };
@@ -0,0 +1,11 @@
1
+ export const parseMethodPathCode = (METHOD_PATH_CODE) => {
2
+ const methodPathParts = METHOD_PATH_CODE.split(":");
3
+ const METHOD_NAME = methodPathParts[0];
4
+ const pathParams = methodPathParts.slice(1).map(param => `:${param}`);
5
+ const METHOD_PATH = `${METHOD_NAME}${pathParams.length > 0 ? '/' : ''}${pathParams.join("/")}`;
6
+
7
+ return {
8
+ METHOD_NAME,
9
+ METHOD_PATH
10
+ };
11
+ };
@@ -3,26 +3,29 @@ import url from 'url';
3
3
  import path from 'path';
4
4
  import { z } from 'zod';
5
5
 
6
+ import { parseMethodPathCode } from './parseMethodPathCode.js';
6
7
  import { getMethodRouteCode } from './getMethodRouteCode.js';
7
8
 
8
- const registerMethods = methodNames => async (SERVICE_NAME, SERVICE_URL) => {
9
+ const registerMethods = methodPathCodes => async (SERVICE_NAME, SERVICE_URL) => {
9
10
  let ROUTE_CODE = 'REGISTER_METHODS';
10
11
 
11
12
  try {
12
- const methods = await methodNames.reduce(async (prevMethods, METHOD_NAME) => {
13
+ const methods = await methodPathCodes.reduce(async (prevMethods, METHOD_PATH_CODE) => {
13
14
  const methods = await prevMethods;
15
+ //console.log('pathCodes', methodPathCodes, METHOD_PATH_CODE);
16
+ const { METHOD_NAME, METHOD_PATH } = parseMethodPathCode(METHOD_PATH_CODE);
14
17
  ROUTE_CODE = 'REGISTER_METHODS_' + getMethodRouteCode(SERVICE_NAME, METHOD_NAME);
15
18
  console.log(' FOUND_METHOD', METHOD_NAME);
16
19
 
17
- methods[METHOD_NAME] = { VALIDATOR: (MODELS, ROUTE_CODE) => z.undefined() };
18
- methods[METHOD_NAME].handler =
20
+ methods[METHOD_PATH_CODE] = { VALIDATOR: (MODELS, ROUTE_CODE) => z.undefined() };
21
+ methods[METHOD_PATH_CODE].handler =
19
22
  (await import(new URL(`${METHOD_NAME}/handler.js`, SERVICE_URL))).default;
20
23
 
21
24
  const VALIDATOR_URL = new URL(`${METHOD_NAME}/valid.js`, SERVICE_URL);
22
25
  if (fs.existsSync(url.fileURLToPath(VALIDATOR_URL))) {
23
26
  console.log(' FOUND_VALIDATOR');
24
27
  const VALIDATOR_BODY = (await import(VALIDATOR_URL)).default;
25
- methods[METHOD_NAME].VALIDATOR = (MODELS, ROUTE_CODE) =>
28
+ methods[METHOD_PATH_CODE].VALIDATOR = (MODELS, ROUTE_CODE) =>
26
29
  z.object(VALIDATOR_BODY(MODELS, ROUTE_CODE)).strict();
27
30
  }
28
31
 
@@ -30,8 +33,9 @@ const registerMethods = methodNames => async (SERVICE_NAME, SERVICE_URL) => {
30
33
  }, Promise.resolve({}));
31
34
 
32
35
  return methods;
33
- } catch (METHOD_ERROR) {
34
- console.error({ ROUTE_CODE, METHOD_ERROR });
36
+ } catch (REGISTER_METHOD_ERROR) {
37
+ console.error({ ROUTE_CODE, REGISTER_METHOD_ERROR,
38
+ STACK_TRASE: REGISTER_METHOD_ERROR.stack });
35
39
  }
36
40
  };
37
41
 
@@ -6,6 +6,7 @@ import { registerModel } from '../model/index.js';
6
6
  import { exposedMethodHandler, validatedMethodHandler } from './methodHandler.js';
7
7
  import { getMethodType } from './getMethodType.js';
8
8
  import { getMethodRouteCode } from './getMethodRouteCode.js';
9
+ import { parseMethodPathCode } from './parseMethodPathCode.js';
9
10
  import { registerMethods } from './registerMethods.js';
10
11
 
11
12
  const ROUTE_CODE = 'REGISTER_SERVICE';
@@ -23,19 +24,31 @@ const registerService = async (API, SERVICE_NAME, SRC_FOLDER, MODULE_FOLDER) =>
23
24
  registerModel(SERVICE_NAME, SERVICE_URL);
24
25
  }
25
26
 
26
- const SERVICE_METHODS = await registerMethods(SERVICE_MODULE.methods)(SERVICE_NAME, SERVICE_URL);
27
+ const SERVICE_METHODS =
28
+ await registerMethods(SERVICE_MODULE.methods)(SERVICE_NAME, SERVICE_URL);
27
29
 
28
30
  API.SERVICES[SERVICE_NAME] = {};
29
- Object.keys(SERVICE_METHODS).forEach(METHOD_NAME => {
31
+ Object.keys(SERVICE_METHODS).forEach(METHOD_PATH_CODE => {
32
+ const { METHOD_NAME, METHOD_PATH } = parseMethodPathCode(METHOD_PATH_CODE);
33
+ //console.log('first', METHOD_PATH_CODE, METHOD_NAME, METHOD_PATH);
30
34
  const ROUTE_CODE = getMethodRouteCode(SERVICE_NAME, METHOD_NAME);
31
35
 
32
36
  API.SERVICES[SERVICE_NAME][METHOD_NAME] = async body => {
33
- return await validatedMethodHandler({ body }, API, SERVICE_METHODS[METHOD_NAME], ROUTE_CODE);
37
+ return await validatedMethodHandler(body, API,
38
+ SERVICE_METHODS[METHOD_PATH_CODE], ROUTE_CODE);
34
39
  }
35
40
 
36
41
  const methodType = getMethodType(METHOD_NAME);
37
- API[methodType](`/${SERVICE_NAME}/${METHOD_NAME}`, async (event, res) => {
38
- await exposedMethodHandler(event, res, API, SERVICE_METHODS[METHOD_NAME], ROUTE_CODE);
42
+ //console.log('second', METHOD_PATH_CODE, METHOD_NAME, METHOD_PATH);
43
+ console.log('REGISTERING_ROUTE', `/${SERVICE_NAME}/${METHOD_PATH}`);
44
+ API[methodType](`/${SERVICE_NAME}/${METHOD_PATH}`, async (event, res) => {
45
+ const { body, params, queryStringParameters } = event;
46
+ const parsedBody = body || Object.keys(params).length > 0 || queryStringParameters ?
47
+ { ...body, ...params, ...queryStringParameters } : undefined;
48
+ //console.log({ RECEIVED_BODY: parsedBody.toString() });
49
+ console.log({ RECEIVED_BODY: JSON.stringify(parsedBody) });
50
+ await exposedMethodHandler(parsedBody, res, API,
51
+ SERVICE_METHODS[METHOD_PATH_CODE], ROUTE_CODE);
39
52
  });
40
53
  });
41
54
  } catch (SERVICE_HANDLER_ERROR) {
@@ -1,6 +1,6 @@
1
- const validationHandler = async (event, METHOD, MODELS, ROUTE_CODE) => {
1
+ const validationHandler = async (body, METHOD, MODELS, ROUTE_CODE) => {
2
2
 
3
- const validation = await METHOD.VALIDATOR(MODELS, ROUTE_CODE).safeParseAsync(event.body);
3
+ const validation = await METHOD.VALIDATOR(MODELS, ROUTE_CODE).safeParseAsync(body);
4
4
  if (validation.success) return;
5
5
 
6
6
  const VALIDATION_ERROR = new Error('VALIDATION_ERROR');
package/npm_publish.yml DELETED
@@ -1,32 +0,0 @@
1
- name: NPM Publish
2
-
3
- on:
4
- push:
5
- branches:
6
- - master # Change this to the branch where you want to trigger the workflow
7
-
8
- jobs:
9
- build:
10
- runs-on: ubuntu-latest
11
-
12
- steps:
13
- - uses: actions/checkout@v3
14
-
15
- - name: Set up Node.js
16
- uses: actions/setup-node@v3
17
- with:
18
- node-version: 18 # Change this to the Node.js version you need
19
-
20
- - name: Install dependencies
21
- run: yarn install
22
-
23
- - name: Run tests
24
- run: yarn test
25
-
26
- - name: Upload coverage to Codecov
27
- uses: codecov/codecov-action@v3
28
-
29
- - name: Publish to NPM
30
- run: yarn publish
31
- env:
32
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # Set up the NPM_TOKEN in your GitHub repository secrets