types-nora-api 0.0.248 → 0.0.251

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/classes.d.ts CHANGED
@@ -802,6 +802,11 @@ interface IUsuario {
802
802
  listaCargos: CargosUsuario;
803
803
  }
804
804
  type UsuarioDto = IUsuario;
805
+ type LayoutContextualizadoInicial = {
806
+ readonly titulo?: string;
807
+ readonly escondeFundo?: boolean;
808
+ readonly proporcaoConteudo?: number;
809
+ };
805
810
  type SalaDeJogo_Codigo = `${number}_${string}`;
806
811
  type SalaDeJogoParams = {
807
812
  tipo: "sessao";
@@ -875,19 +880,55 @@ type MenuNode = MenuItemNode | MenuGrupoNode;
875
880
  declare function menuItem(titulo: string, destino: PaginaDestino): MenuItemNode;
876
881
  declare function menuGrupo(titulo: string, itens: readonly MenuNode[]): MenuGrupoNode;
877
882
  type PaginaLike = {
878
- readonly template: unknown;
883
+ readonly template: object;
879
884
  readonly hrefTemplate: string;
885
+ readonly href: string;
886
+ readonly label: string;
880
887
  };
881
- type MenuInternoTree<P> = P extends PaginaLike ? readonly MenuNode[] : P extends Record<string, unknown> ? {
888
+ type MenuInternoTree<P> = P extends PaginaLike ? readonly MenuNode[] : P extends Record<string, object | string | number | boolean | null | undefined> ? {
882
889
  readonly [K in keyof P]?: MenuInternoTree<P[K]>;
883
890
  } : never;
884
891
  type MenusInternos<P> = {
885
892
  readonly PAGINAS: MenuInternoTree<P>;
886
893
  };
894
+ type PaginaComLayout = PaginaLike & {
895
+ readonly layoutContextualizadoInicial: object;
896
+ };
897
+ type HasLayout<T> = T extends PaginaComLayout ? true : T extends object ? (true extends {
898
+ [K in keyof T]-?: HasLayout<T[K]>;
899
+ }[keyof T] ? true : false) : false;
900
+ type ChildKeysByHasLayout<T> = {
901
+ [K in keyof T]-?: HasLayout<T[K]> extends true ? K : never;
902
+ }[keyof T];
903
+ type TemFilhos<T> = ChildKeysByHasLayout<T> extends never ? false : true;
904
+ type FilhosDePagina<T> = Pick<T, ChildKeysByHasLayout<T>>;
905
+ type MenuLayoutLeaf = readonly MenuNode[] | {
906
+ readonly tipo: 'vazio';
907
+ } | {
908
+ readonly tipo: 'dinamico';
909
+ };
910
+ declare function menuVazio(): {
911
+ readonly tipo: 'vazio';
912
+ };
913
+ declare function menuDinamico(): {
914
+ readonly tipo: 'dinamico';
915
+ };
916
+ type MenuLayoutChildren<T> = {
917
+ readonly [K in keyof T]: MenuLayoutNode<T[K]>;
918
+ };
919
+ type MenuLayoutNode<T> = T extends PaginaComLayout ? (TemFilhos<T> extends true ? {
920
+ readonly menu: MenuLayoutLeaf;
921
+ } & MenuLayoutChildren<FilhosDePagina<T>> : MenuLayoutLeaf) : T extends object ? (HasLayout<T> extends true ? MenuLayoutChildren<Pick<T, ChildKeysByHasLayout<T>>> : never) : never;
922
+ type RootMenuLayout<P> = HasLayout<P> extends true ? MenuLayoutNode<P> : {};
923
+ type MenusInternosLayoutContexto<P> = {
924
+ readonly PAGINAS: RootMenuLayout<P>;
925
+ };
887
926
  type Brand<T, B extends string> = T & {
888
927
  readonly __brand: B;
889
928
  };
890
- type ExtrairParamsDoTemplate<S extends string, Acc extends Record<string, unknown> = {}> = S extends `${infer _A}[[...${infer P}]]${infer Rest}` ? ExtrairParamsDoTemplate<Rest, Acc & {
929
+ type ParamValue = string | string[] | undefined;
930
+ type ParamsRecord = Record<string, ParamValue>;
931
+ type ExtrairParamsDoTemplate<S extends string, Acc extends ParamsRecord = {}> = S extends `${infer _A}[[...${infer P}]]${infer Rest}` ? ExtrairParamsDoTemplate<Rest, Acc & {
891
932
  [K in P]?: string[];
892
933
  }> : S extends `${infer _A}[...${infer P}]${infer Rest}` ? ExtrairParamsDoTemplate<Rest, Acc & {
893
934
  [K in P]: string[];
@@ -895,14 +936,18 @@ type ExtrairParamsDoTemplate<S extends string, Acc extends Record<string, unknow
895
936
  [K in P]: string;
896
937
  }> : Acc;
897
938
  type PaginaParamsDoTemplate<T extends string> = ExtrairParamsDoTemplate<T>;
898
- type PaginaInfo = {
939
+ type PaginaInfoBase = {
899
940
  readonly label: string;
900
941
  readonly comCabecalho?: true;
901
942
  readonly acesso?: AcessoPagina;
902
943
  readonly acessoPorMenuInterno?: true;
903
944
  };
945
+ type PaginaInfoComLayoutContextualizado = PaginaInfoBase & {
946
+ readonly layoutContextualizadoInicial: LayoutContextualizadoInicial;
947
+ };
948
+ type PaginaInfo = PaginaInfoBase | PaginaInfoComLayoutContextualizado;
904
949
  type PaginaTemplate<T extends string = string> = Brand<T, 'PaginaTemplate'>;
905
- type PaginaDef<T extends string> = PaginaInfo & {
950
+ type PaginaDef<T extends string, I extends PaginaInfo = PaginaInfo> = I & {
906
951
  readonly template: PaginaTemplate<T>;
907
952
  readonly hrefTemplate: T;
908
953
  readonly href: T;
@@ -910,8 +955,12 @@ type PaginaDef<T extends string> = PaginaInfo & {
910
955
  type PaginaParams<P extends {
911
956
  hrefTemplate: string;
912
957
  }> = PaginaParamsDoTemplate<P['hrefTemplate']>;
913
- declare function montarHref(template: string, params: Record<string, unknown>): string;
914
- declare function pagina<const T extends string>(hrefTemplate: T, info: PaginaInfo): PaginaDef<T>;
958
+ declare function montarHref(template: string, params: ParamsRecord): string;
959
+ type LimparUndefinedValue = string | number | boolean | object | null | undefined;
960
+ type LimparUndefinedRecord = Record<string, LimparUndefinedValue>;
961
+ declare function limparUndefined<T extends LimparUndefinedRecord>(obj: T): T;
962
+ declare function pagina<const T extends string>(hrefTemplate: T, info: PaginaInfoBase): PaginaDef<T, PaginaInfoBase>;
963
+ declare function paginaComLayoutContextualizado<const T extends string>(hrefTemplate: T, info: PaginaInfoBase, layoutContextualizadoInicial: LayoutContextualizadoInicial): PaginaDef<T, PaginaInfoComLayoutContextualizado>;
915
964
  type RequiredKeys<T> = {
916
965
  [K in keyof T]-?: {} extends Pick<T, K> ? never : K;
917
966
  }[keyof T];
@@ -967,6 +1016,7 @@ type RegrasUploadImagem = RegrasUploadBase & {
967
1016
  };
968
1017
  };
969
1018
  type RegrasUploadArquivo = RegrasUploadBase | RegrasUploadImagem;
1019
+ type TipoUpload = 'RecursosInternos' | 'ImagensArtista';
970
1020
  interface MensagemChatRecebida {
971
1021
  salaId: string;
972
1022
  idUsuario: number;
@@ -1539,97 +1589,102 @@ type Opts = {
1539
1589
  declare function decidirAcessoPagina(pagina: PaginaFolha, ctx: CtxAcesso, opts: Opts): DecisaoAcessoPagina;
1540
1590
  declare function decidirAcessoPagina_Rec(pagina: PaginaFolha, ctx: CtxAcesso, opts: Opts, visitados: Set<string>): DecisaoAcessoPagina;
1541
1591
  declare const PAGINAS: {
1542
- readonly home: PaginaDef<"/">;
1543
- readonly acessar: PaginaDef<"/acessar">;
1544
- readonly cadastrar: PaginaDef<"/cadastrar">;
1545
- readonly aventura: PaginaDef<"/aventura/[id]">;
1546
- readonly aventuras: PaginaDef<"/aventuras">;
1547
- readonly definicoes: PaginaDef<"/definicoes/[[...slug]]">;
1548
- readonly dicas: PaginaDef<"/dicas/[[...slug]]">;
1592
+ readonly home: PaginaDef<"/", PaginaInfoBase>;
1593
+ readonly acessar: PaginaDef<"/acessar", PaginaInfoBase>;
1594
+ readonly cadastrar: PaginaDef<"/cadastrar", PaginaInfoBase>;
1595
+ readonly aventura: PaginaDef<"/aventura/[id]", PaginaInfoComLayoutContextualizado>;
1596
+ readonly aventuras: PaginaDef<"/aventuras", PaginaInfoComLayoutContextualizado>;
1597
+ readonly definicoes: PaginaDef<"/definicoes/[[...slug]]", PaginaInfoBase>;
1598
+ readonly dicas: PaginaDef<"/dicas/[[...slug]]", PaginaInfoBase>;
1549
1599
  readonly jogo: {
1550
- readonly jogador: PaginaDef<"/jogo/jogador">;
1551
- readonly mestre: {
1552
- readonly sessoesMestre: PaginaDef<"/jogo/mestre/sessoes-mestre">;
1553
- };
1554
1600
  readonly admin: {
1555
- readonly gerenciarSalas: PaginaDef<"/jogo/admin/gerenciar-salas">;
1601
+ readonly gerenciarSalas: PaginaDef<"/jogo/admin/gerenciar-salas", PaginaInfoComLayoutContextualizado>;
1556
1602
  };
1557
- readonly emJogo: PaginaDef<"/jogo/em-jogo">;
1603
+ readonly mestre: {
1604
+ readonly sessoesMestre: PaginaDef<"/jogo/mestre/sessoes-mestre", PaginaInfoComLayoutContextualizado>;
1605
+ };
1606
+ readonly jogador: PaginaDef<"/jogo/jogador", PaginaInfoComLayoutContextualizado>;
1607
+ readonly emJogo: PaginaDef<"/jogo/em-jogo", PaginaInfoBase>;
1558
1608
  readonly label: string;
1559
1609
  readonly comCabecalho?: true;
1560
1610
  readonly acesso?: AcessoPagina;
1561
1611
  readonly acessoPorMenuInterno?: true;
1612
+ readonly layoutContextualizadoInicial: LayoutContextualizadoInicial;
1562
1613
  readonly template: PaginaTemplate<"/jogo">;
1563
1614
  readonly hrefTemplate: "/jogo";
1564
1615
  readonly href: "/jogo";
1565
1616
  };
1566
- readonly linhaDoTempo: PaginaDef<"/linha-do-tempo">;
1567
- readonly minhaPagina: PaginaDef<"/minha-pagina">;
1617
+ readonly linhaDoTempo: PaginaDef<"/linha-do-tempo", PaginaInfoBase>;
1618
+ readonly minhaPagina: PaginaDef<"/minha-pagina", PaginaInfoBase>;
1568
1619
  readonly minhasPaginas: {
1569
1620
  readonly admin: {
1570
- readonly aventura: PaginaDef<"/minhas-paginas/admin/aventura/[id]">;
1571
- readonly aventuras: PaginaDef<"/minhas-paginas/admin/aventuras">;
1572
- readonly dashboardWs: PaginaDef<"/minhas-paginas/admin/dashboard-ws">;
1573
- readonly sessao: PaginaDef<"/minhas-paginas/admin/sessao/[id]">;
1574
- readonly uploads: PaginaDef<"/minhas-paginas/admin/uploads">;
1575
- readonly variaveisAmbiente: PaginaDef<"/minhas-paginas/admin/variaveis-ambiente">;
1576
- readonly dashboardPermissoes: PaginaDef<"/minhas-paginas/admin/permissoes">;
1577
- readonly dashboardPermissoesUsuarios: PaginaDef<"/minhas-paginas/admin/permissoes-usuarios">;
1621
+ readonly aventura: PaginaDef<"/minhas-paginas/admin/aventura/[id]", PaginaInfoComLayoutContextualizado>;
1622
+ readonly aventuras: PaginaDef<"/minhas-paginas/admin/aventuras", PaginaInfoComLayoutContextualizado>;
1623
+ readonly dashboardWs: PaginaDef<"/minhas-paginas/admin/dashboard-ws", PaginaInfoComLayoutContextualizado>;
1624
+ readonly sessao: PaginaDef<"/minhas-paginas/admin/sessao/[id]", PaginaInfoComLayoutContextualizado>;
1625
+ readonly uploadRecursosInternos: PaginaDef<"/minhas-paginas/admin/uploads", PaginaInfoComLayoutContextualizado>;
1626
+ readonly variaveisAmbiente: PaginaDef<"/minhas-paginas/admin/variaveis-ambiente", PaginaInfoComLayoutContextualizado>;
1627
+ readonly dashboardPermissoes: PaginaDef<"/minhas-paginas/admin/permissoes", PaginaInfoComLayoutContextualizado>;
1628
+ readonly dashboardPermissoesUsuarios: PaginaDef<"/minhas-paginas/admin/permissoes-usuarios", PaginaInfoComLayoutContextualizado>;
1578
1629
  readonly label: string;
1579
1630
  readonly comCabecalho?: true;
1580
1631
  readonly acesso?: AcessoPagina;
1581
1632
  readonly acessoPorMenuInterno?: true;
1633
+ readonly layoutContextualizadoInicial: LayoutContextualizadoInicial;
1582
1634
  readonly template: PaginaTemplate<"/minhas-paginas/admin">;
1583
1635
  readonly hrefTemplate: "/minhas-paginas/admin";
1584
1636
  readonly href: "/minhas-paginas/admin";
1585
1637
  };
1586
- readonly jogador: {
1587
- readonly meusPersonagens: PaginaDef<"/minhas-paginas/jogador/meus-personagens">;
1588
- readonly label: string;
1589
- readonly comCabecalho?: true;
1590
- readonly acesso?: AcessoPagina;
1591
- readonly acessoPorMenuInterno?: true;
1592
- readonly template: PaginaTemplate<"/minhas-paginas/jogador">;
1593
- readonly hrefTemplate: "/minhas-paginas/jogador";
1594
- readonly href: "/minhas-paginas/jogador";
1595
- };
1596
1638
  readonly mestre: {
1597
- readonly aventura: PaginaDef<"/minhas-paginas/mestre/aventura/[id]">;
1598
- readonly aventuras: PaginaDef<"/minhas-paginas/mestre/aventuras">;
1599
- readonly sessoesUnicas: PaginaDef<"/minhas-paginas/mestre/sessoes-unicas">;
1600
- readonly personagens: PaginaDef<"/minhas-paginas/mestre/personagens">;
1639
+ readonly aventura: PaginaDef<"/minhas-paginas/mestre/aventura/[id]", PaginaInfoComLayoutContextualizado>;
1640
+ readonly aventuras: PaginaDef<"/minhas-paginas/mestre/aventuras", PaginaInfoComLayoutContextualizado>;
1641
+ readonly sessoesUnicas: PaginaDef<"/minhas-paginas/mestre/sessoes-unicas", PaginaInfoComLayoutContextualizado>;
1642
+ readonly personagens: PaginaDef<"/minhas-paginas/mestre/personagens", PaginaInfoComLayoutContextualizado>;
1601
1643
  readonly rascunhos: {
1602
- readonly aventuras: PaginaDef<"/minhas-paginas/mestre/rascunhos/aventuras">;
1603
- readonly sessoesUnicas: PaginaDef<"/minhas-paginas/mestre/rascunhos/sessoes-unicas">;
1644
+ readonly aventuras: PaginaDef<"/minhas-paginas/mestre/rascunhos/aventuras", PaginaInfoComLayoutContextualizado>;
1645
+ readonly sessoesUnicas: PaginaDef<"/minhas-paginas/mestre/rascunhos/sessoes-unicas", PaginaInfoComLayoutContextualizado>;
1604
1646
  };
1605
- readonly sessao: PaginaDef<"/minhas-paginas/mestre/sessao/[id]">;
1647
+ readonly sessao: PaginaDef<"/minhas-paginas/mestre/sessao/[id]", PaginaInfoComLayoutContextualizado>;
1606
1648
  readonly label: string;
1607
1649
  readonly comCabecalho?: true;
1608
1650
  readonly acesso?: AcessoPagina;
1609
1651
  readonly acessoPorMenuInterno?: true;
1652
+ readonly layoutContextualizadoInicial: LayoutContextualizadoInicial;
1610
1653
  readonly template: PaginaTemplate<"/minhas-paginas/mestre">;
1611
1654
  readonly hrefTemplate: "/minhas-paginas/mestre";
1612
1655
  readonly href: "/minhas-paginas/mestre";
1613
1656
  };
1614
1657
  readonly artista: {
1615
- readonly minhasImagens: PaginaDef<"/minhas-paginas/artista/minhas-imagens">;
1616
- readonly adicionarImagem: PaginaDef<"/minhas-paginas/artista/adicionar-imagem">;
1658
+ readonly minhasImagens: PaginaDef<"/minhas-paginas/artista/minhas-imagens", PaginaInfoComLayoutContextualizado>;
1659
+ readonly adicionarImagem: PaginaDef<"/minhas-paginas/artista/adicionar-imagem", PaginaInfoComLayoutContextualizado>;
1617
1660
  readonly label: string;
1618
1661
  readonly comCabecalho?: true;
1619
1662
  readonly acesso?: AcessoPagina;
1620
1663
  readonly acessoPorMenuInterno?: true;
1664
+ readonly layoutContextualizadoInicial: LayoutContextualizadoInicial;
1621
1665
  readonly template: PaginaTemplate<"/minhas-paginas/artista">;
1622
1666
  readonly hrefTemplate: "/minhas-paginas/artista";
1623
1667
  readonly href: "/minhas-paginas/artista";
1624
1668
  };
1625
- readonly minhasDisponibilidades: PaginaDef<"/minhas-paginas/minhas-disponibilidades">;
1669
+ readonly jogador: {
1670
+ readonly meusPersonagens: PaginaDef<"/minhas-paginas/jogador/meus-personagens", PaginaInfoComLayoutContextualizado>;
1671
+ readonly label: string;
1672
+ readonly comCabecalho?: true;
1673
+ readonly acesso?: AcessoPagina;
1674
+ readonly acessoPorMenuInterno?: true;
1675
+ readonly layoutContextualizadoInicial: LayoutContextualizadoInicial;
1676
+ readonly template: PaginaTemplate<"/minhas-paginas/jogador">;
1677
+ readonly hrefTemplate: "/minhas-paginas/jogador";
1678
+ readonly href: "/minhas-paginas/jogador";
1679
+ };
1680
+ readonly minhasDisponibilidades: PaginaDef<"/minhas-paginas/minhas-disponibilidades", PaginaInfoComLayoutContextualizado>;
1626
1681
  };
1627
- readonly personagens: PaginaDef<"/personagens">;
1628
- readonly sessoes: PaginaDef<"/sessoes">;
1629
- readonly sessaoAovivo: PaginaDef<"/sessao-aovivo">;
1630
- readonly sessao: PaginaDef<"/sessao/[id]">;
1682
+ readonly personagens: PaginaDef<"/personagens", PaginaInfoComLayoutContextualizado>;
1683
+ readonly sessoes: PaginaDef<"/sessoes", PaginaInfoBase>;
1684
+ readonly sessaoAovivo: PaginaDef<"/sessao-aovivo", PaginaInfoBase>;
1685
+ readonly sessao: PaginaDef<"/sessao/[id]", PaginaInfoBase>;
1631
1686
  };
1632
- type Folhas<T> = T extends PaginaDef<any> ? T | Folhas<Omit<T, keyof PaginaDef<any>>> : T extends readonly (infer U)[] ? Folhas<U> : T extends object ? {
1687
+ type Folhas<T> = T extends PaginaDef<string> ? T | Folhas<Omit<T, keyof PaginaDef<string>>> : T extends readonly (infer U)[] ? Folhas<U> : T extends object ? {
1633
1688
  [K in keyof T]-?: Folhas<NonNullable<T[K]>>;
1634
1689
  }[keyof T] : never;
1635
1690
  type PaginaFolha = Folhas<typeof PAGINAS>;
@@ -1645,18 +1700,84 @@ type PaginaHref = PaginaFolha['href'];
1645
1700
  type PaginaDefAny = PaginaDef<string>;
1646
1701
  type PaginaTemplateAny = PaginaTemplate<string>;
1647
1702
  declare function filtrarMenuPorAcesso(nodes: readonly MenuNode[], ctx: CtxAcesso): MenuNode[];
1648
- declare const MENU_PRINCIPAL: readonly MenuNode[];
1649
1703
  declare const MENUS_INTERNOS: {
1650
1704
  readonly PAGINAS: {
1705
+ readonly jogo: readonly [MenuGrupoNode, MenuGrupoNode, MenuGrupoNode];
1651
1706
  readonly minhasPaginas: {
1652
1707
  readonly admin: readonly [MenuItemNode, MenuItemNode, MenuItemNode, MenuItemNode, MenuGrupoNode];
1653
1708
  readonly mestre: readonly [MenuGrupoNode, MenuGrupoNode, MenuGrupoNode];
1654
- readonly jogador: readonly [MenuGrupoNode];
1655
1709
  readonly artista: readonly [MenuItemNode, MenuItemNode];
1710
+ readonly jogador: readonly [MenuGrupoNode];
1711
+ };
1712
+ };
1713
+ };
1714
+ declare const MENUS_INTERNOS_LAYOUTCONTEXTO: {
1715
+ readonly PAGINAS: {
1716
+ readonly aventura: {
1717
+ readonly tipo: "dinamico";
1718
+ };
1719
+ readonly aventuras: {
1720
+ readonly tipo: "dinamico";
1721
+ };
1722
+ readonly jogo: {
1723
+ readonly menu: readonly [MenuGrupoNode, MenuGrupoNode, MenuGrupoNode];
1724
+ readonly admin: {
1725
+ readonly gerenciarSalas: readonly [MenuGrupoNode, MenuGrupoNode, MenuGrupoNode];
1726
+ };
1727
+ readonly mestre: {
1728
+ readonly sessoesMestre: readonly [MenuGrupoNode, MenuGrupoNode, MenuGrupoNode];
1729
+ };
1730
+ readonly jogador: readonly [MenuGrupoNode, MenuGrupoNode, MenuGrupoNode];
1731
+ };
1732
+ readonly minhasPaginas: {
1733
+ readonly admin: {
1734
+ readonly menu: readonly [MenuItemNode, MenuItemNode, MenuItemNode, MenuItemNode, MenuGrupoNode];
1735
+ readonly aventura: readonly [MenuItemNode, MenuItemNode, MenuItemNode, MenuItemNode, MenuGrupoNode];
1736
+ readonly aventuras: readonly [MenuItemNode, MenuItemNode, MenuItemNode, MenuItemNode, MenuGrupoNode];
1737
+ readonly dashboardWs: readonly [MenuItemNode, MenuItemNode, MenuItemNode, MenuItemNode, MenuGrupoNode];
1738
+ readonly sessao: readonly [MenuItemNode, MenuItemNode, MenuItemNode, MenuItemNode, MenuGrupoNode];
1739
+ readonly uploadRecursosInternos: readonly [MenuItemNode, MenuItemNode, MenuItemNode, MenuItemNode, MenuGrupoNode];
1740
+ readonly variaveisAmbiente: readonly [MenuItemNode, MenuItemNode, MenuItemNode, MenuItemNode, MenuGrupoNode];
1741
+ readonly dashboardPermissoes: readonly [MenuItemNode, MenuItemNode, MenuItemNode, MenuItemNode, MenuGrupoNode];
1742
+ readonly dashboardPermissoesUsuarios: readonly [MenuItemNode, MenuItemNode, MenuItemNode, MenuItemNode, MenuGrupoNode];
1743
+ };
1744
+ readonly jogador: {
1745
+ readonly menu: readonly [MenuGrupoNode];
1746
+ readonly meusPersonagens: readonly [MenuGrupoNode];
1747
+ };
1748
+ readonly mestre: {
1749
+ readonly menu: readonly [MenuGrupoNode, MenuGrupoNode, MenuGrupoNode];
1750
+ readonly aventura: readonly [MenuGrupoNode, MenuGrupoNode, MenuGrupoNode];
1751
+ readonly aventuras: readonly [MenuGrupoNode, MenuGrupoNode, MenuGrupoNode];
1752
+ readonly sessoesUnicas: readonly [MenuGrupoNode, MenuGrupoNode, MenuGrupoNode];
1753
+ readonly personagens: readonly [MenuGrupoNode, MenuGrupoNode, MenuGrupoNode];
1754
+ readonly rascunhos: {
1755
+ readonly aventuras: readonly [MenuGrupoNode, MenuGrupoNode, MenuGrupoNode];
1756
+ readonly sessoesUnicas: readonly [MenuGrupoNode, MenuGrupoNode, MenuGrupoNode];
1757
+ };
1758
+ readonly sessao: readonly [MenuGrupoNode, MenuGrupoNode, MenuGrupoNode];
1759
+ };
1760
+ readonly artista: {
1761
+ readonly menu: readonly [MenuItemNode, MenuItemNode];
1762
+ readonly minhasImagens: readonly [MenuItemNode, MenuItemNode];
1763
+ readonly adicionarImagem: readonly [MenuItemNode, MenuItemNode];
1764
+ };
1765
+ readonly minhasDisponibilidades: {
1766
+ readonly tipo: "vazio";
1767
+ };
1768
+ };
1769
+ readonly personagens: {
1770
+ readonly tipo: "dinamico";
1656
1771
  };
1657
- readonly jogo: readonly [MenuGrupoNode, MenuGrupoNode, MenuGrupoNode];
1658
1772
  };
1659
1773
  };
1774
+ type PaginasNodeValue = object | string | number | boolean | null | undefined;
1775
+ type PaginasNodeRecord = Record<string, PaginasNodeValue>;
1776
+ type MenusNodeRecord = Record<string, object | undefined>;
1777
+ declare function isPaginaComLayout(node: object): node is PaginaFolha;
1778
+ declare function isMenuLeaf(node: object): node is MenuLayoutLeaf;
1779
+ declare const MENUS_LAYOUTCONTEXTO_POR_PAGINA: ReadonlyMap<PaginaFolha, MenuLayoutLeaf>;
1780
+ declare function obterMenuInternoLayoutContexto(pagina: PaginaFolha): MenuLayoutLeaf | undefined;
1660
1781
  declare const MENUS_INTERNOS_POR_PAGINA: ReadonlyMap<PaginaFolha, readonly MenuNode[]>;
1661
1782
  declare function obterMenuInterno(pagina: PaginaFolha): readonly MenuNode[] | undefined;
1662
1783
  declare function resolverMenuInterno(pagina: PaginaFolha): readonly PaginaFolha[] | undefined;
@@ -1705,4 +1826,4 @@ declare function isRegrasUploadArquivoValidas(regras: RegrasUploadArquivo): regr
1705
1826
  declare function mimeFromFormato(formato: FormatoUploadArquivo): "image/png" | "image/jpeg" | "image/svg+xml";
1706
1827
  declare function acceptFromFormatos(formatos: FormatoUploadArquivo[]): string;
1707
1828
  declare function isFormatoImagemBitmap(formato: FormatoUploadArquivo): formato is "png" | "jpg";
1708
- export { CAPACIDADES, PERMISSOES_ESTADOS, TIPOS_IMAGEM, CtxAcesso, temSudoBurlarCapacidades, IPermissoesEstado, PermissoesEstadoDto, IPermissoesItem, PermissoesItemDto, ItemPermissaoDto, ArvoreItensPermissaoDto, IPermissoesUsuario, PermissoesUsuarioDto, IPermissoesUsuariosHistorico, PermissoesUsuariosHistoricoDto, IArcoAventura, ArcoAventuraDto, IAventura, AventuraDto, IConviteGrupoAventuraPersonagem, ConviteGrupoAventuraPersonagemDto, IGrupoAventura, GrupoAventuraDto, IGrupoAventuraPersonagem, GrupoAventuraPersonagemDto, IRespostaConvite, RespostaConviteDto, IVariavelAmbiente, VariavelAmbienteDto, IConquista, ConquistaDto, ITipoConquista, TipoConquistaDto, IDetalheSessaoAventura, DetalheSessaoAventuraDto, IDetalheSessaoCanonica, DetalheSessaoCanonicaDto, CapituloSessaoCanonica, IDetalheSessaoUnica, DetalheSessaoUnicaDto, IParticipanteSessaoUnica, ParticipanteSessaoUnicaDto, ICoeficienteGanhoEstatisticaClasse, CoeficienteGanhoEstatisticaClasseDto, IGanhoNivelClasse, GanhoNivelClasseDto, DadosDoTipoGanho, DadosGanho_Atributos, DadosGanho_Pericias, DadosGanho_Estatisticas, DadosGanho_Classes, DadosGanho_ValorMaximoAtributo, DadosGanho_PontosHabilidadesEspeciais, DadosGanho_PontosHabilidadesParanormais, DadosGanho_PontosHabilidadeElemental, IGanhoRelativoCoeficienteAtributo, GanhoRelativoCoeficienteAtributoDto, ITipoGanhoNivel, TipoGanhoNivelDto, IGeracao, GeracaoDto, IImagem, ImagemDto, ITipoImagem, TipoImagemDto, IAlcance, AlcanceDto, IAtributo, AtributoDto, ICategoriaRitual, CategoriaRitualDto, ICirculoRitual, CirculoRitualDto, IClasse, ClasseDto, IDuracao, DuracaoDto, IElemento, ElementoDto, IEstatisticaDanificavel, EstatisticaDanificavelDto, IExecucao, ExecucaoDto, IFormatoAlcance, FormatoAlcanceDto, ILinhaEfeito, LinhaEfeitoDto, INivel, NivelDto, INivelComponente, NivelComponenteDto, INivelProficiencia, NivelProficienciaDto, INivelRitual, NivelRitualDto, IPatentePericia, PatentePericiaDto, IPericia, PericiaDto, IProficiencia, ProficienciaDto, ITipoAlvo, TipoAlvoDto, ITipoCategoria, TipoCategoriaDto, ITipoDano, TipoDanoDto, ITipoEfeito, TipoEfeitoDto, ITipoItem, TipoItemDto, ITipoProficiencia, TipoProficienciaDto, ILink, LinkDto, ITipoLink, TipoLinkDto, IDificuldadeSessao, DificuldadeSessaoDto, IEstiloSessaoMestrada, EstiloSessaoMestradaDto, ITipoSessao, TipoSessaoDto, IPerfilAdmin, PerfilAdminDto, IPerfilJogador, PerfilJogadorDto, IPerfilMestre, PerfilMestreDto, IFichaPersonagem, FichaPersonagemDto, ObjetoFicha, DetalheEvolucao, DetalhesExtras, FichaDeJogo, AtributoFicha, PericiaFicha, EstatisticaDanificavelFicha, DetalheFicha, RegistroPericiaLivre, IInformacaoPersonagem, InformacaoPersonagemDto, IPersonagem, PersonagemDto, PersonagemSalaJogoDto, IResumoPersonagemAventura, ResumoPersonagemAventuraDto, ITipoPersonagem, TipoPersonagemDto, IDetalheRascunhoAventura, DetalheRascunhoAventuraDto, IDetalheRascunhoSessaoUnicaCanonica, DetalheRascunhoSessaoUnicaCanonicaDto, IDetalheRascunhoSessaoUnicaNaoCanonica, DetalheRascunhoSessaoUnicaNaoCanonicaDto, IRascunho, RascunhoDto, IEstudo, EstudoDto, IRegistroSessao, RegistroSessaoDto, ISessao, SessaoDto, SessaoDadosGerais, ParticipanteSessao, AuthSession, ICustomizacaoUsuario, CustomizacaoUsuarioDto, IDisponibilidadeUsuario, DisponibilidadeUsuarioDto, ListaDisponibilidadesUsuario, DisponibilidadesDDS, JanelaDisponibilidade, IUsuario, UsuarioDto, SalaDeJogo_Codigo, SalaDeJogoParams, SalaDeJogo_Tipo, SalaDeJogo_Estado, SalaDeJogo_TipoMestre, SalaDeJogo_Mestre, SalaDeJogo_Mestre_Mestrada, SalaDeJogo_Mestre_Inteligente, SalaDeJogo_TipoParticipante, SalaDeJogo_Participante, SalaDeJogo_Participante_Narrador, SalaDeJogo_Participante_Jogador, SalaDeJogo_FUNC_AtualizaParticipanteParams, SalaDeJogoDto, MenuItemNode, MenuGrupoNode, MenuNode, menuItem, menuGrupo, PaginaLike, MenuInternoTree, MenusInternos, Brand, ExtrairParamsDoTemplate, PaginaParamsDoTemplate, PaginaInfo, PaginaTemplate, PaginaDef, PaginaParams, montarHref, pagina, RequiredKeys, ParamsProps, FormatoUploadArquivo, DimensoesImagem, RequireAtLeastOne, RegraTamanhoArquivo, RegraDimensoesImagem, RegraProporcaoImagem, RegrasUploadBase, RegrasUploadImagem, RegrasUploadArquivo, MensagemChatRecebida, SalaChat, SalaChatFront, MensagemChatPayload, SOCKET_AcessoUsuario, SOCKET_UsuarioExistente, TelemetryConnectionInfo, WsEventAudienceUnico, WsEventAudienceMultiplo, WsEventAudience, TelemetryEventLog, TelemetrySnapshot, WsErrorResponse, WsUnauthorizedErrorResponse, WsResult, isWsErrorResponse, isWsUnauthorizedErrorResponse, wsErro, wsUnauthorized, wsMap, wsChain, EventoTipo, EmitDelivery, EventoAuthDefault, EventoEnvia, EventoEmite, EventoEnviaERecebe, EventoSchema, GatewayDef, createGateway, EventosWebSocket, isRecord, getEmitDelivery, WsEmitTarget, WsEmitParams, EventosEmiteMap, EventoEmiteAny, PaletaCores, EstruturaPaginaDefinicao, ConteudoItem, DefinicaoElemento, ListaItem, AventuraEstado, EstadoPendenciaPersonagem, EstadoPendenciaAdministrativaPersonagem, EstadoOcupacaoPersonagem, EstadoSessao, DiaDaSemana, obtemDiaDaSemanaPorExtensoPorDDS, NumeroHora24, NumeroMomento, MomentoFormatado24, MomentoFormatado, CargoExibicaoUsuario, CargosUsuario, ObjetoAutenticacao, ObjetoCache, ObjetoPendeciaPersonagem, TipoVariavelAmbiente, ObjetoEvolucaoCompleto, ObjetoEvolucao, ObjetoGanhosEvolucao, GanhoEstatistica, FormatoMomento, DetalheUtilizacaoRascunho, EstiloSessao, PathTokenPadrao, TituloSessaoInteligente, Capacidade, LISTA_CAPACIDADES, PermissaoItemMinimo, ListaCapacidadesNecessarias, AcessoPagina, Gateways, EventoTipoLiteral, FiltraEventosPorTipo, criarEventosFiltrados, Eventos_Envia, Eventos_Emite, Eventos_EnviaERecebe, DecisaoAcessoPagina, ResolverMenuInterno, Opts, decidirAcessoPagina, decidirAcessoPagina_Rec, PAGINAS, Folhas, PaginaFolha, PaginaTemplateFolha, PaginaDestino, PaginaDestinoPagina, PaginaHrefTemplate, PaginaHref, PaginaDefAny, PaginaTemplateAny, filtrarMenuPorAcesso, MENU_PRINCIPAL, MENUS_INTERNOS, MENUS_INTERNOS_POR_PAGINA, obterMenuInterno, resolverMenuInterno, ResultadoValidacao, isNumeroInteiroPositivo, isNumeroPositivo, pushErro, validarFormatos, validarTamanho, validarDimensoesDim, validarDimensoesRegra, validarProporcao, validarMaxPixels, validarImagem, validarRegrasUploadArquivo, isRegrasUploadArquivoValidas, mimeFromFormato, acceptFromFormatos, isFormatoImagemBitmap };
1829
+ export { CAPACIDADES, PERMISSOES_ESTADOS, TIPOS_IMAGEM, CtxAcesso, temSudoBurlarCapacidades, IPermissoesEstado, PermissoesEstadoDto, IPermissoesItem, PermissoesItemDto, ItemPermissaoDto, ArvoreItensPermissaoDto, IPermissoesUsuario, PermissoesUsuarioDto, IPermissoesUsuariosHistorico, PermissoesUsuariosHistoricoDto, IArcoAventura, ArcoAventuraDto, IAventura, AventuraDto, IConviteGrupoAventuraPersonagem, ConviteGrupoAventuraPersonagemDto, IGrupoAventura, GrupoAventuraDto, IGrupoAventuraPersonagem, GrupoAventuraPersonagemDto, IRespostaConvite, RespostaConviteDto, IVariavelAmbiente, VariavelAmbienteDto, IConquista, ConquistaDto, ITipoConquista, TipoConquistaDto, IDetalheSessaoAventura, DetalheSessaoAventuraDto, IDetalheSessaoCanonica, DetalheSessaoCanonicaDto, CapituloSessaoCanonica, IDetalheSessaoUnica, DetalheSessaoUnicaDto, IParticipanteSessaoUnica, ParticipanteSessaoUnicaDto, ICoeficienteGanhoEstatisticaClasse, CoeficienteGanhoEstatisticaClasseDto, IGanhoNivelClasse, GanhoNivelClasseDto, DadosDoTipoGanho, DadosGanho_Atributos, DadosGanho_Pericias, DadosGanho_Estatisticas, DadosGanho_Classes, DadosGanho_ValorMaximoAtributo, DadosGanho_PontosHabilidadesEspeciais, DadosGanho_PontosHabilidadesParanormais, DadosGanho_PontosHabilidadeElemental, IGanhoRelativoCoeficienteAtributo, GanhoRelativoCoeficienteAtributoDto, ITipoGanhoNivel, TipoGanhoNivelDto, IGeracao, GeracaoDto, IImagem, ImagemDto, ITipoImagem, TipoImagemDto, IAlcance, AlcanceDto, IAtributo, AtributoDto, ICategoriaRitual, CategoriaRitualDto, ICirculoRitual, CirculoRitualDto, IClasse, ClasseDto, IDuracao, DuracaoDto, IElemento, ElementoDto, IEstatisticaDanificavel, EstatisticaDanificavelDto, IExecucao, ExecucaoDto, IFormatoAlcance, FormatoAlcanceDto, ILinhaEfeito, LinhaEfeitoDto, INivel, NivelDto, INivelComponente, NivelComponenteDto, INivelProficiencia, NivelProficienciaDto, INivelRitual, NivelRitualDto, IPatentePericia, PatentePericiaDto, IPericia, PericiaDto, IProficiencia, ProficienciaDto, ITipoAlvo, TipoAlvoDto, ITipoCategoria, TipoCategoriaDto, ITipoDano, TipoDanoDto, ITipoEfeito, TipoEfeitoDto, ITipoItem, TipoItemDto, ITipoProficiencia, TipoProficienciaDto, ILink, LinkDto, ITipoLink, TipoLinkDto, IDificuldadeSessao, DificuldadeSessaoDto, IEstiloSessaoMestrada, EstiloSessaoMestradaDto, ITipoSessao, TipoSessaoDto, IPerfilAdmin, PerfilAdminDto, IPerfilJogador, PerfilJogadorDto, IPerfilMestre, PerfilMestreDto, IFichaPersonagem, FichaPersonagemDto, ObjetoFicha, DetalheEvolucao, DetalhesExtras, FichaDeJogo, AtributoFicha, PericiaFicha, EstatisticaDanificavelFicha, DetalheFicha, RegistroPericiaLivre, IInformacaoPersonagem, InformacaoPersonagemDto, IPersonagem, PersonagemDto, PersonagemSalaJogoDto, IResumoPersonagemAventura, ResumoPersonagemAventuraDto, ITipoPersonagem, TipoPersonagemDto, IDetalheRascunhoAventura, DetalheRascunhoAventuraDto, IDetalheRascunhoSessaoUnicaCanonica, DetalheRascunhoSessaoUnicaCanonicaDto, IDetalheRascunhoSessaoUnicaNaoCanonica, DetalheRascunhoSessaoUnicaNaoCanonicaDto, IRascunho, RascunhoDto, IEstudo, EstudoDto, IRegistroSessao, RegistroSessaoDto, ISessao, SessaoDto, SessaoDadosGerais, ParticipanteSessao, AuthSession, ICustomizacaoUsuario, CustomizacaoUsuarioDto, IDisponibilidadeUsuario, DisponibilidadeUsuarioDto, ListaDisponibilidadesUsuario, DisponibilidadesDDS, JanelaDisponibilidade, IUsuario, UsuarioDto, LayoutContextualizadoInicial, SalaDeJogo_Codigo, SalaDeJogoParams, SalaDeJogo_Tipo, SalaDeJogo_Estado, SalaDeJogo_TipoMestre, SalaDeJogo_Mestre, SalaDeJogo_Mestre_Mestrada, SalaDeJogo_Mestre_Inteligente, SalaDeJogo_TipoParticipante, SalaDeJogo_Participante, SalaDeJogo_Participante_Narrador, SalaDeJogo_Participante_Jogador, SalaDeJogo_FUNC_AtualizaParticipanteParams, SalaDeJogoDto, MenuItemNode, MenuGrupoNode, MenuNode, menuItem, menuGrupo, PaginaLike, MenuInternoTree, MenusInternos, PaginaComLayout, HasLayout, ChildKeysByHasLayout, TemFilhos, FilhosDePagina, MenuLayoutLeaf, menuVazio, menuDinamico, MenuLayoutChildren, MenuLayoutNode, RootMenuLayout, MenusInternosLayoutContexto, Brand, ParamValue, ParamsRecord, ExtrairParamsDoTemplate, PaginaParamsDoTemplate, PaginaInfoBase, PaginaInfoComLayoutContextualizado, PaginaInfo, PaginaTemplate, PaginaDef, PaginaParams, montarHref, LimparUndefinedValue, LimparUndefinedRecord, limparUndefined, pagina, paginaComLayoutContextualizado, RequiredKeys, ParamsProps, FormatoUploadArquivo, DimensoesImagem, RequireAtLeastOne, RegraTamanhoArquivo, RegraDimensoesImagem, RegraProporcaoImagem, RegrasUploadBase, RegrasUploadImagem, RegrasUploadArquivo, TipoUpload, MensagemChatRecebida, SalaChat, SalaChatFront, MensagemChatPayload, SOCKET_AcessoUsuario, SOCKET_UsuarioExistente, TelemetryConnectionInfo, WsEventAudienceUnico, WsEventAudienceMultiplo, WsEventAudience, TelemetryEventLog, TelemetrySnapshot, WsErrorResponse, WsUnauthorizedErrorResponse, WsResult, isWsErrorResponse, isWsUnauthorizedErrorResponse, wsErro, wsUnauthorized, wsMap, wsChain, EventoTipo, EmitDelivery, EventoAuthDefault, EventoEnvia, EventoEmite, EventoEnviaERecebe, EventoSchema, GatewayDef, createGateway, EventosWebSocket, isRecord, getEmitDelivery, WsEmitTarget, WsEmitParams, EventosEmiteMap, EventoEmiteAny, PaletaCores, EstruturaPaginaDefinicao, ConteudoItem, DefinicaoElemento, ListaItem, AventuraEstado, EstadoPendenciaPersonagem, EstadoPendenciaAdministrativaPersonagem, EstadoOcupacaoPersonagem, EstadoSessao, DiaDaSemana, obtemDiaDaSemanaPorExtensoPorDDS, NumeroHora24, NumeroMomento, MomentoFormatado24, MomentoFormatado, CargoExibicaoUsuario, CargosUsuario, ObjetoAutenticacao, ObjetoCache, ObjetoPendeciaPersonagem, TipoVariavelAmbiente, ObjetoEvolucaoCompleto, ObjetoEvolucao, ObjetoGanhosEvolucao, GanhoEstatistica, FormatoMomento, DetalheUtilizacaoRascunho, EstiloSessao, PathTokenPadrao, TituloSessaoInteligente, Capacidade, LISTA_CAPACIDADES, PermissaoItemMinimo, ListaCapacidadesNecessarias, AcessoPagina, Gateways, EventoTipoLiteral, FiltraEventosPorTipo, criarEventosFiltrados, Eventos_Envia, Eventos_Emite, Eventos_EnviaERecebe, DecisaoAcessoPagina, ResolverMenuInterno, Opts, decidirAcessoPagina, decidirAcessoPagina_Rec, PAGINAS, Folhas, PaginaFolha, PaginaTemplateFolha, PaginaDestino, PaginaDestinoPagina, PaginaHrefTemplate, PaginaHref, PaginaDefAny, PaginaTemplateAny, filtrarMenuPorAcesso, MENUS_INTERNOS, MENUS_INTERNOS_LAYOUTCONTEXTO, PaginasNodeValue, PaginasNodeRecord, MenusNodeRecord, isPaginaComLayout, isMenuLeaf, MENUS_LAYOUTCONTEXTO_POR_PAGINA, obterMenuInternoLayoutContexto, MENUS_INTERNOS_POR_PAGINA, obterMenuInterno, resolverMenuInterno, ResultadoValidacao, isNumeroInteiroPositivo, isNumeroPositivo, pushErro, validarFormatos, validarTamanho, validarDimensoesDim, validarDimensoesRegra, validarProporcao, validarMaxPixels, validarImagem, validarRegrasUploadArquivo, isRegrasUploadArquivoValidas, mimeFromFormato, acceptFromFormatos, isFormatoImagemBitmap };
package/dist/classes.js CHANGED
@@ -85,6 +85,8 @@ var SalaDeJogo_TipoParticipante;
85
85
  })(SalaDeJogo_TipoParticipante || (SalaDeJogo_TipoParticipante = {}));
86
86
  function menuItem(titulo, destino) { return { tipo: 'item', titulo, destino }; }
87
87
  function menuGrupo(titulo, itens) { return { tipo: 'grupo', titulo, itens }; }
88
+ function menuVazio() { return { tipo: 'vazio' }; }
89
+ function menuDinamico() { return { tipo: 'dinamico' }; }
88
90
  function montarHref(template, params) {
89
91
  const out = template.replace(/\[\[\.\.\.([^\]]+)\]\]|\[\.\.\.([^\]]+)\]|\[([^\]]+)\]/g, (_m, optCatchAll, catchAll, single) => {
90
92
  const key = (optCatchAll || catchAll || single);
@@ -103,29 +105,32 @@ function montarHref(template, params) {
103
105
  }
104
106
  if (value == null)
105
107
  throw new Error(`PAGINAS.montarHref: "${key}" é obrigatório`);
108
+ if (Array.isArray(value))
109
+ throw new Error(`PAGINAS.montarHref: "${key}" deve ser string (single param)`);
106
110
  return encodeURIComponent(String(value));
107
111
  });
108
112
  const cleaned = out.replace(/\/+/g, '/').replace(/\/$/, '');
109
113
  return cleaned === '' ? '/' : cleaned;
110
114
  }
115
+ function limparUndefined(obj) {
116
+ const out = {};
117
+ for (const k in obj) {
118
+ if (!Object.prototype.hasOwnProperty.call(obj, k))
119
+ continue;
120
+ const key = k;
121
+ const v = obj[key];
122
+ if (v !== undefined)
123
+ out[key] = v;
124
+ }
125
+ return out;
126
+ }
111
127
  function pagina(hrefTemplate, info) {
112
128
  const template = hrefTemplate;
113
- const { label, comCabecalho, acesso, acessoPorMenuInterno } = info;
114
- if (acesso == null && comCabecalho == null && acessoPorMenuInterno == null)
115
- return { template, hrefTemplate, href: hrefTemplate, label };
116
- if (acesso == null && comCabecalho == null)
117
- return { template, hrefTemplate, href: hrefTemplate, label, acessoPorMenuInterno };
118
- if (acesso == null && acessoPorMenuInterno == null)
119
- return { template, hrefTemplate, href: hrefTemplate, label, comCabecalho };
120
- if (comCabecalho == null && acessoPorMenuInterno == null)
121
- return { template, hrefTemplate, href: hrefTemplate, label, acesso };
122
- if (acesso == null)
123
- return { template, hrefTemplate, href: hrefTemplate, label, comCabecalho, acessoPorMenuInterno };
124
- if (comCabecalho == null)
125
- return { template, hrefTemplate, href: hrefTemplate, label, acesso, acessoPorMenuInterno };
126
- if (acessoPorMenuInterno == null)
127
- return { template, hrefTemplate, href: hrefTemplate, label, comCabecalho, acesso };
128
- return { template, hrefTemplate, href: hrefTemplate, label, comCabecalho, acesso, acessoPorMenuInterno };
129
+ return limparUndefined({ template, hrefTemplate, href: hrefTemplate, ...info });
130
+ }
131
+ function paginaComLayoutContextualizado(hrefTemplate, info, layoutContextualizadoInicial) {
132
+ const template = hrefTemplate;
133
+ return limparUndefined({ template, hrefTemplate, href: hrefTemplate, ...info, layoutContextualizadoInicial });
129
134
  }
130
135
  function isWsErrorResponse(payload) { return !!payload && typeof payload === "object" && payload._wsErro === true; }
131
136
  function isWsUnauthorizedErrorResponse(payload) { return isWsErrorResponse(payload) && payload.code === "UNAUTHORIZED"; }
@@ -381,55 +386,59 @@ const PAGINAS = {
381
386
  home: pagina('/', { label: 'Página Inicial', comCabecalho: true }),
382
387
  acessar: pagina('/acessar', { label: 'Acessar' }),
383
388
  cadastrar: pagina('/cadastrar', { label: 'Cadastrar' }),
384
- aventura: pagina('/aventura/[id]', { label: 'Aventura' }),
385
- aventuras: pagina('/aventuras', { label: 'Aventuras' }),
389
+ aventura: paginaComLayoutContextualizado('/aventura/[id]', { label: 'Aventura' }, { titulo: 'TROCAR', proporcaoConteudo: 87 }),
390
+ aventuras: paginaComLayoutContextualizado('/aventuras', { label: 'Aventuras' }, { titulo: 'Assistir Aventuras', proporcaoConteudo: 80 }),
386
391
  definicoes: pagina('/definicoes/[[...slug]]', { label: 'Definições', comCabecalho: true }),
387
392
  dicas: pagina('/dicas/[[...slug]]', { label: 'Dicas', comCabecalho: true }),
388
393
  jogo: {
389
- ...pagina('/jogo', { label: 'Jogo', acesso: { autenticado: true }, acessoPorMenuInterno: true }),
390
- jogador: pagina('/jogo/jogador', { label: 'Jogo - Jogador', acesso: { autenticado: true } }),
391
- mestre: { sessoesMestre: pagina('/jogo/mestre/sessoes-mestre', { label: 'Mestre - Sessões', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.MESTRE__CRIACAO__SESSAO_DE_JOGO] } }) },
392
- admin: { gerenciarSalas: pagina('/jogo/admin/gerenciar-salas', { label: 'Admin - Gerenciar Salas', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ADMINISTRADOR__ACOMPANHAMENTO__SESSAO_DE_JOGO] } }) },
394
+ ...paginaComLayoutContextualizado('/jogo', { label: 'Jogo', acesso: { autenticado: true }, acessoPorMenuInterno: true }, { titulo: 'Página de Jogo', proporcaoConteudo: 84 }),
395
+ admin: {
396
+ gerenciarSalas: paginaComLayoutContextualizado('/jogo/admin/gerenciar-salas', { label: 'Admin - Gerenciar Salas', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ADMINISTRADOR__ACOMPANHAMENTO__SESSAO_DE_JOGO] } }, { titulo: 'Gerenciar Salas', proporcaoConteudo: 84 }),
397
+ },
398
+ mestre: {
399
+ sessoesMestre: paginaComLayoutContextualizado('/jogo/mestre/sessoes-mestre', { label: 'Mestre - Sessões', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.MESTRE__CRIACAO__SESSAO_DE_JOGO] } }, { titulo: 'Criação de Sala', proporcaoConteudo: 84 }),
400
+ },
401
+ jogador: paginaComLayoutContextualizado('/jogo/jogador', { label: 'Jogo - Jogador', acesso: { autenticado: true } }, { titulo: 'Buscando Salas', proporcaoConteudo: 84 }),
393
402
  emJogo: pagina('/jogo/em-jogo', { label: 'Em Jogo', acesso: { autenticado: true } }),
