Routing
Routing is the most important thing, check this out
Introduction
In the versatile world of JavaScript, wrap plays a key role in harmonizing the language’s polymorphic nature with Vixeny’s functional approach. It ensures scalability and maintains code purity, crucial for efficient web development.
// name of this file: api.ts
import { wrap } from 'vixeny';
//routing options
import { options } from 'somewhere.ts';
const api = wrap({
//setting up options
...options,
startWith: '/api'
})()
//creating a petition
.stdPetition({
path: '/ping',
f: () => 'pong'
});
export { api }; Simplifing handling diverse HTTP requests, offering a structured, side-effect-free programming environment. This makes building, maintaining, and scaling web applications more intuitive and manageable, showcasing wrap as an essential tool in the Vixeny toolkit.
import { wrap, vixeny } from 'vixeny';
import { options } from 'somewhere.ts';
import { api } from 'api.ts';
const router = wrap(options)()
.stdPetition({
path: '/',
f: () => 'hello world'
})
//joining `api` to this wrap
.union(api.unwrap())
// console logging:
// outputs: '/'
// '/api/ping'
.logPaths();
// unwrapping all the petitions giving them to the router
vixeny(options)(router.unwrap()); Petitions
Let’s create a Petition without wrap and export it an create new differents routes out of it.
import { Petition } from 'vixeny/optimizer/types';
const surprise: Petition = {
path: '/meow',
headings: {
status: 307,
statusText: 'Temporary Redirect',
headers: {
Location: 'https://www.youtube.com/watch?v=_e9yMqmXWo0'
}
},
f: (c) => ''
};
export { surprise }; In another file:
import { surprise } from 'somewhere.ts';
export default wrap(options)()
.stdPetition(surprise)
.stdPetition({ ...surprise, path: '/woof' })
.stdPetition({ ...surprise, path: '/woooow' })
// console logging:
// outputs: '/meow'
// '/woof'
// '/woooow'
.logPaths(); Applies to any other key in the object.
Types
There are two type of petitions:
stdPetition: where you have to return aBodyIntorPromise<BodyInt>customPetition: where you have to return aResponseorPromise<Response>
wrap(options)()
.stdPetition({
path: '/',
f: () => 'hello world'
})
.customPetition({
path: '/response/who/:name',
f: (c) => new Response(c.param.name)
}); It is important to note that wrap only supports these types although there are more types which serve different purposes which must be directly inserted.
vixeny(options)([
//importing all the paths
...wrap(options)().union(root.unwrap()).union(api.unwrap()).unwrap(),
//adding the static server
{
type: 'fileServer',
path: './public/',
name: '/public/'
},
// petition without ctx
{
path: '/responseType',
type: 'response',
r: () => new Response('Hello')
}
]);