Use netlify functions

This commit is contained in:
Trevor Blades
2022-02-24 21:07:10 -08:00
parent 262ae08628
commit 7b7bf6251a
14 changed files with 64051 additions and 87 deletions

View File

@@ -0,0 +1 @@
module.exports = require('./src/netlify/functions/graphql/graphql.js')

View File

@@ -0,0 +1 @@
{"type":"commonjs"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,64 @@
type Country @key(fields: "code") {
code: ID!
name: String!
native: String!
phone: String!
continent: Continent!
capital: String
currency: String
languages: [Language!]!
emoji: String!
emojiU: String!
states: [State!]!
}
type Continent @key(fields: "code") {
code: ID!
name: String!
countries: [Country!]!
}
type Language @key(fields: "code") {
code: ID!
name: String
native: String
rtl: Boolean!
}
type State {
code: String
name: String!
country: Country!
}
input StringQueryOperatorInput {
eq: String
ne: String
in: [String]
nin: [String]
regex: String
glob: String
}
input CountryFilterInput {
code: StringQueryOperatorInput
currency: StringQueryOperatorInput
continent: StringQueryOperatorInput
}
input ContinentFilterInput {
code: StringQueryOperatorInput
}
input LanguageFilterInput {
code: StringQueryOperatorInput
}
type Query {
countries(filter: CountryFilterInput): [Country!]!
country(code: ID!): Country
continents(filter: ContinentFilterInput): [Continent!]!
continent(code: ID!): Continent
languages(filter: LanguageFilterInput): [Language!]!
language(code: ID!): Language
}

View File

@@ -1 +0,0 @@
web: node index.js

1
_redirects Normal file
View File

@@ -0,0 +1 @@
/ /.netlify/functions/graphql 200

View File

@@ -1,43 +0,0 @@
# fly.toml file generated for empty-cherry-6843 on 2021-07-26T09:56:09-07:00
app = "empty-cherry-6843"
kill_signal = "SIGINT"
kill_timeout = 5
[build]
builder = "heroku/buildpacks:20"
[env]
PORT = 8080
APOLLO_GRAPH_REF = "Countries-gxmwa8@current"
APOLLO_SCHEMA_REPORTING = true
[experimental]
allowed_public_ports = []
auto_rollback = true
[[services]]
http_checks = []
internal_port = 8080
protocol = "tcp"
script_checks = []
[services.concurrency]
hard_limit = 25
soft_limit = 20
type = "connections"
[[services.ports]]
handlers = ["http"]
port = 80
[[services.ports]]
handlers = ["tls", "http"]
port = 443
[[services.tcp_checks]]
grace_period = "1s"
interval = "15s"
restart_limit = 6
timeout = "2s"

View File

@@ -1,18 +0,0 @@
import {ApolloServer, gql} from 'apollo-server';
import {ApolloServerPluginLandingPageGraphQLPlayground} from 'apollo-server-core';
import {buildSubgraphSchema} from '@apollo/subgraph';
import {readFileSync} from 'fs';
import {resolvers} from './resolvers.js';
const typeDefs = gql(readFileSync('./schema.graphql', 'utf-8'));
const schema = buildSubgraphSchema({typeDefs, resolvers});
const server = new ApolloServer({
schema,
introspection: true,
plugins: [ApolloServerPluginLandingPageGraphQLPlayground()]
});
server.listen({port: process.env.PORT || 4000}).then(({url}) => {
console.log(`🚀 Server ready at ${url}`);
});

3
netlify.toml Normal file
View File

@@ -0,0 +1,3 @@
[functions]
node_bundler = "esbuild"
included_files = ["schema.graphql"]

View File

@@ -0,0 +1,35 @@
import {ApolloServer, gql} from 'apollo-server-lambda';
import {ApolloServerPluginLandingPageGraphQLPlayground} from 'apollo-server-core';
import {buildSubgraphSchema} from '@apollo/subgraph';
import {join} from 'path';
import {readFileSync} from 'fs';
import {resolvers} from './resolvers';
const typeDefs = gql(
readFileSync(join(__dirname, '../../../schema.graphql')).toString()
);
const schema = buildSubgraphSchema({
typeDefs,
resolvers
});
const server = new ApolloServer({
schema,
introspection: true,
plugins: [ApolloServerPluginLandingPageGraphQLPlayground()]
});
const apolloHandler = server.createHandler();
// workaround for netlify dev to play nice with ac3
// from https://github.com/vendia/serverless-express/issues/427#issuecomment-924580007
export const handler = (event, context, ...args) =>
apolloHandler(
{
...event,
requestContext: context
},
context,
...args
);

78
package-lock.json generated
View File

@@ -6,7 +6,7 @@
"": {
"dependencies": {
"@apollo/subgraph": "^0.3.1",
"apollo-server": "^3.6.3",
"apollo-server-lambda": "^3.6.3",
"countries-list": "^2.5.4",
"graphql": "^15.8.0",
"provinces": "^1.11.0",
@@ -415,6 +415,11 @@
"@types/node": "*"
}
},
"node_modules/@types/aws-lambda": {
"version": "8.10.92",
"resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.92.tgz",
"integrity": "sha512-dB14TltT1SNq73z3MaZfKyyBZ37NAgAFl8jze59bisR4fJ6pB6AYGxItHFkooZbN7UcVJX/cFudM4p8wp1W4rA=="
},
"node_modules/@types/body-parser": {
"version": "1.19.2",
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
@@ -587,6 +592,14 @@
"semver": "bin/semver"
}
},
"node_modules/@vendia/serverless-express": {
"version": "4.5.4",
"resolved": "https://registry.npmjs.org/@vendia/serverless-express/-/serverless-express-4.5.4.tgz",
"integrity": "sha512-Ptrp8toFPv5Py3VNXRgiJp4XO7KTK992bM1ZrHjjfKJ8ThjJr87Hqs3UpeKHW12ABZ4e062NbDmgmY9NxsYR2w==",
"engines": {
"node": ">=12"
}
},
"node_modules/abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@@ -710,19 +723,6 @@
"@apollo/protobufjs": "1.2.2"
}
},
"node_modules/apollo-server": {
"version": "3.6.3",
"resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-3.6.3.tgz",
"integrity": "sha512-kNvOiDNkIaO+MsfR9v40Vz4ArlDdc9VwVKGJy5dniLW9AoDa/tSF99m8ItfGoMypqlRPMgrNGxkMuToBnvYXNQ==",
"dependencies": {
"apollo-server-core": "^3.6.3",
"apollo-server-express": "^3.6.3",
"express": "^4.17.1"
},
"peerDependencies": {
"graphql": "^15.3.0 || ^16.0.0"
}
},
"node_modules/apollo-server-caching": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-3.3.0.tgz",
@@ -814,6 +814,24 @@
"graphql": "^15.3.0 || ^16.0.0"
}
},
"node_modules/apollo-server-lambda": {
"version": "3.6.3",
"resolved": "https://registry.npmjs.org/apollo-server-lambda/-/apollo-server-lambda-3.6.3.tgz",
"integrity": "sha512-ImQoXudxXhsR0wVSSA6oPxG+eDeekDq9ooE2I7OTGoEHS+31wj5Rx39KKtql36NLVodhl9ubjr0Et0HGQYae6Q==",
"dependencies": {
"@types/aws-lambda": "^8.10.76",
"@vendia/serverless-express": "^4.3.9",
"apollo-server-core": "^3.6.3",
"apollo-server-express": "^3.6.3",
"express": "^4.17.1"
},
"engines": {
"node": ">=12.0"
},
"peerDependencies": {
"graphql": "^15.3.0 || ^16.0.0"
}
},
"node_modules/apollo-server-plugin-base": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-3.5.1.tgz",
@@ -5604,6 +5622,11 @@
"@types/node": "*"
}
},
"@types/aws-lambda": {
"version": "8.10.92",
"resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.92.tgz",
"integrity": "sha512-dB14TltT1SNq73z3MaZfKyyBZ37NAgAFl8jze59bisR4fJ6pB6AYGxItHFkooZbN7UcVJX/cFudM4p8wp1W4rA=="
},
"@types/body-parser": {
"version": "1.19.2",
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
@@ -5753,6 +5776,11 @@
}
}
},
"@vendia/serverless-express": {
"version": "4.5.4",
"resolved": "https://registry.npmjs.org/@vendia/serverless-express/-/serverless-express-4.5.4.tgz",
"integrity": "sha512-Ptrp8toFPv5Py3VNXRgiJp4XO7KTK992bM1ZrHjjfKJ8ThjJr87Hqs3UpeKHW12ABZ4e062NbDmgmY9NxsYR2w=="
},
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@@ -5850,16 +5878,6 @@
"@apollo/protobufjs": "1.2.2"
}
},
"apollo-server": {
"version": "3.6.3",
"resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-3.6.3.tgz",
"integrity": "sha512-kNvOiDNkIaO+MsfR9v40Vz4ArlDdc9VwVKGJy5dniLW9AoDa/tSF99m8ItfGoMypqlRPMgrNGxkMuToBnvYXNQ==",
"requires": {
"apollo-server-core": "^3.6.3",
"apollo-server-express": "^3.6.3",
"express": "^4.17.1"
}
},
"apollo-server-caching": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-3.3.0.tgz",
@@ -5927,6 +5945,18 @@
"parseurl": "^1.3.3"
}
},
"apollo-server-lambda": {
"version": "3.6.3",
"resolved": "https://registry.npmjs.org/apollo-server-lambda/-/apollo-server-lambda-3.6.3.tgz",
"integrity": "sha512-ImQoXudxXhsR0wVSSA6oPxG+eDeekDq9ooE2I7OTGoEHS+31wj5Rx39KKtql36NLVodhl9ubjr0Et0HGQYae6Q==",
"requires": {
"@types/aws-lambda": "^8.10.76",
"@vendia/serverless-express": "^4.3.9",
"apollo-server-core": "^3.6.3",
"apollo-server-express": "^3.6.3",
"express": "^4.17.1"
}
},
"apollo-server-plugin-base": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-3.5.1.tgz",

View File

@@ -10,7 +10,7 @@
},
"dependencies": {
"@apollo/subgraph": "^0.3.1",
"apollo-server": "^3.6.3",
"apollo-server-lambda": "^3.6.3",
"countries-list": "^2.5.4",
"graphql": "^15.8.0",
"provinces": "^1.11.0",