lemon-core 4.0.1 → 4.0.3

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 (80) hide show
  1. package/dist/cores/aws/aws-kms-service.js +5 -10
  2. package/dist/cores/aws/aws-kms-service.js.map +1 -1
  3. package/dist/cores/aws/aws-s3-service.d.ts +8 -2
  4. package/dist/cores/aws/aws-s3-service.js +51 -15
  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 +3 -3
  14. package/dist/cores/dynamo/dynamo-query-service.js.map +1 -1
  15. package/dist/cores/dynamo/dynamo-scan-service.d.ts +7 -1
  16. package/dist/cores/dynamo/dynamo-scan-service.js +10 -3
  17. package/dist/cores/dynamo/dynamo-scan-service.js.map +1 -1
  18. package/dist/cores/dynamo/dynamo-service.d.ts +1 -1
  19. package/dist/cores/dynamo/dynamo-service.js +45 -14
  20. package/dist/cores/dynamo/dynamo-service.js.map +1 -1
  21. package/dist/cores/dynamo/tools/expressions.d.ts +0 -10
  22. package/dist/cores/dynamo/tools/expressions.js +12 -12
  23. package/dist/cores/dynamo/tools/expressions.js.map +1 -1
  24. package/dist/cores/dynamo/tools/query.d.ts +0 -10
  25. package/dist/cores/dynamo/tools/query.js +12 -12
  26. package/dist/cores/dynamo/tools/query.js.map +1 -1
  27. package/dist/cores/dynamo/tools/scan.d.ts +0 -10
  28. package/dist/cores/dynamo/tools/scan.js +12 -12
  29. package/dist/cores/dynamo/tools/scan.js.map +1 -1
  30. package/dist/cores/dynamo/tools/serializer.d.ts +0 -10
  31. package/dist/cores/dynamo/tools/serializer.js +25 -16
  32. package/dist/cores/dynamo/tools/serializer.js.map +1 -1
  33. package/dist/cores/dynamo/tools/utils.d.ts +3 -11
  34. package/dist/cores/dynamo/tools/utils.js +17 -17
  35. package/dist/cores/dynamo/tools/utils.js.map +1 -1
  36. package/dist/cores/lambda/lambda-handler.d.ts +5 -0
  37. package/dist/cores/lambda/lambda-handler.js +13 -0
  38. package/dist/cores/lambda/lambda-handler.js.map +1 -1
  39. package/dist/cores/lambda/lambda-web-handler.d.ts +10 -2
  40. package/dist/cores/lambda/lambda-web-handler.js +4 -14
  41. package/dist/cores/lambda/lambda-web-handler.js.map +1 -1
  42. package/dist/cores/protocol/protocol-service.d.ts +2 -1
  43. package/dist/cores/protocol/protocol-service.js +74 -25
  44. package/dist/cores/protocol/protocol-service.js.map +1 -1
  45. package/dist/engine/utilities.d.ts +4 -0
  46. package/dist/engine/utilities.js +34 -8
  47. package/dist/engine/utilities.js.map +1 -1
  48. package/dist/environ.d.ts +9 -30
  49. package/dist/environ.js +54 -18
  50. package/dist/environ.js.map +1 -1
  51. package/dist/extended/abstract-service.d.ts +3 -12
  52. package/dist/extended/abstract-service.js +1 -28
  53. package/dist/extended/abstract-service.js.map +1 -1
  54. package/dist/helpers/helpers.js +2 -7
  55. package/dist/helpers/helpers.js.map +1 -1
  56. package/dist/lib/dynamo/expressions.d.ts +14 -0
  57. package/dist/lib/dynamo/expressions.js +212 -0
  58. package/dist/lib/dynamo/expressions.js.map +1 -0
  59. package/dist/lib/dynamo/query.d.ts +43 -0
  60. package/dist/lib/dynamo/query.js +246 -0
  61. package/dist/lib/dynamo/query.js.map +1 -0
  62. package/dist/lib/dynamo/scan.d.ts +33 -0
  63. package/dist/lib/dynamo/scan.js +172 -0
  64. package/dist/lib/dynamo/scan.js.map +1 -0
  65. package/dist/lib/dynamo/serializer.d.ts +12 -0
  66. package/dist/lib/dynamo/serializer.js +243 -0
  67. package/dist/lib/dynamo/serializer.js.map +1 -0
  68. package/dist/lib/dynamo/utils.d.ts +15 -0
  69. package/dist/lib/dynamo/utils.js +129 -0
  70. package/dist/lib/dynamo/utils.js.map +1 -0
  71. package/dist/tools/express.d.ts +18 -32
  72. package/dist/tools/express.js +56 -7
  73. package/dist/tools/express.js.map +1 -1
  74. package/dist/tools/shared.d.ts +1 -8
  75. package/dist/tools/shared.js +23 -14
  76. package/dist/tools/shared.js.map +1 -1
  77. package/dist/tools/tools.d.ts +34 -2
  78. package/dist/tools/tools.js +52 -2
  79. package/dist/tools/tools.js.map +1 -1
  80. package/package.json +7 -6
