fork of hey-api/openapi-ts because I need some additional things
at feat/skip-token 154 lines 5.1 kB view raw
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}