Repository files navigation

Graphroots

Graph QL is quickly becoming the application layer protocol of choice for crud operations, its ease of use makes it ideal for quickly spinning up servers for querying data.

With this project I'd like to build an abstraction layer on top of Graph QL which offers Graph QL as a service; to this end I'm trying to build a server that developers can use to significantly streamline the Graph QL deployment process. For a developer, it should be as easy as uploading a Graph QL schema, writing resolvers for the schema, and then hitting a deploy button.

Open API documentation can be found at the /api-docs route when running the project

Running the project locally

  • Clone or fork the project
  • run npm install to make sure you have all the dependencies installed
  • make sure you have docker and docker-compose installed on your machine and that you're using linux containers
  • Create a file named .env in the root of your project and add the following, replace the curly brackets and text with a guid or random number
PORT=4000
SESSION_SECRET={put any guid or random string here}
  • run npm run dev:docker to start the application and a redis server in docker containers. Any changes you make to any files will cause the server to reload inside the docker container.

Note: It is possible to run the project without docker compose by running npm run dev. However, if you do this you will have to run your own redis container and make sure your server can talk to it on localhost

Debugging

I haven't figured out how to run the debugger inside the docker container yet so debugging is tbd.

Contributing

If you want to contribute please fork the project and make a pull request. Let me know what you're working on so that there aren't multiple people working on the same thing. You can head on over to the work tracking board to see what needs doing.

For any PR you make please write unit and integration tests where it makes sense

Architecture

High Level

On a high level this project is a server which listens for post requests of Graph QL files (resolvers and schema) from the client. The server then saves these files in an http session backed by a redis store. The files are stored as strings with some additional metadata. The client can also specify a project name when files are uploaded, so that multiple Graph QL projects can be in progress at the same time.

When the deployment endpoint is called, the resolvers and schema are retrieved from the session and used to create an express Graph QL server which, is then deployed to a cloud provider of the users choice (currently only Azure is supported)

Details

The server follows a basic mvc pattern. The index.ts file serves to start the server and server.ts wraps express and defines the routes and middleware. The controllers folder holds all of the controllers for the server, as well as functions to validate models sent from the client. The GraphQL controller and DeploymentController are fairly self explanatory, while the info controller returns information about a developers currently uploaded Graph QL projects.

Besides the server there are basically two modules: the generator and the deployer. The generator is responsible for outputting a zip file given a list of code files, and the deployer is responsible for creating the cloud resources needed to support a Graph QL server as well as deploying the zip file output by the generator. Both the deployer and generator are represented by interfaces, the end goal being that a deployer and generator can be chosen at runtime based on the clooud provider/programming language.

 ##################### ################
# # # #
Code Files -> # Generator # -> Zip File -> # Deployer # -> Cloud
# # # #
# # # #
##################### ################

About

Server making it easy to deploy GraphQL projects to the cloud with minimal boilerplate

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Graphroots

Graph QL is quickly becoming the application layer protocol of choice for crud operations, its ease of use makes it ideal for quickly spinning up servers for querying data.

With this project I'd like to build an abstraction layer on top of Graph QL which offers Graph QL as a service; to this end I'm trying to build a server that developers can use to significantly streamline the Graph QL deployment process. For a developer, it should be as easy as uploading a Graph QL schema, writing resolvers for the schema, and then hitting a deploy button.

Open API documentation can be found at the /api-docs route when running the project

Running the project locally

  • Clone or fork the project
  • run npm install to make sure you have all the dependencies installed
  • make sure you have docker and docker-compose installed on your machine and that you're using linux containers
  • Create a file named .env in the root of your project and add the following, replace the curly brackets and text with a guid or random number
PORT=4000
SESSION_SECRET={put any guid or random string here}
  • run npm run dev:docker to start the application and a redis server in docker containers. Any changes you make to any files will cause the server to reload inside the docker container.

Note: It is possible to run the project without docker compose by running npm run dev. However, if you do this you will have to run your own redis container and make sure your server can talk to it on localhost

Debugging

I haven't figured out how to run the debugger inside the docker container yet so debugging is tbd.

Contributing

If you want to contribute please fork the project and make a pull request. Let me know what you're working on so that there aren't multiple people working on the same thing. You can head on over to the work tracking board to see what needs doing.

For any PR you make please write unit and integration tests where it makes sense

Architecture

High Level

On a high level this project is a server which listens for post requests of Graph QL files (resolvers and schema) from the client. The server then saves these files in an http session backed by a redis store. The files are stored as strings with some additional metadata. The client can also specify a project name when files are uploaded, so that multiple Graph QL projects can be in progress at the same time.

