Skip to content

Instantly share code, notes, and snippets.

View aofleejay's full-sized avatar
🐢
Keep going

aofleejay

🐢
Keep going
View GitHub Profile
@aofleejay
aofleejay / schema.js
Created September 28, 2017 06:29
User type with deprecated field
type User {
id: String!
name: String @deprecated(reason: "Use firstname instead.")
firstname: String
age: Int
}
@aofleejay
aofleejay / rootSchema.js
Last active October 11, 2017 05:48
Create GraphQL schema at root schema
import { makeExecutableSchema } from 'graphql-tools'
import merge from 'lodash.merge'
import {
queries as fooQueries,
resolvers as fooResolvers,
typeDefinitions as fooTypeDefinitions,
} from './foo/schema'
import {
@aofleejay
aofleejay / rootSchema.js
Last active October 11, 2017 04:06
Merge schema with Schema Stitching
import { mergeSchemas } from 'graphql-tools'
import fooSchema from './foo' // export default makeExecutableSchema({ typeDefs: fooTypeDefinitions })
import barSchema from './bar' // export default makeExecutableSchema({ typeDefs: barTypeDefinitions })
export default mergeSchemas({
schemas: [fooSchema, barSchema],
})
@aofleejay
aofleejay / fooschema.js
Created October 11, 2017 04:25
Foo schema
export const typeDefinitions = `
type Foo {
bar: String
baz: String
}
`
@aofleejay
aofleejay / app.js
Created October 11, 2017 09:22
Register a Service Worker
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register("/service-worker.js").then(register => {
console.log('Register succeeded in scope : ', register.scope)
})
})
}
@aofleejay
aofleejay / service-worker.js
Created October 11, 2017 09:40
Cache assets in install event
const VERSION = '1'
const CACHE_KEY = `cache-v${VERSION}`
const assetsToCache = [
'/',
'/assets/css/app.css',
'/assets/js/app.js',
'/assets/images/icons/icon-16x16.png',
'/assets/images/icons/icon-24x24.png',
'/assets/images/icons/icon-36x36.png',
'/assets/images/icons/icon-64x64.png',
@aofleejay
aofleejay / service-worker.js
Created October 11, 2017 09:51
Handle network request to use cache storage
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request).then(cacheResp => {
return cacheResp || fetch(event.request).then(response => {
return caches.open(CACHE_KEY).then(cache => {
cache.put(event.request, response.clone())
return response
})
})
})
@aofleejay
aofleejay / service-worker.js
Created October 11, 2017 11:07
Clear old cache
self.addEventListener('activate', event => {
const cacheWhitelist = [CACHE_KEY]
event.waitUntil(
caches.keys().then(keyList => {
return Promise.all(keyList.map(function(key) {
if (cacheWhitelist.indexOf(key) === -1) {
return caches.delete(key)
}
}))
@aofleejay
aofleejay / schema.test.js
Last active May 30, 2018 15:57
Test Character type
import { GraphQLString, GraphQLNonNull } from 'graphql'
import { expect } from 'chai'
import rootSchema from '../../src/schemas/rootSchema'
describe('Test schema', () => {
it('has correct character schema', () => {
const characterSchema = rootSchema.getTypeMap().Character.getFields()
expect(characterSchema).to.have.property('name')
expect(characterSchema.name.type).to.deep.equals(GraphQLString)
@aofleejay
aofleejay / resolver.test.js
Last active May 30, 2018 16:01
Test query resolve function
import { expect } from 'chai'
import rootSchema from '../../src/schemas/rootSchema'
describe('Test resolvers', () => {
it('has correct getCharacters query', (done) => {
const charactersQuery = rootSchema.getTypeMap().Query.getFields().getCharacters
const expected = [
{ id: '1', name: 'John Snow', gender: { name: 'Male' }}
]