Skip to content

Commit e7d56e3

Browse files
authoredSep 28, 2020
fix issues with init command and missing versions (#4809)
1 parent d2cde3d commit e7d56e3

File tree

6 files changed

+31
-30
lines changed

6 files changed

+31
-30
lines changed
 

‎.changeset/plenty-stingrays-run.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@graphql-codegen/cli': patch
3+
---
4+
5+
fix issues with init command and missing versions

‎packages/graphql-codegen-cli/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
},
4141
"homepage": "https://github.com/dotansimha/graphql-code-generator#readme",
4242
"dependencies": {
43+
"latest-version": "5.1.0",
4344
"@graphql-codegen/core": "1.17.8",
4445
"@graphql-codegen/plugin-helpers": "^1.17.8",
4546
"@graphql-tools/apollo-engine-loader": "^6",

‎packages/graphql-codegen-cli/src/init/helpers.ts

+8-20
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { writeFileSync, readFileSync } from 'fs';
44
import { Types } from '@graphql-codegen/plugin-helpers';
55
import detectIndent from 'detect-indent';
66
import { Answers } from './types';
7+
import getLatestVersion from 'latest-version';
78

89
// Parses config and writes it to a file
910
export async function writeConfig(answers: Answers, config: Types.Config) {
@@ -44,30 +45,17 @@ export async function writePackage(answers: Answers, configLocation: string) {
4445
pkg.devDependencies = {};
4546
}
4647

47-
// read codegen's version
48-
let version: string;
49-
50-
const dynamicImport = (m: string) => import(m).then(m => ('default' in m ? m.default : m));
51-
try {
52-
// Works in tests
53-
const packageJson = await dynamicImport('../../package.json');
54-
version = packageJson.version;
55-
} catch (e) {
56-
// Works in production (package dist is flat, everything is in the same folder)
57-
const packageJson = await dynamicImport('./package.json');
58-
version = packageJson.version;
59-
}
60-
61-
answers.plugins.forEach(plugin => {
62-
pkg.devDependencies[plugin.package] = version;
63-
});
48+
await Promise.all(
49+
answers.plugins.map(async plugin => {
50+
pkg.devDependencies[plugin.package] = await getLatestVersion(plugin.package);
51+
})
52+
);
6453

6554
if (answers.introspection) {
66-
pkg.devDependencies['@graphql-codegen/introspection'] = version;
55+
pkg.devDependencies['@graphql-codegen/introspection'] = await getLatestVersion('@graphql-codegen/introspection');
6756
}
6857

69-
// If cli haven't installed yet
70-
pkg.devDependencies['@graphql-codegen/cli'] = version;
58+
pkg.devDependencies['@graphql-codegen/cli'] = await getLatestVersion('@graphql-codegen/cli');
7159

7260
writeFileSync(pkgPath, JSON.stringify(pkg, null, indent));
7361
}

‎packages/graphql-codegen-cli/src/init/index.ts

+2
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ export async function init() {
4040
// config file
4141
const { relativePath } = await writeConfig(answers, config);
4242

43+
log(`Fetching latest versions of selected plugins...`);
44+
4345
// write package.json
4446
await writePackage(answers, relativePath);
4547

‎packages/graphql-codegen-cli/tests/init.spec.ts

+8-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
/* eslint-disable import/first */
2+
jest.mock('latest-version', () => {
3+
return () => Promise.resolve('1.0.0');
4+
});
5+
16
import bddStdin from 'bdd-stdin';
27
import { resolve } from 'path';
38
import { init } from '../src/init';
@@ -294,7 +299,7 @@ describe('init', () => {
294299
expect(config.schema).toEqual(defaults.schema);
295300
expect(config.documents).toEqual(defaults.documents);
296301
expect(config.generates[defaults.output]).toBeDefined();
297-
expect(logSpy.mock.calls[1][0]).toContain(`Config file generated at ${bold(defaults.config)}`);
302+
expect(logSpy.mock.calls[2][0]).toContain(`Config file generated at ${bold(defaults.config)}`);
298303
});
299304

300305
it('should have few default values', async () => {
@@ -334,7 +339,7 @@ describe('init', () => {
334339
expect(config.schema).toEqual(options.schema);
335340
expect(config.documents).toEqual(options.documents);
336341
expect(config.generates[options.output]).toBeDefined();
337-
expect(logSpy.mock.calls[1][0]).toContain(`Config file generated at ${bold(options.config)}`);
342+
expect(logSpy.mock.calls[2][0]).toContain(`Config file generated at ${bold(options.config)}`);
338343
});
339344

340345
it('custom setup', async () => {
@@ -392,7 +397,7 @@ describe('init', () => {
392397

393398
// logs
394399
const welcomeMsg = logSpy.mock.calls[0][0];
395-
const doneMsg = logSpy.mock.calls[1][0];
400+
const doneMsg = logSpy.mock.calls[2][0];
396401

397402
expect(welcomeMsg).toContain(`Welcome to ${bold('GraphQL Code Generator')}`);
398403
expect(doneMsg).toContain(`Config file generated at ${bold('codegen.yml')}`);

‎yarn.lock

+7-7
Original file line numberDiff line numberDiff line change
@@ -11051,20 +11051,20 @@ last-call-webpack-plugin@^3.0.0:
1105111051
lodash "^4.17.5"
1105211052
webpack-sources "^1.1.0"
1105311053

11054+
latest-version@5.1.0, latest-version@^5.0.0:
11055+
version "5.1.0"
11056+
resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face"
11057+
integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==
11058+
dependencies:
11059+
package-json "^6.3.0"
11060+
1105411061
latest-version@^3.0.0:
1105511062
version "3.1.0"
1105611063
resolved "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15"
1105711064
integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=
1105811065
dependencies:
1105911066
package-json "^4.0.0"
1106011067

11061-
latest-version@^5.0.0:
11062-
version "5.1.0"
11063-
resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face"
11064-
integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==
11065-
dependencies:
11066-
package-json "^6.3.0"
11067-
1106811068
lazy-cache@^0.2.3:
1106911069
version "0.2.7"
1107011070
resolved "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65"

0 commit comments

Comments
 (0)
Please sign in to comment.