diff --git a/README.md b/README.md index 592f2a4e..c897a31e 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ We're always improving on this, and we welcome suggestions from the community! - Customizable [Hygen Templates](https://www.hygen.io/) to generate new files - Fully wired up login/signup pages with client and server-side validation. - Eslint pre-configured with [Echobind best practices](https://github.com/echobind/eslint-plugin-echobind) +- Import path alias to the root project folder (`@/`) to avoid the need for long relative import paths. ## Conventions diff --git a/packages/create-bison-app/template/README.md.ejs b/packages/create-bison-app/template/README.md.ejs index d242a864..fe5e9504 100644 --- a/packages/create-bison-app/template/README.md.ejs +++ b/packages/create-bison-app/template/README.md.ejs @@ -69,7 +69,7 @@ Because Nexus is strongly typed, all of the `t.` operations should autocomplete ```ts import { objectType, inputObjectType, queryField, mutationField, arg, list, nonNull } from 'nexus'; - import { isAdmin } from '../../services/permissions'; + import { isAdmin } from '@/services/permissions'; // Organization Type export const Organization = objectType({ @@ -272,8 +272,8 @@ export const OrganizationFactory = { Here we use inline snapshots to confirm the error message content, but you can also manually assert the content. ```ts -import { graphQLRequest, graphQLRequestAsUser, resetDB, disconnect } from '../../helpers'; -import { OrganizationFactory } from '../factories/organization'; +import { graphQLRequest, graphQLRequestAsUser, resetDB, disconnect } from '@/tests/helpers'; +import { OrganizationFactory } from '@/tests/factories/organization'; beforeEach(async () => resetDB()); afterAll(async () => disconnect()); @@ -515,7 +515,7 @@ import React from 'react'; import gql from 'graphql-tag'; import { Spinner, Text } from '@chakra-ui/react'; -import { OrganizationQuery, useOrganizationQuery } from '../types'; +import { OrganizationQuery, useOrganizationQuery } from '@/types'; export const QUERY = gql` query organization($where: OrganizationWhereUniqueInput!) { @@ -556,7 +556,7 @@ import Head from 'next/head'; import { Flex } from '@chakra-ui/react'; import { useRouter } from 'next/router'; -import { OrganizationCell } from '../../cells/Organization'; +import { OrganizationCell } from '@/cells/Organization'; function OrganizationPage() { const router = useRouter(); diff --git a/packages/create-bison-app/template/_templates/cell/new/new.ejs b/packages/create-bison-app/template/_templates/cell/new/new.ejs index 8dcd738e..3b35eb29 100644 --- a/packages/create-bison-app/template/_templates/cell/new/new.ejs +++ b/packages/create-bison-app/template/_templates/cell/new/new.ejs @@ -7,7 +7,7 @@ import React from 'react'; import gql from 'graphql-tag'; import { Spinner, Text } from '@chakra-ui/react'; -import { useMyProfileQuery, MyProfileQuery } from '../types'; +import { useMyProfileQuery, MyProfileQuery } from '@/types'; export const QUERY = gql` query myProfile { diff --git a/packages/create-bison-app/template/_templates/graphql/new/graphql.ejs b/packages/create-bison-app/template/_templates/graphql/new/graphql.ejs index 45c80268..9a611612 100644 --- a/packages/create-bison-app/template/_templates/graphql/new/graphql.ejs +++ b/packages/create-bison-app/template/_templates/graphql/new/graphql.ejs @@ -5,7 +5,7 @@ to: graphql/modules/<%= name %>.ts <% plural = h.inflection.pluralize(camelized) -%> import { objectType, inputObjectType, queryField, mutationField, arg, list, nonNull } from 'nexus'; -import { isAdmin } from '../../services/permissions'; +import { isAdmin } from '@/services/permissions'; // <%= camelized %> Type export const <%= camelized %> = objectType({ diff --git a/packages/create-bison-app/template/_templates/test/component/component.ejs b/packages/create-bison-app/template/_templates/test/component/component.ejs index d321953b..2f311b2e 100644 --- a/packages/create-bison-app/template/_templates/test/component/component.ejs +++ b/packages/create-bison-app/template/_templates/test/component/component.ejs @@ -4,8 +4,8 @@ to: tests/unit/components/<%= h.camelizedBaseName(name) %>.test.tsx <% component = h.camelizedBaseName(name) -%> import React from 'react'; -import { render } from '../../../tests/utils'; -import { <%= component %> } from '../../../components/<%= component %>'; +import { render } from '@/tests/utils'; +import { <%= component %> } from '@/components/<%= component %>'; describe('<%= component %>', () => { it('loads', async () => { diff --git a/packages/create-bison-app/template/_templates/test/factory/factory.ejs b/packages/create-bison-app/template/_templates/test/factory/factory.ejs index fa9e9de0..f76090d8 100644 --- a/packages/create-bison-app/template/_templates/test/factory/factory.ejs +++ b/packages/create-bison-app/template/_templates/test/factory/factory.ejs @@ -6,8 +6,8 @@ to: tests/factories/<%= name %>.ts import { Prisma } from '@prisma/client'; // import Chance from 'chance'; -import { buildPrismaIncludeFromAttrs } from '../helpers/buildPrismaIncludeFromAttrs'; -import { prisma } from '../../lib/prisma' +import { buildPrismaIncludeFromAttrs } from '@/tests/helpers/buildPrismaIncludeFromAttrs'; +import { prisma } from '@/lib/prisma' // const chance = new Chance(); diff --git a/packages/create-bison-app/template/_templates/test/request/request.ejs b/packages/create-bison-app/template/_templates/test/request/request.ejs index 8fe2a99f..7cde2ca3 100644 --- a/packages/create-bison-app/template/_templates/test/request/request.ejs +++ b/packages/create-bison-app/template/_templates/test/request/request.ejs @@ -5,8 +5,8 @@ to: tests/requests/<%= name %>.test.ts <% model = name.split('/')[0] %> <% section = h.baseName(name) -%> <% upper = h.inflection.camelize(model, false) -%> -import { graphQLRequest, graphQLRequestAsUser, resetDB, disconnect } from '../../helpers'; -import { <%= upper %>Factory } from '../../factories/<%= model %>'; +import { graphQLRequest, graphQLRequestAsUser, resetDB, disconnect } from '@/tests/helpers'; +import { <%= upper %>Factory } from '@/tests/factories/<%= model %>'; beforeEach(async () => resetDB()); afterAll(async () => disconnect()); @@ -53,4 +53,4 @@ describe('<%= upper %> <%= section %> mutation', () => { expect(response.body).toBe(true) }) }) -}); \ No newline at end of file +}); diff --git a/packages/create-bison-app/template/components/AllProviders.tsx b/packages/create-bison-app/template/components/AllProviders.tsx index 5e210104..81676f7a 100644 --- a/packages/create-bison-app/template/components/AllProviders.tsx +++ b/packages/create-bison-app/template/components/AllProviders.tsx @@ -3,9 +3,9 @@ import { ApolloClient, ApolloProvider, NormalizedCacheObject } from '@apollo/cli import { ChakraProvider, CSSReset } from '@chakra-ui/react'; import { Dict } from '@chakra-ui/utils'; -import { AuthProvider } from '../context/auth'; -import { createApolloClient } from '../lib/apolloClient'; -import defaultTheme from '../chakra'; +import { AuthProvider } from '@/context/auth'; +import { createApolloClient } from '@/lib/apolloClient'; +import defaultTheme from '@/chakra'; interface Props { apolloClient?: ApolloClient; diff --git a/packages/create-bison-app/template/components/LoginForm.tsx b/packages/create-bison-app/template/components/LoginForm.tsx index 18655835..7e2384a4 100644 --- a/packages/create-bison-app/template/components/LoginForm.tsx +++ b/packages/create-bison-app/template/components/LoginForm.tsx @@ -4,12 +4,12 @@ import { Flex, Text, FormControl, FormLabel, Input, Stack, Button, Circle } from import { useForm } from 'react-hook-form'; import { gql } from '@apollo/client'; -import { EMAIL_REGEX } from '../constants'; -import { useAuth } from '../context/auth'; -import { ErrorText } from '../components/ErrorText'; -import { Link } from './Link'; -import { setErrorsFromGraphQLErrors } from '../utils/setErrors'; -import { LoginMutationVariables, useLoginMutation } from '../types'; +import { EMAIL_REGEX } from '@/constants'; +import { useAuth } from '@/context/auth'; +import { ErrorText } from '@/components/ErrorText'; +import { Link } from '@/components/Link'; +import { setErrorsFromGraphQLErrors } from '@/utils/setErrors'; +import { LoginMutationVariables, useLoginMutation } from '@/types'; export const LOGIN_MUTATION = gql` mutation login($email: String!, $password: String!) { diff --git a/packages/create-bison-app/template/components/SignupForm.tsx b/packages/create-bison-app/template/components/SignupForm.tsx index 3af3c1ad..0a0ae955 100644 --- a/packages/create-bison-app/template/components/SignupForm.tsx +++ b/packages/create-bison-app/template/components/SignupForm.tsx @@ -4,13 +4,12 @@ import { gql } from '@apollo/client'; import { useForm } from 'react-hook-form'; import { useRouter } from 'next/router'; -import { useAuth } from '../context/auth'; -import { setErrorsFromGraphQLErrors } from '../utils/setErrors'; -import { SignupMutationVariables, useSignupMutation } from '../types'; -import { EMAIL_REGEX } from '../constants'; - -import { Link } from './Link'; -import { ErrorText } from './ErrorText'; +import { useAuth } from '@/context/auth'; +import { setErrorsFromGraphQLErrors } from '@/utils/setErrors'; +import { SignupMutationVariables, useSignupMutation } from '@/types'; +import { EMAIL_REGEX } from '@/constants'; +import { Link } from '@/components/Link'; +import { ErrorText } from '@/components/ErrorText'; export const SIGNUP_MUTATION = gql` mutation signup($data: SignupInput!) { diff --git a/packages/create-bison-app/template/context/auth.tsx b/packages/create-bison-app/template/context/auth.tsx index 509d67b0..ede9ab27 100644 --- a/packages/create-bison-app/template/context/auth.tsx +++ b/packages/create-bison-app/template/context/auth.tsx @@ -1,10 +1,10 @@ import React, { createContext, useContext, ReactNode, useState, useEffect } from 'react'; import { gql } from '@apollo/client'; -import { cookies } from '../lib/cookies'; -import { useMeLazyQuery, User } from '../types'; -import { FullPageSpinner } from '../components/FullPageSpinner'; -import { LOGIN_TOKEN_KEY } from '../constants'; +import { cookies } from '@/lib/cookies'; +import { useMeLazyQuery, User } from '@/types'; +import { FullPageSpinner } from '@/components/FullPageSpinner'; +import { LOGIN_TOKEN_KEY } from '@/constants'; const now = new Date(); const timeValidInMs = 365 * 24 * 60 * 60 * 1000; diff --git a/packages/create-bison-app/template/cypress/plugins/index.ts b/packages/create-bison-app/template/cypress/plugins/index.ts index 725ed6e7..29d15a84 100644 --- a/packages/create-bison-app/template/cypress/plugins/index.ts +++ b/packages/create-bison-app/template/cypress/plugins/index.ts @@ -5,10 +5,10 @@ import path from 'path'; import { User } from '@prisma/client'; -import { cookies } from '../../lib/cookies'; -import { LOGIN_TOKEN_KEY } from '../../constants'; -import { resetDB, disconnect, setupDB, graphQLRequest } from '../../tests/helpers'; -import * as Factories from '../../tests/factories'; +import { cookies } from '@/lib/cookies'; +import { LOGIN_TOKEN_KEY } from '@/constants'; +import { resetDB, disconnect, setupDB, graphQLRequest } from '@/tests/helpers'; +import * as Factories from '@/tests/factories'; declare global { // eslint-disable-next-line diff --git a/packages/create-bison-app/template/cypress/support/commands.ts b/packages/create-bison-app/template/cypress/support/commands.ts index e3d22a58..fbffb8da 100644 --- a/packages/create-bison-app/template/cypress/support/commands.ts +++ b/packages/create-bison-app/template/cypress/support/commands.ts @@ -1,8 +1,9 @@ +import '@testing-library/cypress/add-commands'; + import { Prisma, User } from '@prisma/client'; -import '@testing-library/cypress/add-commands'; -import { LOGIN_TOKEN_KEY } from '../../constants'; -import { LoginTaskObject } from '../plugins'; +import { LOGIN_TOKEN_KEY } from '@/constants'; +import { LoginTaskObject } from '@/cypress/plugins'; declare global { // eslint-disable-next-line diff --git a/packages/create-bison-app/template/graphql/context.ts b/packages/create-bison-app/template/graphql/context.ts index f5d319b6..000ffe2e 100644 --- a/packages/create-bison-app/template/graphql/context.ts +++ b/packages/create-bison-app/template/graphql/context.ts @@ -3,8 +3,8 @@ import { IncomingMessage } from 'http'; import { Context as ApolloContext } from 'apollo-server-core'; import { PrismaClient, User } from '@prisma/client'; -import { prisma } from '../lib/prisma'; -import { verifyAuthHeader } from '../services/auth'; +import { prisma } from '@/lib/prisma'; +import { verifyAuthHeader } from '@/services/auth'; /** * Populates a context object for use in resolvers. diff --git a/packages/create-bison-app/template/graphql/modules/profile.ts b/packages/create-bison-app/template/graphql/modules/profile.ts index 42d872d4..362ec860 100644 --- a/packages/create-bison-app/template/graphql/modules/profile.ts +++ b/packages/create-bison-app/template/graphql/modules/profile.ts @@ -1,6 +1,6 @@ import { inputObjectType, objectType } from 'nexus'; -import { NotFoundError } from '../errors'; +import { NotFoundError } from '@/graphql/errors'; // Profile Type export const Profile = objectType({ diff --git a/packages/create-bison-app/template/graphql/modules/user.ts.ejs b/packages/create-bison-app/template/graphql/modules/user.ts.ejs index e7014646..ca53a1b5 100644 --- a/packages/create-bison-app/template/graphql/modules/user.ts.ejs +++ b/packages/create-bison-app/template/graphql/modules/user.ts.ejs @@ -12,9 +12,9 @@ import { import { Role } from '@prisma/client'; import { UserInputError } from 'apollo-server-micro'; -import { prismaArgObject } from '../helpers'; -import { hashPassword, appJwtForUser, comparePasswords } from '../../services/auth'; -import { canAccess, isAdmin } from '../../services/permissions'; +import { hashPassword, appJwtForUser, comparePasswords } from '@/services/auth'; +import { canAccess, isAdmin } from '@/services/permissions'; +import { prismaArgObject } from '@/graphql/helpers'; // User Type export const User = objectType({ @@ -257,8 +257,9 @@ export const UserCreateInput = inputObjectType({ t.field('roles', { type: list('Role'), }); + t.field('profile', { - type: 'ProfileRelationalCreateInput' - }) + type: 'ProfileRelationalCreateInput', + }); }, }); diff --git a/packages/create-bison-app/template/graphql/schema.ts b/packages/create-bison-app/template/graphql/schema.ts index 022b36c1..0804fe3c 100644 --- a/packages/create-bison-app/template/graphql/schema.ts +++ b/packages/create-bison-app/template/graphql/schema.ts @@ -2,10 +2,10 @@ import path from 'path'; import { declarativeWrappingPlugin, fieldAuthorizePlugin, makeSchema } from 'nexus'; -import prettierConfig from '../prettier.config'; - import * as types from './modules'; +import prettierConfig from '@/prettier.config'; + const currentDirectory = process.cwd(); export const schema = makeSchema({ diff --git a/packages/create-bison-app/template/jest.config.js b/packages/create-bison-app/template/jest.config.js index 91c9606e..373b9a89 100644 --- a/packages/create-bison-app/template/jest.config.js +++ b/packages/create-bison-app/template/jest.config.js @@ -1,3 +1,13 @@ +const { pathsToModuleNameMapper } = require('ts-jest/utils'); + +const { compilerOptions } = require('./tsconfig.json'); + +// this creates a module name map based on all the path aliases from tsconfig +// (so you only need to add path aliases in tsconfig, not here). +const moduleNameMapper = compilerOptions.paths + ? pathsToModuleNameMapper(compilerOptions.paths, { prefix: '/../' }) + : {}; + const testPathIgnorePatterns = [ '/node_modules', 'cypress', @@ -21,4 +31,5 @@ module.exports = { }, }, }, + moduleNameMapper, }; diff --git a/packages/create-bison-app/template/layouts/LoggedIn.tsx b/packages/create-bison-app/template/layouts/LoggedIn.tsx index cf67ec95..6c49315a 100644 --- a/packages/create-bison-app/template/layouts/LoggedIn.tsx +++ b/packages/create-bison-app/template/layouts/LoggedIn.tsx @@ -2,10 +2,10 @@ import React from 'react'; import { useRouter } from 'next/router'; import { Box, Flex, Button } from '@chakra-ui/react'; -import { Logo } from '../components/Logo'; -import { Nav } from '../components/Nav'; -import { useAuth } from '../context/auth'; -import { Footer } from '../components/Footer'; +import { Logo } from '@/components/Logo'; +import { Nav } from '@/components/Nav'; +import { useAuth } from '@/context/auth'; +import { Footer } from '@/components/Footer'; interface Props { children: React.ReactNode; diff --git a/packages/create-bison-app/template/layouts/LoggedOut.tsx b/packages/create-bison-app/template/layouts/LoggedOut.tsx index b57901c8..5a7d44ea 100644 --- a/packages/create-bison-app/template/layouts/LoggedOut.tsx +++ b/packages/create-bison-app/template/layouts/LoggedOut.tsx @@ -1,9 +1,9 @@ import React from 'react'; import { Box, Flex } from '@chakra-ui/react'; -import { ButtonLink } from '../components/Link'; -import { Logo } from '../components/Logo'; -import { Footer } from '../components/Footer'; +import { ButtonLink } from '@/components/Link'; +import { Logo } from '@/components/Logo'; +import { Footer } from '@/components/Footer'; interface Props { children: React.ReactNode; diff --git a/packages/create-bison-app/template/lib/apolloClient.ts b/packages/create-bison-app/template/lib/apolloClient.ts index 42987e99..ee029cc9 100644 --- a/packages/create-bison-app/template/lib/apolloClient.ts +++ b/packages/create-bison-app/template/lib/apolloClient.ts @@ -3,10 +3,10 @@ import { ApolloClient, InMemoryCache, createHttpLink } from '@apollo/client'; import { setContext } from '@apollo/client/link/context'; import fetch from 'cross-fetch'; -import { LOGIN_TOKEN_KEY } from '../constants'; - import { cookies } from './cookies'; +import { LOGIN_TOKEN_KEY } from '@/constants'; + export function createApolloClient(ctx?: Record) { // Apollo needs an absolute URL when in SSR, so determine host let host: string; diff --git a/packages/create-bison-app/template/package.json.ejs b/packages/create-bison-app/template/package.json.ejs index f8340e9d..66ec4e32 100644 --- a/packages/create-bison-app/template/package.json.ejs +++ b/packages/create-bison-app/template/package.json.ejs @@ -41,7 +41,7 @@ "test:e2e": "cross-env DOTENV_CONFIG_PATH=.env.test ts-node -r dotenv/config $(yarn bin)/start-server-and-test 'yarn test:server' http://localhost:3001 'yarn cypress:run'", "test:e2e:local": "cross-env CYPRESS_LOCAL=true CYPRESS_BASE_URL=http://localhost:3000 cypress open", "test:server": "next start --port 3001", - "ts-node": "ts-node-dev --project tsconfig.cjs.json", + "ts-node": "ts-node-dev --project tsconfig.cjs.json -r tsconfig-paths/register", "withEnv:test": "cross-env DOTENV_CONFIG_PATH=.env.test yarn ts-node -r dotenv/config ./scripts/yarnWithEnv", "watch:all": "concurrently -n \"NEXUS,GQLCODEGEN,TYPESCRIPT\" -c \"black.bgGreen.dim,black.bgBlue.dim,white.bgMagenta.dim\" \"yarn watch:nexus\" \"yarn watch:codegen\" \"yarn watch:ts\"", "watch:codegen": "yarn codegen --watch", @@ -117,6 +117,7 @@ "supertest": "^4.0.2", "ts-jest": "^27.0.5", "ts-node-dev": "^1.1.8", + "tsconfig-paths": "^3.12.0", "typescript": "^4.4.3" }, "bison": { diff --git a/packages/create-bison-app/template/pages/_app.tsx b/packages/create-bison-app/template/pages/_app.tsx index 58d2d2d3..f6858912 100644 --- a/packages/create-bison-app/template/pages/_app.tsx +++ b/packages/create-bison-app/template/pages/_app.tsx @@ -2,19 +2,19 @@ import React from 'react'; import type { AppProps } from 'next/app'; import dynamic from 'next/dynamic'; -import { AllProviders } from '../components/AllProviders'; -import { useAuth } from '../context/auth'; +import { AllProviders } from '@/components/AllProviders'; +import { useAuth } from '@/context/auth'; /** * Dynamically load layouts. This codesplits and prevents code from the logged in layout from being * included in the bundle if we're rendering the logged out layout. */ const LoggedInLayout = dynamic<{ children: React.ReactNode }>(() => - import('../layouts/LoggedIn').then((mod) => mod.LoggedInLayout) + import('@/layouts/LoggedIn').then((mod) => mod.LoggedInLayout) ); const LoggedOutLayout = dynamic<{ children: React.ReactNode }>(() => - import('../layouts/LoggedOut').then((mod) => mod.LoggedOutLayout) + import('@/layouts/LoggedOut').then((mod) => mod.LoggedOutLayout) ); /** diff --git a/packages/create-bison-app/template/pages/api/graphql.ts b/packages/create-bison-app/template/pages/api/graphql.ts index 6c514693..e7d6ab92 100644 --- a/packages/create-bison-app/template/pages/api/graphql.ts +++ b/packages/create-bison-app/template/pages/api/graphql.ts @@ -6,8 +6,8 @@ import { import { ApolloServer } from 'apollo-server-micro'; import type { NextApiRequest, NextApiResponse } from 'next'; -import { createContext } from '../../graphql/context'; -import { schema } from '../../graphql/schema'; +import { createContext } from '@/graphql/context'; +import { schema } from '@/graphql/schema'; export const GRAPHQL_PATH = '/api/graphql'; diff --git a/packages/create-bison-app/template/pages/login.tsx b/packages/create-bison-app/template/pages/login.tsx index bc9e80b7..10507ce4 100644 --- a/packages/create-bison-app/template/pages/login.tsx +++ b/packages/create-bison-app/template/pages/login.tsx @@ -1,8 +1,8 @@ import React from 'react'; import Head from 'next/head'; -import { CenteredBoxForm } from '../components/CenteredBoxForm'; -import { LoginForm } from '../components/LoginForm'; +import { CenteredBoxForm } from '@/components/CenteredBoxForm'; +import { LoginForm } from '@/components/LoginForm'; function LoginPage() { return ( diff --git a/packages/create-bison-app/template/pages/signup.tsx b/packages/create-bison-app/template/pages/signup.tsx index 4aa12f17..ca8f4220 100644 --- a/packages/create-bison-app/template/pages/signup.tsx +++ b/packages/create-bison-app/template/pages/signup.tsx @@ -1,8 +1,8 @@ import React from 'react'; import Head from 'next/head'; -import { CenteredBoxForm } from '../components/CenteredBoxForm'; -import { SignupForm } from '../components/SignupForm'; +import { CenteredBoxForm } from '@/components/CenteredBoxForm'; +import { SignupForm } from '@/components/SignupForm'; function SignupPage() { return ( diff --git a/packages/create-bison-app/template/prisma/scripts/exampleUserScript.ts b/packages/create-bison-app/template/prisma/scripts/exampleUserScript.ts index 0726d99b..c85f60d3 100644 --- a/packages/create-bison-app/template/prisma/scripts/exampleUserScript.ts +++ b/packages/create-bison-app/template/prisma/scripts/exampleUserScript.ts @@ -1,10 +1,10 @@ -import { hashPassword } from '../../services/auth'; -import { Role } from '../../types'; - -import { seedUsers } from '../seeds/users'; -import { prisma } from '../../lib/prisma'; import { Prisma } from '@prisma/client'; +import { hashPassword } from '@/services/auth'; +import { Role } from '@/types'; +import { seedUsers } from '@/prisma/seeds/users'; +import { prisma } from '@/lib/prisma'; + // HR: Hey, we've had a few more employees join -- can you create an account for them?! const INITIAL_PASSWORD = 'test1234'; diff --git a/packages/create-bison-app/template/prisma/seeds/users/data.ts b/packages/create-bison-app/template/prisma/seeds/users/data.ts index f426cb01..8c481ce5 100644 --- a/packages/create-bison-app/template/prisma/seeds/users/data.ts +++ b/packages/create-bison-app/template/prisma/seeds/users/data.ts @@ -1,6 +1,6 @@ import { Prisma, Role } from '@prisma/client'; -import { hashPassword } from '../../../services/auth'; +import { hashPassword } from '@/services/auth'; // ********************************************* // ** DEVELOPMENT DATA SET // ********************************************* diff --git a/packages/create-bison-app/template/prisma/seeds/users/prismaRunner.ts b/packages/create-bison-app/template/prisma/seeds/users/prismaRunner.ts index 39309592..87dfdf6a 100644 --- a/packages/create-bison-app/template/prisma/seeds/users/prismaRunner.ts +++ b/packages/create-bison-app/template/prisma/seeds/users/prismaRunner.ts @@ -1,7 +1,7 @@ import { Prisma } from '@prisma/client'; -import { prisma } from '../../../lib/prisma'; -import { User } from '../../../types'; +import { prisma } from '@/lib/prisma'; +import { User } from '@/types'; type SeedUserResult = Pick; diff --git a/packages/create-bison-app/template/services/permissions.ts b/packages/create-bison-app/template/services/permissions.ts index be031a65..45ceba08 100644 --- a/packages/create-bison-app/template/services/permissions.ts +++ b/packages/create-bison-app/template/services/permissions.ts @@ -1,6 +1,6 @@ import { Role, Profile, User } from '@prisma/client'; -import { Context } from '../graphql/context'; +import { Context } from '@/graphql/context'; /** * Returns true if the user has a role of admin diff --git a/packages/create-bison-app/template/tests/factories/user.ts b/packages/create-bison-app/template/tests/factories/user.ts index 9f2a71c7..0c627e7f 100644 --- a/packages/create-bison-app/template/tests/factories/user.ts +++ b/packages/create-bison-app/template/tests/factories/user.ts @@ -1,9 +1,9 @@ import Chance from 'chance'; import { Role, Prisma } from '@prisma/client'; -import { buildPrismaIncludeFromAttrs } from '../helpers/buildPrismaIncludeFromAttrs'; -import { prisma } from '../../lib/prisma'; -import { hashPassword } from '../../services/auth'; +import { buildPrismaIncludeFromAttrs } from '@/tests/helpers/buildPrismaIncludeFromAttrs'; +import { prisma } from '@/lib/prisma'; +import { hashPassword } from '@/services/auth'; const chance = new Chance(); diff --git a/packages/create-bison-app/template/tests/helpers/graphQLRequest.ts b/packages/create-bison-app/template/tests/helpers/graphQLRequest.ts index fc81a108..96ab728b 100644 --- a/packages/create-bison-app/template/tests/helpers/graphQLRequest.ts +++ b/packages/create-bison-app/template/tests/helpers/graphQLRequest.ts @@ -1,9 +1,9 @@ import request from 'supertest'; import { User } from '@prisma/client'; -import server, { GRAPHQL_PATH } from '../../pages/api/graphql'; -import { appJwtForUser } from '../../services/auth'; -import { disconnect } from '../../lib/prisma'; +import server, { GRAPHQL_PATH } from '@/pages/api/graphql'; +import { appJwtForUser } from '@/services/auth'; +import { disconnect } from '@/lib/prisma'; /** A convenience method to call graphQL queries */ export const graphQLRequest = async (options: GraphQLRequestOptions): Promise => { diff --git a/packages/create-bison-app/template/tests/helpers/index.ts b/packages/create-bison-app/template/tests/helpers/index.ts index c2eb9ece..896dbf44 100644 --- a/packages/create-bison-app/template/tests/helpers/index.ts +++ b/packages/create-bison-app/template/tests/helpers/index.ts @@ -1,4 +1,4 @@ -export { prisma, connect, disconnect } from '../../lib/prisma'; +export { prisma, connect, disconnect } from '@/lib/prisma'; export * from './graphQLRequest'; export * from './db'; export * from './buildPrismaIncludeFromAttrs'; diff --git a/packages/create-bison-app/template/tests/requests/user/createUser.test.ts b/packages/create-bison-app/template/tests/requests/user/createUser.test.ts index 7cabd68b..38c9df7a 100644 --- a/packages/create-bison-app/template/tests/requests/user/createUser.test.ts +++ b/packages/create-bison-app/template/tests/requests/user/createUser.test.ts @@ -1,8 +1,8 @@ import { GraphQLError } from 'graphql'; -import { resetDB, disconnect, graphQLRequestAsUser } from '../../helpers'; -import { UserFactory } from '../../factories/user'; -import { Role, UserCreateInput } from '../../../types'; +import { resetDB, disconnect, graphQLRequestAsUser } from '@/tests/helpers'; +import { UserFactory } from '@/tests/factories/user'; +import { Role, UserCreateInput } from '@/types'; beforeEach(async () => resetDB()); afterAll(async () => disconnect()); diff --git a/packages/create-bison-app/template/tests/requests/user/login.test.ts b/packages/create-bison-app/template/tests/requests/user/login.test.ts index 4e4b3790..320ad878 100644 --- a/packages/create-bison-app/template/tests/requests/user/login.test.ts +++ b/packages/create-bison-app/template/tests/requests/user/login.test.ts @@ -1,8 +1,8 @@ import { GraphQLError } from 'graphql'; -import { graphQLRequest, resetDB, disconnect } from '../../helpers'; -import { UserFactory } from '../../factories/user'; -import { LoginMutationVariables } from '../../../types'; +import { graphQLRequest, resetDB, disconnect } from '@/tests/helpers'; +import { UserFactory } from '@/tests/factories/user'; +import { LoginMutationVariables } from '@/types'; beforeEach(async () => resetDB()); afterAll(async () => disconnect()); diff --git a/packages/create-bison-app/template/tests/requests/user/me.test.ts b/packages/create-bison-app/template/tests/requests/user/me.test.ts index 13814894..f717a51f 100644 --- a/packages/create-bison-app/template/tests/requests/user/me.test.ts +++ b/packages/create-bison-app/template/tests/requests/user/me.test.ts @@ -1,5 +1,5 @@ -import { graphQLRequest, graphQLRequestAsUser, resetDB, disconnect } from '../../helpers'; -import { UserFactory } from '../../factories/user'; +import { graphQLRequest, graphQLRequestAsUser, resetDB, disconnect } from '@/tests/helpers'; +import { UserFactory } from '@/tests/factories/user'; beforeEach(async () => resetDB()); afterAll(async () => disconnect()); diff --git a/packages/create-bison-app/template/tests/requests/user/signup.test.ts b/packages/create-bison-app/template/tests/requests/user/signup.test.ts index e8e747a1..dad4f17f 100644 --- a/packages/create-bison-app/template/tests/requests/user/signup.test.ts +++ b/packages/create-bison-app/template/tests/requests/user/signup.test.ts @@ -2,8 +2,8 @@ import { Role } from '@prisma/client'; import Chance from 'chance'; import { GraphQLError } from 'graphql'; -import { graphQLRequest, resetDB, disconnect } from '../../helpers'; -import { UserFactory } from '../../factories/user'; +import { graphQLRequest, resetDB, disconnect } from '@/tests/helpers'; +import { UserFactory } from '@/tests/factories/user'; const chance = new Chance(); diff --git a/packages/create-bison-app/template/tests/requests/user/users.test.ts b/packages/create-bison-app/template/tests/requests/user/users.test.ts index 3fd394eb..f00cd21a 100644 --- a/packages/create-bison-app/template/tests/requests/user/users.test.ts +++ b/packages/create-bison-app/template/tests/requests/user/users.test.ts @@ -1,9 +1,9 @@ import { Role } from '@prisma/client'; import { GraphQLError } from 'graphql'; -import { graphQLRequest, graphQLRequestAsUser, resetDB, disconnect } from '../../helpers'; -import { UserFactory } from '../../factories/user'; -import { User, UserWhereUniqueInput } from '../../../types'; +import { graphQLRequest, graphQLRequestAsUser, resetDB, disconnect } from '@/tests/helpers'; +import { UserFactory } from '@/tests/factories/user'; +import { User, UserWhereUniqueInput } from '@/types'; beforeEach(async () => resetDB()); afterAll(async () => disconnect()); diff --git a/packages/create-bison-app/template/tests/unit/components/CenteredBoxForm.test.tsx b/packages/create-bison-app/template/tests/unit/components/CenteredBoxForm.test.tsx index 28da2dc6..959533f3 100644 --- a/packages/create-bison-app/template/tests/unit/components/CenteredBoxForm.test.tsx +++ b/packages/create-bison-app/template/tests/unit/components/CenteredBoxForm.test.tsx @@ -4,8 +4,8 @@ import React from 'react'; -import { render } from '../../../tests/utils'; -import { CenteredBoxForm } from '../../../components/CenteredBoxForm'; +import { render } from '@/tests/utils'; +import { CenteredBoxForm } from '@/components/CenteredBoxForm'; describe('CenteredBoxForm', () => { it('loads', async () => { diff --git a/packages/create-bison-app/template/tests/unit/components/ErrorText.test.tsx b/packages/create-bison-app/template/tests/unit/components/ErrorText.test.tsx index 3bd00c99..9ba3c1a6 100644 --- a/packages/create-bison-app/template/tests/unit/components/ErrorText.test.tsx +++ b/packages/create-bison-app/template/tests/unit/components/ErrorText.test.tsx @@ -4,8 +4,8 @@ import React from 'react'; -import { render } from '../../../tests/utils'; -import { ErrorText } from '../../../components/ErrorText'; +import { render } from '@/tests/utils'; +import { ErrorText } from '@/components/ErrorText'; describe('ErrorText', () => { it('loads', async () => { diff --git a/packages/create-bison-app/template/tests/unit/components/LoginForm.test.tsx b/packages/create-bison-app/template/tests/unit/components/LoginForm.test.tsx index 64d06cdd..33cdacd5 100644 --- a/packages/create-bison-app/template/tests/unit/components/LoginForm.test.tsx +++ b/packages/create-bison-app/template/tests/unit/components/LoginForm.test.tsx @@ -4,8 +4,8 @@ import React from 'react'; -import { render, waitFor, userEvent } from '../../utils'; -import { LoginForm } from '../../../components/LoginForm'; +import { render, waitFor, userEvent } from '@/tests/utils'; +import { LoginForm } from '@/components/LoginForm'; describe('LoginForm', () => { describe('with no inputs', () => { diff --git a/packages/create-bison-app/template/tests/unit/components/Logo.test.tsx b/packages/create-bison-app/template/tests/unit/components/Logo.test.tsx index c84b9f81..6bfa45c0 100644 --- a/packages/create-bison-app/template/tests/unit/components/Logo.test.tsx +++ b/packages/create-bison-app/template/tests/unit/components/Logo.test.tsx @@ -4,8 +4,8 @@ import React from 'react'; -import { render } from '../../../tests/utils'; -import { Logo } from '../../../components/Logo'; +import { render } from '@/tests/utils'; +import { Logo } from '@/components/Logo'; describe('Logo', () => { it('loads', async () => { diff --git a/packages/create-bison-app/template/tests/unit/components/Nav.test.tsx b/packages/create-bison-app/template/tests/unit/components/Nav.test.tsx index 5d952974..21b9a25a 100644 --- a/packages/create-bison-app/template/tests/unit/components/Nav.test.tsx +++ b/packages/create-bison-app/template/tests/unit/components/Nav.test.tsx @@ -4,9 +4,9 @@ import React from 'react'; -import { render } from '../../../tests/utils'; -import '../../matchMedia.mock'; -import { Nav } from '../../../components/Nav'; +import { render } from '@/tests/utils'; +import '@/tests/matchMedia.mock'; +import { Nav } from '@/components/Nav'; describe('Nav', () => { it('loads', async () => { diff --git a/packages/create-bison-app/template/tests/unit/components/SignupForm.test.tsx b/packages/create-bison-app/template/tests/unit/components/SignupForm.test.tsx index 82af95fa..a8572c63 100644 --- a/packages/create-bison-app/template/tests/unit/components/SignupForm.test.tsx +++ b/packages/create-bison-app/template/tests/unit/components/SignupForm.test.tsx @@ -4,8 +4,8 @@ import React from 'react'; -import { render, waitFor, userEvent } from '../../utils'; -import { SignupForm } from '../../../components/SignupForm'; +import { render, waitFor, userEvent } from '@/tests/utils'; +import { SignupForm } from '@/components/SignupForm'; describe('SignupForm', () => { it('loads', async () => { diff --git a/packages/create-bison-app/template/tests/utils.tsx b/packages/create-bison-app/template/tests/utils.tsx index 81f42094..87d17e15 100644 --- a/packages/create-bison-app/template/tests/utils.tsx +++ b/packages/create-bison-app/template/tests/utils.tsx @@ -6,9 +6,9 @@ import { RouterContext } from 'next/dist/shared/lib/router-context'; import { NextRouter } from 'next/router'; import '@testing-library/jest-dom/extend-expect'; -import { AllProviders } from '../components/AllProviders'; -// import { ME_QUERY } from '../context/auth'; -// import { User } from '../types'; +import { AllProviders } from '@/components/AllProviders'; +// import { ME_QUERY } from '@/context/auth'; +// import { User } from '@/types'; export * from '@testing-library/react'; export { default as userEvent } from '@testing-library/user-event'; diff --git a/packages/create-bison-app/template/tsconfig.json b/packages/create-bison-app/template/tsconfig.json index f316780b..9b351202 100644 --- a/packages/create-bison-app/template/tsconfig.json +++ b/packages/create-bison-app/template/tsconfig.json @@ -17,7 +17,11 @@ "sourceMap": true, "plugins": [{ "name": "nexus/typescript-language-service" }], "typeRoots": ["node_modules/@types", "types"], - "rootDir": "." + "rootDir": ".", + "baseUrl": ".", + "paths": { + "@/*": ["./*"] + } }, "include": [".", "next-env.d.ts", "types.ts", "types.d.ts", "**/*.ts", "**/*.tsx"], "exclude": ["node_modules", "cypress"]