From a374030438e2408c57a2bb891cbe7c2f428ea144 Mon Sep 17 00:00:00 2001 From: Katalina Okano Date: Fri, 12 Mar 2021 16:22:56 -0500 Subject: [PATCH] chore: move types to @roleypoly/types package --- .../api/handlers/create-roleypoly-data.ts | 6 +- packages/api/handlers/get-picker-data.ts | 7 +-- packages/api/handlers/get-session.ts | 2 +- packages/api/handlers/get-slug.ts | 2 +- packages/api/handlers/login-callback.ts | 7 +-- packages/api/handlers/revoke-session.ts | 2 +- packages/api/handlers/update-roles.ts | 4 +- packages/api/package.json | 1 + packages/api/utils/api-tools.ts | 2 +- packages/api/utils/guild.ts | 2 +- packages/design-system/atoms/role/Role.tsx | 2 +- packages/design-system/fixtures/storyData.ts | 2 +- .../molecules/demo-discord/DemoDiscord.tsx | 2 +- .../molecules/demo-picker/DemoPicker.tsx | 4 +- .../editor-category/EditorCategory.tsx | 2 +- .../molecules/guild-nav/GuildNav.tsx | 2 +- .../molecules/nav-slug/NavSlug.tsx | 2 +- .../picker-category/PickerCategory.tsx | 6 +- .../preauth-greeting/PreauthGreeting.tsx | 2 +- .../molecules/role-search/RoleSearch.tsx | 2 +- .../server-listing-card/ServerListingCard.tsx | 2 +- .../server-masthead/ServerMasthead.tsx | 2 +- .../user-avatar-group/UserAvatarGroup.tsx | 2 +- .../molecules/user-popover/UserPopover.tsx | 2 +- .../organisms/app-shell/AppShell.tsx | 2 +- .../organisms/editor/EditorShell.tsx | 2 +- .../help-why-no-roles/WhyNoRoles.styled.ts | 2 +- .../help-why-no-roles/WhyNoRoles.tsx | 4 +- .../organisms/masthead/Authed.tsx | 2 +- .../organisms/preauth/Preauth.tsx | 2 +- .../organisms/role-picker/RolePicker.tsx | 8 +-- .../server-setup/ServerSetup.stories.tsx | 2 +- .../organisms/server-setup/ServerSetup.tsx | 2 +- .../servers-listing/ServersListing.tsx | 2 +- packages/design-system/package.json | 1 + .../design-system/templates/errors/Errors.tsx | 2 +- .../templates/servers/Servers.tsx | 2 +- packages/types/Category.ts | 13 +++++ packages/types/Guild.ts | 47 +++++++++++++++ packages/types/Role.ts | 37 ++++++++++++ packages/types/Session.ts | 18 ++++++ packages/types/User.ts | 18 ++++++ packages/types/demoData.ts | 58 +++++++++++++++++++ packages/types/index.ts | 5 ++ packages/types/package.json | 4 ++ packages/web/package.json | 1 + 46 files changed, 244 insertions(+), 59 deletions(-) create mode 100644 packages/types/Category.ts create mode 100644 packages/types/Guild.ts create mode 100644 packages/types/Role.ts create mode 100644 packages/types/Session.ts create mode 100644 packages/types/User.ts create mode 100644 packages/types/demoData.ts create mode 100644 packages/types/index.ts create mode 100644 packages/types/package.json diff --git a/packages/api/handlers/create-roleypoly-data.ts b/packages/api/handlers/create-roleypoly-data.ts index 8ea89df..c119daa 100644 --- a/packages/api/handlers/create-roleypoly-data.ts +++ b/packages/api/handlers/create-roleypoly-data.ts @@ -1,9 +1,5 @@ +import { CategoryType, Features, GuildData as GuildDataT } from '@roleypoly/types'; import KSUID from 'ksuid'; -import { - CategoryType, - Features, - GuildData as GuildDataT, -} from '../../../src/common/types'; import { onlyRootUsers, respond } from '../utils/api-tools'; import { GuildData } from '../utils/kv'; diff --git a/packages/api/handlers/get-picker-data.ts b/packages/api/handlers/get-picker-data.ts index 29101cc..f5317a1 100644 --- a/packages/api/handlers/get-picker-data.ts +++ b/packages/api/handlers/get-picker-data.ts @@ -1,9 +1,4 @@ -import { - DiscordUser, - GuildSlug, - PresentableGuild, - SessionData, -} from '../../../src/common/types'; +import { DiscordUser, GuildSlug, PresentableGuild, SessionData } from '@roleypoly/types'; import { respond, withSession } from '../utils/api-tools'; import { getGuild, getGuildData, getGuildMemberRoles } from '../utils/guild'; diff --git a/packages/api/handlers/get-session.ts b/packages/api/handlers/get-session.ts index abe99c9..e597070 100644 --- a/packages/api/handlers/get-session.ts +++ b/packages/api/handlers/get-session.ts @@ -1,4 +1,4 @@ -import { SessionData } from '../../../src/common/types'; +import { SessionData } from '@roleypoly/types'; import { respond, withSession } from '../utils/api-tools'; export const GetSession = withSession((session?: SessionData) => (): Response => { diff --git a/packages/api/handlers/get-slug.ts b/packages/api/handlers/get-slug.ts index 4cd6244..b77d77e 100644 --- a/packages/api/handlers/get-slug.ts +++ b/packages/api/handlers/get-slug.ts @@ -1,4 +1,4 @@ -import { GuildSlug } from '../../../src/common/types'; +import { GuildSlug } from '@roleypoly/types'; import { respond } from '../utils/api-tools'; import { getGuild } from '../utils/guild'; diff --git a/packages/api/handlers/login-callback.ts b/packages/api/handlers/login-callback.ts index 58194d8..c553422 100644 --- a/packages/api/handlers/login-callback.ts +++ b/packages/api/handlers/login-callback.ts @@ -1,10 +1,5 @@ +import { AuthTokenResponse, DiscordUser, GuildSlug, SessionData } from '@roleypoly/types'; import KSUID from 'ksuid'; -import { - AuthTokenResponse, - DiscordUser, - GuildSlug, - SessionData, -} from '../../../src/common/types'; import { AuthType, discordFetch, diff --git a/packages/api/handlers/revoke-session.ts b/packages/api/handlers/revoke-session.ts index 60a8418..e9e4cbb 100644 --- a/packages/api/handlers/revoke-session.ts +++ b/packages/api/handlers/revoke-session.ts @@ -1,4 +1,4 @@ -import { SessionData } from '../../../src/common/types'; +import { SessionData } from '@roleypoly/types'; import { formData, respond, userAgent, withSession } from '../utils/api-tools'; import { botClientID, botClientSecret } from '../utils/config'; import { Sessions } from '../utils/kv'; diff --git a/packages/api/handlers/update-roles.ts b/packages/api/handlers/update-roles.ts index ae84d42..1ef0f45 100644 --- a/packages/api/handlers/update-roles.ts +++ b/packages/api/handlers/update-roles.ts @@ -1,4 +1,3 @@ -import { difference, groupBy, keyBy, union } from 'lodash'; import { GuildData, Member, @@ -8,7 +7,8 @@ import { RoleUpdate, SessionData, TransactionType, -} from '../../../src/common/types'; +} from '@roleypoly/types'; +import { difference, groupBy, keyBy, union } from 'lodash'; import { AuthType, discordFetch, respond, withSession } from '../utils/api-tools'; import { botToken } from '../utils/config'; import { diff --git a/packages/api/package.json b/packages/api/package.json index 8c07826..35b1428 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -6,6 +6,7 @@ "start": "yarn workspace @roleypoly/worker-emulator start --basePath `pwd`" }, "devDependencies": { + "@roleypoly/types": "*", "@roleypoly/worker-emulator": "*", "ksuid": "^2.0.0", "lodash": "^4.17.21", diff --git a/packages/api/utils/api-tools.ts b/packages/api/utils/api-tools.ts index 8387e58..4b0124f 100644 --- a/packages/api/utils/api-tools.ts +++ b/packages/api/utils/api-tools.ts @@ -1,4 +1,4 @@ -import { SessionData, UserGuildPermissions } from '../../../src/common/types'; +import { SessionData, UserGuildPermissions } from '@roleypoly/types'; import { evaluatePermission, permissions as Permissions, diff --git a/packages/api/utils/guild.ts b/packages/api/utils/guild.ts index 921fb53..1f0f47b 100644 --- a/packages/api/utils/guild.ts +++ b/packages/api/utils/guild.ts @@ -5,7 +5,7 @@ import { OwnRoleInfo, Role, RoleSafety, -} from '../../../src/common/types'; +} from '@roleypoly/types'; import { evaluatePermission, permissions } from '../../../src/common/utils/hasPermission'; import { AuthType, cacheLayer, discordFetch } from './api-tools'; import { botClientID, botToken } from './config'; diff --git a/packages/design-system/atoms/role/Role.tsx b/packages/design-system/atoms/role/Role.tsx index 78affbb..642a5eb 100644 --- a/packages/design-system/atoms/role/Role.tsx +++ b/packages/design-system/atoms/role/Role.tsx @@ -1,8 +1,8 @@ import { numberToChroma } from '@roleypoly/design-system/atoms/colors'; +import { Role as RPCRole, RoleSafety } from '@roleypoly/types'; import chroma from 'chroma-js'; import * as React from 'react'; import { FaCheck, FaTimes } from 'react-icons/fa'; -import { Role as RPCRole, RoleSafety } from '../../../../src/common/types'; import { evaluatePermission, permissions, diff --git a/packages/design-system/fixtures/storyData.ts b/packages/design-system/fixtures/storyData.ts index 6d94c37..6684a17 100644 --- a/packages/design-system/fixtures/storyData.ts +++ b/packages/design-system/fixtures/storyData.ts @@ -11,7 +11,7 @@ import { Role, RoleSafety, RoleypolyUser, -} from '../../../src/common/types'; +} from '@roleypoly/types'; export const roleCategory: Role[] = [ { diff --git a/packages/design-system/molecules/demo-discord/DemoDiscord.tsx b/packages/design-system/molecules/demo-discord/DemoDiscord.tsx index 1856a1a..b1f9699 100644 --- a/packages/design-system/molecules/demo-discord/DemoDiscord.tsx +++ b/packages/design-system/molecules/demo-discord/DemoDiscord.tsx @@ -1,6 +1,6 @@ import { Typist } from '@roleypoly/design-system/atoms/typist'; +import { demoData } from '@roleypoly/types/demoData'; import * as React from 'react'; -import { demoData } from '../../../../src/common/types/demoData'; import { Base, InputBox, diff --git a/packages/design-system/molecules/demo-picker/DemoPicker.tsx b/packages/design-system/molecules/demo-picker/DemoPicker.tsx index 736e71b..fbc1f15 100644 --- a/packages/design-system/molecules/demo-picker/DemoPicker.tsx +++ b/packages/design-system/molecules/demo-picker/DemoPicker.tsx @@ -1,8 +1,8 @@ import { Role } from '@roleypoly/design-system/atoms/role'; +import { Role as RPCRole } from '@roleypoly/types'; +import { demoData } from '@roleypoly/types/demoData'; import * as React from 'react'; import styled from 'styled-components'; -import { Role as RPCRole } from '../../../../src/common/types'; -import { demoData } from '../../../../src/common/types/demoData'; const Container = styled.div` display: flex; diff --git a/packages/design-system/molecules/editor-category/EditorCategory.tsx b/packages/design-system/molecules/editor-category/EditorCategory.tsx index 59ce4db..262bb94 100644 --- a/packages/design-system/molecules/editor-category/EditorCategory.tsx +++ b/packages/design-system/molecules/editor-category/EditorCategory.tsx @@ -6,9 +6,9 @@ import { Space } from '@roleypoly/design-system/atoms/space'; import { TextInput, TextInputWithIcon } from '@roleypoly/design-system/atoms/text-input'; import { Text } from '@roleypoly/design-system/atoms/typography'; import { RoleSearch } from '@roleypoly/design-system/molecules/role-search'; +import { Category, CategoryType, Role as RoleType } from '@roleypoly/types'; import * as React from 'react'; import { GoSearch } from 'react-icons/go'; -import { Category, CategoryType, Role as RoleType } from '../../../../src/common/types'; import { RoleContainer } from './EditorCategory.styled'; type Props = { diff --git a/packages/design-system/molecules/guild-nav/GuildNav.tsx b/packages/design-system/molecules/guild-nav/GuildNav.tsx index 7d62b94..2d0e8fe 100644 --- a/packages/design-system/molecules/guild-nav/GuildNav.tsx +++ b/packages/design-system/molecules/guild-nav/GuildNav.tsx @@ -1,9 +1,9 @@ import { NavSlug } from '@roleypoly/design-system/molecules/nav-slug'; +import { GuildSlug, UserGuildPermissions } from '@roleypoly/types'; import * as React from 'react'; import Scrollbars from 'react-custom-scrollbars'; import { GoStar, GoZap } from 'react-icons/go'; import ReactTooltip from 'react-tooltip'; -import { GuildSlug, UserGuildPermissions } from '../../../../src/common/types'; import { sortBy } from '../../../../src/common/utils/sortBy'; import { GuildNavItem } from './GuildNav.styled'; diff --git a/packages/design-system/molecules/nav-slug/NavSlug.tsx b/packages/design-system/molecules/nav-slug/NavSlug.tsx index b3aea87..b1b74fb 100644 --- a/packages/design-system/molecules/nav-slug/NavSlug.tsx +++ b/packages/design-system/molecules/nav-slug/NavSlug.tsx @@ -1,7 +1,7 @@ import { Avatar, utils } from '@roleypoly/design-system/atoms/avatar'; +import { GuildSlug } from '@roleypoly/types'; import * as React from 'react'; import { GoOrganization } from 'react-icons/go'; -import { GuildSlug } from '../../../../src/common/types'; import { SlugContainer, SlugName } from './NavSlug.styled'; type Props = { diff --git a/packages/design-system/molecules/picker-category/PickerCategory.tsx b/packages/design-system/molecules/picker-category/PickerCategory.tsx index 9d2e7b6..709f5bc 100644 --- a/packages/design-system/molecules/picker-category/PickerCategory.tsx +++ b/packages/design-system/molecules/picker-category/PickerCategory.tsx @@ -1,13 +1,9 @@ import { Role } from '@roleypoly/design-system/atoms/role'; import { AmbientLarge, LargeText } from '@roleypoly/design-system/atoms/typography'; +import { Category as RPCCategory, Role as RPCRole, RoleSafety } from '@roleypoly/types'; import * as React from 'react'; import ReactTooltip from 'react-tooltip'; import styled from 'styled-components'; -import { - Category as RPCCategory, - Role as RPCRole, - RoleSafety, -} from '../../../../src/common/types'; import { sortBy } from '../../../../src/common/utils/sortBy'; import { Head, HeadSub, HeadTitle } from './PickerCategory.styled'; diff --git a/packages/design-system/molecules/preauth-greeting/PreauthGreeting.tsx b/packages/design-system/molecules/preauth-greeting/PreauthGreeting.tsx index 7a5c83d..ef6da19 100644 --- a/packages/design-system/molecules/preauth-greeting/PreauthGreeting.tsx +++ b/packages/design-system/molecules/preauth-greeting/PreauthGreeting.tsx @@ -1,9 +1,9 @@ import { Avatar, utils as avatarUtils } from '@roleypoly/design-system/atoms/avatar'; import { Space } from '@roleypoly/design-system/atoms/space'; import { AccentTitle } from '@roleypoly/design-system/atoms/typography'; +import { GuildSlug } from '@roleypoly/types'; import * as React from 'react'; import styled from 'styled-components'; -import { GuildSlug } from '../../../../src/common/types'; type GreetingProps = { guildSlug: GuildSlug; diff --git a/packages/design-system/molecules/role-search/RoleSearch.tsx b/packages/design-system/molecules/role-search/RoleSearch.tsx index 3c3792f..397f8fb 100644 --- a/packages/design-system/molecules/role-search/RoleSearch.tsx +++ b/packages/design-system/molecules/role-search/RoleSearch.tsx @@ -1,11 +1,11 @@ import { Role } from '@roleypoly/design-system/atoms/role'; import { Space } from '@roleypoly/design-system/atoms/space'; import { TextInputWithIcon } from '@roleypoly/design-system/atoms/text-input'; +import { Role as RoleType } from '@roleypoly/types'; import Fuse from 'fuse.js'; import * as React from 'react'; import { GoSearch } from 'react-icons/go'; import styled from 'styled-components'; -import { Role as RoleType } from '../../../../src/common/types'; type Props = { roles: RoleType[]; diff --git a/packages/design-system/molecules/server-listing-card/ServerListingCard.tsx b/packages/design-system/molecules/server-listing-card/ServerListingCard.tsx index 66619f5..f3ea336 100644 --- a/packages/design-system/molecules/server-listing-card/ServerListingCard.tsx +++ b/packages/design-system/molecules/server-listing-card/ServerListingCard.tsx @@ -1,8 +1,8 @@ import { Avatar, utils } from '@roleypoly/design-system/atoms/avatar'; import { Collapse } from '@roleypoly/design-system/atoms/collapse'; +import { GuildSlug, UserGuildPermissions } from '@roleypoly/types'; import * as React from 'react'; import { GoPerson, GoStar, GoZap } from 'react-icons/go'; -import { GuildSlug, UserGuildPermissions } from '../../../../src/common/types'; import { CardBase, CardLine, diff --git a/packages/design-system/molecules/server-masthead/ServerMasthead.tsx b/packages/design-system/molecules/server-masthead/ServerMasthead.tsx index 7a82267..53712d9 100644 --- a/packages/design-system/molecules/server-masthead/ServerMasthead.tsx +++ b/packages/design-system/molecules/server-masthead/ServerMasthead.tsx @@ -1,8 +1,8 @@ import { Avatar, utils } from '@roleypoly/design-system/atoms/avatar'; import { AccentTitle, AmbientLarge } from '@roleypoly/design-system/atoms/typography'; +import { GuildSlug } from '@roleypoly/types'; import * as React from 'react'; import { GoPencil } from 'react-icons/go'; -import { GuildSlug } from '../../../../src/common/types'; import { Editable, Icon, Name, Wrapper } from './ServerMasthead.styled'; export type ServerMastheadProps = { diff --git a/packages/design-system/molecules/user-avatar-group/UserAvatarGroup.tsx b/packages/design-system/molecules/user-avatar-group/UserAvatarGroup.tsx index 825e355..9f7e60d 100644 --- a/packages/design-system/molecules/user-avatar-group/UserAvatarGroup.tsx +++ b/packages/design-system/molecules/user-avatar-group/UserAvatarGroup.tsx @@ -1,6 +1,6 @@ import { Avatar, utils } from '@roleypoly/design-system/atoms/avatar'; +import { DiscordUser } from '@roleypoly/types'; import * as React from 'react'; -import { DiscordUser } from '../../../../src/common/types'; import { Collapse, Discriminator, Group, GroupText } from './UserAvatarGroup.styled'; type Props = { diff --git a/packages/design-system/molecules/user-popover/UserPopover.tsx b/packages/design-system/molecules/user-popover/UserPopover.tsx index 703ec15..ce9e1de 100644 --- a/packages/design-system/molecules/user-popover/UserPopover.tsx +++ b/packages/design-system/molecules/user-popover/UserPopover.tsx @@ -1,8 +1,8 @@ import { CompletelyStylelessLink } from '@roleypoly/design-system/atoms/typography'; import { UserAvatarGroup } from '@roleypoly/design-system/molecules/user-avatar-group'; +import { DiscordUser } from '@roleypoly/types'; import * as React from 'react'; import { GoGear, GoSignOut } from 'react-icons/go'; -import { DiscordUser } from '../../../../src/common/types'; import { Base, NavAction } from './UserPopover.styled'; type UserPopoverProps = { diff --git a/packages/design-system/organisms/app-shell/AppShell.tsx b/packages/design-system/organisms/app-shell/AppShell.tsx index b72b7ff..c724e4e 100644 --- a/packages/design-system/organisms/app-shell/AppShell.tsx +++ b/packages/design-system/organisms/app-shell/AppShell.tsx @@ -1,9 +1,9 @@ import { GlobalStyleColors } from '@roleypoly/design-system/atoms/colors'; import { Footer } from '@roleypoly/design-system/molecules/footer'; import * as Masthead from '@roleypoly/design-system/organisms/masthead'; +import { DiscordUser, GuildSlug } from '@roleypoly/types'; import * as React from 'react'; import { Scrollbars } from 'react-custom-scrollbars'; -import { DiscordUser, GuildSlug } from '../../../../src/common/types'; import { Content, GlobalStyles } from './AppShell.styled'; export type AppShellProps = { diff --git a/packages/design-system/organisms/editor/EditorShell.tsx b/packages/design-system/organisms/editor/EditorShell.tsx index 7ff97a0..e41b9b0 100644 --- a/packages/design-system/organisms/editor/EditorShell.tsx +++ b/packages/design-system/organisms/editor/EditorShell.tsx @@ -1,6 +1,6 @@ import { Tab, TabView } from '@roleypoly/design-system/atoms/tab-view'; +import { PresentableGuild } from '@roleypoly/types'; import * as React from 'react'; -import { PresentableGuild } from '../../../../src/common/types'; import { EditorCategory } from '../../molecules/editor-category'; import { CategoryContainer } from './EditorShell.styled'; diff --git a/packages/design-system/organisms/help-why-no-roles/WhyNoRoles.styled.ts b/packages/design-system/organisms/help-why-no-roles/WhyNoRoles.styled.ts index a2c3c9e..cc43819 100644 --- a/packages/design-system/organisms/help-why-no-roles/WhyNoRoles.styled.ts +++ b/packages/design-system/organisms/help-why-no-roles/WhyNoRoles.styled.ts @@ -1,6 +1,6 @@ import { numberToChroma, palette } from '@roleypoly/design-system/atoms/colors'; +import { Role } from '@roleypoly/types'; import styled, { css } from 'styled-components'; -import { Role } from '../../../../src/common/types'; export const DiscordBase = styled.div` background-color: ${palette.discord100}; diff --git a/packages/design-system/organisms/help-why-no-roles/WhyNoRoles.tsx b/packages/design-system/organisms/help-why-no-roles/WhyNoRoles.tsx index 28dd882..e008e6b 100644 --- a/packages/design-system/organisms/help-why-no-roles/WhyNoRoles.tsx +++ b/packages/design-system/organisms/help-why-no-roles/WhyNoRoles.tsx @@ -1,11 +1,11 @@ import { palette } from '@roleypoly/design-system/atoms/colors'; import { HalfsiesContainer, HalfsiesItem } from '@roleypoly/design-system/atoms/halfsies'; import { SparkleOverlay } from '@roleypoly/design-system/atoms/sparkle'; +import { Role } from '@roleypoly/types'; +import { demoData } from '@roleypoly/types/demoData'; import chroma from 'chroma-js'; import * as React from 'react'; import { FaCheck, FaTimes } from 'react-icons/fa'; -import { Role } from '../../../../src/common/types'; -import { demoData } from '../../../../src/common/types/demoData'; import { DiscordBase, DiscordRole } from './WhyNoRoles.styled'; const adminRoles: Role[] = [ diff --git a/packages/design-system/organisms/masthead/Authed.tsx b/packages/design-system/organisms/masthead/Authed.tsx index 8f486d2..7b176cc 100644 --- a/packages/design-system/organisms/masthead/Authed.tsx +++ b/packages/design-system/organisms/masthead/Authed.tsx @@ -4,9 +4,9 @@ import { GuildNav } from '@roleypoly/design-system/molecules/guild-nav'; import { NavSlug } from '@roleypoly/design-system/molecules/nav-slug'; import { UserAvatarGroup } from '@roleypoly/design-system/molecules/user-avatar-group'; import { UserPopover } from '@roleypoly/design-system/molecules/user-popover'; +import { DiscordUser, GuildSlug } from '@roleypoly/types'; import * as React from 'react'; import { GoOrganization } from 'react-icons/go'; -import { DiscordUser, GuildSlug } from '../../../../src/common/types'; import { GuildPopoverHead, InteractionBase, diff --git a/packages/design-system/organisms/preauth/Preauth.tsx b/packages/design-system/organisms/preauth/Preauth.tsx index 6e2130a..96c9780 100644 --- a/packages/design-system/organisms/preauth/Preauth.tsx +++ b/packages/design-system/organisms/preauth/Preauth.tsx @@ -1,9 +1,9 @@ import { Button } from '@roleypoly/design-system/atoms/button'; import { PreauthGreeting } from '@roleypoly/design-system/molecules/preauth-greeting'; +import { GuildSlug } from '@roleypoly/types'; import * as React from 'react'; import { FaDiscord } from 'react-icons/fa'; import styled from 'styled-components'; -import { GuildSlug } from '../../../../src/common/types'; export type PreauthProps = { guildSlug?: GuildSlug; diff --git a/packages/design-system/organisms/role-picker/RolePicker.tsx b/packages/design-system/organisms/role-picker/RolePicker.tsx index 3654c06..aa69c78 100644 --- a/packages/design-system/organisms/role-picker/RolePicker.tsx +++ b/packages/design-system/organisms/role-picker/RolePicker.tsx @@ -4,9 +4,6 @@ import { Link } from '@roleypoly/design-system/atoms/typography'; import { PickerCategory } from '@roleypoly/design-system/molecules/picker-category'; import { ResetSubmit } from '@roleypoly/design-system/molecules/reset-submit'; import { ServerMasthead } from '@roleypoly/design-system/molecules/server-masthead'; -import { isEqual, xor } from 'lodash'; -import * as React from 'react'; -import { GoInfo } from 'react-icons/go'; import { Category, CategoryType, @@ -14,7 +11,10 @@ import { GuildSlug, Member, Role, -} from '../../../../src/common/types'; +} from '@roleypoly/types'; +import { isEqual, xor } from 'lodash'; +import * as React from 'react'; +import { GoInfo } from 'react-icons/go'; import { ReactifyNewlines } from '../../../../src/common/utils/ReactifyNewlines'; import { sortBy } from '../../../../src/common/utils/sortBy'; import { diff --git a/packages/design-system/organisms/server-setup/ServerSetup.stories.tsx b/packages/design-system/organisms/server-setup/ServerSetup.stories.tsx index ed4b477..be8e037 100644 --- a/packages/design-system/organisms/server-setup/ServerSetup.stories.tsx +++ b/packages/design-system/organisms/server-setup/ServerSetup.stories.tsx @@ -1,4 +1,4 @@ -import { UserGuildPermissions } from '../../../../src/common/types'; +import { UserGuildPermissions } from '@roleypoly/types'; import { mastheadSlugs } from '../../fixtures/storyData'; import { ServerSetup } from './ServerSetup'; diff --git a/packages/design-system/organisms/server-setup/ServerSetup.tsx b/packages/design-system/organisms/server-setup/ServerSetup.tsx index 28b4943..11aeb80 100644 --- a/packages/design-system/organisms/server-setup/ServerSetup.tsx +++ b/packages/design-system/organisms/server-setup/ServerSetup.tsx @@ -3,10 +3,10 @@ import { Button } from '@roleypoly/design-system/atoms/button'; import { DotOverlay } from '@roleypoly/design-system/atoms/dot-overlay'; import { Hero } from '@roleypoly/design-system/atoms/hero'; import { AccentTitle, SmallTitle } from '@roleypoly/design-system/atoms/typography'; +import { GuildSlug, UserGuildPermissions } from '@roleypoly/types'; import * as React from 'react'; import { FaDiscord } from 'react-icons/fa'; import { GoArrowLeft } from 'react-icons/go'; -import { GuildSlug, UserGuildPermissions } from '../../../../src/common/types'; import { evaluatePermission } from '../../../../src/common/utils/hasPermission'; import { FlexLine, FlexWrap } from './ServerSetup.styled'; diff --git a/packages/design-system/organisms/servers-listing/ServersListing.tsx b/packages/design-system/organisms/servers-listing/ServersListing.tsx index 881eb08..53cd395 100644 --- a/packages/design-system/organisms/servers-listing/ServersListing.tsx +++ b/packages/design-system/organisms/servers-listing/ServersListing.tsx @@ -1,7 +1,7 @@ import { CompletelyStylelessLink } from '@roleypoly/design-system/atoms/typography'; import { ServerListingCard } from '@roleypoly/design-system/molecules/server-listing-card'; +import { GuildSlug } from '@roleypoly/types'; import * as React from 'react'; -import { GuildSlug } from '../../../../src/common/types'; import { sortBy } from '../../../../src/common/utils/sortBy'; import { CardContainer, ContentContainer } from './ServersListing.styled'; diff --git a/packages/design-system/package.json b/packages/design-system/package.json index 77c315c..6c6c202 100644 --- a/packages/design-system/package.json +++ b/packages/design-system/package.json @@ -6,6 +6,7 @@ "start": "start-storybook -p 6006" }, "dependencies": { + "@roleypoly/types": "*", "chroma-js": "^2.1.0", "isomorphic-unfetch": "^3.1.0", "ksuid": "^2.0.0", diff --git a/packages/design-system/templates/errors/Errors.tsx b/packages/design-system/templates/errors/Errors.tsx index e6b733c..b69e80c 100644 --- a/packages/design-system/templates/errors/Errors.tsx +++ b/packages/design-system/templates/errors/Errors.tsx @@ -5,8 +5,8 @@ import { ErrorMessage, } from '@roleypoly/design-system/molecules/error-banner'; import { AppShell } from '@roleypoly/design-system/organisms/app-shell'; +import { DiscordUser } from '@roleypoly/types'; import * as React from 'react'; -import { DiscordUser } from '../../../../src/common/types'; import { getMessageFromCode } from './errorStrings'; export type ErrorProps = { diff --git a/packages/design-system/templates/servers/Servers.tsx b/packages/design-system/templates/servers/Servers.tsx index 470affb..5f8f7e7 100644 --- a/packages/design-system/templates/servers/Servers.tsx +++ b/packages/design-system/templates/servers/Servers.tsx @@ -1,7 +1,7 @@ import { AppShell, AppShellProps } from '@roleypoly/design-system/organisms/app-shell'; import { ServersListing } from '@roleypoly/design-system/organisms/servers-listing/ServersListing'; +import { GuildSlug } from '@roleypoly/types'; import * as React from 'react'; -import { GuildSlug } from '../../../../src/common/types'; type ServerTemplateProps = Omit & { guilds: GuildSlug[]; diff --git a/packages/types/Category.ts b/packages/types/Category.ts new file mode 100644 index 0000000..190b89f --- /dev/null +++ b/packages/types/Category.ts @@ -0,0 +1,13 @@ +export enum CategoryType { + Single = 0, + Multi, +} + +export type Category = { + id: string; + name: string; + roles: string[]; + hidden: boolean; + type: CategoryType; + position: number; +}; diff --git a/packages/types/Guild.ts b/packages/types/Guild.ts new file mode 100644 index 0000000..964c153 --- /dev/null +++ b/packages/types/Guild.ts @@ -0,0 +1,47 @@ +import { Category } from './Category'; +import { Role } from './Role'; +import { Member } from './User'; + +export type Guild = { + id: string; + name: string; + icon: string; + roles: Role[]; +}; + +export enum Features { + None, + Preview = None, +} + +export type GuildData = { + id: string; + message: string; + categories: Category[]; + features: Features; +}; + +export type PresentableGuild = { + id: string; + guild: GuildSlug; + member: Member; + data: GuildData; + roles: Role[]; +}; + +export type GuildEnumeration = { + guilds: PresentableGuild[]; +}; + +export enum UserGuildPermissions { + User, + Manager = 1 << 1, + Admin = 1 << 2, +} + +export type GuildSlug = { + id: string; + name: string; + icon: string; + permissionLevel: UserGuildPermissions; +}; diff --git a/packages/types/Role.ts b/packages/types/Role.ts new file mode 100644 index 0000000..3d89688 --- /dev/null +++ b/packages/types/Role.ts @@ -0,0 +1,37 @@ +export enum RoleSafety { + Safe = 0, + HigherThanBot = 1 << 1, + DangerousPermissions = 1 << 2, + ManagedRole = 1 << 3, +} + +export type Role = { + id: string; + name: string; + color: number; + managed: boolean; + position: number; + safety: RoleSafety; + /** Permissions is should be used as a BigInt, NOT a number. */ + permissions: string; +}; + +export type OwnRoleInfo = { + highestRolePosition: number; +}; + +export enum TransactionType { + None = 0, + Remove = 1 << 1, + Add = 1 << 2, +} + +export type RoleTransaction = { + id: string; + action: TransactionType; +}; + +export type RoleUpdate = { + knownState: Role['id'][]; + transactions: RoleTransaction[]; +}; diff --git a/packages/types/Session.ts b/packages/types/Session.ts new file mode 100644 index 0000000..e7ae51c --- /dev/null +++ b/packages/types/Session.ts @@ -0,0 +1,18 @@ +import { GuildSlug } from './Guild'; +import { DiscordUser } from './User'; + +export type AuthTokenResponse = { + access_token: string; + token_type: 'Bearer'; + expires_in: number; + refresh_token: string; + scope: string; +}; + +export type SessionData = { + /** sessionID is a KSUID */ + sessionID: string; + tokens: AuthTokenResponse; + user: DiscordUser; + guilds: GuildSlug[]; +}; diff --git a/packages/types/User.ts b/packages/types/User.ts new file mode 100644 index 0000000..ed0527d --- /dev/null +++ b/packages/types/User.ts @@ -0,0 +1,18 @@ +export type DiscordUser = { + id: string; + username: string; + discriminator: string; + avatar: string; + bot: boolean; +}; + +export type Member = { + guildid?: string; + roles: string[]; + nick?: string; + user?: DiscordUser; +}; + +export type RoleypolyUser = { + discorduser: DiscordUser; +}; diff --git a/packages/types/demoData.ts b/packages/types/demoData.ts new file mode 100644 index 0000000..c1bc0fd --- /dev/null +++ b/packages/types/demoData.ts @@ -0,0 +1,58 @@ +import { Role } from '.'; + +export const demoData: Role[] = [ + { + id: '557812805546541066', + name: 'a cute role ♡', + color: 0xd19494, + permissions: '0', + safety: 0, + managed: false, + position: 0, + }, + { + id: '557812901717737472', + name: 'a vanity role ♡', + color: 0xd1d194, + permissions: '0', + safety: 0, + managed: false, + position: 0, + }, + { + id: '557812915386843170', + name: 'a brave role ♡', + color: 0x94d194, + permissions: '0', + safety: 0, + managed: false, + position: 0, + }, + { + id: '557824893241131029', + name: 'a proud role ♡', + color: 0x94d1d1, + permissions: '0', + safety: 0, + managed: false, + position: 0, + }, + { + id: '557824994269200384', + name: 'a wonderful role ♡', + color: 0x9494d1, + permissions: '0', + safety: 0, + managed: false, + position: 0, + }, + { + id: '557825026406088717', + name: 'a 日本語 role ♡', + color: 0xd194d1, + permissions: '0', + safety: 0, + managed: false, + position: 0, + }, +]; diff --git a/packages/types/index.ts b/packages/types/index.ts new file mode 100644 index 0000000..6d88788 --- /dev/null +++ b/packages/types/index.ts @@ -0,0 +1,5 @@ +export * from './Category'; +export * from './Guild'; +export * from './Role'; +export * from './Session'; +export * from './User'; diff --git a/packages/types/package.json b/packages/types/package.json new file mode 100644 index 0000000..f785b4d --- /dev/null +++ b/packages/types/package.json @@ -0,0 +1,4 @@ +{ + "name": "@roleypoly/types", + "version": "0.1.0" +} diff --git a/packages/web/package.json b/packages/web/package.json index 62abc1b..e8c8a29 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -10,6 +10,7 @@ "dependencies": { "@reach/router": "^1.3.4", "@roleypoly/design-system": "*", + "@roleypoly/types": "*", "@testing-library/jest-dom": "^5.11.9", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^12.8.3",