UNPKG

2.99 kBJavaScriptView Raw
1'use strict';
2
3const Hogan = require('hogan.js');
4const Case = require('case');
5
6/**
7 * Converts text in a fragment to lowercase.
8 *
9 * Use:
10 * <pre>
11 * {{#lowercase}}{{httpMethod}}{{/lowercase}}
12 * </pre>
13 */
14
15function lowerCase() {
16 return function(template) {
17 var text = Case.lower(Hogan.compile(template).render(this));
18 if (this.generator) {
19 text = maybeEscapeReservedWord(this.generator, text)
20 }
21 return text;
22 }
23}
24
25
26/**
27 * Converts text in a fragment to uppercase.
28 *
29 * Use:
30 * <pre>
31 * {{#uppercase}}{{summary}}{{/uppercase}}
32 * </pre>
33 */
34function upperCase() {
35 return function(template) {
36 var text = Case.upper(Hogan.compile(template).render(this));
37 if (this.generator) {
38 text = maybeEscapeReservedWord(this.generator, text)
39 }
40 return text;
41 }
42}
43
44/**
45 * Converts text in a fragment to snake_case.
46 *
47 * Use:
48 * <pre>
49 * {{#snakecase}}{{name}}{{/snakecase}}
50 * </pre>
51 */
52function snakeCase() {
53 return function(template) {
54 var text = Case.snake(Hogan.compile(template).render(this));
55 if (this.generator) {
56 text = maybeEscapeReservedWord(this.generator, text)
57 }
58 return text;
59 }
60}
61
62/**
63 * Converts text in a fragment to PascalCase.
64 *
65 * Use:
66 * <pre>
67 * {{#pascalcase}}{{name}}{{/pascalcase}}
68 * </pre>
69 */
70function pascalCase() {
71 return function(template) {
72 var text = Case.pascal(Hogan.compile(template).render(this));
73 if (this.generator) {
74 text = maybeEscapeReservedWord(this.generator, text)
75 }
76 return text;
77 }
78}
79
80/**
81 * Converts text in a fragment to camelCase.
82 *
83 * Use:
84 * <pre>
85 * {{#camelcase}}{{name}}{{/camelcase}}
86 * </pre>
87 */
88function camelCase() {
89 return function(template) {
90 var text = Case.camel(Hogan.compile(template).render(this));
91 if (this.generator) {
92 text = maybeEscapeReservedWord(this.generator, text)
93 }
94 return text;
95 }
96}
97
98/**
99 * Converts text in a fragment to kebab-case.
100 *
101 * Use:
102 * <pre>
103 * {{#kebabcase}}{{name}}{{/kebabcase}}
104 * </pre>
105 */
106function kebabCase() {
107 return function(template) {
108 var text = Case.kebab(Hogan.compile(template).render(this));
109 if (this.generator) {
110 text = maybeEscapeReservedWord(this.generator, text)
111 }
112 return text;
113 }
114}
115
116function maybeEscapeReservedWord(generator, text) {
117 if (generator.sanitizeName) {
118 text = generator.sanitizeName(text);
119 }
120 if (generator.reservedWords && generator.reservedWords.has(text)) {
121 // Escaping must be done *after* camelize, because generators
122 // may escape using characters removed by camelize function.
123 text = generator.escapeReservedWord(text);
124 }
125 return text
126}
127
128
129module.exports = {
130 lowercase: lowerCase,
131 uppercase: upperCase,
132 snakecase: snakeCase,
133 pascalcase: pascalCase,
134 camelcase: camelCase,
135 kebabcase: kebabCase
136}