Skip to content

Instantly share code, notes, and snippets.

View imjakechapman's full-sized avatar
⛓️
@6079.ai

Jake Chapman imjakechapman

⛓️
@6079.ai
View GitHub Profile
@imjakechapman
imjakechapman / flatten.js
Created March 27, 2020 22:43
Flatten a nested array
const flatten = (arr) => {
return Array.isArray(arr) ? [].concat(...arr.map(flatten)) : arr;
}
let ar = [[1,2,3], [4, [5, 6]], [[7, [8, [9]]]]]; // [1, 2, 3, 4, 5, 6, 7, 8, 9]
@imjakechapman
imjakechapman / index.ts
Created November 6, 2019 07:39
./datasources/lastfm
import { RequestOptions, RESTDataSource } from "apollo-datasource-rest";
import { ApolloError, AuthenticationError } from "apollo-server";
// Local Types
export type IResourceTypes = "album" | "artist" | "track" | "user";
export type IMethodTypes =
| "getInfo"
| "getTags"
| "search"
| "getSimilar"
@imjakechapman
imjakechapman / index.ts
Created November 6, 2019 07:32
./schema/resolvers/lastfm/user
import { IResolvers } from "graphql-tools";
const UserResolvers: IResolvers = {
User: {
info: async ({ user }, _args, { dataSources: { LastFM } }) => {
const data = await LastFM.call({ resource: "user", method: "getInfo", user });
return data.user;
},
charts: ({ user }) => ({ user }),
tracks: ({ user }, { limit, page }) => ({ user, limit, page }),
@imjakechapman
imjakechapman / index.ts
Created November 6, 2019 07:27
./schema/resolvers/lastfm
import { UserInputError } from "apollo-server";
import { IResolvers } from "graphql-tools";
import merge from "lodash.merge";
// LastFM Resource Resolvers
import { AlbumsResolvers } from "./album";
import { ArtistResolver } from "./artist";
import { TrackResolver } from "./track";
import { UserResolvers } from "./user";
@imjakechapman
imjakechapman / index.ts
Created November 6, 2019 07:19
./schema/resolvers
import { IResolvers } from "graphql-tools";
import merge from "lodash.merge";
import { LastFMResolvers } from "./lastfm";
import { SharedResolvers } from "./shared";
const RootQueryResolver: IResolvers = {
Query: {
lastfm: () => ({})
}
@imjakechapman
imjakechapman / index.ts
Created November 6, 2019 07:14
./schema/lastfm/user
import { gql } from "apollo-server";
import { DocumentNode } from "graphql";
const UserDefs: DocumentNode = gql`
extend type LastFM {
users(
"The user to fetch info for."
user: String!
): User
}
@imjakechapman
imjakechapman / index.ts
Created November 6, 2019 07:03
./schema/lastfm
import { gql } from "apollo-server";
import { DocumentNode } from "graphql";
// Type Defs
import { AlbumDefs } from "./album";
import { ArtistDefs } from "./artist";
import { TagDefs } from "./tag";
import { TrackDefs } from "./track";
import { UserDefs } from "./user";
@imjakechapman
imjakechapman / index.ts
Created November 6, 2019 07:01
./schema/shared
import { gql } from "apollo-server";
import { DocumentNode } from "graphql";
// Our Shared Type Definitions
const SharedDefs: DocumentNode = gql`
"Last.fm image resource"
type Image {
size: String!
url: String!
}
@imjakechapman
imjakechapman / index.ts
Created November 6, 2019 06:52
./schema/index.ts
import { gql } from "apollo-server";
import { DocumentNode } from "graphql";
// TypeDefs
import { LastFMSchemaDefs } from "./lastfm";
import { SharedSchemaDefs } from "./shared";
const RootDefs: DocumentNode = gql`
type Query {
_empty: String
import { ApolloServer } from "apollo-server";
import * as dotenv from "dotenv";
// Process env
dotenv.config();
// Apollo-Server Schema
import { schema } from "./schema";
// GraphQL Server