evaengine 0.11.2 → 1.0.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.
Files changed (141) hide show
  1. package/.ai/analysis.md +657 -0
  2. package/.ai/architecture/runtime.md +504 -0
  3. package/.ai/contracts/public-api.md +447 -0
  4. package/.ai/external-project-guide.md +248 -0
  5. package/.ai/vision.md +314 -0
  6. package/README.md +51 -62
  7. package/bin/engine +15 -21
  8. package/index.js +2 -18
  9. package/package.json +60 -64
  10. package/src/commands/index.js +12 -0
  11. package/{lib → src}/commands/interface.js +5 -11
  12. package/src/commands/make_entity.js +490 -0
  13. package/src/commands/tramp.js +34 -0
  14. package/{lib → src}/config/index.js +7 -9
  15. package/{lib → src}/di.js +11 -26
  16. package/src/engine.js +551 -0
  17. package/{lib → src}/entities/index.js +72 -82
  18. package/{lib → src}/exceptions/index.js +71 -92
  19. package/src/index.js +57 -0
  20. package/src/middlewares/auth.js +67 -0
  21. package/src/middlewares/auth_kong.js +28 -0
  22. package/src/middlewares/debug.js +88 -0
  23. package/src/middlewares/index.js +18 -0
  24. package/src/middlewares/providers.js +73 -0
  25. package/src/middlewares/session.js +58 -0
  26. package/{lib → src}/middlewares/trace.js +74 -86
  27. package/src/middlewares/validator.js +50 -0
  28. package/src/middlewares/view_cache.js +127 -0
  29. package/{lib → src}/services/cache.js +45 -56
  30. package/src/services/config.js +111 -0
  31. package/src/services/env.js +28 -0
  32. package/src/services/event_manager.js +84 -0
  33. package/src/services/http_client.js +160 -0
  34. package/src/services/index.js +27 -0
  35. package/src/services/interface.js +5 -0
  36. package/src/services/joi.js +13 -0
  37. package/src/services/jwt_token.js +89 -0
  38. package/src/services/jwt_token_kong.js +75 -0
  39. package/src/services/logger.js +148 -0
  40. package/src/services/namespace.js +176 -0
  41. package/src/services/now.js +49 -0
  42. package/src/services/providers.js +158 -0
  43. package/src/services/redis.js +55 -0
  44. package/src/services/rest_client.js +112 -0
  45. package/src/swagger/index.js +668 -0
  46. package/{lib → src}/utils/api_scaffold.js +26 -39
  47. package/src/utils/case_converter.js +33 -0
  48. package/src/utils/crc32.js +44 -0
  49. package/src/utils/datetime.js +13 -0
  50. package/src/utils/host.js +39 -0
  51. package/src/utils/index.js +35 -0
  52. package/{lib → src}/utils/pagination.js +22 -31
  53. package/src/utils/random.js +23 -0
  54. package/{lib → src}/utils/smart_query.js +27 -27
  55. package/src/utils/test.js +48 -0
  56. package/src/utils/wrapper.js +8 -0
  57. package/bin/engine-babel +0 -38
  58. package/lib/commands/index.js +0 -25
  59. package/lib/commands/index.js.map +0 -1
  60. package/lib/commands/interface.js.map +0 -1
  61. package/lib/commands/make_entity.js +0 -549
  62. package/lib/commands/make_entity.js.map +0 -1
  63. package/lib/commands/tramp.js +0 -53
  64. package/lib/commands/tramp.js.map +0 -1
  65. package/lib/config/index.js.map +0 -1
  66. package/lib/di.js.map +0 -1
  67. package/lib/engine.js +0 -558
  68. package/lib/engine.js.map +0 -1
  69. package/lib/entities/index.js.map +0 -1
  70. package/lib/exceptions/index.js.map +0 -1
  71. package/lib/index.js +0 -105
  72. package/lib/index.js.map +0 -1
  73. package/lib/middlewares/auth.js +0 -97
  74. package/lib/middlewares/auth.js.map +0 -1
  75. package/lib/middlewares/auth_kong.js +0 -48
  76. package/lib/middlewares/auth_kong.js.map +0 -1
  77. package/lib/middlewares/debug.js +0 -68
  78. package/lib/middlewares/debug.js.map +0 -1
  79. package/lib/middlewares/index.js +0 -45
  80. package/lib/middlewares/index.js.map +0 -1
  81. package/lib/middlewares/providers.js +0 -102
  82. package/lib/middlewares/providers.js.map +0 -1
  83. package/lib/middlewares/session.js +0 -76
  84. package/lib/middlewares/session.js.map +0 -1
  85. package/lib/middlewares/trace.js.map +0 -1
  86. package/lib/middlewares/validator.js +0 -71
  87. package/lib/middlewares/validator.js.map +0 -1
  88. package/lib/middlewares/view_cache.js +0 -160
  89. package/lib/middlewares/view_cache.js.map +0 -1
  90. package/lib/services/cache.js.map +0 -1
  91. package/lib/services/config.js +0 -140
  92. package/lib/services/config.js.map +0 -1
  93. package/lib/services/env.js +0 -40
  94. package/lib/services/env.js.map +0 -1
  95. package/lib/services/event_manager.js +0 -110
  96. package/lib/services/event_manager.js.map +0 -1
  97. package/lib/services/http_client.js +0 -178
  98. package/lib/services/http_client.js.map +0 -1
  99. package/lib/services/index.js +0 -70
  100. package/lib/services/index.js.map +0 -1
  101. package/lib/services/interface.js +0 -12
  102. package/lib/services/interface.js.map +0 -1
  103. package/lib/services/joi.js +0 -28
  104. package/lib/services/joi.js.map +0 -1
  105. package/lib/services/jwt_token.js +0 -120
  106. package/lib/services/jwt_token.js.map +0 -1
  107. package/lib/services/jwt_token_kong.js +0 -111
  108. package/lib/services/jwt_token_kong.js.map +0 -1
  109. package/lib/services/logger.js +0 -172
  110. package/lib/services/logger.js.map +0 -1
  111. package/lib/services/namespace.js +0 -188
  112. package/lib/services/namespace.js.map +0 -1
  113. package/lib/services/now.js +0 -69
  114. package/lib/services/now.js.map +0 -1
  115. package/lib/services/providers.js +0 -195
  116. package/lib/services/providers.js.map +0 -1
  117. package/lib/services/redis.js +0 -77
  118. package/lib/services/redis.js.map +0 -1
  119. package/lib/services/rest_client.js +0 -136
  120. package/lib/services/rest_client.js.map +0 -1
  121. package/lib/swagger/index.js +0 -684
  122. package/lib/swagger/index.js.map +0 -1
  123. package/lib/utils/api_scaffold.js.map +0 -1
  124. package/lib/utils/case_converter.js +0 -48
  125. package/lib/utils/case_converter.js.map +0 -1
  126. package/lib/utils/crc32.js +0 -22
  127. package/lib/utils/crc32.js.map +0 -1
  128. package/lib/utils/datetime.js +0 -21
  129. package/lib/utils/datetime.js.map +0 -1
  130. package/lib/utils/host.js +0 -48
  131. package/lib/utils/host.js.map +0 -1
  132. package/lib/utils/index.js +0 -61
  133. package/lib/utils/index.js.map +0 -1
  134. package/lib/utils/pagination.js.map +0 -1
  135. package/lib/utils/random.js +0 -33
  136. package/lib/utils/random.js.map +0 -1
  137. package/lib/utils/smart_query.js.map +0 -1
  138. package/lib/utils/test.js +0 -62
  139. package/lib/utils/test.js.map +0 -1
  140. package/lib/utils/wrapper.js +0 -9
  141. package/lib/utils/wrapper.js.map +0 -1
