Skip to content

Commit

Permalink
fix: allow enum values to start with a number
Browse files Browse the repository at this point in the history
  • Loading branch information
aldis-ameriks committed Jan 26, 2024
1 parent d483415 commit ee50133
Show file tree
Hide file tree
Showing 12 changed files with 418 additions and 10 deletions.
5 changes: 3 additions & 2 deletions cjs/src/typescript.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,21 +20,22 @@ function sortByField (name) {

function toPascalCase (value) {
let replaced = value.replace(/((_|-|\s)\w)/g, (token) => token[1].toUpperCase())
replaced = replaced.replace(/((\d)\w)/g, (token) => token[0] + token[1].toUpperCase())
replaced = replaced.charAt(0).toUpperCase() + replaced.slice(1)
replaced = replaced.replace(/_|-|\s/g, '')
return replaced
}

function formatName (name) {
if (name.match(/(-|\s|\.)/g)) {
if (name.match(/(-|\s|\.)/g) || name.match(/^\d/)) {
name = `'${name}'`
}
return name
}

function formatEnumName (opts, name) {
if (opts.pascalEnums) {
return toPascalCase(name)
return formatName(toPascalCase(name))
}

return formatName(name)
Expand Down
4 changes: 2 additions & 2 deletions cjs/test/cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ t.test('reports success to stdout', t => {
})

child.on('close', () => {
t.equal(result.data, '✔ Generated types from 9 tables and 3 enums\n')
t.equal(result.data, '✔ Generated types from 9 tables and 4 enums\n')
})
})

Expand Down Expand Up @@ -167,7 +167,7 @@ t.test('generates types with header', t => {
})
})

