fork of hey-api/openapi-ts because I need some additional things
1import { valueToObject } from '../utils/config';
2import type { Parser, UserParser } from './types';
3
4export const defaultPaginationKeywords = [
5 'after',
6 'before',
7 'cursor',
8 'offset',
9 'page',
10 'start',
11] as const;
12
13export function getParser(userConfig: { parser?: UserParser }): Parser {
14 const parser = valueToObject({
15 defaultValue: {
16 hooks: {},
17 pagination: {
18 keywords: defaultPaginationKeywords,
19 },
20 transforms: {
21 enums: {
22 case: 'PascalCase',
23 enabled: false,
24 mode: 'root',
25 name: '{{name}}Enum',
26 },
27 propertiesRequiredByDefault: false,
28 readWrite: {
29 enabled: true,
30 requests: {
31 case: 'preserve',
32 name: '{{name}}Writable',
33 },
34 responses: {
35 case: 'preserve',
36 name: '{{name}}',
37 },
38 },
39 schemaName: undefined,
40 },
41 validate_EXPERIMENTAL: false,
42 },
43 mappers: {
44 object: (fields, defaultValue) => ({
45 ...fields,
46 pagination: valueToObject({
47 defaultValue: {
48 ...(defaultValue.pagination as Extract<
49 typeof defaultValue.pagination,
50 Record<string, unknown>
51 >),
52 },
53 value: fields.pagination,
54 }),
55 transforms: valueToObject({
56 defaultValue: {
57 ...(defaultValue.transforms as Extract<
58 typeof defaultValue.transforms,
59 Record<string, unknown>
60 >),
61 },
62 mappers: {
63 object: (fields, defaultValue) => ({
64 ...fields,
65 enums: valueToObject({
66 defaultValue: {
67 ...(defaultValue.enums as Extract<
68 typeof defaultValue.enums,
69 Record<string, unknown>
70 >),
71 enabled:
72 fields.enums !== undefined
73 ? Boolean(fields.enums)
74 : (
75 defaultValue.enums as Extract<
76 typeof defaultValue.enums,
77 Record<string, unknown>
78 >
79 ).enabled,
80 },
81 mappers: {
82 boolean: (enabled) => ({ enabled }),
83 string: (mode) => ({ mode }),
84 },
85 value: fields.enums,
86 }),
87 propertiesRequiredByDefault:
88 fields.propertiesRequiredByDefault !== undefined
89 ? fields.propertiesRequiredByDefault
90 : defaultValue.propertiesRequiredByDefault,
91 readWrite: valueToObject({
92 defaultValue: {
93 ...(defaultValue.readWrite as Extract<
94 typeof defaultValue.readWrite,
95 Record<string, unknown>
96 >),
97 enabled:
98 fields.readWrite !== undefined
99 ? Boolean(fields.readWrite)
100 : (
101 defaultValue.readWrite as Extract<
102 typeof defaultValue.readWrite,
103 Record<string, unknown>
104 >
105 ).enabled,
106 },
107 mappers: {
108 boolean: (enabled) => ({ enabled }),
109 object: (fields, defaultValue) => ({
110 ...fields,
111 requests: valueToObject({
112 defaultValue: {
113 ...(defaultValue.requests as Extract<
114 typeof defaultValue.requests,
115 Record<string, unknown>
116 >),
117 },
118 mappers: {
119 function: (name) => ({ name }),
120 string: (name) => ({ name }),
121 },
122 value: fields.requests,
123 }),
124 responses: valueToObject({
125 defaultValue: {
126 ...(defaultValue.responses as Extract<
127 typeof defaultValue.responses,
128 Record<string, unknown>
129 >),
130 },
131 mappers: {
132 function: (name) => ({ name }),
133 string: (name) => ({ name }),
134 },
135 value: fields.responses,
136 }),
137 }),
138 },
139 value: fields.readWrite,
140 }),
141 schemaName:
142 fields.schemaName !== undefined ? fields.schemaName : defaultValue.schemaName,
143 }),
144 },
145 value: fields.transforms,
146 }),
147 validate_EXPERIMENTAL:
148 fields.validate_EXPERIMENTAL === true ? 'warn' : fields.validate_EXPERIMENTAL,
149 }),
150 },
151 value: userConfig.parser,
152 });
153 return parser as Parser;
154}