@stacksjs/validation 0.56.34 → 0.57.2
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/index.d.ts +1 -0
- package/dist/index.mjs +4 -229
- package/dist/is.mjs +82 -0
- package/dist/rules.mjs +15 -0
- package/dist/types/env.mjs +105 -0
- package/dist/types/index.mjs +2 -0
- package/dist/types/money.mjs +13 -0
- package/dist/validate.mjs +13 -0
- package/package.json +4 -4
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "/home/runner/work/stacks/stacks/.stacks/core/validation/src/index";
|
package/dist/index.mjs
CHANGED
|
@@ -1,229 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
import { loadEnv } from 'vite';
|
|
6
|
-
export { loadEnv } from 'vite';
|
|
7
|
-
import { projectPath } from '@stacksjs/path';
|
|
8
|
-
|
|
9
|
-
function isDef(val) {
|
|
10
|
-
return typeof val !== "undefined";
|
|
11
|
-
}
|
|
12
|
-
function isBoolean(val) {
|
|
13
|
-
return typeof val === "boolean";
|
|
14
|
-
}
|
|
15
|
-
function isFunction(val) {
|
|
16
|
-
return typeof val === "function";
|
|
17
|
-
}
|
|
18
|
-
function isNumber(val) {
|
|
19
|
-
return typeof val === "number";
|
|
20
|
-
}
|
|
21
|
-
function isString(val) {
|
|
22
|
-
return typeof val === "string";
|
|
23
|
-
}
|
|
24
|
-
function isObject(val) {
|
|
25
|
-
return toString(val) === "[object Object]";
|
|
26
|
-
}
|
|
27
|
-
function isWindow(val) {
|
|
28
|
-
return typeof window !== "undefined" && toString(val) === "[object Window]";
|
|
29
|
-
}
|
|
30
|
-
const isBrowser = typeof window !== "undefined";
|
|
31
|
-
const isServer = typeof document === "undefined";
|
|
32
|
-
function isMap(val) {
|
|
33
|
-
return toString(val) === "[object Map]";
|
|
34
|
-
}
|
|
35
|
-
function isSet(val) {
|
|
36
|
-
return toString(val) === "[object Set]";
|
|
37
|
-
}
|
|
38
|
-
function isPromise(val) {
|
|
39
|
-
return toString(val) === "[object Promise]";
|
|
40
|
-
}
|
|
41
|
-
function isUndefined(v) {
|
|
42
|
-
return getTypeName(v) === "undefined";
|
|
43
|
-
}
|
|
44
|
-
function isNull(v) {
|
|
45
|
-
return getTypeName(v) === "null";
|
|
46
|
-
}
|
|
47
|
-
function isSymbol(v) {
|
|
48
|
-
return getTypeName(v) === "symbol";
|
|
49
|
-
}
|
|
50
|
-
function isDate(v) {
|
|
51
|
-
return getTypeName(v) === "date";
|
|
52
|
-
}
|
|
53
|
-
function isRegExp(v) {
|
|
54
|
-
return getTypeName(v) === "regexp";
|
|
55
|
-
}
|
|
56
|
-
function isArray(v) {
|
|
57
|
-
return getTypeName(v) === "array";
|
|
58
|
-
}
|
|
59
|
-
function isPrimitive(v) {
|
|
60
|
-
const type = getTypeName(v);
|
|
61
|
-
return type === "null" || type === "undefined" || type === "string" || type === "number" || type === "boolean" || type === "symbol";
|
|
62
|
-
}
|
|
63
|
-
function isInteger(v) {
|
|
64
|
-
return isNumber(v) && Number.isInteger(v);
|
|
65
|
-
}
|
|
66
|
-
function isFloat(v) {
|
|
67
|
-
return isNumber(v) && !Number.isInteger(v);
|
|
68
|
-
}
|
|
69
|
-
function isPositive(v) {
|
|
70
|
-
return isNumber(v) && v > 0;
|
|
71
|
-
}
|
|
72
|
-
function isNegative(v) {
|
|
73
|
-
return isNumber(v) && v < 0;
|
|
74
|
-
}
|
|
75
|
-
function isEven(v) {
|
|
76
|
-
return isNumber(v) && v % 2 === 0;
|
|
77
|
-
}
|
|
78
|
-
function isOdd(v) {
|
|
79
|
-
return isNumber(v) && v % 2 !== 0;
|
|
80
|
-
}
|
|
81
|
-
function isEvenOrOdd(v) {
|
|
82
|
-
return isNumber(v) && (v % 2 === 0 ? "even" : "odd");
|
|
83
|
-
}
|
|
84
|
-
function isPositiveOrNegative(v) {
|
|
85
|
-
return isNumber(v) && (v > 0 ? "positive" : "negative");
|
|
86
|
-
}
|
|
87
|
-
function isIntegerOrFloat(v) {
|
|
88
|
-
return isNumber(v) && (Number.isInteger(v) ? "integer" : "float");
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
class MoneyValidator extends BaseLiteralType {
|
|
92
|
-
constructor(options, validations) {
|
|
93
|
-
super(options, validations || [isMoney()]);
|
|
94
|
-
}
|
|
95
|
-
clone() {
|
|
96
|
-
return new MoneyValidator(
|
|
97
|
-
this.cloneOptions(),
|
|
98
|
-
this.cloneValidations()
|
|
99
|
-
);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
Vine.macro("money", () => {
|
|
104
|
-
return new MoneyValidator();
|
|
105
|
-
});
|
|
106
|
-
const validate = validator;
|
|
107
|
-
const string = validator.string();
|
|
108
|
-
const number = validator.number;
|
|
109
|
-
const boolean = validator.boolean;
|
|
110
|
-
const array = validator.array;
|
|
111
|
-
const object = validator.object;
|
|
112
|
-
const any = validator.any;
|
|
113
|
-
|
|
114
|
-
const isMoney = validator.createRule((value, _, field) => {
|
|
115
|
-
const numericValue = validator.helpers.asNumber(value);
|
|
116
|
-
if (Number.isNaN(numericValue)) {
|
|
117
|
-
field.report(
|
|
118
|
-
"The {{ field }} field value must be a number",
|
|
119
|
-
"money",
|
|
120
|
-
field
|
|
121
|
-
);
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
const amount = currency({ amount: numericValue, currency: USD });
|
|
125
|
-
field.mutate(amount, field);
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
const envSchema = validator.object({
|
|
129
|
-
APP_NAME: validator.string().optional(),
|
|
130
|
-
APP_ENV: validator.enum(["local", "development", "staging", "production"]).optional(),
|
|
131
|
-
APP_KEY: validator.string().optional(),
|
|
132
|
-
APP_URL: validator.string(),
|
|
133
|
-
APP_DEBUG: validator.boolean().optional(),
|
|
134
|
-
APP_SUBDOMAIN_API: validator.string().optional(),
|
|
135
|
-
APP_SUBDOMAIN_DOCS: validator.string().optional(),
|
|
136
|
-
APP_SUBDOMAIN_LIBRARY: validator.string().optional(),
|
|
137
|
-
APP_BUCKET: validator.string().optional(),
|
|
138
|
-
DB_CONNECTION: validator.string().optional(),
|
|
139
|
-
DB_HOST: validator.string().optional(),
|
|
140
|
-
DB_PORT: validator.number().optional(),
|
|
141
|
-
DB_DATABASE: validator.string().optional(),
|
|
142
|
-
DB_USERNAME: validator.string().optional(),
|
|
143
|
-
DB_PASSWORD: validator.string().optional(),
|
|
144
|
-
SEARCH_ENGINE_DRIVER: validator.string().optional(),
|
|
145
|
-
MEILISEARCH_HOST: validator.string().optional(),
|
|
146
|
-
MEILISEARCH_KEY: validator.string().optional(),
|
|
147
|
-
CACHE_DRIVER: validator.enum(["dynamodb", "memcached", "redis"]).optional(),
|
|
148
|
-
CACHE_PREFIX: validator.string().optional(),
|
|
149
|
-
CACHE_TTL: validator.number().optional(),
|
|
150
|
-
AWS_ACCESS_KEY_ID: validator.string().optional(),
|
|
151
|
-
AWS_SECRET_ACCESS_KEY: validator.string().optional(),
|
|
152
|
-
AWS_DEFAULT_REGION: validator.string().optional(),
|
|
153
|
-
DYNAMODB_CACHE_TABLE: validator.string().optional(),
|
|
154
|
-
DYNAMODB_ENDPOINT: validator.string().optional(),
|
|
155
|
-
MEMCACHED_PERSISTENT_ID: validator.string().optional(),
|
|
156
|
-
MEMCACHED_USERNAME: validator.string().optional(),
|
|
157
|
-
MEMCACHED_PASSWORD: validator.string().optional(),
|
|
158
|
-
MEMCACHED_HOST: validator.string().optional(),
|
|
159
|
-
MEMCACHED_PORT: validator.number().optional(),
|
|
160
|
-
REDIS_HOST: validator.string().optional(),
|
|
161
|
-
REDIS_PORT: validator.number().optional(),
|
|
162
|
-
MAIL_FROM_NAME: validator.string().optional(),
|
|
163
|
-
MAIL_FROM_ADDRESS: validator.string().optional(),
|
|
164
|
-
EMAILJS_HOST: validator.string().optional(),
|
|
165
|
-
EMAILJS_USERNAME: validator.string().optional(),
|
|
166
|
-
EMAILJS_PASSWORD: validator.string().optional(),
|
|
167
|
-
EMAILJS_PORT: validator.number().optional(),
|
|
168
|
-
EMAILJS_SECURE: validator.boolean().optional(),
|
|
169
|
-
MAILGUN_API_KEY: validator.string().optional(),
|
|
170
|
-
MAILGUN_DOMAIN: validator.string().optional(),
|
|
171
|
-
MAILGUN_USERNAME: validator.string().optional(),
|
|
172
|
-
MAILJET_API_KEY: validator.string().optional(),
|
|
173
|
-
MAILJET_API_SECRET: validator.string().optional(),
|
|
174
|
-
MANDRILL_API_KEY: validator.string().optional(),
|
|
175
|
-
NETCORE_API_KEY: validator.string().optional(),
|
|
176
|
-
NODEMAILER_HOST: validator.string().optional(),
|
|
177
|
-
NODEMAILER_USERNAME: validator.string().optional(),
|
|
178
|
-
NODEMAILER_PASSWORD: validator.string().optional(),
|
|
179
|
-
NODEMAILER_PORT: validator.number().optional(),
|
|
180
|
-
NODEMAILER_SECURE: validator.boolean().optional(),
|
|
181
|
-
POSTMARK_API_TOKEN: validator.string().optional(),
|
|
182
|
-
POSTMARK_API_KEY: validator.string().optional(),
|
|
183
|
-
SENDGRID_API_KEY: validator.string().optional(),
|
|
184
|
-
SENDGRID_SENDER_NAME: validator.string().optional(),
|
|
185
|
-
SES_API_VERSION: validator.string().optional(),
|
|
186
|
-
SES_ACCESS_KEY_ID: validator.string().optional(),
|
|
187
|
-
SES_SECRET_ACCESS_KEY: validator.string().optional(),
|
|
188
|
-
SES_REGION: validator.string().optional(),
|
|
189
|
-
FROM_PHONE_NUMBER: validator.string().optional(),
|
|
190
|
-
TWILIO_ACCOUNT_SID: validator.string().optional(),
|
|
191
|
-
TWILIO_AUTH_TOKEN: validator.string().optional(),
|
|
192
|
-
VONAGE_API_KEY: validator.string().optional(),
|
|
193
|
-
VONAGE_API_SECRET: validator.string().optional(),
|
|
194
|
-
GUPSHUP_USER_ID: validator.string().optional(),
|
|
195
|
-
GUPSHUP_PASSWORD: validator.string().optional(),
|
|
196
|
-
PLIVO_ACCOUNT_ID: validator.string().optional(),
|
|
197
|
-
PLIVO_AUTH_TOKEN: validator.string().optional(),
|
|
198
|
-
SMS77_API_KEY: validator.string().optional(),
|
|
199
|
-
SNS_REGION: validator.string().optional(),
|
|
200
|
-
SNS_ACCESS_KEY_ID: validator.string().optional(),
|
|
201
|
-
SNS_SECRET_ACCESS_KEY: validator.string().optional(),
|
|
202
|
-
TELNYX_API_KEY: validator.string().optional(),
|
|
203
|
-
TELNYX_MESSAGE_PROFILE_ID: validator.string().optional(),
|
|
204
|
-
TERMII_API_KEY: validator.string().optional(),
|
|
205
|
-
SLACK_FROM: validator.string().optional(),
|
|
206
|
-
SLACK_APPLICATION_ID: validator.string().optional(),
|
|
207
|
-
SLACK_CLIENT_ID: validator.string().optional(),
|
|
208
|
-
SLACK_SECRET_KEY: validator.string().optional(),
|
|
209
|
-
MICROSOFT_TEAMS_APPLICATION_ID: validator.string().optional(),
|
|
210
|
-
MICROSOFT_TEAMS_CLIENT_ID: validator.string().optional(),
|
|
211
|
-
MICROSOFT_TEAMS_SECRET: validator.string().optional()
|
|
212
|
-
});
|
|
213
|
-
validator.object({
|
|
214
|
-
FRONTEND_APP_ENV: validator.enum(["local", "development", "staging", "production"]).optional(),
|
|
215
|
-
FRONTEND_APP_URL: validator.string().optional()
|
|
216
|
-
});
|
|
217
|
-
const env = process.env;
|
|
218
|
-
async function getEnv() {
|
|
219
|
-
try {
|
|
220
|
-
const mode = process.env.NODE_ENV ?? "development";
|
|
221
|
-
const data = loadEnv(mode, projectPath(), "");
|
|
222
|
-
const v = validator.compile(envSchema);
|
|
223
|
-
return v.validate(data);
|
|
224
|
-
} catch (error) {
|
|
225
|
-
handleError(error);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
export { MoneyValidator, any, array, boolean, env, getEnv, isArray, isBoolean, isBrowser, isDate, isDef, isEven, isEvenOrOdd, isFloat, isFunction, isInteger, isIntegerOrFloat, isMap, isMoney, isNegative, isNull, isNumber, isObject, isOdd, isPositive, isPositiveOrNegative, isPrimitive, isPromise, isRegExp, isServer, isSet, isString, isSymbol, isUndefined, isWindow, number, object, string, validate };
|
|
1
|
+
export * from "./is.mjs";
|
|
2
|
+
export * from "./rules.mjs";
|
|
3
|
+
export * from "./validate.mjs";
|
|
4
|
+
export * from "./types/index.mjs";
|
package/dist/is.mjs
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { getTypeName, toString } from "@stacksjs/utils";
|
|
2
|
+
export function isDef(val) {
|
|
3
|
+
return typeof val !== "undefined";
|
|
4
|
+
}
|
|
5
|
+
export function isBoolean(val) {
|
|
6
|
+
return typeof val === "boolean";
|
|
7
|
+
}
|
|
8
|
+
export function isFunction(val) {
|
|
9
|
+
return typeof val === "function";
|
|
10
|
+
}
|
|
11
|
+
export function isNumber(val) {
|
|
12
|
+
return typeof val === "number";
|
|
13
|
+
}
|
|
14
|
+
export function isString(val) {
|
|
15
|
+
return typeof val === "string";
|
|
16
|
+
}
|
|
17
|
+
export function isObject(val) {
|
|
18
|
+
return toString(val) === "[object Object]";
|
|
19
|
+
}
|
|
20
|
+
export function isWindow(val) {
|
|
21
|
+
return typeof window !== "undefined" && toString(val) === "[object Window]";
|
|
22
|
+
}
|
|
23
|
+
export const isBrowser = typeof window !== "undefined";
|
|
24
|
+
export const isServer = typeof document === "undefined";
|
|
25
|
+
export function isMap(val) {
|
|
26
|
+
return toString(val) === "[object Map]";
|
|
27
|
+
}
|
|
28
|
+
export function isSet(val) {
|
|
29
|
+
return toString(val) === "[object Set]";
|
|
30
|
+
}
|
|
31
|
+
export function isPromise(val) {
|
|
32
|
+
return toString(val) === "[object Promise]";
|
|
33
|
+
}
|
|
34
|
+
export function isUndefined(v) {
|
|
35
|
+
return getTypeName(v) === "undefined";
|
|
36
|
+
}
|
|
37
|
+
export function isNull(v) {
|
|
38
|
+
return getTypeName(v) === "null";
|
|
39
|
+
}
|
|
40
|
+
export function isSymbol(v) {
|
|
41
|
+
return getTypeName(v) === "symbol";
|
|
42
|
+
}
|
|
43
|
+
export function isDate(v) {
|
|
44
|
+
return getTypeName(v) === "date";
|
|
45
|
+
}
|
|
46
|
+
export function isRegExp(v) {
|
|
47
|
+
return getTypeName(v) === "regexp";
|
|
48
|
+
}
|
|
49
|
+
export function isArray(v) {
|
|
50
|
+
return getTypeName(v) === "array";
|
|
51
|
+
}
|
|
52
|
+
export function isPrimitive(v) {
|
|
53
|
+
const type = getTypeName(v);
|
|
54
|
+
return type === "null" || type === "undefined" || type === "string" || type === "number" || type === "boolean" || type === "symbol";
|
|
55
|
+
}
|
|
56
|
+
export function isInteger(v) {
|
|
57
|
+
return isNumber(v) && Number.isInteger(v);
|
|
58
|
+
}
|
|
59
|
+
export function isFloat(v) {
|
|
60
|
+
return isNumber(v) && !Number.isInteger(v);
|
|
61
|
+
}
|
|
62
|
+
export function isPositive(v) {
|
|
63
|
+
return isNumber(v) && v > 0;
|
|
64
|
+
}
|
|
65
|
+
export function isNegative(v) {
|
|
66
|
+
return isNumber(v) && v < 0;
|
|
67
|
+
}
|
|
68
|
+
export function isEven(v) {
|
|
69
|
+
return isNumber(v) && v % 2 === 0;
|
|
70
|
+
}
|
|
71
|
+
export function isOdd(v) {
|
|
72
|
+
return isNumber(v) && v % 2 !== 0;
|
|
73
|
+
}
|
|
74
|
+
export function isEvenOrOdd(v) {
|
|
75
|
+
return isNumber(v) && (v % 2 === 0 ? "even" : "odd");
|
|
76
|
+
}
|
|
77
|
+
export function isPositiveOrNegative(v) {
|
|
78
|
+
return isNumber(v) && (v > 0 ? "positive" : "negative");
|
|
79
|
+
}
|
|
80
|
+
export function isIntegerOrFloat(v) {
|
|
81
|
+
return isNumber(v) && (Number.isInteger(v) ? "integer" : "float");
|
|
82
|
+
}
|
package/dist/rules.mjs
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { USD, currency } from "@stacksjs/utils";
|
|
2
|
+
import { validator } from "./validate.mjs";
|
|
3
|
+
export const isMoney = validator.createRule((value, _, field) => {
|
|
4
|
+
const numericValue = validator.helpers.asNumber(value);
|
|
5
|
+
if (Number.isNaN(numericValue)) {
|
|
6
|
+
field.report(
|
|
7
|
+
"The {{ field }} field value must be a number",
|
|
8
|
+
"money",
|
|
9
|
+
field
|
|
10
|
+
);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const amount = currency({ amount: numericValue, currency: USD });
|
|
14
|
+
field.mutate(amount, field);
|
|
15
|
+
});
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import process from "node:process";
|
|
2
|
+
import validator from "@vinejs/vine";
|
|
3
|
+
import { loadEnv } from "vite";
|
|
4
|
+
import { projectPath } from "@stacksjs/path";
|
|
5
|
+
const envSchema = validator.object({
|
|
6
|
+
APP_NAME: validator.string().optional(),
|
|
7
|
+
APP_ENV: validator.enum(["local", "development", "staging", "production"]).optional(),
|
|
8
|
+
APP_KEY: validator.string().optional(),
|
|
9
|
+
APP_URL: validator.string(),
|
|
10
|
+
APP_DEBUG: validator.boolean().optional(),
|
|
11
|
+
APP_SUBDOMAIN_API: validator.string().optional(),
|
|
12
|
+
APP_SUBDOMAIN_DOCS: validator.string().optional(),
|
|
13
|
+
APP_SUBDOMAIN_LIBRARY: validator.string().optional(),
|
|
14
|
+
APP_BUCKET: validator.string().optional(),
|
|
15
|
+
DB_CONNECTION: validator.string().optional(),
|
|
16
|
+
DB_HOST: validator.string().optional(),
|
|
17
|
+
DB_PORT: validator.number().optional(),
|
|
18
|
+
DB_DATABASE: validator.string().optional(),
|
|
19
|
+
DB_USERNAME: validator.string().optional(),
|
|
20
|
+
DB_PASSWORD: validator.string().optional(),
|
|
21
|
+
SEARCH_ENGINE_DRIVER: validator.string().optional(),
|
|
22
|
+
MEILISEARCH_HOST: validator.string().optional(),
|
|
23
|
+
MEILISEARCH_KEY: validator.string().optional(),
|
|
24
|
+
CACHE_DRIVER: validator.enum(["dynamodb", "memcached", "redis"]).optional(),
|
|
25
|
+
CACHE_PREFIX: validator.string().optional(),
|
|
26
|
+
CACHE_TTL: validator.number().optional(),
|
|
27
|
+
AWS_ACCESS_KEY_ID: validator.string().optional(),
|
|
28
|
+
AWS_SECRET_ACCESS_KEY: validator.string().optional(),
|
|
29
|
+
AWS_DEFAULT_REGION: validator.string().optional(),
|
|
30
|
+
DYNAMODB_CACHE_TABLE: validator.string().optional(),
|
|
31
|
+
DYNAMODB_ENDPOINT: validator.string().optional(),
|
|
32
|
+
MEMCACHED_PERSISTENT_ID: validator.string().optional(),
|
|
33
|
+
MEMCACHED_USERNAME: validator.string().optional(),
|
|
34
|
+
MEMCACHED_PASSWORD: validator.string().optional(),
|
|
35
|
+
MEMCACHED_HOST: validator.string().optional(),
|
|
36
|
+
MEMCACHED_PORT: validator.number().optional(),
|
|
37
|
+
REDIS_HOST: validator.string().optional(),
|
|
38
|
+
REDIS_PORT: validator.number().optional(),
|
|
39
|
+
MAIL_FROM_NAME: validator.string().optional(),
|
|
40
|
+
MAIL_FROM_ADDRESS: validator.string().optional(),
|
|
41
|
+
EMAILJS_HOST: validator.string().optional(),
|
|
42
|
+
EMAILJS_USERNAME: validator.string().optional(),
|
|
43
|
+
EMAILJS_PASSWORD: validator.string().optional(),
|
|
44
|
+
EMAILJS_PORT: validator.number().optional(),
|
|
45
|
+
EMAILJS_SECURE: validator.boolean().optional(),
|
|
46
|
+
MAILGUN_API_KEY: validator.string().optional(),
|
|
47
|
+
MAILGUN_DOMAIN: validator.string().optional(),
|
|
48
|
+
MAILGUN_USERNAME: validator.string().optional(),
|
|
49
|
+
MAILJET_API_KEY: validator.string().optional(),
|
|
50
|
+
MAILJET_API_SECRET: validator.string().optional(),
|
|
51
|
+
MANDRILL_API_KEY: validator.string().optional(),
|
|
52
|
+
NETCORE_API_KEY: validator.string().optional(),
|
|
53
|
+
NODEMAILER_HOST: validator.string().optional(),
|
|
54
|
+
NODEMAILER_USERNAME: validator.string().optional(),
|
|
55
|
+
NODEMAILER_PASSWORD: validator.string().optional(),
|
|
56
|
+
NODEMAILER_PORT: validator.number().optional(),
|
|
57
|
+
NODEMAILER_SECURE: validator.boolean().optional(),
|
|
58
|
+
POSTMARK_API_TOKEN: validator.string().optional(),
|
|
59
|
+
POSTMARK_API_KEY: validator.string().optional(),
|
|
60
|
+
SENDGRID_API_KEY: validator.string().optional(),
|
|
61
|
+
SENDGRID_SENDER_NAME: validator.string().optional(),
|
|
62
|
+
SES_API_VERSION: validator.string().optional(),
|
|
63
|
+
SES_ACCESS_KEY_ID: validator.string().optional(),
|
|
64
|
+
SES_SECRET_ACCESS_KEY: validator.string().optional(),
|
|
65
|
+
SES_REGION: validator.string().optional(),
|
|
66
|
+
FROM_PHONE_NUMBER: validator.string().optional(),
|
|
67
|
+
TWILIO_ACCOUNT_SID: validator.string().optional(),
|
|
68
|
+
TWILIO_AUTH_TOKEN: validator.string().optional(),
|
|
69
|
+
VONAGE_API_KEY: validator.string().optional(),
|
|
70
|
+
VONAGE_API_SECRET: validator.string().optional(),
|
|
71
|
+
GUPSHUP_USER_ID: validator.string().optional(),
|
|
72
|
+
GUPSHUP_PASSWORD: validator.string().optional(),
|
|
73
|
+
PLIVO_ACCOUNT_ID: validator.string().optional(),
|
|
74
|
+
PLIVO_AUTH_TOKEN: validator.string().optional(),
|
|
75
|
+
SMS77_API_KEY: validator.string().optional(),
|
|
76
|
+
SNS_REGION: validator.string().optional(),
|
|
77
|
+
SNS_ACCESS_KEY_ID: validator.string().optional(),
|
|
78
|
+
SNS_SECRET_ACCESS_KEY: validator.string().optional(),
|
|
79
|
+
TELNYX_API_KEY: validator.string().optional(),
|
|
80
|
+
TELNYX_MESSAGE_PROFILE_ID: validator.string().optional(),
|
|
81
|
+
TERMII_API_KEY: validator.string().optional(),
|
|
82
|
+
SLACK_FROM: validator.string().optional(),
|
|
83
|
+
SLACK_APPLICATION_ID: validator.string().optional(),
|
|
84
|
+
SLACK_CLIENT_ID: validator.string().optional(),
|
|
85
|
+
SLACK_SECRET_KEY: validator.string().optional(),
|
|
86
|
+
MICROSOFT_TEAMS_APPLICATION_ID: validator.string().optional(),
|
|
87
|
+
MICROSOFT_TEAMS_CLIENT_ID: validator.string().optional(),
|
|
88
|
+
MICROSOFT_TEAMS_SECRET: validator.string().optional()
|
|
89
|
+
});
|
|
90
|
+
const frontendEnvSchema = validator.object({
|
|
91
|
+
FRONTEND_APP_ENV: validator.enum(["local", "development", "staging", "production"]).optional(),
|
|
92
|
+
FRONTEND_APP_URL: validator.string().optional()
|
|
93
|
+
});
|
|
94
|
+
export const env = process.env;
|
|
95
|
+
export async function getEnv() {
|
|
96
|
+
try {
|
|
97
|
+
const mode = process.env.NODE_ENV ?? "development";
|
|
98
|
+
const data = loadEnv(mode, projectPath(), "");
|
|
99
|
+
const v = validator.compile(envSchema);
|
|
100
|
+
return v.validate(data);
|
|
101
|
+
} catch (error) {
|
|
102
|
+
handleError(error);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
export { loadEnv };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BaseLiteralType } from "@vinejs/vine";
|
|
2
|
+
import { isMoney } from "../rules.mjs";
|
|
3
|
+
export class MoneyValidator extends BaseLiteralType {
|
|
4
|
+
constructor(options, validations) {
|
|
5
|
+
super(options, validations || [isMoney()]);
|
|
6
|
+
}
|
|
7
|
+
clone() {
|
|
8
|
+
return new MoneyValidator(
|
|
9
|
+
this.cloneOptions(),
|
|
10
|
+
this.cloneValidations()
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import validator, { Vine as Validator } from "@vinejs/vine";
|
|
2
|
+
import { MoneyValidator } from "./types/money.mjs";
|
|
3
|
+
Validator.macro("money", () => {
|
|
4
|
+
return new MoneyValidator();
|
|
5
|
+
});
|
|
6
|
+
const validate = validator;
|
|
7
|
+
const string = validator.string();
|
|
8
|
+
const number = validator.number;
|
|
9
|
+
const boolean = validator.boolean;
|
|
10
|
+
const array = validator.array;
|
|
11
|
+
const object = validator.object;
|
|
12
|
+
const any = validator.any;
|
|
13
|
+
export { validate, validator, Validator, string, number, boolean, array, object, any };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stacksjs/validation",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.57.2",
|
|
5
5
|
"packageManager": "pnpm@8.6.5",
|
|
6
6
|
"description": "The Stacks Validation methods.",
|
|
7
7
|
"author": "Chris Breuer",
|
|
@@ -38,14 +38,14 @@
|
|
|
38
38
|
],
|
|
39
39
|
"peerDependencies": {
|
|
40
40
|
"@vinejs/vine": "^1.4.1",
|
|
41
|
-
"@stacksjs/utils": "0.
|
|
41
|
+
"@stacksjs/utils": "0.57.2"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"@vinejs/vine": "^1.4.1"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"@stacksjs/development": "0.
|
|
48
|
-
"@stacksjs/path": "0.
|
|
47
|
+
"@stacksjs/development": "0.57.2",
|
|
48
|
+
"@stacksjs/path": "0.57.2"
|
|
49
49
|
},
|
|
50
50
|
"scripts": {
|
|
51
51
|
"build": "unbuild",
|