t.test('generates types with pascal case enums', t => {
t.only('generates types with pascal case enums', t => {
t.plan(1)

const child = childProcess.spawn(process.execPath, [path.join(__dirname, '..', 'src', 'index.js'), connection, ssl ? '--ssl' : '', '--pascal-enums'], {
Expand Down
9 changes: 9 additions & 0 deletions cjs/test/helpers/setup-postgres.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,15 @@ module.exports.setupTestPostgres = setupTestPostgres; async function setupTestPo
'a_plane'
);
`

await sql`
CREATE TYPE "numeric_names" AS ENUM (
'1name',
'2Name',
'3-name',
'4_name'
);
`
} catch (e) { }

await sql`
Expand Down
5 changes: 3 additions & 2 deletions src/typescript.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,21 +20,22 @@ function sortByField (name) {

function toPascalCase (value) {
let replaced = value.replace(/((_|-|\s)\w)/g, (token) => token[1].toUpperCase())
replaced = replaced.replace(/((\d)\w)/g, (token) => token[0] + token[1].toUpperCase())
replaced = replaced.charAt(0).toUpperCase() + replaced.slice(1)
replaced = replaced.replace(/_|-|\s/g, '')
return replaced
}

function formatName (name) {
if (name.match(/(-|\s|\.)/g)) {
if (name.match(/(-|\s|\.)/g) || name.match(/^\d/)) {
name = `'${name}'`
}
return name
}

function formatEnumName (opts, name) {
if (opts.pascalEnums) {
return toPascalCase(name)
return formatName(toPascalCase(name))
}

return formatName(name)
Expand Down
84 changes: 84 additions & 0 deletions tap-snapshots/cjs/test/cli.js.test.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,13 @@ export enum Fruits {
orange = 'orange',
}
export enum NumericNames {
'1name' = '1name',
'2Name' = '2Name',
'3-name' = '3-name',
'4_name' = '4_name',
}
export enum SnakesOn {
a_plane = 'a_plane',
}
Expand Down Expand Up @@ -190,6 +197,13 @@ export enum Fruits {
orange = 'orange',
}
export enum NumericNames {
'1name' = '1name',
'2Name' = '2Name',
'3-name' = '3-name',
'4_name' = '4_name',
}
export enum SnakesOn {
a_plane = 'a_plane',
}
Expand Down Expand Up @@ -361,6 +375,13 @@ export enum Fruits {
orange = 'orange',
}
export enum NumericNames {
'1name' = '1name',
'2Name' = '2Name',
'3-name' = '3-name',
'4_name' = '4_name',
}
export enum SnakesOn {
a_plane = 'a_plane',
}
Expand Down Expand Up @@ -531,6 +552,13 @@ export enum Fruits {
orange = 'orange',
}
export enum NumericNames {
'1name' = '1name',
'2Name' = '2Name',
'3-name' = '3-name',
'4_name' = '4_name',
}
export enum SnakesOn {
a_plane = 'a_plane',
}
Expand Down Expand Up @@ -702,6 +730,13 @@ export enum Fruits {
orange = 'orange',
}
export enum NumericNames {
'1name' = '1name',
'2Name' = '2Name',
'3-name' = '3-name',
'4_name' = '4_name',
}
export enum SnakesOn {
a_plane = 'a_plane',
}
Expand Down Expand Up @@ -761,6 +796,13 @@ export enum Fruits {
orange = 'orange',
}
export enum NumericNames {
'1name' = '1name',
'2Name' = '2Name',
'3-name' = '3-name',
'4_name' = '4_name',
}
export enum SnakesOn {
a_plane = 'a_plane',
}
Expand Down Expand Up @@ -932,6 +974,13 @@ export enum Fruits {
orange = 'orange',
}
export enum NumericNames {
'1name' = '1name',
'2Name' = '2Name',
'3-name' = '3-name',
'4_name' = '4_name',
}
export enum SnakesOn {
a_plane = 'a_plane',
}
Expand Down Expand Up @@ -1238,6 +1287,13 @@ export enum Fruits {
orange = 'orange',
}
export enum NumericNames {
'1name' = '1name',
'2Name' = '2Name',
'3-name' = '3-name',
'4_name' = '4_name',
}
export enum SnakesOn {
a_plane = 'a_plane',
}
Expand Down Expand Up @@ -1409,6 +1465,13 @@ export enum Fruits {
orange = 'orange',
}
export enum NumericNames {
'1name' = '1name',
'2Name' = '2Name',
'3-name' = '3-name',
'4_name' = '4_name',
}
export enum SnakesOn {
a_plane = 'a_plane',
}
Expand Down Expand Up @@ -1580,6 +1643,13 @@ export enum Fruits {
Orange = 'orange',
}
export enum NumericNames {
'1Name' = '1name',
'2Name' = '2Name',
'3Name' = '3-name',
'4Name' = '4_name',
}
export enum SnakesOn {
APlane = 'a_plane',
}
Expand Down Expand Up @@ -1751,6 +1821,13 @@ export enum Fruits {
orange = 'orange',
}
export enum NumericNames {
'1name' = '1name',
'2Name' = '2Name',
'3-name' = '3-name',
'4_name' = '4_name',
}
export enum SnakesOn {
a_plane = 'a_plane',
}
Expand Down Expand Up @@ -1922,6 +1999,13 @@ export enum Fruits {
orange = 'orange',
}
export enum NumericNames {
'1name' = '1name',
'2Name' = '2Name',
'3-name' = '3-name',
'4_name' = '4_name',
}
export enum SnakesOn {
a_plane = 'a_plane',
}
Expand Down
67 changes: 66 additions & 1 deletion tap-snapshots/cjs/test/pg-typegen.js.test.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,15 @@ Object {
"orange",
],
},
Object {
"name": "numeric_names",
"values": Array [
"1name",
"2Name",
"3-name",
"4_name",
],
},
Object {
"name": "snakes_on",
"values": Array [
Expand Down Expand Up @@ -1360,6 +1369,13 @@ Object {
orange = 'orange',
}
export enum NumericNames {
'1name' = '1name',
'2Name' = '2Name',
'3-name' = '3-name',
'4_name' = '4_name',
}
export enum SnakesOn {
a_plane = 'a_plane',
}
Expand Down Expand Up @@ -1667,6 +1683,13 @@ export enum Fruits {
orange = 'orange',
}
export enum NumericNames {
'1name' = '1name',
'2Name' = '2Name',
'3-name' = '3-name',
'4_name' = '4_name',
}
export enum SnakesOn {
a_plane = 'a_plane',
}
Expand Down Expand Up @@ -1837,6 +1860,13 @@ export enum Fruits {
orange = 'orange',
}
export enum NumericNames {
'1name' = '1name',
'2Name' = '2Name',
'3-name' = '3-name',
'4_name' = '4_name',
}
export enum SnakesOn {
a_plane = 'a_plane',
}
Expand Down Expand Up @@ -1996,7 +2026,7 @@ export interface UserEntity {
`

exports['cjs/test/pg-typegen.js > TAP > generates types to file > must match snapshot 2'] = `
✔ Generated types from 9 tables and 3 enums
✔ Generated types from 9 tables and 4 enums
`

exports['cjs/test/pg-typegen.js > TAP > generates types with comments > must match snapshot 1'] = `
Expand All @@ -2011,6 +2041,13 @@ export enum Fruits {
orange = 'orange',
}
export enum NumericNames {
'1name' = '1name',
'2Name' = '2Name',
'3-name' = '3-name',
'4_name' = '4_name',
}
export enum SnakesOn {
a_plane = 'a_plane',
}
Expand Down Expand Up @@ -2194,6 +2231,13 @@ export enum Fruits {
orange = 'orange',
}
export enum NumericNames {
'1name' = '1name',
'2Name' = '2Name',
'3-name' = '3-name',
'4_name' = '4_name',
}
export enum SnakesOn {
a_plane = 'a_plane',
}
Expand Down Expand Up @@ -2525,6 +2569,13 @@ export enum Fruits {
orange = 'orange',
}
export enum NumericNames {
'1name' = '1name',
'2Name' = '2Name',
'3-name' = '3-name',
'4_name' = '4_name',
}
export enum SnakesOn {
a_plane = 'a_plane',
}
Expand Down Expand Up @@ -2830,6 +2881,13 @@ export enum Fruits {
orange = 'orange',
}
export enum NumericNames {
'1name' = '1name',
'2Name' = '2Name',
'3-name' = '3-name',
'4_name' = '4_name',
}
export enum SnakesOn {
a_plane = 'a_plane',
}
Expand Down Expand Up @@ -3125,6 +3183,13 @@ export enum Fruits {
orange = 'orange',
}
export enum NumericNames {
'1name' = '1name',
'2Name' = '2Name',
'3-name' = '3-name',
'4_name' = '4_name',
}
export enum SnakesOn {
a_plane = 'a_plane',
}
Expand Down
Loading

0 comments on commit ee50133

Please sign in to comment.