-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
presets.ts
63 lines (54 loc) · 1.43 KB
/
presets.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import { Types } from '@graphql-codegen/plugin-helpers';
import { resolve } from 'path';
export async function getPresetByName(
name: string,
loader: Types.PackageLoaderFn<{ preset?: Types.OutputPreset; default?: Types.OutputPreset }>
): Promise<Types.OutputPreset> {
const possibleNames = [
`@graphql-codegen/${name}`,
`@graphql-codegen/${name}-preset`,
name,
resolve(process.cwd(), name),
];
for (const moduleName of possibleNames) {
try {
const loaded = await loader(moduleName);
if (loaded && loaded.preset) {
return loaded.preset;
}
if (loaded && loaded.default) {
return loaded.default;
}
return loaded as Types.OutputPreset;
} catch (err) {
if (
/** CJS Error code */
err.code !== 'MODULE_NOT_FOUND' &&
/** ESM Error code */
err.code !== 'ERR_MODULE_NOT_FOUND'
) {
throw new Error(
`Unable to load preset matching ${name}
Unable to load preset matching '${name}'.
Reason:
${err.message}
`
);
}
}
}
const possibleNamesMsg = possibleNames
.map(name =>
`
- ${name}
`.trimRight()
)
.join('');
throw new Error(
`Unable to find preset matching ${name}
Unable to find preset matching '${name}'
Install one of the following packages:
${possibleNamesMsg}
`
);
}