Comparing version 1.0.27 to 1.0.29
@@ -1,52 +0,33 @@ | ||
/// <reference types="qs" /> | ||
/// <reference types="formidable" /> | ||
import { Controller } from '../../Lib'; | ||
import { Request } from 'express'; | ||
declare class Invoice extends Controller { | ||
kabium: Patate; | ||
create: import("../../Lib").Endpoint<({ query }: {} & { | ||
query: import("yup/lib/object").AssertsShape<{ | ||
token: import("yup/lib/string").RequiredStringSchema<string | undefined, import("yup/lib/types").AnyObject>; | ||
}>; | ||
}) => import("yup/lib/object").AssertsShape<{ | ||
token: import("yup/lib/string").RequiredStringSchema<string | undefined, import("yup/lib/types").AnyObject>; | ||
}> | "HEY", never>; | ||
} | ||
export declare class User extends Controller { | ||
invoice: Invoice; | ||
create: import("../../Lib").Endpoint<(p: { | ||
mid: void; | ||
create: import("../../Lib").BridgeHandler<(p: { | ||
query: { | ||
dzds: string; | ||
}; | ||
mid: { | ||
ahouai: string; | ||
} & { | ||
yoo: string; | ||
sah: string; | ||
}; | ||
}) => ({ | ||
ahouai: string; | ||
} & { | ||
body: { | ||
nana: string; | ||
yoo: string; | ||
sah: string; | ||
}) | ",," | { | ||
readonly STT: "ouiou"; | ||
}, [import("../../Lib").BridgeHandler<(p: {}) => { | ||
ahouai: string; | ||
}, never>, import("../../Lib").BridgeHandler<(p: { | ||
mid: { | ||
yoo: string; | ||
}; | ||
query: import("yup/lib/object").AssertsShape<{ | ||
token: import("yup/lib/string").RequiredStringSchema<string | undefined, import("yup/lib/types").AnyObject>; | ||
}>; | ||
}) => { | ||
mid: void; | ||
} & { | ||
body: { | ||
nana: string; | ||
}; | ||
query: import("yup/lib/object").AssertsShape<{ | ||
token: import("yup/lib/string").RequiredStringSchema<string | undefined, import("yup/lib/types").AnyObject>; | ||
}>; | ||
}, [(req: Request<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>) => void]>; | ||
update: import("../../Lib").Endpoint<(p: {} & {}) => string, never>; | ||
yoo: string; | ||
sah: string; | ||
}, [import("../../Lib").BridgeHandler<(p: {}) => { | ||
yoo: string; | ||
}, never>]>]>; | ||
} | ||
export declare class Test extends Controller { | ||
test: Invoice; | ||
k: string; | ||
hhh: User; | ||
} | ||
export declare class Patate extends Controller { | ||
update: import("../../Lib").Endpoint<(p: {} & { | ||
files: { | ||
image1: import("formidable").File; | ||
file: import("formidable").File; | ||
}; | ||
}) => string, never>; | ||
} | ||
export {}; | ||
//# sourceMappingURL=user.d.ts.map |
"use strict"; | ||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
var desc = Object.getOwnPropertyDescriptor(m, k); | ||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
desc = { enumerable: true, get: function() { return m[k]; } }; | ||
} | ||
Object.defineProperty(o, k2, desc); | ||
}) : (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
o[k2] = m[k]; | ||
})); | ||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||
Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||
}) : function(o, v) { | ||
o["default"] = v; | ||
}); | ||
var __importStar = (this && this.__importStar) || function (mod) { | ||
if (mod && mod.__esModule) return mod; | ||
var result = {}; | ||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||
__setModuleDefault(result, mod); | ||
return result; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.Patate = exports.Test = exports.User = void 0; | ||
exports.User = void 0; | ||
const Lib_1 = require("../../Lib"); | ||
const s = __importStar(require("superstruct")); | ||
const yup = __importStar(require("yup")); | ||
const auth = (0, Lib_1.createMiddleware)((req) => ({ YES: req.headers.trailer })); | ||
const auth3 = (req) => ({ YESEE: { oui: true } }); | ||
const auth2 = (0, Lib_1.createMiddleware)((req) => { | ||
if (req.headers.token) | ||
return (0, Lib_1.createHttpError)('Bad Request', 'AH', 'oui oui'); | ||
if (req.headers) | ||
return { user: { name: 'Nab', age: 78 } }; | ||
else | ||
return { association: { admins: ['Nab'] } }; | ||
const zod_1 = require("zod"); | ||
const mid1 = (0, Lib_1.handler)({ | ||
// body: z.object({ name: z.string() }), | ||
resolve: (p) => { | ||
// console.log('hhh'); | ||
return { yoo: 'jj' }; | ||
}, | ||
}); | ||
class Invoice extends Lib_1.Controller { | ||
kabium = new Patate(); | ||
create = this.createEndpoint({ | ||
query: yup.object({ token: yup.string().required() }), | ||
handler: ({ query }) => { | ||
if (query.token === 'my_secret_password') | ||
return query; | ||
return 'HEY'; | ||
}, | ||
}); | ||
} | ||
const consoleMethod = (0, Lib_1.createMiddleware)((req) => console.log('method: ', req.method)); | ||
const create = (0, Lib_1.createEndpoint)({ | ||
middlewares: (0, Lib_1.apply)(consoleMethod), | ||
body: s.object({ nana: s.string() }), | ||
query: yup.object({ token: yup.string().required() }), | ||
handler: (p) => { | ||
// p.query. | ||
return p; | ||
const mid2 = (0, Lib_1.handler)({ | ||
// middlewares: apply(mid1), | ||
// body: z.object({ sasa: z.string() }), | ||
resolve: (p) => { | ||
// console.log('What', p.mid); | ||
return { ahouai: 'jj' }; | ||
}, | ||
}); | ||
const auth = (0, Lib_1.handler)({ | ||
middlewares: (0, Lib_1.apply)(mid1), | ||
// headers: z.object({ token: z.string().min(10) }), | ||
// body: z.object({ shaady: z.string() }), | ||
resolve: (p) => { | ||
console.log(p.mid, 'here'); | ||
// if (p.headers.token !== 'jhsjdhsjdhjsdh') return httpError('Unauthorized', 'Wrong token'); | ||
return { sah: 'kk', ...p.mid }; | ||
}, | ||
}); | ||
class User extends Lib_1.Controller { | ||
invoice = new Invoice(); | ||
create = create; | ||
update = this.createEndpoint({ | ||
create = this.handler({ | ||
method: 'PATCH', | ||
description: 'Yo salut tu vas bien ?', | ||
// body: z.object({ name: z.string() }), | ||
// middlewares: apply(auth), | ||
handler: (p) => { | ||
if (p) | ||
console.log('AH'); | ||
query: zod_1.z.object({ dzds: zod_1.z.string() }), | ||
middlewares: (0, Lib_1.apply)(mid2, auth), | ||
resolve: (p) => { | ||
// p.files.salut. | ||
return p.mid; | ||
if (p.query) | ||
return { STT: 'ouiou' }; | ||
return ',,'; | ||
// const d = this.create.handler; | ||
// throw new Error('Yo tu vas bien?'); | ||
// return { d: 7 / 0 }; | ||
}, | ||
@@ -80,21 +47,2 @@ }); | ||
exports.User = User; | ||
class Test extends Lib_1.Controller { | ||
test = new Invoice(); | ||
k = 'SALUT'; | ||
hhh = new User(); | ||
} | ||
exports.Test = Test; | ||
class Patate extends Lib_1.Controller { | ||
update = this.createEndpoint({ | ||
method: 'PATCH', | ||
description: 'Yo salut tu vas bien ?', | ||
files: (0, Lib_1.apply)('image1', 'file'), | ||
handler: (p) => { | ||
console.log(p); | ||
return 'ok'; | ||
// if (!p.mid.association) p.mid.user.age; | ||
}, | ||
}); | ||
} | ||
exports.Patate = Patate; | ||
//# sourceMappingURL=user.js.map |
@@ -14,7 +14,7 @@ "use strict"; | ||
}); | ||
const errorHandler = (0, Lib_1.onError)(({ error, req, path, mdlwData }) => { | ||
const errorHandler = (0, Lib_1.onError)(({ error, path }) => { | ||
if (error.name === 'Internal server error') | ||
console.log(error); // Send to bug reporting | ||
else | ||
console.log('Other error', error, path, mdlwData); | ||
console.log('Other error', error, path); | ||
}); | ||
@@ -26,3 +26,18 @@ app.use('', (0, Lib_1.createExpressMiddleware)(routes_1.routes, errorHandler)); | ||
}); | ||
let t; | ||
let t = {}; | ||
// if (typeof t === 'object' && 'error' in t) { | ||
// switch (t.error.name) { | ||
// case 'Body schema validation error': | ||
// break; | ||
// // case '' | ||
// } | ||
// } else { | ||
// t; | ||
// } | ||
// if (typeof t === 'object' && 'error' in t) { | ||
// switch (t.error.name) { | ||
// case 'AH': | ||
// // t.error. | ||
// } | ||
// } | ||
//# sourceMappingURL=index.js.map |
@@ -1,15 +0,5 @@ | ||
import { User, Test, Patate } from './Controllers/user'; | ||
import { User } from './Controllers/user'; | ||
export declare const routes: { | ||
user: User; | ||
assx: { | ||
tsb: User; | ||
ro: { | ||
t: Test; | ||
}; | ||
}; | ||
n: { | ||
t: Patate; | ||
}; | ||
straight: Patate; | ||
}; | ||
//# sourceMappingURL=routes.d.ts.map |
@@ -5,14 +5,5 @@ "use strict"; | ||
const user_1 = require("./Controllers/user"); | ||
const test = new user_1.Test(); | ||
exports.routes = { | ||
[`user`]: new user_1.User(), | ||
assx: { | ||
tsb: new user_1.User(), | ||
ro: { t: test }, | ||
}, | ||
n: { | ||
t: new user_1.Patate(), | ||
}, | ||
straight: new user_1.Patate(), | ||
user: new user_1.User(), | ||
}; | ||
//# sourceMappingURL=routes.js.map |
@@ -52,19 +52,19 @@ "use strict"; | ||
//////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
Object.entries(controller).forEach(([name, endpoint]) => { | ||
if (!(0, Utilities_1.isEndpoint)(endpoint)) | ||
Object.entries(controller).forEach(([name, handler]) => { | ||
if (!(0, Utilities_1.isBridgeHandler)(handler)) | ||
return; | ||
if (endpoint.description) | ||
file += `\n /** ${endpoint.description}*/`; | ||
if (handler.description) | ||
file += `\n /** ${handler.description}*/`; | ||
const paramsString = []; | ||
if (endpoint.bodySchema) | ||
if (handler.bodySchema) | ||
paramsString.push(`body: ${typeVar}['${name}']['body']`); | ||
if (endpoint.querySchema) | ||
if (handler.querySchema) | ||
paramsString.push(`query: ${typeVar}['${name}']['query']`); | ||
if (endpoint.headersSchema) | ||
if (handler.headersSchema) | ||
paramsString.push(`headers: ${typeVar}['${name}']['headers']`); | ||
if (endpoint.filesConfig) { | ||
if (endpoint.filesConfig === 'any') | ||
if (handler.filesConfig) { | ||
if (handler.filesConfig === 'any') | ||
paramsString.push('files: Record<string, File>'); | ||
else | ||
paramsString.push(`files: {${endpoint.filesConfig | ||
paramsString.push(`files: {${handler.filesConfig | ||
.map((f) => ` ${f}: File;`) | ||
@@ -77,3 +77,3 @@ .reduce((a, b) => a + b) | ||
.map((p) => `/${p}`) | ||
.reduce((a, b) => a + b)}', method: '${endpoint.method}'${hasParams ? ', ...p ' : ''}});\n };\n`; | ||
.reduce((a, b) => a + b)}', method: '${handler.method}'${hasParams ? ', ...p ' : ''}});\n };\n`; | ||
}); | ||
@@ -80,0 +80,0 @@ file += `}\n`; |
import { ControllerI } from '../Controller'; | ||
export declare const createEndpoint: ControllerI['createEndpoint']; | ||
export declare const handler: ControllerI['handler']; | ||
export declare class Controller implements ControllerI { | ||
isBridgeController: boolean; | ||
createEndpoint: ControllerI['createEndpoint']; | ||
createHttpError: <Type extends "Bad Request" | "Unauthorized" | "Forbidden" | "Not Found" | "Method Not Allowed" | "Not Acceptable" | "Proxy Authentication Required" | "Request Timeout" | "Conflict" | "Gone" | "Length Required" | "Precondition Failed" | "Request Entity Too Large" | "Request-URI Too Long" | "Unsupported Media Type" | "Requested Range Not Satisfiable" | "Expectation Failed" | "Unprocessable entity" | "Internal Server Error" | "Not Implemented" | "Bad Gateway" | "Service Unavailable" | "Gateway Timeout" | "HTTP Version Not Supported", Name extends string, Data>(type: Type, name: Name, data?: Data | undefined) => { | ||
handler: ControllerI['handler']; | ||
httpError: <Type extends "Bad Request" | "Unauthorized" | "Forbidden" | "Not Found" | "Method Not Allowed" | "Not Acceptable" | "Proxy Authentication Required" | "Request Timeout" | "Conflict" | "Gone" | "Length Required" | "Precondition Failed" | "Request Entity Too Large" | "Request-URI Too Long" | "Unsupported Media Type" | "Requested Range Not Satisfiable" | "Expectation Failed" | "Unprocessable entity" | "Internal Server Error" | "Not Implemented" | "Bad Gateway" | "Service Unavailable" | "Gateway Timeout" | "HTTP Version Not Supported", Name extends string, Data>(type: Type, name: Name, data?: Data | undefined) => { | ||
error: { | ||
@@ -8,0 +8,0 @@ name: Name; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.Controller = exports.createEndpoint = void 0; | ||
const Endpoint_1 = require("../Endpoint"); | ||
exports.Controller = exports.handler = void 0; | ||
const Handler_1 = require("../Handler"); | ||
const Errors_1 = require("../Errors"); | ||
const createEndpoint = (routeParams) => { | ||
return new Endpoint_1.Endpoint({ | ||
// This is a BridgeHandler | ||
const handler = (routeParams) => { | ||
return new Handler_1.BridgeHandler({ | ||
bodySchema: routeParams.body, | ||
@@ -12,13 +13,13 @@ querySchema: routeParams.query, | ||
filesConfig: routeParams.files, | ||
method: routeParams.method || 'POST', | ||
method: routeParams.method, | ||
middlewares: routeParams.middlewares, | ||
description: routeParams.description, | ||
handler: routeParams.handler, | ||
resolve: routeParams.resolve, | ||
}); | ||
}; | ||
exports.createEndpoint = createEndpoint; | ||
exports.handler = handler; | ||
class Controller { | ||
isBridgeController = true; | ||
createEndpoint = (routeParams) => { | ||
return new Endpoint_1.Endpoint({ | ||
handler = (routeParams) => { | ||
return new Handler_1.BridgeHandler({ | ||
bodySchema: routeParams.body, | ||
@@ -28,11 +29,11 @@ querySchema: routeParams.query, | ||
filesConfig: routeParams.files, | ||
method: routeParams.method || 'POST', | ||
method: routeParams.method, | ||
middlewares: routeParams.middlewares, | ||
description: routeParams.description, | ||
handler: routeParams.handler, | ||
resolve: routeParams.resolve, | ||
}); | ||
}; | ||
createHttpError = Errors_1.createHttpError; | ||
httpError = Errors_1.httpError; | ||
} | ||
exports.Controller = Controller; | ||
//# sourceMappingURL=controller.js.map |
@@ -1,11 +0,7 @@ | ||
import { KeysWithValNotNever, MidsReturnsIntersection } from '../Utilities'; | ||
import { MidsReturnsIntersection, MidsParams } from '../Utilities'; | ||
import { Method } from '../Routes'; | ||
import { FilesConfig, InferBridgeParser, BridgeParser } from '../Validators'; | ||
import { Endpoint } from '../Endpoint'; | ||
import { BridgeHandler, DataParser, InferDataParser, FilesConfig } from '../Handler'; | ||
import formidable from 'formidable'; | ||
import { Request } from 'express'; | ||
export declare type Middleware = (p: Request) => Record<any, any> | void; | ||
declare type FilesDoNotExists = ['BridgeFilesDoNotExists']; | ||
export interface RouteParams<Body, Query, Mids, Handler, Method, Headers, Files> { | ||
body?: Method extends 'GET' ? never : Files extends FilesDoNotExists ? Body : never /** Can't have a body with GET method or with files */; | ||
export interface RouteParams<Body, Query, Mids, Resolve, Method, Headers, Files> { | ||
body?: Body /** Can't have a body with GET method or with files, an error is throw if ther developer tries to, but the type here doesnt block to keep a clean UI */; | ||
query?: Query; | ||
@@ -17,19 +13,15 @@ headers?: Headers; | ||
description?: string; | ||
handler: Handler; | ||
resolve: Resolve; | ||
} | ||
declare type KeysWithValNotEmptyObject<T> = keyof { | ||
[P in keyof T as keyof T[P] extends never ? never : P]: P; | ||
}; | ||
export interface ControllerI { | ||
createEndpoint: <Handler extends (p: { | ||
[key in KeysWithValNotNever<{ | ||
mid: MidsReturnsIntersection<Mids>; | ||
}> & keyof { | ||
mid: MidsReturnsIntersection<Mids>; | ||
}]: { | ||
mid: MidsReturnsIntersection<Mids>; | ||
}[key]; | ||
} & { | ||
[key in KeysWithValNotNever<{ | ||
body: InferBridgeParser<Body>; | ||
query: InferBridgeParser<Query>; | ||
headers: InferBridgeParser<Headers>; | ||
files: Files extends FilesDoNotExists ? never : Files extends 'any' ? { | ||
handler: <Resolve extends (p: { | ||
[key in KeysWithValNotEmptyObject<{ | ||
mid: MidsReturnsIntersection<Mids> extends never ? {} : MidsReturnsIntersection<Mids>; | ||
body: (InferDataParser<Body> extends never ? {} : InferDataParser<Body>) & (MidsParams<Mids>['body'] extends never ? {} : MidsParams<Mids>['body']); | ||
query: (InferDataParser<Query> extends never ? {} : InferDataParser<Query>) & (MidsParams<Mids>['query'] extends never ? {} : MidsParams<Mids>['query']); | ||
headers: (InferDataParser<Headers> extends never ? {} : InferDataParser<Headers>) & (MidsParams<Mids>['headers'] extends never ? {} : MidsParams<Mids>['headers']); | ||
files: Files extends ['BridgeFilesDoNotExists'] ? {} : Files extends 'any' ? { | ||
[key: string]: formidable.File; | ||
@@ -40,6 +32,7 @@ } : { | ||
}> & keyof { | ||
body: InferBridgeParser<Body>; | ||
query: InferBridgeParser<Query>; | ||
headers: InferBridgeParser<Headers>; | ||
files: Files extends FilesDoNotExists ? never : Files extends 'any' ? { | ||
mid: MidsReturnsIntersection<Mids> extends never ? {} : MidsReturnsIntersection<Mids>; | ||
body: (InferDataParser<Body> extends never ? {} : InferDataParser<Body>) & (MidsParams<Mids>['body'] extends never ? {} : MidsParams<Mids>['body']); | ||
query: (InferDataParser<Query> extends never ? {} : InferDataParser<Query>) & (MidsParams<Mids>['query'] extends never ? {} : MidsParams<Mids>['query']); | ||
headers: (InferDataParser<Headers> extends never ? {} : InferDataParser<Headers>) & (MidsParams<Mids>['headers'] extends never ? {} : MidsParams<Mids>['headers']); | ||
files: Files extends ['BridgeFilesDoNotExists'] ? {} : Files extends 'any' ? { | ||
[key: string]: formidable.File; | ||
@@ -50,6 +43,7 @@ } : { | ||
}]: { | ||
body: InferBridgeParser<Body>; | ||
query: InferBridgeParser<Query>; | ||
headers: InferBridgeParser<Headers>; | ||
files: Files extends FilesDoNotExists ? never : Files extends 'any' ? { | ||
mid: MidsReturnsIntersection<Mids> extends never ? {} : MidsReturnsIntersection<Mids>; | ||
body: (InferDataParser<Body> extends never ? {} : InferDataParser<Body>) & (MidsParams<Mids>['body'] extends never ? {} : MidsParams<Mids>['body']); | ||
query: (InferDataParser<Query> extends never ? {} : InferDataParser<Query>) & (MidsParams<Mids>['query'] extends never ? {} : MidsParams<Mids>['query']); | ||
headers: (InferDataParser<Headers> extends never ? {} : InferDataParser<Headers>) & (MidsParams<Mids>['headers'] extends never ? {} : MidsParams<Mids>['headers']); | ||
files: Files extends ['BridgeFilesDoNotExists'] ? {} : Files extends 'any' ? { | ||
[key: string]: formidable.File; | ||
@@ -60,5 +54,5 @@ } : { | ||
}[key]; | ||
}) => Res, Res, Body extends BridgeParser<Record<any, any>> = never, Query extends BridgeParser<Record<string, any>> = never, Headers extends BridgeParser<Record<string, any>> = never, Files extends FilesConfig = FilesDoNotExists, Mids extends ReadonlyArray<Middleware> = never, Meth extends Method = 'POST'>(p: RouteParams<Body, Query, Mids, Handler, Meth, Headers, Files>) => Endpoint<Handler, Mids>; | ||
}) => Res, Res, Body extends DataParser<Record<any, any>> = never, Query extends DataParser<Record<string, any>> = never, Headers extends DataParser<Record<string, any>> = never, Files extends FilesConfig = ['BridgeFilesDoNotExists'], Mids extends ReadonlyArray<BridgeHandler> = never, Meth extends Method = 'POST'>(p: RouteParams<Body, Query, Mids, Resolve, Meth, Headers, Files>) => BridgeHandler<Resolve, Mids>; | ||
} | ||
export {}; | ||
//# sourceMappingURL=types.d.ts.map |
import { ErrorStatus } from './status'; | ||
export declare const createHttpError: <Type extends "Bad Request" | "Unauthorized" | "Forbidden" | "Not Found" | "Method Not Allowed" | "Not Acceptable" | "Proxy Authentication Required" | "Request Timeout" | "Conflict" | "Gone" | "Length Required" | "Precondition Failed" | "Request Entity Too Large" | "Request-URI Too Long" | "Unsupported Media Type" | "Requested Range Not Satisfiable" | "Expectation Failed" | "Unprocessable entity" | "Internal Server Error" | "Not Implemented" | "Bad Gateway" | "Service Unavailable" | "Gateway Timeout" | "HTTP Version Not Supported", Name extends string, Data>(type: Type, name: Name, data?: Data | undefined) => { | ||
export declare const httpError: <Type extends "Bad Request" | "Unauthorized" | "Forbidden" | "Not Found" | "Method Not Allowed" | "Not Acceptable" | "Proxy Authentication Required" | "Request Timeout" | "Conflict" | "Gone" | "Length Required" | "Precondition Failed" | "Request Entity Too Large" | "Request-URI Too Long" | "Unsupported Media Type" | "Requested Range Not Satisfiable" | "Expectation Failed" | "Unprocessable entity" | "Internal Server Error" | "Not Implemented" | "Bad Gateway" | "Service Unavailable" | "Gateway Timeout" | "HTTP Version Not Supported", Name extends string, Data>(type: Type, name: Name, data?: Data | undefined) => { | ||
error: { | ||
@@ -35,2 +35,3 @@ name: Name; | ||
export * from './listener'; | ||
export * from './types'; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -17,9 +17,10 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.createHttpError = void 0; | ||
exports.httpError = void 0; | ||
const status_1 = require("./status"); | ||
const createHttpError = (type, name, data) => { | ||
const httpError = (type, name, data) => { | ||
return { error: { status: status_1.errorStatus[type], name, data } }; | ||
}; | ||
exports.createHttpError = createHttpError; | ||
exports.httpError = httpError; | ||
__exportStar(require("./listener"), exports); | ||
__exportStar(require("./types"), exports); | ||
//# sourceMappingURL=index.js.map |
@@ -1,2 +0,1 @@ | ||
import { Request } from 'express'; | ||
export declare type OnError = <T extends ErrorHandler>(p: T) => T; | ||
@@ -10,5 +9,3 @@ export declare type ErrorHandler = (p: { | ||
path: string; | ||
req: Request; | ||
mdlwData?: Record<any, any>; | ||
}) => void; | ||
//# sourceMappingURL=types.d.ts.map |
@@ -5,4 +5,4 @@ export * from './Server'; | ||
export * from './Errors'; | ||
export * from './Endpoint'; | ||
export * from './Handler'; | ||
export * from './Utilities'; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -21,4 +21,4 @@ "use strict"; | ||
__exportStar(require("./Errors"), exports); | ||
__exportStar(require("./Endpoint"), exports); | ||
__exportStar(require("./Handler"), exports); | ||
__exportStar(require("./Utilities"), exports); | ||
//# sourceMappingURL=index.js.map |
@@ -17,6 +17,5 @@ "use strict"; | ||
Object.entries(controller).forEach(([name, endpoint]) => { | ||
if ((0, Utilities_1.isEndpoint)(endpoint)) | ||
if ((0, Utilities_1.isBridgeHandler)(endpoint)) | ||
serverRoutes[`${prefix}/${name}`] = { | ||
handler: endpoint.handler, | ||
validator: endpoint.validator, | ||
endpoint: endpoint, | ||
filesConfig: endpoint.filesConfig, | ||
@@ -23,0 +22,0 @@ }; |
import { ControllerI } from '../Controller/'; | ||
import { Endpoint } from '../Endpoint'; | ||
import { MidsErrorReturnsIntersection } from '../Utilities'; | ||
import { Validator, FilesConfig } from '../Validators'; | ||
import { BridgeHandler, Handler, FilesConfig } from '../Handler'; | ||
export declare type BridgeRoutes = { | ||
@@ -10,4 +8,3 @@ [key: string | number | symbol]: BridgeRoutes | ControllerI; | ||
[key: string]: { | ||
handler: (p: any) => Record<any, any> | Promise<Record<any, any>>; | ||
validator?: Validator; | ||
endpoint: Handler; | ||
filesConfig?: FilesConfig; | ||
@@ -17,9 +14,30 @@ }; | ||
export declare type Method = 'POST' | 'PATCH' | 'GET' | 'DELETE' | 'PUT'; | ||
declare type BridgeHandlerReturnType<H extends BridgeHandler> = H extends BridgeHandler<infer ResolveFct, infer Middlewares> ? { | ||
body: Parameters<ResolveFct>[0]['body']; | ||
query: Parameters<ResolveFct>[0]['query']; | ||
headers: Parameters<ResolveFct>[0]['headers']; | ||
return: ReturnType<ResolveFct> | Extract<BridgeHandlerReturnType<Middlewares[number]>['return'], { | ||
error: any; | ||
}> | (Parameters<ResolveFct>[0]['body'] extends Record<any, any> ? { | ||
error: { | ||
name: 'Body schema validation error'; | ||
status: 422; | ||
data: any; | ||
}; | ||
} : never) | (Parameters<ResolveFct>[0]['headers'] extends Record<any, any> ? { | ||
error: { | ||
name: 'Headers schema validation error'; | ||
status: 422; | ||
data: any; | ||
}; | ||
} : never) | (Parameters<ResolveFct>[0]['query'] extends Record<any, any> ? { | ||
error: { | ||
name: 'Query schema validation error'; | ||
status: 422; | ||
data: any; | ||
}; | ||
} : never); | ||
} : {}; | ||
declare type ControllerSDK<T extends ControllerI> = { | ||
[key in keyof T]: T[key] extends Endpoint<infer SDKFct, infer Middlewares> ? { | ||
body: Parameters<SDKFct>[0]['body']; | ||
query: Parameters<SDKFct>[0]['query']; | ||
headers: Parameters<SDKFct>[0]['headers']; | ||
return: ReturnType<SDKFct> | MidsErrorReturnsIntersection<Middlewares>; | ||
} : T[key] extends ControllerI ? ControllerSDK<T[key]> : never; | ||
[key in keyof T]: T[key] extends BridgeHandler<any, any> ? BridgeHandlerReturnType<T[key]> : T[key] extends ControllerI ? ControllerSDK<T[key]> : never; | ||
}; | ||
@@ -26,0 +44,0 @@ export declare type RoutesToSDK<T extends BridgeRoutes> = { |
@@ -1,5 +0,5 @@ | ||
import { Request, Response, NextFunction } from 'express'; | ||
/// <reference types="node" /> | ||
import { BridgeRoutes } from '../Routes'; | ||
import { ErrorHandler } from '../Errors/types'; | ||
export declare const createExpressMiddleware: (routes: BridgeRoutes, onError?: ErrorHandler | undefined) => (req: Request, res: Response, next: NextFunction) => Promise<void | Response<any, Record<string, any>>>; | ||
export declare const createExpressMiddleware: (routes: BridgeRoutes, onError?: ErrorHandler | undefined) => (req: import("http").IncomingMessage, res: import("http").ServerResponse) => Promise<import("http").ServerResponse | undefined>; | ||
//# sourceMappingURL=express.d.ts.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.createExpressMiddleware = void 0; | ||
const Routes_1 = require("../Routes"); | ||
const bodyJSON_1 = require("./bodyJSON"); | ||
const formidableAsync_1 = require("./formidableAsync"); | ||
const Compiler_1 = require("../Compiler"); | ||
const fetchSDK_1 = require("./fetchSDK"); | ||
var argv = require('minimist')(process.argv.slice(2)); | ||
const createExpressMiddleware = (routes, onError) => { | ||
if (argv.c) | ||
(0, Compiler_1.compile)(routes); | ||
const serverRoutes = (0, Routes_1.createRoutes)(routes); | ||
return async (req, res, next) => { | ||
let validation = {}; | ||
try { | ||
if (req.path === '/fetchBridgeSDK') { | ||
(0, fetchSDK_1.fetchSdkRoute)(req, res); | ||
return; | ||
} | ||
const route = serverRoutes[req.path]; | ||
if (!route) | ||
return next(); | ||
if (route.filesConfig) | ||
req.body = await (0, formidableAsync_1.formidableAsyncParseFiles)(req); | ||
else | ||
req.body = await (0, bodyJSON_1.getJSONDataFromRequestStream)(req); | ||
if (route.validator) | ||
validation = await route.validator.validate(req, {}); | ||
if (validation.error) { | ||
onError?.({ | ||
error: validation.error, | ||
path: req.path, | ||
req, | ||
}); | ||
return res.status(validation.error.status || 500).json({ error: validation.error }); | ||
} | ||
// Return '' to transform void return into empty string | ||
const result = (await route.handler({ headers: req.headers, body: req.body, files: req.body, query: req.query, ...validation })) || | ||
''; | ||
if (result.error) { | ||
onError?.({ error: result.error, path: req.path, req, mdlwData: validation }); | ||
return res.status(result.error.status || 500).json({ error: result.error }); | ||
} | ||
typeof result === 'object' ? res.json(result) : res.send(result); | ||
} | ||
catch (err) { | ||
onError?.({ | ||
error: { status: 500, name: 'Internal server error', data: err }, | ||
path: req.path, | ||
req, | ||
mdlwData: validation, | ||
}); | ||
return res.status(500).json({ error: { status: 500, name: 'Internal server error' } }); | ||
} | ||
}; | ||
}; | ||
// import { getJSONDataFromRequestStream } from './HttpTransformers/bodyJSON'; | ||
// import { formidableAsyncParseFiles } from './HttpTransformers/formidableAsync'; | ||
// import { compile } from '../Compiler'; | ||
// import { fetchSdkRoute } from './fetchSDK'; | ||
// var argv = require('minimist')(process.argv.slice(2)); | ||
const standalone_1 = require("./standalone"); | ||
const createExpressMiddleware = (routes, onError) => (0, standalone_1.createHttpHandler)(routes, onError); | ||
exports.createExpressMiddleware = createExpressMiddleware; | ||
// { | ||
// if (argv.c) compile(routes); | ||
// const serverRoutes = createRoutes(routes); | ||
// return async (req: Request, res: Response) => { | ||
// let validation: any = {}; | ||
// try { | ||
// if (req.path === '/fetchBridgeSDK') { | ||
// fetchSdkRoute(req, res); | ||
// return; | ||
// } | ||
// const route = serverRoutes[req.path]; | ||
// if (!route) return; | ||
// if (route.filesConfig) req.body = await formidableAsyncParseFiles(req); | ||
// else req.body = await getJSONDataFromRequestStream(req); | ||
// if (route.validator) validation = await route.validator.validate(req, {}); | ||
// if (validation.error) { | ||
// onError?.({ | ||
// error: validation.error, | ||
// path: req.path, | ||
// req, | ||
// } as any); | ||
// return res.status(validation.error.status || 500).json({ error: validation.error }); | ||
// } | ||
// // Return '' to transform void return into empty string | ||
// const result = | ||
// (await route.resolve({ headers: req.headers, body: req.body, files: req.body, query: req.query, ...validation })) || | ||
// ''; | ||
// if (result.error) { | ||
// onError?.({ error: result.error, path: req.path, req, mdlwData: validation }); | ||
// return res.status(result.error.status || 500).json({ error: result.error }); | ||
// } | ||
// typeof result === 'object' ? res.json(result) : res.send(result); | ||
// } catch (err) { | ||
// onError?.({ | ||
// error: { status: 500, name: 'Internal server error', data: err }, | ||
// path: req.path, | ||
// req, | ||
// mdlwData: validation, | ||
// }); | ||
// return res.status(500).json({ error: { status: 500, name: 'Internal server error' } }); | ||
// } | ||
// }; | ||
// }; | ||
//# sourceMappingURL=express.js.map |
@@ -1,3 +0,4 @@ | ||
import { Request, Response } from 'express'; | ||
export declare const fetchSdkRoute: (req: Request, res: Response) => Response<any, Record<string, any>>; | ||
/// <reference types="node" /> | ||
import { IncomingMessage, ServerResponse } from 'http'; | ||
export declare const fetchSdkRoute: (req: IncomingMessage, res: ServerResponse) => ServerResponse; | ||
//# sourceMappingURL=fetchSDK.d.ts.map |
@@ -18,6 +18,7 @@ "use strict"; | ||
const fileType = 'application/zip'; | ||
res.writeHead(200, { 'Content-Disposition': `attachment; filename="${fileName}"`, 'Content-Type': fileType }); | ||
return res.end(zipFileContents); | ||
return res | ||
.writeHead(200, { 'Content-Disposition': `attachment; filename="${fileName}"`, 'Content-Type': fileType }) | ||
.end(zipFileContents); | ||
}; | ||
exports.fetchSdkRoute = fetchSdkRoute; | ||
//# sourceMappingURL=fetchSDK.js.map |
@@ -1,3 +0,6 @@ | ||
import { Apply } from './types'; | ||
import { BridgeHandler } from '../Handler'; | ||
import { UnionToArray } from './types'; | ||
declare type Apply = <B extends string | BridgeHandler, T extends Array<B>>(...args: T) => B extends string ? UnionToArray<T[number]> : UnionToArray<T[number]>; | ||
export declare const apply: Apply; | ||
export {}; | ||
//# sourceMappingURL=apply.d.ts.map |
@@ -1,5 +0,5 @@ | ||
import { Endpoint } from '../Endpoint'; | ||
import { BridgeHandler } from '../Handler'; | ||
import { ControllerI } from '../Controller'; | ||
export declare const isController: (data: any) => data is ControllerI; | ||
export declare const isEndpoint: (data: any) => data is Endpoint<any, any>; | ||
export declare const isBridgeHandler: (data: any) => data is BridgeHandler<any, any>; | ||
//# sourceMappingURL=check.d.ts.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.isEndpoint = exports.isController = void 0; | ||
exports.isBridgeHandler = exports.isController = void 0; | ||
const isController = (data) => { | ||
return data.createEndpoint !== undefined && data.isBridgeController; | ||
return typeof data === 'object' && data.handler !== undefined && data.isBridgeController; | ||
}; | ||
exports.isController = isController; | ||
const isEndpoint = (data) => { | ||
return data.handler !== undefined && data.isBridgeEndpoint; | ||
const isBridgeHandler = (data) => { | ||
return (typeof data === 'object' && data.resolve !== undefined && typeof data.resolve === 'function' && data.isBridgeHandler); | ||
}; | ||
exports.isEndpoint = isEndpoint; | ||
exports.isBridgeHandler = isBridgeHandler; | ||
//# sourceMappingURL=check.js.map |
@@ -1,2 +0,2 @@ | ||
import { Middleware } from '../Controller'; | ||
import { BridgeHandler } from '../Handler'; | ||
export declare type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never; | ||
@@ -16,23 +16,29 @@ export declare type KeysWithValNotNever<T> = keyof { | ||
} ? never : T; | ||
declare type KeepError<T> = T extends { | ||
error: any; | ||
} ? T : never; | ||
declare type NFooWithoutError<T extends Readonly<any[]>> = { | ||
[K in keyof T]: T[K] extends (...args: any) => any ? { | ||
foo: RemoveError<ReturnType<T[K]>>; | ||
declare type NFooWithoutError<T extends Readonly<BridgeHandler[]>> = { | ||
[K in keyof T]: T[K] extends BridgeHandler<(arg: any) => infer Output, any> ? { | ||
foo: RemoveError<Output>; | ||
} : never; | ||
}; | ||
declare type NFooOnlyError<T extends Readonly<any[]>> = { | ||
[K in keyof T]: T[K] extends (...args: any) => any ? { | ||
foo: KeepError<ReturnType<T[K]>>; | ||
declare type NFooWithoutErrorParams<T extends Readonly<BridgeHandler[]>> = { | ||
[K in keyof T]: T[K] extends BridgeHandler<(arg: infer Input) => any, any> ? { | ||
foo: RemoveError<Input>; | ||
} : never; | ||
}; | ||
export declare type MidsReturnsIntersection<T extends Readonly<any[]>> = Unfoo<UnionToIntersection<Values<NFooWithoutError<T>>>>; | ||
export declare type MidsErrorReturnsIntersection<T extends Readonly<any[]>> = Unfoo<UnionToIntersection<Values<NFooOnlyError<T>>>>; | ||
export declare type MidsParams<T extends Readonly<any[]>> = Unfoo<UnionToIntersection<Values<NFooWithoutErrorParams<T>>>>; | ||
declare type UnionToOvlds<U> = UnionToIntersection<U extends any ? (f: U) => void : never>; | ||
declare type PopUnion<U> = UnionToOvlds<U> extends (a: infer A) => void ? A : never; | ||
declare type IsUnion<T> = [T] extends [UnionToIntersection<T>] ? false : true; | ||
declare type UnionToArray<T, A extends unknown[] = []> = IsUnion<T> extends true ? UnionToArray<Exclude<T, PopUnion<T>>, [PopUnion<T>, ...A]> : [T, ...A]; | ||
export declare type Apply = <B extends string | Middleware, T extends Array<B>>(...args: T) => B extends string ? UnionToArray<T[number]> : UnionToArray<T[number]>; | ||
export declare type UnionToArray<T, A extends unknown[] = []> = IsUnion<T> extends true ? UnionToArray<Exclude<T, PopUnion<T>>, [PopUnion<T>, ...A]> : [T, ...A]; | ||
declare type Indexify<T> = T & { | ||
[str: string]: undefined; | ||
}; | ||
declare type UndefinedVals<T> = { | ||
[K in keyof T]: undefined; | ||
}; | ||
declare type AllUnionKeys<T> = keyof UnionToIntersection<UndefinedVals<T>>; | ||
export declare type AllFields<T> = { | ||
[K in AllUnionKeys<T> & string]: Indexify<T>[K]; | ||
}; | ||
export {}; | ||
//# sourceMappingURL=types.d.ts.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
let v; | ||
//# sourceMappingURL=types.js.map |
{ | ||
"name": "bridgets", | ||
"version": "1.0.27", | ||
"version": "1.0.29", | ||
"description": "", | ||
@@ -5,0 +5,0 @@ "main": "dist/Lib/index.js", |
@@ -17,3 +17,3 @@ <p align="center"> | ||
## What is BridgeTs? | ||
## What is BridgeTS? | ||
@@ -20,0 +20,0 @@ BridgeTs is a new Node.js framework built on Express.js that uses the power of Typescript to generate the code for the client. |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
166144
207
2082