@kalutskii/foundation 0.6.13 → 0.6.16
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 +29 -17
- package/dist/index.js +10 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { SQL } from 'drizzle-orm';
|
|
1
|
+
import { SQL, Simplify as Simplify$1 } from 'drizzle-orm';
|
|
2
2
|
import { ErrorHandler, MiddlewareHandler, Context, TypedResponse } from 'hono';
|
|
3
3
|
import { Locale } from 'date-fns';
|
|
4
4
|
import { SymmetricAlgorithm } from 'hono/utils/jwt/jwa';
|
|
5
|
-
import z from 'zod';
|
|
5
|
+
import z, { ZodObject, ZodRawShape, z as z$1 } from 'zod';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Builds a Drizzle SQL `where` condition from a plain object.
|
|
@@ -66,6 +66,20 @@ type QueryPrimitive = string | number | boolean | bigint | Date;
|
|
|
66
66
|
type AsQuery<T> = T extends null | undefined ? T : T extends QueryPrimitive ? string : T extends readonly (infer Item)[] ? AsQuery<Item>[] : T extends object ? {
|
|
67
67
|
[Key in keyof T]: AsQuery<T[Key]>;
|
|
68
68
|
} : string;
|
|
69
|
+
/**
|
|
70
|
+
* Utility type that ensures at least one property from the specified
|
|
71
|
+
* keys of a given type T is required, while the rest remain optional.
|
|
72
|
+
*
|
|
73
|
+
* This is useful for scenarios where you want to enforce that at least one
|
|
74
|
+
* of several optional (nullable) properties must be provided in an object.
|
|
75
|
+
*
|
|
76
|
+
* ```ts
|
|
77
|
+
* type Example = AtLeastOne<{ a?: string; b?: number; c?: boolean }>;
|
|
78
|
+
* // Valid: { a: "hello" }, { b: 42 }, { c: true }, { a: "hello", b: 42 }
|
|
79
|
+
* // Invalid: {}, { a: undefined, b: undefined, c: undefined }
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
type AtLeastOne<T, Keys extends keyof T = keyof T> = Keys extends keyof T ? Simplify$1<Required<Pick<T, Keys>> & Partial<Omit<T, Keys>>> : never;
|
|
69
83
|
|
|
70
84
|
/**
|
|
71
85
|
* Wraps c.json with a typed success payload / (or void data) & possible APIError response.
|
|
@@ -212,20 +226,6 @@ declare const log: {
|
|
|
212
226
|
type Simplify<T> = {
|
|
213
227
|
[K in keyof T]: T[K];
|
|
214
228
|
} & {};
|
|
215
|
-
/**
|
|
216
|
-
* Utility type that ensures at least one property from the specified
|
|
217
|
-
* keys of a given type T is required, while the rest remain optional.
|
|
218
|
-
*
|
|
219
|
-
* This is useful for scenarios where you want to enforce that at least one
|
|
220
|
-
* of several optional (nullable) properties must be provided in an object.
|
|
221
|
-
*
|
|
222
|
-
* ```ts
|
|
223
|
-
* type Example = AtLeastOne<{ a?: string; b?: number; c?: boolean }>;
|
|
224
|
-
* // Valid: { a: "hello" }, { b: 42 }, { c: true }, { a: "hello", b: 42 }
|
|
225
|
-
* // Invalid: {}, { a: undefined, b: undefined, c: undefined }
|
|
226
|
-
* ```
|
|
227
|
-
*/
|
|
228
|
-
type AtLeastOne<T, Keys extends keyof T = keyof T> = Keys extends keyof T ? Simplify<Required<Pick<T, Keys>> & Partial<Omit<T, Keys>>> : never;
|
|
229
229
|
|
|
230
230
|
/** Options for configuring the JWT service. */
|
|
231
231
|
type JWTServiceOptions = {
|
|
@@ -315,6 +315,18 @@ type ZodPaginationOptions = z.infer<typeof zodPaginationSchema>;
|
|
|
315
315
|
*/
|
|
316
316
|
declare const refinePagination: (options?: ZodPaginationOptions) => ZodPaginationOptions;
|
|
317
317
|
|
|
318
|
+
/**
|
|
319
|
+
* Wraps a partial Zod object schema with:
|
|
320
|
+
* 1. A runtime check ensuring at least one field is non-undefined.
|
|
321
|
+
* 2. A `.transform()` that narrows the output type to `AtLeastOne<T>`,
|
|
322
|
+
* making it directly assignable to domain `*Select` and `*Update` types without casting.
|
|
323
|
+
*
|
|
324
|
+
* ```ts
|
|
325
|
+
* zQuery(zodAtLeastOne(userSelectSchema)) // result: UserSelect ✓
|
|
326
|
+
* ```
|
|
327
|
+
*/
|
|
328
|
+
declare const zodAtLeastOne: <T extends ZodObject<ZodRawShape>>(schema: T) => z$1.ZodPipe<T, z$1.ZodTransform<Awaited<AtLeastOne<z$1.core.output<T>>>, z$1.core.output<T>>>;
|
|
329
|
+
|
|
318
330
|
declare const parseQueryValue: (value: unknown) => unknown;
|
|
319
331
|
/**
|
|
320
332
|
* Preprocesses query-like values before Zod validation.
|
|
@@ -341,4 +353,4 @@ declare const asQuery: <T extends z.ZodTypeAny>(schema: T) => z.ZodPreprocess<T>
|
|
|
341
353
|
*/
|
|
342
354
|
declare const isPlainObject: (value: unknown) => value is Record<string, unknown>;
|
|
343
355
|
|
|
344
|
-
export { type APIContractData, type APIContractError, type APIContractResult, type APIError, type APISuccess, type AsQuery, type AtLeastOne, EXCEPTION_STATUS_CODES, type ExceptionStatusCode, type FetchResult, type JWTServiceOptions, type JWTSignOptions, type MeasuredExecution, type Payload, type PayloadSchema, SUCCESS_STATUS_CODES, type Simplify, type SuccessStatusCode, ZodJWTService, type ZodPaginationOptions, asQuery, failure, fetchAndThrow, fetchSafely, formatTime, generateRandomString, getColoredHTTPStatus, getFormattedDate, getFormattedTime, getUTCOffset, getZonedTime, honoLoggingHandler, isPlainObject, log, measureExecutionTime, onHandlerError, parseQueryValue, refinePagination, respond, safeExecute, sqlWhere, success, zodPaginationSchema, zodPaginationShape };
|
|
356
|
+
export { type APIContractData, type APIContractError, type APIContractResult, type APIError, type APISuccess, type AsQuery, type AtLeastOne, EXCEPTION_STATUS_CODES, type ExceptionStatusCode, type FetchResult, type JWTServiceOptions, type JWTSignOptions, type MeasuredExecution, type Payload, type PayloadSchema, SUCCESS_STATUS_CODES, type Simplify, type SuccessStatusCode, ZodJWTService, type ZodPaginationOptions, asQuery, failure, fetchAndThrow, fetchSafely, formatTime, generateRandomString, getColoredHTTPStatus, getFormattedDate, getFormattedTime, getUTCOffset, getZonedTime, honoLoggingHandler, isPlainObject, log, measureExecutionTime, onHandlerError, parseQueryValue, refinePagination, respond, safeExecute, sqlWhere, success, zodAtLeastOne, zodPaginationSchema, zodPaginationShape };
|
package/dist/index.js
CHANGED
|
@@ -225,6 +225,14 @@ var zodPaginationSchema = z.object({
|
|
|
225
225
|
var zodPaginationShape = zodPaginationSchema.shape;
|
|
226
226
|
|
|
227
227
|
// src/zod-validation/zod-validation.refiners.ts
|
|
228
|
+
var DEFAULT_ERROR_MESSAGE = "Invalid input. At least one field must be provided.";
|
|
229
|
+
var zodAtLeastOne = (schema) => schema.superRefine((val, ctx) => {
|
|
230
|
+
const hasValue = Object.values(val).some((v) => v !== void 0);
|
|
231
|
+
if (!hasValue)
|
|
232
|
+
ctx.addIssue({ code: "custom", message: DEFAULT_ERROR_MESSAGE });
|
|
233
|
+
}).transform((val) => val);
|
|
234
|
+
|
|
235
|
+
// src/zod-validation/zod-validation.parsing.ts
|
|
228
236
|
import z2 from "zod";
|
|
229
237
|
|
|
230
238
|
// src/zod-validation/zod-validation.utilities.ts
|
|
@@ -232,7 +240,7 @@ var isPlainObject = (value) => {
|
|
|
232
240
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
233
241
|
};
|
|
234
242
|
|
|
235
|
-
// src/zod-validation/zod-validation.
|
|
243
|
+
// src/zod-validation/zod-validation.parsing.ts
|
|
236
244
|
var parseQueryValue = (value) => {
|
|
237
245
|
if (Array.isArray(value))
|
|
238
246
|
return value.map(parseQueryValue);
|
|
@@ -279,6 +287,7 @@ export {
|
|
|
279
287
|
safeExecute,
|
|
280
288
|
sqlWhere,
|
|
281
289
|
success,
|
|
290
|
+
zodAtLeastOne,
|
|
282
291
|
zodPaginationSchema,
|
|
283
292
|
zodPaginationShape
|
|
284
293
|
};
|