394
403
  },
395
404
  linhaDoTempo: pagina('/linha-do-tempo', { label: 'Linha do Tempo' }),
396
405
  minhaPagina: pagina('/minha-pagina', { label: 'Minha Página', acesso: { autenticado: true } }),
397
406
  minhasPaginas: {
398
407
  admin: {
399
- ...pagina('/minhas-paginas/admin', { label: 'Administração', acesso: { autenticado: true }, acessoPorMenuInterno: true }),
400
- aventura: pagina('/minhas-paginas/admin/aventura/[id]', { label: 'Admin - Aventura', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ADMINISTRADOR__GERENCIAMENTO__AVENTURAS_E_SESSOES] } }),
401
- aventuras: pagina('/minhas-paginas/admin/aventuras', { label: 'Admin - Aventuras', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ADMINISTRADOR__GERENCIAMENTO__AVENTURAS_E_SESSOES] } }),
402
- dashboardWs: pagina('/minhas-paginas/admin/dashboard-ws', { label: 'Admin - Dashboard WS', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ADMINISTRADOR__ACOMPANHAMENTO__WEBSOCKET] } }),
403
- sessao: pagina('/minhas-paginas/admin/sessao/[id]', { label: 'Admin - Sessão', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ADMINISTRADOR__GERENCIAMENTO__AVENTURAS_E_SESSOES] } }),
404
- uploads: pagina('/minhas-paginas/admin/uploads', { label: 'Admin - Uploads', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ADMINISTRADOR__GERENCIAMENTO__UPLOAD_RECURSOS_INTERNOS] } }),
405
- variaveisAmbiente: pagina('/minhas-paginas/admin/variaveis-ambiente', { label: 'Admin - Variáveis de Ambiente', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ADMINISTRADOR__GERENCIAMENTO__VARIAVEIS_DE_AMBIENTE] } }),
406
- dashboardPermissoes: pagina('/minhas-paginas/admin/permissoes', { label: 'Admin - Permissões', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ADMINISTRADOR__PERMISSOES__CRIACAO_CAPACIDADES] } }),
407
- dashboardPermissoesUsuarios: pagina('/minhas-paginas/admin/permissoes-usuarios', { label: 'Admin - Permissões de Usuários', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ADMINISTRADOR__PERMISSOES__ALTERACAO_CAPACIDADES_GERAIS_USUARIOS] } }),
408
- },
409
- jogador: {
410
- ...pagina('/minhas-paginas/jogador', { label: 'Área do Jogador', acesso: { autenticado: true }, acessoPorMenuInterno: true }),
411
- meusPersonagens: pagina('/minhas-paginas/jogador/meus-personagens', { label: 'Meus Personagens', acesso: { autenticado: true } }),
408
+ ...paginaComLayoutContextualizado('/minhas-paginas/admin', { label: 'Administração', acesso: { autenticado: true }, acessoPorMenuInterno: true }, { titulo: 'Página de Administrador', proporcaoConteudo: 84 }),
409
+ aventura: paginaComLayoutContextualizado('/minhas-paginas/admin/aventura/[id]', { label: 'Admin - Aventura', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ADMINISTRADOR__GERENCIAMENTO__AVENTURAS_E_SESSOES] } }, { titulo: 'Gerenciamento de Aventura', proporcaoConteudo: 84 }),
410
+ aventuras: paginaComLayoutContextualizado('/minhas-paginas/admin/aventuras', { label: 'Admin - Aventuras', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ADMINISTRADOR__GERENCIAMENTO__AVENTURAS_E_SESSOES] } }, { titulo: 'Gerenciamento de Aventuras', proporcaoConteudo: 84 }),
411
+ dashboardWs: paginaComLayoutContextualizado('/minhas-paginas/admin/dashboard-ws', { label: 'Admin - Dashboard WS', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ADMINISTRADOR__ACOMPANHAMENTO__WEBSOCKET] } }, { titulo: 'Dashboard: WebSocket', proporcaoConteudo: 84 }),
412
+ sessao: paginaComLayoutContextualizado('/minhas-paginas/admin/sessao/[id]', { label: 'Admin - Sessão', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ADMINISTRADOR__GERENCIAMENTO__AVENTURAS_E_SESSOES] } }, { titulo: 'Gerenciamento de Sessão', proporcaoConteudo: 84 }),
413
+ uploadRecursosInternos: paginaComLayoutContextualizado('/minhas-paginas/admin/uploads', { label: 'Admin - Uploads', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ADMINISTRADOR__GERENCIAMENTO__UPLOAD_RECURSOS_INTERNOS] } }, { titulo: 'Upload de Recursos Internos', proporcaoConteudo: 84 }),
414
+ variaveisAmbiente: paginaComLayoutContextualizado('/minhas-paginas/admin/variaveis-ambiente', { label: 'Admin - Variáveis de Ambiente', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ADMINISTRADOR__GERENCIAMENTO__VARIAVEIS_DE_AMBIENTE] } }, { titulo: 'Variáveis de Ambiente', proporcaoConteudo: 84 }),
415
+ dashboardPermissoes: paginaComLayoutContextualizado('/minhas-paginas/admin/permissoes', { label: 'Admin - Permissões', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ADMINISTRADOR__PERMISSOES__CRIACAO_CAPACIDADES] } }, { titulo: 'Gerenciamento de Permissões', proporcaoConteudo: 84 }),
416
+ dashboardPermissoesUsuarios: paginaComLayoutContextualizado('/minhas-paginas/admin/permissoes-usuarios', { label: 'Admin - Permissões de Usuários', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ADMINISTRADOR__PERMISSOES__ALTERACAO_CAPACIDADES_GERAIS_USUARIOS] } }, { titulo: 'Permissões de Usuário', proporcaoConteudo: 84 }),
412
417
  },
