lemon-core 4.0.2 → 4.0.4

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.
Files changed (49) hide show
  1. package/README.md +1 -0
  2. package/dist/cores/aws/aws-kms-service.js +3 -4
  3. package/dist/cores/aws/aws-kms-service.js.map +1 -1
  4. package/dist/cores/aws/aws-s3-service.js +3 -3
  5. package/dist/cores/aws/aws-s3-service.js.map +1 -1
  6. package/dist/cores/aws/aws-sns-service.d.ts +14 -1
  7. package/dist/cores/aws/aws-sns-service.js +12 -9
  8. package/dist/cores/aws/aws-sns-service.js.map +1 -1
  9. package/dist/cores/aws/aws-sqs-service.d.ts +1 -1
  10. package/dist/cores/aws/aws-sqs-service.js +15 -9
  11. package/dist/cores/aws/aws-sqs-service.js.map +1 -1
  12. package/dist/cores/core-services.d.ts +1 -1
  13. package/dist/cores/dynamo/dynamo-query-service.js +1 -1
  14. package/dist/cores/dynamo/dynamo-query-service.js.map +1 -1
  15. package/dist/cores/dynamo/dynamo-scan-service.js +1 -1
  16. package/dist/cores/dynamo/dynamo-scan-service.js.map +1 -1
  17. package/dist/cores/dynamo/dynamo-service.d.ts +1 -1
  18. package/dist/cores/dynamo/dynamo-service.js +45 -14
  19. package/dist/cores/dynamo/dynamo-service.js.map +1 -1
  20. package/dist/cores/lambda/lambda-handler.d.ts +5 -0
  21. package/dist/cores/lambda/lambda-handler.js +13 -0
  22. package/dist/cores/lambda/lambda-handler.js.map +1 -1
  23. package/dist/cores/lambda/lambda-web-handler.d.ts +10 -2
  24. package/dist/cores/lambda/lambda-web-handler.js +4 -14
  25. package/dist/cores/lambda/lambda-web-handler.js.map +1 -1
  26. package/dist/cores/protocol/protocol-service.d.ts +2 -1
  27. package/dist/cores/protocol/protocol-service.js +74 -25
  28. package/dist/cores/protocol/protocol-service.js.map +1 -1
  29. package/dist/engine/utilities.d.ts +4 -0
  30. package/dist/engine/utilities.js +34 -8
  31. package/dist/engine/utilities.js.map +1 -1
  32. package/dist/environ.d.ts +9 -30
  33. package/dist/environ.js +54 -18
  34. package/dist/environ.js.map +1 -1
  35. package/dist/extended/abstract-service.d.ts +3 -12
  36. package/dist/extended/abstract-service.js +1 -28
  37. package/dist/extended/abstract-service.js.map +1 -1
  38. package/dist/helpers/helpers.js +2 -7
  39. package/dist/helpers/helpers.js.map +1 -1
  40. package/dist/tools/express.d.ts +18 -32
  41. package/dist/tools/express.js +56 -7
  42. package/dist/tools/express.js.map +1 -1
  43. package/dist/tools/shared.d.ts +1 -10
  44. package/dist/tools/shared.js +26 -13
  45. package/dist/tools/shared.js.map +1 -1
  46. package/dist/tools/tools.d.ts +39 -2
  47. package/dist/tools/tools.js +62 -2
  48. package/dist/tools/tools.js.map +1 -1
  49. package/package.json +3 -2
