Skip to content

Commit 629fc35

Browse files
committed
feat: allow url_builder param types to be string, number, boolean, and bigint
1 parent 2271c4e commit 629fc35

File tree

2 files changed

+88
-79
lines changed

2 files changed

+88
-79
lines changed

src/router/main.ts

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -609,15 +609,15 @@ export class Router {
609609
for (let token of route.tokens) {
610610
if (token.type === 1) {
611611
hasRequiredParams = true
612-
params.push(`'${token.val}': string`)
613-
paramsTuple.push('string')
612+
params.push(`'${token.val}': ParamValue`)
613+
paramsTuple.push('ParamValue')
614614
} else if (token.type === 3) {
615-
params.push(`'${token.val}'?: string`)
616-
paramsTuple.push('string?')
615+
params.push(`'${token.val}'?: ParamValue`)
616+
paramsTuple.push('ParamValue?')
617617
} else if (token.type === 2) {
618618
hasRequiredParams = true
619-
params.push(`'*': string[]`)
620-
paramsTuple.push('...string[]')
619+
params.push(`'*': ParamValue[]`)
620+
paramsTuple.push('...ParamValue[]')
621621
break
622622
}
623623
}
@@ -666,26 +666,29 @@ export class Router {
666666
)
667667

668668
return Object.keys(routesList)
669-
.reduce<string[]>((result, method) => {
670-
result.push(`${' '.repeat(indentation)}${method}: {`)
669+
.reduce<string[]>(
670+
(result, method) => {
671+
result.push(`${' '.repeat(indentation)}${method}: {`)
671672

672-
Object.keys(routesList[method]).forEach((identifier) => {
673-
const key = `'${identifier}'`
674-
const { paramsTuple, hasRequiredParams, params } = routesList[method][identifier]
673+
Object.keys(routesList[method]).forEach((identifier) => {
674+
const key = `'${identifier}'`
675+
const { paramsTuple, hasRequiredParams, params } = routesList[method][identifier]
675676

676-
const dictName = hasRequiredParams ? 'params' : 'params?'
677-
const tupleName = hasRequiredParams ? 'paramsTuple' : 'paramsTuple?'
678-
const dictValue = `{${params.join(',')}}`
679-
const tupleValue = `[${paramsTuple?.join(',')}]`
677+
const dictName = hasRequiredParams ? 'params' : 'params?'
678+
const tupleName = hasRequiredParams ? 'paramsTuple' : 'paramsTuple?'
679+
const dictValue = `{${params.join(',')}}`
680+
const tupleValue = `[${paramsTuple?.join(',')}]`
680681

681-
const value = `{ ${tupleName}: ${tupleValue}; ${dictName}: ${dictValue} }`
682-
result.push(`${' '.repeat(indentation + 2)}${key}: ${value}`)
683-
})
682+
const value = `{ ${tupleName}: ${tupleValue}; ${dictName}: ${dictValue} }`
683+
result.push(`${' '.repeat(indentation + 2)}${key}: ${value}`)
684+
})
684685

685-
result.push(`${' '.repeat(indentation)}}`)
686+
result.push(`${' '.repeat(indentation)}}`)
686687

687-
return result
688-
}, [])
688+
return result
689+
},
690+
[`type ParamValue = string | number | bigint | boolean`, '']
691+
)
689692
.join('\n')
690693
}
691694

tests/router/router.spec.ts