413
418
  mestre: {
414
- ...pagina('/minhas-paginas/mestre', { label: 'Área do Mestre', acesso: { autenticado: true }, acessoPorMenuInterno: true }),
415
- aventura: pagina('/minhas-paginas/mestre/aventura/[id]', { label: 'Mestre - Aventura', acesso: { autenticado: true } }),
416
- aventuras: pagina('/minhas-paginas/mestre/aventuras', { label: 'Mestre - Aventuras', acesso: { autenticado: true } }),
417
- sessoesUnicas: pagina('/minhas-paginas/mestre/sessoes-unicas', { label: 'Mestre - Sessões Únicas', acesso: { autenticado: true } }),
418
- personagens: pagina('/minhas-paginas/mestre/personagens', { label: 'Mestre - Personagens', acesso: { autenticado: true } }),
419
+ ...paginaComLayoutContextualizado('/minhas-paginas/mestre', { label: 'Área do Mestre', acesso: { autenticado: true }, acessoPorMenuInterno: true }, { titulo: 'Página de Mestre', proporcaoConteudo: 84 }),
420
+ aventura: paginaComLayoutContextualizado('/minhas-paginas/mestre/aventura/[id]', { label: 'Mestre - Aventura', acesso: { autenticado: true } }, { titulo: 'TROCAR', proporcaoConteudo: 84 }),
421
+ aventuras: paginaComLayoutContextualizado('/minhas-paginas/mestre/aventuras', { label: 'Mestre - Aventuras', acesso: { autenticado: true } }, { titulo: 'Minhas Aventuras', proporcaoConteudo: 84 }),
422
+ sessoesUnicas: paginaComLayoutContextualizado('/minhas-paginas/mestre/sessoes-unicas', { label: 'Mestre - Sessões Únicas', acesso: { autenticado: true } }, { titulo: 'Minhas Sessões Únicas', proporcaoConteudo: 84 }),
423
+ personagens: paginaComLayoutContextualizado('/minhas-paginas/mestre/personagens', { label: 'Mestre - Personagens', acesso: { autenticado: true } }, { titulo: 'Meus Personagens de Mestre', proporcaoConteudo: 84 }),
419
424
  rascunhos: {
420
- aventuras: pagina('/minhas-paginas/mestre/rascunhos/aventuras', { label: 'Rascunhos - Aventuras', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.MESTRE__CRIACAO__RASCUNHO_AVENTURA] } }),
421
- sessoesUnicas: pagina('/minhas-paginas/mestre/rascunhos/sessoes-unicas', { label: 'Rascunhos - Sessões Únicas', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.MESTRE__CRIACAO__RASCUNHO_SESSAO_UNICA] } }),
425
+ aventuras: paginaComLayoutContextualizado('/minhas-paginas/mestre/rascunhos/aventuras', { label: 'Rascunhos - Aventuras', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.MESTRE__CRIACAO__RASCUNHO_AVENTURA] } }, { titulo: 'Meus Rascunhos de Aventuras', proporcaoConteudo: 84 }),
426
+ sessoesUnicas: paginaComLayoutContextualizado('/minhas-paginas/mestre/rascunhos/sessoes-unicas', { label: 'Rascunhos - Sessões Únicas', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.MESTRE__CRIACAO__RASCUNHO_SESSAO_UNICA] } }, { titulo: 'Meus Rascunhos de Sessões Únicas', proporcaoConteudo: 84 }),
422
427
  },
