-
create a directory
mkdir MyApp && cd MyApp
-
initialize a package.json
yarn init -y
ornpm init -y
-
install typescript
yarn add typescript -D
ornpm install typescript -D
-
generate tsconfig
tsc --init
- edit tsconfig to customize your src and build directories:
"outDir": "./dist" "rootDir": "./app"
-
install eslint (optional)
yarn add eslint -D
ornpm install eslint -D
eslint --init
- answer the questions according to preference but make sure to answer
y
when asked if using typescript and selectnode
instead ofbrowser
. here's how I answered:
? How would you like to use ESLint? To check syntax, find problems, and enforce code style ? What type of modules does your project use? JavaScript modules (import/export) ? Which framework does your project use? None of these ? Does your project use TypeScript? Yes ? Where does your code run? Node ? How would you like to define a style for your project? Use a popular style guide ? Which style guide do you want to follow? Standard: https://github.com/standard/standard ? What format do you want your config file to be in? JavaScript
- answer the questions according to preference but make sure to answer
- vs code extension and auto correct
- lint task script
-
install apollo-server and graphql
yarn add graphql apollo-server
ornpm install graphql apollo-server
-
Set up appolo-server: the following code is somewhat based on the getting started example on apollo's site here
- create a folder called
app
and a file in it calledindex.ts
and add the following:
import { ApolloServer } from 'apollo-server' import resolvers from './resolvers' import typeDefs from './types' const server = new ApolloServer({ resolvers, typeDefs }) server.listen().then(({ url }) => console.log(`Server ready at ${url}. `))
- create a file called
types.ts
and add:
import { gql } from 'apollo-server' export default gql` type Post { title: String! text: String! } type Query { posts: [Post!] """ Test Message. """ testMessage: String! } `
- finally add a file called
resolvers.ts
and add:
export default { Query: { posts: () => [{ title: 'test post', text: 'testing...' }], testMessage: (): string => 'Hello World!' } }
- create a folder called
-
set up the dev server:
-
install ts-node-dev
-
yarn add ts-node-dev -D
ornpm install ts-node-dev -D
-
in your package.json add a script sections:
"scripts": { "dev": "ts-node-dev --poll ./app" },
note: you may not need the
--poll
flag but it was required for my OS when using node v14
-
-
You should now have a server running on localhost:4000. Go to that in your browser and try out a query:
query {
posts {
title
text
}
}
You'll notice you can autocomplete (press ctrl-space to give you initial auto-complete options).
##Notes
###TODO
- write docs prisma and db and migrations (for example):
- db command:
psql -h localhost -d harbor -U benji -f ./migrations/2020-06-10-2242-add_roles_to_user.sql
- introspect:
npx prisma introspect
- regen client:
npx prisma generate
- db command: