Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 12 additions & 10 deletions .baker/generators/app/templates/package.json.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,23 @@
"scripts": {
},
"dependencies": {
"immutable": "^3.8.1",
"parse": "1.9.2",
"parse-graphql-client": "^0.2.0",
"react": "~15.4.1",
"react-native": "^0.38.0",
"apollo-client": "^1.0.3",
"graphql-tag": "^2.0.0",
"lodash": "^4.17.2",
"parse": "git+https://github.com/bakery/Parse-SDK-JS.git#release-1.10",
"react": "16.0.0-alpha.6",
"react-addons-update": "^15.4.1",
"react-apollo": "^1.0.1",
"react-native": "^0.43.3",
"react-native-navigation-redux-helpers": "^0.5.0",
"react-redux": "^4.4.5",
"react-redux": "^5.0.4",
"redux": "^3.5.2",
"redux-immutable": "^3.0.6",
"redux-saga": "^0.13.0",
"reselect": "^2.4.0"
"redux-saga": "^0.14.6",
"reselect": "^3.0.0"
},
"devDependencies": {
"babel-register": "^6.9.0",
"react-dom": "^15.2.1",
"remote-redux-devtools": "^0.5.3"
}
}
}
23 changes: 13 additions & 10 deletions .baker/generators/app/templates/server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,21 @@
"node": ">=4.5"
},
"dependencies": {
"body-parser": "^1.15.2",
"express": "^4.13.4",
"graphql": "^0.7.0",
"immutable": "^3.8.1",
"gql-merge": "^0.0.6",
"graphql": "^0.9.3",
"graphql-server-express": "^0.7.1",
"graphql-tools": "^0.11.0",
"lodash": "^4.17.2",
"parse": "1.9.2",
"parse-dashboard": "^1.0.13",
"parse-graphql-client": "^0.2.0",
"parse-graphql-server": "^0.3.0",
"parse-server": "^2.2.25-beta.1"
"parse-dashboard": "^1.0.22",
"parse-graphql-server": "git://github.com/bakery/parse-graphql-server.git#feature/apollo",
"parse-server": "^2.3.1"
},
"devDependencies": {
"babel-jest": "^17.0.0",
"babel-polyfill": "^6.16.0",
"jest": "^17.0.0"
"babel-jest": "^19.0.0",
"babel-polyfill": "^6.20.0",
"jest": "^19.0.2"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import Parse from 'parse/node';

const Example = Parse.Object.extend('Example');

export default Example;
32 changes: 32 additions & 0 deletions .baker/generators/app/templates/server/src/api/Example/resolver.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import Parse from 'parse/node';
import Example from './model';

export default {
Example: {
text: (root) => root.get('text'),
},
Query: {
examples(root, { }, { Query, user }) {
const query = new Query(Example);
return query.find();
},
},
Mutation: {
addExanple(_, { text }, { Query, user }) {
const newExample = new Query(Example).create({ isComplete: false, text, user });
if (user) {
newExample.setACL(new Parse.ACL(user));
}
return newExample.save().then(ex => ex);
},

deleteExample(_, { id }, { Query }) {
return new Query(Example).get(id).then(example => {
if (example) {
example.destroy();
}
return example;
});
},
},
};
25 changes: 25 additions & 0 deletions .baker/generators/app/templates/server/src/api/Example/schema.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
export default `
type Example {
id: ID!
text: String!
}
# the schema allows the following query:
type Query {
examples: [Example]
}
# this schema allows the following mutation:
type Mutation {
addExample (
text: String!
): Example
deleteExample (
id: ID!
): Example
}
# we need to tell the server which types represent the root query
# and root mutation types. We call them RootQuery and RootMutation by convention.
schema {
query: Query
mutation: Mutation
}
`;
18 changes: 18 additions & 0 deletions .baker/generators/app/templates/server/src/api/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import bodyParser from 'body-parser';
import parseGraphQLHTTP from 'parse-graphql-server';
import { graphiqlExpress } from 'graphql-server-express';
import schema from './schema';

export default {
setup(app) {
const IS_DEVELOPMENT = process.env.NODE_ENV === 'development';

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use('/graphql', parseGraphQLHTTP({ schema }));

if (IS_DEVELOPMENT) {
app.use('/graphiql', graphiqlExpress({ endpointURL: '/graphql' }));
}
},
};
28 changes: 28 additions & 0 deletions .baker/generators/app/templates/server/src/api/schema.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { mergeStrings } from 'gql-merge';
import { makeExecutableSchema } from 'graphql-tools';
import { merge } from 'lodash';

const schemas = [
];

const resolvers = [
];

const rootDeclarations = `
schema {
query: Query
mutation: Mutation
}
`;

const rootSchema = mergeStrings([
...schemas,
rootDeclarations
]);

const schema = makeExecutableSchema({
typeDefs: rootSchema,
resolvers: merge.apply(this, resolvers)
});

export default schema;
8 changes: 0 additions & 8 deletions .baker/generators/app/templates/server/src/graphql/index.js

This file was deleted.

34 changes: 0 additions & 34 deletions .baker/generators/app/templates/server/src/graphql/schema.js

This file was deleted.

5 changes: 2 additions & 3 deletions .baker/generators/app/templates/server/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import express from 'express';
import packageJSON from '../package';
import graphql from './graphql';
import api from './api';
import parseServer from './parse-server';

function loadSettings() {
Expand All @@ -19,11 +19,10 @@ function loadSettings() {

const settings = loadSettings();
const app = express();
const IS_DEVELOPMENT = process.env.NODE_ENV === 'development';
const serverPort = process.env.PORT || settings.serverPort;

parseServer.setup(app, packageJSON.name, settings);
graphql.setup(app, IS_DEVELOPMENT);
api.setup(app);

app.listen(serverPort, () => {
// eslint-disable-next-line no-console
Expand Down
6 changes: 4 additions & 2 deletions .baker/generators/app/templates/src/setup.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,18 @@ import React, { Component } from 'react';
import { Provider } from 'react-redux';
import App from './components/App';
import configureStore from './state';
import { ApolloProvider } from 'react-apollo';
import apollo from './state/apollo';

const store = configureStore();

function setup() {
class Root extends Component {
render() {
return (
<Provider store={store}>
<ApolloProvider store={store} client={apollo}>
<App />
</Provider>
</ApolloProvider>
);
}
}
Expand Down
42 changes: 42 additions & 0 deletions .baker/generators/app/templates/src/state/apollo.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/* eslint no-param-reassign: off, no-underscore-dangle: off */

import ApolloClient, { createNetworkInterface } from 'apollo-client';
import { getCurrentUser } from './auth';
import Settings from '../settings';

const settings = Settings.load();
const networkInterface = createNetworkInterface({ uri: settings.graphqlURL });

networkInterface.use([{
applyMiddleware(req, next) {
if (!req.options.headers) {
req.options.headers = {}; // Create the header object if needed.
}

getCurrentUser().then(user => {
const sessionToken = user && user.getSessionToken();

if (sessionToken) {
req.options.headers.authorization = sessionToken;
}

next();
}, error => {
next();
});
},
}]);

const client = new ApolloClient({
networkInterface,
dataIdFromObject: (result) => {
if (result.id && result.__typename) {
return result.__typename + result.id;
}

// Make sure to return null if this object doesn't have an ID
return null;
},
});

export default client;
9 changes: 9 additions & 0 deletions .baker/generators/app/templates/src/state/auth.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import Parse from 'parse/react-native';

export function getCurrentUser() {
return Parse.User.currentAsync().then(currentUser => {
if (currentUser) {
return currentUser;
}
}, error => error);
}
5 changes: 3 additions & 2 deletions .baker/generators/app/templates/src/state/index.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { createStore, compose, applyMiddleware } from 'redux';
import { fromJS } from 'immutable';
import createSagaMiddleware from 'redux-saga';
import devTools from 'remote-redux-devtools';
import Parse from 'parse/react-native';
import createReducer from './reducers';
import sagas from '../sagas';
import Settings from '../settings';
import apollo from './apollo';

const settings = Settings.load();

Expand All @@ -14,9 +14,10 @@ Parse.serverURL = settings.parseServerURL;

const sagaMiddleware = createSagaMiddleware();

function configureStore(initialState = fromJS({})) {
function configureStore(initialState = {}) {
const enhancers = [
applyMiddleware(sagaMiddleware),
applyMiddleware(apollo.middleware())
];

if (__DEV__) {
Expand Down
4 changes: 3 additions & 1 deletion .baker/generators/app/templates/src/state/reducers.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
/* eslint-disable object-shorthand, comma-dangle, eol-last, import/imports-first */

import { combineReducers } from 'redux-immutable';
import { combineReducers } from 'redux';
import apollo from './apollo';

// XX: Do not rename this variable if you want reducer generator
// to keep working properly (and you do want that, right?)
const applicationReducers = {
removeThisReducerOnceYouAddALegitOne: () => ({}),
apollo: apollo.reducer(),
};

export default function createReducer() {
Expand Down
Loading