423
- sessao: pagina('/minhas-paginas/mestre/sessao/[id]', { label: 'Mestre - Sessão', acesso: { autenticado: true } }),
428
+ sessao: paginaComLayoutContextualizado('/minhas-paginas/mestre/sessao/[id]', { label: 'Mestre - Sessão', acesso: { autenticado: true } }, { titulo: 'TROCAR', proporcaoConteudo: 84 }),
424
429
  },
425
430
  artista: {
426
- ...pagina('/minhas-paginas/artista', { label: 'Área do Artista', acesso: { autenticado: true }, acessoPorMenuInterno: true }),
427
- minhasImagens: pagina('/minhas-paginas/artista/minhas-imagens', { label: 'Minhas Imagens', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ARTISTA__CRIACAO__UPLOAD_IMAGEM] } }),
428
- adicionarImagem: pagina('/minhas-paginas/artista/adicionar-imagem', { label: 'Adicionar Imagem', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ARTISTA__CRIACAO__UPLOAD_IMAGEM] } }),
431
+ ...paginaComLayoutContextualizado('/minhas-paginas/artista', { label: 'Área do Artista', acesso: { autenticado: true }, acessoPorMenuInterno: true }, { titulo: 'Página de Artista', proporcaoConteudo: 84 }),
432
+ minhasImagens: paginaComLayoutContextualizado('/minhas-paginas/artista/minhas-imagens', { label: 'Minhas Imagens', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ARTISTA__CRIACAO__UPLOAD_IMAGEM] } }, { titulo: 'Minhas Imagens', proporcaoConteudo: 84 }),
433
+ adicionarImagem: paginaComLayoutContextualizado('/minhas-paginas/artista/adicionar-imagem', { label: 'Adicionar Imagem', acesso: { listaDeCapacidadesNecessarias: [CAPACIDADES.ARTISTA__CRIACAO__UPLOAD_IMAGEM] } }, { titulo: 'Adicionar Nova Imagem', proporcaoConteudo: 84 }),
429
434
  },
