UNPKG

4.14 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3// tslint:disable-next-line:no-any
4exports.isFunction = (f) => typeof f === 'function';
5// tslint:disable-next-line:no-any
6exports.isRegExp = (r) => r instanceof RegExp;
7exports.dashCase = (base) => base.replace(/([a-zA-Z])(?=[A-Z])/g, '$1-').toLowerCase();
8exports.passedOptionsToNames = (passed, options) => {
9 return passed.map(f => {
10 const opt = options.find(o => {
11 return (o.flag && o.flag === f) || o.name === f;
12 });
13 return opt ? opt.name : f;
14 });
15};
16exports.getOptionsMriOpts = (options = []) => {
17 const opts = {};
18 options.forEach(o => {
19 if (o.flag) {
20 opts.alias = opts.alias || {};
21 const flag = o.flag.replace(/-/g, '');
22 opts.alias[flag] = o.name;
23 }
24 const dashedName = exports.dashCase(o.name);
25 if (dashedName !== o.name) {
26 opts.alias[dashedName] = o.name;
27 }
28 if (o.default) {
29 opts.default = opts.default || {};
30 opts.default[o.name] = o.default;
31 }
32 if (o.valueType) {
33 if (o.valueType === 'string') {
34 opts.string = opts.string || [];
35 opts.string.push(o.name);
36 }
37 else if (o.valueType === 'boolean') {
38 opts.boolean = opts.boolean || [];
39 opts.boolean.push(o.name);
40 }
41 }
42 });
43 return opts;
44};
45// Not sure this is doing much..
46exports.coerceCliValue = (value, type = 'string') => {
47 switch (type) {
48 case 'boolean':
49 return Boolean(value);
50 case 'number':
51 return value ? parseInt(value, 10) : value;
52 case 'string':
53 default:
54 return value;
55 }
56};
57const preserveCamelCase = val => {
58 let isLastCharLower = false;
59 let isLastCharUpper = false;
60 let isLastLastCharUpper = false;
61 for (let i = 0; i < val.length; i++) {
62 const character = val[i];
63 if (isLastCharLower && /[a-zA-Z]/.test(character) && character.toUpperCase() === character) {
64 val = val.slice(0, i) + '-' + val.slice(i);
65 isLastCharLower = false;
66 isLastLastCharUpper = isLastCharUpper;
67 isLastCharUpper = true;
68 i++;
69 }
70 else if (isLastCharUpper &&
71 isLastLastCharUpper &&
72 /[a-zA-Z]/.test(character) &&
73 character.toLowerCase() === character) {
74 val = val.slice(0, i - 1) + '-' + val.slice(i - 1);
75 isLastLastCharUpper = isLastCharUpper;
76 isLastCharUpper = false;
77 isLastCharLower = true;
78 }
79 else {
80 isLastCharLower = character.toLowerCase() === character && character.toUpperCase() !== character;
81 isLastLastCharUpper = isLastCharUpper;
82 isLastCharUpper = character.toUpperCase() === character && character.toLowerCase() !== character;
83 }
84 }
85 return val;
86};
87exports.camelCase = (input, options = { pascalCase: false }) => {
88 if (!(typeof input === 'string' || Array.isArray(input))) {
89 throw new TypeError('Expected the input to be `string | string[]`');
90 }
91 options = Object.assign({ pascalCase: false }, options);
92 const postProcess = x => (options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x);
93 if (Array.isArray(input)) {
94 input = input
95 .map(x => x.trim())
96 .filter(x => x.length)
97 .join('-');
98 }
99 else {
100 input = input.trim();
101 }
102 if (input.length === 0) {
103 return '';
104 }
105 if (input.length === 1) {
106 return options.pascalCase ? input.toUpperCase() : input.toLowerCase();
107 }
108 const hasUpperCase = input !== input.toLowerCase();
109 if (hasUpperCase) {
110 input = preserveCamelCase(input);
111 }
112 input = input
113 .replace(/^[_.\- ]+/, '')
114 .toLowerCase()
115 .replace(/[_.\- ]+(\w|$)/g, (_, p1) => p1.toUpperCase())
116 .replace(/\d+(\w|$)/g, m => m.toUpperCase());
117 return postProcess(input);
118};
119//# sourceMappingURL=utils.js.map
\No newline at end of file