When the deployment endpoint is called, the resolvers and schema are retrieved from the session and used to create an express Graph QL server which, is then deployed to a cloud provider of the users choice (currently only Azure is supported)

Details

The server follows a basic mvc pattern. The index.ts file serves to start the server and server.ts wraps express and defines the routes and middleware. The controllers folder holds all of the controllers for the server, as well as functions to validate models sent from the client. The GraphQL controller and DeploymentController are fairly self explanatory, while the info controller returns information about a developers currently uploaded Graph QL projects.

Besides the server there are basically two modules: the generator and the deployer. The generator is responsible for outputting a zip file given a list of code files, and the deployer is responsible for creating the cloud resources needed to support a Graph QL server as well as deploying the zip file output by the generator. Both the deployer and generator are represented by interfaces, the end goal being that a deployer and generator can be chosen at runtime based on the clooud provider/programming language.

 ##################### ################
# # # #
Code Files -> # Generator # -> Zip File -> # Deployer # -> Cloud
# # # #
# # # #
##################### ################

About

Server making it easy to deploy GraphQL projects to the cloud with minimal boilerplate

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Graphroots

Graph QL is quickly becoming the application layer protocol of choice for crud operations, its ease of use makes it ideal for quickly spinning up servers for querying data.

With this project I'd like to build an abstraction layer on top of Graph QL which offers Graph QL as a service; to this end I'm trying to build a server that developers can use to significantly streamline the Graph QL deployment process. For a developer, it should be as easy as uploading a Graph QL schema, writing resolvers for the schema, and then hitting a deploy button.

Open API documentation can be found at the /api-docs route when running the project

Running the project locally

  • Clone or fork the project
  • run npm install to make sure you have all the dependencies installed
  • make sure you have docker and docker-compose installed on your machine and that you're using linux containers
  • Create a file named .env in the root of your project and add the following, replace the curly brackets and text with a guid or random number
PORT=4000
SESSION_SECRET={put any guid or random string here}
  • run npm run dev:docker to start the application and a redis server in docker containers. Any changes you make to any files will cause the server to reload inside the docker container.

Note: It is possible to run the project without docker compose by running npm run dev. However, if you do this you will have to run your own redis container and make sure your server can talk to it on localhost

Debugging

I haven't figured out how to run the debugger inside the docker container yet so debugging is tbd.

Contributing

If you want to contribute please fork the project and make a pull request. Let me know what you're working on so that there aren't multiple people working on the same thing. You can head on over to the work tracking board to see what needs doing.

For any PR you make please write unit and integration tests where it makes sense

Architecture

High Level

On a high level this project is a server which listens for post requests of Graph QL files (resolvers and schema) from the client. The server then saves these files in an http session backed by a redis store. The files are stored as strings with some additional metadata. The client can also specify a project name when files are uploaded, so that multiple Graph QL projects can be in progress at the same time.

When the deployment endpoint is called, the resolvers and schema are retrieved from the session and used to create an express Graph QL server which, is then deployed to a cloud provider of the users choice (currently only Azure is supported)

Details

The server follows a basic mvc pattern. The index.ts file serves to start the server and server.ts wraps express and defines the routes and middleware. The controllers folder holds all of the controllers for the server, as well as functions to validate models sent from the client. The GraphQL controller and DeploymentController are fairly self explanatory, while the info controller returns information about a developers currently uploaded Graph QL projects.

Besides the server there are basically two modules: the generator and the deployer. The generator is responsible for outputting a zip file given a list of code files, and the deployer is responsible for creating the cloud resources needed to support a Graph QL server as well as deploying the zip file output by the generator. Both the deployer and generator are represented by interfaces, the end goal being that a deployer and generator can be chosen at runtime based on the clooud provider/programming language.

 ##################### ################
# # # #
Code Files -> # Generator # -> Zip File -> # Deployer # -> Cloud
# # # #
# # # #
##################### ################

About

Server making it easy to deploy GraphQL projects to the cloud with minimal boilerplate

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Graphroots

Graph QL is quickly becoming the application layer protocol of choice for crud operations, its ease of use makes it ideal for quickly spinning up servers for querying data.

With this project I'd like to build an abstraction layer on top of Graph QL which offers Graph QL as a service; to this end I'm trying to build a server that developers can use to significantly streamline the Graph QL deployment process. For a developer, it should be as easy as uploading a Graph QL schema, writing resolvers for the schema, and then hitting a deploy button.

Open API documentation can be found at the /api-docs route when running the project