430
- minhasDisponibilidades: pagina('/minhas-paginas/minhas-disponibilidades', { label: 'Minhas Disponibilidades', acesso: { autenticado: true } }),
435
+ jogador: {
436
+ ...paginaComLayoutContextualizado('/minhas-paginas/jogador', { label: 'Área do Jogador', acesso: { autenticado: true }, acessoPorMenuInterno: true }, { titulo: 'Página de Jogador', proporcaoConteudo: 84 }),
437
+ meusPersonagens: paginaComLayoutContextualizado('/minhas-paginas/jogador/meus-personagens', { label: 'Meus Personagens', acesso: { autenticado: true } }, { titulo: 'Meus Personagens', proporcaoConteudo: 84 }),
438
+ },
439
+ minhasDisponibilidades: paginaComLayoutContextualizado('/minhas-paginas/minhas-disponibilidades', { label: 'Minhas Disponibilidades', acesso: { autenticado: true } }, { titulo: 'Minhas Disponibilidades', proporcaoConteudo: 100 }),
431
440
  },
432
- personagens: pagina('/personagens', { label: 'Personagens', acesso: { autenticado: true } }),
441
+ personagens: paginaComLayoutContextualizado('/personagens', { label: 'Personagens', acesso: { autenticado: true } }, { titulo: 'Meus Personagens', proporcaoConteudo: 84 }),
433
442
  sessoes: pagina('/sessoes', { label: 'Sessões' }),
