@paralect/hive 0.1.19 → 0.1.21
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/package.json +2 -1
- package/starter/src/db.js +6 -8
- package/starter/src/helpers/getResources.js +1 -2
- package/starter/src/helpers/getSchemas.js +35 -12
- package/starter/src/helpers/importHandlers.js +29 -0
- package/starter/src/resources/users/handlers/test.js +1 -0
- package/starter/src/routes/index.js +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@paralect/hive",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.21",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"@koa/cors": "3.1.0",
|
|
14
14
|
"@koa/multer": "3.0.0",
|
|
15
15
|
"@koa/router": "10.1.1",
|
|
16
|
+
"@paralect/hive": "^0.1.19",
|
|
16
17
|
"@paralect/node-mongo": "2.1.1",
|
|
17
18
|
"@react-email/components": "^0.0.20",
|
|
18
19
|
"@react-email/render": "^0.0.16",
|
package/starter/src/db.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import _ from "lodash";
|
|
3
|
-
import requireDir from "require-dir";
|
|
4
3
|
import getSchemas from "helpers/getSchemas";
|
|
5
4
|
import getResources from "helpers/getResources";
|
|
5
|
+
import importHandlers from "helpers/importHandlers";
|
|
6
6
|
import config from "app-config";
|
|
7
7
|
import { connect } from "lib/node-mongo";
|
|
8
8
|
|
|
@@ -28,7 +28,7 @@ db.init = async () => {
|
|
|
28
28
|
}
|
|
29
29
|
db.schemas[schemaName] = schema;
|
|
30
30
|
db.services[schemaName] = db.createService(`${resourceName}`, {
|
|
31
|
-
validate: (obj) => {
|
|
31
|
+
validate: (obj) => {
|
|
32
32
|
return { value: schema.passthrough().parse(obj) };
|
|
33
33
|
},
|
|
34
34
|
});
|
|
@@ -37,15 +37,13 @@ db.init = async () => {
|
|
|
37
37
|
));
|
|
38
38
|
|
|
39
39
|
const resourcePaths = await getResources();
|
|
40
|
-
|
|
40
|
+
|
|
41
41
|
setTimeout(() => {
|
|
42
|
-
_.each(resourcePaths, ({
|
|
43
|
-
|
|
44
|
-
requireDir(`${dir}/handlers`);
|
|
45
|
-
}
|
|
42
|
+
_.each(resourcePaths, ({ name }) => {
|
|
43
|
+
importHandlers(name)
|
|
46
44
|
});
|
|
47
45
|
}, 0);
|
|
48
|
-
|
|
46
|
+
|
|
49
47
|
(await import("autoMap/addHandlers")).default();
|
|
50
48
|
(await import("autoMap/mapSchema")).default();
|
|
51
49
|
};
|
|
@@ -26,8 +26,7 @@ export default async () => {
|
|
|
26
26
|
|
|
27
27
|
return resourceDirs
|
|
28
28
|
.filter(({ dirName }) => dirName !== "health")
|
|
29
|
-
.map(({ dirName
|
|
30
|
-
dir: isHive ? path.resolve(`${process.env.HIVE_SRC}/resources/${dirName}`) : path.resolve(`${__dirname}/../resources/${dirName}`),
|
|
29
|
+
.map(({ dirName }) => ({
|
|
31
30
|
name: dirName,
|
|
32
31
|
}));
|
|
33
32
|
};
|
|
@@ -1,27 +1,50 @@
|
|
|
1
|
-
import
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import fs, { promises } from "fs";
|
|
2
3
|
import getResources from "./getResources.js";
|
|
3
4
|
|
|
4
5
|
const {
|
|
5
6
|
promises: { readdir },
|
|
6
7
|
} = { promises };
|
|
7
8
|
|
|
9
|
+
|
|
10
|
+
const getSchemas = async (resourceDir) => {
|
|
11
|
+
return (await readdir(resourceDir))
|
|
12
|
+
.filter((f) => f.includes("schema.js"))
|
|
13
|
+
.filter((f) => !f.includes("extends.schema"))
|
|
14
|
+
.map((f) => ({
|
|
15
|
+
name: f.replace(".schema.js", ""),
|
|
16
|
+
file: `${resourceDir}/${f}`,
|
|
17
|
+
resourceName: _.last(resourceDir.split('/')),
|
|
18
|
+
isHive: process.env.HIVE_SRC && resourceDir.includes(process.env.HIVE_SRC),
|
|
19
|
+
}));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const getResourceSchemas = async (resourceName) => {
|
|
23
|
+
let schemaFiles = [];
|
|
24
|
+
|
|
25
|
+
if (fs.existsSync(`${process.env.HIVE_SRC}/resources/${resourceName}`)) {
|
|
26
|
+
schemaFiles = (await getSchemas(`${process.env.HIVE_SRC}/resources/${resourceName}`));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (fs.existsSync(`${__dirname}/../resources/${resourceName}`)) {
|
|
30
|
+
schemaFiles = [...schemaFiles, ...(await getSchemas(`${__dirname}/../resources/${resourceName}`)).filter(schema => !schemaFiles.find(s => s.name === schema.name))];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return schemaFiles;
|
|
34
|
+
};
|
|
35
|
+
|
|
8
36
|
export default async () => {
|
|
9
37
|
const resources = await getResources();
|
|
10
|
-
|
|
38
|
+
let schemas = [];
|
|
11
39
|
|
|
12
40
|
await Promise.all(
|
|
13
|
-
resources.map(async ({
|
|
14
|
-
const resourceSchemas =
|
|
15
|
-
.filter((f) => f.includes("schema.js"))
|
|
16
|
-
.filter((f) => !f.includes("extends.schema"))
|
|
17
|
-
.map((f) => ({
|
|
18
|
-
file: `${resourceDir}/${f}`,
|
|
19
|
-
resourceName,
|
|
20
|
-
name: f.replace(".schema.js", ""),
|
|
21
|
-
}));
|
|
41
|
+
resources.map(async ({ name: resourceName }) => {
|
|
42
|
+
const resourceSchemas = await getResourceSchemas(resourceName);
|
|
22
43
|
schemas.push(...resourceSchemas);
|
|
23
44
|
})
|
|
24
45
|
);
|
|
25
|
-
|
|
46
|
+
|
|
47
|
+
console.log('schemas', schemas);
|
|
48
|
+
|
|
26
49
|
return schemas;
|
|
27
50
|
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import _ from 'lodash';
|
|
3
|
+
import requireDir from "require-dir";
|
|
4
|
+
|
|
5
|
+
export default (resourceName) => {
|
|
6
|
+
if (fs.existsSync(`${process.env.HIVE_SRC}/resources/${resourceName}/handlers`)) {
|
|
7
|
+
requireDir(`${process.env.HIVE_SRC}/resources/${resourceName}/handlers`, {
|
|
8
|
+
mapValue: (handler, handlerName) => {
|
|
9
|
+
console.log(
|
|
10
|
+
`[handlers] Registering handler ${handlerName}`
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
return handler;
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (fs.existsSync(`${__dirname}/../resources/${resourceName}/handlers`)) {
|
|
19
|
+
requireDir(`${__dirname}/../resources/${resourceName}/handlers`, {
|
|
20
|
+
mapValue: (handler, handlerName) => {
|
|
21
|
+
console.log(
|
|
22
|
+
`[handlers] Registering handler ${handlerName}`
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
return handler;
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
console.log('hello from handler');
|
|
@@ -96,6 +96,7 @@ export default async (app) => {
|
|
|
96
96
|
|
|
97
97
|
endpoints.forEach(({ endpoint, requestSchema, middlewares = [], handler }) => {
|
|
98
98
|
let targetRouter;
|
|
99
|
+
console.log('[routes] Register endpoint', resourceName, endpoint?.method || 'GET', endpoint?.url);
|
|
99
100
|
|
|
100
101
|
let url = endpoint.absoluteUrl || endpoint.url;
|
|
101
102
|
|