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,17 @@
|
|
|
1
|
+
|
|
2
|
+
export default ({ core }) => {
|
|
3
|
+
return async ({ path = '/src/app/events' }, obj = {}) => {
|
|
4
|
+
const paths = core.fileCore.paths(path)
|
|
5
|
+
await core.forawait.generate(paths, async (path_,) => {
|
|
6
|
+
const path_files = core.fileCore.paths(path + '/' + path_)
|
|
7
|
+
await core.forawait.generate(path_files, async (path_file = '') => {
|
|
8
|
+
if (!(path_file.includes('.js') || path_file.includes('.ts'))) return
|
|
9
|
+
await core.import.event(path + '/' + path_ + '/' + path_file, {
|
|
10
|
+
path: path_,
|
|
11
|
+
file: path_file
|
|
12
|
+
}, obj)
|
|
13
|
+
|
|
14
|
+
})
|
|
15
|
+
})
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
|
|
2
|
+
import createCoreService from './serviceCore.js'
|
|
3
|
+
import createCoreWorker from './workerCore.js'
|
|
4
|
+
import createCoreRepository from './repositoryCore.js'
|
|
5
|
+
import createCoreServer from './serverCore.js'
|
|
6
|
+
import createCoreDriver from './driverCore.js'
|
|
7
|
+
import createCoreEntity from './entityCore.js';
|
|
8
|
+
import createCoreUtil from './utilCore.js';
|
|
9
|
+
import createCoreLib from './libCore.js';
|
|
10
|
+
import createCoreEvent from './eventCore.js';
|
|
11
|
+
import forawait from '../forawait.js'
|
|
12
|
+
import fileCore from '../fileCore.js'
|
|
13
|
+
import { EventEmitter } from 'node:events';
|
|
14
|
+
import crypto from 'node:crypto'
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
const eventCore = new EventEmitter()
|
|
18
|
+
const libCore = {
|
|
19
|
+
forawait,
|
|
20
|
+
generate: {
|
|
21
|
+
string(length = 25) {
|
|
22
|
+
let result = '';
|
|
23
|
+
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
24
|
+
const charactersLength = characters.length;
|
|
25
|
+
let counter = 0;
|
|
26
|
+
while (counter < length) {
|
|
27
|
+
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
|
28
|
+
counter += 1;
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
},
|
|
32
|
+
number(length = 25) {
|
|
33
|
+
let result = '';
|
|
34
|
+
const characters = '0123456789';
|
|
35
|
+
const charactersLength = characters.length;
|
|
36
|
+
let counter = 0;
|
|
37
|
+
while (counter < length) {
|
|
38
|
+
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
|
39
|
+
counter += 1;
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
},
|
|
43
|
+
keys({ type, modulusLength = 4096 }) {
|
|
44
|
+
|
|
45
|
+
return new Promise((resolve, reject) => {
|
|
46
|
+
crypto.generateKeyPair('rsa', {
|
|
47
|
+
modulusLength,
|
|
48
|
+
publicKeyEncoding: {
|
|
49
|
+
type: 'pkcs1',
|
|
50
|
+
format: 'pem'
|
|
51
|
+
},
|
|
52
|
+
privateKeyEncoding: {
|
|
53
|
+
type: 'pkcs1',
|
|
54
|
+
format: 'pem'
|
|
55
|
+
}
|
|
56
|
+
}, (err, publicKey, privateKey) => {
|
|
57
|
+
if (err) return reject(err)
|
|
58
|
+
resolve({
|
|
59
|
+
public: publicKey,
|
|
60
|
+
private: privateKey
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
})
|
|
64
|
+
})
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
const ioCore = {
|
|
70
|
+
client: [],
|
|
71
|
+
server: []
|
|
72
|
+
}
|
|
73
|
+
const utilCore = {}
|
|
74
|
+
const services = {}
|
|
75
|
+
const repositoryCore = {}
|
|
76
|
+
const entityCore = {}
|
|
77
|
+
|
|
78
|
+
const methodCore = {
|
|
79
|
+
node: {
|
|
80
|
+
pub({ topic }, ...input) {
|
|
81
|
+
eventCore.emit(topic, ...input);
|
|
82
|
+
},
|
|
83
|
+
sub({ topic }, fn = console.log) {
|
|
84
|
+
eventCore.on(topic, fn);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export default ({ }) => {
|
|
90
|
+
|
|
91
|
+
const app = {
|
|
92
|
+
service: (params = '') => {
|
|
93
|
+
const [service_, method] = params.split('.')
|
|
94
|
+
return {
|
|
95
|
+
async execute(input, event) {
|
|
96
|
+
const output = await services[service_][method](input, event)
|
|
97
|
+
if (!event) return output
|
|
98
|
+
methodCore[event].pub({ topic: 'service::' + service_ + '.' + method }, output);
|
|
99
|
+
return output
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
driver: (params = '') => {
|
|
104
|
+
return methodCore[params]
|
|
105
|
+
},
|
|
106
|
+
lib: (params = '') => {
|
|
107
|
+
return libCore[params]
|
|
108
|
+
},
|
|
109
|
+
|
|
110
|
+
nats: (name = "nats") => {
|
|
111
|
+
return libCore[name]
|
|
112
|
+
},
|
|
113
|
+
|
|
114
|
+
util: (params = '') => {
|
|
115
|
+
return utilCore[params]
|
|
116
|
+
},
|
|
117
|
+
entity: (params = '') => {
|
|
118
|
+
const [entity_, method] = params.split('.')
|
|
119
|
+
if (method) {
|
|
120
|
+
return {
|
|
121
|
+
|
|
122
|
+
async execute(input, event) {
|
|
123
|
+
const output = await entityCore[entity_][method](input)
|
|
124
|
+
if (!event) return output
|
|
125
|
+
methodCore[event].pub({ topic: 'entity::' + entity_ + '.' + method }, output);
|
|
126
|
+
return output
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return {
|
|
132
|
+
async entity(input, event) {
|
|
133
|
+
const output = await entityCore[entity_]["entity"](input)
|
|
134
|
+
if (!event) return output
|
|
135
|
+
methodCore[event].pub({ topic: 'entity::' + entity_ + '.' + method }, output);
|
|
136
|
+
return output
|
|
137
|
+
},
|
|
138
|
+
async dto(input) {
|
|
139
|
+
const output = await entityCore[entity_]["dto"](input)
|
|
140
|
+
return output
|
|
141
|
+
},
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
},
|
|
145
|
+
repository: (params = '') => {
|
|
146
|
+
const [repository_, method] = params.split('.')
|
|
147
|
+
return {
|
|
148
|
+
async execute(input, event) {
|
|
149
|
+
const output = await repositoryCore[repository_][method](input)
|
|
150
|
+
if (!event) return output
|
|
151
|
+
methodCore[event].pub({ topic: 'repository::' + repository_ + '.' + method }, output);
|
|
152
|
+
return output
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
},
|
|
158
|
+
event: (name) => methodCore[name],
|
|
159
|
+
job: (name) => {
|
|
160
|
+
return {
|
|
161
|
+
async cmd(code, data, config) {
|
|
162
|
+
return await libCore.bull.job(name).cmd(code, data, config)
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
seneca: (name) => {
|
|
168
|
+
return {
|
|
169
|
+
async cmd(name_, data) {
|
|
170
|
+
return await libCore['seneca']['clients'][name].cmd(name_, data)
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
grpc: (name) => {
|
|
175
|
+
return {
|
|
176
|
+
duplex(name_, fn) {
|
|
177
|
+
libCore['grpc']['clients'][name](name_).duplex(fn)
|
|
178
|
+
},
|
|
179
|
+
data(name_, input, fn, end) {
|
|
180
|
+
libCore['grpc']['clients'][name](name_).data(input, fn, end)
|
|
181
|
+
},
|
|
182
|
+
stream(name_, fn) {
|
|
183
|
+
return libCore['grpc']['clients'][name](name_).stream(fn)
|
|
184
|
+
},
|
|
185
|
+
async cmd(name_, data) {
|
|
186
|
+
return await libCore['grpc']['clients'][name](name_).cmd(data)
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
const core = {
|
|
192
|
+
fileCore,
|
|
193
|
+
async repositories(paths, path, obj) {
|
|
194
|
+
await forawait.generate(paths, async (path_,) => {
|
|
195
|
+
const path_files = fileCore.paths(path + '/' + path_)
|
|
196
|
+
repositoryCore[path_] = {}
|
|
197
|
+
await forawait.generate(path_files, async (path_file = '') => {
|
|
198
|
+
if (!(path_file.includes('.js') || path_file.includes('.ts'))) return
|
|
199
|
+
await core.import.repository(path + '/' + path_ + '/' + path_file, {
|
|
200
|
+
path: path_,
|
|
201
|
+
file: path_file
|
|
202
|
+
}, obj)
|
|
203
|
+
|
|
204
|
+
})
|
|
205
|
+
})
|
|
206
|
+
},
|
|
207
|
+
listServices(name) {
|
|
208
|
+
return Object.keys(services[name])
|
|
209
|
+
},
|
|
210
|
+
forawait,
|
|
211
|
+
addLib(lib_, name) {
|
|
212
|
+
libCore[name] = lib_
|
|
213
|
+
},
|
|
214
|
+
async addMethodCore(driver, file) {
|
|
215
|
+
methodCore[driver.name] = await (await core.fileCore.importFile(file)).default(driver.config)
|
|
216
|
+
libCore[driver.name] = methodCore[driver.name]
|
|
217
|
+
},
|
|
218
|
+
import: {
|
|
219
|
+
async service(path_, params, obj = {}, feature = false) {
|
|
220
|
+
const nameService = feature ? params.file.split('.')[0] : params.path
|
|
221
|
+
if (!services[nameService]) {
|
|
222
|
+
services[nameService] = {}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
const { execute, driver } = (await fileCore.import(path_, {
|
|
226
|
+
seneca: app.seneca,
|
|
227
|
+
// command: app.command,
|
|
228
|
+
job: app.job,
|
|
229
|
+
service: app.service,
|
|
230
|
+
nats: app.nats,
|
|
231
|
+
event: app.event,
|
|
232
|
+
repository: app.repository,
|
|
233
|
+
entity: app.entity,
|
|
234
|
+
util: app.util,
|
|
235
|
+
lib: app.lib,
|
|
236
|
+
grpc: app.grpc,
|
|
237
|
+
...obj
|
|
238
|
+
}))
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
const nameMethod = feature ? params.path : params.file.split('.')[0]
|
|
242
|
+
services[nameService][nameMethod] = execute
|
|
243
|
+
|
|
244
|
+
await forawait.generate(Object.entries(driver || {}),async ([name, dr]) => {
|
|
245
|
+
|
|
246
|
+
if (methodCore[name]) {
|
|
247
|
+
methodCore[name].sub({
|
|
248
|
+
topic: dr == true ? (nameService + "." + nameMethod) : dr
|
|
249
|
+
}, async (...input) => {
|
|
250
|
+
try {
|
|
251
|
+
await services[nameService][nameMethod](input[0])
|
|
252
|
+
} catch (error) {
|
|
253
|
+
console.log(error)
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
})
|
|
257
|
+
} else {
|
|
258
|
+
|
|
259
|
+
if (name == "bull" || name == "job") {
|
|
260
|
+
libCore.bull.addJob({ name: dr == true ? (nameService + "." + nameMethod) : dr }, Job.config)
|
|
261
|
+
libCore.bull.worker({
|
|
262
|
+
name: dr == true ? (nameService + "." + nameMethod) : dr,
|
|
263
|
+
fn: execute,
|
|
264
|
+
async completed(job_) {
|
|
265
|
+
await methodCore[job_.method || 'redis'].pub({
|
|
266
|
+
topic: 'worker::completed:' + name
|
|
267
|
+
}, { name: job_.name, id: job_.id, input: job_.data, output: job_.returnvalue })
|
|
268
|
+
},
|
|
269
|
+
async failed(job_, err) {
|
|
270
|
+
await methodCore[job_.method || 'redis'].pub({
|
|
271
|
+
topic: 'worker::failed:' + name
|
|
272
|
+
}, { name: job_.name, id: job_.id, input: job_.data, err: err.message })
|
|
273
|
+
}
|
|
274
|
+
})
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
})
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
},
|
|
283
|
+
async entity(path_ = '', params, obj, feature = false) {
|
|
284
|
+
|
|
285
|
+
entityCore[params.file.split('.')[0]] = (await fileCore.import(path_, {
|
|
286
|
+
...obj,
|
|
287
|
+
seneca: app.seneca,
|
|
288
|
+
// command: app.command,
|
|
289
|
+
job: app.job,
|
|
290
|
+
service: app.service,
|
|
291
|
+
nats: app.nats,
|
|
292
|
+
event: app.event,
|
|
293
|
+
repository: app.repository,
|
|
294
|
+
util: app.util,
|
|
295
|
+
lib: app.lib,
|
|
296
|
+
grpc: app.grpc,
|
|
297
|
+
}))
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
},
|
|
301
|
+
async event(path_, params, obj) {
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
const { event, execute } = (await fileCore.import(path_, {
|
|
305
|
+
seneca: app.seneca,
|
|
306
|
+
// command: app.command,
|
|
307
|
+
job: app.job,
|
|
308
|
+
service: app.service,
|
|
309
|
+
nats: app.nats,
|
|
310
|
+
event: app.event,
|
|
311
|
+
repository: app.repository,
|
|
312
|
+
util: app.util,
|
|
313
|
+
lib: app.lib,
|
|
314
|
+
grpc: app.grpc,
|
|
315
|
+
driver: app.driver,
|
|
316
|
+
...obj
|
|
317
|
+
}))
|
|
318
|
+
|
|
319
|
+
const nameService = params.path + "." + params.file.split('.')[0]
|
|
320
|
+
if (!event.topic) {
|
|
321
|
+
event.topic = nameService
|
|
322
|
+
}
|
|
323
|
+
if (!methodCore[event.method]) {
|
|
324
|
+
if (event.method == "ws") {
|
|
325
|
+
if (event.type == "client") {
|
|
326
|
+
methodCore["socket:" + event.name].sub(event, execute)
|
|
327
|
+
} else {
|
|
328
|
+
ioCore.server.push({ event, execute })
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
return
|
|
332
|
+
}
|
|
333
|
+
methodCore[event.method].sub(event, execute)
|
|
334
|
+
return
|
|
335
|
+
},
|
|
336
|
+
async repository(path_, params, obj, feature = false) {
|
|
337
|
+
if (!repositoryCore[feature ? params.file.split('.')[0] : params.path]) {
|
|
338
|
+
repositoryCore[feature ? params.file.split('.')[0] : params.path] = {}
|
|
339
|
+
}
|
|
340
|
+
repositoryCore[feature ? params.file.split('.')[0] : params.path][feature ? params.path : params.file.split('.')[0]] = (await fileCore.import(path_, {
|
|
341
|
+
driver: app.driver,
|
|
342
|
+
lib: app.lib,
|
|
343
|
+
...obj
|
|
344
|
+
})).execute
|
|
345
|
+
},
|
|
346
|
+
async lib(path_, params, obj) {
|
|
347
|
+
libCore[params.file.split('.')[0]] = (await fileCore.import(path_, obj))
|
|
348
|
+
},
|
|
349
|
+
async util(path_, params, obj) {
|
|
350
|
+
utilCore[params.file.split('.')[0]] = (await fileCore.import(path_, {
|
|
351
|
+
...obj,
|
|
352
|
+
service: app.service,
|
|
353
|
+
repository: app.repository,
|
|
354
|
+
entity: app.entity,
|
|
355
|
+
util: app.util,
|
|
356
|
+
lib: app.lib
|
|
357
|
+
}))
|
|
358
|
+
},
|
|
359
|
+
|
|
360
|
+
async job(path_, params, obj = {}) {
|
|
361
|
+
const { job: Job, execute } = (await fileCore.import(path_,
|
|
362
|
+
{
|
|
363
|
+
seneca: app.seneca,
|
|
364
|
+
// command: app.command,
|
|
365
|
+
job: app.job,
|
|
366
|
+
service: app.service,
|
|
367
|
+
nats: app.nats,
|
|
368
|
+
event: app.event,
|
|
369
|
+
repository: app.repository,
|
|
370
|
+
util: app.util,
|
|
371
|
+
lib: app.lib,
|
|
372
|
+
grpc: app.grpc,
|
|
373
|
+
...obj
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
))
|
|
377
|
+
const name = Job.name || params.path + '.' + params.file.split('.')[0]
|
|
378
|
+
libCore.bull.addJob({ name }, Job.config)
|
|
379
|
+
libCore.bull.worker({
|
|
380
|
+
name: Job.name,
|
|
381
|
+
fn: execute,
|
|
382
|
+
async completed(job_) {
|
|
383
|
+
await methodCore[job_.method || 'redis'].pub({
|
|
384
|
+
topic: 'worker::completed:' + name
|
|
385
|
+
}, { name: job_.name, id: job_.id, input: job_.data, output: job_.returnvalue })
|
|
386
|
+
},
|
|
387
|
+
async failed(job_, err) {
|
|
388
|
+
await methodCore[job_.method || 'redis'].pub({
|
|
389
|
+
topic: 'worker::failed:' + name
|
|
390
|
+
}, { name: job_.name, id: job_.id, input: job_.data, err: err.message })
|
|
391
|
+
}
|
|
392
|
+
})
|
|
393
|
+
},
|
|
394
|
+
async endPoint(path_, params, obj = {}) {
|
|
395
|
+
const route = (await fileCore.import(path_, {
|
|
396
|
+
seneca: app.seneca,
|
|
397
|
+
// command: app.command,
|
|
398
|
+
job: app.job,
|
|
399
|
+
service: app.service,
|
|
400
|
+
nats: app.nats,
|
|
401
|
+
event: app.event,
|
|
402
|
+
repository: app.repository,
|
|
403
|
+
util: app.util,
|
|
404
|
+
lib: app.lib,
|
|
405
|
+
grpc: app.grpc,
|
|
406
|
+
...obj
|
|
407
|
+
}))
|
|
408
|
+
|
|
409
|
+
if (Array.isArray(route)) {
|
|
410
|
+
return route
|
|
411
|
+
}
|
|
412
|
+
return [route]
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
|
|
416
|
+
},
|
|
417
|
+
app
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
const createDriver = createCoreDriver({ core })
|
|
421
|
+
const createServer = createCoreServer({ core })
|
|
422
|
+
return {
|
|
423
|
+
core,
|
|
424
|
+
createWorker: createCoreWorker({ core }),
|
|
425
|
+
createRepository: createCoreRepository({ core }),
|
|
426
|
+
createService: createCoreService({ core }),
|
|
427
|
+
createUtil: createCoreUtil({ core }),
|
|
428
|
+
createEntity: createCoreEntity({ core }),
|
|
429
|
+
createLib: createCoreLib({ core }),
|
|
430
|
+
createEvent: createCoreEvent({ core }),
|
|
431
|
+
async createServer(server) {
|
|
432
|
+
if (!createServer[server.type]) return
|
|
433
|
+
await createServer[server.type]({ server, ws: ioCore })
|
|
434
|
+
},
|
|
435
|
+
async createDriver(driver) {
|
|
436
|
+
if (!createDriver[driver.type]) return
|
|
437
|
+
await createDriver[driver.type](driver)
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
|
|
2
|
+
export default ({ core }) => {
|
|
3
|
+
return async ({ path = '/src/core/libs' }, 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.lib(path + '/' + path_file, {
|
|
8
|
+
file: path_file
|
|
9
|
+
}, obj)
|
|
10
|
+
})
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
|
|
2
|
+
export default ({ core }) => {
|
|
3
|
+
return async ({ path = '/src/infra/repositories', db = '/src/infra/db/index.js' }, obj = {}) => {
|
|
4
|
+
const paths = core.fileCore.paths(path)
|
|
5
|
+
|
|
6
|
+
obj.dbTest = process.env.DB_TEST == "True"
|
|
7
|
+
if (obj.dbTest == true) {
|
|
8
|
+
if (typeof obj.getDb == 'function') {
|
|
9
|
+
obj.db = obj.getDb()
|
|
10
|
+
}
|
|
11
|
+
} else {
|
|
12
|
+
try {
|
|
13
|
+
if (!obj.dbTest && !obj.getDb) {
|
|
14
|
+
obj.db = (await core.fileCore.import(db, {}))
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
} catch (error) {
|
|
18
|
+
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
await core.repositories(paths, path, obj)
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import path from "node:path"
|
|
2
|
+
export default ({ core }) => {
|
|
3
|
+
|
|
4
|
+
const servicesGet = (services_, server) => {
|
|
5
|
+
const services = []
|
|
6
|
+
services_.forEach((service_ = '') => {
|
|
7
|
+
const [s, m] = (service_.name || service_).split('.')
|
|
8
|
+
if (m == '*') {
|
|
9
|
+
core.listServices(s).forEach(_ => {
|
|
10
|
+
services.push({
|
|
11
|
+
name: (server?.name ? server?.name + ":" : '') + s + '.' + _,
|
|
12
|
+
auth: service_.auth || null,
|
|
13
|
+
exec: s + '.' + _
|
|
14
|
+
})
|
|
15
|
+
})
|
|
16
|
+
return
|
|
17
|
+
}
|
|
18
|
+
services.push({
|
|
19
|
+
name: (server?.name ? server?.name + ":" : '') + s + '.' + m,
|
|
20
|
+
auth: service_.auth || null,
|
|
21
|
+
exec: s + '.' + m
|
|
22
|
+
})
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
return services
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
async "http"({ server, ws }) {
|
|
29
|
+
const endPoints = []
|
|
30
|
+
const rootFile = server.file || server.rootPath || '/src/infra/web/http.js'
|
|
31
|
+
const rootPath = path.dirname(rootFile)
|
|
32
|
+
|
|
33
|
+
const createCoreRouter = async ({ path = rootPath + '/routers' }, obj) => {
|
|
34
|
+
const paths = core.fileCore.paths(path)
|
|
35
|
+
await core.forawait.generate(paths, async (path_file = '') => {
|
|
36
|
+
if (!(path_file.includes('.js') || path_file.includes('.ts'))) return
|
|
37
|
+
const route = await core.import.endPoint(path + '/' + path_file, {}, obj)
|
|
38
|
+
endPoints.push(...route)
|
|
39
|
+
})
|
|
40
|
+
return endPoints
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const createCoreSocket = async ({ path = rootPath + '/ws' }, obj) => {
|
|
44
|
+
const paths = core.fileCore.paths(path)
|
|
45
|
+
const sockets = {}
|
|
46
|
+
await core.forawait.generate(paths, async (path_file = '') => {
|
|
47
|
+
|
|
48
|
+
if (!(path_file.includes('.js') || path_file.includes('.ts'))) return
|
|
49
|
+
|
|
50
|
+
sockets[path_file.split('.')[0]] = (await core.fileCore.import(path + '/' + path_file, {
|
|
51
|
+
seneca: core.app.seneca,
|
|
52
|
+
|
|
53
|
+
events: (ws?.server || []).filter((io) => {
|
|
54
|
+
return io.event.route == path_file.split('.')[0]
|
|
55
|
+
}),
|
|
56
|
+
service: core.app.service,
|
|
57
|
+
nats: core.app.nats,
|
|
58
|
+
grpc: core.app.grpc,
|
|
59
|
+
job: core.app.job,
|
|
60
|
+
event: core.app.event,
|
|
61
|
+
util: core.app.util,
|
|
62
|
+
lib: core.app.lib,
|
|
63
|
+
...obj
|
|
64
|
+
}))
|
|
65
|
+
})
|
|
66
|
+
return Object.values(sockets)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const routers = await createCoreRouter({}, {})
|
|
70
|
+
const wsServer = await createCoreSocket({}, {})
|
|
71
|
+
try {
|
|
72
|
+
|
|
73
|
+
const serve = (await core.fileCore.import(rootFile, {
|
|
74
|
+
util: app.util,
|
|
75
|
+
lib: app.lib,
|
|
76
|
+
routers,
|
|
77
|
+
ws: wsServer
|
|
78
|
+
}))
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
await serve.start()
|
|
83
|
+
|
|
84
|
+
core.addLib(() => serve.io, 'ws')
|
|
85
|
+
core.addLib({
|
|
86
|
+
stop: async () => await serve.stop(),
|
|
87
|
+
start: async () => await serve.start(),
|
|
88
|
+
}, 'http')
|
|
89
|
+
|
|
90
|
+
} catch (error) {
|
|
91
|
+
console.error(error.message)
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
},
|
|
97
|
+
async "nats"({ server }) {
|
|
98
|
+
|
|
99
|
+
const services = servicesGet(server.services, server)
|
|
100
|
+
await core.forawait.generate(services, async (service) => {
|
|
101
|
+
core.app.driver(server.driver).service((server?.prefix || "") + service.name, core.app.service(service.exec).execute, async (headers) => {
|
|
102
|
+
if (!service.auth) return true
|
|
103
|
+
try {
|
|
104
|
+
const [m, exec] = service.auth.split(":")
|
|
105
|
+
const [name, c] = exec.split(".")
|
|
106
|
+
return (await core.app[m](name)[c](headers)) || false
|
|
107
|
+
} catch (error) {
|
|
108
|
+
return false
|
|
109
|
+
}
|
|
110
|
+
})
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
},
|
|
117
|
+
|
|
118
|
+
async "fogu"({ server }) {
|
|
119
|
+
const fogu = core.app.driver(server.driver)
|
|
120
|
+
await core.forawait.generate(server.channels, async (channelObj) => {
|
|
121
|
+
const channel = fogu.channel(channelObj.name);
|
|
122
|
+
const services = servicesGet(channelObj.services||[], server)
|
|
123
|
+
await core.forawait.generate(services, async (service) => {
|
|
124
|
+
await channel.action((server?.prefix || "") + service.name, async (message, reply) => {
|
|
125
|
+
let input = message
|
|
126
|
+
try {
|
|
127
|
+
input = JSON.parse(input)
|
|
128
|
+
} catch (error) {
|
|
129
|
+
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
let res = await core.app.service(service.exec).execute(input)
|
|
133
|
+
try {
|
|
134
|
+
res = JSON.stringify(input)
|
|
135
|
+
} catch (error) {
|
|
136
|
+
}
|
|
137
|
+
const response = Buffer.from(res);
|
|
138
|
+
reply(null, response)
|
|
139
|
+
} catch (error) {
|
|
140
|
+
reply(error.message || 'error', Buffer.from(""))
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
})
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
|
|
2
|
+
export default ({ core }) => {
|
|
3
|
+
return async ({ path = '/src/app/services' }, obj = {}) => {
|
|
4
|
+
const paths = core.fileCore.paths(path)
|
|
5
|
+
await core.forawait.generate(paths, async (path_,) => {
|
|
6
|
+
const path_files = core.fileCore.paths(path + '/' + path_)
|
|
7
|
+
await core.forawait.generate(path_files, async (path_file = '') => {
|
|
8
|
+
if (!(path_file.includes('.js') || path_file.includes('.ts'))) return
|
|
9
|
+
await core.import.service(path + '/' + path_ + '/' + path_file, {
|
|
10
|
+
path: path_,
|
|
11
|
+
file: path_file
|
|
12
|
+
}, obj)
|
|
13
|
+
|
|
14
|
+
})
|
|
15
|
+
})
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
|
|
2
|
+
export default ({ core }) => {
|
|
3
|
+
return async ({ path = '/src/core/utils' }, 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.util(path + '/' + path_file, {
|
|
8
|
+
file: path_file
|
|
9
|
+
}, obj)
|
|
10
|
+
})
|
|
11
|
+
}
|
|
12
|
+
}
|