@gateweb/react-utils 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.d.ts +64 -1
- package/dist/cjs/index.js +74 -0
- package/dist/es/index.d.mts +64 -1
- package/dist/es/index.mjs +73 -1
- package/package.json +1 -1
package/dist/cjs/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TExtractValueType } from './types.js';
|
|
1
2
|
export * from './types.js';
|
|
2
3
|
|
|
3
4
|
type CamelToPascal<S extends string> = S extends `${infer Head}${infer Tail}` ? `${Uppercase<Head>}${Tail}` : S;
|
|
@@ -205,6 +206,68 @@ declare const rocEraToAd: (dateString: string, format?: string) => string;
|
|
|
205
206
|
*/
|
|
206
207
|
declare const adToRocEra: (dateString: string, format?: string) => string;
|
|
207
208
|
|
|
209
|
+
/**
|
|
210
|
+
* 將指定格式的物件轉換成類似 enum 的物件
|
|
211
|
+
*
|
|
212
|
+
* @param enumObject enum 物件
|
|
213
|
+
* @param valueKey value 的 key
|
|
214
|
+
*
|
|
215
|
+
* @example
|
|
216
|
+
*
|
|
217
|
+
* ```js
|
|
218
|
+
* const myObj = {
|
|
219
|
+
* A: { value: 'a' },
|
|
220
|
+
* B: { value: 'b', other: 'other' },
|
|
221
|
+
* }
|
|
222
|
+
*
|
|
223
|
+
* const enumCode = extractEnumLikeObject(myObj, 'value');
|
|
224
|
+
* console.log(enumCode); // { A: 'a', B: 'b' }
|
|
225
|
+
* ```
|
|
226
|
+
*/
|
|
227
|
+
declare const extractEnumLikeObject: <T extends Record<string, { [P in K]: any; }>, K extends string>(enumObject: T, valueKey: K) => { [key in keyof T]: T[key][K]; };
|
|
228
|
+
/**
|
|
229
|
+
* 將指定格式的物件生成 enum 物件、enum 列表、取得 label 的方法
|
|
230
|
+
*
|
|
231
|
+
* 輸入的物件格式為
|
|
232
|
+
*
|
|
233
|
+
* ```ts
|
|
234
|
+
* { key: { value: string, label: string }, key2: { value: string, label: string }, ... }
|
|
235
|
+
* ```
|
|
236
|
+
*
|
|
237
|
+
* 會生成以下三個物件
|
|
238
|
+
*
|
|
239
|
+
* enum 物件 - 根據 value 生成的 enum 物件
|
|
240
|
+
*
|
|
241
|
+
* enum 列表 - 根據 value 與 label 生成的列表
|
|
242
|
+
*
|
|
243
|
+
* 取得 label 的方法 - 傳入 value 可以取得對應的 label
|
|
244
|
+
*
|
|
245
|
+
* @param obj 要處理的物件
|
|
246
|
+
* @param name 生成的 enum 名稱
|
|
247
|
+
*
|
|
248
|
+
* @example
|
|
249
|
+
*
|
|
250
|
+
* ```ts
|
|
251
|
+
* const Status = { Enabled: { value: 'enabled', label: '啟用' }, Disabled: { value: 'disabled', label: '停用' } };
|
|
252
|
+
*
|
|
253
|
+
* const { EnumStatus, StatusList, getStatusLabel } = createEnumLikeObject(Status, 'Status');
|
|
254
|
+
*
|
|
255
|
+
* console.log(EnumStatus); // { Enabled: 'enabled', Disabled: 'disabled' }
|
|
256
|
+
*
|
|
257
|
+
* console.log(StatusList); // [ { key: 'Enabled', value: 'enabled', label: '啟用' }, { key: 'Disabled', value: 'disabled', label: '停用' } ]
|
|
258
|
+
*
|
|
259
|
+
* console.log(getStatusLabel('enabled')); // '啟用'
|
|
260
|
+
* ```
|
|
261
|
+
*/
|
|
262
|
+
declare const createEnumLikeObject: <T extends Record<string, {
|
|
263
|
+
value: any;
|
|
264
|
+
label: string;
|
|
265
|
+
}>, N extends string>(obj: T, name: N) => { [K in `Enum${N}` | `${N}List` | `get${N}Label`]: K extends `Enum${N}` ? { [key in keyof T]: T[key]["value"]; } : K extends `${N}List` ? {
|
|
266
|
+
value: any;
|
|
267
|
+
label: string;
|
|
268
|
+
key: string;
|
|
269
|
+
}[] : (value: TExtractValueType<T, "value">) => string | TExtractValueType<T, "value">; };
|
|
270
|
+
|
|
208
271
|
/**
|
|
209
272
|
* 檢查檔案是否為合法的 MIME 類型
|
|
210
273
|
*
|
|
@@ -602,4 +665,4 @@ declare const getLocalStorage: <T>(key: string, deCode?: boolean) => T | undefin
|
|
|
602
665
|
*/
|
|
603
666
|
declare const setLocalStorage: (key: string, value: Record<string, any>, enCode?: boolean) => void;
|
|
604
667
|
|
|
605
|
-
export { type TCountdownActions, adToRocEra, camelCase2PascalCase, camelCase2SnakeCase, camelString2PascalString, camelString2SnakeString, debounce, downloadFile, formatAmount, formatStarMask, generatePeriodArray, getCurrentPeriod, getLocalStorage, getMimeType, invariant, isChinese, isDateString, isDateTimeString, isEmail, isEnglish, isNonZeroStart, isNumber, isNumberAtLeastN, isNumberN, isNumberNM, isServer, isTWMobile, isTWPhone, isTimeString, omit, omitByValue, pascalCase2CamelCase, pascalCase2SnakeCase, pascalString2CamelString, pascalString2SnakeString, rocEraToAd, setLocalStorage, snakeCase2CamelCase, snakeCase2PascalCase, snakeString2CamelString, snakeString2PascalString, throttle, useCountdown, validTaxId, validateDateString, validateFileType };
|
|
668
|
+
export { type TCountdownActions, adToRocEra, camelCase2PascalCase, camelCase2SnakeCase, camelString2PascalString, camelString2SnakeString, createEnumLikeObject, debounce, downloadFile, extractEnumLikeObject, formatAmount, formatStarMask, generatePeriodArray, getCurrentPeriod, getLocalStorage, getMimeType, invariant, isChinese, isDateString, isDateTimeString, isEmail, isEnglish, isNonZeroStart, isNumber, isNumberAtLeastN, isNumberN, isNumberNM, isServer, isTWMobile, isTWPhone, isTimeString, omit, omitByValue, pascalCase2CamelCase, pascalCase2SnakeCase, pascalString2CamelString, pascalString2SnakeString, rocEraToAd, setLocalStorage, snakeCase2CamelCase, snakeCase2PascalCase, snakeString2CamelString, snakeString2PascalString, throttle, useCountdown, validTaxId, validateDateString, validateFileType };
|
package/dist/cjs/index.js
CHANGED
|
@@ -307,6 +307,78 @@ const transformObjectKey = (obj, transformFunName)=>{
|
|
|
307
307
|
return dayjs__default.default(dateString, format).add(-1911, 'year').format(format).substring(1);
|
|
308
308
|
};
|
|
309
309
|
|
|
310
|
+
/**
|
|
311
|
+
* 將指定格式的物件轉換成類似 enum 的物件
|
|
312
|
+
*
|
|
313
|
+
* @param enumObject enum 物件
|
|
314
|
+
* @param valueKey value 的 key
|
|
315
|
+
*
|
|
316
|
+
* @example
|
|
317
|
+
*
|
|
318
|
+
* ```js
|
|
319
|
+
* const myObj = {
|
|
320
|
+
* A: { value: 'a' },
|
|
321
|
+
* B: { value: 'b', other: 'other' },
|
|
322
|
+
* }
|
|
323
|
+
*
|
|
324
|
+
* const enumCode = extractEnumLikeObject(myObj, 'value');
|
|
325
|
+
* console.log(enumCode); // { A: 'a', B: 'b' }
|
|
326
|
+
* ```
|
|
327
|
+
*/ const extractEnumLikeObject = (enumObject, valueKey)=>Object.entries(enumObject).reduce((acc, [key, value])=>({
|
|
328
|
+
...acc,
|
|
329
|
+
[key]: value[valueKey]
|
|
330
|
+
}), {});
|
|
331
|
+
/**
|
|
332
|
+
* 將指定格式的物件生成 enum 物件、enum 列表、取得 label 的方法
|
|
333
|
+
*
|
|
334
|
+
* 輸入的物件格式為
|
|
335
|
+
*
|
|
336
|
+
* ```ts
|
|
337
|
+
* { key: { value: string, label: string }, key2: { value: string, label: string }, ... }
|
|
338
|
+
* ```
|
|
339
|
+
*
|
|
340
|
+
* 會生成以下三個物件
|
|
341
|
+
*
|
|
342
|
+
* enum 物件 - 根據 value 生成的 enum 物件
|
|
343
|
+
*
|
|
344
|
+
* enum 列表 - 根據 value 與 label 生成的列表
|
|
345
|
+
*
|
|
346
|
+
* 取得 label 的方法 - 傳入 value 可以取得對應的 label
|
|
347
|
+
*
|
|
348
|
+
* @param obj 要處理的物件
|
|
349
|
+
* @param name 生成的 enum 名稱
|
|
350
|
+
*
|
|
351
|
+
* @example
|
|
352
|
+
*
|
|
353
|
+
* ```ts
|
|
354
|
+
* const Status = { Enabled: { value: 'enabled', label: '啟用' }, Disabled: { value: 'disabled', label: '停用' } };
|
|
355
|
+
*
|
|
356
|
+
* const { EnumStatus, StatusList, getStatusLabel } = createEnumLikeObject(Status, 'Status');
|
|
357
|
+
*
|
|
358
|
+
* console.log(EnumStatus); // { Enabled: 'enabled', Disabled: 'disabled' }
|
|
359
|
+
*
|
|
360
|
+
* console.log(StatusList); // [ { key: 'Enabled', value: 'enabled', label: '啟用' }, { key: 'Disabled', value: 'disabled', label: '停用' } ]
|
|
361
|
+
*
|
|
362
|
+
* console.log(getStatusLabel('enabled')); // '啟用'
|
|
363
|
+
* ```
|
|
364
|
+
*/ const createEnumLikeObject = (obj, name)=>{
|
|
365
|
+
const Enum = extractEnumLikeObject(obj, 'value');
|
|
366
|
+
const list = Object.entries(obj).map(([key, item])=>({
|
|
367
|
+
key,
|
|
368
|
+
...item
|
|
369
|
+
}));
|
|
370
|
+
const getLabel = (value)=>{
|
|
371
|
+
const targetItem = list.find((item)=>item.value === value);
|
|
372
|
+
if (!targetItem) return value;
|
|
373
|
+
return targetItem.label;
|
|
374
|
+
};
|
|
375
|
+
return {
|
|
376
|
+
[`Enum${name}`]: Enum,
|
|
377
|
+
[`${name}List`]: list,
|
|
378
|
+
[`get${name}Label`]: getLabel
|
|
379
|
+
};
|
|
380
|
+
};
|
|
381
|
+
|
|
310
382
|
/**
|
|
311
383
|
* 檢查檔案是否為合法的 MIME 類型
|
|
312
384
|
*
|
|
@@ -683,7 +755,9 @@ exports.camelCase2PascalCase = camelCase2PascalCase;
|
|
|
683
755
|
exports.camelCase2SnakeCase = camelCase2SnakeCase;
|
|
684
756
|
exports.camelString2PascalString = camelString2PascalString;
|
|
685
757
|
exports.camelString2SnakeString = camelString2SnakeString;
|
|
758
|
+
exports.createEnumLikeObject = createEnumLikeObject;
|
|
686
759
|
exports.debounce = debounce;
|
|
760
|
+
exports.extractEnumLikeObject = extractEnumLikeObject;
|
|
687
761
|
exports.formatAmount = formatAmount;
|
|
688
762
|
exports.formatStarMask = formatStarMask;
|
|
689
763
|
exports.generatePeriodArray = generatePeriodArray;
|
package/dist/es/index.d.mts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TExtractValueType } from './types.mjs';
|
|
1
2
|
export * from './types.mjs';
|
|
2
3
|
|
|
3
4
|
type CamelToPascal<S extends string> = S extends `${infer Head}${infer Tail}` ? `${Uppercase<Head>}${Tail}` : S;
|
|
@@ -205,6 +206,68 @@ declare const rocEraToAd: (dateString: string, format?: string) => string;
|
|
|
205
206
|
*/
|
|
206
207
|
declare const adToRocEra: (dateString: string, format?: string) => string;
|
|
207
208
|
|
|
209
|
+
/**
|
|
210
|
+
* 將指定格式的物件轉換成類似 enum 的物件
|
|
211
|
+
*
|
|
212
|
+
* @param enumObject enum 物件
|
|
213
|
+
* @param valueKey value 的 key
|
|
214
|
+
*
|
|
215
|
+
* @example
|
|
216
|
+
*
|
|
217
|
+
* ```js
|
|
218
|
+
* const myObj = {
|
|
219
|
+
* A: { value: 'a' },
|
|
220
|
+
* B: { value: 'b', other: 'other' },
|
|
221
|
+
* }
|
|
222
|
+
*
|
|
223
|
+
* const enumCode = extractEnumLikeObject(myObj, 'value');
|
|
224
|
+
* console.log(enumCode); // { A: 'a', B: 'b' }
|
|
225
|
+
* ```
|
|
226
|
+
*/
|
|
227
|
+
declare const extractEnumLikeObject: <T extends Record<string, { [P in K]: any; }>, K extends string>(enumObject: T, valueKey: K) => { [key in keyof T]: T[key][K]; };
|
|
228
|
+
/**
|
|
229
|
+
* 將指定格式的物件生成 enum 物件、enum 列表、取得 label 的方法
|
|
230
|
+
*
|
|
231
|
+
* 輸入的物件格式為
|
|
232
|
+
*
|
|
233
|
+
* ```ts
|
|
234
|
+
* { key: { value: string, label: string }, key2: { value: string, label: string }, ... }
|
|
235
|
+
* ```
|
|
236
|
+
*
|
|
237
|
+
* 會生成以下三個物件
|
|
238
|
+
*
|
|
239
|
+
* enum 物件 - 根據 value 生成的 enum 物件
|
|
240
|
+
*
|
|
241
|
+
* enum 列表 - 根據 value 與 label 生成的列表
|
|
242
|
+
*
|
|
243
|
+
* 取得 label 的方法 - 傳入 value 可以取得對應的 label
|
|
244
|
+
*
|
|
245
|
+
* @param obj 要處理的物件
|
|
246
|
+
* @param name 生成的 enum 名稱
|
|
247
|
+
*
|
|
248
|
+
* @example
|
|
249
|
+
*
|
|
250
|
+
* ```ts
|
|
251
|
+
* const Status = { Enabled: { value: 'enabled', label: '啟用' }, Disabled: { value: 'disabled', label: '停用' } };
|
|
252
|
+
*
|
|
253
|
+
* const { EnumStatus, StatusList, getStatusLabel } = createEnumLikeObject(Status, 'Status');
|
|
254
|
+
*
|
|
255
|
+
* console.log(EnumStatus); // { Enabled: 'enabled', Disabled: 'disabled' }
|
|
256
|
+
*
|
|
257
|
+
* console.log(StatusList); // [ { key: 'Enabled', value: 'enabled', label: '啟用' }, { key: 'Disabled', value: 'disabled', label: '停用' } ]
|
|
258
|
+
*
|
|
259
|
+
* console.log(getStatusLabel('enabled')); // '啟用'
|
|
260
|
+
* ```
|
|
261
|
+
*/
|
|
262
|
+
declare const createEnumLikeObject: <T extends Record<string, {
|
|
263
|
+
value: any;
|
|
264
|
+
label: string;
|
|
265
|
+
}>, N extends string>(obj: T, name: N) => { [K in `Enum${N}` | `${N}List` | `get${N}Label`]: K extends `Enum${N}` ? { [key in keyof T]: T[key]["value"]; } : K extends `${N}List` ? {
|
|
266
|
+
value: any;
|
|
267
|
+
label: string;
|
|
268
|
+
key: string;
|
|
269
|
+
}[] : (value: TExtractValueType<T, "value">) => string | TExtractValueType<T, "value">; };
|
|
270
|
+
|
|
208
271
|
/**
|
|
209
272
|
* 檢查檔案是否為合法的 MIME 類型
|
|
210
273
|
*
|
|
@@ -602,4 +665,4 @@ declare const getLocalStorage: <T>(key: string, deCode?: boolean) => T | undefin
|
|
|
602
665
|
*/
|
|
603
666
|
declare const setLocalStorage: (key: string, value: Record<string, any>, enCode?: boolean) => void;
|
|
604
667
|
|
|
605
|
-
export { type TCountdownActions, adToRocEra, camelCase2PascalCase, camelCase2SnakeCase, camelString2PascalString, camelString2SnakeString, debounce, downloadFile, formatAmount, formatStarMask, generatePeriodArray, getCurrentPeriod, getLocalStorage, getMimeType, invariant, isChinese, isDateString, isDateTimeString, isEmail, isEnglish, isNonZeroStart, isNumber, isNumberAtLeastN, isNumberN, isNumberNM, isServer, isTWMobile, isTWPhone, isTimeString, omit, omitByValue, pascalCase2CamelCase, pascalCase2SnakeCase, pascalString2CamelString, pascalString2SnakeString, rocEraToAd, setLocalStorage, snakeCase2CamelCase, snakeCase2PascalCase, snakeString2CamelString, snakeString2PascalString, throttle, useCountdown, validTaxId, validateDateString, validateFileType };
|
|
668
|
+
export { type TCountdownActions, adToRocEra, camelCase2PascalCase, camelCase2SnakeCase, camelString2PascalString, camelString2SnakeString, createEnumLikeObject, debounce, downloadFile, extractEnumLikeObject, formatAmount, formatStarMask, generatePeriodArray, getCurrentPeriod, getLocalStorage, getMimeType, invariant, isChinese, isDateString, isDateTimeString, isEmail, isEnglish, isNonZeroStart, isNumber, isNumberAtLeastN, isNumberN, isNumberNM, isServer, isTWMobile, isTWPhone, isTimeString, omit, omitByValue, pascalCase2CamelCase, pascalCase2SnakeCase, pascalString2CamelString, pascalString2SnakeString, rocEraToAd, setLocalStorage, snakeCase2CamelCase, snakeCase2PascalCase, snakeString2CamelString, snakeString2PascalString, throttle, useCountdown, validTaxId, validateDateString, validateFileType };
|
package/dist/es/index.mjs
CHANGED
|
@@ -301,6 +301,78 @@ const transformObjectKey = (obj, transformFunName)=>{
|
|
|
301
301
|
return dayjs(dateString, format).add(-1911, 'year').format(format).substring(1);
|
|
302
302
|
};
|
|
303
303
|
|
|
304
|
+
/**
|
|
305
|
+
* 將指定格式的物件轉換成類似 enum 的物件
|
|
306
|
+
*
|
|
307
|
+
* @param enumObject enum 物件
|
|
308
|
+
* @param valueKey value 的 key
|
|
309
|
+
*
|
|
310
|
+
* @example
|
|
311
|
+
*
|
|
312
|
+
* ```js
|
|
313
|
+
* const myObj = {
|
|
314
|
+
* A: { value: 'a' },
|
|
315
|
+
* B: { value: 'b', other: 'other' },
|
|
316
|
+
* }
|
|
317
|
+
*
|
|
318
|
+
* const enumCode = extractEnumLikeObject(myObj, 'value');
|
|
319
|
+
* console.log(enumCode); // { A: 'a', B: 'b' }
|
|
320
|
+
* ```
|
|
321
|
+
*/ const extractEnumLikeObject = (enumObject, valueKey)=>Object.entries(enumObject).reduce((acc, [key, value])=>({
|
|
322
|
+
...acc,
|
|
323
|
+
[key]: value[valueKey]
|
|
324
|
+
}), {});
|
|
325
|
+
/**
|
|
326
|
+
* 將指定格式的物件生成 enum 物件、enum 列表、取得 label 的方法
|
|
327
|
+
*
|
|
328
|
+
* 輸入的物件格式為
|
|
329
|
+
*
|
|
330
|
+
* ```ts
|
|
331
|
+
* { key: { value: string, label: string }, key2: { value: string, label: string }, ... }
|
|
332
|
+
* ```
|
|
333
|
+
*
|
|
334
|
+
* 會生成以下三個物件
|
|
335
|
+
*
|
|
336
|
+
* enum 物件 - 根據 value 生成的 enum 物件
|
|
337
|
+
*
|
|
338
|
+
* enum 列表 - 根據 value 與 label 生成的列表
|
|
339
|
+
*
|
|
340
|
+
* 取得 label 的方法 - 傳入 value 可以取得對應的 label
|
|
341
|
+
*
|
|
342
|
+
* @param obj 要處理的物件
|
|
343
|
+
* @param name 生成的 enum 名稱
|
|
344
|
+
*
|
|
345
|
+
* @example
|
|
346
|
+
*
|
|
347
|
+
* ```ts
|
|
348
|
+
* const Status = { Enabled: { value: 'enabled', label: '啟用' }, Disabled: { value: 'disabled', label: '停用' } };
|
|
349
|
+
*
|
|
350
|
+
* const { EnumStatus, StatusList, getStatusLabel } = createEnumLikeObject(Status, 'Status');
|
|
351
|
+
*
|
|
352
|
+
* console.log(EnumStatus); // { Enabled: 'enabled', Disabled: 'disabled' }
|
|
353
|
+
*
|
|
354
|
+
* console.log(StatusList); // [ { key: 'Enabled', value: 'enabled', label: '啟用' }, { key: 'Disabled', value: 'disabled', label: '停用' } ]
|
|
355
|
+
*
|
|
356
|
+
* console.log(getStatusLabel('enabled')); // '啟用'
|
|
357
|
+
* ```
|
|
358
|
+
*/ const createEnumLikeObject = (obj, name)=>{
|
|
359
|
+
const Enum = extractEnumLikeObject(obj, 'value');
|
|
360
|
+
const list = Object.entries(obj).map(([key, item])=>({
|
|
361
|
+
key,
|
|
362
|
+
...item
|
|
363
|
+
}));
|
|
364
|
+
const getLabel = (value)=>{
|
|
365
|
+
const targetItem = list.find((item)=>item.value === value);
|
|
366
|
+
if (!targetItem) return value;
|
|
367
|
+
return targetItem.label;
|
|
368
|
+
};
|
|
369
|
+
return {
|
|
370
|
+
[`Enum${name}`]: Enum,
|
|
371
|
+
[`${name}List`]: list,
|
|
372
|
+
[`get${name}Label`]: getLabel
|
|
373
|
+
};
|
|
374
|
+
};
|
|
375
|
+
|
|
304
376
|
/**
|
|
305
377
|
* 檢查檔案是否為合法的 MIME 類型
|
|
306
378
|
*
|
|
@@ -668,4 +740,4 @@ message) {
|
|
|
668
740
|
* formatString('123456', 1, 4) // '1****6'
|
|
669
741
|
*/ const formatStarMask = (str, n, m)=>str.slice(0, n) + '*'.repeat(m - n + 1) + str.slice(m + 1);
|
|
670
742
|
|
|
671
|
-
export { adToRocEra, camelCase2PascalCase, camelCase2SnakeCase, camelString2PascalString, camelString2SnakeString, debounce, formatAmount, formatStarMask, generatePeriodArray, getCurrentPeriod, getMimeType, invariant, isChinese, isDateString, isDateTimeString, isEmail, isEnglish, isNonZeroStart, isNumber, isNumberAtLeastN, isNumberN, isNumberNM, isServer, isTWMobile, isTWPhone, isTimeString, omit, omitByValue, pascalCase2CamelCase, pascalCase2SnakeCase, pascalString2CamelString, pascalString2SnakeString, rocEraToAd, snakeCase2CamelCase, snakeCase2PascalCase, snakeString2CamelString, snakeString2PascalString, throttle, validTaxId, validateDateString, validateFileType };
|
|
743
|
+
export { adToRocEra, camelCase2PascalCase, camelCase2SnakeCase, camelString2PascalString, camelString2SnakeString, createEnumLikeObject, debounce, extractEnumLikeObject, formatAmount, formatStarMask, generatePeriodArray, getCurrentPeriod, getMimeType, invariant, isChinese, isDateString, isDateTimeString, isEmail, isEnglish, isNonZeroStart, isNumber, isNumberAtLeastN, isNumberN, isNumberNM, isServer, isTWMobile, isTWPhone, isTimeString, omit, omitByValue, pascalCase2CamelCase, pascalCase2SnakeCase, pascalString2CamelString, pascalString2SnakeString, rocEraToAd, snakeCase2CamelCase, snakeCase2PascalCase, snakeString2CamelString, snakeString2PascalString, throttle, validTaxId, validateDateString, validateFileType };
|