Running the project locally

  • Clone or fork the project
  • run npm install to make sure you have all the dependencies installed
  • make sure you have docker and docker-compose installed on your machine and that you're using linux containers
  • Create a file named .env in the root of your project and add the following, replace the curly brackets and text with a guid or random number
PORT=4000
SESSION_SECRET={put any guid or random string here}
  • run npm run dev:docker to start the application and a redis server in docker containers. Any changes you make to any files will cause the server to reload inside the docker container.

Note: It is possible to run the project without docker compose by running npm run dev. However, if you do this you will have to run your own redis container and make sure your server can talk to it on localhost

Debugging

I haven't figured out how to run the debugger inside the docker container yet so debugging is tbd.

Contributing

If you want to contribute please fork the project and make a pull request. Let me know what you're working on so that there aren't multiple people working on the same thing. You can head on over to the work tracking board to see what needs doing.

For any PR you make please write unit and integration tests where it makes sense

Architecture

High Level

On a high level this project is a server which listens for post requests of Graph QL files (resolvers and schema) from the client. The server then saves these files in an http session backed by a redis store. The files are stored as strings with some additional metadata. The client can also specify a project name when files are uploaded, so that multiple Graph QL projects can be in progress at the same time.

When the deployment endpoint is called, the resolvers and schema are retrieved from the session and used to create an express Graph QL server which, is then deployed to a cloud provider of the users choice (currently only Azure is supported)

Details

The server follows a basic mvc pattern. The index.ts file serves to start the server and server.ts wraps express and defines the routes and middleware. The controllers folder holds all of the controllers for the server, as well as functions to validate models sent from the client. The GraphQL controller and DeploymentController are fairly self explanatory, while the info controller returns information about a developers currently uploaded Graph QL projects.

Besides the server there are basically two modules: the generator and the deployer. The generator is responsible for outputting a zip file given a list of code files, and the deployer is responsible for creating the cloud resources needed to support a Graph QL server as well as deploying the zip file output by the generator. Both the deployer and generator are represented by interfaces, the end goal being that a deployer and generator can be chosen at runtime based on the clooud provider/programming language.

 ##################### ################
# # # #
Code Files -> # Generator # -> Zip File -> # Deployer # -> Cloud
# # # #
# # # #
##################### ################

About

Server making it easy to deploy GraphQL projects to the cloud with minimal boilerplate

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Graphroots

Graph QL is quickly becoming the application layer protocol of choice for crud operations, its ease of use makes it ideal for quickly spinning up servers for querying data.

With this project I'd like to build an abstraction layer on top of Graph QL which offers Graph QL as a service; to this end I'm trying to build a server that developers can use to significantly streamline the Graph QL deployment process. For a developer, it should be as easy as uploading a Graph QL schema, writing resolvers for the schema, and then hitting a deploy button.

Open API documentation can be found at the /api-docs route when running the project

Running the project locally

  • Clone or fork the project
  • run npm install to make sure you have all the dependencies installed
  • make sure you have docker and docker-compose installed on your machine and that you're using linux containers
  • Create a file named .env in the root of your project and add the following, replace the curly brackets and text with a guid or random number
PORT=4000
SESSION_SECRET={put any guid or random string here}
  • run npm run dev:docker to start the application and a redis server in docker containers. Any changes you make to any files will cause the server to reload inside the docker container.

Note: It is possible to run the project without docker compose by running npm run dev. However, if you do this you will have to run your own redis container and make sure your server can talk to it on localhost

Debugging

I haven't figured out how to run the debugger inside the docker container yet so debugging is tbd.

Contributing

If you want to contribute please fork the project and make a pull request. Let me know what you're working on so that there aren't multiple people working on the same thing. You can head on over to the work tracking board to see what needs doing.

For any PR you make please write unit and integration tests where it makes sense

Architecture

High Level

On a high level this project is a server which listens for post requests of Graph QL files (resolvers and schema) from the client. The server then saves these files in an http session backed by a redis store. The files are stored as strings with some additional metadata. The client can also specify a project name when files are uploaded, so that multiple Graph QL projects can be in progress at the same time.

When the deployment endpoint is called, the resolvers and schema are retrieved from the session and used to create an express Graph QL server which, is then deployed to a cloud provider of the users choice (currently only Azure is supported)

Details

The server follows a basic mvc pattern. The index.ts file serves to start the server and server.ts wraps express and defines the routes and middleware. The controllers folder holds all of the controllers for the server, as well as functions to validate models sent from the client. The GraphQL controller and DeploymentController are fairly self explanatory, while the info controller returns information about a developers currently uploaded Graph QL projects.

