mirror of
https://github.com/FranP-code/countries.git
synced 2025-10-13 00:02:15 +00:00
Use netlify functions
This commit is contained in:
1
.netlify/functions-serve/graphql/graphql.js
Normal file
1
.netlify/functions-serve/graphql/graphql.js
Normal file
@@ -0,0 +1 @@
|
||||
module.exports = require('./src/netlify/functions/graphql/graphql.js')
|
||||
1
.netlify/functions-serve/graphql/package.json
Normal file
1
.netlify/functions-serve/graphql/package.json
Normal 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
64
.netlify/functions-serve/graphql/src/schema.graphql
Normal file
64
.netlify/functions-serve/graphql/src/schema.graphql
Normal 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
|
||||
}
|
||||
1
_redirects
Normal file
1
_redirects
Normal file
@@ -0,0 +1 @@
|
||||
/ /.netlify/functions/graphql 200
|
||||
43
fly.toml
43
fly.toml
@@ -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"
|
||||
18
index.js
18
index.js
@@ -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
3
netlify.toml
Normal file
@@ -0,0 +1,3 @@
|
||||
[functions]
|
||||
node_bundler = "esbuild"
|
||||
included_files = ["schema.graphql"]
|
||||
35
netlify/functions/graphql/graphql.js
Normal file
35
netlify/functions/graphql/graphql.js
Normal 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
78
package-lock.json
generated
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user