1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 |
|
4 | exports.isFunction = (f) => typeof f === 'function';
|
5 |
|
6 | exports.isRegExp = (r) => r instanceof RegExp;
|
7 | exports.dashCase = (base) => base.replace(/([a-zA-Z])(?=[A-Z])/g, '$1-').toLowerCase();
|
8 | exports.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 | };
|
16 | exports.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 |
|
46 | exports.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 | };
|
57 | const 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 | };
|
87 | exports.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 |
|
\ | No newline at end of file |