fork of hey-api/openapi-ts because I need some additional things
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);