fork of hey-api/openapi-ts because I need some additional things
at feat/skip-token 45 lines 1.1 kB view raw
1import { regexp } from './regexp'; 2import type { ReservedList } from './reserved'; 3import { reserved } from './reserved'; 4 5export const safeAccessorName = (name: string): string => { 6 regexp.number.lastIndex = 0; 7 if (regexp.number.test(name)) { 8 return name.startsWith('-') ? `'${name}'` : name; 9 } 10 11 regexp.pythonIdentifier.lastIndex = 0; 12 if (regexp.pythonIdentifier.test(name)) { 13 return name; 14 } 15 return `'${name}'`; 16}; 17 18const safeName = (name: string, reserved: ReservedList): string => { 19 let sanitized = ''; 20 let index: number; 21 22 const first = name[0] ?? ''; 23 regexp.illegalStartCharacters.lastIndex = 0; 24 if (regexp.illegalStartCharacters.test(first)) { 25 sanitized += '_'; 26 index = 0; 27 } else { 28 sanitized += first; 29 index = 1; 30 } 31 32 while (index < name.length) { 33 const char = name[index] ?? ''; 34 sanitized += /^[a-zA-Z0-9_]$/.test(char) ? char : '_'; 35 index += 1; 36 } 37 38 if (reserved['~values'].has(sanitized)) { 39 sanitized = `${sanitized}_`; 40 } 41 42 return sanitized || '_'; 43}; 44 45export const safeRuntimeName = (name: string): string => safeName(name, reserved.runtime);