Skip to content

Commit

Permalink
feat(typescript): sort keys & values (#4)
Browse files Browse the repository at this point in the history
  • Loading branch information
hougesen authored Mar 17, 2023
1 parent 54a5865 commit c4bcf5a
Showing 1 changed file with 14 additions and 2 deletions.
16 changes: 14 additions & 2 deletions src/typescript/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,16 @@ function typeofToType(value: unknown): TypeScriptTypes | 'Array' {
return 'unknown';
}

function keySort(a: string, b: string) {
return a < b ? -1 : 1;
}

function containerSort(a: string, b: string): number {
if (a?.length === b.length) return keySort(a, b);

return a.length < b.length ? -1 : 1;
}

function parseToTypeScript(text: any, options?: JSONToTypeScriptOptions) {
let textType = typeofToType(text);

Expand All @@ -62,7 +72,9 @@ function parseToTypeScript(text: any, options?: JSONToTypeScriptOptions) {
}
}

let inner = values?.size ? Array.from(values).join('|') : options?.overwrites?.array ?? 'unknown';
let inner = values?.size
? Array.from(values).sort(containerSort).join('|')
: options?.overwrites?.array ?? 'unknown';

return (options?.useSetInsteadOfArray ? 'Set' : 'Array') + '<' + inner + '>';
}
Expand All @@ -74,7 +86,7 @@ function parseToTypeScript(text: any, options?: JSONToTypeScriptOptions) {
return 'Record<string,' + options?.overwrites?.object ?? 'unknown' + '>';
}

entries.sort((a, b) => (a[0] < b[0] ? -1 : 1));
entries.sort((a, b) => keySort(a[0], b[0]));

let inner = '{';

Expand Down

0 comments on commit c4bcf5a

Please sign in to comment.