@eddeee888/gcg-typescript-resolver-files 0.0.3 → 0.0.4
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 +11 -8
- package/package.json +4 -1
- package/src/preset.d.ts +17 -0
- package/src/preset.js +53 -7
- package/src/preset.js.map +1 -1
- package/CHANGELOG.md +0 -20
package/README.md
CHANGED
|
@@ -13,6 +13,7 @@ yarn add -D @eddeee888/gcg-typescript-resolver-files
|
|
|
13
13
|
- Follows opinionated folder/file structure with type-safety in mind to help finding query, mutation or object types easily
|
|
14
14
|
- Will _not_ overwrite existing logic
|
|
15
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)
|
|
16
17
|
|
|
17
18
|
## Example
|
|
18
19
|
|
|
@@ -32,11 +33,13 @@ generates:
|
|
|
32
33
|
|
|
33
34
|
## Config
|
|
34
35
|
|
|
35
|
-
| Name
|
|
36
|
-
|
|
|
37
|
-
| `resolverTypesPath`
|
|
38
|
-
| `mode`
|
|
39
|
-
| `relativeTargetDir`
|
|
40
|
-
| `mainFile`
|
|
41
|
-
| `whitelistedModules`
|
|
42
|
-
| `externalResolvers`
|
|
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 |
|
package/package.json
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eddeee888/gcg-typescript-resolver-files",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"dependencies": {
|
|
5
5
|
"@graphql-codegen/add": "^3.2.1",
|
|
6
|
+
"@graphql-codegen/typescript": "^2.8.1",
|
|
7
|
+
"@graphql-codegen/typescript-resolvers": "^2.7.5",
|
|
6
8
|
"@graphql-codegen/plugin-helpers": "^2.7.1",
|
|
7
9
|
"graphql": "^16.6.0",
|
|
10
|
+
"graphql-scalars": "^1.20.1",
|
|
8
11
|
"ts-morph": "^16.0.0"
|
|
9
12
|
},
|
|
10
13
|
"publishConfig": {
|
package/src/preset.d.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
+
import * as typeScriptPlugin from '@graphql-codegen/typescript';
|
|
2
|
+
import * as typeScriptResolversPlugin from '@graphql-codegen/typescript-resolvers';
|
|
1
3
|
import type { Types } from '@graphql-codegen/plugin-helpers';
|
|
4
|
+
interface ParsedTypeScriptPluginConfig extends typeScriptPlugin.TypeScriptPluginConfig {
|
|
5
|
+
scalars: Record<string, string>;
|
|
6
|
+
}
|
|
2
7
|
interface ParsedPresetConfig {
|
|
3
8
|
resolverTypesPath: string;
|
|
4
9
|
relativeTargetDir: string;
|
|
@@ -6,6 +11,18 @@ interface ParsedPresetConfig {
|
|
|
6
11
|
mode: 'merged' | 'modules';
|
|
7
12
|
whitelistedModules: string[];
|
|
8
13
|
externalResolvers: Record<string, string>;
|
|
14
|
+
typeScriptPluginConfig: ParsedTypeScriptPluginConfig;
|
|
15
|
+
typeScriptResolversPluginConfig: typeScriptResolversPlugin.TypeScriptResolversPluginConfig;
|
|
9
16
|
}
|
|
10
17
|
export declare const preset: Types.OutputPreset<ParsedPresetConfig>;
|
|
18
|
+
export interface TypeScriptResolverFilesPresetConfig {
|
|
19
|
+
resolverTypesPath?: string;
|
|
20
|
+
relativeTargetDir?: string;
|
|
21
|
+
mainFile?: string;
|
|
22
|
+
mode?: string;
|
|
23
|
+
whitelistedModules?: string[];
|
|
24
|
+
externalResolvers?: Record<string, string>;
|
|
25
|
+
typeScriptPluginConfig?: typeScriptPlugin.TypeScriptPluginConfig;
|
|
26
|
+
typeScriptResolversPluginConfig?: typeScriptResolversPlugin.TypeScriptResolversPluginConfig;
|
|
27
|
+
}
|
|
11
28
|
export {};
|
package/src/preset.js
CHANGED
|
@@ -3,6 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.preset = void 0;
|
|
4
4
|
const path = require("path");
|
|
5
5
|
const addPlugin = require("@graphql-codegen/add");
|
|
6
|
+
const typeScriptPlugin = require("@graphql-codegen/typescript");
|
|
7
|
+
const typeScriptResolversPlugin = require("@graphql-codegen/typescript-resolvers");
|
|
8
|
+
const graphql_scalars_1 = require("graphql-scalars");
|
|
6
9
|
const utils_1 = require("./utils");
|
|
7
10
|
const run_1 = require("./run");
|
|
8
11
|
const presetName = '@eddeee888/gcg-typescript-resolver-files';
|
|
@@ -16,8 +19,36 @@ exports.preset = {
|
|
|
16
19
|
throw new Error('Empty Sources. Make sure schema files are parsed correctly.');
|
|
17
20
|
}
|
|
18
21
|
const sourcesMap = (0, utils_1.parseSources)(sources);
|
|
19
|
-
const { resolverTypesPath: relativeResolverTypesPathFromBaseOutputDir, relativeTargetDir, mainFile, mode, whitelistedModules, externalResolvers, } = validatePresetConfig(rawPresetConfig);
|
|
20
|
-
|
|
22
|
+
const { resolverTypesPath: relativeResolverTypesPathFromBaseOutputDir, relativeTargetDir, mainFile, mode, whitelistedModules, externalResolvers, typeScriptPluginConfig, typeScriptResolversPluginConfig, } = validatePresetConfig(rawPresetConfig);
|
|
23
|
+
// typescript and typescript-resolvers
|
|
24
|
+
const { defaultScalarTypesMap, defaultScalarExternalResolvers } = Object.entries(graphql_scalars_1.resolvers).reduce((res, [scalarName, scalarResolver]) => {
|
|
25
|
+
if (scalarResolver.extensions.codegenScalarType &&
|
|
26
|
+
typeof scalarResolver.extensions.codegenScalarType === 'string') {
|
|
27
|
+
res.defaultScalarTypesMap[scalarName] =
|
|
28
|
+
scalarResolver.extensions.codegenScalarType;
|
|
29
|
+
}
|
|
30
|
+
res.defaultScalarExternalResolvers[scalarName] = `~graphql-scalars#${scalarResolver.name}Resolver`;
|
|
31
|
+
return res;
|
|
32
|
+
}, { defaultScalarTypesMap: {}, defaultScalarExternalResolvers: {} });
|
|
33
|
+
const resolverTypesFile = {
|
|
34
|
+
filename: path.join(baseOutputDir, relativeResolverTypesPathFromBaseOutputDir),
|
|
35
|
+
pluginMap: {
|
|
36
|
+
typescript: typeScriptPlugin,
|
|
37
|
+
'typescript-resolvers': typeScriptResolversPlugin,
|
|
38
|
+
},
|
|
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: {},
|
|
48
|
+
schema,
|
|
49
|
+
documents: [],
|
|
50
|
+
};
|
|
51
|
+
// typescript-resolver-types
|
|
21
52
|
const result = {
|
|
22
53
|
files: {},
|
|
23
54
|
externalImports: {},
|
|
@@ -27,26 +58,29 @@ exports.preset = {
|
|
|
27
58
|
schema: schemaAst,
|
|
28
59
|
sourcesMap,
|
|
29
60
|
baseOutputDir,
|
|
30
|
-
resolverTypesPath,
|
|
61
|
+
resolverTypesPath: path.join(baseOutputDir, relativeResolverTypesPathFromBaseOutputDir),
|
|
31
62
|
relativeTargetDir,
|
|
32
63
|
mainFile,
|
|
33
64
|
mode,
|
|
34
65
|
whitelistedModules,
|
|
35
|
-
externalResolvers,
|
|
66
|
+
externalResolvers: Object.assign(Object.assign({}, defaultScalarExternalResolvers), externalResolvers),
|
|
36
67
|
},
|
|
37
68
|
result,
|
|
38
69
|
});
|
|
39
|
-
|
|
70
|
+
// Prepare `generatesSection`
|
|
71
|
+
const generatesSection = Object.entries(result.files).map(([filename, { content }]) => ({
|
|
40
72
|
filename,
|
|
41
73
|
pluginMap: { add: addPlugin },
|
|
42
74
|
plugins: [{ add: { content } }],
|
|
43
|
-
schema,
|
|
44
75
|
config: {},
|
|
76
|
+
schema,
|
|
45
77
|
documents: [],
|
|
46
78
|
}));
|
|
79
|
+
generatesSection.push(resolverTypesFile);
|
|
80
|
+
return generatesSection;
|
|
47
81
|
},
|
|
48
82
|
};
|
|
49
|
-
const validatePresetConfig = ({ resolverTypesPath, relativeTargetDir = '', mainFile = 'index.ts', mode = 'modules', whitelistedModules, externalResolvers = {}, }) => {
|
|
83
|
+
const validatePresetConfig = ({ resolverTypesPath, relativeTargetDir = '', mainFile = 'index.ts', mode = 'modules', whitelistedModules, externalResolvers = {}, typeScriptPluginConfig = {}, typeScriptResolversPluginConfig = {}, }) => {
|
|
50
84
|
if (!resolverTypesPath) {
|
|
51
85
|
throw new Error(`Validation Error - ${presetName} - presetConfig.resolverTypesPath is required`);
|
|
52
86
|
}
|
|
@@ -64,6 +98,9 @@ const validatePresetConfig = ({ resolverTypesPath, relativeTargetDir = '', mainF
|
|
|
64
98
|
throw new Error(`Validation Error - ${presetName} - presetConfig.whitelistedModules can only be used with presetConfig.mode == "modules"`);
|
|
65
99
|
}
|
|
66
100
|
}
|
|
101
|
+
if (!validateTypeScriptPluginConfig(typeScriptPluginConfig)) {
|
|
102
|
+
throw new Error('Invalid typescriptPluginConfig. Should not see this.');
|
|
103
|
+
}
|
|
67
104
|
return {
|
|
68
105
|
resolverTypesPath,
|
|
69
106
|
relativeTargetDir,
|
|
@@ -71,6 +108,15 @@ const validatePresetConfig = ({ resolverTypesPath, relativeTargetDir = '', mainF
|
|
|
71
108
|
mode: mode,
|
|
72
109
|
whitelistedModules: whitelistedModules || [],
|
|
73
110
|
externalResolvers,
|
|
111
|
+
typeScriptPluginConfig,
|
|
112
|
+
typeScriptResolversPluginConfig,
|
|
74
113
|
};
|
|
75
114
|
};
|
|
115
|
+
const validateTypeScriptPluginConfig = (config) => {
|
|
116
|
+
config.scalars = config.scalars || {};
|
|
117
|
+
if (typeof config.scalars === 'string') {
|
|
118
|
+
throw new Error(`Validation Error - ${presetName} - presetConfig.typescriptPluginConfig.scalars of type "string" is not supported`);
|
|
119
|
+
}
|
|
120
|
+
return true;
|
|
121
|
+
};
|
|
76
122
|
//# sourceMappingURL=preset.js.map
|
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;
|
|
1
|
+
{"version":3,"file":"preset.js","sourceRoot":"","sources":["../../../../packages/typescript-resolver-files/src/preset.ts"],"names":[],"mappings":"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"}
|
package/CHANGELOG.md
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# @eddeee888/gcg-typescript-resolver-files
|
|
2
|
-
|
|
3
|
-
## 0.0.3
|
|
4
|
-
|
|
5
|
-
### Patch Changes
|
|
6
|
-
|
|
7
|
-
- 5065768: Turn to preset to better integrate with codegen
|
|
8
|
-
|
|
9
|
-
## 0.0.2
|
|
10
|
-
|
|
11
|
-
### Patch Changes
|
|
12
|
-
|
|
13
|
-
- 0a99233: Implement generating logic for Scalar type
|
|
14
|
-
- b2fe4da: Implement config.externalResolvers
|
|
15
|
-
|
|
16
|
-
## 0.0.1
|
|
17
|
-
|
|
18
|
-
### Patch Changes
|
|
19
|
-
|
|
20
|
-
- 49ffe7a: Initial publish
|