@bejibun/core 0.1.29 → 0.1.30
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/CHANGELOG.md +41 -0
- package/bun.lock +222 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.ts +1 -0
- package/package.json +2 -35
- package/src/bases/BaseController.ts +139 -0
- package/src/bases/BaseModel.ts +107 -0
- package/src/bases/BaseValidator.ts +8 -0
- package/src/bootstrap.ts +13 -0
- package/src/builders/ChalkBuilder.ts +60 -0
- package/src/builders/EnumBuilder.ts +32 -0
- package/src/builders/ResponseBuilder.ts +54 -0
- package/src/builders/RouterBuilder.ts +173 -0
- package/src/builders/StrBuilder.ts +25 -0
- package/src/config/cors.ts +10 -0
- package/src/config/database.ts +27 -0
- package/src/enums/CorsHeaderEnum.ts +9 -0
- package/src/enums/HttpMethodEnum.ts +13 -0
- package/src/exceptions/ModelNotFoundException.ts +15 -0
- package/src/exceptions/RouterInvalidException.ts +15 -0
- package/src/exceptions/ValidatorException.ts +15 -0
- package/src/facades/Chalk.ts +7 -0
- package/src/facades/Enum.ts +10 -0
- package/src/facades/Response.ts +15 -0
- package/src/facades/Router.ts +89 -0
- package/src/facades/SoftDeletes.ts +66 -0
- package/src/facades/Str.ts +7 -0
- package/src/index.ts +11 -0
- package/src/types/index.d.ts +2 -0
- package/src/utils/utils.ts +72 -0
- package/src/utils/vine.ts +2 -0
- package/src/utils/vines/exists.ts +41 -0
- package/src/utils/vines/unique.ts +41 -0
- package/tsconfig.json +17 -0
- package/dist/types/index.d.ts +0 -4
- /package/{dist → src}/bases/BaseController.d.ts +0 -0
- /package/{dist → src}/bases/BaseController.js +0 -0
- /package/{dist → src}/bases/BaseModel.d.ts +0 -0
- /package/{dist → src}/bases/BaseModel.js +0 -0
- /package/{dist → src}/bases/BaseValidator.d.ts +0 -0
- /package/{dist → src}/bases/BaseValidator.js +0 -0
- /package/{dist → src}/bootstrap.d.ts +0 -0
- /package/{dist → src}/bootstrap.js +0 -0
- /package/{dist → src}/builders/ChalkBuilder.d.ts +0 -0
- /package/{dist → src}/builders/ChalkBuilder.js +0 -0
- /package/{dist → src}/builders/EnumBuilder.d.ts +0 -0
- /package/{dist → src}/builders/EnumBuilder.js +0 -0
- /package/{dist → src}/builders/ResponseBuilder.d.ts +0 -0
- /package/{dist → src}/builders/ResponseBuilder.js +0 -0
- /package/{dist → src}/builders/RouterBuilder.d.ts +0 -0
- /package/{dist → src}/builders/RouterBuilder.js +0 -0
- /package/{dist → src}/builders/StrBuilder.d.ts +0 -0
- /package/{dist → src}/builders/StrBuilder.js +0 -0
- /package/{dist → src}/config/cors.d.ts +0 -0
- /package/{dist → src}/config/cors.js +0 -0
- /package/{dist → src}/config/database.d.ts +0 -0
- /package/{dist → src}/config/database.js +0 -0
- /package/{dist → src}/enums/CorsHeaderEnum.d.ts +0 -0
- /package/{dist → src}/enums/CorsHeaderEnum.js +0 -0
- /package/{dist → src}/enums/HttpMethodEnum.d.ts +0 -0
- /package/{dist → src}/enums/HttpMethodEnum.js +0 -0
- /package/{dist → src}/exceptions/ModelNotFoundException.d.ts +0 -0
- /package/{dist → src}/exceptions/ModelNotFoundException.js +0 -0
- /package/{dist → src}/exceptions/RouterInvalidException.d.ts +0 -0
- /package/{dist → src}/exceptions/RouterInvalidException.js +0 -0
- /package/{dist → src}/exceptions/ValidatorException.d.ts +0 -0
- /package/{dist → src}/exceptions/ValidatorException.js +0 -0
- /package/{dist → src}/facades/Chalk.d.ts +0 -0
- /package/{dist → src}/facades/Chalk.js +0 -0
- /package/{dist → src}/facades/Enum.d.ts +0 -0
- /package/{dist → src}/facades/Enum.js +0 -0
- /package/{dist → src}/facades/Response.d.ts +0 -0
- /package/{dist → src}/facades/Response.js +0 -0
- /package/{dist → src}/facades/Router.d.ts +0 -0
- /package/{dist → src}/facades/Router.js +0 -0
- /package/{dist → src}/facades/SoftDeletes.d.ts +0 -0
- /package/{dist → src}/facades/SoftDeletes.js +0 -0
- /package/{dist → src}/facades/Str.d.ts +0 -0
- /package/{dist → src}/facades/Str.js +0 -0
- /package/{dist → src}/index.d.ts +0 -0
- /package/{dist → src}/index.js +0 -0
- /package/{dist → src}/types/middleware.d.ts +0 -0
- /package/{dist → src}/types/router.d.ts +0 -0
- /package/{dist → src}/types/validator.d.ts +0 -0
- /package/{dist → src}/types/vine.d.ts +0 -0
- /package/{dist → src}/utils/utils.d.ts +0 -0
- /package/{dist → src}/utils/utils.js +0 -0
- /package/{dist → src}/utils/vine.d.ts +0 -0
- /package/{dist → src}/utils/vine.js +0 -0
- /package/{dist → src}/utils/vines/exists.d.ts +0 -0
- /package/{dist → src}/utils/vines/exists.js +0 -0
- /package/{dist → src}/utils/vines/unique.d.ts +0 -0
- /package/{dist → src}/utils/vines/unique.js +0 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type {EnumItem} from "@/facades/Enum";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import readline from "readline";
|
|
5
|
+
import CorsHeaderEnum from "@/enums/CorsHeaderEnum";
|
|
6
|
+
import HttpMethodEnum from "@/enums/HttpMethodEnum";
|
|
7
|
+
import Enum from "@/facades/Enum";
|
|
8
|
+
|
|
9
|
+
export const isEmpty = (value: any): boolean => {
|
|
10
|
+
return (
|
|
11
|
+
value === undefined ||
|
|
12
|
+
value === null ||
|
|
13
|
+
value === false ||
|
|
14
|
+
value === 0 ||
|
|
15
|
+
value === 0n ||
|
|
16
|
+
(typeof value === "string" && value.trim() === "") ||
|
|
17
|
+
(Array.isArray(value) && value.length === 0) ||
|
|
18
|
+
(typeof value === "object" && !Array.isArray(value) && Object.keys(value).length === 0)
|
|
19
|
+
);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const isNotEmpty = (value: any): boolean => {
|
|
23
|
+
return !isEmpty(value);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export const defineValue = (value: any, defaultValue: any = null): any => {
|
|
27
|
+
if (isNotEmpty(value)) return value;
|
|
28
|
+
|
|
29
|
+
return defaultValue;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export const ask = (question: string): Promise<string> => {
|
|
33
|
+
const rl = readline.createInterface({
|
|
34
|
+
input: process.stdin,
|
|
35
|
+
output: process.stdout
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
return new Promise(resolve => {
|
|
39
|
+
return rl.question(question, (answer: string) => {
|
|
40
|
+
rl.close();
|
|
41
|
+
|
|
42
|
+
resolve(answer.trim());
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export const cors = (): Record<string, string> => {
|
|
48
|
+
const configPath = path.resolve(process.cwd(), "config/cors.ts");
|
|
49
|
+
|
|
50
|
+
let corsConfig: any;
|
|
51
|
+
|
|
52
|
+
if (fs.existsSync(configPath)) corsConfig = require(configPath).default;
|
|
53
|
+
else corsConfig = require("@/config/cors").default;
|
|
54
|
+
|
|
55
|
+
const headers: Record<string, string> = {
|
|
56
|
+
"Access-Control-Allow-Origin": corsConfig.origin,
|
|
57
|
+
"Access-Control-Allow-Headers": Array.isArray(corsConfig.allowedHeaders)
|
|
58
|
+
? corsConfig.allowedHeaders.join(", ")
|
|
59
|
+
: Enum.setEnums(CorsHeaderEnum).toArray().map((value: EnumItem) => value.value).join(", "),
|
|
60
|
+
"Access-Control-Allow-Methods": Array.isArray(corsConfig.methods)
|
|
61
|
+
? corsConfig.methods.join(", ")
|
|
62
|
+
: Enum.setEnums(HttpMethodEnum).toArray().map((value: EnumItem) => value.value).join(", ")
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
if (corsConfig.exposedHeaders.length > 0) headers["Access-Control-Expose-Headers"] = corsConfig.exposedHeaders.join(", ");
|
|
66
|
+
|
|
67
|
+
if (corsConfig.credentials) headers["Access-Control-Allow-Credentials"] = "true";
|
|
68
|
+
|
|
69
|
+
if (corsConfig.maxAge) headers["Access-Control-Max-Age"] = corsConfig.maxAge.toString();
|
|
70
|
+
|
|
71
|
+
return headers;
|
|
72
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import vine, {VineNumber, VineString} from "@vinejs/vine";
|
|
2
|
+
import {QueryBuilderType} from "objection";
|
|
3
|
+
import BaseModel from "@/bases/BaseModel";
|
|
4
|
+
import {defineValue, isEmpty} from "@/utils/utils";
|
|
5
|
+
|
|
6
|
+
type Options = {
|
|
7
|
+
table: typeof BaseModel;
|
|
8
|
+
column?: string;
|
|
9
|
+
withTrashed?: boolean;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const exists = async (value: unknown, options: Options, field: any): Promise<void> => {
|
|
13
|
+
if (!field.isValid) return;
|
|
14
|
+
|
|
15
|
+
const column = defineValue(options.column, field.name);
|
|
16
|
+
|
|
17
|
+
let query: any = options.table;
|
|
18
|
+
if (options.withTrashed) query = query.withTrashed();
|
|
19
|
+
else query = query.query();
|
|
20
|
+
|
|
21
|
+
const row = await (query as QueryBuilderType<any>).where(column, value).first();
|
|
22
|
+
|
|
23
|
+
if (isEmpty(row)) field.report("The {{ field }} field doesn't exists", "exists", field);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const existsRule = vine.createRule(exists, {isAsync: true});
|
|
27
|
+
|
|
28
|
+
const registerExistsMacro = (Type: any): void => {
|
|
29
|
+
Type.macro("exists", function (this: typeof Type, tableOrOptions: typeof BaseModel | Options, column?: string, withTrashed?: boolean) {
|
|
30
|
+
const isModel = typeof tableOrOptions === "function" && Object.prototype.isPrototypeOf.call(BaseModel, tableOrOptions);
|
|
31
|
+
|
|
32
|
+
const options: Options = isModel
|
|
33
|
+
? {table: tableOrOptions as typeof BaseModel, column, withTrashed}
|
|
34
|
+
: tableOrOptions as Options;
|
|
35
|
+
|
|
36
|
+
return this.use(existsRule(options));
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
registerExistsMacro(VineString);
|
|
41
|
+
registerExistsMacro(VineNumber);
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import vine, {VineNumber, VineString} from "@vinejs/vine";
|
|
2
|
+
import {QueryBuilderType} from "objection";
|
|
3
|
+
import BaseModel from "@/bases/BaseModel";
|
|
4
|
+
import {defineValue, isNotEmpty} from "@/utils/utils";
|
|
5
|
+
|
|
6
|
+
type Options = {
|
|
7
|
+
table: typeof BaseModel;
|
|
8
|
+
column?: string;
|
|
9
|
+
withTrashed?: boolean;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const unique = async (value: unknown, options: Options, field: any): Promise<void> => {
|
|
13
|
+
if (!field.isValid) return;
|
|
14
|
+
|
|
15
|
+
const column = defineValue(options.column, field.name);
|
|
16
|
+
|
|
17
|
+
let query: any = options.table;
|
|
18
|
+
if (options.withTrashed) query = query.withTrashed();
|
|
19
|
+
else query = query.query();
|
|
20
|
+
|
|
21
|
+
const row = await (query as QueryBuilderType<any>).where(column, value).first();
|
|
22
|
+
|
|
23
|
+
if (isNotEmpty(row)) field.report("The {{ field }} field is already exists", "unique", field);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const uniqueRule = vine.createRule(unique, {isAsync: true});
|
|
27
|
+
|
|
28
|
+
const registerUniqueMacro = (Type: any): void => {
|
|
29
|
+
Type.macro("unique", function (this: typeof Type, tableOrOptions: typeof BaseModel | Options, column?: string, withTrashed?: boolean) {
|
|
30
|
+
const isModel = typeof tableOrOptions === "function" && Object.prototype.isPrototypeOf.call(BaseModel, tableOrOptions);
|
|
31
|
+
|
|
32
|
+
const options: Options = isModel
|
|
33
|
+
? {table: tableOrOptions as typeof BaseModel, column, withTrashed}
|
|
34
|
+
: tableOrOptions as Options;
|
|
35
|
+
|
|
36
|
+
return this.use(uniqueRule(options));
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
registerUniqueMacro(VineString);
|
|
41
|
+
registerUniqueMacro(VineNumber);
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ESNext",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"moduleResolution": "bundler",
|
|
6
|
+
"declaration": true,
|
|
7
|
+
"outDir": ".",
|
|
8
|
+
"esModuleInterop": true,
|
|
9
|
+
"strict": true,
|
|
10
|
+
"skipLibCheck": true,
|
|
11
|
+
"baseUrl": ".",
|
|
12
|
+
"paths": {
|
|
13
|
+
"@/*": ["src/*"]
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"exclude": ["node_modules"]
|
|
17
|
+
}
|
package/dist/types/index.d.ts
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/{dist → src}/index.d.ts
RENAMED
|
File without changes
|
/package/{dist → src}/index.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|