@discordkit/core 3.2.0 → 4.0.0
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 +416 -0
- package/README.md +52 -0
- package/dist/index.d.mts +23 -0
- package/dist/index.mjs +23 -0
- package/dist/requests/DiscordSession.d.mts +30 -0
- package/dist/requests/DiscordSession.mjs +202 -0
- package/dist/requests/addParams.d.mts +15 -0
- package/dist/requests/addParams.mjs +24 -0
- package/dist/requests/buildURL.d.mts +7 -0
- package/dist/requests/buildURL.mjs +7 -0
- package/dist/requests/getAsset.d.mts +7 -0
- package/dist/requests/getAsset.mjs +6 -0
- package/dist/requests/index.d.mts +9 -0
- package/dist/requests/index.mjs +9 -0
- package/dist/requests/methods.d.mts +63 -0
- package/dist/requests/methods.mjs +10 -0
- package/dist/requests/request.d.mts +27 -0
- package/dist/requests/request.mjs +29 -0
- package/dist/requests/toProcedure.d.mts +40 -0
- package/dist/requests/toProcedure.mjs +27 -0
- package/dist/requests/toQuery.d.mts +36 -0
- package/dist/requests/toQuery.mjs +17 -0
- package/dist/requests/toValidated.d.mts +16 -0
- package/dist/requests/toValidated.mjs +25 -0
- package/dist/requests/{verifyKey.d.ts → verifyKey.d.mts} +4 -1
- package/dist/requests/verifyKey.mjs +63 -0
- package/dist/utils/isBetween.d.mts +4 -0
- package/dist/utils/isBetween.mjs +4 -0
- package/dist/utils/{isNonNullable.js → isNonNullable.d.mts} +5 -2
- package/dist/utils/isNonNullable.mjs +22 -0
- package/dist/utils/isNumericString.d.mts +4 -0
- package/dist/utils/isNumericString.mjs +4 -0
- package/dist/utils/isObject.d.mts +4 -0
- package/dist/utils/isObject.mjs +4 -0
- package/dist/utils/sleep.d.mts +7 -0
- package/dist/utils/sleep.mjs +7 -0
- package/dist/utils/toCamelCase.d.mts +4 -0
- package/dist/utils/toCamelCase.mjs +4 -0
- package/dist/utils/toCamelKeys.d.mts +6 -0
- package/dist/utils/toCamelKeys.mjs +13 -0
- package/dist/utils/toSnakeCase.d.mts +4 -0
- package/dist/utils/toSnakeCase.mjs +4 -0
- package/dist/utils/toSnakeKeys.d.mts +6 -0
- package/dist/utils/toSnakeKeys.mjs +13 -0
- package/dist/validations/asDigits.d.mts +12 -0
- package/dist/validations/asDigits.mjs +10 -0
- package/dist/validations/asInteger.d.mts +12 -0
- package/dist/validations/asInteger.mjs +10 -0
- package/dist/validations/bitfield.d.mts +23 -0
- package/dist/validations/bitfield.mjs +20 -0
- package/dist/validations/boundedArray.d.mts +13 -0
- package/dist/validations/boundedArray.mjs +9 -0
- package/dist/validations/boundedInteger.d.mts +13 -0
- package/dist/validations/boundedInteger.mjs +9 -0
- package/dist/validations/boundedString.d.mts +14 -0
- package/dist/validations/boundedString.mjs +10 -0
- package/dist/validations/datauri.d.mts +24 -0
- package/dist/validations/datauri.mjs +17 -0
- package/dist/validations/fileUpload.d.mts +129 -0
- package/dist/validations/fileUpload.mjs +114 -0
- package/dist/validations/hasMimeType.d.mts +16 -0
- package/dist/validations/hasMimeType.mjs +16 -0
- package/dist/validations/hasSize.d.mts +10 -0
- package/dist/validations/hasSize.mjs +12 -0
- package/dist/validations/index.d.mts +15 -0
- package/dist/validations/index.mjs +15 -0
- package/dist/validations/schema.d.mts +102 -0
- package/dist/validations/schema.mjs +109 -0
- package/dist/validations/{snowflake.d.ts → snowflake.d.mts} +9 -7
- package/dist/validations/snowflake.mjs +28 -0
- package/dist/validations/{timestamp.d.ts → timestamp.d.mts} +5 -1
- package/dist/validations/timestamp.mjs +6 -0
- package/dist/validations/toBlob.d.mts +9 -0
- package/dist/validations/toBlob.mjs +17 -0
- package/dist/validations/url.d.mts +6 -0
- package/dist/validations/url.mjs +5 -0
- package/package.json +13 -23
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -3
- package/dist/index.js.map +0 -1
- package/dist/requests/DiscordSession.d.ts +0 -25
- package/dist/requests/DiscordSession.js +0 -255
- package/dist/requests/DiscordSession.js.map +0 -1
- package/dist/requests/addParams.d.ts +0 -2
- package/dist/requests/addParams.js +0 -11
- package/dist/requests/addParams.js.map +0 -1
- package/dist/requests/buildURL.d.ts +0 -2
- package/dist/requests/buildURL.js +0 -4
- package/dist/requests/buildURL.js.map +0 -1
- package/dist/requests/getAsset.d.ts +0 -2
- package/dist/requests/getAsset.js +0 -3
- package/dist/requests/getAsset.js.map +0 -1
- package/dist/requests/index.d.ts +0 -8
- package/dist/requests/index.js +0 -9
- package/dist/requests/index.js.map +0 -1
- package/dist/requests/methods.d.ts +0 -13
- package/dist/requests/methods.js +0 -8
- package/dist/requests/methods.js.map +0 -1
- package/dist/requests/request.d.ts +0 -2
- package/dist/requests/request.js +0 -30
- package/dist/requests/request.js.map +0 -1
- package/dist/requests/toProcedure.d.ts +0 -31
- package/dist/requests/toProcedure.js +0 -36
- package/dist/requests/toProcedure.js.map +0 -1
- package/dist/requests/toQuery.d.ts +0 -28
- package/dist/requests/toQuery.js +0 -9
- package/dist/requests/toQuery.js.map +0 -1
- package/dist/requests/toValidated.d.ts +0 -13
- package/dist/requests/toValidated.js +0 -29
- package/dist/requests/toValidated.js.map +0 -1
- package/dist/requests/verifyKey.js +0 -91
- package/dist/requests/verifyKey.js.map +0 -1
- package/dist/utils/isBetween.d.ts +0 -1
- package/dist/utils/isBetween.js +0 -2
- package/dist/utils/isBetween.js.map +0 -1
- package/dist/utils/isNonNullable.d.ts +0 -20
- package/dist/utils/isNonNullable.js.map +0 -1
- package/dist/utils/isNumericString.d.ts +0 -1
- package/dist/utils/isNumericString.js +0 -2
- package/dist/utils/isNumericString.js.map +0 -1
- package/dist/utils/isObject.d.ts +0 -1
- package/dist/utils/isObject.js +0 -2
- package/dist/utils/isObject.js.map +0 -1
- package/dist/utils/sleep.d.ts +0 -4
- package/dist/utils/sleep.js +0 -5
- package/dist/utils/sleep.js.map +0 -1
- package/dist/utils/toCamelCase.d.ts +0 -1
- package/dist/utils/toCamelCase.js +0 -2
- package/dist/utils/toCamelCase.js.map +0 -1
- package/dist/utils/toCamelKeys.d.ts +0 -2
- package/dist/utils/toCamelKeys.js +0 -16
- package/dist/utils/toCamelKeys.js.map +0 -1
- package/dist/utils/toSnakeCase.d.ts +0 -1
- package/dist/utils/toSnakeCase.js +0 -4
- package/dist/utils/toSnakeCase.js.map +0 -1
- package/dist/utils/toSnakeKeys.d.ts +0 -2
- package/dist/utils/toSnakeKeys.js +0 -16
- package/dist/utils/toSnakeKeys.js.map +0 -1
- package/dist/validations/asDigits.d.ts +0 -6
- package/dist/validations/asDigits.js +0 -6
- package/dist/validations/asDigits.js.map +0 -1
- package/dist/validations/asInteger.d.ts +0 -6
- package/dist/validations/asInteger.js +0 -6
- package/dist/validations/asInteger.js.map +0 -1
- package/dist/validations/bitfield.d.ts +0 -17
- package/dist/validations/bitfield.js +0 -37
- package/dist/validations/bitfield.js.map +0 -1
- package/dist/validations/boundedArray.d.ts +0 -6
- package/dist/validations/boundedArray.js +0 -8
- package/dist/validations/boundedArray.js.map +0 -1
- package/dist/validations/boundedInteger.d.ts +0 -6
- package/dist/validations/boundedInteger.js +0 -8
- package/dist/validations/boundedInteger.js.map +0 -1
- package/dist/validations/boundedString.d.ts +0 -6
- package/dist/validations/boundedString.js +0 -8
- package/dist/validations/boundedString.js.map +0 -1
- package/dist/validations/datauri.d.ts +0 -20
- package/dist/validations/datauri.js +0 -20
- package/dist/validations/datauri.js.map +0 -1
- package/dist/validations/hasMimeType.d.ts +0 -10
- package/dist/validations/hasMimeType.js +0 -18
- package/dist/validations/hasMimeType.js.map +0 -1
- package/dist/validations/hasSize.d.ts +0 -5
- package/dist/validations/hasSize.js +0 -13
- package/dist/validations/hasSize.js.map +0 -1
- package/dist/validations/index.d.ts +0 -12
- package/dist/validations/index.js +0 -13
- package/dist/validations/index.js.map +0 -1
- package/dist/validations/snowflake.js +0 -39
- package/dist/validations/snowflake.js.map +0 -1
- package/dist/validations/timestamp.js +0 -4
- package/dist/validations/timestamp.js.map +0 -1
- package/dist/validations/toBlob.d.ts +0 -4
- package/dist/validations/toBlob.js +0 -19
- package/dist/validations/toBlob.js.map +0 -1
- package/dist/validations/url.d.ts +0 -2
- package/dist/validations/url.js +0 -3
- package/dist/validations/url.js.map +0 -1
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Get the SubtleCrypto interface for the current environment
|
|
3
|
-
*/
|
|
4
|
-
const getSubtleCrypto = () => {
|
|
5
|
-
// Node.js environment
|
|
6
|
-
if (typeof globalThis.crypto !== `undefined`) {
|
|
7
|
-
return globalThis.crypto.subtle;
|
|
8
|
-
}
|
|
9
|
-
// Older Node.js versions
|
|
10
|
-
if (typeof global !== `undefined` && global.crypto?.subtle) {
|
|
11
|
-
return global.crypto.subtle;
|
|
12
|
-
}
|
|
13
|
-
// Browser environment
|
|
14
|
-
if (typeof window !== `undefined` && window.crypto?.subtle) {
|
|
15
|
-
return window.crypto.subtle;
|
|
16
|
-
}
|
|
17
|
-
throw new Error(`SubtleCrypto is not available in this environment`);
|
|
18
|
-
};
|
|
19
|
-
const subtleCrypto = getSubtleCrypto();
|
|
20
|
-
/**
|
|
21
|
-
* Convert various input types to Uint8Array
|
|
22
|
-
*/
|
|
23
|
-
function valueToUint8Array(value, encoding) {
|
|
24
|
-
// Already a Uint8Array
|
|
25
|
-
if (value instanceof Uint8Array) {
|
|
26
|
-
return value;
|
|
27
|
-
}
|
|
28
|
-
// ArrayBuffer
|
|
29
|
-
if (value instanceof ArrayBuffer) {
|
|
30
|
-
return new Uint8Array(value);
|
|
31
|
-
}
|
|
32
|
-
// Buffer (Node.js)
|
|
33
|
-
if (typeof Buffer !== `undefined` && Buffer.isBuffer(value)) {
|
|
34
|
-
return new Uint8Array(value);
|
|
35
|
-
}
|
|
36
|
-
// String
|
|
37
|
-
if (typeof value === `string`) {
|
|
38
|
-
if (encoding === `hex`) {
|
|
39
|
-
// Convert hex string to Uint8Array
|
|
40
|
-
const matches = value.match(/.{1,2}/g);
|
|
41
|
-
if (!matches) {
|
|
42
|
-
throw new Error(`Invalid hex string`);
|
|
43
|
-
}
|
|
44
|
-
return new Uint8Array(matches.map((byte) => parseInt(byte, 16)));
|
|
45
|
-
}
|
|
46
|
-
// Default to UTF-8 encoding
|
|
47
|
-
const encoder = new TextEncoder();
|
|
48
|
-
return encoder.encode(value);
|
|
49
|
-
}
|
|
50
|
-
throw new Error(`Unsupported value type`);
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Concatenate multiple Uint8Arrays into a single Uint8Array
|
|
54
|
-
*/
|
|
55
|
-
function concatUint8Arrays(...arrays) {
|
|
56
|
-
const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);
|
|
57
|
-
const result = new Uint8Array(totalLength);
|
|
58
|
-
let offset = 0;
|
|
59
|
-
for (const arr of arrays) {
|
|
60
|
-
result.set(arr, offset);
|
|
61
|
-
offset += arr.length;
|
|
62
|
-
}
|
|
63
|
-
return result;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Validates a payload from Discord against its signature and key.
|
|
67
|
-
*
|
|
68
|
-
* @param rawBody - The raw payload data
|
|
69
|
-
* @param signature - The signature from the `X-Signature-Ed25519` header
|
|
70
|
-
* @param timestamp - The timestamp from the `X-Signature-Timestamp` header
|
|
71
|
-
* @param clientPublicKey - The public key from the Discord developer dashboard
|
|
72
|
-
* @returns Whether or not validation was successful
|
|
73
|
-
*/
|
|
74
|
-
export async function verifyKey(rawBody, signature, timestamp, clientPublicKey) {
|
|
75
|
-
try {
|
|
76
|
-
return await subtleCrypto.verify({
|
|
77
|
-
name: `ed25519`
|
|
78
|
-
}, typeof clientPublicKey === `string`
|
|
79
|
-
? await subtleCrypto.importKey(`raw`, Buffer.from(valueToUint8Array(clientPublicKey, `hex`)), {
|
|
80
|
-
name: `ed25519`,
|
|
81
|
-
namedCurve: `ed25519`
|
|
82
|
-
}, // Type assertion for Ed25519
|
|
83
|
-
false, [`verify`])
|
|
84
|
-
: clientPublicKey, Buffer.from(valueToUint8Array(signature, `hex`)), Buffer.from(concatUint8Arrays(valueToUint8Array(timestamp), valueToUint8Array(rawBody))));
|
|
85
|
-
}
|
|
86
|
-
catch (err) {
|
|
87
|
-
console.error(`Signature verification failed:`, err);
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=verifyKey.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"verifyKey.js","sourceRoot":"","sources":["../../src/requests/verifyKey.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const isBetween: (val: number, min: number, max: number) => boolean;
|
package/dist/utils/isBetween.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"isBetween.js","sourceRoot":"","sources":["../../src/utils/isBetween.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,GAAW,EAAW,EAAE,CAC1E,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export type Maybe<T> = T | null | undefined;
|
|
2
|
-
/**
|
|
3
|
-
* Used to test whether a `Maybe` typed value is `null` or `undefined`.
|
|
4
|
-
*
|
|
5
|
-
* When called, the given value's type is narrowed to `NonNullable<T>`.
|
|
6
|
-
*
|
|
7
|
-
* ### Example Usage:
|
|
8
|
-
*
|
|
9
|
-
* ```ts
|
|
10
|
-
* const fn = (str: Maybe<string>) => {
|
|
11
|
-
* if (!isNonNullable(str)) {
|
|
12
|
-
* // typeof str = null | undefined
|
|
13
|
-
* // ...
|
|
14
|
-
* }
|
|
15
|
-
* // typeof str = string
|
|
16
|
-
* // ...
|
|
17
|
-
* }
|
|
18
|
-
* ```
|
|
19
|
-
*/
|
|
20
|
-
export declare const isNonNullable: <T extends Maybe<unknown>>(val?: T) => val is NonNullable<T>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"isNonNullable.js","sourceRoot":"","sources":["../../src/utils/isNonNullable.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,GAAO,EACgB,EAAE,CAAC,OAAO,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const isNumericString: (val: unknown) => val is string;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"isNumericString.js","sourceRoot":"","sources":["../../src/utils/isNumericString.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAY,EAAiB,EAAE,CAC7D,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC"}
|
package/dist/utils/isObject.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const isObject: (val: unknown) => val is object;
|
package/dist/utils/isObject.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"isObject.js","sourceRoot":"","sources":["../../src/utils/isObject.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAY,EAAiB,EAAE,CACtD,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC"}
|
package/dist/utils/sleep.d.ts
DELETED
package/dist/utils/sleep.js
DELETED
package/dist/utils/sleep.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sleep.js","sourceRoot":"","sources":["../../src/utils/sleep.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,EAAE,EAAU,EAAiB,EAAE,CACvD,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const toCamelCase: (str: string) => string;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toCamelCase.js","sourceRoot":"","sources":["../../src/utils/toCamelCase.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAU,EAAE,CACjD,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { isObject } from "./isObject.js";
|
|
2
|
-
import { toCamelCase } from "./toCamelCase.js";
|
|
3
|
-
export const toCamelKeys = (o) => {
|
|
4
|
-
if (Array.isArray(o)) {
|
|
5
|
-
return o.map(toCamelKeys);
|
|
6
|
-
}
|
|
7
|
-
else if (isObject(o)) {
|
|
8
|
-
return Object.entries(o).reduce((acc, [key, value]) => {
|
|
9
|
-
// @ts-expect-error
|
|
10
|
-
acc[toCamelCase(key)] = toCamelKeys(value);
|
|
11
|
-
return acc;
|
|
12
|
-
}, {});
|
|
13
|
-
}
|
|
14
|
-
return o;
|
|
15
|
-
};
|
|
16
|
-
//# sourceMappingURL=toCamelKeys.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toCamelKeys.js","sourceRoot":"","sources":["../../src/utils/toCamelKeys.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,CAAI,EACyB,EAAE;IAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,CAAgC,CAAC;IAC3D,CAAC;SAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACpD,mBAAmB;YACnB,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAC3C,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAgC,CAAC;IACxC,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const toSnakeCase: (str: string) => string;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toSnakeCase.js","sourceRoot":"","sources":["../../src/utils/toSnakeCase.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAU,EAAE,CACjD,GAAG;KACA,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;KACzD,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { isObject } from "./isObject.js";
|
|
2
|
-
import { toSnakeCase } from "./toSnakeCase.js";
|
|
3
|
-
export const toSnakeKeys = (o) => {
|
|
4
|
-
if (Array.isArray(o)) {
|
|
5
|
-
return o.map(toSnakeKeys);
|
|
6
|
-
}
|
|
7
|
-
else if (isObject(o)) {
|
|
8
|
-
return Object.entries(o).reduce((acc, [key, value]) => {
|
|
9
|
-
// @ts-expect-error
|
|
10
|
-
acc[toSnakeCase(key)] = toSnakeKeys(value);
|
|
11
|
-
return acc;
|
|
12
|
-
}, {});
|
|
13
|
-
}
|
|
14
|
-
return o;
|
|
15
|
-
};
|
|
16
|
-
//# sourceMappingURL=toSnakeKeys.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toSnakeKeys.js","sourceRoot":"","sources":["../../src/utils/toSnakeKeys.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,CAAI,EACyB,EAAE;IAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,CAAgC,CAAC;IAC3D,CAAC;SAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACpD,mBAAmB;YACnB,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAC3C,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAgC,CAAC;IACxC,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"asDigits.js","sourceRoot":"","sources":["../../src/validations/asDigits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAG7B;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,MAAmC,EACV,EAAE,CAC3B,CAAC,CAAC,IAAI,CACJ,MAAM,EACN,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,EACpC,CAAC,CAAC,MAAM,EAAE,CACgB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"asInteger.js","sourceRoot":"","sources":["../../src/validations/asInteger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAG7B;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,MAAmC,EACV,EAAE,CAC3B,CAAC,CAAC,IAAI,CACJ,MAAM,EACN,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,EAClD,CAAC,CAAC,OAAO,EAAE,CACe,CAAC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { type SchemaWithPipe, type TitleAction, type CustomSchema } from "valibot";
|
|
2
|
-
export interface Flags {
|
|
3
|
-
[key: string]: number | bigint | string;
|
|
4
|
-
}
|
|
5
|
-
/**
|
|
6
|
-
* Given an enum of bitwise flags, creates a new schema that
|
|
7
|
-
* can validate a [bitfield](https://en.wikipedia.org/wiki/Bit_field)
|
|
8
|
-
* numeric value (a data structure for efficiently serializing a
|
|
9
|
-
* group of boolean values).
|
|
10
|
-
*/
|
|
11
|
-
export declare const bitfield: <TName extends string>(
|
|
12
|
-
/** A name to differentiate this custom schema */
|
|
13
|
-
name: TName,
|
|
14
|
-
/** An enum of bitwise flags */
|
|
15
|
-
flags: Flags,
|
|
16
|
-
/** An optional error message to display in the event an invalid value is parsed */
|
|
17
|
-
message?: string) => SchemaWithPipe<readonly [CustomSchema<string | number | bigint, string>, TitleAction<string | number | bigint, TName>]>;
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { custom, pipe, title } from "valibot";
|
|
2
|
-
import { isNonNullable } from "../utils/isNonNullable.js";
|
|
3
|
-
import { isNumericString } from "../utils/isNumericString.js";
|
|
4
|
-
/**
|
|
5
|
-
* Given an enum of bitwise flags, creates a new schema that
|
|
6
|
-
* can validate a [bitfield](https://en.wikipedia.org/wiki/Bit_field)
|
|
7
|
-
* numeric value (a data structure for efficiently serializing a
|
|
8
|
-
* group of boolean values).
|
|
9
|
-
*/
|
|
10
|
-
export const bitfield = (
|
|
11
|
-
/** A name to differentiate this custom schema */
|
|
12
|
-
name,
|
|
13
|
-
/** An enum of bitwise flags */
|
|
14
|
-
flags,
|
|
15
|
-
/** An optional error message to display in the event an invalid value is parsed */
|
|
16
|
-
message = `Invalid Bitfield`) => {
|
|
17
|
-
// because enums are bidirectionally indexed, pick only the numerical values
|
|
18
|
-
const flagValues = Object.values(flags).filter(
|
|
19
|
-
// flag enums have numerical values, so remove all the key name strings
|
|
20
|
-
(flag) => !isNaN(Number(flag)));
|
|
21
|
-
if (!flagValues.every((flag) => typeof flag === typeof flagValues[0])) {
|
|
22
|
-
throw new Error(`Provided Flags enum must contain values of the same type`);
|
|
23
|
-
}
|
|
24
|
-
// combine the flags to create a validation mask
|
|
25
|
-
const mask = flagValues.reduce((total, flag) => total | BigInt(flag), 0n);
|
|
26
|
-
return pipe(custom((val) =>
|
|
27
|
-
// short-circuit on null + undefined
|
|
28
|
-
isNonNullable(val) &&
|
|
29
|
-
// only work on supported types
|
|
30
|
-
(typeof val === `number` ||
|
|
31
|
-
typeof val === `bigint` ||
|
|
32
|
-
isNumericString(val))
|
|
33
|
-
? // validate the value against the given flags
|
|
34
|
-
(BigInt(val) & mask) === BigInt(val)
|
|
35
|
-
: false, message), title(name));
|
|
36
|
-
};
|
|
37
|
-
//# sourceMappingURL=bitfield.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bitfield.js","sourceRoot":"","sources":["../../src/validations/bitfield.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,IAAI,EACJ,KAAK,EAIN,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAM9D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;AACtB,iDAAiD;AACjD,IAAW;AACX,+BAA+B;AAC/B,KAAY;AACZ,mFAAmF;AACnF,UAAkB,kBAAkB,EAMpC,EAAE;IACF,4EAA4E;IAC5E,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM;IAC5C,uEAAuE;IACvE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAC/B,CAAC;IACF,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,gDAAgD;IAChD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAC5B,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,EACrC,EAAE,CACH,CAAC;IACF,OAAO,IAAI,CACT,MAAM,CACJ,CAAC,GAAG,EAAE,EAAE;IACN,oCAAoC;IACpC,aAAa,CAAC,GAAG,CAAC;QAClB,+BAA+B;QAC/B,CAAC,OAAO,GAAG,KAAK,QAAQ;YACtB,OAAO,GAAG,KAAK,QAAQ;YACvB,eAAe,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC,CAAC,6CAA6C;YAC7C,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC;QACtC,CAAC,CAAC,KAAK,EACX,OAAO,CACR,EACD,KAAK,CAAC,IAAI,CAAC,CACZ,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import * as v from "valibot";
|
|
2
|
-
/** A non-empty array with a length within the given bounds */
|
|
3
|
-
export const boundedArray = (items, req = {}) => v.message(typeof req === `number`
|
|
4
|
-
? v.pipe(v.array(items), v.length(req))
|
|
5
|
-
: typeof req.max === `number`
|
|
6
|
-
? v.pipe(v.array(items), v.minLength(req.min ?? 1), v.maxLength(req.max))
|
|
7
|
-
: v.pipe(v.array(items), v.minLength(req.min ?? 1)), (issue) => `Expected an array with a legnth ${typeof req === `number` ? req : `>= ${req.min ?? 0}${req.max ? `&& <= ${req.max}` : ``}`}, received has length: ${issue.received.length}`);
|
|
8
|
-
//# sourceMappingURL=boundedArray.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"boundedArray.js","sourceRoot":"","sources":["../../src/validations/boundedArray.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B,8DAA8D;AAC9D,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,KAA6B,EAC7B,MAA+C,EAAE,EACvB,EAAE,CAC5B,CAAC,CAAC,OAAO,CACP,OAAO,GAAG,KAAK,QAAQ;IACrB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC,CAAC,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ;QAC3B,CAAC,CAAC,CAAC,CAAC,IAAI,CACJ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EACd,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EACzB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CACrB;QACH,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EACvD,CAAC,KAAK,EAAE,EAAE,CACR,mCAAmC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,0BAA0B,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAC/K,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import * as v from "valibot";
|
|
2
|
-
/** An integer with a value within the given bounds */
|
|
3
|
-
export const boundedInteger = (req = {}) => v.message(typeof req === `number`
|
|
4
|
-
? v.pipe(v.number(), v.integer(), v.value(req))
|
|
5
|
-
: typeof req.max === `number`
|
|
6
|
-
? v.pipe(v.number(), v.integer(), v.minValue(req.min ?? 0), v.maxValue(req.max))
|
|
7
|
-
: v.pipe(v.number(), v.integer(), v.minValue(req.min ?? 0)), (issue) => `Expected an integer with a value ${typeof req === `number` ? `of ${req}` : `>= ${req.min ?? 0}${req.max ? `&& <= ${req.max}` : ``}`}, received has value: ${issue.received.length}`);
|
|
8
|
-
//# sourceMappingURL=boundedInteger.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"boundedInteger.js","sourceRoot":"","sources":["../../src/validations/boundedInteger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B,sDAAsD;AACtD,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,MAA+C,EAAE,EACxB,EAAE,CAC3B,CAAC,CAAC,OAAO,CACP,OAAO,GAAG,KAAK,QAAQ;IACrB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC,CAAC,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ;QAC3B,CAAC,CAAC,CAAC,CAAC,IAAI,CACJ,CAAC,CAAC,MAAM,EAAE,EACV,CAAC,CAAC,OAAO,EAAE,EACX,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EACxB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CACpB;QACH,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAC/D,CAAC,KAAK,EAAE,EAAE,CACR,oCAAoC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,yBAAyB,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CACvL,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import * as v from "valibot";
|
|
2
|
-
/** A non-empty string with a length within the given bounds */
|
|
3
|
-
export const boundedString = (req = {}) => v.message(typeof req === `number`
|
|
4
|
-
? v.pipe(v.string(), v.length(req))
|
|
5
|
-
: typeof req.max === `number`
|
|
6
|
-
? v.pipe(v.string(), v.minLength(req.min ?? 1), v.maxLength(req.max))
|
|
7
|
-
: v.pipe(v.string(), v.minLength(req.min ?? 1)), (issue) => `Expected a string with a legnth ${typeof req === `number` ? req : `>= ${req.min ?? 0}${req.max ? `&& <= ${req.max}` : ``}`}, received has length: ${issue.received.length}`);
|
|
8
|
-
//# sourceMappingURL=boundedString.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"boundedString.js","sourceRoot":"","sources":["../../src/validations/boundedString.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B,+DAA+D;AAC/D,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,MAA+C,EAAE,EACxB,EAAE,CAC3B,CAAC,CAAC,OAAO,CACP,OAAO,GAAG,KAAK,QAAQ;IACrB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ;QAC3B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EACnD,CAAC,KAAK,EAAE,EAAE,CACR,mCAAmC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,0BAA0B,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAC/K,CAAC"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import * as v from "valibot";
|
|
2
|
-
export declare const datauriRegex: RegExp;
|
|
3
|
-
/**
|
|
4
|
-
* Extracts metadata from a given Data URI such as it's
|
|
5
|
-
* MIME type, params, and encoding
|
|
6
|
-
*
|
|
7
|
-
* Returns an empty object when given an invalid Data URI
|
|
8
|
-
*/
|
|
9
|
-
export declare const extractDataURIMetadata: (val: string) => Partial<{
|
|
10
|
-
mediaType: string;
|
|
11
|
-
mimeType: `${string}/${string}`;
|
|
12
|
-
params: string;
|
|
13
|
-
encoding: string;
|
|
14
|
-
data: string;
|
|
15
|
-
}>;
|
|
16
|
-
export declare const toBase64: (data: string) => string;
|
|
17
|
-
/**
|
|
18
|
-
* Validates that a string is a [data URI scheme](https://en.wikipedia.org/wiki/Data_URI_scheme)
|
|
19
|
-
*/
|
|
20
|
-
export declare const datauri: v.GenericSchema<string>;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import * as v from "valibot";
|
|
2
|
-
export const datauriRegex = /^data:((?<mediaType>(?<mimeType>[a-z]+\/[a-z0-9-+.]+)(?<params>;[a-z0-9-.!#$%*+.{}|~`]+=[a-z0-9-.!#$%*+.{}()_|~`]+)*))?(?<encoding>;base64)?,(?<data>[a-z0-9!$&',()*+;=\-._~:@\/?%\s<>]*?)$/i;
|
|
3
|
-
/**
|
|
4
|
-
* Extracts metadata from a given Data URI such as it's
|
|
5
|
-
* MIME type, params, and encoding
|
|
6
|
-
*
|
|
7
|
-
* Returns an empty object when given an invalid Data URI
|
|
8
|
-
*/
|
|
9
|
-
export const extractDataURIMetadata = (val) => datauriRegex.exec(val)?.groups ?? {};
|
|
10
|
-
export const toBase64 = (data) => typeof Buffer !== `undefined`
|
|
11
|
-
? Buffer.from(data, `base64`).toString()
|
|
12
|
-
: atob(btoa(String.fromCharCode(...new TextEncoder().encode(data)))
|
|
13
|
-
.replace(/\+/g, `-`)
|
|
14
|
-
.replace(/\//g, `_`)
|
|
15
|
-
.replace(/=/g, ``));
|
|
16
|
-
/**
|
|
17
|
-
* Validates that a string is a [data URI scheme](https://en.wikipedia.org/wiki/Data_URI_scheme)
|
|
18
|
-
*/
|
|
19
|
-
export const datauri = v.pipe(v.custom((val) => typeof val === `string` && val.length > 0 && datauriRegex.test(val), `Invalid Data URI`), v.title(`datauri`));
|
|
20
|
-
//# sourceMappingURL=datauri.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"datauri.js","sourceRoot":"","sources":["../../src/validations/datauri.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B,MAAM,CAAC,MAAM,YAAY,GACvB,8LAA8L,CAAC;AAEjM;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,GAAW,EAOV,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC;AAE3C,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAU,EAAE,CAC/C,OAAO,MAAM,KAAK,WAAW;IAC3B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE;IACxC,CAAC,CAAC,IAAI,CACF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;SACzD,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CACrB,CAAC;AAER;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAA4B,CAAC,CAAC,IAAI,CACpD,CAAC,CAAC,MAAM,CACN,CAAC,GAAG,EAAE,EAAE,CACN,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EACrE,kBAAkB,CACnB,EACD,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CACnB,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { type CheckAction } from "valibot";
|
|
2
|
-
/**
|
|
3
|
-
* Validation action to check if the given `datauri` string
|
|
4
|
-
* has one of the provided [MIME types](https://en.wikipedia.org/wiki/Media_type)
|
|
5
|
-
*/
|
|
6
|
-
export declare const hasMimeType: (
|
|
7
|
-
/** an array of MIME types to validate against */
|
|
8
|
-
requirement: Array<`${string}/${string}`>,
|
|
9
|
-
/** an optional error message on failed validation */
|
|
10
|
-
message?: "Received badly formatted Data URI") => CheckAction<string, typeof message>;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { check } from "valibot";
|
|
2
|
-
import { extractDataURIMetadata } from "./datauri.js";
|
|
3
|
-
/**
|
|
4
|
-
* Validation action to check if the given `datauri` string
|
|
5
|
-
* has one of the provided [MIME types](https://en.wikipedia.org/wiki/Media_type)
|
|
6
|
-
*/
|
|
7
|
-
export const hasMimeType = (
|
|
8
|
-
/** an array of MIME types to validate against */
|
|
9
|
-
requirement,
|
|
10
|
-
/** an optional error message on failed validation */
|
|
11
|
-
message = `Received badly formatted Data URI`) => check((input) => {
|
|
12
|
-
const { mimeType } = extractDataURIMetadata(input);
|
|
13
|
-
if (typeof mimeType === `undefined`) {
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
return requirement.includes(mimeType);
|
|
17
|
-
}, message);
|
|
18
|
-
//# sourceMappingURL=hasMimeType.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hasMimeType.js","sourceRoot":"","sources":["../../src/validations/hasMimeType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAoB,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEtD;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;AACzB,iDAAiD;AACjD,WAAyC;AACzC,qDAAqD;AACrD,UAAU,mCAA4C,EACjB,EAAE,CACvC,KAAK,CAAC,CAAC,KAAa,EAAE,EAAE;IACtB,MAAM,EAAE,QAAQ,EAAE,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACnD,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC,EAAE,OAAO,CAAC,CAAC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { check } from "valibot";
|
|
2
|
-
import { extractDataURIMetadata, toBase64 } from "./datauri.js";
|
|
3
|
-
export const hasSize = (size, message = `Data URI is the incorrect size`) => check((dataURI) => {
|
|
4
|
-
const { data } = extractDataURIMetadata(dataURI);
|
|
5
|
-
if (typeof data === `undefined`) {
|
|
6
|
-
throw new Error(`Received badly formatted Data URI`);
|
|
7
|
-
}
|
|
8
|
-
const actual = toBase64(data).length;
|
|
9
|
-
return typeof size === `number`
|
|
10
|
-
? size === actual
|
|
11
|
-
: actual >= (size.min ?? 0) && actual <= (size.max ?? Infinity);
|
|
12
|
-
}, message);
|
|
13
|
-
//# sourceMappingURL=hasSize.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hasSize.js","sourceRoot":"","sources":["../../src/validations/hasSize.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEhE,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,IAA6C,EAC7C,UAAU,gCAAyC,EACd,EAAE,CACvC,KAAK,CAAC,CAAC,OAAe,EAAE,EAAE;IACxB,MAAM,EAAE,IAAI,EAAE,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAEjD,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACrC,OAAO,OAAO,IAAI,KAAK,QAAQ;QAC7B,CAAC,CAAC,IAAI,KAAK,MAAM;QACjB,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,QAAQ,CAAC,CAAC;AACpE,CAAC,EAAE,OAAO,CAAC,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export * from "./asDigits.js";
|
|
2
|
-
export * from "./asInteger.js";
|
|
3
|
-
export * from "./bitfield.js";
|
|
4
|
-
export * from "./boundedArray.js";
|
|
5
|
-
export * from "./boundedInteger.js";
|
|
6
|
-
export * from "./boundedString.js";
|
|
7
|
-
export * from "./datauri.js";
|
|
8
|
-
export * from "./hasMimeType.js";
|
|
9
|
-
export * from "./toBlob.js";
|
|
10
|
-
export * from "./snowflake.js";
|
|
11
|
-
export * from "./timestamp.js";
|
|
12
|
-
export * from "./url.js";
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export * from "./asDigits.js";
|
|
2
|
-
export * from "./asInteger.js";
|
|
3
|
-
export * from "./bitfield.js";
|
|
4
|
-
export * from "./boundedArray.js";
|
|
5
|
-
export * from "./boundedInteger.js";
|
|
6
|
-
export * from "./boundedString.js";
|
|
7
|
-
export * from "./datauri.js";
|
|
8
|
-
export * from "./hasMimeType.js";
|
|
9
|
-
export * from "./toBlob.js";
|
|
10
|
-
export * from "./snowflake.js";
|
|
11
|
-
export * from "./timestamp.js";
|
|
12
|
-
export * from "./url.js";
|
|
13
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validations/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import * as v from "valibot";
|
|
2
|
-
import { isNonNullable } from "../utils/isNonNullable.js";
|
|
3
|
-
import { isNumericString } from "../utils/isNumericString.js";
|
|
4
|
-
/** UNIX timestamp representing the first second of 2015 */
|
|
5
|
-
export const DISCORD_EPOCH = 1420070400000n;
|
|
6
|
-
/**
|
|
7
|
-
* Converts a `snowflake` string to a Date relative to the given epoch
|
|
8
|
-
*
|
|
9
|
-
* Uses Discord's epoch by default
|
|
10
|
-
*
|
|
11
|
-
* https://discord.com/developers/docs/reference#snowflakes
|
|
12
|
-
*/
|
|
13
|
-
export const snowflakeToDate = (
|
|
14
|
-
/** A snowflake string to convert */
|
|
15
|
-
val,
|
|
16
|
-
/** time in milliseconds to use as the epoch to derive a Date from */
|
|
17
|
-
epoch = DISCORD_EPOCH) => new Date(Number((BigInt(val) >> 22n) + epoch));
|
|
18
|
-
/**
|
|
19
|
-
* An up to 64-bit unsigned numeric value derived from a timestamp which
|
|
20
|
-
* serves as a unique identifier within Discord.
|
|
21
|
-
*
|
|
22
|
-
* Validates whether a given `number`, `bigint`, or numeric `string` is
|
|
23
|
-
* a valid [Snowflake](https://discord.com/developers/docs/reference#snowflakes)
|
|
24
|
-
* by checking if it's derived timestamp is a valid time at or after
|
|
25
|
-
* the Discord epoch (the first second of 2015, ie: `1420070400000`).
|
|
26
|
-
*/
|
|
27
|
-
export const snowflake = v.pipe(v.custom((val) =>
|
|
28
|
-
// at runtime this could be any value, so filter out
|
|
29
|
-
// obviously invalid input first
|
|
30
|
-
isNonNullable(val) &&
|
|
31
|
-
// then verify we have a numeric value
|
|
32
|
-
(typeof val === `bigint` ||
|
|
33
|
-
typeof val === `number` ||
|
|
34
|
-
isNumericString(val)) &&
|
|
35
|
-
// finally, verify that it accurately represents ms
|
|
36
|
-
// at or after the Discord epoch (timestamps before
|
|
37
|
-
// that cannot possibly be a valid Discord snowflake)
|
|
38
|
-
snowflakeToDate(val).getTime() >= DISCORD_EPOCH, `Invalid Snowflake`), v.title(`snowflake`));
|
|
39
|
-
//# sourceMappingURL=snowflake.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"snowflake.js","sourceRoot":"","sources":["../../src/validations/snowflake.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,2DAA2D;AAC3D,MAAM,CAAC,MAAM,aAAa,GAAG,cAAc,CAAC;AAE5C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;AAC7B,oCAAoC;AACpC,GAA6B;AAC7B,qEAAqE;AACrE,KAAK,GAAG,aAAa,EACf,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAE1D;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,SAAS,GAA4B,CAAC,CAAC,IAAI,CACtD,CAAC,CAAC,MAAM,CACN,CAAC,GAAG,EAAE,EAAE;AACN,oDAAoD;AACpD,gCAAgC;AAChC,aAAa,CAAC,GAAG,CAAC;IAClB,sCAAsC;IACtC,CAAC,OAAO,GAAG,KAAK,QAAQ;QACtB,OAAO,GAAG,KAAK,QAAQ;QACvB,eAAe,CAAC,GAAG,CAAC,CAAC;IACvB,mDAAmD;IACnD,mDAAmD;IACnD,qDAAqD;IACrD,eAAe,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,aAAa,EACjD,mBAAmB,CACpB,EACD,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CACrB,CAAC"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import * as v from "valibot";
|
|
2
|
-
/** An [ISO8601](https://www.loc.gov/standards/datetime/iso-tc154-wg5_n0038_iso_wd_8601-1_2016-02-16.pdf) timestamp */
|
|
3
|
-
export const timestamp = v.message(v.pipe(v.string(), v.isoTimestamp()), (issue) => `Expected a valid timestamp, received: ${issue.received}`);
|
|
4
|
-
//# sourceMappingURL=timestamp.js.map
|