Lines changed: 64 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1588,41 +1588,43 @@ test.group('Router | generateTypes', () => {
15881588

15891589
router.commit()
15901590
assert.snapshot(router.generateTypes()).matchInline(`
1591-
"ALL: {
1591+
"type ParamValue = string | number | bigint | boolean
1592+
1593+
ALL: {
15921594
'api.posts.index': { paramsTuple?: []; params?: {} }
15931595
'api.posts.create': { paramsTuple?: []; params?: {} }
15941596
'api.posts.store': { paramsTuple?: []; params?: {} }
1595-
'api.posts.show': { paramsTuple: [string]; params: {'id': string} }
1596-
'api.posts.edit': { paramsTuple: [string]; params: {'id': string} }
1597-
'api.posts.update': { paramsTuple: [string]; params: {'id': string} }
1598-
'api.posts.destroy': { paramsTuple: [string]; params: {'id': string} }
1597+
'api.posts.show': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1598+
'api.posts.edit': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1599+
'api.posts.update': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1600+
'api.posts.destroy': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
15991601
'comments.index': { paramsTuple?: []; params?: {} }
16001602
}
16011603
GET: {
16021604
'api.posts.index': { paramsTuple?: []; params?: {} }
16031605
'api.posts.create': { paramsTuple?: []; params?: {} }
1604-
'api.posts.show': { paramsTuple: [string]; params: {'id': string} }
1605-
'api.posts.edit': { paramsTuple: [string]; params: {'id': string} }
1606+
'api.posts.show': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1607+
'api.posts.edit': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
16061608
'comments.index': { paramsTuple?: []; params?: {} }
16071609
}
16081610
HEAD: {
16091611
'api.posts.index': { paramsTuple?: []; params?: {} }
16101612
'api.posts.create': { paramsTuple?: []; params?: {} }
1611-
'api.posts.show': { paramsTuple: [string]; params: {'id': string} }
1612-
'api.posts.edit': { paramsTuple: [string]; params: {'id': string} }
1613+
'api.posts.show': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1614+
'api.posts.edit': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
16131615
'comments.index': { paramsTuple?: []; params?: {} }
16141616
}
16151617
POST: {
16161618
'api.posts.store': { paramsTuple?: []; params?: {} }
16171619
}
16181620
PUT: {
1619-
'api.posts.update': { paramsTuple: [string]; params: {'id': string} }
1621+
'api.posts.update': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
16201622
}
16211623
PATCH: {
1622-
'api.posts.update': { paramsTuple: [string]; params: {'id': string} }
1624+
'api.posts.update': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
16231625
}
16241626
DELETE: {
1625-
'api.posts.destroy': { paramsTuple: [string]; params: {'id': string} }
1627+
'api.posts.destroy': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
16261628
}"
16271629
`)
16281630
})
@@ -1650,57 +1652,59 @@ test.group('Router | generateTypes', () => {
16501652

16511653
router.commit()
16521654
assert.snapshot(router.generateTypes()).matchInline(`
1653-
"ALL: {
1655+
"type ParamValue = string | number | bigint | boolean
1656+
1657+
ALL: {
16541658
'api.posts.index': { paramsTuple?: []; params?: {} }
16551659
'api.posts.create': { paramsTuple?: []; params?: {} }
16561660
'api.posts.store': { paramsTuple?: []; params?: {} }
1657-
'api.posts.show': { paramsTuple: [string]; params: {'id': string} }
1658-
'api.posts.edit': { paramsTuple: [string]; params: {'id': string} }
1659-
'api.posts.update': { paramsTuple: [string]; params: {'id': string} }
1660-
'api.posts.destroy': { paramsTuple: [string]; params: {'id': string} }
1661+
'api.posts.show': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1662+
'api.posts.edit': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1663+
'api.posts.update': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1664+
'api.posts.destroy': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
16611665
'[email protected]': { paramsTuple?: []; params?: {} }
16621666
'[email protected]': { paramsTuple?: []; params?: {} }
16631667
'[email protected]': { paramsTuple?: []; params?: {} }
1664-
'[email protected]': { paramsTuple: [string]; params: {'id': string} }
1665-
'[email protected]': { paramsTuple: [string]; params: {'id': string} }
1666-
'[email protected]': { paramsTuple: [string]; params: {'id': string} }
1667-
'[email protected]': { paramsTuple: [string]; params: {'id': string} }
1668+
'[email protected]': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1669+
'[email protected]': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1670+
'[email protected]': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1671+
'[email protected]': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
16681672
}
16691673
GET: {
16701674
'api.posts.index': { paramsTuple?: []; params?: {} }
16711675
'api.posts.create': { paramsTuple?: []; params?: {} }
1672-
'api.posts.show': { paramsTuple: [string]; params: {'id': string} }
1673-
'api.posts.edit': { paramsTuple: [string]; params: {'id': string} }
1676+
'api.posts.show': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1677+
'api.posts.edit': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
16741678
'[email protected]': { paramsTuple?: []; params?: {} }
16751679
'[email protected]': { paramsTuple?: []; params?: {} }
1676-
'[email protected]': { paramsTuple: [string]; params: {'id': string} }
1677-
'[email protected]': { paramsTuple: [string]; params: {'id': string} }
1680+
'[email protected]': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1681+
'[email protected]': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
16781682
}
16791683
HEAD: {
16801684
'api.posts.index': { paramsTuple?: []; params?: {} }
16811685
'api.posts.create': { paramsTuple?: []; params?: {} }
1682-
'api.posts.show': { paramsTuple: [string]; params: {'id': string} }
1683-
'api.posts.edit': { paramsTuple: [string]; params: {'id': string} }
1686+
'api.posts.show': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1687+
'api.posts.edit': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
16841688
'[email protected]': { paramsTuple?: []; params?: {} }
16851689
'[email protected]': { paramsTuple?: []; params?: {} }
1686-
'[email protected]': { paramsTuple: [string]; params: {'id': string} }
1687-
'[email protected]': { paramsTuple: [string]; params: {'id': string} }
1690+
'[email protected]': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1691+
'[email protected]': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
16881692
}
16891693
POST: {
16901694
'api.posts.store': { paramsTuple?: []; params?: {} }
16911695
'[email protected]': { paramsTuple?: []; params?: {} }
16921696
}
16931697
PUT: {
1694-
'api.posts.update': { paramsTuple: [string]; params: {'id': string} }
1695-
'[email protected]': { paramsTuple: [string]; params: {'id': string} }
1698+
'api.posts.update': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1699+
'[email protected]': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
16961700
}
16971701
PATCH: {
1698-
'api.posts.update': { paramsTuple: [string]; params: {'id': string} }
1699-
'[email protected]': { paramsTuple: [string]; params: {'id': string} }
1702+
'api.posts.update': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1703+
'[email protected]': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
17001704
}
17011705
DELETE: {
1702-
'api.posts.destroy': { paramsTuple: [string]; params: {'id': string} }
1703-
'[email protected]': { paramsTuple: [string]; params: {'id': string} }
1706+
'api.posts.destroy': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1707+
'[email protected]': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
17041708
}"
17051709
`)
17061710
})
@@ -1730,57 +1734,59 @@ test.group('Router | generateTypes', () => {
17301734

17311735
router.commit()
17321736
assert.snapshot(router.generateTypes()).matchInline(`
1733-
"ALL: {
1737+
"type ParamValue = string | number | bigint | boolean
1738+
1739+
ALL: {
17341740
'api.posts.index': { paramsTuple?: []; params?: {} }
17351741
'api.posts.create': { paramsTuple?: []; params?: {} }
17361742
'api.posts.store': { paramsTuple?: []; params?: {} }
1737-
'api.posts.show': { paramsTuple: [string]; params: {'id': string} }
1738-
'api.posts.edit': { paramsTuple: [string]; params: {'id': string} }
1739-
'api.posts.update': { paramsTuple: [string]; params: {'id': string} }
1740-
'api.posts.destroy': { paramsTuple: [string]; params: {'id': string} }
1743+
'api.posts.show': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1744+
'api.posts.edit': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1745+
'api.posts.update': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1746+
'api.posts.destroy': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
17411747
'api.comments.index': { paramsTuple?: []; params?: {} }
17421748
'api.comments.create': { paramsTuple?: []; params?: {} }
17431749
'api.comments.store': { paramsTuple?: []; params?: {} }
1744-
'api.comments.show': { paramsTuple: [string]; params: {'id': string} }
1745-
'api.comments.edit': { paramsTuple: [string]; params: {'id': string} }
1746-
'api.comments.update': { paramsTuple: [string]; params: {'id': string} }
1747-
'api.comments.destroy': { paramsTuple: [string]; params: {'id': string} }
1750+
'api.comments.show': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1751+
'api.comments.edit': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1752+
'api.comments.update': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1753+
'api.comments.destroy': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
17481754
}
17491755
GET: {
17501756
'api.posts.index': { paramsTuple?: []; params?: {} }
17511757
'api.posts.create': { paramsTuple?: []; params?: {} }
1752-
'api.posts.show': { paramsTuple: [string]; params: {'id': string} }
1753-
'api.posts.edit': { paramsTuple: [string]; params: {'id': string} }
1758+
'api.posts.show': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1759+
'api.posts.edit': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
17541760
'api.comments.index': { paramsTuple?: []; params?: {} }
17551761
'api.comments.create': { paramsTuple?: []; params?: {} }
1756-
'api.comments.show': { paramsTuple: [string]; params: {'id': string} }
1757-
'api.comments.edit': { paramsTuple: [string]; params: {'id': string} }
1762+
'api.comments.show': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1763+
'api.comments.edit': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
17581764
}
17591765
HEAD: {
17601766
'api.posts.index': { paramsTuple?: []; params?: {} }
17611767
'api.posts.create': { paramsTuple?: []; params?: {} }
1762-
'api.posts.show': { paramsTuple: [string]; params: {'id': string} }
1763-
'api.posts.edit': { paramsTuple: [string]; params: {'id': string} }
1768+
'api.posts.show': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1769+
'api.posts.edit': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
17641770
'api.comments.index': { paramsTuple?: []; params?: {} }
17651771
'api.comments.create': { paramsTuple?: []; params?: {} }
1766-
'api.comments.show': { paramsTuple: [string]; params: {'id': string} }
1767-
'api.comments.edit': { paramsTuple: [string]; params: {'id': string} }
1772+
'api.comments.show': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1773+
'api.comments.edit': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
17681774
}
17691775
POST: {
17701776
'api.posts.store': { paramsTuple?: []; params?: {} }
17711777
'api.comments.store': { paramsTuple?: []; params?: {} }
17721778
}
17731779
PUT: {
1774-
'api.posts.update': { paramsTuple: [string]; params: {'id': string} }
1775-
'api.comments.update': { paramsTuple: [string]; params: {'id': string} }
1780+
'api.posts.update': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1781+
'api.comments.update': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
17761782
}
17771783
PATCH: {
1778-
'api.posts.update': { paramsTuple: [string]; params: {'id': string} }
1779-
'api.comments.update': { paramsTuple: [string]; params: {'id': string} }
1784+
'api.posts.update': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1785+
'api.comments.update': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
17801786
}
17811787
DELETE: {
1782-
'api.posts.destroy': { paramsTuple: [string]; params: {'id': string} }
1783-
'api.comments.destroy': { paramsTuple: [string]; params: {'id': string} }
1788+
'api.posts.destroy': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
1789+
'api.comments.destroy': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
17841790
}"
17851791
`)
17861792
})

0 commit comments

Comments
 (0)