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.
- package/.ai/analysis.md +657 -0
- package/.ai/architecture/runtime.md +504 -0
- package/.ai/contracts/public-api.md +447 -0
- package/.ai/external-project-guide.md +248 -0
- package/.ai/vision.md +314 -0
- package/README.md +51 -62
- package/bin/engine +15 -21
- package/index.js +2 -18
- package/package.json +60 -64
- package/src/commands/index.js +12 -0
- package/{lib → src}/commands/interface.js +5 -11
- package/src/commands/make_entity.js +490 -0
- package/src/commands/tramp.js +34 -0
- package/{lib → src}/config/index.js +7 -9
- package/{lib → src}/di.js +11 -26
- package/src/engine.js +551 -0
- package/{lib → src}/entities/index.js +72 -82
- package/{lib → src}/exceptions/index.js +71 -92
- package/src/index.js +57 -0
- package/src/middlewares/auth.js +67 -0
- package/src/middlewares/auth_kong.js +28 -0
- package/src/middlewares/debug.js +88 -0
- package/src/middlewares/index.js +18 -0
- package/src/middlewares/providers.js +73 -0
- package/src/middlewares/session.js +58 -0
- package/{lib → src}/middlewares/trace.js +74 -86
- package/src/middlewares/validator.js +50 -0
- package/src/middlewares/view_cache.js +127 -0
- package/{lib → src}/services/cache.js +45 -56
- package/src/services/config.js +111 -0
- package/src/services/env.js +28 -0
- package/src/services/event_manager.js +84 -0
- package/src/services/http_client.js +160 -0
- package/src/services/index.js +27 -0
- package/src/services/interface.js +5 -0
- package/src/services/joi.js +13 -0
- package/src/services/jwt_token.js +89 -0
- package/src/services/jwt_token_kong.js +75 -0
- package/src/services/logger.js +148 -0
- package/src/services/namespace.js +176 -0
- package/src/services/now.js +49 -0
- package/src/services/providers.js +158 -0
- package/src/services/redis.js +55 -0
- package/src/services/rest_client.js +112 -0
- package/src/swagger/index.js +668 -0
- package/{lib → src}/utils/api_scaffold.js +26 -39
- package/src/utils/case_converter.js +33 -0
- package/src/utils/crc32.js +44 -0
- package/src/utils/datetime.js +13 -0
- package/src/utils/host.js +39 -0
- package/src/utils/index.js +35 -0
- package/{lib → src}/utils/pagination.js +22 -31
- package/src/utils/random.js +23 -0
- package/{lib → src}/utils/smart_query.js +27 -27
- package/src/utils/test.js +48 -0
- package/src/utils/wrapper.js +8 -0
- package/bin/engine-babel +0 -38
- package/lib/commands/index.js +0 -25
- package/lib/commands/index.js.map +0 -1
- package/lib/commands/interface.js.map +0 -1
- package/lib/commands/make_entity.js +0 -549
- package/lib/commands/make_entity.js.map +0 -1
- package/lib/commands/tramp.js +0 -53
- package/lib/commands/tramp.js.map +0 -1
- package/lib/config/index.js.map +0 -1
- package/lib/di.js.map +0 -1
- package/lib/engine.js +0 -558
- package/lib/engine.js.map +0 -1
- package/lib/entities/index.js.map +0 -1
- package/lib/exceptions/index.js.map +0 -1
- package/lib/index.js +0 -105
- package/lib/index.js.map +0 -1
- package/lib/middlewares/auth.js +0 -97
- package/lib/middlewares/auth.js.map +0 -1
- package/lib/middlewares/auth_kong.js +0 -48
- package/lib/middlewares/auth_kong.js.map +0 -1
- package/lib/middlewares/debug.js +0 -68
- package/lib/middlewares/debug.js.map +0 -1
- package/lib/middlewares/index.js +0 -45
- package/lib/middlewares/index.js.map +0 -1
- package/lib/middlewares/providers.js +0 -102
- package/lib/middlewares/providers.js.map +0 -1
- package/lib/middlewares/session.js +0 -76
- package/lib/middlewares/session.js.map +0 -1
- package/lib/middlewares/trace.js.map +0 -1
- package/lib/middlewares/validator.js +0 -71
- package/lib/middlewares/validator.js.map +0 -1
- package/lib/middlewares/view_cache.js +0 -160
- package/lib/middlewares/view_cache.js.map +0 -1
- package/lib/services/cache.js.map +0 -1
- package/lib/services/config.js +0 -140
- package/lib/services/config.js.map +0 -1
- package/lib/services/env.js +0 -40
- package/lib/services/env.js.map +0 -1
- package/lib/services/event_manager.js +0 -110
- package/lib/services/event_manager.js.map +0 -1
- package/lib/services/http_client.js +0 -178
- package/lib/services/http_client.js.map +0 -1
- package/lib/services/index.js +0 -70
- package/lib/services/index.js.map +0 -1
- package/lib/services/interface.js +0 -12
- package/lib/services/interface.js.map +0 -1
- package/lib/services/joi.js +0 -28
- package/lib/services/joi.js.map +0 -1
- package/lib/services/jwt_token.js +0 -120
- package/lib/services/jwt_token.js.map +0 -1
- package/lib/services/jwt_token_kong.js +0 -111
- package/lib/services/jwt_token_kong.js.map +0 -1
- package/lib/services/logger.js +0 -172
- package/lib/services/logger.js.map +0 -1
- package/lib/services/namespace.js +0 -188
- package/lib/services/namespace.js.map +0 -1
- package/lib/services/now.js +0 -69
- package/lib/services/now.js.map +0 -1
- package/lib/services/providers.js +0 -195
- package/lib/services/providers.js.map +0 -1
- package/lib/services/redis.js +0 -77
- package/lib/services/redis.js.map +0 -1
- package/lib/services/rest_client.js +0 -136
- package/lib/services/rest_client.js.map +0 -1
- package/lib/swagger/index.js +0 -684
- package/lib/swagger/index.js.map +0 -1
- package/lib/utils/api_scaffold.js.map +0 -1
- package/lib/utils/case_converter.js +0 -48
- package/lib/utils/case_converter.js.map +0 -1
- package/lib/utils/crc32.js +0 -22
- package/lib/utils/crc32.js.map +0 -1
- package/lib/utils/datetime.js +0 -21
- package/lib/utils/datetime.js.map +0 -1
- package/lib/utils/host.js +0 -48
- package/lib/utils/host.js.map +0 -1
- package/lib/utils/index.js +0 -61
- package/lib/utils/index.js.map +0 -1
- package/lib/utils/pagination.js.map +0 -1
- package/lib/utils/random.js +0 -33
- package/lib/utils/random.js.map +0 -1
- package/lib/utils/smart_query.js.map +0 -1
- package/lib/utils/test.js +0 -62
- package/lib/utils/test.js.map +0 -1
- package/lib/utils/wrapper.js +0 -9
- 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"]}
|
package/lib/services/config.js
DELETED
|
@@ -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"]}
|
package/lib/services/env.js
DELETED
|
@@ -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
|
package/lib/services/env.js.map
DELETED
|
@@ -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"]}
|