Besides the server there are basically two modules: the generator and the deployer. The generator is responsible for outputting a zip file given a list of code files, and the deployer is responsible for creating the cloud resources needed to support a Graph QL server as well as deploying the zip file output by the generator. Both the deployer and generator are represented by interfaces, the end goal being that a deployer and generator can be chosen at runtime based on the clooud provider/programming language.

 ##################### ################
# # # #
Code Files -> # Generator # -> Zip File -> # Deployer # -> Cloud
# # # #
# # # #
##################### ################

About

Server making it easy to deploy GraphQL projects to the cloud with minimal boilerplate

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Graphroots

Graph QL is quickly becoming the application layer protocol of choice for crud operations, its ease of use makes it ideal for quickly spinning up servers for querying data.

With this project I'd like to build an abstraction layer on top of Graph QL which offers Graph QL as a service; to this end I'm trying to build a server that developers can use to significantly streamline the Graph QL deployment process. For a developer, it should be as easy as uploading a Graph QL schema, writing resolvers for the schema, and then hitting a deploy button.

Open API documentation can be found at the /api-docs route when running the project

Running the project locally

  • Clone or fork the project
  • run npm install to make sure you have all the dependencies installed
  • make sure you have docker and docker-compose installed on your machine and that you're using linux containers
  • Create a file named .env in the root of your project and add the following, replace the curly brackets and text with a guid or random number
PORT=4000
SESSION_SECRET={put any guid or random string here}
  • run npm run dev:docker to start the application and a redis server in docker containers. Any changes you make to any files will cause the server to reload inside the docker container.

Note: It is possible to run the project without docker compose by running npm run dev. However, if you do this you will have to run your own redis container and make sure your server can talk to it on localhost

Debugging

I haven't figured out how to run the debugger inside the docker container yet so debugging is tbd.

Contributing

If you want to contribute please fork the project and make a pull request. Let me know what you're working on so that there aren't multiple people working on the same thing. You can head on over to the work tracking board to see what needs doing.

For any PR you make please write unit and integration tests where it makes sense

Architecture

High Level

On a high level this project is a server which listens for post requests of Graph QL files (resolvers and schema) from the client. The server then saves these files in an http session backed by a redis store. The files are stored as strings with some additional metadata. The client can also specify a project name when files are uploaded, so that multiple Graph QL projects can be in progress at the same time.

When the deployment endpoint is called, the resolvers and schema are retrieved from the session and used to create an express Graph QL server which, is then deployed to a cloud provider of the users choice (currently only Azure is supported)

Details

The server follows a basic mvc pattern. The index.ts file serves to start the server and server.ts wraps express and defines the routes and middleware. The controllers folder holds all of the controllers for the server, as well as functions to validate models sent from the client. The GraphQL controller and DeploymentController are fairly self explanatory, while the info controller returns information about a developers currently uploaded Graph QL projects.

Besides the server there are basically two modules: the generator and the deployer. The generator is responsible for outputting a zip file given a list of code files, and the deployer is responsible for creating the cloud resources needed to support a Graph QL server as well as deploying the zip file output by the generator. Both the deployer and generator are represented by interfaces, the end goal being that a deployer and generator can be chosen at runtime based on the clooud provider/programming language.

 ##################### ################
# # # #
Code Files -> # Generator # -> Zip File -> # Deployer # -> Cloud
# # # #
# # # #
##################### ################

About

Server making it easy to deploy GraphQL projects to the cloud with minimal boilerplate

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Graphroots

Graph QL is quickly becoming the application layer protocol of choice for crud operations, its ease of use makes it ideal for quickly spinning up servers for querying data.

With this project I'd like to build an abstraction layer on top of Graph QL which offers Graph QL as a service; to this end I'm trying to build a server that developers can use to significantly streamline the Graph QL deployment process. For a developer, it should be as easy as uploading a Graph QL schema, writing resolvers for the schema, and then hitting a deploy button.

Open API documentation can be found at the /api-docs route when running the project

Running the project locally

  • Clone or fork the project
  • run npm install to make sure you have all the dependencies installed
  • make sure you have docker and docker-compose installed on your machine and that you're using linux containers
  • Create a file named .env in the root of your project and add the following, replace the curly brackets and text with a guid or random number
PORT=4000
SESSION_SECRET={put any guid or random string here}
  • run npm run dev:docker to start the application and a redis server in docker containers. Any changes you make to any files will cause the server to reload inside the docker container.

Note: It is possible to run the project without docker compose by running npm run dev. However, if you do this you will have to run your own redis container and make sure your server can talk to it on localhost

Debugging

