@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 +13 -19
- package/package.json +1 -1
- package/src/preset.d.ts +4 -6
- package/src/preset.js +19 -19
- package/src/preset.js.map +1 -1
package/README.md
CHANGED
|
@@ -10,21 +10,16 @@ yarn add -D @eddeee888/gcg-typescript-resolver-files
|
|
|
10
10
|
|
|
11
11
|
## Features
|
|
12
12
|
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
- Detects missing / wrong resolver exports and adds them to
|
|
16
|
-
-
|
|
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
|
|
37
|
-
|
|
|
38
|
-
| `resolverTypesPath`
|
|
39
|
-
| `mode`
|
|
40
|
-
| `relativeTargetDir`
|
|
41
|
-
| `mainFile`
|
|
42
|
-
| `whitelistedModules`
|
|
43
|
-
| `externalResolvers`
|
|
44
|
-
| `
|
|
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
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
23
|
+
const { resolverTypesPath: relativeResolverTypesPathFromBaseOutputDir, relativeTargetDir, mainFile, mode, whitelistedModules, externalResolvers, typesPluginsConfig, } = validatePresetConfig(rawPresetConfig);
|
|
23
24
|
// typescript and typescript-resolvers
|
|
24
|
-
const { defaultScalarTypesMap, defaultScalarExternalResolvers } = Object.entries(
|
|
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[
|
|
35
|
+
res.defaultScalarTypesMap[schemaType] =
|
|
28
36
|
scalarResolver.extensions.codegenScalarType;
|
|
29
37
|
}
|
|
30
|
-
res.defaultScalarExternalResolvers[
|
|
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 = {},
|
|
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 (!
|
|
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
|
-
|
|
112
|
-
typeScriptResolversPluginConfig,
|
|
112
|
+
typesPluginsConfig,
|
|
113
113
|
};
|
|
114
114
|
};
|
|
115
|
-
const
|
|
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.
|
|
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":";;;AAAA,6BAA6B;AAC7B,kDAAkD;AAClD,gEAAgE;AAChE,mFAAmF;AACnF,qDAA+D;AAE/D,mCAAuC;AAEvC,+BAA4B;
|
|
1
|
+
{"version":3,"file":"preset.js","sourceRoot":"","sources":["../../../../packages/typescript-resolver-files/src/preset.ts"],"names":[],"mappings":"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"}
|