434
443
  sessaoAovivo: pagina('/sessao-aovivo', { label: 'Sessão Ao Vivo', acesso: { autenticado: true } }),
435
444
  sessao: pagina('/sessao/[id]', { label: 'Sessão' }),
@@ -449,34 +458,22 @@ function filtrarMenuPorAcesso(nodes, ctx) {
449
458
  }
450
459
  return out;
451
460
  }
452
- /*
453
- MENU_PRINCIPAL é o menu “final” (view-model) já pronto pra ser filtrado + renderizado.
454
- */
455
- const MENU_PRINCIPAL = [
456
- menuGrupo('Minhas Páginas', [
457
- menuItem('Administrador', { pagina: PAGINAS.minhasPaginas.admin }),
458
- menuItem('Jogador', { pagina: PAGINAS.minhasPaginas.jogador }),
459
- menuItem('Disponibilidades', { pagina: PAGINAS.minhasPaginas.minhasDisponibilidades }),
460
- menuItem('Mestre', { pagina: PAGINAS.minhasPaginas.mestre }),
461
- menuItem('Artista', { pagina: PAGINAS.minhasPaginas.artista }),
462
- ]),
463
- menuItem('Personagens', { pagina: PAGINAS.personagens }),
464
- menuItem('Jogue Agora!', { pagina: PAGINAS.jogo }),
465
- menuItem('Assistir', { pagina: PAGINAS.aventuras }),
466
- menuItem('Sessão Ao Vivo', { pagina: PAGINAS.sessaoAovivo }),
467
- menuItem('Hall', { pagina: PAGINAS.minhaPagina }),
468
- menuItem('Definições', { pagina: PAGINAS.definicoes, params: { slug: [] } }),
469
- menuItem('Dicas', { pagina: PAGINAS.dicas, params: { slug: [] } }),
470
- ];
471
- /*
472
- MENUS_INTERNOS: árvore tipada e “descobrível” (DX).
473
- Note que isso NÃO é “páginas /admin/*”, e sim o menu interno “da página admin”.
474
- */
475
461
  const MENUS_INTERNOS = {
476
462
  PAGINAS: {
463
+ jogo: [
464
+ menuGrupo('Administrador', [
465
+ menuItem('Salas', { pagina: PAGINAS.jogo.admin.gerenciarSalas }),
466
+ ]),
467
+ menuGrupo('Mestre', [
468
+ menuItem('Sessões', { pagina: PAGINAS.jogo.mestre.sessoesMestre }),
469
+ ]),
470
+ menuGrupo('Jogador', [
471
+ menuItem('Início', { pagina: PAGINAS.jogo.jogador }),
472
+ ]),
473
+ ],
477
474
  minhasPaginas: {
478
475
  admin: [
479
- menuItem('Upload de Recursos Internos', { pagina: PAGINAS.minhasPaginas.admin.uploads }),
476
+ menuItem('Upload de Recursos Internos', { pagina: PAGINAS.minhasPaginas.admin.uploadRecursosInternos }),
480
477
  menuItem('Variáveis de Ambiente', { pagina: PAGINAS.minhasPaginas.admin.variaveisAmbiente }),
481
478
  menuItem('Aventuras', { pagina: PAGINAS.minhasPaginas.admin.aventuras }),
482
479
  menuItem('Dashboard WebSocket', { pagina: PAGINAS.minhasPaginas.admin.dashboardWs }),
@@ -503,59 +500,136 @@ const MENUS_INTERNOS = {
503
500
  ]),
504
501
  ]),
505
502
  ],