@@ -0,0 +1,243 @@
1
+ "use strict";
2
+ // origin from: https://github.com/baseprime/dynamodb @20191106
3
+ // Copyright (c) 2016 Ryan Fitzgerald
4
+ /**
5
+ * `serialize.ts`
6
+ * - serialize
7
+ *
8
+ *
9
+ * @author Steve Jung <steve@lemoncloud.io>
10
+ * @date 2019-11-20 refactoring to ts via origin
11
+ *
12
+ * @copyright (C) lemoncloud.io 2019 - All Rights Reserved.
13
+ */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ var __importDefault = (this && this.__importDefault) || function (mod) {
38
+ return (mod && mod.__esModule) ? mod : { "default": mod };
39
+ };
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ const lodash_1 = __importDefault(require("lodash"));
42
+ const utils = __importStar(require("./utils"));
43
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
44
+ const DocClient = require('aws-sdk/lib/dynamodb/document_client');
45
+ const serializer = {};
46
+ const internals = {
47
+ docClient: new DocClient(),
48
+ createSet: function (value, opt) {
49
+ if (lodash_1.default.isArray(value)) {
50
+ return internals.docClient.createSet(value);
51
+ }
52
+ else {
53
+ return internals.docClient.createSet([value]);
54
+ }
55
+ },
56
+ serialize: {
57
+ binary: function (value) {
58
+ if (lodash_1.default.isString(value)) {
59
+ return utils.strToBin(value);
60
+ }
61
+ return value;
62
+ },
63
+ date: function (value) {
64
+ if (lodash_1.default.isDate(value)) {
65
+ return value.toISOString();
66
+ }
67
+ else {
68
+ return new Date(value).toISOString();
69
+ }
70
+ },
71
+ boolean: function (value) {
72
+ if (value && value !== 'false') {
73
+ return true;
74
+ }
75
+ else {
76
+ return false;
77
+ }
78
+ },
79
+ stringSet: function (value) {
80
+ return internals.createSet(value, 'S');
81
+ },
82
+ numberSet: function (value) {
83
+ return internals.createSet(value, 'N');
84
+ },
85
+ binarySet: function (value) {
86
+ let bins = value;
87
+ if (!lodash_1.default.isArray(value)) {
88
+ bins = [value];
89
+ }
90
+ const vals = lodash_1.default.map(bins, serialize.binary);
91
+ return internals.createSet(vals, 'B');
92
+ },
93
+ },
94
+ deserializeAttribute: (value) => {
95
+ if (lodash_1.default.isObject(value) && lodash_1.default.isFunction(value.detectType) && lodash_1.default.isArray(value.values)) {
96
+ // value is a Set object from document client
97
+ return value.values;
98
+ }
99
+ else {
100
+ return value;
101
+ }
102
+ },
103
+ serializeAttribute: (value, type, options) => {
104
+ if (!type) {
105
+ // if type is unknown, possibly because its an dynamic key return given value
106
+ return value;
107
+ }
108
+ if (lodash_1.default.isNull(value)) {
109
+ return null;
110
+ }
111
+ options = options || {};
112
+ switch (type) {
113
+ case 'DATE':
114
+ return serialize.date(value);
115
+ case 'BOOL':
116
+ return serialize.boolean(value);
117
+ case 'B':
118
+ return serialize.binary(value);
119
+ case 'NS':
120
+ return serialize.numberSet(value);
121
+ case 'SS':
122
+ return serialize.stringSet(value);
123
+ case 'BS':
124
+ return serialize.binarySet(value);
125
+ default:
126
+ return value;
127
+ }
128
+ },
129
+ };
130
+ const serialize = internals.serialize;
131
+ serializer.serializeAttribute = internals.serializeAttribute;
132
+ serializer.buildKey = (hashKey, rangeKey, schema) => {
133
+ const obj = {};
134
+ if (lodash_1.default.isPlainObject(hashKey)) {
135
+ obj[schema.hashKey] = hashKey[schema.hashKey];
136
+ if (schema.rangeKey && !lodash_1.default.isNull(hashKey[schema.rangeKey]) && !lodash_1.default.isUndefined(hashKey[schema.rangeKey])) {
137
+ obj[schema.rangeKey] = hashKey[schema.rangeKey];
138
+ }
139
+ lodash_1.default.each(schema.globalIndexes, function (keys) {
140
+ if (lodash_1.default.has(hashKey, keys.hashKey)) {
141
+ obj[keys.hashKey] = hashKey[keys.hashKey];
142
+ }
143
+ if (lodash_1.default.has(hashKey, keys.rangeKey)) {
144
+ obj[keys.rangeKey] = hashKey[keys.rangeKey];
145
+ }
146
+ });
147
+ lodash_1.default.each(schema.secondaryIndexes, function (keys) {
148
+ if (lodash_1.default.has(hashKey, keys.rangeKey)) {
149
+ obj[keys.rangeKey] = hashKey[keys.rangeKey];
150
+ }
151
+ });
152
+ }
153
+ else {
154
+ obj[schema.hashKey] = hashKey;
155
+ if (schema.rangeKey && !lodash_1.default.isNull(rangeKey) && !lodash_1.default.isUndefined(rangeKey)) {
156
+ obj[schema.rangeKey] = rangeKey;
157
+ }
158
+ }
159
+ return serializer.serializeItem(schema, obj);
160
+ };
161
+ serializer.serializeItem = (schema, item, options) => {
162
+ options = options || {};
163
+ const serialize = function (item, datatypes) {
164
+ datatypes = datatypes || {};
165
+ if (!item) {
166
+ return null;
167
+ }
168
+ return lodash_1.default.reduce(item, function (result, val, key) {
169
+ if (options.expected && lodash_1.default.isObject(val) && lodash_1.default.isBoolean(val.Exists)) {
170
+ result[key] = val;
171
+ return result;
172
+ }
173
+ if (lodash_1.default.isPlainObject(val)) {
174
+ result[key] = serialize(val, datatypes[key]);
175
+ return result;
176
+ }
177
+ if (lodash_1.default.isArray(val) && lodash_1.default.isArray(datatypes[key])) {
178
+ result[key] = lodash_1.default.map(val, function (item) {
179
+ return serialize(item, datatypes[key][0]);
180
+ });
181
+ return result;
182
+ }
183
+ const attr = internals.serializeAttribute(val, datatypes[key], options);
184
+ if (!lodash_1.default.isNull(attr) || options.returnNulls) {
185
+ if (options.expected) {
186
+ result[key] = { Value: attr };
187
+ }
188
+ else {
189
+ result[key] = attr;
190
+ }
191
+ }
192
+ return result;
193
+ }, {});
194
+ };
195
+ return serialize(item, schema._modelDatatypes);
196
+ };
197
+ serializer.serializeItemForUpdate = function (schema, action, item) {
198
+ const datatypes = schema._modelDatatypes;
199
+ const data = utils.omitPrimaryKeys(schema, item);
200
+ return lodash_1.default.reduce(data, function (result, value, key) {
201
+ if (lodash_1.default.isNull(value)) {
202
+ result[key] = { Action: 'DELETE' };
203
+ }
204
+ else if (lodash_1.default.isPlainObject(value) && value.$add) {
205
+ result[key] = { Action: 'ADD', Value: internals.serializeAttribute(value.$add, datatypes[key]) };
206
+ }
207
+ else if (lodash_1.default.isPlainObject(value) && value.$del) {
208
+ result[key] = { Action: 'DELETE', Value: internals.serializeAttribute(value.$del, datatypes[key]) };
209
+ }
210
+ else {
211
+ result[key] = { Action: action, Value: internals.serializeAttribute(value, datatypes[key]) };
212
+ }
213
+ return result;
214
+ }, {});
215
+ };
216
+ serializer.deserializeItem = function (item) {
217
+ if (lodash_1.default.isNull(item)) {
218
+ return null;
219
+ }
220
+ const formatter = (data) => {
221
+ let map = lodash_1.default.mapValues;
222
+ if (lodash_1.default.isArray(data)) {
223
+ map = lodash_1.default.map;
224
+ }
225
+ return map(data, function (value) {
226
+ let result;
227
+ if (lodash_1.default.isPlainObject(value)) {
228
+ result = formatter(value);
229
+ }
230
+ else if (lodash_1.default.isArray(value)) {
231
+ result = formatter(value);
232
+ }
233
+ else {
234
+ result = internals.deserializeAttribute(value);
235
+ }
236
+ return result;
237
+ });
238
+ };
239
+ return formatter(item);
240
+ };
241
+ //* export default
242
+ exports.default = serializer;
243
+ //# sourceMappingURL=serializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../../src/lib/dynamo/serializer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `utils.ts`
3
+ * - utils
4
+ *
5
+ *
6
+ * @author Steve Jung <steve@lemoncloud.io>
7
+ * @date 2019-11-20 refactoring to ts via origin
8
+ *
9
+ * @copyright (C) lemoncloud.io 2019 - All Rights Reserved.
10
+ */
11
+ export declare const omitNulls: (data: any) => Partial<any>;
12
+ export declare const mergeResults: (responses: any, tableName: string) => any;
13
+ export declare const paginatedRequest: (self: any, runRequestFunc: any, callback: any) => void;
14
+ export declare const omitPrimaryKeys: (schema: any, params: any) => Pick<any, never>;
15
+ export declare const strToBin: (value: any) => any;
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ // origin from: https://github.com/baseprime/dynamodb @20191106
3
+ // Copyright (c) 2016 Ryan Fitzgerald
4
+ /**
5
+ * `utils.ts`
6
+ * - utils
7
+ *
8
+ *
9
+ * @author Steve Jung <steve@lemoncloud.io>
10
+ * @date 2019-11-20 refactoring to ts via origin
11
+ *
12
+ * @copyright (C) lemoncloud.io 2019 - All Rights Reserved.
13
+ */
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.strToBin = exports.omitPrimaryKeys = exports.paginatedRequest = exports.mergeResults = exports.omitNulls = void 0;
19
+ const lodash_1 = __importDefault(require("lodash"));
20
+ const async_1 = __importDefault(require("async"));
21
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
22
+ const AWSUtil = require('aws-sdk/lib/util');
23
+ const omitNulls = (data) => {
24
+ return lodash_1.default.omitBy(data, function (value) {
25
+ return (lodash_1.default.isNull(value) ||
26
+ lodash_1.default.isUndefined(value) ||
27
+ (lodash_1.default.isArray(value) && lodash_1.default.isEmpty(value)) ||
28
+ (lodash_1.default.isString(value) && lodash_1.default.isEmpty(value)));
29
+ });
30
+ };
31
+ exports.omitNulls = omitNulls;
32
+ const mergeResults = (responses, tableName) => {
33
+ const result = {
34
+ Items: [],
35
+ ConsumedCapacity: {
36
+ CapacityUnits: 0,
37
+ TableName: tableName,
38
+ },
39
+ Count: 0,
40
+ ScannedCount: 0,
41
+ };
42
+ const merged = lodash_1.default.reduce(responses, (memo, resp) => {
43
+ if (!resp) {
44
+ return memo;
45
+ }
46
+ memo.Count += resp.Count || 0;
47
+ memo.ScannedCount += resp.ScannedCount || 0;
48
+ if (resp.ConsumedCapacity) {
49
+ memo.ConsumedCapacity.CapacityUnits += resp.ConsumedCapacity.CapacityUnits || 0;
50
+ }
51
+ if (resp.Items) {
52
+ memo.Items = memo.Items.concat(resp.Items);
53
+ }
54
+ if (resp.LastEvaluatedKey) {
55
+ memo.LastEvaluatedKey = resp.LastEvaluatedKey;
56
+ }
57
+ return memo;
58
+ }, result);
59
+ if (merged.ConsumedCapacity.CapacityUnits === 0) {
60
+ delete merged.ConsumedCapacity;
61
+ }
62
+ if (merged.ScannedCount === 0) {
63
+ delete merged.ScannedCount;
64
+ }
65
+ return merged;
66
+ };
67
+ exports.mergeResults = mergeResults;
68
+ const paginatedRequest = (self, runRequestFunc, callback) => {
69
+ // if callback isn't passed switch to stream
70
+ if (!callback) {
71
+ throw new Error('@callback is required');
72
+ }
73
+ let lastEvaluatedKey = null;
74
+ const responses = [];
75
+ let retry = false;
76
+ const doFunc = function (callback) {
77
+ if (lastEvaluatedKey) {
78
+ self.startKey(lastEvaluatedKey);
79
+ }
80
+ runRequestFunc(self.buildRequest(), function (err, resp) {
81
+ if (err && err.retryable) {
82
+ retry = true;
83
+ return setImmediate(callback);
84
+ }
85
+ else if (err) {
86
+ retry = false;
87
+ return setImmediate(callback, err);
88
+ }
89
+ retry = false;
90
+ lastEvaluatedKey = resp.LastEvaluatedKey;
91
+ responses.push(resp);
92
+ return setImmediate(callback);
93
+ });
94
+ };
95
+ const testFunc = function () {
96
+ return (self.options.loadAll && lastEvaluatedKey) || retry;
97
+ };
98
+ const resulsFunc = function (err) {
99
+ if (err) {
100
+ return callback(err);
101
+ }
102
+ return callback(null, (0, exports.mergeResults)(responses, self.table.tableName()));
103
+ };
104
+ async_1.default.doWhilst(doFunc, testFunc, resulsFunc);
105
+ };
106
+ exports.paginatedRequest = paginatedRequest;
107
+ const omitPrimaryKeys = function (schema, params) {
108
+ return lodash_1.default.omit(params, schema.hashKey, schema.rangeKey);
109
+ };
110
+ exports.omitPrimaryKeys = omitPrimaryKeys;
111
+ const strToBin = function (value) {
112
+ if (typeof value !== 'string') {
113
+ const StrConversionError = 'Need to pass in string primitive to be converted to binary.';
114
+ throw new Error(StrConversionError);
115
+ }
116
+ if (AWSUtil.isBrowser()) {
117
+ const len = value.length;
118
+ const bin = new Uint8Array(new ArrayBuffer(len));
119
+ for (let i = 0; i < len; i++) {
120
+ bin[i] = value.charCodeAt(i);
121
+ }
122
+ return bin;
123
+ }
124
+ else {
125
+ return AWSUtil.Buffer(value);
126
+ }
127
+ };
128
+ exports.strToBin = strToBin;
129
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lib/dynamo/utils.ts"],"names":[],"mappings":"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"}
@@ -1,29 +1,3 @@
1
- /**
2
- * Express Server Application.
3
- * - standalone http service with express.
4
- *
5
- *
6
- * ```bash
7
- * #run-server (use lemon.yml:local)
8
- * $ npm install -g nodemon
9
- * $ ENV=lemon STAGE=local nodemon express.js
10
- * ```
11
- *
12
- * [TODO]
13
- * - [ ] 190801 proper content type `text/plain`
14
- * - [x] 190801 change router underscore char like `loopers_front` -> `loopers-front`
15
- *
16
- *
17
- * @author Steve Jung <steve@lemoncloud.io>
18
- * @date 2019-07-31 support ECMA 2016.
19
- * @date 2019-08-01a auto register api with pattern. `/^[a-z][a-z0-9\-_]+$/`
20
- * @date 2019-08-07 ignore `engine.dt` function.
21
- * @date 2019-11-26 cleanup and optimized for `lemon-core#v2`
22
- * @date 2020-01-23 improve context information via headers.
23
- * @date 2025-05-20 cleanup `express` out of this module.
24
- *
25
- * @copyright (C) lemoncloud.io 2019 - All Rights Reserved.
26
- */
27
1
  import { LemonEngine } from '../engine/types';
