From 3712d7d4f534b539947c223243512d4704bf9b67 Mon Sep 17 00:00:00 2001 From: Hyeseong Kim <cometkim.kr@gmail.com> Date: Fri, 6 Sep 2019 02:14:53 +0900 Subject: [PATCH] Debounce writeTypeDefinition() to batch multiple calls in 1s --- gatsby-node.ts | 43 ++++++++++++++++++++++--------------------- package.json | 4 +++- yarn.lock | 17 +++++++++++++++++ 3 files changed, 42 insertions(+), 22 deletions(-) diff --git a/gatsby-node.ts b/gatsby-node.ts index 6f84e7b..083cceb 100644 --- a/gatsby-node.ts +++ b/gatsby-node.ts @@ -2,6 +2,7 @@ import path from 'path'; import fs from 'fs'; import crypto from 'crypto'; import chokidar from 'chokidar'; +import debounce from 'lodash.debounce'; import { codegen } from '@graphql-codegen/core'; import * as typescriptPlugin from '@graphql-codegen/typescript'; import { loadDocuments, loadSchema } from 'graphql-toolkit'; @@ -35,34 +36,34 @@ export const onPostBootstrap: GatsbyNode['onPostBootstrap'] = async ({ store }) const documents = await loadDocuments(resolve('src/**/*.{ts,tsx}')); log('Documents have been loaded'); - const writeTypeDefinition = async () => { - const config = { - schemaAst, - documents, - plugins: [{ - typescript: { - avoidOptionals: true, - maybeValue: 'T', - namingConvention: { - enumValues: 'keep', - transformUnderscore: false, - }, + const config = { + schemaAst, + documents, + plugins: [{ + typescript: { + avoidOptionals: true, + maybeValue: 'T', + namingConvention: { + enumValues: 'keep', + transformUnderscore: false, }, - }], - pluginMap: { - typescript: typescriptPlugin, }, - // Not really necessary - filename: '', - config: {}, - } + }], + pluginMap: { + typescript: typescriptPlugin, + }, + // Not really necessary + filename: '', + config: {}, + } + + const writeTypeDefinition = debounce(async () => { // @ts-ignore const output = await codegen(config); await fs.promises.mkdir(resolve('generated/types'), { recursive: true }); await fs.promises.writeFile(resolve('generated/types/gatsby.ts'), output, 'utf-8'); log('Type definitions have been generated'); - }; - + }, 1000); const watcher = chokidar.watch([ schemaOutputPath, diff --git a/package.json b/package.json index 638eec2..bc7db19 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,8 @@ "@graphql-codegen/core": "^1.7.0", "@graphql-codegen/typescript": "^1.7.0", "chokidar": "^3.0.2", - "graphql-toolkit": "^0.5.11" + "graphql-toolkit": "^0.5.11", + "lodash.debounce": "^4.0.8" }, "devDependencies": { "@babel/cli": "^7.5.5", @@ -37,6 +38,7 @@ "@babel/preset-typescript": "^7.3.3", "@types/chokidar": "^2.1.3", "@types/graphql": "^14.5.0", + "@types/lodash.debounce": "^4.0.6", "@types/node": "^12.7.3", "babel-preset-gatsby-package": "^0.2.3", "gatsby": "^2.15.6", diff --git a/yarn.lock b/yarn.lock index a4b880e..1fc4f27 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1064,6 +1064,18 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== +"@types/lodash.debounce@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@types/lodash.debounce/-/lodash.debounce-4.0.6.tgz#c5a2326cd3efc46566c47e4c0aa248dc0ee57d60" + integrity sha512-4WTmnnhCfDvvuLMaF3KV4Qfki93KebocUF45msxhYyjMttZDQYzHkO639ohhk8+oco2cluAFL3t5+Jn4mleylQ== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.14.138" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.138.tgz#34f52640d7358230308344e579c15b378d91989e" + integrity sha512-A4uJgHz4hakwNBdHNPdxOTkYmXNgmUAKLbXZ7PKGslgeV0Mb8P3BlbYfPovExek1qnod4pDfRbxuzcVs3dlFLg== + "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" @@ -6328,6 +6340,11 @@ lockfile@^1.0.4: dependencies: signal-exit "^3.0.2" +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + lodash.every@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.every/-/lodash.every-4.6.0.tgz#eb89984bebc4364279bb3aefbbd1ca19bfa6c6a7" -- GitLab