diff --git a/dist/index.d.ts b/dist/index.d.ts index eea785c..fbe1588 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -7,3 +7,4 @@ export * from "./uuid"; export * from "./provedores"; export * from "./ecosistema"; export * from "./variaveisComuns"; +export * from "./tipagemRotas"; diff --git a/dist/index.js b/dist/index.js index 174dd4b..d9fe803 100644 --- a/dist/index.js +++ b/dist/index.js @@ -23,4 +23,5 @@ __exportStar(require("./uuid"), exports); __exportStar(require("./provedores"), exports); __exportStar(require("./ecosistema"), exports); __exportStar(require("./variaveisComuns"), exports); +__exportStar(require("./tipagemRotas"), exports); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/index.js.map b/dist/index.js.map index 442bbee..a48ac43 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA4B;AAC5B,6CAA0B;AAC1B,8CAA2B;AAC3B,gDAA6B;AAC7B,oDAAiC;AACjC,yCAAsB;AACtB,+CAA4B;AAC5B,+CAA4B;AAC5B,oDAAiC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA4B;AAC5B,6CAA0B;AAC1B,8CAA2B;AAC3B,gDAA6B;AAC7B,oDAAiC;AACjC,yCAAsB;AACtB,+CAA4B;AAC5B,+CAA4B;AAC5B,oDAAiC;AACjC,iDAA8B"} \ No newline at end of file diff --git a/dist/tipagemRotas.d.ts b/dist/tipagemRotas.d.ts new file mode 100644 index 0000000..a624209 --- /dev/null +++ b/dist/tipagemRotas.d.ts @@ -0,0 +1,38 @@ +/** Gerar uma classe que facilita a gestão de rotas com a tipagem das querys */ +export declare class TipagemRotas { + /** Prefixo da url */ + PREFIXO: string | undefined; + _caminhoParcial: string; + /** Ao criar novo obijeto de tipagem de rota é necessário passar o caminho parcial + ** export const mCaminho = new TipagemRotas<{q:string}>("/caminho") + */ + constructor(caminhoParcial: string, PREFIXO: string | undefined); + /** Retorna o caminho completo da rota + ** console.log(mCaminho.caminho) + ** "/caminho" + */ + get caminho(): string; + /** Define o caminho completo da rota + ** mCaminho.caminho = "/novoCaminho" + ** console.log(mCaminho.caminho) + ** "/novoCaminho" + ** */ + set caminho(caminhoParcial: string); + /** Retorna o caminho completo da rota com a query + ** console.log(mCaminho.resolve({q:"query"})) + ** "http://localhost:3000/caminho?q=query" + */ + resolve(query: T): string; + /** Vai para a url + ** mCaminho.ir({q:"query"}) + ** window.location.href = "http://localhost:3000/caminho?q=query" + */ + ir(query: T): void; + /** Retorna os parametros da url + ** console.log(mCaminho.parametros()) + ** {q:"query"} + */ + parametros(): T; +} diff --git a/dist/tipagemRotas.js b/dist/tipagemRotas.js new file mode 100644 index 0000000..432118f --- /dev/null +++ b/dist/tipagemRotas.js @@ -0,0 +1,63 @@ +"use strict"; +/** Gerar uma classe que facilita a gestão de rotas com a tipagem das querys */ +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}>("/caminho") + */ + constructor(caminhoParcial, PREFIXO) { + /** Prefixo da url */ + this.PREFIXO = undefined; + this._caminhoParcial = caminhoParcial; + if (PREFIXO) + this.PREFIXO = PREFIXO; + } + /** Retorna o caminho completo da rota + ** console.log(mCaminho.caminho) + ** "/caminho" + */ + get caminho() { + return this.PREFIXO + this._caminhoParcial; + } + /** Define o caminho completo da rota + ** mCaminho.caminho = "/novoCaminho" + ** console.log(mCaminho.caminho) + ** "/novoCaminho" + ** */ + set caminho(caminhoParcial) { + this._caminhoParcial = caminhoParcial; + } + /** Retorna o caminho completo da rota com a query + ** console.log(mCaminho.resolve({q:"query"})) + ** "http://localhost:3000/caminho?q=query" + */ + resolve(query) { + const url = new URL(window.location.href); + url.pathname = this.PREFIXO + this._caminhoParcial; + 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) { + window.location.href = this.resolve(query); + } + /** Retorna os parametros da url + ** console.log(mCaminho.parametros()) + ** {q:"query"} + */ + parametros() { + const url = new URL(window.location.href); + const query = url.searchParams; + const queryObj = Object.fromEntries(query.entries()); + return queryObj; + } +} +exports.TipagemRotas = TipagemRotas; +//# sourceMappingURL=tipagemRotas.js.map \ No newline at end of file diff --git a/dist/tipagemRotas.js.map b/dist/tipagemRotas.js.map new file mode 100644 index 0000000..2abfef2 --- /dev/null +++ b/dist/tipagemRotas.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tipagemRotas.js","sourceRoot":"","sources":["../src/tipagemRotas.ts"],"names":[],"mappings":";AAAA,qFAAqF;;;AAErF,MAAa,YAAY;IAKvB;;OAEG;IACH,YAAY,cAAsB,EAAE,OAA2B;QAP/D,qBAAqB;QACrB,YAAO,GAAuB,SAAS,CAAA;QAOrC,IAAI,CAAC,eAAe,GAAG,cAAc,CAAA;QACrC,IAAI,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACrC,CAAC;IAED;;;OAGG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAA;IAC5C,CAAC;IACD;;;;UAIM;IACN,IAAI,OAAO,CAAC,cAAsB;QAChC,IAAI,CAAC,eAAe,GAAG,cAAc,CAAA;IACvC,CAAC;IAED;;;OAGG;IAEH,OAAO,CAAC,KAAQ;QACd,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACzC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAA;QAClD,MAAM,SAAS,GACb,OAAO,KAAK,IAAI,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAA;QAE3E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;YACrC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAA;QAC1C,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,CAAA;IACjB,CAAC;IAED;;;OAGG;IACH,EAAE,CAAC,KAAQ;QACT,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC5C,CAAC;IAED;;;OAGG;IAEH,UAAU;QACR,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACzC,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAA;QAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QACpD,OAAO,QAAa,CAAA;IACtB,CAAC;CACF;AAjED,oCAiEC"} \ No newline at end of file diff --git a/package.json b/package.json index 312ee9d..20491db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "p-comuns", - "version": "0.40.0", + "version": "0.42.0", "description": "", "main": "dist/index.js", "scripts": { diff --git a/src/index.ts b/src/index.ts index be23d54..f4c8d60 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,3 +7,4 @@ export * from "./uuid" export * from "./provedores" export * from "./ecosistema" export * from "./variaveisComuns" +export * from "./tipagemRotas" diff --git a/src/tipagemRotas.ts b/src/tipagemRotas.ts new file mode 100644 index 0000000..e4fd4f6 --- /dev/null +++ b/src/tipagemRotas.ts @@ -0,0 +1,68 @@ +/** Gerar uma classe que facilita a gestão de rotas com a tipagem das querys */ + +export class TipagemRotas { + /** Prefixo da url */ + PREFIXO: string | undefined = undefined + + _caminhoParcial: string + /** Ao criar novo obijeto de tipagem de rota é necessário passar o caminho parcial + ** export const mCaminho = new TipagemRotas<{q:string}>("/caminho") + */ + constructor(caminhoParcial: string, PREFIXO: string | undefined) { + this._caminhoParcial = caminhoParcial + if (PREFIXO) this.PREFIXO = PREFIXO + } + + /** Retorna o caminho completo da rota + ** console.log(mCaminho.caminho) + ** "/caminho" + */ + get caminho() { + return this.PREFIXO + this._caminhoParcial + } + /** Define o caminho completo da rota + ** mCaminho.caminho = "/novoCaminho" + ** console.log(mCaminho.caminho) + ** "/novoCaminho" + ** */ + set caminho(caminhoParcial: string) { + this._caminhoParcial = caminhoParcial + } + + /** Retorna o caminho completo da rota com a query + ** console.log(mCaminho.resolve({q:"query"})) + ** "http://localhost:3000/caminho?q=query" + */ + + resolve(query: T) { + const url = new URL(window.location.href) + url.pathname = this.PREFIXO + this._caminhoParcial + 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: T) { + window.location.href = this.resolve(query) + } + + /** Retorna os parametros da url + ** console.log(mCaminho.parametros()) + ** {q:"query"} + */ + + parametros() { + const url = new URL(window.location.href) + const query = url.searchParams + const queryObj = Object.fromEntries(query.entries()) + return queryObj as T + } +}