{"version":3,"sources":["../src/tipagemRotas.ts"],"sourcesContent":["/** Gerar uma classe que facilita a gestão de rotas com a tipagem das querys\n *\n * Definições:\n *\n * caminho = \"/aplicacao/funcionalidade\"\n *\n * endereco = \"http://localhost:3000/aplicacao/funcionalidade\"\n *\n * parametros = {nome:\"José\"}\n */\n\nexport class TipagemRotas {\n _partesCaminho: string[] = []\n _acaoIr?: (endereco: string) => undefined\n\n /** Ao criar novo obijeto de tipagem de rota é necessário passar o caminho parcial\n ** export const mCaminho = new TipagemRotas<{q:string}>(\"aplicacao\",\"funcionalidade\")\n */\n constructor({\n caminho,\n acaoIr,\n }: {\n caminho: string[] | string\n acaoIr?: undefined | ((endereco: string) => undefined)\n }) {\n this._acaoIr = acaoIr\n\n this._partesCaminho = (Array.isArray(caminho) ? caminho : [caminho])\n .flatMap((a) => a.split(\"/\"))\n .filter(Boolean)\n }\n\n /** Retorna o caminho completo da rota\n ** console.log(mCaminho.caminho)\n ** \"/caminho\"\n */\n get caminho() {\n const ret = `/${this._partesCaminho.join(\"/\")}`\n return ret\n }\n /** Define o caminho completo da rota\n ** mCaminho.caminho = \"/novoCaminho\"\n ** console.log(mCaminho.caminho)\n ** \"/novoCaminho\"\n ** */\n set caminho(caminhoParcial: string) {\n this._partesCaminho = caminhoParcial.split(\"/\").filter((parte) => parte)\n }\n\n /** Retorna o caminho completo da rota com a query\n ** console.log(mCaminho.resolve({q:\"query\"}))\n ** \"http://localhost:3000/caminho?q=query\"\n */\n\n endereco(query: T, usarComoHash?: boolean) {\n const url = new URL(\n typeof window !== \"undefined\" ? window.location.href : \"http://localhost\",\n )\n\n url.pathname = this.caminho\n\n url.search = \"\"\n\n const queryKeys = Object.entries(query)\n\n for (const [key, value] of queryKeys) {\n url.searchParams.set(\n String(key),\n value === undefined || value === null ? \"\" : value,\n )\n }\n\n url.hash = \"\"\n\n if (usarComoHash) {\n url.hash = `#${url.search}`\n url.search = \"\"\n }\n\n return url.href\n }\n\n /** Vai para a url\n ** mCaminho.ir({q:\"query\"})\n ** window.location.href = \"http://localhost:3000/caminho?q=query\"\n */\n ir(query: T) {\n if (this._acaoIr) {\n this._acaoIr(this.endereco(query))\n } else {\n if (typeof window != \"undefined\") {\n window.location.href = this.endereco(query)\n }\n }\n }\n\n /** Retorna os parametros da url\n ** console.log(mCaminho.parametros())\n ** {q:\"query\"}\n */\n\n get parametros() {\n const url = new URL(\n typeof window !== \"undefined\" ? window.location.href : \"http://localhost\",\n )\n const query = url.searchParams\n const queryObj = Object.fromEntries(query.entries())\n\n // pegar hash\n const hash = url.hash\n if (hash) {\n const hashObj = Object.fromEntries(\n new URLSearchParams(hash.slice(1)).entries(),\n )\n return { ...queryObj, ...hashObj } as T\n }\n\n return queryObj as Partial\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAWO,MAAM,aAA4D;AAAA;AAAA;AAAA;AAAA,EAOvE,YAAY;AAAA,IACV;AAAA,IACA;AAAA,EACF,GAGG;AAZH,0BAA2B,CAAC;AAa1B,SAAK,UAAU;AAEf,SAAK,kBAAkB,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO,GAC/D,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,EAC3B,OAAO,OAAO;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,UAAU;AACZ,UAAM,MAAM,IAAI,KAAK,eAAe,KAAK,GAAG,CAAC;AAC7C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,QAAQ,gBAAwB;AAClC,SAAK,iBAAiB,eAAe,MAAM,GAAG,EAAE,OAAO,CAAC,UAAU,KAAK;AAAA,EACzE;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,OAAU,cAAwB;AACzC,UAAM,MAAM,IAAI;AAAA,MACd,OAAO,WAAW,cAAc,OAAO,SAAS,OAAO;AAAA,IACzD;AAEA,QAAI,WAAW,KAAK;AAEpB,QAAI,SAAS;AAEb,UAAM,YAAY,OAAO,QAAQ,KAAK;AAEtC,eAAW,CAAC,KAAK,KAAK,KAAK,WAAW;AACpC,UAAI,aAAa;AAAA,QACf,OAAO,GAAG;AAAA,QACV,UAAU,UAAa,UAAU,OAAO,KAAK;AAAA,MAC/C;AAAA,IACF;AAEA,QAAI,OAAO;AAEX,QAAI,cAAc;AAChB,UAAI,OAAO,IAAI,IAAI,MAAM;AACzB,UAAI,SAAS;AAAA,IACf;AAEA,WAAO,IAAI;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,GAAG,OAAU;AACX,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ,KAAK,SAAS,KAAK,CAAC;AAAA,IACnC,OAAO;AACL,UAAI,OAAO,UAAU,aAAa;AAChC,eAAO,SAAS,OAAO,KAAK,SAAS,KAAK;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,aAAa;AACf,UAAM,MAAM,IAAI;AAAA,MACd,OAAO,WAAW,cAAc,OAAO,SAAS,OAAO;AAAA,IACzD;AACA,UAAM,QAAQ,IAAI;AAClB,UAAM,WAAW,OAAO,YAAY,MAAM,QAAQ,CAAC;AAGnD,UAAM,OAAO,IAAI;AACjB,QAAI,MAAM;AACR,YAAM,UAAU,OAAO;AAAA,QACrB,IAAI,gBAAgB,KAAK,MAAM,CAAC,CAAC,EAAE,QAAQ;AAAA,MAC7C;AACA,aAAO,EAAE,GAAG,UAAU,GAAG,QAAQ;AAAA,IACnC;AAEA,WAAO;AAAA,EACT;AACF;","names":[]}