@@ -1,76 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
-
7
- var _expressSession = require('express-session');
8
-
9
- var _expressSession2 = _interopRequireDefault(_expressSession);
10
-
11
- var _connectRedis = require('connect-redis');
12
-
13
- var _connectRedis2 = _interopRequireDefault(_connectRedis);
14
-
15
- var _constitute = require('constitute');
16
-
17
- var _config2 = require('../services/config');
18
-
19
- var _config3 = _interopRequireDefault(_config2);
20
-
21
- var _redis = require('../services/redis');
22
-
23
- var _redis2 = _interopRequireDefault(_redis);
24
-
25
- var _namespace = require('../services/namespace');
26
-
27
- var _namespace2 = _interopRequireDefault(_namespace);
28
-
29
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
30
-
31
- let middleware = null;
32
-
33
- //Fix issue https://github.com/othiym23/node-continuation-local-storage/issues/29
34
- const clsifyMiddleware = (fn, ns) => (req, res, next) => fn.call(undefined, req, res, ns.bind(next));
35
-
36
- /**
37
- * @param _config {Config}
38
- * @param redis {Redis}
39
- * @param namespace {Namespace}
40
- * @returns {function()}
41
- * @constructor
42
- */
43
- function SessionMiddleware(_config, redis, namespace) {
44
- return () => {
45
- if (middleware) {
46
- return middleware;
47
- }
48
- const RedisStore = (0, _connectRedis2.default)(_expressSession2.default);
49
- let store = null;
50
- const config = _config.get().session;
51
-
52
- if (config.store) {
53
- const RedisClient = new RedisStore(Object.assign({}, config.store));
54
- RedisClient.client.on('error', err => {
55
- throw err;
56
- });
57
- store = RedisClient;
58
- } else {
59
- store = new RedisStore(Object.assign({}, { client: redis.getInstance() }));
60
- }
61
-
62
- middleware = (0, _expressSession2.default)({
63
- store,
64
- cookie: Object.assign({}, _config.get().cookie),
65
- secret: config.secret,
66
- resave: config.resave,
67
- saveUninitialized: config.saveUninitialized
68
- });
69
-
70
- return namespace.isEnabled() ? clsifyMiddleware(middleware, namespace.use().getContext()) : middleware;
71
- };
72
- }
73
- (0, _constitute.Dependencies)(_config3.default, _redis2.default, _namespace2.default)(SessionMiddleware); //eslint-disable-line new-cap
74
-
75
- exports.default = SessionMiddleware;
76
- //# sourceMappingURL=session.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/middlewares/session.js"],"names":["middleware","clsifyMiddleware","fn","ns","req","res","next","call","bind","SessionMiddleware","_config","redis","namespace","RedisStore","session","store","config","get","RedisClient","Object","assign","client","on","err","getInstance","cookie","secret","resave","saveUninitialized","isEnabled","use","getContext","Config","Redis","Namespace"],"mappings":";;;;;;AAAA;;;;AACA;;;;AACA;;AACA;;;;AACA;;;;AACA;;;;;;AAEA,IAAIA,aAAa,IAAjB;;AAEA;AACA,MAAMC,mBAAmB,CAACC,EAAD,EAAKC,EAAL,KACvB,CAACC,GAAD,EAAMC,GAAN,EAAWC,IAAX,KACEJ,GAAGK,IAAH,YAAcH,GAAd,EAAmBC,GAAnB,EAAwBF,GAAGK,IAAH,CAAQF,IAAR,CAAxB,CAFJ;;AAIA;;;;;;;AAOA,SAASG,iBAAT,CAA2BC,OAA3B,EAAoCC,KAApC,EAA2CC,SAA3C,EAAsD;AACpD,SAAO,MAAM;AACX,QAAIZ,UAAJ,EAAgB;AACd,aAAOA,UAAP;AACD;AACD,UAAMa,aAAa,4BAAaC,wBAAb,CAAnB;AACA,QAAIC,QAAQ,IAAZ;AACA,UAAMC,SAASN,QAAQO,GAAR,GAAcH,OAA7B;;AAEA,QAAIE,OAAOD,KAAX,EAAkB;AAChB,YAAMG,cAAc,IAAIL,UAAJ,CAAeM,OAAOC,MAAP,CAAc,EAAd,EAAkBJ,OAAOD,KAAzB,CAAf,CAApB;AACAG,kBAAYG,MAAZ,CAAmBC,EAAnB,CAAsB,OAAtB,EAAgCC,GAAD,IAAS;AACtC,cAAMA,GAAN;AACD,OAFD;AAGAR,cAAQG,WAAR;AACD,KAND,MAMO;AACLH,cAAQ,IAAIF,UAAJ,CAAeM,OAAOC,MAAP,CAAc,EAAd,EAAkB,EAAEC,QAAQV,MAAMa,WAAN,EAAV,EAAlB,CAAf,CAAR;AACD;;AAEDxB,iBAAa,8BAAQ;AACnBe,WADmB;AAEnBU,cAAQN,OAAOC,MAAP,CAAc,EAAd,EAAkBV,QAAQO,GAAR,GAAcQ,MAAhC,CAFW;AAGnBC,cAAQV,OAAOU,MAHI;AAInBC,cAAQX,OAAOW,MAJI;AAKnBC,yBAAmBZ,OAAOY;AALP,KAAR,CAAb;;AAQA,WAAOhB,UAAUiB,SAAV,KACL5B,iBAAiBD,UAAjB,EAA6BY,UAAUkB,GAAV,GAAgBC,UAAhB,EAA7B,CADK,GAEL/B,UAFF;AAGD,GA7BD;AA8BD;AACD,8BAAagC,gBAAb,EAAqBC,eAArB,EAA4BC,mBAA5B,EAAuCzB,iBAAvC,E,CAA2D;;kBAE5CA,iB","file":"session.js","sourcesContent":["import session from 'express-session';\nimport connectRedis from 'connect-redis';\nimport { Dependencies } from 'constitute';\nimport Config from '../services/config';\nimport Redis from '../services/redis';\nimport Namespace from '../services/namespace';\n\nlet middleware = null;\n\n//Fix issue https://github.com/othiym23/node-continuation-local-storage/issues/29\nconst clsifyMiddleware = (fn, ns) =>\n (req, res, next) =>\n fn.call(this, req, res, ns.bind(next));\n\n/**\n * @param _config {Config}\n * @param redis {Redis}\n * @param namespace {Namespace}\n * @returns {function()}\n * @constructor\n */\nfunction SessionMiddleware(_config, redis, namespace) {\n return () => {\n if (middleware) {\n return middleware;\n }\n const RedisStore = connectRedis(session);\n let store = null;\n const config = _config.get().session;\n\n if (config.store) {\n const RedisClient = new RedisStore(Object.assign({}, config.store));\n RedisClient.client.on('error', (err) => {\n throw err;\n });\n store = RedisClient;\n } else {\n store = new RedisStore(Object.assign({}, { client: redis.getInstance() }));\n }\n\n middleware = session({\n store,\n cookie: Object.assign({}, _config.get().cookie),\n secret: config.secret,\n resave: config.resave,\n saveUninitialized: config.saveUninitialized\n });\n\n return namespace.isEnabled() ?\n clsifyMiddleware(middleware, namespace.use().getContext()) :\n middleware;\n };\n}\nDependencies(Config, Redis, Namespace)(SessionMiddleware); //eslint-disable-line new-cap\n\nexport default SessionMiddleware;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/middlewares/trace.js"],"names":["hostIp","tracerToZipkins","tracer","url","method","serviceName","spanId","id","traceId","parentId","timestamp","duration","statusCode","port","queries","name","endpoint","ipv4","zipkin","annotations","value","binaryAnnotations","key","toString","zipkins","length","forEach","element","query","cost","finishedAt","push","TraceMiddleware","ns","config","logger","client","enabled","get","req","res","next","startedAt","process","hrtime","sampled","parseInt","debug","set","seconds","nanoseconds","useHeader","warn","JSON","stringify","Object","keys","entries","replace","recordZipkin","api","request","json","catch","e","error","on","bindEmitter","run","Namespace","Config","Logger","HttpClient"],"mappings":"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","file":"trace.js","sourcesContent":["import onHeaders from 'on-headers';\nimport { Dependencies } from 'constitute';\nimport { randomString, getHostFullUrl, getHostPort, getHostIp, getMicroTimestamp } from '../utils';\nimport Namespace from '../services/namespace';\nimport Config from '../services/config';\nimport Logger from '../services/logger';\nimport HttpClient from '../services/http_client';\n\nconst hostIp = getHostIp();\n\nexport const tracerToZipkins = (tracer) => {\n if (!tracer) {\n return false;\n }\n const {\n url,\n method,\n serviceName,\n spanId: id,\n traceId,\n parentId,\n timestamp,\n duration,\n statusCode,\n port,\n queries\n } = tracer;\n\n const name = `${statusCode} ${method} ${url}`;\n const endpoint = {\n serviceName,\n ipv4: hostIp,\n port\n };\n const zipkin = {\n id,\n traceId,\n name,\n timestamp,\n duration,\n annotations: [\n {\n endpoint,\n timestamp,\n value: 'sr'\n },\n {\n endpoint,\n timestamp: timestamp + duration,\n value: 'ss'\n }\n ],\n binaryAnnotations: [\n {\n key: 'traceId',\n value: traceId\n },\n {\n key: 'spanId',\n value: id\n },\n {\n key: 'method',\n value: method\n },\n {\n key: 'url',\n value: url\n },\n {\n key: 'port',\n value: port.toString()\n },\n {\n key: 'statusCode',\n value: statusCode.toString()\n }\n ]\n };\n\n if (parentId) {\n zipkin.parentId = parentId;\n }\n\n const zipkins = [zipkin];\n if (queries && queries.length > 0) {\n queries.forEach((element) => {\n const { query, cost, finishedAt } = element;\n zipkins.push({\n id: randomString(),\n parentId: id,\n traceId,\n name: 'sequelize',\n timestamp: finishedAt - cost,\n duration: cost,\n annotations: [\n {\n endpoint,\n timestamp: finishedAt - cost,\n value: 'cs'\n },\n {\n endpoint,\n timestamp: finishedAt,\n value: 'cr'\n }\n ],\n binaryAnnotations: [{\n key: 'query',\n value: query\n }]\n });\n });\n }\n return zipkins;\n};\n\n\nfunction TraceMiddleware(ns, config, logger, client) {\n const enabled = config.get('trace.enable');\n return name => (req, res, next) => {\n const spanId = randomString();\n const traceId = req.get('X-B3-TraceId') || spanId;\n const parentId = req.get('X-B3-SpanId') || '';\n const startedAt = process.hrtime();\n const timestamp = getMicroTimestamp();\n const serviceName = name || config.get('app.name');\n //目前默认全部采样\n let sampled = enabled ? 1 : 0;\n //只有service为第二级, 且通过参数关闭时才禁止采样\n if (sampled && parseInt(req.get('X-B3-Sampled'), 10) < 1 && parentId > 0) {\n sampled = 0;\n }\n const tracer = {\n serviceName,\n method: req.method,\n url: getHostFullUrl(req),\n port: getHostPort(req),\n spanId,\n traceId,\n parentId,\n sampled,\n timestamp,\n duration: null,\n statusCode: null,\n queries: [],\n debug: {}\n };\n\n res.set({\n 'X-Service-Name': serviceName,\n 'X-Requested-At': timestamp,\n 'X-B3-SpanId': spanId,\n 'X-B3-TraceId': traceId,\n 'X-B3-ParentSpanId': parentId,\n 'X-B3-Sampled': enabled ? 1 : 0\n });\n\n if (sampled < 1) {\n onHeaders(res, () => {\n const [seconds, nanoseconds] = process.hrtime(startedAt);\n const duration = ((seconds * 1e3) + (nanoseconds * 1e-6));\n res.set('X-Response-Milliseconds', parseInt(duration, 10));\n });\n next();\n return;\n }\n\n onHeaders(res, () => {\n const [seconds, nanoseconds] = process.hrtime(startedAt);\n const duration = ((seconds * 1e3) + (nanoseconds * 1e-6)) * 1000;\n tracer.duration = parseInt(duration, 10);\n tracer.statusCode = res.statusCode;\n res.set('X-Response-Milliseconds', tracer.duration / 1000);\n\n const useHeader = config.get('trace.header');\n if (!useHeader) {\n return;\n }\n const zipkins = tracerToZipkins(tracer);\n if (!zipkins) {\n logger.warn('Tracer not send by no data for request %s', spanId);\n } else {\n res.set(`X-Debug-${spanId}`, JSON.stringify(zipkins));\n }\n\n if (Object.keys(tracer.debug).length > 0) {\n Object.entries(tracer.debug).forEach(([key, value]) => {\n res.set(key.replace('x-debug', 'X-Debug'), value);\n });\n }\n });\n\n const recordZipkin = () => {\n const api = config.get('trace.api');\n if (!api) {\n return;\n }\n logger.debug('Tracer prepare to send for request %s', spanId);\n const zipkins = tracerToZipkins(ns.get('tracer'));\n if (!zipkins) {\n logger.warn('Tracer not send by no data for request %s', spanId);\n return;\n }\n client.request({\n url: api,\n method: 'POST',\n json: zipkins\n }).catch((e) => {\n logger.error('Error happened on sending tracing data', e);\n });\n };\n\n res.on('finish', recordZipkin);\n res.on('error', recordZipkin);\n\n ns.bindEmitter(req);\n ns.bindEmitter(res);\n ns.run(() => {\n // logger.debug('Tracer settled for request %s, tracer: %j', spanId, tracer);\n ns.set('tracer', tracer);\n next();\n });\n };\n}\n\nDependencies(Namespace, Config, Logger, HttpClient)(TraceMiddleware); //eslint-disable-line new-cap\n\nexport default TraceMiddleware;\n"]}
@@ -1,71 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
-
7
- var _joi = require('joi');
8
-
9
- var _joi2 = _interopRequireDefault(_joi);
10
-
11
- var _constitute = require('constitute');
12
-
13
- var _wrapper = require('../utils/wrapper');
14
-
15
- var _wrapper2 = _interopRequireDefault(_wrapper);
16
-
17
- var _exceptions = require('../exceptions');
18
-
19
- var _joi3 = require('../services/joi');
20
-
21
- var _joi4 = _interopRequireDefault(_joi3);
22
-
23
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
-
25
- function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
26
-
27
- const validate = (data, schema, options) => new Promise((resolve, reject) => {
28
- _joi2.default.validate(data, schema, Object.assign({ abortEarly: false, allowUnknown: true }, options), (err, value) => {
29
- if (err) {
30
- reject(err);
31
- } else {
32
- resolve(value);
33
- }
34
- });
35
- });
36
-
37
- /**
38
- * @returns {function()}
39
- * @constructor
40
- */
41
- function ValidatorMiddleware(validatorBase) {
42
- return (getSchema, options, validator) => (0, _wrapper2.default)((() => {
43
- var _ref = _asyncToGenerator(function* (req, res, next) {
44
- //eslint-disable-line no-unused-vars
45
- const { query, body, path } = getSchema(validator || validatorBase.getJoi());
46
- try {
47
- if (query) {
48
- yield validate(req.query, query, options);
49
- }
50
- if (body) {
51
- yield validate(req.body, body, options);
52
- }
53
- if (path) {
54
- yield validate(req.params, path, options);
55
- }
56
- return next();
57
- } catch (e) {
58
- throw new _exceptions.FormInvalidateException(e);
59
- }
60
- });
61
-
62
- return function (_x, _x2, _x3) {
63
- return _ref.apply(this, arguments);
64
- };
65
- })());
66
- }
67
-
68
- (0, _constitute.Dependencies)(_joi4.default)(ValidatorMiddleware); //eslint-disable-line new-cap
69
-
70
- exports.default = ValidatorMiddleware;
71
- //# sourceMappingURL=validator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/middlewares/validator.js"],"names":["validate","data","schema","options","Promise","resolve","reject","Joi","Object","assign","abortEarly","allowUnknown","err","value","ValidatorMiddleware","validatorBase","getSchema","validator","req","res","next","query","body","path","getJoi","params","e","FormInvalidateException","ValidatorBase"],"mappings":";;;;;;AAAA;;;;AACA;;AACA;;;;AACA;;AACA;;;;;;;;AAEA,MAAMA,WAAW,CAACC,IAAD,EAAOC,MAAP,EAAeC,OAAf,KACf,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AAC/BC,gBAAIP,QAAJ,CAAaC,IAAb,EAAmBC,MAAnB,EAA2BM,OAAOC,MAAP,CACzB,EAAEC,YAAY,KAAd,EAAqBC,cAAc,IAAnC,EADyB,EAEzBR,OAFyB,CAA3B,EAGG,CAACS,GAAD,EAAMC,KAAN,KAAgB;AACjB,QAAID,GAAJ,EAAS;AACPN,aAAOM,GAAP;AACD,KAFD,MAEO;AACLP,cAAQQ,KAAR;AACD;AACF,GATD;AAUD,CAXD,CADF;;AAcA;;;;AAIA,SAASC,mBAAT,CAA6BC,aAA7B,EAA4C;AAC1C,SAAO,CAACC,SAAD,EAAYb,OAAZ,EAAqBc,SAArB,KACL;AAAA,iCAAQ,WAAOC,GAAP,EAAYC,GAAZ,EAAiBC,IAAjB,EAA0B;AAAE;AAClC,YAAM,EAAEC,KAAF,EAASC,IAAT,EAAeC,IAAf,KAAwBP,UAAUC,aAAaF,cAAcS,MAAd,EAAvB,CAA9B;AACA,UAAI;AACF,YAAIH,KAAJ,EAAW;AACT,gBAAMrB,SAASkB,IAAIG,KAAb,EAAoBA,KAApB,EAA2BlB,OAA3B,CAAN;AACD;AACD,YAAImB,IAAJ,EAAU;AACR,gBAAMtB,SAASkB,IAAII,IAAb,EAAmBA,IAAnB,EAAyBnB,OAAzB,CAAN;AACD;AACD,YAAIoB,IAAJ,EAAU;AACR,gBAAMvB,SAASkB,IAAIO,MAAb,EAAqBF,IAArB,EAA2BpB,OAA3B,CAAN;AACD;AACD,eAAOiB,MAAP;AACD,OAXD,CAWE,OAAOM,CAAP,EAAU;AACV,cAAM,IAAIC,mCAAJ,CAA4BD,CAA5B,CAAN;AACD;AACF,KAhBD;;AAAA;AAAA;AAAA;AAAA,OADF;AAkBD;;AAED,8BAAaE,aAAb,EAA4Bd,mBAA5B,E,CAAkD;;kBAEnCA,mB","file":"validator.js","sourcesContent":["import Joi from 'joi';\nimport { Dependencies } from 'constitute';\nimport wrapper from '../utils/wrapper';\nimport { FormInvalidateException } from '../exceptions';\nimport ValidatorBase from '../services/joi';\n\nconst validate = (data, schema, options) =>\n new Promise((resolve, reject) => {\n Joi.validate(data, schema, Object.assign(\n { abortEarly: false, allowUnknown: true },\n options\n ), (err, value) => {\n if (err) {\n reject(err);\n } else {\n resolve(value);\n }\n });\n });\n\n/**\n * @returns {function()}\n * @constructor\n */\nfunction ValidatorMiddleware(validatorBase) {\n return (getSchema, options, validator) =>\n wrapper(async (req, res, next) => { //eslint-disable-line no-unused-vars\n const { query, body, path } = getSchema(validator || validatorBase.getJoi());\n try {\n if (query) {\n await validate(req.query, query, options);\n }\n if (body) {\n await validate(req.body, body, options);\n }\n if (path) {\n await validate(req.params, path, options);\n }\n return next();\n } catch (e) {\n throw new FormInvalidateException(e);\n }\n });\n}\n\nDependencies(ValidatorBase)(ValidatorMiddleware); //eslint-disable-line new-cap\n\nexport default ValidatorMiddleware;\n"]}
@@ -1,160 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.requestToCacheKey = exports.defaultHeadersFilter = exports.defaultHashStrategy = undefined;
7
-
8
- var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
9
-
10
- var _constitute = require('constitute');
11
-
12
- var _crypto = require('crypto');
13
-
14
- var _crypto2 = _interopRequireDefault(_crypto);
15
-
16
- var _util = require('util');
17
-
18
- var _util2 = _interopRequireDefault(_util);
19
-
20
- var _momentTimezone = require('moment-timezone');
21
-
22
- var _momentTimezone2 = _interopRequireDefault(_momentTimezone);
23
-
24
- var _logger = require('../services/logger');
25
-
26
- var _logger2 = _interopRequireDefault(_logger);
27
-
28
- var _cache = require('../services/cache');
29
-
30
- var _cache2 = _interopRequireDefault(_cache);
31
-
32
- var _wrapper = require('../utils/wrapper');
33
-
34
- var _wrapper2 = _interopRequireDefault(_wrapper);
35
-
36
- var _exceptions = require('../exceptions');
37
-
38
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
39
-
40
- function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
41
-
42
- const defaultHashStrategy = exports.defaultHashStrategy = obj => obj;
43
-
44
- const defaultHeadersFilter = exports.defaultHeadersFilter = res => {
45
- const headers = [];
46
- ['Content-Type'].forEach(key => {
47
- const value = res.get(key);
48
- if (value) {
49
- headers.push([key, value]);
50
- }
51
- });
52
- return headers;
53
- };
54
-
55
- const requestToCacheKey = exports.requestToCacheKey = (req, hashStrategy) => {
56
- const {
57
- method,
58
- originalUrl,
59
- query: originQuery,
60
- route,
61
- uid = null //Custom rule
62
- } = req;
63
- const query = _extends({}, originQuery);
64
- delete query.flush;
65
- if (hashStrategy && !_util2.default.isFunction(hashStrategy)) {
66
- throw new _exceptions.RuntimeException(`View cache hash strategy must be a function for ${originalUrl}`);
67
- }
68
- if (!route) {
69
- throw new _exceptions.RuntimeException(`View cache middleware require route for ${originalUrl}`);
70
- }
71
- if (method.toLowerCase() !== 'get') {
72
- throw new _exceptions.RuntimeException(`View cache middleware only support GET method of http request for ${originalUrl}`);
73
- }
74
- const { host = 'unknown' } = req.headers;
75
- const [urlPath = ''] = originalUrl.split('?');
76
- const key = [method, `/${host}`, urlPath].join('').replace(/:/g, '_').toLowerCase();
77
- const strategy = hashStrategy || defaultHashStrategy;
78
- const hash = _crypto2.default.createHash('md5').update(JSON.stringify(strategy({
79
- method,
80
- urlPath,
81
- query,
82
- uid
83
- }))).digest('hex');
84
- return [key, hash].join(':');
85
- };
86
-
87
- /**
88
- * @param {Cache} cache
89
- * @param {Logger} logger
90
- * @returns {function(*=)}
91
- * @constructor
92
- */
93
- function ViewCacheMiddleware(cache, logger) {
94
- return (options = {}) => {
95
- if (!_util2.default.isObject(options)) {
96
- options = { //eslint-disable-line no-param-reassign
97
- ttl: options
98
- };
99
- }
100
- const {
101
- ttl,
102
- headersFilter,
103
- namespace,
104
- hashStrategy
105
- } = Object.assign({
106
- ttl: 60,
107
- headersFilter: defaultHeadersFilter,
108
- hashStrategy: defaultHashStrategy,
109
- namespace: 'view'
110
- }, options);
111
- return (0, _wrapper2.default)((() => {
112
- var _ref = _asyncToGenerator(function* (req, res, next) {
113
- const cacheKey = requestToCacheKey(req, hashStrategy);
114
- const {
115
- headers: cachedHeaders = [],
116
- body: cachedBody
117
- } = (yield cache.namespace(namespace).get(cacheKey)) || {
118
- headers: [],
119
- body: null
120
- };
121
- if (req.query.flush !== 'true' && cachedBody) {
122
- logger.debug('View cache hit by key %s', cacheKey);
123
- if (cachedHeaders.length > 0) {
124
- cachedHeaders.forEach(function ([key, value]) {
125
- res.setHeader(key, value);
126
- });
127
- }
128
- res.setHeader('X-View-Cache-Hit', cacheKey);
129
- res.send(cachedBody);
130
- return;
131
- }
132
- res.realSend = res.send; //eslint-disable-line no-param-reassign
133
- res.send = function (body) {
134
- //eslint-disable-line no-param-reassign
135
- logger.debug('View cache missed by key %s, creating...', cacheKey);
136
- res.setHeader('X-View-Cache-Miss', cacheKey);
137
- res.setHeader('X-View-Cache-Expire-At', (0, _momentTimezone2.default)().add(ttl, 'minute').format('YYYY-MM-DD HH:mm:ss Z'));
138
- res.setHeader('X-View-Cache-Created-At', (0, _momentTimezone2.default)().format('YYYY-MM-DD HH:mm:ss Z'));
139
- res.realSend(body);
140
- const headers = headersFilter && _util2.default.isFunction(headersFilter) ? headersFilter(res) : defaultHeadersFilter(res);
141
- if (res.statusCode <= 500) {
142
- cache.namespace(namespace).set(cacheKey, { headers, body }, ttl).catch(function (e) {
143
- logger.error('View cache set failed for %s', cacheKey, e);
144
- });
145
- }
146
- };
147
- next();
148
- });
149
-
150
- return function (_x, _x2, _x3) {
151
- return _ref.apply(this, arguments);
152
- };
153
- })());
154
- };
155
- }
156
-
157
- (0, _constitute.Dependencies)(_cache2.default, _logger2.default)(ViewCacheMiddleware); //eslint-disable-line new-cap
158
-
159
- exports.default = ViewCacheMiddleware;
160
- //# sourceMappingURL=view_cache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/middlewares/view_cache.js"],"names":["defaultHashStrategy","obj","defaultHeadersFilter","res","headers","forEach","key","value","get","push","requestToCacheKey","req","hashStrategy","method","originalUrl","query","originQuery","route","uid","flush","util","isFunction","RuntimeException","toLowerCase","host","urlPath","split","join","replace","strategy","hash","crypto","createHash","update","JSON","stringify","digest","ViewCacheMiddleware","cache","logger","options","isObject","ttl","headersFilter","namespace","Object","assign","next","cacheKey","cachedHeaders","body","cachedBody","debug","length","setHeader","send","realSend","add","format","statusCode","set","catch","e","error","Cache","Logger"],"mappings":"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","file":"view_cache.js","sourcesContent":["import { Dependencies } from 'constitute';\nimport crypto from 'crypto';\nimport util from 'util';\nimport moment from 'moment-timezone';\nimport Logger from '../services/logger';\nimport Cache from '../services/cache';\nimport wrapper from '../utils/wrapper';\nimport { RuntimeException } from '../exceptions';\n\nexport const defaultHashStrategy = obj => obj;\n\nexport const defaultHeadersFilter = (res) => {\n const headers = [];\n ['Content-Type'].forEach((key) => {\n const value = res.get(key);\n if (value) {\n headers.push([key, value]);\n }\n });\n return headers;\n};\n\nexport const requestToCacheKey = (req, hashStrategy) => {\n const {\n method,\n originalUrl,\n query: originQuery,\n route,\n uid = null //Custom rule\n } = req;\n const query = { ...originQuery };\n delete query.flush;\n if (hashStrategy && !util.isFunction(hashStrategy)) {\n throw new RuntimeException(`View cache hash strategy must be a function for ${originalUrl}`);\n }\n if (!route) {\n throw new RuntimeException(`View cache middleware require route for ${originalUrl}`);\n }\n if (method.toLowerCase() !== 'get') {\n throw new RuntimeException(`View cache middleware only support GET method of http request for ${originalUrl}`);\n }\n const { host = 'unknown' } = req.headers;\n const [urlPath = ''] = originalUrl.split('?');\n const key = [method, `/${host}`, urlPath].join('').replace(/:/g, '_').toLowerCase();\n const strategy = hashStrategy || defaultHashStrategy;\n const hash = crypto\n .createHash('md5')\n .update(JSON\n .stringify(strategy({\n method,\n urlPath,\n query,\n uid\n })))\n .digest('hex');\n return [key, hash].join(':');\n};\n\n\n/**\n * @param {Cache} cache\n * @param {Logger} logger\n * @returns {function(*=)}\n * @constructor\n */\nfunction ViewCacheMiddleware(cache, logger) {\n return (options = {}) => {\n if (!util.isObject(options)) {\n options = { //eslint-disable-line no-param-reassign\n ttl: options\n };\n }\n const {\n ttl,\n headersFilter,\n namespace,\n hashStrategy\n } = Object.assign({\n ttl: 60,\n headersFilter: defaultHeadersFilter,\n hashStrategy: defaultHashStrategy,\n namespace: 'view'\n }, options);\n return wrapper(async (req, res, next) => {\n const cacheKey = requestToCacheKey(req, hashStrategy);\n const {\n headers: cachedHeaders = [],\n body: cachedBody\n } = await cache.namespace(namespace).get(cacheKey)\n || {\n headers: [],\n body: null\n };\n if (req.query.flush !== 'true' && cachedBody) {\n logger.debug('View cache hit by key %s', cacheKey);\n if (cachedHeaders.length > 0) {\n cachedHeaders.forEach(([key, value]) => {\n res.setHeader(key, value);\n });\n }\n res.setHeader('X-View-Cache-Hit', cacheKey);\n res.send(cachedBody);\n return;\n }\n res.realSend = res.send; //eslint-disable-line no-param-reassign\n res.send = (body) => { //eslint-disable-line no-param-reassign\n logger.debug('View cache missed by key %s, creating...', cacheKey);\n res.setHeader('X-View-Cache-Miss', cacheKey);\n res.setHeader('X-View-Cache-Expire-At', moment().add(ttl, 'minute').format('YYYY-MM-DD HH:mm:ss Z'));\n res.setHeader('X-View-Cache-Created-At', moment().format('YYYY-MM-DD HH:mm:ss Z'));\n res.realSend(body);\n const headers = headersFilter && util.isFunction(headersFilter) ?\n headersFilter(res) : defaultHeadersFilter(res);\n if (res.statusCode <= 500) {\n cache.namespace(namespace).set(cacheKey, { headers, body }, ttl).catch((e) => {\n logger.error('View cache set failed for %s', cacheKey, e);\n });\n }\n };\n next();\n });\n };\n}\n\nDependencies(Cache, Logger)(ViewCacheMiddleware);//eslint-disable-line new-cap\n\nexport default ViewCacheMiddleware;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/services/cache.js"],"names":["Store","getInstance","has","Promise","resolve","get","set","del","flush","tags","UnsupportedOperationException","NullStore","namespace","RedisNamespaceStore","constructor","prefix","redis","key","exists","then","res","join","JSON","parse","value","minutes","mutex","args","stringify","push","m","toUpperCase","keys","length","RedisStore","namespaceHandler","DI","hasOwnProperty","call","flushall","Cache","Config","Redis","ServiceInterface","config","driver","store","setStore","getStore","setPrefix","getPrefix"],"mappings":"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","file":"cache.js","sourcesContent":["import { Dependencies } from 'constitute';\nimport { UnsupportedOperationException } from './../exceptions';\nimport Redis from './redis';\nimport DI from './../di';\nimport Config from './config';\nimport ServiceInterface from './interface';\n\nexport class Store {\n getInstance() {\n return this;\n }\n\n has() {\n return Promise.resolve(false);\n }\n\n get() {\n return Promise.resolve(null);\n }\n\n set() {\n return Promise.resolve(this);\n }\n\n del() {\n return Promise.resolve(this);\n }\n\n flush() {\n return Promise.resolve(true);\n }\n\n tags() {\n throw new UnsupportedOperationException('Not support tag feature');\n }\n}\n\nexport class NullStore extends Store {\n namespace() {\n return this;\n }\n\n tags() {\n return this;\n }\n}\n\nexport class RedisNamespaceStore extends Store {\n constructor(prefix, namespace, redis) {\n super();\n this.prefix = prefix;\n this.namespace = namespace;\n this.redis = redis;\n }\n\n getInstance() {\n return this.redis;\n }\n\n has(key) {\n return this.redis.exists(this.key(key)).then(res => res > 0);\n }\n\n key(key) {\n return this.prefix ? [this.prefix, this.namespace, key].join(':') : key;\n }\n\n get(key) {\n return this.redis.get(this.key(key)).then(res => JSON.parse(res));\n }\n\n del(key) {\n return this.redis.del(this.key(key));\n }\n\n set(key, value, minutes, mutex) {\n const args = [\n this.key(key),\n JSON.stringify(value)\n ];\n if (minutes) {\n args.push('ex', minutes * 60);\n }\n if (mutex) {\n const m = mutex.toUpperCase();\n if (m === 'NX' || m === 'XX') {\n args.push(m);\n }\n }\n return this.redis.set(...args);\n }\n\n flush() {\n return this.redis.keys([this.prefix, this.namespace, '*'].join(':'))\n .then((keys) => {\n if (keys.length) {\n return this.redis.del(keys);\n }\n return 0;\n });\n }\n}\n\nexport class RedisStore extends Store {\n constructor(prefix, redis) {\n super();\n this.prefix = prefix;\n this.namespaceHandler = {};\n this.redis = redis || DI.get('redis').getInstance();\n }\n\n getInstance() {\n return this.redis;\n }\n\n namespace(namespace) {\n if ({}.hasOwnProperty.call(this.namespaceHandler, namespace)) {\n return this.namespaceHandler[namespace];\n }\n this.namespaceHandler[namespace] = new RedisNamespaceStore(this.prefix, namespace, this.redis);\n return this.namespaceHandler[namespace];\n }\n\n has(key) {\n return this.redis.exists(this.key(key));\n }\n\n key(key) {\n return this.prefix ? [this.prefix, key].join(':') : key;\n }\n\n get(key) {\n return this.redis.get(this.key(key)).then(res => JSON.parse(res));\n }\n\n del(key) {\n return this.redis.del(this.key(key));\n }\n\n set(key, value, minutes, mutex) {\n const args = [\n this.key(key),\n JSON.stringify(value)\n ];\n if (minutes) {\n args.push('ex', minutes * 60);\n }\n if (mutex) {\n const m = mutex.toUpperCase();\n if (m === 'NX' || m === 'XX') {\n args.push(m);\n }\n }\n return this.redis.set(...args);\n }\n\n flush() {\n return this.redis.flushall();\n }\n}\n\n@Dependencies(Config, Redis) //eslint-disable-line new-cap\nexport default class Cache extends ServiceInterface {\n constructor(config) {\n super();\n this.config = config.get('cache');\n this.prefix = this.config.prefix || 'eva';\n this.driver = this.config.driver;\n this.store = null;\n }\n\n setStore(store) {\n this.store = store;\n return this;\n }\n\n /**\n * @returns {Store}\n */\n getStore() {\n if (this.store) {\n return this.store;\n }\n this.store = this.driver === 'redis' ?\n new RedisStore(this.prefix) : new NullStore(this.prefix);\n return this.store;\n }\n\n setPrefix(prefix) {\n this.prefix = prefix;\n }\n\n getPrefix() {\n return this.prefix;\n }\n\n namespace(...args) {\n return this.getStore().namespace(...args);\n }\n\n has(key) {\n return this.getStore().has(key);\n }\n\n get(key) {\n return this.getStore().get(key);\n }\n\n set(...args) {\n return this.getStore().set(...args);\n }\n\n del(...args) {\n return this.getStore().del(...args);\n }\n\n flush() {\n return this.getStore().flush();\n }\n}\n\n"]}
@@ -1,140 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = undefined;
7
-
8
- var _dec, _class;
9
-
10
- var _lodash = require('lodash');
11
-
12
- var _lodash2 = _interopRequireDefault(_lodash);
13
-
14
- var _constitute = require('constitute');
15
-
16
- var _cloudConfigClient = require('cloud-config-client');
17
-
18
- var _cloudConfigClient2 = _interopRequireDefault(_cloudConfigClient);
19
-
20
- var _env = require('./env');
21
-
22
- var _env2 = _interopRequireDefault(_env);
23
-
24
- var _config = require('../config');
25
-
26
- var _config2 = _interopRequireDefault(_config);
27
-
28
- var _interface = require('./interface');
29
-
30
- var _interface2 = _interopRequireDefault(_interface);
31
-
32
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
33
-
34
- function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
35
-
36
- let config = null;
37
-
38
- //eslint-disable-line new-cap
39
- let Config = (_dec = (0, _constitute.Dependencies)(_env2.default), _dec(_class = class Config extends _interface2.default {
40
- /**
41
- * @param env {Env}
42
- */
43
- constructor(env) {
44
- super();
45
- this.env = env;
46
- this.path = null;
47
- this.mergedFiles = [];
48
- }
49
-
50
- setPath(path) {
51
- this.path = path;
52
- return this;
53
- }
54
-
55
- /**
56
- * Resolve configurations from Spring Cloud Config Server.
57
- * @param endpoint
58
- * @param name
59
- * @param profiles
60
- * @param label
61
- * @returns {Promise.<void>}
62
- */
63
- resolveSpringConfig({
64
- endpoint,
65
- name,
66
- profiles,
67
- label = 'master'
68
- }) {
69
- var _this = this;
70
-
71
- return _asyncToGenerator(function* () {
72
- if (!config) {
73
- config = _this.loadConfigFromFiles();
74
- }
75
- const configRemote = yield _cloudConfigClient2.default.load({
76
- endpoint,
77
- name,
78
- profiles: _lodash2.default.isString(profiles) ? profiles.split(',') : [],
79
- label
80
- });
81
- configRemote.forEach(function (key, value) {
82
- _lodash2.default.set(config, key, value);
83
- });
84
- })();
85
- }
86
-
87
- get(key) {
88
- if (config) {
89
- return key ? Config.search(key, config) : config;
90
- }
91
- config = this.loadConfigFromFiles();
92
- return key ? Config.search(key, config) : config;
93
- }
94
-
95
- loadConfigFromFiles() {
96
- const env = this.env.get();
97
- const configPath = this.path;
98
- const pathDefault = `${configPath}/config.default`;
99
- const pathEnv = `${configPath}/config.${env}`;
100
- const pathLocal = `${configPath}/config.local.${env}`;
101
- /*eslint-disable global-require*/
102
- /*eslint-disable import/no-dynamic-require*/
103
- const configDefault = require(pathDefault);
104
- this.mergedFiles.push(pathDefault);
105
- const configEnv = require(pathEnv);
106
- this.mergedFiles.push(pathEnv);
107
- let configLocal = {};
108
- try {
109
- configLocal = require(pathLocal);
110
- this.mergedFiles.push(pathLocal);
111
- } catch (e) {
112
- configLocal = {};
113
- }
114
- /*eslint-enable import/no-dynamic-require*/
115
- /*eslint-enable global-require*/
116
- return _lodash2.default.merge(_config2.default, configDefault, configEnv, configLocal);
117
- }
118
-
119
- getMergedFiles() {
120
- return this.mergedFiles;
121
- }
122
-
123
- reload() {
124
- config = null;
125
- }
126
-
127
- /**
128
- * @param {string} keyString
129
- * @param {Object} target
130
- * @returns {*}
131
- */
132
- static search(keyString, target) {
133
- if (typeof keyString !== 'string') {
134
- return target;
135
- }
136
- return _lodash2.default.get(target, keyString);
137
- }
138
- }) || _class);
139
- exports.default = Config;
140
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/services/config.js"],"names":["config","Config","Env","ServiceInterface","constructor","env","path","mergedFiles","setPath","resolveSpringConfig","endpoint","name","profiles","label","loadConfigFromFiles","configRemote","springConfigClient","load","_","isString","split","forEach","key","value","set","get","search","configPath","pathDefault","pathEnv","pathLocal","configDefault","require","push","configEnv","configLocal","e","merge","EngineConfig","getMergedFiles","reload","keyString","target"],"mappings":";;;;;;;;;AAAA;;;;AACA;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;;;AAEA,IAAIA,SAAS,IAAb;;AAEmB;IACEC,M,WADpB,8BAAaC,aAAb,C,gBACc,MAAMD,MAAN,SAAqBE,mBAArB,CAAsC;AACnD;;;AAGAC,cAAYC,GAAZ,EAAiB;AACf;AACA,SAAKA,GAAL,GAAWA,GAAX;AACA,SAAKC,IAAL,GAAY,IAAZ;AACA,SAAKC,WAAL,GAAmB,EAAnB;AACD;;AAEDC,UAAQF,IAAR,EAAc;AACZ,SAAKA,IAAL,GAAYA,IAAZ;AACA,WAAO,IAAP;AACD;;AAED;;;;;;;;AAQMG,qBAAN,CAA0B;AACxBC,YADwB;AAExBC,QAFwB;AAGxBC,YAHwB;AAIxBC,YAAQ;AAJgB,GAA1B,EAKG;AAAA;;AAAA;AACD,UAAI,CAACb,MAAL,EAAa;AACXA,iBAAS,MAAKc,mBAAL,EAAT;AACD;AACD,YAAMC,eAAe,MAAMC,4BAAmBC,IAAnB,CAAwB;AACjDP,gBADiD;AAEjDC,YAFiD;AAGjDC,kBAAUM,iBAAEC,QAAF,CAAWP,QAAX,IAAuBA,SAASQ,KAAT,CAAe,GAAf,CAAvB,GAA6C,EAHN;AAIjDP;AAJiD,OAAxB,CAA3B;AAMAE,mBAAaM,OAAb,CAAqB,UAACC,GAAD,EAAMC,KAAN,EAAgB;AACnCL,yBAAEM,GAAF,CAAMxB,MAAN,EAAcsB,GAAd,EAAmBC,KAAnB;AACD,OAFD;AAVC;AAaF;;AAEDE,MAAIH,GAAJ,EAAS;AACP,QAAItB,MAAJ,EAAY;AACV,aAAOsB,MAAMrB,OAAOyB,MAAP,CAAcJ,GAAd,EAAmBtB,MAAnB,CAAN,GAAmCA,MAA1C;AACD;AACDA,aAAS,KAAKc,mBAAL,EAAT;AACA,WAAOQ,MAAMrB,OAAOyB,MAAP,CAAcJ,GAAd,EAAmBtB,MAAnB,CAAN,GAAmCA,MAA1C;AACD;;AAEDc,wBAAsB;AACpB,UAAMT,MAAM,KAAKA,GAAL,CAASoB,GAAT,EAAZ;AACA,UAAME,aAAa,KAAKrB,IAAxB;AACA,UAAMsB,cAAe,GAAED,UAAW,iBAAlC;AACA,UAAME,UAAW,GAAEF,UAAW,WAAUtB,GAAI,EAA5C;AACA,UAAMyB,YAAa,GAAEH,UAAW,iBAAgBtB,GAAI,EAApD;AACA;AACA;AACA,UAAM0B,gBAAgBC,QAAQJ,WAAR,CAAtB;AACA,SAAKrB,WAAL,CAAiB0B,IAAjB,CAAsBL,WAAtB;AACA,UAAMM,YAAYF,QAAQH,OAAR,CAAlB;AACA,SAAKtB,WAAL,CAAiB0B,IAAjB,CAAsBJ,OAAtB;AACA,QAAIM,cAAc,EAAlB;AACA,QAAI;AACFA,oBAAcH,QAAQF,SAAR,CAAd;AACA,WAAKvB,WAAL,CAAiB0B,IAAjB,CAAsBH,SAAtB;AACD,KAHD,CAGE,OAAOM,CAAP,EAAU;AACVD,oBAAc,EAAd;AACD;AACD;AACA;AACA,WAAOjB,iBAAEmB,KAAF,CAAQC,gBAAR,EAAsBP,aAAtB,EAAqCG,SAArC,EAAgDC,WAAhD,CAAP;AACD;;AAEDI,mBAAiB;AACf,WAAO,KAAKhC,WAAZ;AACD;;AAEDiC,WAAS;AACPxC,aAAS,IAAT;AACD;;AAED;;;;;AAKA,SAAO0B,MAAP,CAAce,SAAd,EAAyBC,MAAzB,EAAiC;AAC/B,QAAI,OAAOD,SAAP,KAAqB,QAAzB,EAAmC;AACjC,aAAOC,MAAP;AACD;AACD,WAAOxB,iBAAEO,GAAF,CAAMiB,MAAN,EAAcD,SAAd,CAAP;AACD;AA9FkD,C;kBAAhCxC,M","file":"config.js","sourcesContent":["import _ from 'lodash';\nimport { Dependencies } from 'constitute';\nimport springConfigClient from 'cloud-config-client';\nimport Env from './env';\nimport EngineConfig from '../config';\nimport ServiceInterface from './interface';\n\nlet config = null;\n\n@Dependencies(Env) //eslint-disable-line new-cap\nexport default class Config extends ServiceInterface {\n /**\n * @param env {Env}\n */\n constructor(env) {\n super();\n this.env = env;\n this.path = null;\n this.mergedFiles = [];\n }\n\n setPath(path) {\n this.path = path;\n return this;\n }\n\n /**\n * Resolve configurations from Spring Cloud Config Server.\n * @param endpoint\n * @param name\n * @param profiles\n * @param label\n * @returns {Promise.<void>}\n */\n async resolveSpringConfig({\n endpoint,\n name,\n profiles,\n label = 'master'\n }) {\n if (!config) {\n config = this.loadConfigFromFiles();\n }\n const configRemote = await springConfigClient.load({\n endpoint,\n name,\n profiles: _.isString(profiles) ? profiles.split(',') : [],\n label\n });\n configRemote.forEach((key, value) => {\n _.set(config, key, value);\n });\n }\n\n get(key) {\n if (config) {\n return key ? Config.search(key, config) : config;\n }\n config = this.loadConfigFromFiles();\n return key ? Config.search(key, config) : config;\n }\n\n loadConfigFromFiles() {\n const env = this.env.get();\n const configPath = this.path;\n const pathDefault = `${configPath}/config.default`;\n const pathEnv = `${configPath}/config.${env}`;\n const pathLocal = `${configPath}/config.local.${env}`;\n /*eslint-disable global-require*/\n /*eslint-disable import/no-dynamic-require*/\n const configDefault = require(pathDefault);\n this.mergedFiles.push(pathDefault);\n const configEnv = require(pathEnv);\n this.mergedFiles.push(pathEnv);\n let configLocal = {};\n try {\n configLocal = require(pathLocal);\n this.mergedFiles.push(pathLocal);\n } catch (e) {\n configLocal = {};\n }\n /*eslint-enable import/no-dynamic-require*/\n /*eslint-enable global-require*/\n return _.merge(EngineConfig, configDefault, configEnv, configLocal);\n }\n\n getMergedFiles() {\n return this.mergedFiles;\n }\n\n reload() {\n config = null;\n }\n\n /**\n * @param {string} keyString\n * @param {Object} target\n * @returns {*}\n */\n static search(keyString, target) {\n if (typeof keyString !== 'string') {\n return target;\n }\n return _.get(target, keyString);\n }\n}\n\n"]}
@@ -1,40 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = exports.TYPES = undefined;
7
-
8
- var _interface = require('./interface');
9
-
10
- var _interface2 = _interopRequireDefault(_interface);
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- let env = null;
15
- const TYPES = exports.TYPES = {
16
- PRODUCTION: 'production',
17
- TEST: 'test',
18
- DEVELOPMENT: 'development'
19
- };
20
-
21
- let Env = class Env extends _interface2.default {
22
- get() {
23
- env = [TYPES.PRODUCTION, TYPES.TEST, TYPES.DEVELOPMENT].indexOf(process.env.NODE_ENV) > -1 ? process.env.NODE_ENV : TYPES.DEVELOPMENT;
24
- return env;
25
- }
26
-
27
- isTest() {
28
- return this.get() === TYPES.TEST;
29
- }
30
-
31
- isProduction() {
32
- return this.get() === TYPES.PRODUCTION;
33
- }
34
-
35
- isDevelopment() {
36
- return this.get() === TYPES.DEVELOPMENT;
37
- }
38
- };
39
- exports.default = Env;
40
- //# sourceMappingURL=env.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/services/env.js"],"names":["env","TYPES","PRODUCTION","TEST","DEVELOPMENT","Env","ServiceInterface","get","indexOf","process","NODE_ENV","isTest","isProduction","isDevelopment"],"mappings":";;;;;;;AAAA;;;;;;AAEA,IAAIA,MAAM,IAAV;AACO,MAAMC,wBAAQ;AACnBC,cAAY,YADO;AAEnBC,QAAM,MAFa;AAGnBC,eAAa;AAHM,CAAd;;IAMcC,G,GAAN,MAAMA,GAAN,SAAkBC,mBAAlB,CAAmC;AAChDC,QAAM;AACJP,UAAM,CAACC,MAAMC,UAAP,EAAmBD,MAAME,IAAzB,EAA+BF,MAAMG,WAArC,EAAkDI,OAAlD,CAA0DC,QAAQT,GAAR,CAAYU,QAAtE,IAAkF,CAAC,CAAnF,GACFD,QAAQT,GAAR,CAAYU,QADV,GACqBT,MAAMG,WADjC;AAEA,WAAOJ,GAAP;AACD;;AAEDW,WAAS;AACP,WAAO,KAAKJ,GAAL,OAAeN,MAAME,IAA5B;AACD;;AAEDS,iBAAe;AACb,WAAO,KAAKL,GAAL,OAAeN,MAAMC,UAA5B;AACD;;AAEDW,kBAAgB;AACd,WAAO,KAAKN,GAAL,OAAeN,MAAMG,WAA5B;AACD;AAjB+C,C;kBAA7BC,G","file":"env.js","sourcesContent":["import ServiceInterface from './interface';\n\nlet env = null;\nexport const TYPES = {\n PRODUCTION: 'production',\n TEST: 'test',\n DEVELOPMENT: 'development'\n};\n\nexport default class Env extends ServiceInterface {\n get() {\n env = [TYPES.PRODUCTION, TYPES.TEST, TYPES.DEVELOPMENT].indexOf(process.env.NODE_ENV) > -1\n ? process.env.NODE_ENV : TYPES.DEVELOPMENT;\n return env;\n }\n\n isTest() {\n return this.get() === TYPES.TEST;\n }\n\n isProduction() {\n return this.get() === TYPES.PRODUCTION;\n }\n\n isDevelopment() {\n return this.get() === TYPES.DEVELOPMENT;\n }\n}\n"]}