Skip to content

Commit ea6df41

Browse files
committed
feat(js): add support for boolean type for query arguments
Part of #49
1 parent dd8e260 commit ea6df41

File tree

4 files changed

+21
-4
lines changed

4 files changed

+21
-4
lines changed

examples/js/express/mysql/endpoints.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,10 @@
9494
type: integer
9595
hidden:
9696
type: boolean
97+
params:
98+
query:
99+
hidden:
100+
type: boolean
97101

98102
- path: /v1/categories/:categoryId
99103
get:

examples/js/express/mysql/routes.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
const parseBoolean = (value) => {
2+
return value === 'true'
3+
}
4+
15
const register = (app, pool) => {
26

37
app.get('/v1/categories/count', (req, res, next) => {
@@ -61,7 +65,7 @@ const register = (app, pool) => {
6165
app.get('/v1/categories/search', (req, res, next) => {
6266
pool.query(
6367
'SELECT id , name , name_ru , slug , hidden FROM categories WHERE hidden = :hidden',
64-
{ "hidden": req.query.hidden },
68+
{ "hidden": parseBoolean(req.query.hidden) },
6569
(err, rows, fields) => {
6670
if (err) {
6771
return next(err)

src/cli.js

+6-2
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ const lengthOfLongestString = (arr) => arr
158158
)
159159

160160
// returns user-defined variable's type or null
161-
// Accepts method.dto.fields fieldsInfo
161+
// Accepts method.dto.fields or method.params as fieldsInfo
162162
const retrieveType = (fieldsInfo, fieldName) => {
163163
const hasTypeInfo = fieldsInfo.hasOwnProperty(fieldName) && fieldsInfo[fieldName].hasOwnProperty('type')
164164
if (hasTypeInfo) {
@@ -235,7 +235,7 @@ const createEndpoints = async (destDir, { lang }, config) => {
235235

236236
// [ "p.page", "b.num" ] => '"page": req.params.page, "num": req.body.num'
237237
// (used only with Express)
238-
"formatParamsAsJavaScriptObject": (params) => {
238+
"formatParamsAsJavaScriptObject": (params, method) => {
239239
if (params.length === 0) {
240240
return params
241241
}
@@ -245,6 +245,10 @@ const createEndpoints = async (destDir, { lang }, config) => {
245245
const bindTarget = p.substring(0, 1)
246246
const paramName = p.substring(2)
247247
const prefix = placeholdersMap['js'][bindTarget]
248+
// LATER: add support for path (method.params.path) and body (method.dto.fields) parameters
249+
if (method && bindTarget === 'q' && retrieveType(method.params.query, paramName) === 'boolean') {
250+
return `"${paramName}": parseBoolean(${prefix}.${paramName})`
251+
}
248252
return `"${paramName}": ${prefix}.${paramName}`
249253
}
250254
).join(', ')

src/templates/routes.js.ejs

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
<%# LATER: add it only when there is at least one parameter of boolean type -%>
2+
const parseBoolean = (value) => {
3+
return value === 'true'
4+
}
5+
16
const register = (app, pool) => {
27
<%
38
endpoints.forEach(function(endpoint) {
@@ -13,7 +18,7 @@ endpoints.forEach(function(endpoint) {
1318
const sql = formatQuery(method.query)
1419
const params = extractParamsFromQuery(method.query)
1520
const formattedParams = params.length > 0
16-
? '\n { ' + formatParamsAsJavaScriptObject(params) + ' },'
21+
? '\n { ' + formatParamsAsJavaScriptObject(params, method) + ' },'
1722
: ''
1823
1924
if (hasGetOne || hasGetMany) {

0 commit comments

Comments
 (0)