elysia 0.7.13 → 0.7.14

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.
@@ -20,7 +20,7 @@ export declare const ElysiaType: {
20
20
  readonly Numeric: (property?: NumericOptions<number>) => TNumber;
21
21
  readonly ObjectString: <T extends TProperties>(properties: T, options?: ObjectOptions) => TObject<T>;
22
22
  readonly File: (options?: Partial<ElysiaTypeOptions.File> | undefined) => import("@sinclair/typebox").TUnsafe<File>;
23
- readonly Files: (options: ElysiaTypeOptions.Files) => import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TUnsafe<File[]>, File[]>;
23
+ readonly Files: (options?: ElysiaTypeOptions.Files) => import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TUnsafe<File[]>, File[]>;
24
24
  readonly Nullable: <T_1 extends TSchema>(schema: T_1) => TUnion<[T_1, TNull]>;
25
25
  /**
26
26
  * Allow Optional, Nullable and Undefined
@@ -107,7 +107,7 @@ exports.ElysiaType = {
107
107
  })
108
108
  .Encode((value) => JSON.stringify(value)),
109
109
  File: system_1.TypeSystem.Type('File', validateFile),
110
- Files: (options) => typebox_1.Type.Transform(typebox_1.Type.Union([Files(options)]))
110
+ Files: (options = {}) => typebox_1.Type.Transform(typebox_1.Type.Union([Files(options)]))
111
111
  .Decode((value) => {
112
112
  if (Array.isArray(value))
113
113
  return value;
@@ -4,6 +4,7 @@ import type { Static, TSchema } from '@sinclair/typebox';
4
4
  import type { Context } from './context';
5
5
  import type { WS } from './ws/types';
6
6
  import type { ElysiaConfig, DecoratorBase, DefinitionBase, RouteBase, Handler, InputSchema, LocalHook, MergeSchema, RouteSchema, UnwrapRoute, InternalRoute, HTTPMethod, VoidHandler, PreHandler, BodyHandler, OptionalHandler, AfterHandler, ErrorHandler, LifeCycleStore, MaybePromise, Prettify, ListenCallback, AddPrefix, AddSuffix, AddPrefixCapitalize, AddSuffixCapitalize, TraceReporter, TraceHandler, MaybeArray, GracefulHandler } from './types';
7
+ import { t } from './custom-types';
7
8
  /**
8
9
  * ### Elysia Server
9
10
  * Main instance to create web server using Elysia
@@ -890,8 +891,12 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
890
891
  }>;
891
892
  error: Definitions['error'];
892
893
  }, ParentSchema, Routes, Scoped>;
893
- model<const NewType extends Record<string, unknown>>(mapper: (decorators: Definitions['type']) => NewType): Elysia<BasePath, Decorators, {
894
- type: NewType;
894
+ model<const NewType extends Record<string, TSchema>>(mapper: (decorators: {
895
+ [type in keyof Definitions['type']]: ReturnType<typeof t.Unsafe<Definitions['type'][type]>>;
896
+ }) => NewType): Elysia<BasePath, Decorators, {
897
+ type: {
898
+ [x in keyof NewType]: Static<NewType[x]>;
899
+ };
895
900
  error: Definitions['error'];
896
901
  }, ParentSchema, Routes, Scoped>;
897
902
  mapDerive<const NewStore extends Record<string, unknown>>(mapper: (decorators: Decorators['request']) => MaybePromise<NewStore>): Elysia<BasePath, {
@@ -20,7 +20,7 @@ export declare const ElysiaType: {
20
20
  readonly Numeric: (property?: NumericOptions<number>) => TNumber;
21
21
  readonly ObjectString: <T extends TProperties>(properties: T, options?: ObjectOptions) => TObject<T>;
22
22
  readonly File: (options?: Partial<ElysiaTypeOptions.File> | undefined) => import("@sinclair/typebox").TUnsafe<File>;
23
- readonly Files: (options: ElysiaTypeOptions.Files) => import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TUnsafe<File[]>, File[]>;
23
+ readonly Files: (options?: ElysiaTypeOptions.Files) => import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TUnsafe<File[]>, File[]>;
24
24
  readonly Nullable: <T_1 extends TSchema>(schema: T_1) => TUnion<[T_1, TNull]>;
25
25
  /**
26
26
  * Allow Optional, Nullable and Undefined
@@ -1,5 +1,5 @@
1
1
  import{TypeSystem as e}from"@sinclair/typebox/system";import{Type as t,FormatRegistry as i}from"@sinclair/typebox";try{e.Format("email",e=>/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(e)),e.Format("uuid",e=>/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(e)),e.Format("date",e=>!Number.isNaN(new Date(e).getTime())),e.Format("date-time",e=>!Number.isNaN(new Date(e).getTime()))}catch(e){// Not empty
2
- }let r=e=>{if("string"==typeof e)switch(e.slice(-1)){case"k":return 1024*+e.slice(0,e.length-1);case"m":return 1048576*+e.slice(0,e.length-1);default:return+e}return e},n=(e,t)=>{if(!(t instanceof Blob)||e.minSize&&t.size<r(e.minSize)||e.maxSize&&t.size>r(e.maxSize))return!1;if(e.extension){if("string"==typeof e.extension){if(!t.type.startsWith(e.extension))return!1}else{for(let i=0;i<e.extension.length;i++)if(t.type.startsWith(e.extension[i]))return!0;return!1}}return!0},a=e.Type("Files",(e,t)=>{if(!Array.isArray(t))return n(e,t);if(e.minItems&&t.length<e.minItems||e.maxItems&&t.length>e.maxItems)return!1;for(let i=0;i<t.length;i++)if(!n(e,t[i]))return!1;return!0});i.Set("numeric",e=>!isNaN(+e)),i.Set("ObjectString",e=>{let t=e.charCodeAt(0);if((9===t||10===t||32===t)&&(t=e.trimStart().charCodeAt(0)),123!==t&&91!==t)return!1;try{return JSON.parse(e),!0}catch{return!1}});export const ElysiaType={Numeric:e=>t.Transform(t.Union([t.String({format:"numeric",default:0}),t.Number(e)])).Decode(e=>{let t=+e;return isNaN(t)?e:t}).Encode(e=>e),ObjectString:(e,i)=>t.Transform(t.Union([t.String({format:"ObjectString",default:""}),t.Object(e,i)])).Decode(e=>{if("string"==typeof e)try{return JSON.parse(e)}catch{}return e}).Encode(e=>JSON.stringify(e)),File:e.Type("File",n),Files:e=>t.Transform(t.Union([a(e)])).Decode(e=>Array.isArray(e)?e:[e]).Encode(e=>e),Nullable:e=>t.Union([t.Null(),e]),/**
2
+ }let r=e=>{if("string"==typeof e)switch(e.slice(-1)){case"k":return 1024*+e.slice(0,e.length-1);case"m":return 1048576*+e.slice(0,e.length-1);default:return+e}return e},n=(e,t)=>{if(!(t instanceof Blob)||e.minSize&&t.size<r(e.minSize)||e.maxSize&&t.size>r(e.maxSize))return!1;if(e.extension){if("string"==typeof e.extension){if(!t.type.startsWith(e.extension))return!1}else{for(let i=0;i<e.extension.length;i++)if(t.type.startsWith(e.extension[i]))return!0;return!1}}return!0},a=e.Type("Files",(e,t)=>{if(!Array.isArray(t))return n(e,t);if(e.minItems&&t.length<e.minItems||e.maxItems&&t.length>e.maxItems)return!1;for(let i=0;i<t.length;i++)if(!n(e,t[i]))return!1;return!0});i.Set("numeric",e=>!isNaN(+e)),i.Set("ObjectString",e=>{let t=e.charCodeAt(0);if((9===t||10===t||32===t)&&(t=e.trimStart().charCodeAt(0)),123!==t&&91!==t)return!1;try{return JSON.parse(e),!0}catch{return!1}});export const ElysiaType={Numeric:e=>t.Transform(t.Union([t.String({format:"numeric",default:0}),t.Number(e)])).Decode(e=>{let t=+e;return isNaN(t)?e:t}).Encode(e=>e),ObjectString:(e,i)=>t.Transform(t.Union([t.String({format:"ObjectString",default:""}),t.Object(e,i)])).Decode(e=>{if("string"==typeof e)try{return JSON.parse(e)}catch{}return e}).Encode(e=>JSON.stringify(e)),File:e.Type("File",n),Files:(e={})=>t.Transform(t.Union([a(e)])).Decode(e=>Array.isArray(e)?e:[e]).Encode(e=>e),Nullable:e=>t.Union([t.Null(),e]),/**
3
3
  * Allow Optional, Nullable and Undefined
4
4
  */MaybeEmpty:e=>t.Union([t.Null(),t.Undefined(),e]),Cookie:(e,i)=>t.Object(e,i)};t.ObjectString=ElysiaType.ObjectString,/**
5
5
  * A Numeric string
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ import type { Static, TSchema } from '@sinclair/typebox';
4
4
  import type { Context } from './context';
5
5
  import type { WS } from './ws/types';
6
6
  import type { ElysiaConfig, DecoratorBase, DefinitionBase, RouteBase, Handler, InputSchema, LocalHook, MergeSchema, RouteSchema, UnwrapRoute, InternalRoute, HTTPMethod, VoidHandler, PreHandler, BodyHandler, OptionalHandler, AfterHandler, ErrorHandler, LifeCycleStore, MaybePromise, Prettify, ListenCallback, AddPrefix, AddSuffix, AddPrefixCapitalize, AddSuffixCapitalize, TraceReporter, TraceHandler, MaybeArray, GracefulHandler } from './types';
7
+ import { t } from './custom-types';
7
8
  /**
8
9
  * ### Elysia Server
9
10
  * Main instance to create web server using Elysia
@@ -890,8 +891,12 @@ export default class Elysia<BasePath extends string = '', Decorators extends Dec
890
891
  }>;
891
892
  error: Definitions['error'];
892
893
  }, ParentSchema, Routes, Scoped>;
893
- model<const NewType extends Record<string, unknown>>(mapper: (decorators: Definitions['type']) => NewType): Elysia<BasePath, Decorators, {
894
- type: NewType;
894
+ model<const NewType extends Record<string, TSchema>>(mapper: (decorators: {
895
+ [type in keyof Definitions['type']]: ReturnType<typeof t.Unsafe<Definitions['type'][type]>>;
896
+ }) => NewType): Elysia<BasePath, Decorators, {
897
+ type: {
898
+ [x in keyof NewType]: Static<NewType[x]>;
899
+ };
895
900
  error: Definitions['error'];
896
901
  }, ParentSchema, Routes, Scoped>;
897
902
  mapDerive<const NewStore extends Record<string, unknown>>(mapper: (decorators: Decorators['request']) => MaybePromise<NewStore>): Elysia<BasePath, {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "elysia",
3
3
  "description": "Ergonomic Framework for Human",
4
- "version": "0.7.13",
4
+ "version": "0.7.14",
5
5
  "author": {
6
6
  "name": "saltyAom",
7
7
  "url": "https://github.com/SaltyAom",