Skip to content

Commit 83ff105

Browse files
committed
fix(cli): escape char sequences for javascript comments
1 parent 6d71439 commit 83ff105

File tree

8 files changed

+36
-13
lines changed

8 files changed

+36
-13
lines changed

packages/cli/generators/openapi/index.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
const BaseGenerator = require('../../lib/base-generator');
99
const {debug, debugJson} = require('./utils');
1010
const {loadAndBuildSpec} = require('./spec-loader');
11-
const {validateUrlOrFile} = require('./utils');
11+
const {validateUrlOrFile, escapeComment} = require('./utils');
1212
const {getControllerFileName} = require('./spec-helper');
1313

1414
const updateIndex = require('../../lib/update-index');
@@ -135,7 +135,7 @@ module.exports = class OpenApiGenerator extends BaseGenerator {
135135
if (debug.enabled) {
136136
debug('Copying artifact to: %s', dest);
137137
}
138-
this.copyTemplatedFiles(source, dest, c);
138+
this.copyTemplatedFiles(source, dest, mixinEscapeComment(c));
139139
}
140140
}
141141

@@ -153,7 +153,7 @@ module.exports = class OpenApiGenerator extends BaseGenerator {
153153
debug('Copying artifact to: %s', dest);
154154
}
155155
const source = m.kind === 'class' ? modelSource : typeSource;
156-
this.copyTemplatedFiles(source, dest, m);
156+
this.copyTemplatedFiles(source, dest, mixinEscapeComment(m));
157157
}
158158
}
159159

@@ -173,3 +173,7 @@ module.exports = class OpenApiGenerator extends BaseGenerator {
173173
if (this.shouldExit()) return;
174174
}
175175
};
176+
177+
function mixinEscapeComment(context) {
178+
return Object.assign(context, {escapeComment});
179+
}

packages/cli/generators/openapi/templates/src/controllers/controller-template.ts.ejs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ imports.forEach(i => {
1111
/**
1212
* The controller class is generated from OpenAPI spec with operations tagged
1313
* by <%- tag %>
14-
* <%- description %>
14+
* <%- escapeComment(description) %>
1515
*/
1616
export class <%- className %> {
1717
constructor() {}
1818

1919
<%_ for (const m of methods) { -%>
2020
/**
2121
<%_ for (const c of m.comments) { -%>
22-
* <%- c %>
22+
* <%- escapeComment(c) %>
2323
<%_ } -%>
2424
*/
2525
<%- m.decoration %>

packages/cli/generators/openapi/templates/src/models/model-template.ts.ejs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ imports.forEach(i => {
2020

2121
/**
2222
* The model class is generated from OpenAPI schema - <%- name %>
23-
* <%- description %>
23+
* <%- escapeComment(description) %>
2424
*/
2525
@model({name: '<%- name %>'})
2626
export class <%- className %> {
@@ -32,7 +32,7 @@ export class <%- className %> {
3232

3333
<%_ for (const p of _properties) { -%>
3434
/**
35-
* <%- p.description || '' %>
35+
* <%- escapeComment(p.description) %>
3636
*/
3737
<%- p.decoration %>
3838
<%- p.signature %>

packages/cli/generators/openapi/templates/src/models/type-template.ts.ejs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ imports.forEach(i => {
88
-%>
99
/**
1010
* The model type is generated from OpenAPI schema - <%- name %>
11+
* <%- escapeComment(description) %>
1112
*/
1213
export type <%- className %> = <%- declaration %>;
1314

packages/cli/generators/openapi/utils.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,16 @@ function escapePropertyName(name) {
170170
return name;
171171
}
172172

173+
/**
174+
* Escape a string to be used as a block comment
175+
*
176+
* @param {string} comment
177+
*/
178+
function escapeComment(comment) {
179+
comment = comment || '';
180+
return comment.replace(/\/\*/g, '\\/*').replace(/\*\//g, '*\\/');
181+
}
182+
173183
function toJsonStr(val) {
174184
return json5.stringify(val, null, 2);
175185
}
@@ -183,6 +193,7 @@ module.exports = {
183193
camelCase: _.camelCase,
184194
escapeIdentifier,
185195
escapePropertyName,
196+
escapeComment,
186197
toJsonStr,
187198
validateUrlOrFile,
188199
};

packages/cli/test/fixtures/openapi/3.0/customer.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ paths:
1414
parameters:
1515
- name: access-token
1616
in: query
17-
description: Access token
17+
description: Access token (/* access_token */)
1818
required: false
1919
schema:
2020
type: string
2121
get:
2222
tags:
2323
- Customer
24-
description: Returns all customers
24+
description: Returns all customers (/* customers */)
2525
operationId: getCustomers
2626
parameters:
2727
- name: if

packages/cli/test/unit/openapi/controller-spec.unit.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ describe('openapi to controllers/models', () => {
2323
imports: ["import {Customer} from '../models/customer.model';"],
2424
methods: [
2525
{
26-
description: 'Returns all customers',
26+
description: 'Returns all customers (/* customers */)',
2727
comments: [
28-
'Returns all customers',
28+
'Returns all customers (/* customers */)',
2929
'\n',
3030
'@param _if if condition',
3131
'@param limit maximum number of results to return',
32-
'@param accessToken Access token',
32+
'@param accessToken Access token (/* access_token */)',
3333
'@returns customer response',
3434
],
3535
decoration: "@operation('get', '/customers')",
@@ -45,7 +45,7 @@ describe('openapi to controllers/models', () => {
4545
'Creates a new customer',
4646
'\n',
4747
'@param _requestBody Customer to add',
48-
'@param accessToken Access token',
48+
'@param accessToken Access token (/* access_token */)',
4949
'@returns customer response',
5050
],
5151
decoration: "@operation('post', '/customers')",

packages/cli/test/unit/openapi/openapi-utils.unit.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,11 @@ describe('openapi utils', () => {
4141
expect(utils.escapePropertyName('customer_id')).to.eql('customer_id');
4242
expect(utils.escapePropertyName('customerid')).to.eql('customerid');
4343
});
44+
45+
it('escapes chars for comments', () => {
46+
expect(utils.escapeComment('/* abc */')).to.eql('\\/* abc *\\/');
47+
expect(utils.escapeComment('/* abc')).to.eql('\\/* abc');
48+
expect(utils.escapeComment('abc */')).to.eql('abc *\\/');
49+
expect(utils.escapeComment('abc')).to.eql('abc');
50+
});
4451
});

0 commit comments

Comments
 (0)