@desaubv/quik 0.0.5 → 0.0.8
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 +804 -0
- package/dist/cron/index.cjs +330 -0
- package/dist/cron/index.cjs.map +1 -0
- package/dist/cron/index.d.cts +38 -0
- package/dist/cron/index.d.ts +38 -0
- package/dist/cron/index.js +291 -0
- package/dist/cron/index.js.map +1 -0
- package/dist/cron-BLi976po.d.cts +38 -0
- package/dist/cron-BLi976po.d.ts +38 -0
- package/dist/http/index.cjs +315 -0
- package/dist/http/index.cjs.map +1 -0
- package/dist/http/index.d.cts +120 -0
- package/dist/http/index.d.ts +120 -0
- package/dist/http/index.js +285 -0
- package/dist/http/index.js.map +1 -0
- package/dist/index.cjs +118 -42
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +18 -9
- package/dist/index.d.ts +18 -9
- package/dist/index.js +113 -38
- package/dist/index.js.map +1 -1
- package/package.json +67 -52
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
// src/http/validatorTypes.ts
|
|
2
|
+
var ArrayType = class {
|
|
3
|
+
type;
|
|
4
|
+
description = "array";
|
|
5
|
+
empty = false;
|
|
6
|
+
constructor(...type) {
|
|
7
|
+
this.type = [...type];
|
|
8
|
+
this.empty = false;
|
|
9
|
+
const types = type.map((t) => t.description);
|
|
10
|
+
this.description = `array(${types.join(" | ")})`;
|
|
11
|
+
}
|
|
12
|
+
canBeEmpty() {
|
|
13
|
+
this.empty = true;
|
|
14
|
+
return this;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var ObjectType = class {
|
|
18
|
+
fields;
|
|
19
|
+
description = "object";
|
|
20
|
+
constructor(fields) {
|
|
21
|
+
this.fields = fields;
|
|
22
|
+
const names = Object.keys(fields);
|
|
23
|
+
this.description = `object{${names.join(", ")}}`;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
function Array2(...type) {
|
|
27
|
+
return new ArrayType(...type);
|
|
28
|
+
}
|
|
29
|
+
function Struct(fields) {
|
|
30
|
+
return new ObjectType(fields);
|
|
31
|
+
}
|
|
32
|
+
var Types = {
|
|
33
|
+
String: /* @__PURE__ */ Symbol("string"),
|
|
34
|
+
Number: /* @__PURE__ */ Symbol("number"),
|
|
35
|
+
Int: /* @__PURE__ */ Symbol("int"),
|
|
36
|
+
Float: /* @__PURE__ */ Symbol("float"),
|
|
37
|
+
Boolean: /* @__PURE__ */ Symbol("boolean"),
|
|
38
|
+
Object: /* @__PURE__ */ Symbol("object"),
|
|
39
|
+
Null: /* @__PURE__ */ Symbol("null"),
|
|
40
|
+
Array: Array2,
|
|
41
|
+
Struct
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// src/http/exceptions.ts
|
|
45
|
+
var ValidationException = class extends Error {
|
|
46
|
+
constructor(message) {
|
|
47
|
+
super(message);
|
|
48
|
+
this.name = "ValidationException";
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
var RequestBodyUndefinedException = class extends ValidationException {
|
|
52
|
+
constructor() {
|
|
53
|
+
super("Request body is undefined");
|
|
54
|
+
this.name = "RequestBodyUndefinedException";
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
var InvalidBodyException = class extends ValidationException {
|
|
58
|
+
constructor() {
|
|
59
|
+
super("Request body must be an object");
|
|
60
|
+
this.name = "InvalidBodyException";
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
var RequiredFieldException = class extends ValidationException {
|
|
64
|
+
constructor(field) {
|
|
65
|
+
super(`Field "${field}" is required`);
|
|
66
|
+
this.field = field;
|
|
67
|
+
this.name = "RequiredFieldException";
|
|
68
|
+
}
|
|
69
|
+
field;
|
|
70
|
+
};
|
|
71
|
+
var InvalidTypeException = class extends ValidationException {
|
|
72
|
+
constructor(field, expected, received) {
|
|
73
|
+
super(
|
|
74
|
+
`Field "${field}" must be of type ${expected}, received ${received}`
|
|
75
|
+
);
|
|
76
|
+
this.field = field;
|
|
77
|
+
this.expected = expected;
|
|
78
|
+
this.received = received;
|
|
79
|
+
this.name = "InvalidTypeException";
|
|
80
|
+
}
|
|
81
|
+
field;
|
|
82
|
+
expected;
|
|
83
|
+
received;
|
|
84
|
+
};
|
|
85
|
+
var EmptyArrayException = class extends ValidationException {
|
|
86
|
+
constructor(field) {
|
|
87
|
+
super(`Field "${field}" must not be an empty array`);
|
|
88
|
+
this.field = field;
|
|
89
|
+
this.name = "EmptyArrayException";
|
|
90
|
+
}
|
|
91
|
+
field;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
// src/http/validador.ts
|
|
95
|
+
var Validator = {
|
|
96
|
+
body(body, fields) {
|
|
97
|
+
if (body === void 0) {
|
|
98
|
+
throw new RequestBodyUndefinedException();
|
|
99
|
+
}
|
|
100
|
+
if (typeof body !== "object" || body === null || Array.isArray(body)) {
|
|
101
|
+
throw new InvalidBodyException();
|
|
102
|
+
}
|
|
103
|
+
return validateObject(body, fields);
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
function validateObject(body, fields, parentPath = "") {
|
|
107
|
+
if (typeof body !== "object" || body === null || Array.isArray(body)) {
|
|
108
|
+
throw new InvalidBodyException();
|
|
109
|
+
}
|
|
110
|
+
const bodyData = body;
|
|
111
|
+
const data = {};
|
|
112
|
+
for (const name in fields) {
|
|
113
|
+
const field = fields[name];
|
|
114
|
+
if (!field) {
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
const fieldPath = parentPath ? `${parentPath}.${name}` : name;
|
|
118
|
+
let value = bodyData[name];
|
|
119
|
+
if (field.required && value === void 0) {
|
|
120
|
+
throw new RequiredFieldException(fieldPath);
|
|
121
|
+
}
|
|
122
|
+
if (value === void 0) {
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
if (!validateType(field.type, value, fieldPath)) {
|
|
126
|
+
const type = getTypeDescription(field.type);
|
|
127
|
+
throw new InvalidTypeException(
|
|
128
|
+
fieldPath,
|
|
129
|
+
type,
|
|
130
|
+
whatTypeIs(value)
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
if (field.validator) {
|
|
134
|
+
const result = field.validator(value);
|
|
135
|
+
if (result instanceof ValidationException) {
|
|
136
|
+
throw result;
|
|
137
|
+
}
|
|
138
|
+
value = result;
|
|
139
|
+
}
|
|
140
|
+
data[name] = value;
|
|
141
|
+
}
|
|
142
|
+
return data;
|
|
143
|
+
}
|
|
144
|
+
function validateType(type, value, fieldName = "") {
|
|
145
|
+
if (Array.isArray(type)) {
|
|
146
|
+
return type.some(
|
|
147
|
+
(t) => validateType(t, value, fieldName)
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
if (type instanceof ArrayType) {
|
|
151
|
+
if (!Array.isArray(value)) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
if (!type.empty && value.length === 0) {
|
|
155
|
+
throw new EmptyArrayException(fieldName);
|
|
156
|
+
}
|
|
157
|
+
for (const item of value) {
|
|
158
|
+
if (!validateType(type.type, item, fieldName)) {
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
if (type instanceof ObjectType) {
|
|
165
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
validateObject(
|
|
169
|
+
value,
|
|
170
|
+
type.fields,
|
|
171
|
+
fieldName
|
|
172
|
+
);
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
switch (type?.description) {
|
|
176
|
+
case "null":
|
|
177
|
+
return value === null;
|
|
178
|
+
case "string":
|
|
179
|
+
return typeof value === "string";
|
|
180
|
+
case "number":
|
|
181
|
+
case "float":
|
|
182
|
+
return typeof value === "number";
|
|
183
|
+
case "int":
|
|
184
|
+
return typeof value === "number" && Number.isInteger(value);
|
|
185
|
+
case "boolean":
|
|
186
|
+
return typeof value === "boolean";
|
|
187
|
+
case "object":
|
|
188
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
189
|
+
}
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
function getTypeDescription(type) {
|
|
193
|
+
if (Array.isArray(type)) {
|
|
194
|
+
return type.map((t) => getTypeDescription(t)).join(" | ");
|
|
195
|
+
}
|
|
196
|
+
return type.description || "";
|
|
197
|
+
}
|
|
198
|
+
function whatTypeIs(value) {
|
|
199
|
+
if (typeof value === "number" && Number.isInteger(value)) {
|
|
200
|
+
return "int";
|
|
201
|
+
}
|
|
202
|
+
if (Array.isArray(value)) {
|
|
203
|
+
return "array";
|
|
204
|
+
}
|
|
205
|
+
if (value === null) {
|
|
206
|
+
return "null";
|
|
207
|
+
}
|
|
208
|
+
return typeof value;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// src/http/status.ts
|
|
212
|
+
var Status = {
|
|
213
|
+
// 1xx Informational
|
|
214
|
+
CONTINUE: 100,
|
|
215
|
+
SWITCHING_PROTOCOLS: 101,
|
|
216
|
+
PROCESSING: 102,
|
|
217
|
+
EARLY_HINTS: 103,
|
|
218
|
+
// 2xx Success
|
|
219
|
+
OK: 200,
|
|
220
|
+
CREATED: 201,
|
|
221
|
+
ACCEPTED: 202,
|
|
222
|
+
NON_AUTHORITATIVE_INFORMATION: 203,
|
|
223
|
+
NO_CONTENT: 204,
|
|
224
|
+
RESET_CONTENT: 205,
|
|
225
|
+
PARTIAL_CONTENT: 206,
|
|
226
|
+
MULTI_STATUS: 207,
|
|
227
|
+
ALREADY_REPORTED: 208,
|
|
228
|
+
IM_USED: 226,
|
|
229
|
+
// 3xx Redirection
|
|
230
|
+
MULTIPLE_CHOICES: 300,
|
|
231
|
+
MOVED_PERMANENTLY: 301,
|
|
232
|
+
FOUND: 302,
|
|
233
|
+
SEE_OTHER: 303,
|
|
234
|
+
NOT_MODIFIED: 304,
|
|
235
|
+
TEMPORARY_REDIRECT: 307,
|
|
236
|
+
PERMANENT_REDIRECT: 308,
|
|
237
|
+
// 4xx Client Errors
|
|
238
|
+
BAD_REQUEST: 400,
|
|
239
|
+
UNAUTHORIZED: 401,
|
|
240
|
+
PAYMENT_REQUIRED: 402,
|
|
241
|
+
FORBIDDEN: 403,
|
|
242
|
+
NOT_FOUND: 404,
|
|
243
|
+
METHOD_NOT_ALLOWED: 405,
|
|
244
|
+
NOT_ACCEPTABLE: 406,
|
|
245
|
+
PROXY_AUTHENTICATION_REQUIRED: 407,
|
|
246
|
+
REQUEST_TIMEOUT: 408,
|
|
247
|
+
CONFLICT: 409,
|
|
248
|
+
GONE: 410,
|
|
249
|
+
LENGTH_REQUIRED: 411,
|
|
250
|
+
PRECONDITION_FAILED: 412,
|
|
251
|
+
PAYLOAD_TOO_LARGE: 413,
|
|
252
|
+
URI_TOO_LONG: 414,
|
|
253
|
+
UNSUPPORTED_MEDIA_TYPE: 415,
|
|
254
|
+
RANGE_NOT_SATISFIABLE: 416,
|
|
255
|
+
EXPECTATION_FAILED: 417,
|
|
256
|
+
IM_A_TEAPOT: 418,
|
|
257
|
+
MISDIRECTED_REQUEST: 421,
|
|
258
|
+
UNPROCESSABLE_CONTENT: 422,
|
|
259
|
+
LOCKED: 423,
|
|
260
|
+
FAILED_DEPENDENCY: 424,
|
|
261
|
+
UPGRADE_REQUIRED: 426,
|
|
262
|
+
PRECONDITION_REQUIRED: 428,
|
|
263
|
+
TOO_MANY_REQUESTS: 429,
|
|
264
|
+
REQUEST_HEADER_FIELDS_TOO_LARGE: 431,
|
|
265
|
+
UNAVAILABLE_FOR_LEGAL_REASONS: 451,
|
|
266
|
+
// 5xx Server Errors
|
|
267
|
+
INTERNAL_SERVER_ERROR: 500,
|
|
268
|
+
NOT_IMPLEMENTED: 501,
|
|
269
|
+
BAD_GATEWAY: 502,
|
|
270
|
+
SERVICE_UNAVAILABLE: 503,
|
|
271
|
+
GATEWAY_TIMEOUT: 504,
|
|
272
|
+
HTTP_VERSION_NOT_SUPPORTED: 505,
|
|
273
|
+
VARIANT_ALSO_NEGOTIATES: 506,
|
|
274
|
+
INSUFFICIENT_STORAGE: 507,
|
|
275
|
+
LOOP_DETECTED: 508,
|
|
276
|
+
NOT_EXTENDED: 510,
|
|
277
|
+
NETWORK_AUTHENTICATION_REQUIRED: 511
|
|
278
|
+
};
|
|
279
|
+
export {
|
|
280
|
+
Status,
|
|
281
|
+
Types,
|
|
282
|
+
ValidationException,
|
|
283
|
+
Validator
|
|
284
|
+
};
|
|
285
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/http/validatorTypes.ts","../../src/http/exceptions.ts","../../src/http/validador.ts","../../src/http/status.ts"],"sourcesContent":["import type { ValidationException } from \"./exceptions.js\";\r\n\r\nexport class ArrayType {\r\n type: PrimitiveType[];\r\n description = \"array\";\r\n empty: boolean = false;\r\n\r\n constructor(...type: PrimitiveType[]) {\r\n this.type = [...type];\r\n this.empty = false;\r\n\r\n const types = type.map((t) => t.description);\r\n this.description = `array(${types.join(\" | \")})`;\r\n }\r\n\r\n canBeEmpty() {\r\n this.empty = true;\r\n return this;\r\n }\r\n}\r\n\r\nexport type FieldDefinition = {\r\n type: ValidatorType;\r\n required?: boolean;\r\n validator?: (value: unknown) => unknown | ValidationException;\r\n};\r\n\r\nexport type ObjectFields = {\r\n [name: string]: FieldDefinition;\r\n};\r\n\r\nexport class ObjectType {\r\n fields: ObjectFields;\r\n description = \"object\";\r\n\r\n constructor(fields: ObjectFields) {\r\n this.fields = fields;\r\n\r\n const names = Object.keys(fields);\r\n\r\n this.description = `object{${names.join(\", \")}}`;\r\n }\r\n}\r\n\r\nfunction Array(...type: PrimitiveType[]) {\r\n return new ArrayType(...type);\r\n}\r\n\r\nfunction Struct(fields: ObjectFields) {\r\n return new ObjectType(fields);\r\n}\r\n\r\nexport const Types = {\r\n String: Symbol(\"string\"),\r\n Number: Symbol(\"number\"),\r\n Int: Symbol(\"int\"),\r\n Float: Symbol(\"float\"),\r\n Boolean: Symbol(\"boolean\"),\r\n Object: Symbol(\"object\"),\r\n Null: Symbol(\"null\"),\r\n\r\n Array,\r\n Struct,\r\n};\r\n\r\nexport type PrimitiveType =\r\n | typeof Types.String\r\n | typeof Types.Number\r\n | typeof Types.Int\r\n | typeof Types.Float\r\n | typeof Types.Boolean\r\n | typeof Types.Object\r\n | typeof Types.Null;\r\n\r\nexport type MultiType = PrimitiveType[];\r\n\r\nexport type ValidatorType =\r\n | PrimitiveType\r\n | MultiType\r\n | ArrayType\r\n | ObjectType;","class ValidationException extends Error {\r\n constructor(message: string) {\r\n super(message);\r\n\r\n this.name = \"ValidationException\";\r\n }\r\n}\r\n\r\nclass RequestBodyUndefinedException extends ValidationException {\r\n constructor() {\r\n super(\"Request body is undefined\");\r\n\r\n this.name = \"RequestBodyUndefinedException\";\r\n }\r\n}\r\n\r\nclass InvalidBodyException extends ValidationException {\r\n constructor() {\r\n super(\"Request body must be an object\");\r\n\r\n this.name = \"InvalidBodyException\";\r\n }\r\n}\r\n\r\nclass RequiredFieldException extends ValidationException {\r\n constructor(\r\n public readonly field: string,\r\n ) {\r\n super(`Field \"${field}\" is required`);\r\n\r\n this.name = \"RequiredFieldException\";\r\n }\r\n}\r\n\r\nclass InvalidTypeException extends ValidationException {\r\n constructor(\r\n public readonly field: string,\r\n public readonly expected: string | undefined,\r\n public readonly received: string,\r\n ) {\r\n super(\r\n `Field \"${field}\" must be of type ${expected}, received ${received}`,\r\n );\r\n\r\n this.name = \"InvalidTypeException\";\r\n }\r\n}\r\n\r\nclass CustomValidationException extends ValidationException {\r\n constructor(\r\n public readonly field: string,\r\n ) {\r\n super(`Field \"${field}\" failed custom validation`);\r\n\r\n this.name = \"CustomValidationException\";\r\n }\r\n}\r\n\r\nclass EmptyArrayException extends ValidationException {\r\n constructor(\r\n public readonly field: string,\r\n ) {\r\n super(`Field \"${field}\" must not be an empty array`);\r\n\r\n this.name = \"EmptyArrayException\";\r\n }\r\n}\r\n\r\nexport {\r\n ValidationException,\r\n RequestBodyUndefinedException,\r\n InvalidBodyException,\r\n RequiredFieldException,\r\n InvalidTypeException,\r\n CustomValidationException,\r\n EmptyArrayException\r\n}","import {\r\n ValidationException,\r\n RequestBodyUndefinedException,\r\n InvalidBodyException,\r\n RequiredFieldException,\r\n InvalidTypeException,\r\n EmptyArrayException\r\n} from \"./exceptions.js\";\r\n\r\nimport {\r\n ArrayType,\r\n ObjectType,\r\n Types\r\n} from \"./validatorTypes.js\";\r\n\r\nimport type {\r\n ValidatorType,\r\n ObjectFields\r\n} from \"./validatorTypes.js\";\r\n\r\ntype FieldDefinition = {\r\n type: ValidatorType;\r\n required?: boolean;\r\n validator?: (\r\n value: unknown\r\n ) => unknown | ValidationException;\r\n};\r\n\r\ninterface BodyFields {\r\n [name: string]: FieldDefinition;\r\n}\r\n\r\ninterface Body {\r\n [name: string]: unknown;\r\n}\r\n\r\nconst Validator = {\r\n body(body: Body, fields: BodyFields) {\r\n if (body === undefined) {\r\n throw new RequestBodyUndefinedException();\r\n }\r\n\r\n if (\r\n typeof body !== \"object\" ||\r\n body === null ||\r\n Array.isArray(body)\r\n ) {\r\n throw new InvalidBodyException();\r\n }\r\n\r\n return validateObject(body, fields);\r\n }\r\n};\r\n\r\nfunction validateObject(\r\n body: unknown,\r\n fields: ObjectFields,\r\n parentPath = \"\"\r\n): Record<string, unknown> {\r\n\r\n if (\r\n typeof body !== \"object\" ||\r\n body === null ||\r\n Array.isArray(body)\r\n ) {\r\n throw new InvalidBodyException();\r\n }\r\n\r\n const bodyData = body as Record<string, unknown>;\r\n const data: Record<string, unknown> = {};\r\n\r\n for (const name in fields) {\r\n const field = fields[name];\r\n\r\n if (!field) {\r\n continue;\r\n }\r\n\r\n const fieldPath = parentPath\r\n ? `${parentPath}.${name}`\r\n : name;\r\n\r\n let value = bodyData[name];\r\n\r\n // Required field\r\n if (field.required && value === undefined) {\r\n throw new RequiredFieldException(fieldPath);\r\n }\r\n\r\n // Optional field not provided\r\n if (value === undefined) {\r\n continue;\r\n }\r\n\r\n // Validate type\r\n if (!validateType(field.type, value, fieldPath)) {\r\n const type = getTypeDescription(field.type);\r\n\r\n throw new InvalidTypeException(\r\n fieldPath,\r\n type,\r\n whatTypeIs(value)\r\n );\r\n }\r\n\r\n // Custom validator\r\n if (field.validator) {\r\n const result = field.validator(value);\r\n\r\n if (result instanceof ValidationException) {\r\n throw result;\r\n }\r\n\r\n value = result;\r\n }\r\n\r\n data[name] = value;\r\n }\r\n\r\n return data;\r\n}\r\n\r\nfunction validateType(\r\n type: ValidatorType | undefined,\r\n value: unknown,\r\n fieldName = \"\"\r\n): boolean {\r\n\r\n // Multiple types\r\n if (Array.isArray(type)) {\r\n return type.some((t) =>\r\n validateType(t, value, fieldName)\r\n );\r\n }\r\n\r\n // Array\r\n if (type instanceof ArrayType) {\r\n\r\n if (!Array.isArray(value)) {\r\n return false;\r\n }\r\n\r\n if (!type.empty && value.length === 0) {\r\n throw new EmptyArrayException(fieldName);\r\n }\r\n\r\n for (const item of value) {\r\n if (!validateType(type.type, item, fieldName)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n // Object structure\r\n if (type instanceof ObjectType) {\r\n\r\n if (\r\n typeof value !== \"object\" ||\r\n value === null ||\r\n Array.isArray(value)\r\n ) {\r\n return false;\r\n }\r\n\r\n validateObject(\r\n value,\r\n type.fields,\r\n fieldName\r\n );\r\n\r\n return true;\r\n }\r\n\r\n // Primitive types\r\n switch (type?.description) {\r\n\r\n case \"null\":\r\n return value === null;\r\n\r\n case \"string\":\r\n return typeof value === \"string\";\r\n\r\n case \"number\":\r\n case \"float\":\r\n return typeof value === \"number\";\r\n\r\n case \"int\":\r\n return (\r\n typeof value === \"number\" &&\r\n Number.isInteger(value)\r\n );\r\n\r\n case \"boolean\":\r\n return typeof value === \"boolean\";\r\n\r\n case \"object\":\r\n return (\r\n typeof value === \"object\" &&\r\n value !== null &&\r\n !Array.isArray(value)\r\n );\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction getTypeDescription(\r\n type: ValidatorType\r\n): string {\r\n\r\n if (Array.isArray(type)) {\r\n return type\r\n .map((t) => getTypeDescription(t))\r\n .join(\" | \");\r\n }\r\n\r\n return type.description || \"\";\r\n}\r\n\r\nfunction whatTypeIs(value: unknown): string {\r\n\r\n if (\r\n typeof value === \"number\" &&\r\n Number.isInteger(value)\r\n ) {\r\n return \"int\";\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return \"array\";\r\n }\r\n\r\n if (value === null) {\r\n return \"null\";\r\n }\r\n\r\n return typeof value;\r\n}\r\n\r\nexport {\r\n Validator\r\n};","const Status = {\r\n // 1xx Informational\r\n CONTINUE: 100,\r\n SWITCHING_PROTOCOLS: 101,\r\n PROCESSING: 102,\r\n EARLY_HINTS: 103,\r\n\r\n // 2xx Success\r\n OK: 200,\r\n CREATED: 201,\r\n ACCEPTED: 202,\r\n NON_AUTHORITATIVE_INFORMATION: 203,\r\n NO_CONTENT: 204,\r\n RESET_CONTENT: 205,\r\n PARTIAL_CONTENT: 206,\r\n MULTI_STATUS: 207,\r\n ALREADY_REPORTED: 208,\r\n IM_USED: 226,\r\n\r\n // 3xx Redirection\r\n MULTIPLE_CHOICES: 300,\r\n MOVED_PERMANENTLY: 301,\r\n FOUND: 302,\r\n SEE_OTHER: 303,\r\n NOT_MODIFIED: 304,\r\n TEMPORARY_REDIRECT: 307,\r\n PERMANENT_REDIRECT: 308,\r\n\r\n // 4xx Client Errors\r\n BAD_REQUEST: 400,\r\n UNAUTHORIZED: 401,\r\n PAYMENT_REQUIRED: 402,\r\n FORBIDDEN: 403,\r\n NOT_FOUND: 404,\r\n METHOD_NOT_ALLOWED: 405,\r\n NOT_ACCEPTABLE: 406,\r\n PROXY_AUTHENTICATION_REQUIRED: 407,\r\n REQUEST_TIMEOUT: 408,\r\n CONFLICT: 409,\r\n GONE: 410,\r\n LENGTH_REQUIRED: 411,\r\n PRECONDITION_FAILED: 412,\r\n PAYLOAD_TOO_LARGE: 413,\r\n URI_TOO_LONG: 414,\r\n UNSUPPORTED_MEDIA_TYPE: 415,\r\n RANGE_NOT_SATISFIABLE: 416,\r\n EXPECTATION_FAILED: 417,\r\n IM_A_TEAPOT: 418,\r\n MISDIRECTED_REQUEST: 421,\r\n UNPROCESSABLE_CONTENT: 422,\r\n LOCKED: 423,\r\n FAILED_DEPENDENCY: 424,\r\n UPGRADE_REQUIRED: 426,\r\n PRECONDITION_REQUIRED: 428,\r\n TOO_MANY_REQUESTS: 429,\r\n REQUEST_HEADER_FIELDS_TOO_LARGE: 431,\r\n UNAVAILABLE_FOR_LEGAL_REASONS: 451,\r\n\r\n // 5xx Server Errors\r\n INTERNAL_SERVER_ERROR: 500,\r\n NOT_IMPLEMENTED: 501,\r\n BAD_GATEWAY: 502,\r\n SERVICE_UNAVAILABLE: 503,\r\n GATEWAY_TIMEOUT: 504,\r\n HTTP_VERSION_NOT_SUPPORTED: 505,\r\n VARIANT_ALSO_NEGOTIATES: 506,\r\n INSUFFICIENT_STORAGE: 507,\r\n LOOP_DETECTED: 508,\r\n NOT_EXTENDED: 510,\r\n NETWORK_AUTHENTICATION_REQUIRED: 511\r\n} as const;\r\n\r\nexport {\r\n Status\r\n};"],"mappings":"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","names":["Array"]}
|
package/dist/index.cjs
CHANGED
|
@@ -28,14 +28,27 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
29
|
|
|
30
30
|
// src/index.ts
|
|
31
|
-
var
|
|
32
|
-
__export(
|
|
33
|
-
|
|
31
|
+
var src_exports = {};
|
|
32
|
+
__export(src_exports, {
|
|
33
|
+
QuikRouter: () => QuikRouter,
|
|
34
34
|
Router: () => Router,
|
|
35
35
|
Server: () => Server,
|
|
36
|
+
ServerInvalidRouteError: () => ServerInvalidRouteError,
|
|
36
37
|
logger: () => logger
|
|
37
38
|
});
|
|
38
|
-
module.exports = __toCommonJS(
|
|
39
|
+
module.exports = __toCommonJS(src_exports);
|
|
40
|
+
|
|
41
|
+
// src/core/errors/serverErrors.ts
|
|
42
|
+
var ServerInvalidRouteError = class extends Error {
|
|
43
|
+
constructor(path3) {
|
|
44
|
+
super(`"${path3}" is not a QuikRouter instance.`);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
var ServerInvalidCronError = class extends Error {
|
|
48
|
+
constructor() {
|
|
49
|
+
super(`Invalid object, must be a QuikCron instance.`);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
39
52
|
|
|
40
53
|
// src/core/logger.ts
|
|
41
54
|
var import_node_fs = __toESM(require("fs"), 1);
|
|
@@ -121,7 +134,11 @@ var en_default = {
|
|
|
121
134
|
},
|
|
122
135
|
server: {
|
|
123
136
|
name: "server",
|
|
124
|
-
start: "Server running at"
|
|
137
|
+
start: "Server running at",
|
|
138
|
+
routers_loaded: "routers loaded",
|
|
139
|
+
crons_loaded: "crons loaded",
|
|
140
|
+
static_loaded: "static dirs loaded",
|
|
141
|
+
static_warn: "directory does not exist"
|
|
125
142
|
},
|
|
126
143
|
time: {
|
|
127
144
|
invalidTimeZone1: "Invalid time zone:",
|
|
@@ -142,7 +159,11 @@ var es_default = {
|
|
|
142
159
|
},
|
|
143
160
|
server: {
|
|
144
161
|
name: "servidor",
|
|
145
|
-
start: "Servidor corriendo en"
|
|
162
|
+
start: "Servidor corriendo en",
|
|
163
|
+
routers_loaded: "rutas cargadas",
|
|
164
|
+
crons_loaded: "crons cargados",
|
|
165
|
+
static_loaded: "carpetas estaticas cargadas",
|
|
166
|
+
static_warn: "no existe el directorio"
|
|
146
167
|
},
|
|
147
168
|
time: {
|
|
148
169
|
invalidTimeZone1: "Zona horaria inv\xE1lida:",
|
|
@@ -327,6 +348,9 @@ var logger = {
|
|
|
327
348
|
...content
|
|
328
349
|
);
|
|
329
350
|
},
|
|
351
|
+
clear() {
|
|
352
|
+
console.clear();
|
|
353
|
+
},
|
|
330
354
|
custom(level, color2, file, ...content) {
|
|
331
355
|
write(level, color2, file, ...content);
|
|
332
356
|
}
|
|
@@ -334,7 +358,7 @@ var logger = {
|
|
|
334
358
|
|
|
335
359
|
// src/core/router.ts
|
|
336
360
|
var import_express = require("express");
|
|
337
|
-
var
|
|
361
|
+
var QuikRouter = class {
|
|
338
362
|
router;
|
|
339
363
|
pendingMiddleware = [];
|
|
340
364
|
currentPath = "";
|
|
@@ -345,8 +369,8 @@ var QuickRouter = class {
|
|
|
345
369
|
this.pendingMiddleware.push(...handlers);
|
|
346
370
|
return this;
|
|
347
371
|
}
|
|
348
|
-
path(
|
|
349
|
-
this.currentPath =
|
|
372
|
+
path(path3) {
|
|
373
|
+
this.currentPath = path3;
|
|
350
374
|
return this;
|
|
351
375
|
}
|
|
352
376
|
register(method, handler) {
|
|
@@ -382,12 +406,20 @@ var QuickRouter = class {
|
|
|
382
406
|
}
|
|
383
407
|
};
|
|
384
408
|
function Router() {
|
|
385
|
-
return new
|
|
409
|
+
return new QuikRouter();
|
|
386
410
|
}
|
|
387
411
|
|
|
388
412
|
// src/core/server.ts
|
|
389
413
|
var import_express2 = __toESM(require("express"), 1);
|
|
390
414
|
var import_node_http = __toESM(require("http"), 1);
|
|
415
|
+
var import_node_path2 = __toESM(require("path"), 1);
|
|
416
|
+
var import_node_fs2 = __toESM(require("fs"), 1);
|
|
417
|
+
|
|
418
|
+
// src/cron/cron.ts
|
|
419
|
+
var import_node_cron = __toESM(require("node-cron"), 1);
|
|
420
|
+
var import_node_cron2 = require("node-cron");
|
|
421
|
+
|
|
422
|
+
// src/core/server.ts
|
|
391
423
|
var defaultConfig2 = {
|
|
392
424
|
language: "en",
|
|
393
425
|
bodyParser: {
|
|
@@ -400,55 +432,59 @@ var defaultConfig2 = {
|
|
|
400
432
|
};
|
|
401
433
|
var QuikServer = class {
|
|
402
434
|
app;
|
|
403
|
-
|
|
435
|
+
httpServer;
|
|
404
436
|
middlewares = [];
|
|
405
437
|
routes = {};
|
|
406
|
-
|
|
438
|
+
staticDirs = [];
|
|
439
|
+
crons = [];
|
|
440
|
+
config;
|
|
407
441
|
constructor() {
|
|
408
442
|
this.app = (0, import_express2.default)();
|
|
409
|
-
this
|
|
410
|
-
this.
|
|
443
|
+
this.config = structuredClone(defaultConfig2);
|
|
444
|
+
this.httpServer = import_node_http.default.createServer(
|
|
411
445
|
this.app
|
|
412
446
|
);
|
|
413
447
|
}
|
|
414
|
-
config() {
|
|
415
|
-
return Object.freeze(structuredClone(this.#config));
|
|
416
|
-
}
|
|
417
448
|
setConfig(config2) {
|
|
418
|
-
this
|
|
419
|
-
...this
|
|
449
|
+
this.config = {
|
|
450
|
+
...this.config,
|
|
420
451
|
...config2,
|
|
421
452
|
http: {
|
|
422
|
-
...this
|
|
453
|
+
...this.config.http,
|
|
423
454
|
...config2.http
|
|
424
455
|
},
|
|
425
456
|
express: {
|
|
426
|
-
...this
|
|
457
|
+
...this.config.express,
|
|
427
458
|
...config2.express
|
|
428
459
|
}
|
|
429
460
|
};
|
|
430
461
|
if (config2.timeZone && !isValidTimeZone(config2.timeZone)) {
|
|
431
|
-
const messages = translate(this
|
|
462
|
+
const messages = translate(this.config.language, "time");
|
|
432
463
|
logger.warning(
|
|
433
464
|
`${messages.invalidTimeZone1} ${config2.timeZone}. ${messages.invalidTimeZone2}`
|
|
434
465
|
);
|
|
435
466
|
}
|
|
436
467
|
return this;
|
|
437
468
|
}
|
|
438
|
-
|
|
469
|
+
addMiddleware(...middlewares) {
|
|
439
470
|
this.middlewares.push(
|
|
440
471
|
...middlewares
|
|
441
472
|
);
|
|
442
473
|
return this;
|
|
443
474
|
}
|
|
444
|
-
|
|
445
|
-
|
|
475
|
+
addRoute(path3, router) {
|
|
476
|
+
if (!(router instanceof QuikRouter)) {
|
|
477
|
+
throw new ServerInvalidRouteError(path3);
|
|
478
|
+
}
|
|
479
|
+
if (!path3.startsWith("/"))
|
|
480
|
+
path3 = "/" + path3;
|
|
481
|
+
this.routes[path3] = router;
|
|
446
482
|
return this;
|
|
447
483
|
}
|
|
448
|
-
listen() {
|
|
449
|
-
const { port, host } = this
|
|
450
|
-
const messages = translate(this
|
|
451
|
-
this.
|
|
484
|
+
#listen() {
|
|
485
|
+
const { port, host } = this.config.http;
|
|
486
|
+
const messages = translate(this.config.language, "server");
|
|
487
|
+
this.httpServer.listen(
|
|
452
488
|
port,
|
|
453
489
|
host,
|
|
454
490
|
() => {
|
|
@@ -457,18 +493,39 @@ var QuikServer = class {
|
|
|
457
493
|
);
|
|
458
494
|
return this;
|
|
459
495
|
}
|
|
496
|
+
addCron(cron2) {
|
|
497
|
+
if (cron2.constructor.name != "QuikCron") {
|
|
498
|
+
throw new ServerInvalidCronError();
|
|
499
|
+
}
|
|
500
|
+
this.crons.push(cron2);
|
|
501
|
+
return this;
|
|
502
|
+
}
|
|
503
|
+
addStaticDir(...paths) {
|
|
504
|
+
for (const i in paths) {
|
|
505
|
+
const dir = paths[i] ?? "";
|
|
506
|
+
const dirPath = import_node_path2.default.resolve(dir);
|
|
507
|
+
const exists = import_node_fs2.default.existsSync(dirPath);
|
|
508
|
+
if (!exists) {
|
|
509
|
+
const messages = translate(this.config.language, "server");
|
|
510
|
+
logger.warning(`[ STATIC ] "${dir}" ${messages.static_warn}`);
|
|
511
|
+
continue;
|
|
512
|
+
}
|
|
513
|
+
this.staticDirs.push(...paths);
|
|
514
|
+
}
|
|
515
|
+
return this;
|
|
516
|
+
}
|
|
460
517
|
#configureHTTP() {
|
|
461
|
-
const config2 = this
|
|
518
|
+
const config2 = this.config.http;
|
|
462
519
|
if (config2.timeout)
|
|
463
|
-
this.
|
|
520
|
+
this.httpServer.timeout = config2.timeout;
|
|
464
521
|
if (config2.keepAlive)
|
|
465
|
-
this.
|
|
522
|
+
this.httpServer.keepAliveTimeout = config2.keepAlive;
|
|
466
523
|
if (config2.maxConnections)
|
|
467
|
-
this.
|
|
524
|
+
this.httpServer.maxConnections = config2.maxConnections;
|
|
468
525
|
return this;
|
|
469
526
|
}
|
|
470
527
|
#configureExpress() {
|
|
471
|
-
const config2 = this
|
|
528
|
+
const config2 = this.config.express;
|
|
472
529
|
if (config2.trustProxy !== void 0) {
|
|
473
530
|
this.app.set(
|
|
474
531
|
"trust proxy",
|
|
@@ -478,7 +535,7 @@ var QuikServer = class {
|
|
|
478
535
|
return this;
|
|
479
536
|
}
|
|
480
537
|
#configureMiddleware() {
|
|
481
|
-
const bodyParser = this
|
|
538
|
+
const bodyParser = this.config.bodyParser;
|
|
482
539
|
switch (bodyParser.type) {
|
|
483
540
|
case "json":
|
|
484
541
|
this.app.use(
|
|
@@ -506,34 +563,53 @@ var QuikServer = class {
|
|
|
506
563
|
return this;
|
|
507
564
|
}
|
|
508
565
|
#configureRoutes() {
|
|
509
|
-
for (const [
|
|
566
|
+
for (const [path3, router] of Object.entries(this.routes)) {
|
|
510
567
|
this.app.use(
|
|
511
|
-
|
|
568
|
+
path3,
|
|
512
569
|
router.router
|
|
513
570
|
);
|
|
514
571
|
}
|
|
572
|
+
const messages = translate(this.config.language, "server");
|
|
573
|
+
logger.info(`[ ROUTER ] ${Object.entries(this.routes).length} ${messages.routers_loaded}.`);
|
|
574
|
+
return this;
|
|
575
|
+
}
|
|
576
|
+
#loadCrons() {
|
|
577
|
+
for (const cron2 of this.crons) {
|
|
578
|
+
cron2.start();
|
|
579
|
+
}
|
|
580
|
+
const messages = translate(this.config.language, "server");
|
|
581
|
+
logger.info(`[ CRON ] ${this.crons.length} ${messages.crons_loaded}.`);
|
|
582
|
+
return this;
|
|
583
|
+
}
|
|
584
|
+
#loadStaticDirs() {
|
|
585
|
+
for (const dir of this.staticDirs) {
|
|
586
|
+
const dirPath = import_node_path2.default.resolve(dir);
|
|
587
|
+
this.app.use(import_express2.default.static(dirPath));
|
|
588
|
+
}
|
|
589
|
+
const messages = translate(this.config.language, "server");
|
|
590
|
+
logger.info(`[ STATIC ] ${this.staticDirs.length} ${messages.static_loaded}.`);
|
|
515
591
|
return this;
|
|
516
592
|
}
|
|
517
593
|
start() {
|
|
518
594
|
this.#configureExpress();
|
|
519
595
|
this.#configureMiddleware();
|
|
596
|
+
this.#loadStaticDirs();
|
|
520
597
|
this.#configureRoutes();
|
|
598
|
+
this.#loadCrons();
|
|
521
599
|
this.#configureHTTP();
|
|
522
|
-
this
|
|
600
|
+
this.#listen();
|
|
523
601
|
return this;
|
|
524
602
|
}
|
|
525
603
|
};
|
|
526
604
|
function Server() {
|
|
527
605
|
return new QuikServer();
|
|
528
606
|
}
|
|
529
|
-
|
|
530
|
-
// src/cron/cron.ts
|
|
531
|
-
var import_node_cron = __toESM(require("node-cron"), 1);
|
|
532
607
|
// Annotate the CommonJS export names for ESM import in node:
|
|
533
608
|
0 && (module.exports = {
|
|
534
|
-
|
|
609
|
+
QuikRouter,
|
|
535
610
|
Router,
|
|
536
611
|
Server,
|
|
612
|
+
ServerInvalidRouteError,
|
|
537
613
|
logger
|
|
538
614
|
});
|
|
539
615
|
//# sourceMappingURL=index.cjs.map
|