@eddeee888/gcg-typescript-resolver-files 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,21 +10,16 @@ yarn add -D @eddeee888/gcg-typescript-resolver-files
10
10
 
11
11
  ## Features
12
12
 
13
- - Follows opinionated folder/file structure with type-safety in mind to help finding query, mutation or object types easily
14
- - Will _not_ overwrite existing logic
15
- - Detects missing / wrong resolver exports and adds them to generated resolvers
16
- - Handles GraphQL Scalars with types and config from [graphql-scalars](https://github.com/Urigo/graphql-scalars)
13
+ - Generates opinionated folder/file structure with type-safety in mind to help finding query, mutation or object types easily
14
+ - Does _NOT_ overwrite existing resolver logic
15
+ - Detects missing / wrong resolver exports and adds them to resolver files
16
+ - Automatically sets up GraphQL Scalars with types and config from [graphql-scalars](https://github.com/Urigo/graphql-scalars) with ability to opt-out
17
17
 
18
18
  ## Example
19
19
 
20
20
  ```yml
21
21
  schema: '**/*.graphqls'
22
22
  generates:
23
- src/graphql/resolvers/types.generated.ts:
24
- plugins:
25
- - typescript
26
- - typescript-resolvers
27
-
28
23
  src/graphql/resolvers:
29
24
  preset: '@eddeee888/gcg-typescript-resolver-files'
30
25
  presetConfig:
@@ -33,13 +28,12 @@ generates:
33
28
 
34
29
  ## Config
35
30
 
36
- | Name | Type | Description |
37
- | --------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
38
- | `resolverTypesPath` | `string` | (Required) Relative path to type file generated by `typescript-resolvers` plugin. |
39
- | `mode` | `merged` or `modules` | (Default: `modules`) How files are collocated. `modules` detects containing dir of a schema file as "modules", then split resolvers into those modules. `merged` treats `baseOutputDir` as the one and only module and generates resolvers. |
40
- | `relativeTargetDir` | `string` | Relative path to target dir. For `config.mode=merged`, files will be generated into `<baseOutputDir>/<relativeTargetDir>`. For `config.mode=modules`, files will be generated into `<baseOutputDir>/<moduleName>/<relativeTargetDir>` |
41
- | `mainFile` | `string` | File that puts all generated resolvers together. Relative from `baseOutputDir` |
42
- | `whitelistedModules` | `Array<string>` | (Only works with `config.mode=modules`) Whitelists modules to generate files and main file for. Useful for gradual migrations. |
43
- | `externalResolvers` | `Record<string, string>` | Map of relative or absolute path (prefixed with `~`) to external or existing resolvers. e.g. `DateTime: ~graphql-scalars#DateTimeResolver`, `Query.me: '~@org/meResolver#default as meResolver'`, `User: 'otherResolvers#User as UserResolver'`. |
44
- | `typesSriptPluginConfig` | `(@graphql-codegen/typescript).TypeScriptPluginConfig` | [typescript config](https://www.the-guild.dev/graphql/codegen/plugins/typescript/typescript) to override the defaults |
45
- | `typeScriptResolversPluginConfig` | `(@graphql-codegen/typescript-resolvers).TypeScriptResolversPluginConfig` | [typescript-resolvers config](https://www.the-guild.dev/graphql/codegen/plugins/typescript/typescript-resolvers) to override the defaults |
31
+ | Name | Type | Description |
32
+ | -------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
33
+ | `resolverTypesPath` | `string` | (Required) Relative path to type file generated by `typescript-resolvers` plugin. |
34
+ | `mode` | `merged` or `modules` | (Default: `modules`) How files are collocated. `modules` detects containing dir of a schema file as "modules", then split resolvers into those modules. `merged` treats `baseOutputDir` as the one and only module and generates resolvers. |
35
+ | `relativeTargetDir` | `string` | Relative path to target dir. For `config.mode=merged`, files will be generated into `<baseOutputDir>/<relativeTargetDir>`. For `config.mode=modules`, files will be generated into `<baseOutputDir>/<moduleName>/<relativeTargetDir>` |
36
+ | `mainFile` | `string` | File that puts all generated resolvers together. Relative from `baseOutputDir` |
37
+ | `whitelistedModules` | `Array<string>` | (Only works with `config.mode=modules`) Whitelists modules to generate files and main file for. Useful for gradual migrations. |
38
+ | `externalResolvers` | `Record<string, string>` | Map of relative or absolute path (prefixed with `~`) to external or existing resolvers. e.g. `DateTime: ~graphql-scalars#DateTimeResolver`, `Query.me: '~@org/meResolver#default as meResolver'`, `User: 'otherResolvers#User as UserResolver'`. |
39
+ | `typesPluginsConfig` | `(@graphql-codegen/typescript).TypeScriptPluginConfig & (@graphql-codegen/typescript-resolvers).TypeScriptResolversPluginConfig` | Takes [typescript config](https://www.the-guild.dev/graphql/codegen/plugins/typescript/typescript) and [typescript-resolvers config](https://www.the-guild.dev/graphql/codegen/plugins/typescript/typescript-resolvers) to override the defaults |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eddeee888/gcg-typescript-resolver-files",
3
- "version": "0.0.4",
3
+ "version": "0.0.5",
4
4
  "dependencies": {
5
5
  "@graphql-codegen/add": "^3.2.1",
6
6
  "@graphql-codegen/typescript": "^2.8.1",
package/src/preset.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import * as typeScriptPlugin from '@graphql-codegen/typescript';
2
2
  import * as typeScriptResolversPlugin from '@graphql-codegen/typescript-resolvers';
3
3
  import type { Types } from '@graphql-codegen/plugin-helpers';
4
- interface ParsedTypeScriptPluginConfig extends typeScriptPlugin.TypeScriptPluginConfig {
4
+ declare type ParsedTypesPluginsConfig = Omit<typeScriptPlugin.TypeScriptPluginConfig, 'scalars'> & Omit<typeScriptResolversPlugin.TypeScriptResolversPluginConfig, 'scalars'> & {
5
5
  scalars: Record<string, string>;
6
- }
6
+ };
7
7
  interface ParsedPresetConfig {
8
8
  resolverTypesPath: string;
9
9
  relativeTargetDir: string;
@@ -11,8 +11,7 @@ interface ParsedPresetConfig {
11
11
  mode: 'merged' | 'modules';
12
12
  whitelistedModules: string[];
13
13
  externalResolvers: Record<string, string>;
14
- typeScriptPluginConfig: ParsedTypeScriptPluginConfig;
15
- typeScriptResolversPluginConfig: typeScriptResolversPlugin.TypeScriptResolversPluginConfig;
14
+ typesPluginsConfig: ParsedTypesPluginsConfig;
16
15
  }
17
16
  export declare const preset: Types.OutputPreset<ParsedPresetConfig>;
18
17
  export interface TypeScriptResolverFilesPresetConfig {
@@ -22,7 +21,6 @@ export interface TypeScriptResolverFilesPresetConfig {
22
21
  mode?: string;
23
22
  whitelistedModules?: string[];
24
23
  externalResolvers?: Record<string, string>;
25
- typeScriptPluginConfig?: typeScriptPlugin.TypeScriptPluginConfig;
26
- typeScriptResolversPluginConfig?: typeScriptResolversPlugin.TypeScriptResolversPluginConfig;
24
+ typesPluginsConfig?: typeScriptPlugin.TypeScriptPluginConfig & typeScriptResolversPlugin.TypeScriptResolversPluginConfig;
27
25
  }
28
26
  export {};
package/src/preset.js CHANGED
@@ -8,6 +8,7 @@ const typeScriptResolversPlugin = require("@graphql-codegen/typescript-resolvers
8
8
  const graphql_scalars_1 = require("graphql-scalars");
9
9
  const utils_1 = require("./utils");
10
10
  const run_1 = require("./run");
11
+ const graphql_1 = require("graphql");
11
12
  const presetName = '@eddeee888/gcg-typescript-resolver-files';
12
13
  exports.preset = {
13
14
  buildGeneratesSection: ({ schema, schemaAst, presetConfig: rawPresetConfig, baseOutputDir, }) => {
@@ -19,15 +20,22 @@ exports.preset = {
19
20
  throw new Error('Empty Sources. Make sure schema files are parsed correctly.');
20
21
  }
21
22
  const sourcesMap = (0, utils_1.parseSources)(sources);
22
- const { resolverTypesPath: relativeResolverTypesPathFromBaseOutputDir, relativeTargetDir, mainFile, mode, whitelistedModules, externalResolvers, typeScriptPluginConfig, typeScriptResolversPluginConfig, } = validatePresetConfig(rawPresetConfig);
23
+ const { resolverTypesPath: relativeResolverTypesPathFromBaseOutputDir, relativeTargetDir, mainFile, mode, whitelistedModules, externalResolvers, typesPluginsConfig, } = validatePresetConfig(rawPresetConfig);
23
24
  // typescript and typescript-resolvers
24
- const { defaultScalarTypesMap, defaultScalarExternalResolvers } = Object.entries(graphql_scalars_1.resolvers).reduce((res, [scalarName, scalarResolver]) => {
25
+ const { defaultScalarTypesMap, defaultScalarExternalResolvers } = Object.entries(schemaAst.getTypeMap()).reduce((res, [schemaType, namedType]) => {
26
+ if (!(0, graphql_1.isScalarType)(namedType)) {
27
+ return res;
28
+ }
29
+ const scalarResolver = graphql_scalars_1.resolvers[schemaType];
30
+ if (!scalarResolver) {
31
+ return res;
32
+ }
25
33
  if (scalarResolver.extensions.codegenScalarType &&
26
34
  typeof scalarResolver.extensions.codegenScalarType === 'string') {
27
- res.defaultScalarTypesMap[scalarName] =
35
+ res.defaultScalarTypesMap[schemaType] =
28
36
  scalarResolver.extensions.codegenScalarType;
29
37
  }
30
- res.defaultScalarExternalResolvers[scalarName] = `~graphql-scalars#${scalarResolver.name}Resolver`;
38
+ res.defaultScalarExternalResolvers[schemaType] = `~graphql-scalars#${scalarResolver.name}Resolver`;
31
39
  return res;
32
40
  }, { defaultScalarTypesMap: {}, defaultScalarExternalResolvers: {} });
33
41
  const resolverTypesFile = {
@@ -36,15 +44,8 @@ exports.preset = {
36
44
  typescript: typeScriptPlugin,
37
45
  'typescript-resolvers': typeScriptResolversPlugin,
38
46
  },
39
- plugins: [
40
- {
41
- typescript: Object.assign(Object.assign({ enumsAsTypes: true, nonOptionalTypename: true }, typeScriptPluginConfig), { scalars: Object.assign(Object.assign({}, defaultScalarTypesMap), typeScriptPluginConfig.scalars) }),
42
- },
43
- {
44
- ['typescript-resolvers']: Object.assign({}, typeScriptResolversPluginConfig),
45
- },
46
- ],
47
- config: {},
47
+ plugins: [{ typescript: {} }, { ['typescript-resolvers']: {} }],
48
+ config: Object.assign(Object.assign({ enumsAsTypes: true, nonOptionalTypename: true }, typesPluginsConfig), { scalars: Object.assign(Object.assign({}, defaultScalarTypesMap), typesPluginsConfig.scalars) }),
48
49
  schema,
49
50
  documents: [],
50
51
  };
@@ -80,7 +81,7 @@ exports.preset = {
80
81
  return generatesSection;
81
82
  },
82
83
  };
83
- const validatePresetConfig = ({ resolverTypesPath, relativeTargetDir = '', mainFile = 'index.ts', mode = 'modules', whitelistedModules, externalResolvers = {}, typeScriptPluginConfig = {}, typeScriptResolversPluginConfig = {}, }) => {
84
+ const validatePresetConfig = ({ resolverTypesPath, relativeTargetDir = '', mainFile = 'index.ts', mode = 'modules', whitelistedModules, externalResolvers = {}, typesPluginsConfig = {}, }) => {
84
85
  if (!resolverTypesPath) {
85
86
  throw new Error(`Validation Error - ${presetName} - presetConfig.resolverTypesPath is required`);
86
87
  }
@@ -98,7 +99,7 @@ const validatePresetConfig = ({ resolverTypesPath, relativeTargetDir = '', mainF
98
99
  throw new Error(`Validation Error - ${presetName} - presetConfig.whitelistedModules can only be used with presetConfig.mode == "modules"`);
99
100
  }
100
101
  }
101
- if (!validateTypeScriptPluginConfig(typeScriptPluginConfig)) {
102
+ if (!validateTypesPluginsConfig(typesPluginsConfig)) {
102
103
  throw new Error('Invalid typescriptPluginConfig. Should not see this.');
103
104
  }
104
105
  return {
@@ -108,14 +109,13 @@ const validatePresetConfig = ({ resolverTypesPath, relativeTargetDir = '', mainF
108
109
  mode: mode,
109
110
  whitelistedModules: whitelistedModules || [],
110
111
  externalResolvers,
111
- typeScriptPluginConfig,
112
- typeScriptResolversPluginConfig,
112
+ typesPluginsConfig,
113
113
  };
114
114
  };
115
- const validateTypeScriptPluginConfig = (config) => {
115
+ const validateTypesPluginsConfig = (config) => {
116
116
  config.scalars = config.scalars || {};
117
117
  if (typeof config.scalars === 'string') {
118
- throw new Error(`Validation Error - ${presetName} - presetConfig.typescriptPluginConfig.scalars of type "string" is not supported`);
118
+ throw new Error(`Validation Error - ${presetName} - presetConfig.typesPluginsConfig.scalars of type "string" is not supported`);
119
119
  }
120
120
  return true;
121
121
  };
package/src/preset.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"preset.js","sourceRoot":"","sources":["../../../../packages/typescript-resolver-files/src/preset.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preset.js","sourceRoot":"","sources":["../../../../packages/typescript-resolver-files/src/preset.ts"],"names":[],"mappings":"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"}