@@ -1,20 +1,69 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildExpress = void 0;
4
- //* create Server Instance.
5
- //NOTE - avoid external reference of type.
4
+ /**
5
+ * Express Server Application.
6
+ * - standalone http service with express.
7
+ *
8
+ *
9
+ * ```bash
10
+ * #run-server (use lemon.yml:local)
11
+ * $ npm install -g nodemon
12
+ * $ ENV=lemon STAGE=local nodemon express.js
13
+ * ```
14
+ *
15
+ * [TODO]
16
+ * - [ ] 190801 proper content type `text/plain`
17
+ * - [x] 190801 change router underscore char like `loopers_front` -> `loopers-front`
18
+ *
19
+ *
20
+ * @author Steve Jung <steve@lemoncloud.io>
21
+ * @date 2019-07-31 support ECMA 2016.
22
+ * @date 2019-08-01a auto register api with pattern. `/^[a-z][a-z0-9\-_]+$/`
23
+ * @date 2019-08-07 ignore `engine.dt` function.
24
+ * @date 2019-11-26 cleanup and optimized for `lemon-core#v2`
25
+ * @date 2020-01-23 improve context information via headers.
26
+ * @date 2025-05-20 cleanup `express` out of this module.
27
+ *
28
+ * @copyright (C) lemoncloud.io 2019 - All Rights Reserved.
29
+ */
30
+ const test_helper_1 = require("../common/test-helper");
31
+ /**
32
+ * create Server Instance.
33
+ *
34
+ * @param $engine - LemonEngine by `buildEngine()`
35
+ * @param $web - LambdaWEBHandler in `$cores`
36
+ */
6
37
  const buildExpress = ($engine, $web, options) => {
7
38
  const errScope = `buildExpress()`;
39
+ // STEP.0 validate parameters.
8
40
  if (!$engine)
9
41
  throw new Error(`$engine(LemonEngine) is required - ${errScope}`);
10
42
  if (!$web)
11
43
  throw new Error(`$web(LambdaWEBHandler) is required - ${errScope}`);
12
- options = options || {};
13
- const _factory = (options) => {
14
- return null;
44
+ // STEP.1 check the `lemon-devkit` module.
45
+ const _load = (mod) => {
46
+ var _a, _b;
47
+ if (options === null || options === void 0 ? void 0 : options.loadModule)
48
+ return options.loadModule(mod);
49
+ try {
50
+ return require(mod);
51
+ }
52
+ catch (e) {
53
+ (_a = $engine === null || $engine === void 0 ? void 0 : $engine.err) === null || _a === void 0 ? void 0 : _a.call($engine, `! err =`, e);
54
+ const error = `${(_b = e === null || e === void 0 ? void 0 : e.message) !== null && _b !== void 0 ? _b : (0, test_helper_1.GETERR)(e)}`.toLowerCase();
55
+ if (error.includes('cannot find module'))
56
+ return null;
57
+ throw e;
58
+ }
15
59
  };
16
- const $factory = _factory(options);
17
- return $factory($engine, $web, options);
60
+ const devkit = _load('lemon-devkit');
61
+ if (!devkit)
62
+ throw new Error(`lemon-devkit(module) is required (npm i -D lemon-devkit) - ${errScope}`);
63
+ const _factory = devkit === null || devkit === void 0 ? void 0 : devkit.buildExpress;
64
+ if (!_factory)
65
+ throw new Error(`@buildExpress (function) is required (invalid devkit) - ${errScope}`);
66
+ return _factory($engine, $web, options);
18
67
  };
19
68
  exports.buildExpress = buildExpress;
20
69
  //# sourceMappingURL=express.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/tools/express.ts"],"names":[],"mappings":";;;AAsDA,2BAA2B;AAC3B,0CAA0C;AACnC,MAAM,YAAY,GAAG,CACxB,OAAoB,EACpB,IAAsB,EACtB,OAA2E,EAClB,EAAE;IAC3D,MAAM,QAAQ,GAAG,gBAAgB,CAAC;IAClC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,QAAQ,EAAE,CAAC,CAAC;IAChF,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC;IAC/E,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IAExB,MAAM,QAAQ,GAAG,CAAC,OAAY,EAAkB,EAAE;QAC9C,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC,CAAC;AAfW,QAAA,YAAY,gBAevB"}
1
+ {"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/tools/express.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,uDAA+C;AA4C/C;;;;;GAKG;AACI,MAAM,YAAY,GAAG,CACxB,OAAoB,EACpB,IAAsB,EACtB,OAA6B,EACT,EAAE;IACtB,MAAM,QAAQ,GAAG,gBAAgB,CAAC;IAClC,8BAA8B;IAC9B,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,QAAQ,EAAE,CAAC,CAAC;IAChF,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC;IAE/E,0CAA0C;IAC1C,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE;;QAC1B,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU;YAAE,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAExD,IAAI;YACA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;SACvB;QAAC,OAAO,CAAC,EAAE;YACR,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,wDAAG,SAAS,EAAE,CAAC,CAAC,CAAC;YAC7B,MAAM,KAAK,GAAG,GAAG,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,OAAO,mCAAI,IAAA,oBAAM,EAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;YACzD,IAAI,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC;gBAAE,OAAO,IAAI,CAAC;YACtD,MAAM,CAAC,CAAC;SACX;IACL,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,8DAA8D,QAAQ,EAAE,CAAC,CAAC;IAEvG,MAAM,QAAQ,GAAmB,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,CAAC;IACtD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,QAAQ,EAAE,CAAC,CAAC;IACtG,OAAO,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC,CAAC;AA7BW,QAAA,YAAY,gBA6BvB"}
@@ -1,26 +1,17 @@
1
- import { AwsCredentialIdentity } from '@aws-sdk/types';
2
1
  /**
3
2
  * load json in sync.
4
3
  */
5
4
  export declare const loadJsonSync: <T extends object = any>(name: string, def?: {}) => T;
6
5
  /**
7
6
  * dynamic loading credentials by profile. (search PROFILE -> NAME)
8
- *
9
- * TODO -define the return type exactly.
10
- *
11
- * @returns {Promise<any>} - AWS credentials
12
7
  */
13
- export declare const asyncCredentials: (profile: string) => Promise<AwsCredentialIdentity>;
8
+ export declare const asyncCredentials: (profile: string) => Promise<unknown>;
14
9
  /**
15
10
  * dynamic loading credentials by profile. (search PROFILE -> NAME)
16
- *
17
- * @deprecated use `asyncCredentials` instead.
18
11
  */
19
12
  export declare const credentials: (profile: string) => string;
20
13
  /**
21
14
  * return whether AWS credentials set
22
- *
23
- * @deprecated use `asyncCredentials` instead.
24
15
  */
25
16
  export declare const hasCredentials: () => boolean;
26
17
  /**
@@ -32,7 +32,7 @@ exports.getRunParam = exports.loadDataYml = exports.hasCredentials = exports.cre
32
32
  */
33
33
  const fs_1 = __importDefault(require("fs"));
34
34
  const js_yaml_1 = __importDefault(require("js-yaml"));
35
- const credential_providers_1 = require("@aws-sdk/credential-providers");
35
+ const aws_sdk_1 = __importDefault(require("aws-sdk"));
36
36
  /**
37
37
  * load json in sync.
38
38
  */
@@ -51,34 +51,47 @@ const loadJsonSync = (name, def = {}) => {
51
51
  exports.loadJsonSync = loadJsonSync;
52
52
  /**
53
53
  * dynamic loading credentials by profile. (search PROFILE -> NAME)
54
- *
55
- * TODO -define the return type exactly.
56
- *
57
- * @returns {Promise<any>} - AWS credentials
58
54
  */
59
55
  const asyncCredentials = (profile) => __awaiter(void 0, void 0, void 0, function* () {
60
- const provider = (0, credential_providers_1.fromIni)({ profile });
61
- return provider();
56
+ return new Promise((resolve, reject) => {
57
+ let credentials = null;
58
+ const callback = (e, r) => {
59
+ // e || console.error('! credentials.res :=', r);
60
+ // e && console.error('! credentials.err :=', e);
61
+ if (e)
62
+ reject(e);
63
+ else
64
+ resolve(r || credentials);
65
+ };
66
+ try {
67
+ //WARN! - could not catch AWS.Error `Profile null not found` via callback.
68
+ credentials = new aws_sdk_1.default.SharedIniFileCredentials({ profile, callback });
69
+ aws_sdk_1.default.config.credentials = credentials;
70
+ }
71
+ catch (e) {
72
+ callback(e);
73
+ }
74
+ });
62
75
  });
63
76
  exports.asyncCredentials = asyncCredentials;
64
77
  /**
65
78
  * dynamic loading credentials by profile. (search PROFILE -> NAME)
66
- *
67
- * @deprecated use `asyncCredentials` instead.
68
79
  */
69
80
  const credentials = (profile) => {
70
81
  if (!profile)
71
82
  return '';
72
- throw new Error('WARN! credentials() is deprecated. use `asyncCredentials()` instead!');
83
+ // console.info('! credentials.profile =', profile);
84
+ // WARN! - could not catch AWS.Error `Profile null not found` via callback.
85
+ const credentials = new aws_sdk_1.default.SharedIniFileCredentials({ profile });
86
+ aws_sdk_1.default.config.credentials = credentials;
87
+ return `${profile}`;
73
88
  };
74
89
  exports.credentials = credentials;
75
90
  /**
76
91
  * return whether AWS credentials set
77
- *
78
- * @deprecated use `asyncCredentials` instead.
79
92
  */
80
93
  const hasCredentials = () => {
81
- return false;
94
+ return !!aws_sdk_1.default.config.credentials;
82
95
  };
83
96
  exports.hasCredentials = hasCredentials;
84
97
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,4CAAoB;AACpB,sDAA2B;AAC3B,wEAAwD;AAGxD;;GAEG;AACI,MAAM,YAAY,GAAG,CAAyB,IAAY,EAAE,GAAG,GAAG,EAAE,EAAK,EAAE;IAC9E,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACnD,IAAI;QACA,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAM,CAAC;KAC9C;IAAC,OAAO,CAAC,EAAE;QACR,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAG,GAAW,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;QAC7E,OAAO,GAAQ,CAAC;KACnB;AACL,CAAC,CAAC;AATW,QAAA,YAAY,gBASvB;AAEF;;;;;;GAMG;AACI,MAAM,gBAAgB,GAAG,CAAO,OAAe,EAAkC,EAAE;IACtF,MAAM,QAAQ,GAAG,IAAA,8BAAO,EAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACtC,OAAO,QAAQ,EAAE,CAAC;AACtB,CAAC,CAAA,CAAC;AAHW,QAAA,gBAAgB,oBAG3B;AAEF;;;;GAIG;AACI,MAAM,WAAW,GAAG,CAAC,OAAe,EAAU,EAAE;IACnD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;AAC5F,CAAC,CAAC;AAHW,QAAA,WAAW,eAGtB;AAEF;;;;GAIG;AACI,MAAM,cAAc,GAAG,GAAY,EAAE;IACxC,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAFW,QAAA,cAAc,kBAEzB;AAEF;;GAEG;AACI,MAAM,WAAW,GAAG,CAAyB,IAAY,EAAE,MAAe,EAAK,EAAE;IACpF,MAAM,GAAG,MAAM,IAAI,MAAM,CAAC;IAC1B,MAAM,IAAI,GAAG,KAAK,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3E,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,IAAI,CAAC,CAAC;IAC/E,OAAO,iBAAI,CAAC,IAAI,CAAC,YAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AACpD,CAAC,CAAC;AALW,QAAA,WAAW,eAKtB;AAKF;;GAEG;AACI,MAAM,WAAW,GAAsD,CAAC,CAAC,EAAE,MAAM,EAAE,IAAK,EAAE,EAAE;IAC/F,wHAAwH;IACxH,6CAA6C;IAC7C,IAAI,GAAG,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,aAAa;IAChD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IACnB,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB;IAC7D,IAAI,CAAC,IAAI,CAAC,EAAE;QACR,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE;YAC7B,wBAAwB;YACxB,OAAO,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC;SACtE;aAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;YACnC,sBAAsB;YACtB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SACtC;aAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;YACnC,kBAAkB;YAClB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACxF,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;iBACtB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,OAAO,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;gBACvD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;SAC9B;QACD,OAAO,GAAG,CAAC;KACd;IACD,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AA1BW,QAAA,WAAW,eA0BtB"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,13 @@
1
1
  import { CrendentialForAWS } from '../environ';
2
+ import { RuntimeConfigAwsCredentialIdentityProvider } from '@aws-sdk/types/dist-types/identity/AwsCredentialIdentity';
3
+ import { LemonEngine } from '../engine/types';
4
+ /**
5
+ * Check if the current environment is AWS Lambda
6
+ * @returns {boolean} - true if running in AWS Lambda environment
7
+ */
8
+ export declare const isLambda: () => boolean;
9
+ /** returns only defined */
10
+ export declare const onlyDefined: <T extends object>(N: T, $def?: T) => T;
2
11
  /**
3
12
  * load json in sync.
4
13
  */
@@ -10,6 +19,34 @@ export declare const loadDataYml: <T extends object = any>(file: string, folder?
10
19
  /**
11
20
  * dynamic loading credentials by profile. (search PROFILE -> NAME)
12
21
  *
13
- * @returns {Promise<any>} - AWS credentials
22
+ * @returns {Promise<CrendentialForAWS>} - AWS credentials
23
+ */
24
+ export declare const asyncCredentials: (profile?: string) => Promise<CrendentialForAWS>;
25
+ /**
26
+ * type: `AwsConfigParams`
27
+ * - parameters for AWS config.
28
+ * - used for `awsConfig()`
29
+ */
30
+ export interface AwsConfigParams {
31
+ /** AWS region */
32
+ region?: string;
33
+ /** AWS profile */
34
+ profile?: string;
35
+ /** AWS credentials provider */
36
+ credentials?: RuntimeConfigAwsCredentialIdentityProvider;
37
+ }
38
+ /**
39
+ * load config for aws sdk
40
+ * - if `profile` is not defined, use `AWS_PROFILE` or `default`
41
+ * - if `region` is not defined, use `AWS_REGION` or `ap-northeast-2`
42
+ *
43
+ * ```
44
+ * # run with default profile
45
+ * $ npm run test:watch
46
+ *
47
+ * # run with `lemon` profile
48
+ * #npm run test:watch.lemon
14
49
  */
15
- export declare const asyncCredentials: (profile: string) => Promise<CrendentialForAWS>;
50
+ export declare const awsConfig: <T extends AwsConfigParams>($engine: LemonEngine, params?: string | T | (() => string)) => T & {
51
+ credentials?: RuntimeConfigAwsCredentialIdentityProvider;
52
+ };
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.asyncCredentials = exports.loadDataYml = exports.loadJsonSync = void 0;
15
+ exports.awsConfig = exports.asyncCredentials = exports.loadDataYml = exports.loadJsonSync = exports.onlyDefined = exports.isLambda = void 0;
16
16
  /**
17
17
  * `tools/tools.ts`
18
18
  * - additional helper.
@@ -33,6 +33,24 @@ exports.asyncCredentials = exports.loadDataYml = exports.loadJsonSync = void 0;
33
33
  const fs_1 = __importDefault(require("fs"));
34
34
  const js_yaml_1 = __importDefault(require("js-yaml"));
35
35
  const credential_providers_1 = require("@aws-sdk/credential-providers");
36
+ /**
37
+ * Check if the current environment is AWS Lambda
38
+ * @returns {boolean} - true if running in AWS Lambda environment
39
+ */
40
+ const isLambda = () => {
41
+ var _a;
42
+ return !!((_a = process === null || process === void 0 ? void 0 : process.env) === null || _a === void 0 ? void 0 : _a.AWS_LAMBDA_FUNCTION_NAME);
43
+ };
44
+ exports.isLambda = isLambda;
45
+ /** returns only defined */
46
+ const onlyDefined = (N, $def = null) => N && typeof N === 'object'
47
+ ? Object.entries(N).reduce((N, [k, v]) => {
48
+ if (v !== undefined)
49
+ N[k] = v;
50
+ return N;
51
+ }, {})
52
+ : $def;
53
+ exports.onlyDefined = onlyDefined;
36
54
  /**
37
55
  * load json in sync.
38
56
  */
@@ -63,7 +81,7 @@ exports.loadDataYml = loadDataYml;
63
81
  /**
64
82
  * dynamic loading credentials by profile. (search PROFILE -> NAME)
65
83
  *
66
- * @returns {Promise<any>} - AWS credentials
84
+ * @returns {Promise<CrendentialForAWS>} - AWS credentials
67
85
  */
68
86
  const asyncCredentials = (profile) => __awaiter(void 0, void 0, void 0, function* () {
69
87
  const provider = (0, credential_providers_1.fromIni)({ profile });
@@ -71,4 +89,46 @@ const asyncCredentials = (profile) => __awaiter(void 0, void 0, void 0, function
71
89
  return Object.assign(Object.assign({}, $res), { profile });
72
90
  });
73
91
  exports.asyncCredentials = asyncCredentials;
92
+ /**
93
+ * load config for aws sdk
94
+ * - if `profile` is not defined, use `AWS_PROFILE` or `default`
95
+ * - if `region` is not defined, use `AWS_REGION` or `ap-northeast-2`
96
+ *
97
+ * ```
98
+ * # run with default profile
99
+ * $ npm run test:watch
100
+ *
101
+ * # run with `lemon` profile
102
+ * #npm run test:watch.lemon
103
+ */
104
+ const awsConfig = ($engine,
105
+ /** params or region */
106
+ params) => {
107
+ var _a;
108
+ const errScope = `awsConfig(${(_a = $engine === null || $engine === void 0 ? void 0 : $engine.id) !== null && _a !== void 0 ? _a : ''})`;
109
+ const region = params === undefined
110
+ ? 'ap-northeast-2'
111
+ : typeof params === 'string'
112
+ ? params
113
+ : typeof params === 'function'
114
+ ? params()
115
+ : params === null || params === void 0 ? void 0 : params.region;
116
+ const _conf = typeof params === 'object' ? params : null;
117
+ // If running in Lambda environment, set profile to 'none'
118
+ const profile = (0, exports.isLambda)() ? 'none' : $engine === null || $engine === void 0 ? void 0 : $engine.environ('NAME', 'none');
119
+ if (typeof profile !== 'string')
120
+ throw new Error(`@env.NAME[${typeof profile}] is invalid (check $engine) - ${errScope}`);
121
+ //* build defualt config.
122
+ const $conf = (0, exports.onlyDefined)(Object.assign({ profile: profile && profile !== 'none' ? profile : undefined, region }, _conf));
123
+ if (typeof $conf.region === 'string' && !$conf.region)
124
+ throw new Error(`.region[${$conf.region}] is invalid (empty) - ${errScope}`);
125
+ //! load the credentials provider(async function).
126
+ const credentials = typeof $conf.credentials === 'function'
127
+ ? $conf.credentials
128
+ : $conf.profile
129
+ ? (0, credential_providers_1.fromIni)({ profile: $conf.profile })
130
+ : undefined;
131
+ return (0, exports.onlyDefined)(Object.assign(Object.assign({}, $conf), { credentials }));
132
+ };
133
+ exports.awsConfig = awsConfig;
74
134
  //# sourceMappingURL=tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/tools/tools.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,4CAAoB;AACpB,sDAA2B;AAC3B,wEAAwD;AAGxD;;GAEG;AACI,MAAM,YAAY,GAAG,CAAyB,IAAY,EAAE,GAAG,GAAG,EAAE,EAAK,EAAE;IAC9E,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACnD,IAAI;QACA,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAM,CAAC;KAC9C;IAAC,OAAO,CAAC,EAAE;QACR,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAG,GAAW,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;QAC7E,OAAO,GAAQ,CAAC;KACnB;AACL,CAAC,CAAC;AATW,QAAA,YAAY,gBASvB;AAEF;;GAEG;AACI,MAAM,WAAW,GAAG,CAAyB,IAAY,EAAE,MAAe,EAAK,EAAE;IACpF,MAAM,GAAG,MAAM,IAAI,MAAM,CAAC;IAC1B,MAAM,IAAI,GAAG,KAAK,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3E,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,IAAI,CAAC,CAAC;IAC/E,OAAO,iBAAI,CAAC,IAAI,CAAC,YAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AACpD,CAAC,CAAC;AALW,QAAA,WAAW,eAKtB;AAEF;;;;GAIG;AACI,MAAM,gBAAgB,GAAG,CAAO,OAAe,EAA8B,EAAE;IAClF,MAAM,QAAQ,GAAG,IAAA,8BAAO,EAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC9B,uCAAY,IAAI,KAAE,OAAO,IAAG;AAChC,CAAC,CAAA,CAAC;AAJW,QAAA,gBAAgB,oBAI3B"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/tools/tools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lemon-core",
3
- "version": "4.0.2",
3
+ "version": "4.0.4",
4
4
  "description": "Lemon Serverless Micro-Service Platform",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -18,7 +18,7 @@
18
18
  "test.lemon": "ENV=lemon npm run test",
19
19
  "test:dev": "LS=1 jest --config=jest.config.json --watchAll",
20
20
  "!test:watch": "---- custom test with profile -----",
21
- "test:watch": "LS=1 AWS_SDK_JS_SUPPRESS_MAINTENANCE_MODE_MESSAGE=1 jest --config=jest.config.json --watchAll",
21
+ "test:watch": "LS=1 jest --config=jest.config.json --watchAll",
22
22
  "test:watch.lemon": "ENV=lemon npm run test:watch",
23
23
  "!prepare": "------- run self-test with jest -----",
24
24
  "prepare": "npm run build",
@@ -106,6 +106,7 @@
106
106
  "husky": "^8.0.3",
107
107
  "jest": "^28.1.3",
108
108
  "jest-jasmine2": "^28.1.3",
109
+ "lemon-devkit": "^0.0.3",
109
110
  "lint-staged": "^13.1.0",
110
111
  "prettier": "^2.7.1",
111
112
  "superagent": "^5.3.1",