org-core-js 0.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/README.md +446 -0
- package/babel.config.json +13 -0
- package/cjs/core/driverCore.js +37 -0
- package/cjs/core/drivers/bull.js +56 -0
- package/cjs/core/drivers/fogu.js +14 -0
- package/cjs/core/drivers/mq.js +50 -0
- package/cjs/core/drivers/nats.js +161 -0
- package/cjs/core/drivers/osone.js +14 -0
- package/cjs/core/drivers/rabbitmq.js +68 -0
- package/cjs/core/drivers/redis.js +68 -0
- package/cjs/core/drivers/socket.js +36 -0
- package/cjs/core/entityCore.js +22 -0
- package/cjs/core/eventCore.js +26 -0
- package/cjs/core/index.js +477 -0
- package/cjs/core/libCore.js +22 -0
- package/cjs/core/repositoryCore.js +30 -0
- package/cjs/core/serverCore.js +142 -0
- package/cjs/core/serviceCore.js +26 -0
- package/cjs/core/utilCore.js +22 -0
- package/cjs/core/workerCore.js +27 -0
- package/cjs/fileCore.js +27 -0
- package/cjs/forawait.js +55 -0
- package/cjs/index.js +117 -0
- package/cjs/package.json +3 -0
- package/esm/core/driverCore.js +33 -0
- package/esm/core/drivers/bull.js +49 -0
- package/esm/core/drivers/fogu.js +12 -0
- package/esm/core/drivers/nats.js +160 -0
- package/esm/core/drivers/rabbitmq.js +64 -0
- package/esm/core/drivers/redis.js +71 -0
- package/esm/core/drivers/socket.js +28 -0
- package/esm/core/entityCore.js +12 -0
- package/esm/core/eventCore.js +17 -0
- package/esm/core/index.js +440 -0
- package/esm/core/libCore.js +13 -0
- package/esm/core/repositoryCore.js +25 -0
- package/esm/core/serverCore.js +155 -0
- package/esm/core/serviceCore.js +17 -0
- package/esm/core/utilCore.js +12 -0
- package/esm/core/workerCore.js +20 -0
- package/esm/fileCore.js +19 -0
- package/esm/forawait.js +48 -0
- package/esm/index.js +128 -0
- package/esm/package.json +3 -0
- package/lib/index.html +1021 -0
- package/package.json +73 -0
- package/src/app/events/test/app.js +13 -0
- package/src/app/events/test/ws.js +14 -0
- package/src/app/services/test/app.js +14 -0
- package/src/app/services/test/app1.js +11 -0
- package/src/core/entities/user.js +14 -0
- package/src/core/libs/hash.js +10 -0
- package/src/core/utils/auth.js +19 -0
- package/src/index.js +11 -0
- package/src/infra/db/index.js +7 -0
- package/src/infra/repositories/test/app.js +6 -0
- package/src/infra/web/http.js +15 -0
- package/src/infra/web/routers/auth.js +30 -0
- package/src/infra/web/routers/test.js +26 -0
- package/src/infra/web/ws/test.js +35 -0
- package/src/infra/workers/test/test.md +14 -0
- package/src/start.js +39 -0
- package/test/core.test.js +46 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _default = ({
|
|
8
|
+
core
|
|
9
|
+
}) => {
|
|
10
|
+
return async ({
|
|
11
|
+
path = '/src/core/utils'
|
|
12
|
+
}, obj = {}) => {
|
|
13
|
+
const paths = core.fileCore.paths(path);
|
|
14
|
+
await core.forawait.generate(paths, async (path_file = '') => {
|
|
15
|
+
if (!(path_file.includes('.js') || path_file.includes('.ts'))) return;
|
|
16
|
+
await core.import.util(path + '/' + path_file, {
|
|
17
|
+
file: path_file
|
|
18
|
+
}, obj);
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
exports.default = _default;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _default = ({
|
|
8
|
+
core
|
|
9
|
+
}) => {
|
|
10
|
+
return async ({
|
|
11
|
+
path = '/src/infra/workers'
|
|
12
|
+
}, obj) => {
|
|
13
|
+
const paths = core.fileCore.paths(path);
|
|
14
|
+
if (!paths.length) return;
|
|
15
|
+
await core.forawait.generate(paths, async path_ => {
|
|
16
|
+
const path_files = core.fileCore.paths(path + '/' + path_);
|
|
17
|
+
await core.forawait.generate(path_files, async (path_file = '') => {
|
|
18
|
+
if (!(path_file.includes('.js') || path_file.includes('.ts'))) return;
|
|
19
|
+
await core.import.job(path + '/' + path_ + '/' + path_file, {
|
|
20
|
+
path: path_,
|
|
21
|
+
file: path_file
|
|
22
|
+
}, obj);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
exports.default = _default;
|
package/cjs/fileCore.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
8
|
+
var _path = _interopRequireDefault(require("path"));
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
11
|
+
var _default = exports.default = {
|
|
12
|
+
path: process.cwd(),
|
|
13
|
+
async import(file, obj = {}) {
|
|
14
|
+
return (await (specifier => new Promise(r => r(`${specifier}`)).then(s => _interopRequireWildcard(require(s))))('file://' + _path.default.resolve(this.path + file))).default(obj);
|
|
15
|
+
},
|
|
16
|
+
async importFile(file) {
|
|
17
|
+
return await (specifier => new Promise(r => r(`${specifier}`)).then(s => _interopRequireWildcard(require(s))))('file://' + _path.default.resolve(this.path + file));
|
|
18
|
+
},
|
|
19
|
+
exist(path_file) {
|
|
20
|
+
return _fs.default.existsSync(_path.default.resolve(this.path + path_file));
|
|
21
|
+
},
|
|
22
|
+
paths(paths) {
|
|
23
|
+
if (!this.exist(paths)) return [];
|
|
24
|
+
return _fs.default.readdirSync(_path.default.resolve(this.path + paths));
|
|
25
|
+
},
|
|
26
|
+
bin: _fs.default.existsSync(process.cwd() + '/esm') ? '/esm' : '/node_modules/create-org-app/esm'
|
|
27
|
+
};
|
package/cjs/forawait.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _default = exports.default = {
|
|
8
|
+
generator: function* generator(array) {
|
|
9
|
+
for (let index = 0; index < array.length; index++) {
|
|
10
|
+
yield array[index];
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
generator_fn: function* generator(data) {
|
|
14
|
+
if (Array.isArray(data)) {
|
|
15
|
+
for (let index = 0; index < data.length; index++) {
|
|
16
|
+
yield {
|
|
17
|
+
data: data[index],
|
|
18
|
+
index
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
} else {
|
|
22
|
+
data = Object.entries(data);
|
|
23
|
+
for (let index = 0; index < data.length; index++) {
|
|
24
|
+
yield {
|
|
25
|
+
data: data[index][1],
|
|
26
|
+
name: data[index][0]
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
generate: async function (data, fn, ops = {}, fun_error = console.log) {
|
|
32
|
+
let flag = false;
|
|
33
|
+
const fn_g = this.generator_fn(data);
|
|
34
|
+
while (!flag) {
|
|
35
|
+
const {
|
|
36
|
+
value,
|
|
37
|
+
done
|
|
38
|
+
} = fn_g.next();
|
|
39
|
+
if (value) {
|
|
40
|
+
try {
|
|
41
|
+
await fn(value.data, {
|
|
42
|
+
...ops,
|
|
43
|
+
index: value.index,
|
|
44
|
+
name: value.name
|
|
45
|
+
});
|
|
46
|
+
} catch (error) {
|
|
47
|
+
try {
|
|
48
|
+
await fun_error(error);
|
|
49
|
+
} catch (error) {}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
flag = done;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
package/cjs/index.js
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.testApp = exports.app = void 0;
|
|
7
|
+
var _dotenv = _interopRequireDefault(require("dotenv"));
|
|
8
|
+
var _fileCore = _interopRequireDefault(require("./fileCore.js"));
|
|
9
|
+
var _index = _interopRequireDefault(require("./core/index.js"));
|
|
10
|
+
var _forawait = _interopRequireDefault(require("./forawait.js"));
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
_dotenv.default.config();
|
|
13
|
+
const app = exports.app = {
|
|
14
|
+
async run({
|
|
15
|
+
servers,
|
|
16
|
+
drivers,
|
|
17
|
+
bootFile = "/src/index.js"
|
|
18
|
+
}) {
|
|
19
|
+
const initBoot = await _fileCore.default.importFile(bootFile);
|
|
20
|
+
const {
|
|
21
|
+
bootstrap,
|
|
22
|
+
distroy
|
|
23
|
+
} = initBoot.default || initBoot;
|
|
24
|
+
const sys = (0, _index.default)({});
|
|
25
|
+
await sys.createLib({}, {});
|
|
26
|
+
await sys.createUtil({}, {});
|
|
27
|
+
await sys.createEntity({}, {});
|
|
28
|
+
await sys.createRepository({}, {});
|
|
29
|
+
await sys.createService({}, {});
|
|
30
|
+
await _forawait.default.generate(drivers, async driver => {
|
|
31
|
+
await sys.createDriver(driver);
|
|
32
|
+
});
|
|
33
|
+
await sys.createEvent({}, {});
|
|
34
|
+
await sys.createWorker({}, {});
|
|
35
|
+
await _forawait.default.generate(servers, async server => {
|
|
36
|
+
await sys.createServer(server);
|
|
37
|
+
});
|
|
38
|
+
process.on('uncaughtException', (error, origin) => {
|
|
39
|
+
console.log(`\n${origin} signal received. \n${error}`);
|
|
40
|
+
});
|
|
41
|
+
process.on('SIGINT', grafulShutdown('SIGINT'));
|
|
42
|
+
process.on('SIGTERM', grafulShutdown('SIGTERM'));
|
|
43
|
+
process.on('exit', async code => {
|
|
44
|
+
try {
|
|
45
|
+
await distroy({
|
|
46
|
+
sys: {
|
|
47
|
+
...sys.core.import
|
|
48
|
+
},
|
|
49
|
+
core: {
|
|
50
|
+
...sys.core.app
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
} catch (error) {}
|
|
54
|
+
console.log('exit signal received', code);
|
|
55
|
+
});
|
|
56
|
+
function grafulShutdown(event) {
|
|
57
|
+
return async code => {
|
|
58
|
+
console.log(`${event} received! with ${code}`);
|
|
59
|
+
try {
|
|
60
|
+
await distroy({
|
|
61
|
+
sys: {
|
|
62
|
+
...sys.core.import
|
|
63
|
+
},
|
|
64
|
+
core: {
|
|
65
|
+
...sys.core.app
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
} catch (error) {}
|
|
69
|
+
process.exit(0);
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
await bootstrap({
|
|
73
|
+
sys: {
|
|
74
|
+
...sys.core.import
|
|
75
|
+
},
|
|
76
|
+
core: {
|
|
77
|
+
...sys.core.app
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const testApp = exports.testApp = {
|
|
83
|
+
async run({
|
|
84
|
+
db = {},
|
|
85
|
+
setDB = null
|
|
86
|
+
} = {}) {
|
|
87
|
+
const sys = (0, _index.default)({});
|
|
88
|
+
await sys.createLib({}, {});
|
|
89
|
+
await sys.createUtil({}, {});
|
|
90
|
+
await sys.createEntity({}, {});
|
|
91
|
+
await sys.createEvent({}, {});
|
|
92
|
+
await sys.createService({}, {});
|
|
93
|
+
process.env.DB_TEST = "True";
|
|
94
|
+
await sys.createRepository({}, {
|
|
95
|
+
db: db,
|
|
96
|
+
getDB: setDB
|
|
97
|
+
});
|
|
98
|
+
process.on('uncaughtException', (error, origin) => {
|
|
99
|
+
console.log(`\n${origin} signal received. \n${error}`);
|
|
100
|
+
});
|
|
101
|
+
process.on('SIGINT', grafulShutdown('SIGINT'));
|
|
102
|
+
process.on('SIGTERM', grafulShutdown('SIGTERM'));
|
|
103
|
+
process.on('exit', async code => {
|
|
104
|
+
console.log('exit signal received', code);
|
|
105
|
+
});
|
|
106
|
+
function grafulShutdown(event) {
|
|
107
|
+
return async code => {
|
|
108
|
+
console.log(`${event} received! with ${code}`);
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
core: {
|
|
113
|
+
...sys.core.app
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
};
|
package/cjs/package.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
|
|
2
|
+
export default ({ core }) => {
|
|
3
|
+
return {
|
|
4
|
+
async "nats"(driver) {
|
|
5
|
+
const file = core.fileCore.bin + '/core/drivers/nats.js'
|
|
6
|
+
await core.addMethodCore(driver, file)
|
|
7
|
+
},
|
|
8
|
+
async "redis"(driver) {
|
|
9
|
+
const file = core.fileCore.bin + '/core/drivers/redis.js'
|
|
10
|
+
await core.addMethodCore(driver, file)
|
|
11
|
+
},
|
|
12
|
+
async "bull"(driver) {
|
|
13
|
+
const file = core.fileCore.bin + '/core/drivers/bull.js'
|
|
14
|
+
await core.addMethodCore(driver, file)
|
|
15
|
+
},
|
|
16
|
+
|
|
17
|
+
async "socket"(driver) {
|
|
18
|
+
const file = core.fileCore.bin + '/core/drivers/socket.js'
|
|
19
|
+
await core.addMethodCore(driver, file)
|
|
20
|
+
},
|
|
21
|
+
async "rabbitmq"(driver) {
|
|
22
|
+
const file = core.fileCore.bin + '/core/drivers/rabbitmq.js'
|
|
23
|
+
await core.addMethodCore(driver, file)
|
|
24
|
+
},
|
|
25
|
+
async "fogu"(driver) {
|
|
26
|
+
const file = core.fileCore.bin + '/core/drivers/fogu.js'
|
|
27
|
+
await core.addMethodCore(driver, file)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
|
|
2
|
+
import { Queue, Worker } from 'bullmq'
|
|
3
|
+
let url
|
|
4
|
+
const jobs = {}
|
|
5
|
+
export default async ({ connection = {
|
|
6
|
+
host: process.env.REDIS_HOST,
|
|
7
|
+
port: process.env.REDIS_PORT,
|
|
8
|
+
password: process.env.REDIS_PASSWORD
|
|
9
|
+
} }) => {
|
|
10
|
+
return {
|
|
11
|
+
async close() {
|
|
12
|
+
|
|
13
|
+
},
|
|
14
|
+
async connect({ url: url3 }) {
|
|
15
|
+
url = url3
|
|
16
|
+
},
|
|
17
|
+
job(name_job) {
|
|
18
|
+
return {
|
|
19
|
+
async cmd(name, data, config) {
|
|
20
|
+
await jobs[name_job].add(name, data);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
addJob: ({ name }) => {
|
|
25
|
+
jobs[name] = new Queue(name, {
|
|
26
|
+
connection
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
},
|
|
30
|
+
worker: ({
|
|
31
|
+
name,
|
|
32
|
+
fn,
|
|
33
|
+
completed = job => {
|
|
34
|
+
console.log(`${job.id} has completed!`);
|
|
35
|
+
},
|
|
36
|
+
failed = (job, err) => {
|
|
37
|
+
console.log(`${job.id} has failed with ${err.message}`);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
}) => {
|
|
41
|
+
const myWorker = new Worker(name, fn, {
|
|
42
|
+
connection
|
|
43
|
+
});
|
|
44
|
+
myWorker.on('completed', completed);
|
|
45
|
+
myWorker.on('failed', failed);
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { connect, StringCodec, headers, Empty } from "nats";
|
|
2
|
+
export default async (config) => {
|
|
3
|
+
let nc = await connect(config);
|
|
4
|
+
const sc = StringCodec();
|
|
5
|
+
const js = nc.jetstream();
|
|
6
|
+
|
|
7
|
+
const stores = {
|
|
8
|
+
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// create an entry - this is similar to a put, but will fail if the
|
|
12
|
+
// key exists
|
|
13
|
+
|
|
14
|
+
return {
|
|
15
|
+
store: {
|
|
16
|
+
kv(kv) {
|
|
17
|
+
return {
|
|
18
|
+
async create(name, data) {
|
|
19
|
+
let input = data
|
|
20
|
+
if (typeof input == 'object') {
|
|
21
|
+
input = JSON.stringify(input)
|
|
22
|
+
}
|
|
23
|
+
const e = await stores[kv].get(name);
|
|
24
|
+
let value =new TextDecoder().decode(e?.value)
|
|
25
|
+
if (e && value) return
|
|
26
|
+
await stores[kv].create(name, sc.encode(input));
|
|
27
|
+
},
|
|
28
|
+
async del(name) {
|
|
29
|
+
await stores[kv].delete(name);
|
|
30
|
+
},
|
|
31
|
+
async set(name, data) {
|
|
32
|
+
let input = data
|
|
33
|
+
if (typeof input == 'object') {
|
|
34
|
+
input = JSON.stringify(input)
|
|
35
|
+
}
|
|
36
|
+
await stores[kv].put(name, sc.encode(input));
|
|
37
|
+
},
|
|
38
|
+
async get(name) {
|
|
39
|
+
const e = await stores[kv].get(name);
|
|
40
|
+
let value =new TextDecoder().decode(e?.value)
|
|
41
|
+
try {
|
|
42
|
+
value = JSON.parse(value)
|
|
43
|
+
} catch (error) {
|
|
44
|
+
value =new TextDecoder().decode(e?.value)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return value
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
},
|
|
52
|
+
async createKV(name, fn, config = { history: 5 }) {
|
|
53
|
+
stores[name] = await js.views.kv(name, config);
|
|
54
|
+
const watch = await stores[name].watch();
|
|
55
|
+
(async () => {
|
|
56
|
+
for await (const e of watch) {
|
|
57
|
+
if (!fn) return
|
|
58
|
+
await fn(e)
|
|
59
|
+
}
|
|
60
|
+
})().then();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
},
|
|
64
|
+
async close() {
|
|
65
|
+
return nc.drain()
|
|
66
|
+
},
|
|
67
|
+
sub({ topic }, fn, config = {}) {
|
|
68
|
+
//{ queue: queue || '' }
|
|
69
|
+
(async (sub) => {
|
|
70
|
+
for await (const m of sub) {
|
|
71
|
+
let input =new TextDecoder().decode(m.data)
|
|
72
|
+
try {
|
|
73
|
+
input = JSON.parse(input)
|
|
74
|
+
} catch (error) {
|
|
75
|
+
input =new TextDecoder().decode(m.data)
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
await fn(input)
|
|
79
|
+
} catch (error) {
|
|
80
|
+
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
})(nc.subscribe(topic, config));
|
|
85
|
+
},
|
|
86
|
+
pub({ topic }, data) {
|
|
87
|
+
let input = data
|
|
88
|
+
if (typeof input == 'object') {
|
|
89
|
+
input = JSON.stringify(input)
|
|
90
|
+
}
|
|
91
|
+
nc.publish(topic, sc.encode(Buffer.from(input)));
|
|
92
|
+
},
|
|
93
|
+
async connect() {
|
|
94
|
+
nc = await connect({ servers });
|
|
95
|
+
},
|
|
96
|
+
service(name, fn, auth = null, config = {}) {
|
|
97
|
+
|
|
98
|
+
(async (sub) => {
|
|
99
|
+
for await (const m of sub) {
|
|
100
|
+
const headers = m.headers
|
|
101
|
+
|
|
102
|
+
if (auth) {
|
|
103
|
+
try {
|
|
104
|
+
const ok = await auth({
|
|
105
|
+
get(name) {
|
|
106
|
+
return headers?.get(name)
|
|
107
|
+
}
|
|
108
|
+
})
|
|
109
|
+
if (!ok) {
|
|
110
|
+
return m.respond(sc.encode(Buffer.from(JSON.stringify({
|
|
111
|
+
error: "dd",
|
|
112
|
+
data: null
|
|
113
|
+
}))))
|
|
114
|
+
}
|
|
115
|
+
} catch (error) {
|
|
116
|
+
return m.respond(sc.encode(Buffer.from(JSON.stringify({
|
|
117
|
+
error: "dd",
|
|
118
|
+
data: null
|
|
119
|
+
}))))
|
|
120
|
+
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
let input =new TextDecoder().decode(m.data)
|
|
125
|
+
try {
|
|
126
|
+
input = JSON.parse(input)
|
|
127
|
+
} catch (error) {
|
|
128
|
+
input =new TextDecoder().decode(m.data)
|
|
129
|
+
}
|
|
130
|
+
const res = await fn(input)
|
|
131
|
+
if (m.respond(sc.encode(Buffer.from(JSON.stringify(res || {}))))) {
|
|
132
|
+
// console.info(`[time] handled #${sub.getProcessed()}`);
|
|
133
|
+
} else {
|
|
134
|
+
// console.log(`[time] #${sub.getProcessed()} ignored - no reply subject`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
})(nc.subscribe("service:" + name, config));
|
|
138
|
+
},
|
|
139
|
+
async command(name, data = {}, _headers = {}, config = {}) {
|
|
140
|
+
const h = headers();
|
|
141
|
+
Object.entries(_headers).forEach(([key, value]) => {
|
|
142
|
+
h.append(key, value);
|
|
143
|
+
});
|
|
144
|
+
let input = data
|
|
145
|
+
if (typeof input == 'object') {
|
|
146
|
+
input = JSON.stringify(input)
|
|
147
|
+
}
|
|
148
|
+
const res = await nc.request("service:" + name, sc.encode(Buffer.from(input)), { timeout: config.timeout || 5000, headers: h })
|
|
149
|
+
|
|
150
|
+
let output = new TextDecoder().decode(res.data)
|
|
151
|
+
try {
|
|
152
|
+
output = JSON.parse(output)
|
|
153
|
+
} catch (error) {
|
|
154
|
+
|
|
155
|
+
}
|
|
156
|
+
return output
|
|
157
|
+
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import amqplib from 'amqplib';
|
|
2
|
+
let client
|
|
3
|
+
export default async (config) => {
|
|
4
|
+
client = await amqplib.connect(config.url || 'amqp://localhost');
|
|
5
|
+
client = await client.createChannel();
|
|
6
|
+
return {
|
|
7
|
+
async connect() {
|
|
8
|
+
client = await amqplib.connect(config.url || 'amqp://localhost');
|
|
9
|
+
client = await client.createChannel();
|
|
10
|
+
},
|
|
11
|
+
|
|
12
|
+
async close() {
|
|
13
|
+
|
|
14
|
+
},
|
|
15
|
+
async send(queue, data) {
|
|
16
|
+
let input = data
|
|
17
|
+
await client.assertQueue(queue);
|
|
18
|
+
if (typeof data == 'object') {
|
|
19
|
+
input = JSON.stringify(input)
|
|
20
|
+
}
|
|
21
|
+
return client.sendToQueue(queue, Buffer.from(input));
|
|
22
|
+
},
|
|
23
|
+
async sub({ queue, topic, pattern = '', exchangeType = 'topic' }, fn = console.log) {
|
|
24
|
+
|
|
25
|
+
await client.assertQueue(queue)
|
|
26
|
+
if (topic && exchangeType) {
|
|
27
|
+
await client.assertExchange(topic, exchangeType)
|
|
28
|
+
await client.bindQueue(queue, topic, pattern)
|
|
29
|
+
}
|
|
30
|
+
client.consume(queue, async (msg) => {
|
|
31
|
+
if (msg !== null) {
|
|
32
|
+
let input = msg.content.toString()
|
|
33
|
+
try {
|
|
34
|
+
input = JSON.parse(input)
|
|
35
|
+
} catch (error) {
|
|
36
|
+
|
|
37
|
+
}
|
|
38
|
+
await fn({ data: input, ack: () => client.ack(msg) })
|
|
39
|
+
//ch1.ack(msg);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
async pub({ routingKey = '', topic = 'my-topic', exchangeType = 'topic' }, data) {
|
|
48
|
+
await client.assertExchange(topic, exchangeType)
|
|
49
|
+
let input = data
|
|
50
|
+
if (typeof data == 'object') {
|
|
51
|
+
input = JSON.stringify(input)
|
|
52
|
+
}
|
|
53
|
+
return client.publish(
|
|
54
|
+
topic,
|
|
55
|
+
routingKey,
|
|
56
|
+
Buffer.from(input),
|
|
57
|
+
{
|
|
58
|
+
persistent: true
|
|
59
|
+
}
|
|
60
|
+
)
|
|
61
|
+
},
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { createClient } from 'redis';
|
|
2
|
+
export default async (config) => {
|
|
3
|
+
let clientPub = null
|
|
4
|
+
let clientSub = null
|
|
5
|
+
clientPub = createClient(config);
|
|
6
|
+
clientPub.on('error', err => console.log('Redis Client Error', err));
|
|
7
|
+
clientSub = clientPub.duplicate();
|
|
8
|
+
await clientPub.connect();
|
|
9
|
+
await clientSub.connect();
|
|
10
|
+
|
|
11
|
+
return {
|
|
12
|
+
client: clientPub,
|
|
13
|
+
async connect() {
|
|
14
|
+
clientPub = createClient(config);
|
|
15
|
+
clientPub.on('error', err => console.log('Redis Client Error', err));
|
|
16
|
+
clientSub = clientPub.duplicate();
|
|
17
|
+
await clientPub.connect();
|
|
18
|
+
await clientSub.connect();
|
|
19
|
+
|
|
20
|
+
this.client = clientPub
|
|
21
|
+
},
|
|
22
|
+
async close() {
|
|
23
|
+
await client.disconnect();
|
|
24
|
+
await clientSub.disconnect();
|
|
25
|
+
await clientPub.disconnect();
|
|
26
|
+
},
|
|
27
|
+
async set(key, value) {
|
|
28
|
+
let input = value
|
|
29
|
+
try {
|
|
30
|
+
input = JSON.stringify(input)
|
|
31
|
+
} catch (error) {
|
|
32
|
+
|
|
33
|
+
}
|
|
34
|
+
await clientPub.set(key, input);
|
|
35
|
+
|
|
36
|
+
},
|
|
37
|
+
async get(key) {
|
|
38
|
+
const res = await clientPub.get(key);
|
|
39
|
+
let data = res
|
|
40
|
+
try {
|
|
41
|
+
data = JSON.parse(res)
|
|
42
|
+
} catch (error) {
|
|
43
|
+
|
|
44
|
+
}
|
|
45
|
+
return data
|
|
46
|
+
},
|
|
47
|
+
async pub({ topic }, data) {
|
|
48
|
+
let input = data
|
|
49
|
+
try {
|
|
50
|
+
input = JSON.stringify(input)
|
|
51
|
+
} catch (error) {
|
|
52
|
+
|
|
53
|
+
}
|
|
54
|
+
await clientPub.publish(topic, input);
|
|
55
|
+
},
|
|
56
|
+
async sub({ topic }, cb = console.log) {
|
|
57
|
+
clientSub.subscribe(topic, async (input) => {
|
|
58
|
+
let data = input
|
|
59
|
+
try {
|
|
60
|
+
data = JSON.parse(input)
|
|
61
|
+
} catch (error) {
|
|
62
|
+
|
|
63
|
+
}
|
|
64
|
+
await cb(data)
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
|
|
2
|
+
import { io } from "socket.io-client";
|
|
3
|
+
export default ({ }) => ({
|
|
4
|
+
client: null,
|
|
5
|
+
async close() {
|
|
6
|
+
|
|
7
|
+
},
|
|
8
|
+
async connect({ url, config = {} }) {
|
|
9
|
+
this.client = io(url, config);
|
|
10
|
+
},
|
|
11
|
+
async req(event, input) {
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
this.client.emit(event, input, (error, res) => {
|
|
14
|
+
if (error) reject(error)
|
|
15
|
+
resolve(res)
|
|
16
|
+
})
|
|
17
|
+
})
|
|
18
|
+
},
|
|
19
|
+
async pub({ topic }, data) {
|
|
20
|
+
await this.client.emit(topic, input);
|
|
21
|
+
},
|
|
22
|
+
async sub({ topic }, cb = console.log) {
|
|
23
|
+
this.client.on(topic, cb);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
|
|
2
|
+
export default ({ core }) => {
|
|
3
|
+
return async ({ path = '/src/core/entities' }, obj = {}) => {
|
|
4
|
+
const paths = core.fileCore.paths(path)
|
|
5
|
+
await core.forawait.generate(paths, async (path_file = '') => {
|
|
6
|
+
if (!(path_file.includes('.js') || path_file.includes('.ts'))) return
|
|
7
|
+
await core.import.entity(path + '/' + path_file, {
|
|
8
|
+
file: path_file
|
|
9
|
+
}, obj)
|
|
10
|
+
})
|
|
11
|
+
}
|
|
12
|
+
}
|