"use strict"; /** Gerar uma classe que facilita a gestão de rotas com a tipagem das querys * * Definições: * * caminho = "/aplicacao/funcionalidade" * * endereco = "http://localhost:3000/aplicacao/funcionalidade" * * parametros = {nome:"José"} */ Object.defineProperty(exports, "__esModule", { value: true }); exports.TipagemRotas = void 0; class TipagemRotas { /** Ao criar novo obijeto de tipagem de rota é necessário passar o caminho parcial ** export const mCaminho = new TipagemRotas<{q:string}>("aplicacao","funcionalidade") */ constructor(...caminhos) { this._partesCaminho = []; caminhos.forEach((caminho) => { String(caminho) .split("/") .forEach((parte) => { if (parte) { this._partesCaminho.push(parte); } }); }); } /** Retorna o caminho completo da rota ** console.log(mCaminho.caminho) ** "/caminho" */ get caminho() { return `/${this._partesCaminho.join("/")}`; } /** Define o caminho completo da rota ** mCaminho.caminho = "/novoCaminho" ** console.log(mCaminho.caminho) ** "/novoCaminho" ** */ set caminho(caminhoParcial) { this._partesCaminho = caminhoParcial.split("/").filter((parte) => parte); } /** Retorna o caminho completo da rota com a query ** console.log(mCaminho.resolve({q:"query"})) ** "http://localhost:3000/caminho?q=query" */ endereco(query) { const url = new URL(typeof window !== "undefined" ? window.location.href : "http://localhost"); url.pathname = this.caminho; const queryKeys = typeof query == "object" && query ? Object.entries(query) : [[query, ""]]; for (const [key, value] of queryKeys) { url.searchParams.set(String(key), value); } return url.href; } /** Vai para a url ** mCaminho.ir({q:"query"}) ** window.location.href = "http://localhost:3000/caminho?q=query" */ ir(query) { if (typeof window != "undefined") { window.location.href = this.endereco(query); } } /** Retorna os parametros da url ** console.log(mCaminho.parametros()) ** {q:"query"} */ parametros() { const url = new URL(typeof window !== "undefined" ? window.location.href : "http://localhost"); const query = url.searchParams; const queryObj = Object.fromEntries(query.entries()); return queryObj; } } exports.TipagemRotas = TipagemRotas; //# sourceMappingURL=tipagemRotas.js.map