Compare commits
2 Commits
495217ecd5
...
fd9f1cab18
Author | SHA1 | Date | |
---|---|---|---|
fd9f1cab18 | |||
21ca123797 |
BIN
browser/bun.lockb
Normal file
BIN
browser/bun.lockb
Normal file
Binary file not shown.
@ -8,11 +8,15 @@
|
||||
"readme.md",
|
||||
"LICENSE"
|
||||
],
|
||||
"exports": {
|
||||
".": "./dist/index.js"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "tsup"
|
||||
},
|
||||
"dependencies": {
|
||||
"@entityseven/rage-fw-rpc": "0.2.5"
|
||||
"@entityseven/rage-fw-rpc": "0.2.5",
|
||||
"zod": "^3.23.8"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@entityseven/rage-fw-shared-types": "0.2.0",
|
||||
|
@ -1,11 +1,7 @@
|
||||
import { Helper } from './helper'
|
||||
import { rpc } from './rpc'
|
||||
import { Helper } from './helper'
|
||||
import { Validation } from './validation'
|
||||
import type * as T from '../types'
|
||||
import {
|
||||
RageFW_BrowserEvent,
|
||||
RageFW_ClientEvent,
|
||||
RageFW_ServerEvent,
|
||||
} from '../types'
|
||||
|
||||
/** Browser-side interactions */
|
||||
export class Browser extends Helper {
|
||||
@ -34,6 +30,8 @@ export class Browser extends Helper {
|
||||
*
|
||||
* @param eventName - The name of the event to register
|
||||
* @param callback - The callback function to be executed when the event is triggered
|
||||
* @param [options] - Optional settings for callback execution
|
||||
* @param [options.validation] - Validation schema to be checked before the callback executes
|
||||
* @returns {Browser} The current browser instance, enabling method chaining
|
||||
*
|
||||
* @example
|
||||
@ -47,14 +45,27 @@ export class Browser extends Helper {
|
||||
public register<EventName extends T.RageFW_BrowserEvent>(
|
||||
eventName: EventName,
|
||||
callback: T.RageFW_BrowserCallback<EventName>,
|
||||
options?: {
|
||||
validation?: T.RageFW_ValidationOptions
|
||||
},
|
||||
): Browser {
|
||||
this.log_('register', eventName, callback)
|
||||
|
||||
rpc.register<
|
||||
Parameters<typeof callback>,
|
||||
ReturnType<typeof callback>,
|
||||
ReturnType<typeof callback> | Promise<unknown>,
|
||||
EventName
|
||||
>(eventName, async (...data) => await callback(...data))
|
||||
>(eventName, async (...data) => {
|
||||
if (!options?.validation) return await callback(...data)
|
||||
|
||||
const validationSuccess = Validation.process(
|
||||
data,
|
||||
options?.validation,
|
||||
)
|
||||
if (!validationSuccess) return
|
||||
|
||||
return await callback(...data)
|
||||
})
|
||||
|
||||
return this
|
||||
}
|
||||
|
26
browser/src/core/validation.ts
Normal file
26
browser/src/core/validation.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import type * as T from '../types'
|
||||
|
||||
export class Validation {
|
||||
constructor() {}
|
||||
|
||||
public static process<EventName extends T.RageFW_BrowserEvent>(
|
||||
args: T.RageFW_BrowserArgs<EventName>,
|
||||
validationOptions?: T.RageFW_ValidationOptions,
|
||||
): boolean {
|
||||
if (!validationOptions) return true
|
||||
|
||||
if ('schema' in validationOptions) {
|
||||
const validationResponse = validationOptions.schema.safeParse(args)
|
||||
|
||||
if (validationResponse.success) {
|
||||
return true
|
||||
} else {
|
||||
validationOptions.onError(validationResponse.error)
|
||||
return false
|
||||
}
|
||||
} else {
|
||||
const validationResponse = validationOptions.safeParse(args)
|
||||
return validationResponse.success
|
||||
}
|
||||
}
|
||||
}
|
@ -1,3 +1,4 @@
|
||||
export * from './browser'
|
||||
export * from './client'
|
||||
export * from './server'
|
||||
export * from './validation'
|
||||
|
11
browser/src/types/validation.ts
Normal file
11
browser/src/types/validation.ts
Normal file
@ -0,0 +1,11 @@
|
||||
import type { z } from 'zod'
|
||||
|
||||
export type RageFW_ValidationSchema = z.ZodTuple<any, any> | z.ZodArray<any>
|
||||
export type RageFW_ValidationSchemaExtended = {
|
||||
schema: RageFW_ValidationSchema
|
||||
onError: (error: z.ZodError) => unknown
|
||||
}
|
||||
|
||||
export type RageFW_ValidationOptions =
|
||||
| RageFW_ValidationSchema
|
||||
| RageFW_ValidationSchemaExtended
|
@ -4,7 +4,6 @@ export default defineConfig({
|
||||
entry: ['src/index.ts'],
|
||||
outDir: './dist',
|
||||
format: ['cjs'],
|
||||
noExternal: ['rage-rpc'],
|
||||
experimentalDts: true,
|
||||
splitting: false,
|
||||
sourcemap: false,
|
||||
|
BIN
client/bun.lockb
Normal file
BIN
client/bun.lockb
Normal file
Binary file not shown.
@ -1,38 +1,50 @@
|
||||
{
|
||||
"name": "@entityseven/rage-fw-client",
|
||||
"version": "0.2.0",
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/src/index.d.ts",
|
||||
"files": [
|
||||
"dist/**/*",
|
||||
"readme.md",
|
||||
"LICENSE"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "tsup"
|
||||
"name": "@entityseven/rage-fw-client",
|
||||
"version": "0.2.0",
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/src/index.d.ts",
|
||||
"files": [
|
||||
"dist/**/*",
|
||||
"readme.md",
|
||||
"LICENSE"
|
||||
],
|
||||
"exports": {
|
||||
".": "./dist/index.js"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "tsup"
|
||||
},
|
||||
"dependencies": {
|
||||
"@entityseven/rage-fw-rpc": "0.2.5",
|
||||
"zod": "^3.23.8"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@entityseven/rage-fw-shared-types": "0.2.0",
|
||||
"@ragempcommunity/types-client": "^2.1.8"
|
||||
},
|
||||
"description": "Package used on a client-side of your Rage:MP Server",
|
||||
"keywords": [
|
||||
"rage-fw-client",
|
||||
"ragefw",
|
||||
"rage-fw",
|
||||
"ragemp",
|
||||
"rage:mp",
|
||||
"rage",
|
||||
"gta5"
|
||||
],
|
||||
"author": "Entity Seven Group",
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Danya H",
|
||||
"email": "dev.rilaxik@gmail.com",
|
||||
"url": "https://github.com/rilaxik/"
|
||||
},
|
||||
"dependencies": {
|
||||
"@entityseven/rage-fw-rpc": "0.2.5"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@entityseven/rage-fw-shared-types": "0.2.0",
|
||||
"@ragempcommunity/types-client": "^2.1.8"
|
||||
},
|
||||
"description": "Package used on a client-side of your Rage:MP Server",
|
||||
"keywords": ["rage-fw-client", "ragefw", "rage-fw", "ragemp", "rage:mp", "rage", "gta5"],
|
||||
"author": "Entity Seven Group",
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Danya H",
|
||||
"email": "dev.rilaxik@gmail.com",
|
||||
"url": "https://github.com/rilaxik/"
|
||||
},
|
||||
{
|
||||
"name": "Oleksandr Honcharov",
|
||||
"email": "0976053529@ukr.net",
|
||||
"url": "https://github.com/SashaGoncharov19/"
|
||||
}
|
||||
],
|
||||
"license": "Custom-Attribution-NoDerivs",
|
||||
"gitHead": "ffd542c1deddb3033e16e0dae7557313ae09b05f"
|
||||
{
|
||||
"name": "Oleksandr Honcharov",
|
||||
"email": "0976053529@ukr.net",
|
||||
"url": "https://github.com/SashaGoncharov19/"
|
||||
}
|
||||
],
|
||||
"license": "Custom-Attribution-NoDerivs",
|
||||
"gitHead": "ffd542c1deddb3033e16e0dae7557313ae09b05f"
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { rpc } from './rpc'
|
||||
import { Middleware } from './middleware'
|
||||
import { Validation } from './validation'
|
||||
import type * as T from '../types'
|
||||
|
||||
/** Client-side interactions */
|
||||
@ -10,6 +11,7 @@ export class Client {
|
||||
* @param eventName - The name of the event to register
|
||||
* @param callback - The callback function to be executed when the event is triggered
|
||||
* @param [options] - Optional settings for callback execution
|
||||
* @param [options.validation] - Validation schema to be checked before the callback executes
|
||||
* @param [options.middlewares] - Middleware functions to be checked before the callback executes
|
||||
* @returns {Client} The current client instance, enabling method chaining
|
||||
*
|
||||
@ -44,6 +46,7 @@ export class Client {
|
||||
eventName: EventName,
|
||||
callback: T.RageFW_ClientCallback<EventName>,
|
||||
options?: {
|
||||
validation?: T.RageFW_ValidationOptions
|
||||
middlewares?: T.RageFW_MiddlewareOptions<EventName>
|
||||
},
|
||||
): Client {
|
||||
@ -52,9 +55,22 @@ export class Client {
|
||||
ReturnType<typeof callback> | Promise<unknown>,
|
||||
EventName
|
||||
>(eventName, async (...data) => {
|
||||
if (!options?.middlewares) return await callback(...data)
|
||||
if (!options?.middlewares && !options?.validation)
|
||||
return await callback(...data)
|
||||
|
||||
await Middleware.process(options.middlewares, callback, data)
|
||||
const validationSuccess = Validation.process(
|
||||
data,
|
||||
options?.validation,
|
||||
)
|
||||
if (!validationSuccess) return
|
||||
|
||||
const middlewaresSuccess = await Middleware.process(
|
||||
data,
|
||||
options?.middlewares,
|
||||
)
|
||||
if (!middlewaresSuccess) return
|
||||
|
||||
return await callback(...data)
|
||||
})
|
||||
|
||||
return this
|
||||
|
@ -1,5 +1,4 @@
|
||||
export * from './client'
|
||||
export * from './logger'
|
||||
export * from './middleware'
|
||||
export * from './player'
|
||||
export * from './rpc'
|
||||
|
@ -4,8 +4,8 @@ export class Middleware {
|
||||
constructor() {}
|
||||
|
||||
private static async execute<EventName extends T.RageFW_ClientEvent>(
|
||||
middlewares: T.RageFW_MiddlewareFunction<EventName>[],
|
||||
args: T.RageFW_ClientArgs<EventName>,
|
||||
middlewares: T.RageFW_MiddlewareFunction<EventName>[],
|
||||
): Promise<T.RageFW_MiddlewareResponseInternal> {
|
||||
for (let i = 0; i < middlewares.length; i++) {
|
||||
const result = await middlewares[i](...args)
|
||||
@ -22,25 +22,25 @@ export class Middleware {
|
||||
}
|
||||
|
||||
public static async process<EventName extends T.RageFW_ClientEvent>(
|
||||
middlewareOptions: T.RageFW_MiddlewareOptions<EventName>,
|
||||
callback: T.RageFW_ClientCallback<EventName>,
|
||||
args: T.RageFW_ClientArgs<EventName>,
|
||||
) {
|
||||
middlewareOptions?: T.RageFW_MiddlewareOptions<EventName>,
|
||||
): Promise<boolean> {
|
||||
if (!middlewareOptions) return true
|
||||
|
||||
if (Array.isArray(middlewareOptions)) {
|
||||
const middlewaresResponse = await Middleware.execute(
|
||||
middlewareOptions,
|
||||
args,
|
||||
middlewareOptions,
|
||||
)
|
||||
|
||||
if (middlewaresResponse.success) return await callback(...args)
|
||||
return middlewaresResponse.success
|
||||
} else {
|
||||
const middlewaresResponse = await Middleware.execute(
|
||||
middlewareOptions.executables,
|
||||
args,
|
||||
middlewareOptions.executables,
|
||||
)
|
||||
|
||||
if (middlewaresResponse.success) {
|
||||
return await callback(...args)
|
||||
return true
|
||||
} else {
|
||||
middlewareOptions.onError(
|
||||
middlewaresResponse.message ??
|
||||
@ -48,6 +48,7 @@ export class Middleware {
|
||||
middlewaresResponse.id +
|
||||
' failed',
|
||||
)
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
26
client/src/core/validation.ts
Normal file
26
client/src/core/validation.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import type * as T from '../types'
|
||||
|
||||
export class Validation {
|
||||
constructor() {}
|
||||
|
||||
public static process<EventName extends T.RageFW_ClientEvent>(
|
||||
args: T.RageFW_ClientArgs<EventName>,
|
||||
validationOptions?: T.RageFW_ValidationOptions,
|
||||
): boolean {
|
||||
if (!validationOptions) return true
|
||||
|
||||
if ('schema' in validationOptions) {
|
||||
const validationResponse = validationOptions.schema.safeParse(args)
|
||||
|
||||
if (validationResponse.success) {
|
||||
return true
|
||||
} else {
|
||||
validationOptions.onError(validationResponse.error)
|
||||
return false
|
||||
}
|
||||
} else {
|
||||
const validationResponse = validationOptions.safeParse(args)
|
||||
return validationResponse.success
|
||||
}
|
||||
}
|
||||
}
|
@ -2,3 +2,4 @@ export * from './browser'
|
||||
export * from './client'
|
||||
export * from './middleware'
|
||||
export * from './server'
|
||||
export * from './validation'
|
||||
|
11
client/src/types/validation.ts
Normal file
11
client/src/types/validation.ts
Normal file
@ -0,0 +1,11 @@
|
||||
import type { z } from 'zod'
|
||||
|
||||
export type RageFW_ValidationSchema = z.ZodTuple<any, any> | z.ZodArray<any>
|
||||
export type RageFW_ValidationSchemaExtended = {
|
||||
schema: RageFW_ValidationSchema
|
||||
onError: (error: z.ZodError) => unknown
|
||||
}
|
||||
|
||||
export type RageFW_ValidationOptions =
|
||||
| RageFW_ValidationSchema
|
||||
| RageFW_ValidationSchemaExtended
|
@ -4,7 +4,6 @@ export default defineConfig({
|
||||
entry: ['src/index.ts'],
|
||||
outDir: './dist',
|
||||
format: ['cjs'],
|
||||
noExternal: ['rage-rpc'],
|
||||
experimentalDts: true,
|
||||
splitting: false,
|
||||
sourcemap: false,
|
||||
|
14691
pnpm-lock.yaml
generated
14691
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -1,38 +1,50 @@
|
||||
{
|
||||
"name": "@entityseven/rage-fw-server",
|
||||
"version": "0.2.0",
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/src/index.d.ts",
|
||||
"files": [
|
||||
"dist/**/*",
|
||||
"readme.md",
|
||||
"LICENSE"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "tsup"
|
||||
"name": "@entityseven/rage-fw-server",
|
||||
"version": "0.2.0",
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/src/index.d.ts",
|
||||
"files": [
|
||||
"dist/**/*",
|
||||
"readme.md",
|
||||
"LICENSE"
|
||||
],
|
||||
"exports": {
|
||||
".": "./dist/index.js"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "tsup"
|
||||
},
|
||||
"dependencies": {
|
||||
"@entityseven/rage-fw-rpc": "0.2.5",
|
||||
"zod": "^3.23.8"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@entityseven/rage-fw-shared-types": "0.2.0",
|
||||
"@ragempcommunity/types-server": "^2.1.8"
|
||||
},
|
||||
"description": "Package used on a server-side of your Rage:MP Server",
|
||||
"keywords": [
|
||||
"rage-fw-server",
|
||||
"ragefw",
|
||||
"rage-fw",
|
||||
"ragemp",
|
||||
"rage:mp",
|
||||
"rage",
|
||||
"gta5"
|
||||
],
|
||||
"author": "Entity Seven Group",
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Danya H",
|
||||
"email": "dev.rilaxik@gmail.com",
|
||||
"url": "https://github.com/rilaxik/"
|
||||
},
|
||||
"dependencies": {
|
||||
"@entityseven/rage-fw-rpc": "0.2.5"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@entityseven/rage-fw-shared-types": "0.2.0",
|
||||
"@ragempcommunity/types-server": "^2.1.8"
|
||||
},
|
||||
"description": "Package used on a server-side of your Rage:MP Server",
|
||||
"keywords": ["rage-fw-server", "ragefw", "rage-fw", "ragemp", "rage:mp", "rage", "gta5"],
|
||||
"author": "Entity Seven Group",
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Danya H",
|
||||
"email": "dev.rilaxik@gmail.com",
|
||||
"url": "https://github.com/rilaxik/"
|
||||
},
|
||||
{
|
||||
"name": "Oleksandr Honcharov",
|
||||
"email": "0976053529@ukr.net",
|
||||
"url": "https://github.com/SashaGoncharov19/"
|
||||
}
|
||||
],
|
||||
"license": "Custom-Attribution-NoDerivs",
|
||||
"gitHead": "ffd542c1deddb3033e16e0dae7557313ae09b05f"
|
||||
{
|
||||
"name": "Oleksandr Honcharov",
|
||||
"email": "0976053529@ukr.net",
|
||||
"url": "https://github.com/SashaGoncharov19/"
|
||||
}
|
||||
],
|
||||
"license": "Custom-Attribution-NoDerivs",
|
||||
"gitHead": "ffd542c1deddb3033e16e0dae7557313ae09b05f"
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
export * from './logger'
|
||||
export * from './middleware'
|
||||
export * from './player'
|
||||
export * from './rpc'
|
||||
export * from './server'
|
||||
|
@ -4,8 +4,8 @@ export class Middleware {
|
||||
constructor() {}
|
||||
|
||||
private static async execute<EventName extends T.RageFW_ServerEvent>(
|
||||
middlewares: T.RageFW_MiddlewareFunction<EventName>[],
|
||||
args: T.RageFW_ServerArgs<EventName>,
|
||||
middlewares: T.RageFW_MiddlewareFunction<EventName>[],
|
||||
): Promise<T.RageFW_MiddlewareResponseInternal> {
|
||||
for (let i = 0; i < middlewares.length; i++) {
|
||||
const result = await middlewares[i](...args)
|
||||
@ -22,25 +22,25 @@ export class Middleware {
|
||||
}
|
||||
|
||||
public static async process<EventName extends T.RageFW_ServerEvent>(
|
||||
middlewareOptions: T.RageFW_MiddlewareOptions<EventName>,
|
||||
callback: T.RageFW_ServerCallback<EventName>,
|
||||
args: T.RageFW_ServerArgs<EventName>,
|
||||
) {
|
||||
middlewareOptions?: T.RageFW_MiddlewareOptions<EventName>,
|
||||
): Promise<boolean> {
|
||||
if (!middlewareOptions) return true
|
||||
|
||||
if (Array.isArray(middlewareOptions)) {
|
||||
const middlewaresResponse = await Middleware.execute(
|
||||
middlewareOptions,
|
||||
args,
|
||||
middlewareOptions,
|
||||
)
|
||||
|
||||
if (middlewaresResponse.success) return await callback(...args)
|
||||
return middlewaresResponse.success
|
||||
} else {
|
||||
const middlewaresResponse = await Middleware.execute(
|
||||
middlewareOptions.executables,
|
||||
args,
|
||||
middlewareOptions.executables,
|
||||
)
|
||||
|
||||
if (middlewaresResponse.success) {
|
||||
return await callback(...args)
|
||||
return true
|
||||
} else {
|
||||
middlewareOptions.onError(
|
||||
middlewaresResponse.message ??
|
||||
@ -48,6 +48,7 @@ export class Middleware {
|
||||
middlewaresResponse.id +
|
||||
' failed',
|
||||
)
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { rpc } from './rpc'
|
||||
import { Middleware } from './middleware'
|
||||
import { Validation } from './validation'
|
||||
import type * as T from '../types'
|
||||
|
||||
/** Server-side interactions */
|
||||
@ -10,6 +11,7 @@ export class Server {
|
||||
* @param eventName - The name of the event to register
|
||||
* @param callback - The callback function to be executed when the event is triggered
|
||||
* @param [options] - Optional settings for callback execution
|
||||
* @param [options.validation] - Validation schema to be checked before the callback executes
|
||||
* @param [options.middlewares] - Middleware functions to be checked before the callback executes
|
||||
* @returns {Server} The current server instance, enabling method chaining
|
||||
*
|
||||
@ -44,6 +46,7 @@ export class Server {
|
||||
eventName: EventName,
|
||||
callback: T.RageFW_ServerCallback<EventName>,
|
||||
options?: {
|
||||
validation?: T.RageFW_ValidationOptions
|
||||
middlewares?: T.RageFW_MiddlewareOptions<EventName>
|
||||
},
|
||||
): Server {
|
||||
@ -52,9 +55,22 @@ export class Server {
|
||||
ReturnType<typeof callback> | Promise<unknown>,
|
||||
EventName
|
||||
>(eventName, async (...data) => {
|
||||
if (!options?.middlewares) return await callback(...data)
|
||||
if (!options?.middlewares && !options?.validation)
|
||||
return await callback(...data)
|
||||
|
||||
await Middleware.process(options.middlewares, callback, data)
|
||||
const validationSuccess = Validation.process(
|
||||
data,
|
||||
options?.validation,
|
||||
)
|
||||
if (!validationSuccess) return
|
||||
|
||||
const middlewaresSuccess = await Middleware.process(
|
||||
data,
|
||||
options?.middlewares,
|
||||
)
|
||||
if (!middlewaresSuccess) return
|
||||
|
||||
return await callback(...data)
|
||||
})
|
||||
|
||||
return this
|
||||
@ -90,7 +106,3 @@ export class Server {
|
||||
// return rpc.call(eventName, args)
|
||||
// }
|
||||
}
|
||||
|
||||
// new Server()
|
||||
// .register('customServerEvent', async (a, b, c) => true)
|
||||
// .unregister('customServerEvent')
|
||||
|
26
server/src/core/validation.ts
Normal file
26
server/src/core/validation.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import type * as T from '../types'
|
||||
|
||||
export class Validation {
|
||||
constructor() {}
|
||||
|
||||
public static process<EventName extends T.RageFW_ServerEvent>(
|
||||
args: T.RageFW_ServerArgs<EventName>,
|
||||
validationOptions?: T.RageFW_ValidationOptions,
|
||||
): boolean {
|
||||
if (!validationOptions) return true
|
||||
|
||||
if ('schema' in validationOptions) {
|
||||
const validationResponse = validationOptions.schema.safeParse(args)
|
||||
|
||||
if (validationResponse.success) {
|
||||
return true
|
||||
} else {
|
||||
validationOptions.onError(validationResponse.error)
|
||||
return false
|
||||
}
|
||||
} else {
|
||||
const validationResponse = validationOptions.safeParse(args)
|
||||
return validationResponse.success
|
||||
}
|
||||
}
|
||||
}
|
@ -2,3 +2,4 @@ export * from './browser'
|
||||
export * from './client'
|
||||
export * from './middleware'
|
||||
export * from './server'
|
||||
export * from './validation'
|
||||
|
11
server/src/types/validation.ts
Normal file
11
server/src/types/validation.ts
Normal file
@ -0,0 +1,11 @@
|
||||
import type { z } from 'zod'
|
||||
|
||||
export type RageFW_ValidationSchema = z.ZodTuple<any, any> | z.ZodArray<any>
|
||||
export type RageFW_ValidationSchemaExtended = {
|
||||
schema: RageFW_ValidationSchema
|
||||
onError: (error: z.ZodError) => unknown
|
||||
}
|
||||
|
||||
export type RageFW_ValidationOptions =
|
||||
| RageFW_ValidationSchema
|
||||
| RageFW_ValidationSchemaExtended
|
@ -1,12 +1,12 @@
|
||||
import { defineConfig } from 'tsup'
|
||||
|
||||
export default defineConfig({
|
||||
entry: ['src/index.ts'],
|
||||
entry: ['./src/index.ts'],
|
||||
outDir: './dist',
|
||||
format: ['cjs'],
|
||||
noExternal: ['rage-rpc'],
|
||||
experimentalDts: true,
|
||||
splitting: false,
|
||||
sourcemap: false,
|
||||
clean: true,
|
||||
bundle: false,
|
||||
})
|
||||
|
Loading…
Reference in New Issue
Block a user