503
+ artista: [
504
+ menuItem('Minhas Imagens', { pagina: PAGINAS.minhasPaginas.artista.minhasImagens }),
505
+ menuItem('Adicionar Nova Imagem', { pagina: PAGINAS.minhasPaginas.artista.adicionarImagem }),
506
+ ],
506
507
  jogador: [
507
508
  menuGrupo('Jogador', [
508
509
  menuItem('Início', { pagina: PAGINAS.minhasPaginas.jogador }),
509
510
  menuItem('Meus Personagens', { pagina: PAGINAS.minhasPaginas.jogador.meusPersonagens }),
510
- ])
511
- ],
512
- artista: [
513
- menuItem('Minhas Imagens', { pagina: PAGINAS.minhasPaginas.artista.minhasImagens }),
514
- menuItem('Adicionar Nova Imagem', { pagina: PAGINAS.minhasPaginas.artista.adicionarImagem }),
511
+ ]),
515
512
  ],
516
513
  },
517
- jogo: [
518
- menuGrupo('Administrador', [
519
- menuItem('Salas', { pagina: PAGINAS.jogo.admin.gerenciarSalas }),
520
- ]),
521
- menuGrupo('Mestre', [
522
- menuItem('Sessões', { pagina: PAGINAS.jogo.mestre.sessoesMestre }),
523
- ]),
524
- menuGrupo('Jogador', [
525
- // aqui você aponta para páginas reais do Next que existam no PAGINAS
526
- menuItem('Início', { pagina: PAGINAS.jogo.jogador }),
527
- // se você realmente tem essas rotas, elas precisam existir em PAGINAS também:
528
- // menuItem('Minhas Sessões', { pagina: PAGINAS.jogo.jogador.sessoesJogador }),
529
- // menuItem('Modo Individual', { pagina: PAGINAS.jogo.jogador.individual }),
530
- // menuItem('Teste', { pagina: PAGINAS.jogo.jogador.teste }),
531
- ]),
532
- ],
533
514
  },
534
515
  };
