@skalfa/skalfa-api-core 1.0.22 → 1.0.24
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/dist/commands/cli.d.ts +1 -0
- package/dist/commands/cli.js +22 -1
- package/dist/commands/cli.js.map +1 -1
- package/dist/validation/validation.js +40 -19
- package/dist/validation/validation.js.map +1 -1
- package/package.json +11 -4
- package/src/commands/cli.ts +22 -1
- package/src/validation/validation.ts +41 -20
- package/tsconfig.build.json +13 -0
package/dist/commands/cli.d.ts
CHANGED
package/dist/commands/cli.js
CHANGED
|
@@ -2,6 +2,7 @@ import fs from "fs";
|
|
|
2
2
|
import path from "path";
|
|
3
3
|
import { Command } from "commander";
|
|
4
4
|
import { spawn } from "child_process";
|
|
5
|
+
import { runBuild as runBuildLang, startDev as startDevLang } from "@skalfa/skalfa-lang/compiler";
|
|
5
6
|
import { makeControllerCommand } from "./make/basic-controller";
|
|
6
7
|
import { makeSkalfaControllerCommand } from "./make/skalfa-controller";
|
|
7
8
|
import { barrelsCommand, watchBarrelsCommand } from "./runner/barrels";
|
|
@@ -70,6 +71,7 @@ export function runCli() {
|
|
|
70
71
|
program.addCommand(startCommand);
|
|
71
72
|
program.addCommand(testCommand);
|
|
72
73
|
program.addCommand(lintCommand);
|
|
74
|
+
program.addCommand(langCommand);
|
|
73
75
|
program.parse(process.argv);
|
|
74
76
|
}
|
|
75
77
|
function getPackageManager() {
|
|
@@ -88,11 +90,30 @@ function executeCommand(commandLine) {
|
|
|
88
90
|
process.exit(code || 0);
|
|
89
91
|
});
|
|
90
92
|
}
|
|
93
|
+
export const langCommand = new Command("lang")
|
|
94
|
+
.description("Manage and compile type-safe translation resources for @skalfa/lang.")
|
|
95
|
+
.argument("<action>", "action to perform: build, dev")
|
|
96
|
+
.option("-q, --quiet", "Run in quiet mode (suppress verbose logs)")
|
|
97
|
+
.action(async (action, options) => {
|
|
98
|
+
if (action === "build") {
|
|
99
|
+
const success = await runBuildLang(process.cwd(), false, !!options.quiet);
|
|
100
|
+
if (!success)
|
|
101
|
+
process.exit(1);
|
|
102
|
+
process.exit(0);
|
|
103
|
+
}
|
|
104
|
+
else if (action === "dev") {
|
|
105
|
+
await startDevLang(process.cwd(), !!options.quiet);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
console.error(`Unknown action "${action}". Use "build" or "dev".`);
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
91
112
|
export const devCommand = new Command("dev")
|
|
92
113
|
.description("Start development server")
|
|
93
114
|
.action(() => {
|
|
94
115
|
const pm = getPackageManager();
|
|
95
|
-
executeCommand(`concurrently --raw "${pm} run watch" "${pm} run skalfa watch:barrels"`);
|
|
116
|
+
executeCommand(`concurrently --raw "${pm} run watch" "${pm} run skalfa watch:barrels" "${pm} run skalfa lang dev --quiet"`);
|
|
96
117
|
});
|
|
97
118
|
export const watchCommand = new Command("watch")
|
|
98
119
|
.description("Start app watcher")
|
package/dist/commands/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/commands/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/commands/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import validator from "validator";
|
|
2
2
|
import { db } from "@skalfa/skalfa-orm";
|
|
3
|
+
import { getLang } from "@skalfa/skalfa-lang";
|
|
3
4
|
// =====================================>
|
|
4
5
|
// ## Validation: validate request data
|
|
5
6
|
// =====================================>
|
|
@@ -21,13 +22,15 @@ export async function validate(data, rules) {
|
|
|
21
22
|
};
|
|
22
23
|
}
|
|
23
24
|
async function checkRules({ field, value, rules, data, errors }) {
|
|
25
|
+
const l = getLang();
|
|
24
26
|
for (const rule of rules) {
|
|
25
27
|
const [name, param] = rule.split(":");
|
|
26
28
|
switch (name) {
|
|
27
29
|
// === BASIC ===
|
|
28
30
|
case "required":
|
|
29
31
|
if (validator.isEmpty(String(value).trim())) {
|
|
30
|
-
|
|
32
|
+
const msg = l.validation?.required ? l.validation.required() : `${field} wajib diisi`;
|
|
33
|
+
addError(errors, field, msg);
|
|
31
34
|
}
|
|
32
35
|
break;
|
|
33
36
|
case "string":
|
|
@@ -35,7 +38,8 @@ async function checkRules({ field, value, rules, data, errors }) {
|
|
|
35
38
|
if (!value)
|
|
36
39
|
break;
|
|
37
40
|
if (typeof value !== "string") {
|
|
38
|
-
|
|
41
|
+
const msg = l.validation?.string ? l.validation.string() : `${field} harus berupa string`;
|
|
42
|
+
addError(errors, field, msg);
|
|
39
43
|
}
|
|
40
44
|
break;
|
|
41
45
|
case "numeric":
|
|
@@ -43,33 +47,38 @@ async function checkRules({ field, value, rules, data, errors }) {
|
|
|
43
47
|
if (!value)
|
|
44
48
|
break;
|
|
45
49
|
if (!validator.isNumeric(String(value))) {
|
|
46
|
-
|
|
50
|
+
const msg = l.validation?.numeric ? l.validation.numeric() : `${field} harus berupa angka`;
|
|
51
|
+
addError(errors, field, msg);
|
|
47
52
|
}
|
|
48
53
|
break;
|
|
49
54
|
case "boolean":
|
|
50
55
|
if (!(value === true || value === false || value === "true" || value === "false" || value === 1 || value === 0)) {
|
|
51
|
-
|
|
56
|
+
const msg = l.validation?.boolean ? l.validation.boolean() : `${field} harus berupa boolean`;
|
|
57
|
+
addError(errors, field, msg);
|
|
52
58
|
}
|
|
53
59
|
break;
|
|
54
60
|
case "email":
|
|
55
61
|
if (!value)
|
|
56
62
|
break;
|
|
57
63
|
if (!validator.isEmail(String(value))) {
|
|
58
|
-
|
|
64
|
+
const msg = l.validation?.email ? l.validation.email() : `${field} harus berupa email yang valid`;
|
|
65
|
+
addError(errors, field, msg);
|
|
59
66
|
}
|
|
60
67
|
break;
|
|
61
68
|
case "url":
|
|
62
69
|
if (!value)
|
|
63
70
|
break;
|
|
64
71
|
if (!validator.isURL(String(value))) {
|
|
65
|
-
|
|
72
|
+
const msg = l.validation?.url ? l.validation.url() : `${field} harus berupa URL yang valid`;
|
|
73
|
+
addError(errors, field, msg);
|
|
66
74
|
}
|
|
67
75
|
break;
|
|
68
76
|
case "date":
|
|
69
77
|
if (!value)
|
|
70
78
|
break;
|
|
71
79
|
if (!validator.isDate(String(value))) {
|
|
72
|
-
|
|
80
|
+
const msg = l.validation?.date ? l.validation.date() : `${field} harus berupa tanggal yang valid`;
|
|
81
|
+
addError(errors, field, msg);
|
|
73
82
|
}
|
|
74
83
|
break;
|
|
75
84
|
// === LENGTH ===
|
|
@@ -78,7 +87,8 @@ async function checkRules({ field, value, rules, data, errors }) {
|
|
|
78
87
|
break;
|
|
79
88
|
const min = parseInt(param);
|
|
80
89
|
if (!validator.isLength(String(value), { min })) {
|
|
81
|
-
|
|
90
|
+
const msg = l.validation?.min ? l.validation.min({ min }) : `${field} minimal ${min} karakter`;
|
|
91
|
+
addError(errors, field, msg);
|
|
82
92
|
}
|
|
83
93
|
break;
|
|
84
94
|
}
|
|
@@ -87,7 +97,8 @@ async function checkRules({ field, value, rules, data, errors }) {
|
|
|
87
97
|
break;
|
|
88
98
|
const max = parseInt(param);
|
|
89
99
|
if (!validator.isLength(String(value), { max })) {
|
|
90
|
-
|
|
100
|
+
const msg = l.validation?.max ? l.validation.max({ max }) : `${field} maksimal ${max} karakter`;
|
|
101
|
+
addError(errors, field, msg);
|
|
91
102
|
}
|
|
92
103
|
break;
|
|
93
104
|
}
|
|
@@ -96,7 +107,8 @@ async function checkRules({ field, value, rules, data, errors }) {
|
|
|
96
107
|
break;
|
|
97
108
|
const [minVal, maxVal] = param.split(",").map(Number);
|
|
98
109
|
if (!validator.isLength(String(value), { min: minVal, max: maxVal })) {
|
|
99
|
-
|
|
110
|
+
const msg = l.validation?.min_max ? l.validation.min_max({ min: minVal, max: maxVal }) : `${field} harus antara ${minVal} - ${maxVal} karakter`;
|
|
111
|
+
addError(errors, field, msg);
|
|
100
112
|
}
|
|
101
113
|
break;
|
|
102
114
|
}
|
|
@@ -106,7 +118,8 @@ async function checkRules({ field, value, rules, data, errors }) {
|
|
|
106
118
|
break;
|
|
107
119
|
const allowed = param.split(",");
|
|
108
120
|
if (!allowed.includes(String(value))) {
|
|
109
|
-
|
|
121
|
+
const msg = l.validation?.in ? l.validation.in({ keywords: allowed.join(", ") }) : `${field} harus salah satu dari: ${allowed.join(", ")}`;
|
|
122
|
+
addError(errors, field, msg);
|
|
110
123
|
}
|
|
111
124
|
break;
|
|
112
125
|
}
|
|
@@ -115,7 +128,8 @@ async function checkRules({ field, value, rules, data, errors }) {
|
|
|
115
128
|
break;
|
|
116
129
|
const notAllowed = param.split(",");
|
|
117
130
|
if (notAllowed.includes(String(value))) {
|
|
118
|
-
|
|
131
|
+
const msg = l.validation?.not_in ? l.validation.not_in({ keywords: notAllowed.join(", ") }) : `${field} tidak boleh salah satu dari: ${notAllowed.join(", ")}`;
|
|
132
|
+
addError(errors, field, msg);
|
|
119
133
|
}
|
|
120
134
|
break;
|
|
121
135
|
}
|
|
@@ -123,24 +137,28 @@ async function checkRules({ field, value, rules, data, errors }) {
|
|
|
123
137
|
if (!value)
|
|
124
138
|
break;
|
|
125
139
|
if (!Array.isArray(value)) {
|
|
126
|
-
|
|
140
|
+
const msg = l.validation?.array ? l.validation.array() : `${field} harus berupa array`;
|
|
141
|
+
addError(errors, field, msg);
|
|
127
142
|
}
|
|
128
143
|
break;
|
|
129
144
|
}
|
|
130
145
|
// === RELATIONAL ===
|
|
131
146
|
case "confirmed":
|
|
132
147
|
if (value !== getNestedValue(data, `${field}_confirmation`)) {
|
|
133
|
-
|
|
148
|
+
const msg = l.validation?.confirmed ? l.validation.confirmed() : `${field} tidak sama dengan konfirmasi`;
|
|
149
|
+
addError(errors, field, msg);
|
|
134
150
|
}
|
|
135
151
|
break;
|
|
136
152
|
case "same":
|
|
137
153
|
if (value !== getNestedValue(data, param)) {
|
|
138
|
-
|
|
154
|
+
const msg = l.validation?.same ? l.validation.same({ other: param }) : `${field} harus sama dengan ${param}`;
|
|
155
|
+
addError(errors, field, msg);
|
|
139
156
|
}
|
|
140
157
|
break;
|
|
141
158
|
case "different":
|
|
142
159
|
if (value === getNestedValue(data, param)) {
|
|
143
|
-
|
|
160
|
+
const msg = l.validation?.different ? l.validation.different({ other: param }) : `${field} harus berbeda dengan ${param}`;
|
|
161
|
+
addError(errors, field, msg);
|
|
144
162
|
}
|
|
145
163
|
break;
|
|
146
164
|
// === REGEX ===
|
|
@@ -150,7 +168,8 @@ async function checkRules({ field, value, rules, data, errors }) {
|
|
|
150
168
|
try {
|
|
151
169
|
const pattern = new RegExp(param);
|
|
152
170
|
if (!pattern.test(String(value))) {
|
|
153
|
-
|
|
171
|
+
const msg = l.validation?.regex ? l.validation.regex() : `${field} tidak sesuai format`;
|
|
172
|
+
addError(errors, field, msg);
|
|
154
173
|
}
|
|
155
174
|
}
|
|
156
175
|
catch {
|
|
@@ -170,7 +189,8 @@ async function checkRules({ field, value, rules, data, errors }) {
|
|
|
170
189
|
}
|
|
171
190
|
const existing = await query.first();
|
|
172
191
|
if (existing) {
|
|
173
|
-
|
|
192
|
+
const msg = l.validation?.unique ? l.validation.unique() : `${field} sudah digunakan`;
|
|
193
|
+
addError(errors, field, msg);
|
|
174
194
|
}
|
|
175
195
|
break;
|
|
176
196
|
}
|
|
@@ -184,7 +204,8 @@ async function checkRules({ field, value, rules, data, errors }) {
|
|
|
184
204
|
}
|
|
185
205
|
const existing = await query.first();
|
|
186
206
|
if (!existing) {
|
|
187
|
-
|
|
207
|
+
const msg = l.validation?.exists ? l.validation.exists({ table }) : `${field} tidak ditemukan di ${table}`;
|
|
208
|
+
addError(errors, field, msg);
|
|
188
209
|
}
|
|
189
210
|
break;
|
|
190
211
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/validation/validation.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAgDxC,yCAAyC;AACzC,uCAAuC;AACvC,yCAAyC;AACzC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAA6B,EAC7B,KAAyB;IAEzB,MAAM,MAAM,GAA6B,EAAE,CAAA;IAE3C,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;QAE/C,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAEjC,MAAM,gBAAgB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;YAEjG,SAAQ;QACV,CAAC;QAED,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;QAE/C,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;IACrE,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;QACvC,MAAM;KACP,CAAA;AACH,CAAC;AAGD,KAAK,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAwG;IACnK,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiC,CAAA;QAErE,QAAQ,IAAI,EAAE,CAAC;YACb,gBAAgB;YAChB,KAAK,UAAU;gBACb,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;oBAC5C,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,cAAc,CAAC,CAAA;gBACjD,CAAC;gBACD,MAAK;YAEP,KAAK,QAAQ,CAAC;YACd,KAAK,MAAM;gBACT,IAAI,CAAC,KAAK;oBAAE,MAAK;gBACjB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC9B,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,sBAAsB,CAAC,CAAA;gBACzD,CAAC;gBACD,MAAK;YAEP,KAAK,SAAS,CAAC;YACf,KAAK,QAAQ;gBACX,IAAI,CAAC,KAAK;oBAAE,MAAK;gBACjB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBACxC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,qBAAqB,CAAC,CAAA;gBACxD,CAAC;gBACD,MAAK;YAEP,KAAK,SAAS;gBACZ,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;oBAChH,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,uBAAuB,CAAC,CAAA;gBAC1D,CAAC;gBACD,MAAK;YAEP,KAAK,OAAO;gBACV,IAAI,CAAC,KAAK;oBAAE,MAAK;gBACjB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBACtC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,gCAAgC,CAAC,CAAA;gBACnE,CAAC;gBACD,MAAK;YAEP,KAAK,KAAK;gBACR,IAAI,CAAC,KAAK;oBAAE,MAAK;gBACjB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBACpC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,8BAA8B,CAAC,CAAA;gBACjE,CAAC;gBACD,MAAK;YAEP,KAAK,MAAM;gBACT,IAAI,CAAC,KAAK;oBAAE,MAAK;gBACjB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBACrC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,kCAAkC,CAAC,CAAA;gBACrE,CAAC;gBACD,MAAK;YAEP,iBAAiB;YACjB,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,IAAI,CAAC,KAAK;oBAAE,MAAK;gBACjB,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAM,CAAC,CAAA;gBAC5B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;oBAChD,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,YAAY,GAAG,WAAW,CAAC,CAAA;gBAC7D,CAAC;gBACD,MAAK;YACP,CAAC;YAED,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,IAAI,CAAC,KAAK;oBAAE,MAAK;gBACjB,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAM,CAAC,CAAA;gBAC5B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;oBAChD,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,aAAa,GAAG,WAAW,CAAC,CAAA;gBAC9D,CAAC;gBACD,MAAK;YACP,CAAC;YAED,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,IAAI,CAAC,KAAK;oBAAE,MAAK;gBACjB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;gBACtD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;oBACrE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,iBAAiB,MAAM,MAAM,MAAM,WAAW,CAAC,CAAA;gBACjF,CAAC;gBACD,MAAK;YACP,CAAC;YAED,yBAAyB;YACzB,KAAK,IAAI,CAAC,CAAC,CAAC;gBACV,IAAI,CAAC,KAAK;oBAAE,MAAK;gBACjB,MAAM,OAAO,GAAG,KAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACjC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBACrC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,2BAA2B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBAClF,CAAC;gBACD,MAAK;YACP,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,KAAK;oBAAE,MAAK;gBACjB,MAAM,UAAU,GAAG,KAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACpC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBACvC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,iCAAiC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBAC3F,CAAC;gBACD,MAAK;YACP,CAAC;YAED,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,IAAI,CAAC,KAAK;oBAAE,MAAK;gBACjB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1B,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,qBAAqB,CAAC,CAAA;gBACxD,CAAC;gBACD,MAAK;YACP,CAAC;YAED,qBAAqB;YACrB,KAAK,WAAW;gBACd,IAAI,KAAK,KAAK,cAAc,CAAC,IAAI,EAAE,GAAG,KAAK,eAAe,CAAC,EAAE,CAAC;oBAC5D,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,+BAA+B,CAAC,CAAA;gBAClE,CAAC;gBACD,MAAK;YAEP,KAAK,MAAM;gBACT,IAAI,KAAK,KAAK,cAAc,CAAC,IAAI,EAAE,KAAM,CAAC,EAAE,CAAC;oBAC3C,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,sBAAsB,KAAK,EAAE,CAAC,CAAA;gBAChE,CAAC;gBACD,MAAK;YAEP,KAAK,WAAW;gBACd,IAAI,KAAK,KAAK,cAAc,CAAC,IAAI,EAAE,KAAM,CAAC,EAAE,CAAC;oBAC3C,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,yBAAyB,KAAK,EAAE,CAAC,CAAA;gBACnE,CAAC;gBACD,MAAK;YAEP,gBAAgB;YAChB,KAAK,OAAO;gBACV,IAAI,CAAC,KAAK;oBAAE,MAAK;gBACjB,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,KAAM,CAAC,CAAA;oBAClC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;wBACjC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,sBAAsB,CAAC,CAAA;oBACzD,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,oBAAoB,KAAK,cAAc,CAAC,CAAA;gBAClE,CAAC;gBACD,MAAK;YAEP,8BAA8B;YAC9B,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,KAAK;oBAAE,MAAK;gBACjB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,KAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACnD,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;gBAClD,IAAI,QAAQ;oBAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;gBAE5C,IAAI,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC;oBACnD,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;gBAC/B,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;gBACpC,IAAI,QAAQ,EAAE,CAAC;oBACb,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,kBAAkB,CAAC,CAAA;gBACrD,CAAC;gBACD,MAAK;YACP,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,KAAK;oBAAE,MAAK;gBACjB,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,KAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACzC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;gBAElD,IAAI,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC;oBACnD,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;gBAC/B,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;gBACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,uBAAuB,KAAK,EAAE,CAAC,CAAA;gBACjE,CAAC;gBACD,MAAK;YACP,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAID,KAAK,UAAU,gBAAgB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAOhF;IACC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QAElE,OAAM;IACR,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAA;IAEnC,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,qBAAqB,CAAC,CAAA;YAE9D,OAAM;QACR,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QAClH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAC,CAAC,CAAA;IACrJ,CAAC;AACH,CAAC;AAID,sCAAsC;AACtC,wBAAwB;AACxB,sCAAsC;AACtC,SAAS,cAAc,CAAC,GAAQ,EAAE,IAAY;IAC5C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAA;IAErD,MAAM,cAAc,GAAG,IAAI;SACxB,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC;SAC5B,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC;SAChC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;IAEnC,OAAO,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACnD,IAAI,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAA;QAE1E,OAAO,SAAS,CAAA;IAClB,CAAC,EAAE,GAAG,CAAC,CAAA;AACT,CAAC;AAED,SAAS,cAAc,CAAC,KAAgC;IACtD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAEtC,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAA;AAC7C,CAAC;AAED,SAAS,QAAQ,CAAC,MAAgC,EAAE,KAAa,EAAE,OAAe;IAChF,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;AACrD,CAAC"}
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/validation/validation.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skalfa/skalfa-api-core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.24",
|
|
4
4
|
"description": "Core and Foundational utilities for the Skalfa API Framework.",
|
|
5
|
-
"keywords": [
|
|
5
|
+
"keywords": [
|
|
6
|
+
"skalfa",
|
|
7
|
+
"skalfa-api",
|
|
8
|
+
"skalfa-api-core",
|
|
9
|
+
"bun-framework",
|
|
10
|
+
"elysia-framework"
|
|
11
|
+
],
|
|
6
12
|
"main": "dist/index.js",
|
|
7
13
|
"types": "dist/index.d.ts",
|
|
8
14
|
"scripts": {
|
|
9
|
-
"build": "tsc"
|
|
15
|
+
"build": "tsc -p tsconfig.build.json"
|
|
10
16
|
},
|
|
11
17
|
"author": "",
|
|
12
18
|
"license": "MIT",
|
|
13
19
|
"dependencies": {
|
|
14
20
|
"@skalfa/skalfa-orm": "*",
|
|
21
|
+
"@skalfa/skalfa-lang": "*",
|
|
15
22
|
"knex": "^3.1.0",
|
|
16
23
|
"bcrypt": "^6.0.0",
|
|
17
24
|
"commander": "^12.1.0",
|
|
@@ -28,4 +35,4 @@
|
|
|
28
35
|
"bun-types": "latest",
|
|
29
36
|
"typescript": "^6.0.3"
|
|
30
37
|
}
|
|
31
|
-
}
|
|
38
|
+
}
|
package/src/commands/cli.ts
CHANGED
|
@@ -2,6 +2,7 @@ import fs from "fs";
|
|
|
2
2
|
import path from "path";
|
|
3
3
|
import { Command } from "commander";
|
|
4
4
|
import { spawn } from "child_process";
|
|
5
|
+
import { runBuild as runBuildLang, startDev as startDevLang } from "@skalfa/skalfa-lang/compiler";
|
|
5
6
|
|
|
6
7
|
import { makeControllerCommand } from "./make/basic-controller";
|
|
7
8
|
import { makeSkalfaControllerCommand } from "./make/skalfa-controller";
|
|
@@ -81,6 +82,7 @@ export function runCli() {
|
|
|
81
82
|
program.addCommand(startCommand);
|
|
82
83
|
program.addCommand(testCommand);
|
|
83
84
|
program.addCommand(lintCommand);
|
|
85
|
+
program.addCommand(langCommand);
|
|
84
86
|
|
|
85
87
|
program.parse(process.argv);
|
|
86
88
|
}
|
|
@@ -100,11 +102,30 @@ function executeCommand(commandLine: string): void {
|
|
|
100
102
|
});
|
|
101
103
|
}
|
|
102
104
|
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
export const langCommand = new Command("lang")
|
|
108
|
+
.description("Manage and compile type-safe translation resources for @skalfa/lang.")
|
|
109
|
+
.argument("<action>", "action to perform: build, dev")
|
|
110
|
+
.option("-q, --quiet", "Run in quiet mode (suppress verbose logs)")
|
|
111
|
+
.action(async (action: string, options: { quiet?: boolean }) => {
|
|
112
|
+
if (action === "build") {
|
|
113
|
+
const success = await runBuildLang(process.cwd(), false, !!options.quiet);
|
|
114
|
+
if (!success) process.exit(1);
|
|
115
|
+
process.exit(0);
|
|
116
|
+
} else if (action === "dev") {
|
|
117
|
+
await startDevLang(process.cwd(), !!options.quiet);
|
|
118
|
+
} else {
|
|
119
|
+
console.error(`Unknown action "${action}". Use "build" or "dev".`);
|
|
120
|
+
process.exit(1);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
|
|
103
124
|
export const devCommand = new Command("dev")
|
|
104
125
|
.description("Start development server")
|
|
105
126
|
.action(() => {
|
|
106
127
|
const pm = getPackageManager();
|
|
107
|
-
executeCommand(`concurrently --raw "${pm} run watch" "${pm} run skalfa watch:barrels"`);
|
|
128
|
+
executeCommand(`concurrently --raw "${pm} run watch" "${pm} run skalfa watch:barrels" "${pm} run skalfa lang dev --quiet"`);
|
|
108
129
|
});
|
|
109
130
|
|
|
110
131
|
export const watchCommand = new Command("watch")
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import validator from "validator"
|
|
2
2
|
import { db } from "@skalfa/skalfa-orm";
|
|
3
|
+
import { getLang } from "@skalfa/skalfa-lang";
|
|
3
4
|
|
|
4
5
|
|
|
5
6
|
|
|
@@ -80,6 +81,7 @@ export async function validate(
|
|
|
80
81
|
|
|
81
82
|
|
|
82
83
|
async function checkRules({ field, value, rules, data, errors } : { field: string, value: any, rules: ValidationRule[], data: any, errors: Record<string, string[]> }) {
|
|
84
|
+
const l = getLang();
|
|
83
85
|
for (const rule of rules) {
|
|
84
86
|
const [name, param] = rule.split(":") as [string, string | undefined]
|
|
85
87
|
|
|
@@ -87,7 +89,8 @@ async function checkRules({ field, value, rules, data, errors } : { field: strin
|
|
|
87
89
|
// === BASIC ===
|
|
88
90
|
case "required":
|
|
89
91
|
if (validator.isEmpty(String(value).trim())) {
|
|
90
|
-
|
|
92
|
+
const msg = l.validation?.required ? l.validation.required() : `${field} wajib diisi`;
|
|
93
|
+
addError(errors, field, msg);
|
|
91
94
|
}
|
|
92
95
|
break
|
|
93
96
|
|
|
@@ -95,7 +98,8 @@ async function checkRules({ field, value, rules, data, errors } : { field: strin
|
|
|
95
98
|
case "text":
|
|
96
99
|
if (!value) break
|
|
97
100
|
if (typeof value !== "string") {
|
|
98
|
-
|
|
101
|
+
const msg = l.validation?.string ? l.validation.string() : `${field} harus berupa string`;
|
|
102
|
+
addError(errors, field, msg);
|
|
99
103
|
}
|
|
100
104
|
break
|
|
101
105
|
|
|
@@ -103,34 +107,39 @@ async function checkRules({ field, value, rules, data, errors } : { field: strin
|
|
|
103
107
|
case "number":
|
|
104
108
|
if (!value) break
|
|
105
109
|
if (!validator.isNumeric(String(value))) {
|
|
106
|
-
|
|
110
|
+
const msg = l.validation?.numeric ? l.validation.numeric() : `${field} harus berupa angka`;
|
|
111
|
+
addError(errors, field, msg);
|
|
107
112
|
}
|
|
108
113
|
break
|
|
109
114
|
|
|
110
115
|
case "boolean":
|
|
111
116
|
if (!(value === true || value === false || value === "true" || value === "false" || value === 1 || value === 0)) {
|
|
112
|
-
|
|
117
|
+
const msg = l.validation?.boolean ? l.validation.boolean() : `${field} harus berupa boolean`;
|
|
118
|
+
addError(errors, field, msg);
|
|
113
119
|
}
|
|
114
120
|
break
|
|
115
121
|
|
|
116
122
|
case "email":
|
|
117
123
|
if (!value) break
|
|
118
124
|
if (!validator.isEmail(String(value))) {
|
|
119
|
-
|
|
125
|
+
const msg = l.validation?.email ? l.validation.email() : `${field} harus berupa email yang valid`;
|
|
126
|
+
addError(errors, field, msg);
|
|
120
127
|
}
|
|
121
128
|
break
|
|
122
129
|
|
|
123
130
|
case "url":
|
|
124
131
|
if (!value) break
|
|
125
132
|
if (!validator.isURL(String(value))) {
|
|
126
|
-
|
|
133
|
+
const msg = l.validation?.url ? l.validation.url() : `${field} harus berupa URL yang valid`;
|
|
134
|
+
addError(errors, field, msg);
|
|
127
135
|
}
|
|
128
136
|
break
|
|
129
137
|
|
|
130
138
|
case "date":
|
|
131
139
|
if (!value) break
|
|
132
140
|
if (!validator.isDate(String(value))) {
|
|
133
|
-
|
|
141
|
+
const msg = l.validation?.date ? l.validation.date() : `${field} harus berupa tanggal yang valid`;
|
|
142
|
+
addError(errors, field, msg);
|
|
134
143
|
}
|
|
135
144
|
break
|
|
136
145
|
|
|
@@ -139,7 +148,8 @@ async function checkRules({ field, value, rules, data, errors } : { field: strin
|
|
|
139
148
|
if (!value) break
|
|
140
149
|
const min = parseInt(param!)
|
|
141
150
|
if (!validator.isLength(String(value), { min })) {
|
|
142
|
-
|
|
151
|
+
const msg = l.validation?.min ? l.validation.min({ min }) : `${field} minimal ${min} karakter`;
|
|
152
|
+
addError(errors, field, msg);
|
|
143
153
|
}
|
|
144
154
|
break
|
|
145
155
|
}
|
|
@@ -148,7 +158,8 @@ async function checkRules({ field, value, rules, data, errors } : { field: strin
|
|
|
148
158
|
if (!value) break
|
|
149
159
|
const max = parseInt(param!)
|
|
150
160
|
if (!validator.isLength(String(value), { max })) {
|
|
151
|
-
|
|
161
|
+
const msg = l.validation?.max ? l.validation.max({ max }) : `${field} maksimal ${max} karakter`;
|
|
162
|
+
addError(errors, field, msg);
|
|
152
163
|
}
|
|
153
164
|
break
|
|
154
165
|
}
|
|
@@ -157,7 +168,8 @@ async function checkRules({ field, value, rules, data, errors } : { field: strin
|
|
|
157
168
|
if (!value) break
|
|
158
169
|
const [minVal, maxVal] = param!.split(",").map(Number)
|
|
159
170
|
if (!validator.isLength(String(value), { min: minVal, max: maxVal })) {
|
|
160
|
-
|
|
171
|
+
const msg = l.validation?.min_max ? l.validation.min_max({ min: minVal, max: maxVal }) : `${field} harus antara ${minVal} - ${maxVal} karakter`;
|
|
172
|
+
addError(errors, field, msg);
|
|
161
173
|
}
|
|
162
174
|
break
|
|
163
175
|
}
|
|
@@ -167,7 +179,8 @@ async function checkRules({ field, value, rules, data, errors } : { field: strin
|
|
|
167
179
|
if (!value) break
|
|
168
180
|
const allowed = param!.split(",")
|
|
169
181
|
if (!allowed.includes(String(value))) {
|
|
170
|
-
|
|
182
|
+
const msg = l.validation?.in ? l.validation.in({ keywords: allowed.join(", ") }) : `${field} harus salah satu dari: ${allowed.join(", ")}`;
|
|
183
|
+
addError(errors, field, msg);
|
|
171
184
|
}
|
|
172
185
|
break
|
|
173
186
|
}
|
|
@@ -176,7 +189,8 @@ async function checkRules({ field, value, rules, data, errors } : { field: strin
|
|
|
176
189
|
if (!value) break
|
|
177
190
|
const notAllowed = param!.split(",")
|
|
178
191
|
if (notAllowed.includes(String(value))) {
|
|
179
|
-
|
|
192
|
+
const msg = l.validation?.not_in ? l.validation.not_in({ keywords: notAllowed.join(", ") }) : `${field} tidak boleh salah satu dari: ${notAllowed.join(", ")}`;
|
|
193
|
+
addError(errors, field, msg);
|
|
180
194
|
}
|
|
181
195
|
break
|
|
182
196
|
}
|
|
@@ -184,7 +198,8 @@ async function checkRules({ field, value, rules, data, errors } : { field: strin
|
|
|
184
198
|
case "array": {
|
|
185
199
|
if (!value) break
|
|
186
200
|
if (!Array.isArray(value)) {
|
|
187
|
-
|
|
201
|
+
const msg = l.validation?.array ? l.validation.array() : `${field} harus berupa array`;
|
|
202
|
+
addError(errors, field, msg);
|
|
188
203
|
}
|
|
189
204
|
break
|
|
190
205
|
}
|
|
@@ -192,19 +207,22 @@ async function checkRules({ field, value, rules, data, errors } : { field: strin
|
|
|
192
207
|
// === RELATIONAL ===
|
|
193
208
|
case "confirmed":
|
|
194
209
|
if (value !== getNestedValue(data, `${field}_confirmation`)) {
|
|
195
|
-
|
|
210
|
+
const msg = l.validation?.confirmed ? l.validation.confirmed() : `${field} tidak sama dengan konfirmasi`;
|
|
211
|
+
addError(errors, field, msg);
|
|
196
212
|
}
|
|
197
213
|
break
|
|
198
214
|
|
|
199
215
|
case "same":
|
|
200
216
|
if (value !== getNestedValue(data, param!)) {
|
|
201
|
-
|
|
217
|
+
const msg = l.validation?.same ? l.validation.same({ other: param }) : `${field} harus sama dengan ${param}`;
|
|
218
|
+
addError(errors, field, msg);
|
|
202
219
|
}
|
|
203
220
|
break
|
|
204
221
|
|
|
205
222
|
case "different":
|
|
206
223
|
if (value === getNestedValue(data, param!)) {
|
|
207
|
-
|
|
224
|
+
const msg = l.validation?.different ? l.validation.different({ other: param }) : `${field} harus berbeda dengan ${param}`;
|
|
225
|
+
addError(errors, field, msg);
|
|
208
226
|
}
|
|
209
227
|
break
|
|
210
228
|
|
|
@@ -214,10 +232,11 @@ async function checkRules({ field, value, rules, data, errors } : { field: strin
|
|
|
214
232
|
try {
|
|
215
233
|
const pattern = new RegExp(param!)
|
|
216
234
|
if (!pattern.test(String(value))) {
|
|
217
|
-
|
|
235
|
+
const msg = l.validation?.regex ? l.validation.regex() : `${field} tidak sesuai format`;
|
|
236
|
+
addError(errors, field, msg);
|
|
218
237
|
}
|
|
219
238
|
} catch {
|
|
220
|
-
addError(errors, field, `Regex rule untuk ${field} tidak valid`)
|
|
239
|
+
addError(errors, field, `Regex rule untuk ${field} tidak valid`);
|
|
221
240
|
}
|
|
222
241
|
break
|
|
223
242
|
|
|
@@ -234,7 +253,8 @@ async function checkRules({ field, value, rules, data, errors } : { field: strin
|
|
|
234
253
|
|
|
235
254
|
const existing = await query.first()
|
|
236
255
|
if (existing) {
|
|
237
|
-
|
|
256
|
+
const msg = l.validation?.unique ? l.validation.unique() : `${field} sudah digunakan`;
|
|
257
|
+
addError(errors, field, msg);
|
|
238
258
|
}
|
|
239
259
|
break
|
|
240
260
|
}
|
|
@@ -250,7 +270,8 @@ async function checkRules({ field, value, rules, data, errors } : { field: strin
|
|
|
250
270
|
|
|
251
271
|
const existing = await query.first()
|
|
252
272
|
if (!existing) {
|
|
253
|
-
|
|
273
|
+
const msg = l.validation?.exists ? l.validation.exists({ table }) : `${field} tidak ditemukan di ${table}`;
|
|
274
|
+
addError(errors, field, msg);
|
|
254
275
|
}
|
|
255
276
|
break
|
|
256
277
|
}
|