From 41d267c64508a088a2fedf5d13d9d2416607e16e Mon Sep 17 00:00:00 2001 From: Drake Costa Date: Fri, 25 Jun 2021 23:12:15 -0700 Subject: [PATCH] feat: add esbuild support for `.gql` and `.graphql` files --- package-lock.json | 115 ++++++++++++++++++++++++++++++++++- package.json | 3 + src/runtimes/node/bundler.js | 6 ++ 3 files changed, 123 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 366f2c8c9..fe396a289 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,10 +5,11 @@ "requires": true, "packages": { "": { - "name": "@netlify/zip-it-and-ship-it", "version": "4.6.0", "license": "MIT", "dependencies": { + "@graphql-tools/optimize": "^1.0.1", + "@luckycatfactory/esbuild-graphql-loader": "^3.6.0", "@netlify/esbuild": "^0.13.6", "acorn": "^8.4.0", "archiver": "^5.3.0", @@ -21,6 +22,7 @@ "filter-obj": "^2.0.1", "find-up": "^5.0.0", "glob": "^7.1.6", + "graphql-tag": "^2.12.5", "junk": "^3.1.0", "locate-path": "^6.0.0", "make-dir": "^3.1.0", @@ -861,6 +863,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@graphql-tools/optimize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/optimize/-/optimize-1.0.1.tgz", + "integrity": "sha512-cRlUNsbErYoBtzzS6zXahXeTBZGPVlPHXCpnEZ0XiK/KY/sQL96cyzak0fM/Gk6qEI9/l32MYEICjasiBQrl5w==", + "dependencies": { + "tslib": "~2.0.1" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0" + } + }, + "node_modules/@graphql-tools/optimize/node_modules/tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -938,6 +956,15 @@ "node": ">=8" } }, + "node_modules/@luckycatfactory/esbuild-graphql-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@luckycatfactory/esbuild-graphql-loader/-/esbuild-graphql-loader-3.6.0.tgz", + "integrity": "sha512-QRFiOvlOBJlXl3msbHiheLAX/TnX9ZnXjAf66t4efhgqP2hKzdHBqjmz0OFjb1yRc/JOGZNuomiqJywSmKmQWw==", + "peerDependencies": { + "esbuild": "^0.8.26", + "graphql-tag": "^2.11.0" + } + }, "node_modules/@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -3677,6 +3704,16 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, + "node_modules/esbuild": { + "version": "0.8.57", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.8.57.tgz", + "integrity": "sha512-j02SFrUwFTRUqiY0Kjplwjm1psuzO1d6AjaXKuOR9hrY0HuPsT6sV42B6myW34h1q4CRy+Y3g4RU/cGJeI/nNA==", + "hasInstallScript": true, + "peer": true, + "bin": { + "esbuild": "bin/esbuild" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -5594,6 +5631,34 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" }, + "node_modules/graphql": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.5.1.tgz", + "integrity": "sha512-FeTRX67T3LoE3LWAxxOlW2K3Bz+rMYAC18rRguK4wgXaTZMiJwSUwDmPFo3UadAKbzirKIg5Qy+sNJXbpPRnQw==", + "peer": true, + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/graphql-tag": { + "version": "2.12.5", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.5.tgz", + "integrity": "sha512-5xNhP4063d16Pz3HBtKprutsPrmHZi5IdUGOWRxA2B6VF7BIRGOHZ5WQvDmJXZuPcBg7rYwaFxvQYjqkSdR3TQ==", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" + } + }, + "node_modules/graphql-tag/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", @@ -12286,6 +12351,21 @@ } } }, + "@graphql-tools/optimize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/optimize/-/optimize-1.0.1.tgz", + "integrity": "sha512-cRlUNsbErYoBtzzS6zXahXeTBZGPVlPHXCpnEZ0XiK/KY/sQL96cyzak0fM/Gk6qEI9/l32MYEICjasiBQrl5w==", + "requires": { + "tslib": "~2.0.1" + }, + "dependencies": { + "tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + } + } + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -12344,6 +12424,12 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, + "@luckycatfactory/esbuild-graphql-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@luckycatfactory/esbuild-graphql-loader/-/esbuild-graphql-loader-3.6.0.tgz", + "integrity": "sha512-QRFiOvlOBJlXl3msbHiheLAX/TnX9ZnXjAf66t4efhgqP2hKzdHBqjmz0OFjb1yRc/JOGZNuomiqJywSmKmQWw==", + "requires": {} + }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -14428,6 +14514,12 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, + "esbuild": { + "version": "0.8.57", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.8.57.tgz", + "integrity": "sha512-j02SFrUwFTRUqiY0Kjplwjm1psuzO1d6AjaXKuOR9hrY0HuPsT6sV42B6myW34h1q4CRy+Y3g4RU/cGJeI/nNA==", + "peer": true + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -15842,6 +15934,27 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" }, + "graphql": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.5.1.tgz", + "integrity": "sha512-FeTRX67T3LoE3LWAxxOlW2K3Bz+rMYAC18rRguK4wgXaTZMiJwSUwDmPFo3UadAKbzirKIg5Qy+sNJXbpPRnQw==", + "peer": true + }, + "graphql-tag": { + "version": "2.12.5", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.5.tgz", + "integrity": "sha512-5xNhP4063d16Pz3HBtKprutsPrmHZi5IdUGOWRxA2B6VF7BIRGOHZ5WQvDmJXZuPcBg7rYwaFxvQYjqkSdR3TQ==", + "requires": { + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + } + } + }, "hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", diff --git a/package.json b/package.json index 87336ea11..9ec264600 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,8 @@ "url": "https://github.com/netlify/zip-it-and-ship-it/issues" }, "dependencies": { + "@graphql-tools/optimize": "^1.0.1", + "@luckycatfactory/esbuild-graphql-loader": "^3.6.0", "@netlify/esbuild": "^0.13.6", "acorn": "^8.4.0", "archiver": "^5.3.0", @@ -66,6 +68,7 @@ "filter-obj": "^2.0.1", "find-up": "^5.0.0", "glob": "^7.1.6", + "graphql-tag": "^2.12.5", "junk": "^3.1.0", "locate-path": "^6.0.0", "make-dir": "^3.1.0", diff --git a/src/runtimes/node/bundler.js b/src/runtimes/node/bundler.js index 3905179bc..89703c2a7 100644 --- a/src/runtimes/node/bundler.js +++ b/src/runtimes/node/bundler.js @@ -1,6 +1,8 @@ const { basename, dirname, extname, resolve, join } = require('path') const process = require('process') +const { optimizeDocumentNode } = require('@graphql-tools/optimize') +const graphqlLoaderPlugin = require('@luckycatfactory/esbuild-graphql-loader') const esbuild = require('@netlify/esbuild') const semver = require('semver') const { tmpName } = require('tmp-promise') @@ -67,6 +69,10 @@ const bundleJsFile = async function ({ moduleNames: nodeModulesWithDynamicImports, srcDir, }), + graphqlLoaderPlugin({ + filterRegex: /\.(gql|graphql)$/, + mapDocumentNode: (documentNode) => optimizeDocumentNode(documentNode), + }), ] // The version of ECMAScript to use as the build target. This will determine