535
- /*
536
- Map derivado automaticamente da árvore acima.
537
- Sem duplicar listas, sem string key, sem “ordem de execução” frágil.
538
- */
516
+ const MENUS_INTERNOS_LAYOUTCONTEXTO = {
517
+ PAGINAS: {
518
+ aventura: menuDinamico(),
519
+ aventuras: menuDinamico(),
520
+ jogo: {
521
+ menu: MENUS_INTERNOS.PAGINAS.jogo,
522
+ admin: {
523
+ gerenciarSalas: MENUS_INTERNOS.PAGINAS.jogo,
524
+ },
525
+ mestre: {
526
+ sessoesMestre: MENUS_INTERNOS.PAGINAS.jogo,
527
+ },
528
+ jogador: MENUS_INTERNOS.PAGINAS.jogo,
529
+ },
530
+ minhasPaginas: {
531
+ admin: {
532
+ menu: MENUS_INTERNOS.PAGINAS.minhasPaginas.admin,
533
+ aventura: MENUS_INTERNOS.PAGINAS.minhasPaginas.admin,
534
+ aventuras: MENUS_INTERNOS.PAGINAS.minhasPaginas.admin,
535
+ dashboardWs: MENUS_INTERNOS.PAGINAS.minhasPaginas.admin,
536
+ sessao: MENUS_INTERNOS.PAGINAS.minhasPaginas.admin,
537
+ uploadRecursosInternos: MENUS_INTERNOS.PAGINAS.minhasPaginas.admin,
538
+ variaveisAmbiente: MENUS_INTERNOS.PAGINAS.minhasPaginas.admin,
539
+ dashboardPermissoes: MENUS_INTERNOS.PAGINAS.minhasPaginas.admin,
540
+ dashboardPermissoesUsuarios: MENUS_INTERNOS.PAGINAS.minhasPaginas.admin,
541
+ },
542
+ jogador: {
543
+ menu: MENUS_INTERNOS.PAGINAS.minhasPaginas.jogador,
544
+ meusPersonagens: MENUS_INTERNOS.PAGINAS.minhasPaginas.jogador,
545
+ },
546
+ mestre: {
547
+ menu: MENUS_INTERNOS.PAGINAS.minhasPaginas.mestre,
548
+ aventura: MENUS_INTERNOS.PAGINAS.minhasPaginas.mestre,
549
+ aventuras: MENUS_INTERNOS.PAGINAS.minhasPaginas.mestre,
550
+ sessoesUnicas: MENUS_INTERNOS.PAGINAS.minhasPaginas.mestre,
551
+ personagens: MENUS_INTERNOS.PAGINAS.minhasPaginas.mestre,
552
+ rascunhos: {
553
+ aventuras: MENUS_INTERNOS.PAGINAS.minhasPaginas.mestre,
554
+ sessoesUnicas: MENUS_INTERNOS.PAGINAS.minhasPaginas.mestre,
555
+ },
556
+ sessao: MENUS_INTERNOS.PAGINAS.minhasPaginas.mestre,
557
+ },
558
+ artista: {
559
+ menu: MENUS_INTERNOS.PAGINAS.minhasPaginas.artista,
560
+ minhasImagens: MENUS_INTERNOS.PAGINAS.minhasPaginas.artista,
561
+ adicionarImagem: MENUS_INTERNOS.PAGINAS.minhasPaginas.artista,
562
+ },
563
+ minhasDisponibilidades: menuVazio(),
564
+ },
565
+ personagens: menuDinamico(),
566
+ },
567
+ };
568
+ function isPaginaComLayout(node) { return 'layoutContextualizadoInicial' in node && 'template' in node; }
569
+ function isMenuLeaf(node) {
570
+ if (Array.isArray(node))
571
+ return true;
572
+ if ('tipo' in node)
573
+ return true;
574
+ return false;
575
+ }
576
+ const MENUS_LAYOUTCONTEXTO_POR_PAGINA = (() => {
577
+ const out = new Map();
578
+ const rec = (paginasNode, menusNode) => {
579
+ if (isMenuLeaf(menusNode)) {
580
+ if (isPaginaComLayout(paginasNode))
581
+ out.set(paginasNode, menusNode);
582
+ return;
583
+ }
584
+ const menusObj = menusNode;
585
+ const paginasObj = paginasNode;
586
+ for (const k of Object.keys(menusObj)) {
587
+ if (k === 'menu')
588
+ continue;
589
+ const nextMenus = menusObj[k];
590
+ if (!nextMenus)
591
+ continue;
592
+ const nextPaginas = paginasObj[k];
593
+ if (!nextPaginas || typeof nextPaginas !== 'object')
594
+ continue;
595
+ rec(nextPaginas, nextMenus);
596
+ }
597
+ };
598
+ rec(PAGINAS, MENUS_INTERNOS_LAYOUTCONTEXTO.PAGINAS);
599
+ return out;
600
+ })();
601
+ function obterMenuInternoLayoutContexto(pagina) {
602
+ return MENUS_LAYOUTCONTEXTO_POR_PAGINA.get(pagina);
603
+ }
539
604
  const MENUS_INTERNOS_POR_PAGINA = (() => {
540
605
  const out = new Map();
606
+ function isObject(v) { return typeof v === 'object' && v !== null; }
607
+ function hasTemplate(v) { return isObject(v) && 'template' in v; }
608
+ function getKey(v, k) {
609
+ if (!isObject(v))
610
+ return undefined;
611
+ return v[k];
612
+ }
541
613
  const rec = (paginasNode, menusNode) => {
542
614
  if (Array.isArray(menusNode)) {
543
- if (paginasNode && typeof paginasNode === 'object' && 'template' in paginasNode)
615
+ if (hasTemplate(paginasNode))
544
616
  out.set(paginasNode, menusNode);
545
617
  return;
546
618
  }
547
- if (!menusNode || typeof menusNode !== 'object')
619
+ if (!isObject(menusNode))
548
620
  return;
549
621
  for (const k of Object.keys(menusNode)) {
550
- const nextPaginas = paginasNode && typeof paginasNode === 'object' ? paginasNode[k] : undefined;
551
- const nextMenus = menusNode[k];
552
- rec(nextPaginas, nextMenus);
622
+ const nextPaginas = getKey(paginasNode, k);
623
+ const nextMenus = getKey(menusNode, k);
624
+ rec(nextPaginas ?? undefined, nextMenus ?? undefined);
553
625
  }
554
626
  };
555
627
  rec(PAGINAS, MENUS_INTERNOS.PAGINAS);
556
628
  return out;
557
629
  })();
558
- function obterMenuInterno(pagina) { return MENUS_INTERNOS_POR_PAGINA.get(pagina); }
630
+ function obterMenuInterno(pagina) {
631
+ return MENUS_INTERNOS_POR_PAGINA.get(pagina);
632
+ }
559
633
  function resolverMenuInterno(pagina) {
560
634
  const nodes = obterMenuInterno(pagina);
561
635
  if (!nodes)
@@ -681,4 +755,4 @@ function acceptFromFormatos(formatos) {
681
755
  return Array.from(new Set(mimes)).join(',');
682
756
  }
683
757
  function isFormatoImagemBitmap(formato) { return formato === 'png' || formato === 'jpg'; }
684
- export { CAPACIDADES, PERMISSOES_ESTADOS, TIPOS_IMAGEM, temSudoBurlarCapacidades, AuthSession, SalaDeJogo_Tipo, SalaDeJogo_Estado, SalaDeJogo_TipoMestre, SalaDeJogo_TipoParticipante, menuItem, menuGrupo, montarHref, pagina, isWsErrorResponse, isWsUnauthorizedErrorResponse, wsErro, wsUnauthorized, wsMap, wsChain, createGateway, EventosWebSocket, isRecord, getEmitDelivery, AventuraEstado, EstadoPendenciaPersonagem, EstadoPendenciaAdministrativaPersonagem, EstadoOcupacaoPersonagem, EstadoSessao, DiaDaSemana, obtemDiaDaSemanaPorExtensoPorDDS, CargoExibicaoUsuario, FormatoMomento, EstiloSessao, PathTokenPadrao, LISTA_CAPACIDADES, criarEventosFiltrados, Eventos_Envia, Eventos_Emite, Eventos_EnviaERecebe, decidirAcessoPagina, decidirAcessoPagina_Rec, PAGINAS, filtrarMenuPorAcesso, MENU_PRINCIPAL, MENUS_INTERNOS, MENUS_INTERNOS_POR_PAGINA, obterMenuInterno, resolverMenuInterno, isNumeroInteiroPositivo, isNumeroPositivo, pushErro, validarFormatos, validarTamanho, validarDimensoesDim, validarDimensoesRegra, validarProporcao, validarMaxPixels, validarImagem, validarRegrasUploadArquivo, isRegrasUploadArquivoValidas, mimeFromFormato, acceptFromFormatos, isFormatoImagemBitmap };
758
+ export { CAPACIDADES, PERMISSOES_ESTADOS, TIPOS_IMAGEM, temSudoBurlarCapacidades, AuthSession, SalaDeJogo_Tipo, SalaDeJogo_Estado, SalaDeJogo_TipoMestre, SalaDeJogo_TipoParticipante, menuItem, menuGrupo, menuVazio, menuDinamico, montarHref, limparUndefined, pagina, paginaComLayoutContextualizado, isWsErrorResponse, isWsUnauthorizedErrorResponse, wsErro, wsUnauthorized, wsMap, wsChain, createGateway, EventosWebSocket, isRecord, getEmitDelivery, AventuraEstado, EstadoPendenciaPersonagem, EstadoPendenciaAdministrativaPersonagem, EstadoOcupacaoPersonagem, EstadoSessao, DiaDaSemana, obtemDiaDaSemanaPorExtensoPorDDS, CargoExibicaoUsuario, FormatoMomento, EstiloSessao, PathTokenPadrao, LISTA_CAPACIDADES, criarEventosFiltrados, Eventos_Envia, Eventos_Emite, Eventos_EnviaERecebe, decidirAcessoPagina, decidirAcessoPagina_Rec, PAGINAS, filtrarMenuPorAcesso, MENUS_INTERNOS, MENUS_INTERNOS_LAYOUTCONTEXTO, isPaginaComLayout, isMenuLeaf, MENUS_LAYOUTCONTEXTO_POR_PAGINA, obterMenuInternoLayoutContexto, MENUS_INTERNOS_POR_PAGINA, obterMenuInterno, resolverMenuInterno, isNumeroInteiroPositivo, isNumeroPositivo, pushErro, validarFormatos, validarTamanho, validarDimensoesDim, validarDimensoesRegra, validarProporcao, validarMaxPixels, validarImagem, validarRegrasUploadArquivo, isRegrasUploadArquivoValidas, mimeFromFormato, acceptFromFormatos, isFormatoImagemBitmap };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "types-nora-api",
3
- "version": "0.0.248",
3
+ "version": "0.0.251",
4
4
  "description": "Tipagem da Nora-Api compartilhada com o universodomedo.com",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",