I haven't figured out how to run the debugger inside the docker container yet so debugging is tbd.

Contributing

If you want to contribute please fork the project and make a pull request. Let me know what you're working on so that there aren't multiple people working on the same thing. You can head on over to the work tracking board to see what needs doing.

For any PR you make please write unit and integration tests where it makes sense

Architecture

High Level

On a high level this project is a server which listens for post requests of Graph QL files (resolvers and schema) from the client. The server then saves these files in an http session backed by a redis store. The files are stored as strings with some additional metadata. The client can also specify a project name when files are uploaded, so that multiple Graph QL projects can be in progress at the same time.

When the deployment endpoint is called, the resolvers and schema are retrieved from the session and used to create an express Graph QL server which, is then deployed to a cloud provider of the users choice (currently only Azure is supported)

Details

The server follows a basic mvc pattern. The index.ts file serves to start the server and server.ts wraps express and defines the routes and middleware. The controllers folder holds all of the controllers for the server, as well as functions to validate models sent from the client. The GraphQL controller and DeploymentController are fairly self explanatory, while the info controller returns information about a developers currently uploaded Graph QL projects.

Besides the server there are basically two modules: the generator and the deployer. The generator is responsible for outputting a zip file given a list of code files, and the deployer is responsible for creating the cloud resources needed to support a Graph QL server as well as deploying the zip file output by the generator. Both the deployer and generator are represented by interfaces, the end goal being that a deployer and generator can be chosen at runtime based on the clooud provider/programming language.

 ##################### ################
# # # #
Code Files -> # Generator # -> Zip File -> # Deployer # -> Cloud
# # # #
# # # #
##################### ################

About

Server making it easy to deploy GraphQL projects to the cloud with minimal boilerplate

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Graphroots

Graph QL is quickly becoming the application layer protocol of choice for crud operations, its ease of use makes it ideal for quickly spinning up servers for querying data.

With this project I'd like to build an abstraction layer on top of Graph QL which offers Graph QL as a service; to this end I'm trying to build a server that developers can use to significantly streamline the Graph QL deployment process. For a developer, it should be as easy as uploading a Graph QL schema, writing resolvers for the schema, and then hitting a deploy button.

Open API documentation can be found at the /api-docs route when running the project

Running the project locally

  • Clone or fork the project
  • run npm install to make sure you have all the dependencies installed
  • make sure you have docker and docker-compose installed on your machine and that you're using linux containers
  • Create a file named .env in the root of your project and add the following, replace the curly brackets and text with a guid or random number
PORT=4000
SESSION_SECRET={put any guid or random string here}
  • run npm run dev:docker to start the application and a redis server in docker containers. Any changes you make to any files will cause the server to reload inside the docker container.

Note: It is possible to run the project without docker compose by running npm run dev. However, if you do this you will have to run your own redis container and make sure your server can talk to it on localhost

Debugging

I haven't figured out how to run the debugger inside the docker container yet so debugging is tbd.

Contributing

If you want to contribute please fork the project and make a pull request. Let me know what you're working on so that there aren't multiple people working on the same thing. You can head on over to the work tracking board to see what needs doing.

For any PR you make please write unit and integration tests where it makes sense

Architecture

High Level

On a high level this project is a server which listens for post requests of Graph QL files (resolvers and schema) from the client. The server then saves these files in an http session backed by a redis store. The files are stored as strings with some additional metadata. The client can also specify a project name when files are uploaded, so that multiple Graph QL projects can be in progress at the same time.

When the deployment endpoint is called, the resolvers and schema are retrieved from the session and used to create an express Graph QL server which, is then deployed to a cloud provider of the users choice (currently only Azure is supported)

Details

The server follows a basic mvc pattern. The index.ts file serves to start the server and server.ts wraps express and defines the routes and middleware. The controllers folder holds all of the controllers for the server, as well as functions to validate models sent from the client. The GraphQL controller and DeploymentController are fairly self explanatory, while the info controller returns information about a developers currently uploaded Graph QL projects.

Besides the server there are basically two modules: the generator and the deployer. The generator is responsible for outputting a zip file given a list of code files, and the deployer is responsible for creating the cloud resources needed to support a Graph QL server as well as deploying the zip file output by the generator. Both the deployer and generator are represented by interfaces, the end goal being that a deployer and generator can be chosen at runtime based on the clooud provider/programming language.

 ##################### ################
# # # #
Code Files -> # Generator # -> Zip File -> # Deployer # -> Cloud
# # # #
# # # #
##################### ################

About

Server making it easy to deploy GraphQL projects to the cloud with minimal boilerplate

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages