From bfeb54133b6e65ded92a27297213a85bb2ebc750 Mon Sep 17 00:00:00 2001 From: Trevor Scheer Date: Wed, 27 Feb 2019 09:31:54 -0800 Subject: [PATCH] Add environment awareness in order to use crypto/sha.js when appropriate --- package-lock.json | 13 ++++++++++++- packages/apollo-env/package.json | 3 ++- packages/apollo-env/src/index.ts | 1 + packages/apollo-env/src/utils/createHash.ts | 10 ++++++++++ packages/apollo-env/src/utils/index.ts | 2 ++ packages/apollo-env/src/utils/isNode.ts | 7 +++++++ packages/apollo-graphql/package.json | 1 + packages/apollo-graphql/src/signature.ts | 2 +- 8 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 packages/apollo-env/src/utils/createHash.ts create mode 100644 packages/apollo-env/src/utils/index.ts create mode 100644 packages/apollo-env/src/utils/isNode.ts diff --git a/package-lock.json b/package-lock.json index 4e6190398a..f868f77728 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2213,12 +2213,14 @@ "version": "file:packages/apollo-env", "requires": { "core-js": "3.0.0-beta.13", - "node-fetch": "^2.2.0" + "node-fetch": "^2.2.0", + "sha.js": "^2.4.11" } }, "apollo-graphql": { "version": "file:packages/apollo-graphql", "requires": { + "apollo-env": "file:packages/apollo-env", "lodash.sortby": "^4.7.0" } }, @@ -12290,6 +12292,15 @@ } } }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", diff --git a/packages/apollo-env/package.json b/packages/apollo-env/package.json index 12961f1c4e..d3f56a8982 100644 --- a/packages/apollo-env/package.json +++ b/packages/apollo-env/package.json @@ -21,6 +21,7 @@ }, "dependencies": { "core-js": "3.0.0-beta.13", - "node-fetch": "^2.2.0" + "node-fetch": "^2.2.0", + "sha.js": "^2.4.11" } } diff --git a/packages/apollo-env/src/index.ts b/packages/apollo-env/src/index.ts index b3034e8b80..eb8d694d2d 100644 --- a/packages/apollo-env/src/index.ts +++ b/packages/apollo-env/src/index.ts @@ -2,3 +2,4 @@ import "./polyfills"; import "./typescript-utility-types"; export * from "../lib/fetch"; +export * from "./utils"; diff --git a/packages/apollo-env/src/utils/createHash.ts b/packages/apollo-env/src/utils/createHash.ts new file mode 100644 index 0000000000..dae5876ca8 --- /dev/null +++ b/packages/apollo-env/src/utils/createHash.ts @@ -0,0 +1,10 @@ +import { isNode } from "./isNode"; + +export function createHash(kind: string): import("crypto").Hash { + if (isNode) { + // Use module.require instead of just require to avoid bundling whatever + // crypto polyfills a non-Node bundler might fall back to. + return module.require("crypto").createHash(kind); + } + return require("sha.js")(kind); +} diff --git a/packages/apollo-env/src/utils/index.ts b/packages/apollo-env/src/utils/index.ts new file mode 100644 index 0000000000..ac0a07c4c5 --- /dev/null +++ b/packages/apollo-env/src/utils/index.ts @@ -0,0 +1,2 @@ +export * from "./createHash"; +export * from "./isNode"; diff --git a/packages/apollo-env/src/utils/isNode.ts b/packages/apollo-env/src/utils/isNode.ts new file mode 100644 index 0000000000..30c3489094 --- /dev/null +++ b/packages/apollo-env/src/utils/isNode.ts @@ -0,0 +1,7 @@ +export const isNode = + typeof process === "object" && + process && + process.release && + process.release.name === "node" && + process.versions && + typeof process.versions.node === "string"; diff --git a/packages/apollo-graphql/package.json b/packages/apollo-graphql/package.json index 7c1e84e3f8..c65d5e9c87 100644 --- a/packages/apollo-graphql/package.json +++ b/packages/apollo-graphql/package.json @@ -11,6 +11,7 @@ "node": ">=6" }, "dependencies": { + "apollo-env": "file:../apollo-env", "lodash.sortby": "^4.7.0" }, "peerDependencies": { diff --git a/packages/apollo-graphql/src/signature.ts b/packages/apollo-graphql/src/signature.ts index deebbfbf79..aee1d2347a 100644 --- a/packages/apollo-graphql/src/signature.ts +++ b/packages/apollo-graphql/src/signature.ts @@ -43,8 +43,8 @@ // the server no longer needs to parse the signature or run its own signature // algorithm on it, and the details of the signature algorithm are now up to the // reporting agent. -import { createHash } from "crypto"; import { DocumentNode } from "graphql"; +import { createHash } from "apollo-env"; import { printWithReducedWhitespace, dropUnusedDefinitions,