28
2
  import { LambdaWEBHandler } from '../cores/lambda/lambda-web-handler';
29
3
  /**
@@ -49,12 +23,24 @@ export interface ExpressFactoryResult {
49
23
  /** create server listener */
50
24
  createServer: (...args: any[]) => any;
51
25
  }
52
- export declare const buildExpress: ($engine: LemonEngine, $web: LambdaWEBHandler, options?: {
26
+ /**
27
+ * type: `BuildExpressOptions`
28
+ * - options for `buildExpress()`
29
+ */
30
+ export interface BuildExpressOptions {
31
+ /** run arguments */
53
32
  argv?: string[];
33
+ /** prefix as ROUTE_PREFIX */
54
34
  prefix?: string;
35
+ /** request-id generator */
55
36
  genRequestId?: () => string;
56
- }) => {
57
- express: () => any;
58
- app: any;
59
- createServer: () => any;
60
- };
37
+ /** (optional) loader of module */
38
+ loadModule?: <T = any>(mod: string) => T;
39
+ }
40
+ /**
41
+ * create Server Instance.
42
+ *
43
+ * @param $engine - LemonEngine by `buildEngine()`
44
+ * @param $web - LambdaWEBHandler in `$cores`
45
+ */
46
+ export declare const buildExpress: ($engine: LemonEngine, $web: LambdaWEBHandler, options?: BuildExpressOptions) => ExpressFactoryResult;
@@ -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,20 +1,13 @@
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
  /**
@@ -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,30 +51,39 @@ 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('credentials is deprecated. use `asyncCredentials` instead.');
73
83
  // console.info('! credentials.profile =', profile);
74
84
  // WARN! - could not catch AWS.Error `Profile null not found` via callback.
75
- const credentials = new AWS.SharedIniFileCredentials({ profile });
76
- //TODO - override the global config.
77
- AWS.config.credentials = credentials;
85
+ const credentials = new aws_sdk_1.default.SharedIniFileCredentials({ profile });
86
+ aws_sdk_1.default.config.credentials = credentials;
78
87
  return `${profile}`;
79
88
  };
80
89
  exports.credentials = credentials;
@@ -82,7 +91,7 @@ exports.credentials = credentials;
82
91
  * return whether AWS credentials set
83
92
  */
84
93
  const hasCredentials = () => {
85
- return !!AWS.config.credentials;
94
+ return !!aws_sdk_1.default.config.credentials;
86
95
  };
87
96
  exports.hasCredentials = hasCredentials;
88
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,4DAA4D,CAAC,CAAC;IAC9E,oDAAoD;IACpD,2EAA2E;IAC3E,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,wBAAwB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAClE,oCAAoC;IACpC,GAAG,CAAC,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;IACrC,OAAO,GAAG,OAAO,EAAE,CAAC;AACxB,CAAC,CAAC;AATW,QAAA,WAAW,eAStB;AAEF;;GAEG;AACI,MAAM,cAAc,GAAG,GAAY,EAAE;IACxC,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;AACpC,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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"}