@food-log/utils 0.0.32
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/.build/index.d.ts +15 -0
- package/.build/index.js +32 -0
- package/.build/index.js.map +1 -0
- package/.build/src/core/constant/auth.d.ts +7 -0
- package/.build/src/core/constant/auth.js +3 -0
- package/.build/src/core/constant/auth.js.map +1 -0
- package/.build/src/core/constant/language.d.ts +4 -0
- package/.build/src/core/constant/language.js +3 -0
- package/.build/src/core/constant/language.js.map +1 -0
- package/.build/src/core/constant/stage.d.ts +7 -0
- package/.build/src/core/constant/stage.js +10 -0
- package/.build/src/core/constant/stage.js.map +1 -0
- package/.build/src/core/constant/timezone.d.ts +597 -0
- package/.build/src/core/constant/timezone.js +600 -0
- package/.build/src/core/constant/timezone.js.map +1 -0
- package/.build/src/core/env/decorator.d.ts +8 -0
- package/.build/src/core/env/decorator.js +55 -0
- package/.build/src/core/env/decorator.js.map +1 -0
- package/.build/src/core/env/env.d.ts +8 -0
- package/.build/src/core/env/env.js +30 -0
- package/.build/src/core/env/env.js.map +1 -0
- package/.build/src/core/exception/authError.d.ts +10 -0
- package/.build/src/core/exception/authError.js +23 -0
- package/.build/src/core/exception/authError.js.map +1 -0
- package/.build/src/core/exception/baseError.d.ts +13 -0
- package/.build/src/core/exception/baseError.js +13 -0
- package/.build/src/core/exception/baseError.js.map +1 -0
- package/.build/src/core/exception/internalServerError.d.ts +10 -0
- package/.build/src/core/exception/internalServerError.js +23 -0
- package/.build/src/core/exception/internalServerError.js.map +1 -0
- package/.build/src/core/exception/requestError.d.ts +10 -0
- package/.build/src/core/exception/requestError.js +23 -0
- package/.build/src/core/exception/requestError.js.map +1 -0
- package/.build/src/core/exception/warningError.d.ts +10 -0
- package/.build/src/core/exception/warningError.js +23 -0
- package/.build/src/core/exception/warningError.js.map +1 -0
- package/.build/src/core/firebase/app.d.ts +9 -0
- package/.build/src/core/firebase/app.js +15 -0
- package/.build/src/core/firebase/app.js.map +1 -0
- package/.build/src/core/firebase/auth.d.ts +13 -0
- package/.build/src/core/firebase/auth.js +48 -0
- package/.build/src/core/firebase/auth.js.map +1 -0
- package/.build/src/core/firebase/firestore.d.ts +26 -0
- package/.build/src/core/firebase/firestore.js +82 -0
- package/.build/src/core/firebase/firestore.js.map +1 -0
- package/.build/src/core/firebase/storage.d.ts +5 -0
- package/.build/src/core/firebase/storage.js +17 -0
- package/.build/src/core/firebase/storage.js.map +1 -0
- package/.build/src/core/service/dateUtils.d.ts +16 -0
- package/.build/src/core/service/dateUtils.js +40 -0
- package/.build/src/core/service/dateUtils.js.map +1 -0
- package/.build/src/core/service/objectUtils.d.ts +25 -0
- package/.build/src/core/service/objectUtils.js +135 -0
- package/.build/src/core/service/objectUtils.js.map +1 -0
- package/.build/src/core/validation/validationUtils.d.ts +102 -0
- package/.build/src/core/validation/validationUtils.js +185 -0
- package/.build/src/core/validation/validationUtils.js.map +1 -0
- package/README.md +5 -0
- package/package.json +42 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ObjectUtils = void 0;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
/*******************************************************
|
|
9
|
+
*
|
|
10
|
+
* オブジェクトのトランスフォーム系
|
|
11
|
+
*
|
|
12
|
+
*******************************************************/
|
|
13
|
+
class ObjectUtils {
|
|
14
|
+
/**
|
|
15
|
+
* undefined -> null変換する
|
|
16
|
+
* @param target 変換対象のオブジェクト
|
|
17
|
+
*/
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
19
|
+
static convertOptionalToNull(target) {
|
|
20
|
+
return target === undefined ? null : target;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* オブジェクトのキーをキャメルケースに変換する
|
|
24
|
+
* UNDEFINEDはnullに変換する
|
|
25
|
+
* @param target 変換対象のオブジェクト
|
|
26
|
+
*/
|
|
27
|
+
static camelCase(target) {
|
|
28
|
+
let response = {};
|
|
29
|
+
let property = {};
|
|
30
|
+
for (const [key, value] of Object.entries(target)) {
|
|
31
|
+
const camelKey = lodash_1.default.camelCase(key);
|
|
32
|
+
if (camelKey !== key && camelKey in target) {
|
|
33
|
+
delete target[camelKey];
|
|
34
|
+
response = { ...this.camelCase(target) };
|
|
35
|
+
}
|
|
36
|
+
if (lodash_1.default.isObject(value) && !lodash_1.default.isArray(value)) {
|
|
37
|
+
// 単一オブジェクトの場合
|
|
38
|
+
property = { [camelKey]: this.camelCase(value) };
|
|
39
|
+
}
|
|
40
|
+
else if (lodash_1.default.isObject(value) && lodash_1.default.isArray(value)) {
|
|
41
|
+
// 配列オブジェクトの場合
|
|
42
|
+
const array = [];
|
|
43
|
+
for (const v of value) {
|
|
44
|
+
if (lodash_1.default.isObject(v)) {
|
|
45
|
+
array.push(this.camelCase(v));
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
array.push(v ?? null);
|
|
49
|
+
}
|
|
50
|
+
property = { [camelKey]: array };
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
// オブジェクト以外の場合
|
|
54
|
+
property = { [camelKey]: value ?? null };
|
|
55
|
+
}
|
|
56
|
+
response = { ...response, ...property };
|
|
57
|
+
}
|
|
58
|
+
return response;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* オブジェクトのキーをスネークケースに変換する
|
|
62
|
+
* UNDEFINEDはnullに変換する
|
|
63
|
+
* @param target 変換対象のオブジェクト
|
|
64
|
+
*/
|
|
65
|
+
static snakeCase(target) {
|
|
66
|
+
let response = {};
|
|
67
|
+
let property = {};
|
|
68
|
+
for (const [key, value] of Object.entries(target)) {
|
|
69
|
+
const snakeKey = lodash_1.default.snakeCase(key);
|
|
70
|
+
if (snakeKey !== key && snakeKey in target) {
|
|
71
|
+
delete target[snakeKey];
|
|
72
|
+
response = { ...this.snakeCase(target) };
|
|
73
|
+
}
|
|
74
|
+
if (lodash_1.default.isObject(value) && !lodash_1.default.isArray(value)) {
|
|
75
|
+
// 単一オブジェクトの場合
|
|
76
|
+
property = { [snakeKey]: this.snakeCase(value) };
|
|
77
|
+
}
|
|
78
|
+
else if (lodash_1.default.isObject(value) && lodash_1.default.isArray(value)) {
|
|
79
|
+
// 配列オブジェクトの場合
|
|
80
|
+
const array = [];
|
|
81
|
+
for (const v of value) {
|
|
82
|
+
if (lodash_1.default.isObject(v)) {
|
|
83
|
+
array.push(this.snakeCase(v));
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
// datetimeの形式に変換可能な場合はキャストする
|
|
87
|
+
array.push(v ?? null);
|
|
88
|
+
}
|
|
89
|
+
property = { [snakeKey]: array };
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
// オブジェクト以外の場合
|
|
93
|
+
property = { [snakeKey]: value ?? null };
|
|
94
|
+
}
|
|
95
|
+
response = { ...response, ...property };
|
|
96
|
+
}
|
|
97
|
+
return response;
|
|
98
|
+
}
|
|
99
|
+
static kebabCase(target) {
|
|
100
|
+
let response = {};
|
|
101
|
+
let property = {};
|
|
102
|
+
for (const [key, value] of Object.entries(target)) {
|
|
103
|
+
const kebabKey = lodash_1.default.kebabCase(key);
|
|
104
|
+
if (kebabKey !== key && kebabKey in target) {
|
|
105
|
+
delete target[kebabKey];
|
|
106
|
+
response = { ...this.kebabCase(target) };
|
|
107
|
+
}
|
|
108
|
+
if (lodash_1.default.isObject(value) && !lodash_1.default.isArray(value)) {
|
|
109
|
+
// 単一オブジェクトの場合
|
|
110
|
+
property = { [kebabKey]: this.kebabCase(value) };
|
|
111
|
+
}
|
|
112
|
+
else if (lodash_1.default.isObject(value) && lodash_1.default.isArray(value)) {
|
|
113
|
+
// 配列オブジェクトの場合
|
|
114
|
+
const array = [];
|
|
115
|
+
for (const v of value) {
|
|
116
|
+
if (lodash_1.default.isObject(v)) {
|
|
117
|
+
array.push(this.kebabCase(v));
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
// datetimeの形式に変換可能な場合はキャストする
|
|
121
|
+
array.push(v ?? null);
|
|
122
|
+
}
|
|
123
|
+
property = { [kebabKey]: array };
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
// オブジェクト以外の場合
|
|
127
|
+
property = { [kebabKey]: value ?? null };
|
|
128
|
+
}
|
|
129
|
+
response = { ...response, ...property };
|
|
130
|
+
}
|
|
131
|
+
return response;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
exports.ObjectUtils = ObjectUtils;
|
|
135
|
+
//# sourceMappingURL=objectUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objectUtils.js","sourceRoot":"","sources":["../../../../src/core/service/objectUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 文字列チェックで利用可能なチェック一覧
|
|
3
|
+
*/
|
|
4
|
+
export declare const CharType: {
|
|
5
|
+
readonly zenkaku: "zenkaku";
|
|
6
|
+
readonly hiragana: "hiragana";
|
|
7
|
+
readonly katakana: "katakana";
|
|
8
|
+
readonly alphanumeric: "alphanumeric";
|
|
9
|
+
readonly numeric: "numeric";
|
|
10
|
+
readonly alpha: "alpha";
|
|
11
|
+
readonly upper: "upper";
|
|
12
|
+
readonly lower: "lower";
|
|
13
|
+
};
|
|
14
|
+
export declare type CharType = typeof CharType[keyof typeof CharType];
|
|
15
|
+
/*******************************************************
|
|
16
|
+
*
|
|
17
|
+
* Validation
|
|
18
|
+
*
|
|
19
|
+
*******************************************************/
|
|
20
|
+
export declare class ValidationUtils {
|
|
21
|
+
/**
|
|
22
|
+
* 対象がstringかどうかをチェックする
|
|
23
|
+
* @param target
|
|
24
|
+
*/
|
|
25
|
+
static isString(target: unknown): target is string;
|
|
26
|
+
/**
|
|
27
|
+
* 対象がnumberかどうかをチェックする
|
|
28
|
+
* @param target
|
|
29
|
+
*/
|
|
30
|
+
static isNumber(target: unknown): target is number;
|
|
31
|
+
/**
|
|
32
|
+
* 対象がbooleanかどうかをチェックする
|
|
33
|
+
* https://youmightnotneed.com/lodash/#isBoolean
|
|
34
|
+
* @param target
|
|
35
|
+
*/
|
|
36
|
+
static isBoolean(target: unknown): target is boolean;
|
|
37
|
+
/**
|
|
38
|
+
* 対象が配列かどうかをチェックする
|
|
39
|
+
* https://youmightnotneed.com/lodash/#isArray
|
|
40
|
+
* @param target
|
|
41
|
+
*/
|
|
42
|
+
static isArray(target: unknown): target is any[];
|
|
43
|
+
/**
|
|
44
|
+
* 対象が空白かどうかを確認
|
|
45
|
+
* This does not support evaluating a Set or a Map
|
|
46
|
+
* https://stackoverflow.com/questions/43233102/lodash-isempty-and-has-method-vs-simple-check/43233163#43233163
|
|
47
|
+
* https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_isempty
|
|
48
|
+
* @param target
|
|
49
|
+
*/
|
|
50
|
+
static isEmpty(target: unknown): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* 対象がEnumのメンバーか確認
|
|
53
|
+
* @param target
|
|
54
|
+
* @param enumObject
|
|
55
|
+
* @returns
|
|
56
|
+
*/
|
|
57
|
+
static isEnumMember<TUnionType>(target: unknown, enumObject: object): target is TUnionType;
|
|
58
|
+
/**
|
|
59
|
+
* [正規表現] URLの有効性を確認
|
|
60
|
+
* @param target
|
|
61
|
+
*/
|
|
62
|
+
static checkUrl(target: unknown): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* [正規表現] 電話番号の値の有効性を確認
|
|
65
|
+
* @param target
|
|
66
|
+
*/
|
|
67
|
+
static checkTel(target: unknown): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* [正規表現] 郵便番号の値の有効性を確認
|
|
70
|
+
* @param target
|
|
71
|
+
*/
|
|
72
|
+
static checkZip(target: unknown): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* [正規表現] emailのフォーマットが有効か確認する
|
|
75
|
+
* @param target
|
|
76
|
+
*/
|
|
77
|
+
static checkEmail(target: unknown): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* [正規表現] YYYY-MM-DDの形式かをチェックする
|
|
80
|
+
* @param target
|
|
81
|
+
*/
|
|
82
|
+
static checkYYYYMMDD(target: unknown): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* [正規表現] YYYY-MMの形式かをチェックする
|
|
85
|
+
* @param target
|
|
86
|
+
*/
|
|
87
|
+
static checkYYYYMM(target: unknown): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* [正規表現] YYYYの形式かをチェックする
|
|
90
|
+
* @param target
|
|
91
|
+
*/
|
|
92
|
+
static checkYYYY(target: unknown): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* [正規表現] 文字列チェック
|
|
95
|
+
* @param {unknown} target チェック対象文字列
|
|
96
|
+
* @param {CharType} charType チェック種別
|
|
97
|
+
* @return {boolean}
|
|
98
|
+
* - true : チェックOK(引数に指定した種別の文字列のみで構成されている)
|
|
99
|
+
* - false : チェックNG(引数に指定した種別以外の文字列が含まれている)
|
|
100
|
+
* */
|
|
101
|
+
static checkCharType(target: unknown, charType: CharType): boolean;
|
|
102
|
+
}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ValidationUtils = exports.CharType = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* 正規表現を判定するためのベース関数
|
|
6
|
+
* @param target
|
|
7
|
+
* @param regexp
|
|
8
|
+
*/
|
|
9
|
+
const checkRegex = (target, regexp) => {
|
|
10
|
+
return target.match(regexp) !== null;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* 文字列チェックで利用可能なチェック一覧
|
|
14
|
+
*/
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
16
|
+
exports.CharType = {
|
|
17
|
+
zenkaku: 'zenkaku',
|
|
18
|
+
hiragana: 'hiragana',
|
|
19
|
+
katakana: 'katakana',
|
|
20
|
+
alphanumeric: 'alphanumeric',
|
|
21
|
+
numeric: 'numeric',
|
|
22
|
+
alpha: 'alpha',
|
|
23
|
+
upper: 'upper',
|
|
24
|
+
lower: 'lower', // 半角英字(小文字のみ)
|
|
25
|
+
};
|
|
26
|
+
/*******************************************************
|
|
27
|
+
*
|
|
28
|
+
* Validation
|
|
29
|
+
*
|
|
30
|
+
*******************************************************/
|
|
31
|
+
class ValidationUtils {
|
|
32
|
+
/**
|
|
33
|
+
* 対象がstringかどうかをチェックする
|
|
34
|
+
* @param target
|
|
35
|
+
*/
|
|
36
|
+
static isString(target) {
|
|
37
|
+
return typeof target === 'string';
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 対象がnumberかどうかをチェックする
|
|
41
|
+
* @param target
|
|
42
|
+
*/
|
|
43
|
+
static isNumber(target) {
|
|
44
|
+
if (isNaN(Number(`${target}`))) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 対象がbooleanかどうかをチェックする
|
|
51
|
+
* https://youmightnotneed.com/lodash/#isBoolean
|
|
52
|
+
* @param target
|
|
53
|
+
*/
|
|
54
|
+
static isBoolean(target) {
|
|
55
|
+
return target === !!target;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 対象が配列かどうかをチェックする
|
|
59
|
+
* https://youmightnotneed.com/lodash/#isArray
|
|
60
|
+
* @param target
|
|
61
|
+
*/
|
|
62
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
63
|
+
static isArray(target) {
|
|
64
|
+
return Array.isArray(target);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 対象が空白かどうかを確認
|
|
68
|
+
* This does not support evaluating a Set or a Map
|
|
69
|
+
* https://stackoverflow.com/questions/43233102/lodash-isempty-and-has-method-vs-simple-check/43233163#43233163
|
|
70
|
+
* https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_isempty
|
|
71
|
+
* @param target
|
|
72
|
+
*/
|
|
73
|
+
static isEmpty(target) {
|
|
74
|
+
return (typeof target === 'undefined' ||
|
|
75
|
+
target === null ||
|
|
76
|
+
(typeof target === 'number' && isNaN(target)) ||
|
|
77
|
+
(typeof target === 'object' && target !== null && Object.keys(target).length === 0) ||
|
|
78
|
+
(typeof target === 'string' && target.trim().length === 0));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* 対象がEnumのメンバーか確認
|
|
82
|
+
* @param target
|
|
83
|
+
* @param enumObject
|
|
84
|
+
* @returns
|
|
85
|
+
*/
|
|
86
|
+
static isEnumMember(target, enumObject) {
|
|
87
|
+
// 列挙型チェック(空白もNG)
|
|
88
|
+
if (this.isEmpty(target) || !Object.values(enumObject).some((value) => target === value)) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* [正規表現] URLの有効性を確認
|
|
95
|
+
* @param target
|
|
96
|
+
*/
|
|
97
|
+
static checkUrl(target) {
|
|
98
|
+
return (this.isString(target) &&
|
|
99
|
+
checkRegex(target,
|
|
100
|
+
// eslint-disable-next-line no-useless-escape
|
|
101
|
+
/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/));
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* [正規表現] 電話番号の値の有効性を確認
|
|
105
|
+
* @param target
|
|
106
|
+
*/
|
|
107
|
+
static checkTel(target) {
|
|
108
|
+
return this.isString(target) && checkRegex(target, /0\d{1,4}-\d{1,4}-\d{4}/);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* [正規表現] 郵便番号の値の有効性を確認
|
|
112
|
+
* @param target
|
|
113
|
+
*/
|
|
114
|
+
static checkZip(target) {
|
|
115
|
+
return this.isString(target) && checkRegex(target, '[0-9]{3}-[0-9]{4}');
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* [正規表現] emailのフォーマットが有効か確認する
|
|
119
|
+
* @param target
|
|
120
|
+
*/
|
|
121
|
+
static checkEmail(target) {
|
|
122
|
+
return (this.isString(target) &&
|
|
123
|
+
checkRegex(target, "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$"));
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* [正規表現] YYYY-MM-DDの形式かをチェックする
|
|
127
|
+
* @param target
|
|
128
|
+
*/
|
|
129
|
+
static checkYYYYMMDD(target) {
|
|
130
|
+
return this.isString(target) && checkRegex(target, '^[1-2][0-9]{3}-[0-2][0-9]-[0-3][0-9]$');
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* [正規表現] YYYY-MMの形式かをチェックする
|
|
134
|
+
* @param target
|
|
135
|
+
*/
|
|
136
|
+
static checkYYYYMM(target) {
|
|
137
|
+
return this.isString(target) && checkRegex(target, '^[1-2][0-9]{3}-[0-2][0-9]$');
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* [正規表現] YYYYの形式かをチェックする
|
|
141
|
+
* @param target
|
|
142
|
+
*/
|
|
143
|
+
static checkYYYY(target) {
|
|
144
|
+
return this.isString(target) && checkRegex(target, '^[1-2][0-9]{3}$');
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* [正規表現] 文字列チェック
|
|
148
|
+
* @param {unknown} target チェック対象文字列
|
|
149
|
+
* @param {CharType} charType チェック種別
|
|
150
|
+
* @return {boolean}
|
|
151
|
+
* - true : チェックOK(引数に指定した種別の文字列のみで構成されている)
|
|
152
|
+
* - false : チェックNG(引数に指定した種別以外の文字列が含まれている)
|
|
153
|
+
* */
|
|
154
|
+
static checkCharType(target, charType) {
|
|
155
|
+
switch (charType) {
|
|
156
|
+
// 全角文字(ひらがな・カタカナ・漢字 etc.)
|
|
157
|
+
case 'zenkaku':
|
|
158
|
+
// eslint-disable-next-line no-control-regex
|
|
159
|
+
return this.isString(target) && checkRegex(target, /^[^\x01-\x7E\xA1-\xDF]+$/);
|
|
160
|
+
// 全角ひらがな
|
|
161
|
+
case 'hiragana':
|
|
162
|
+
return this.isString(target) && checkRegex(target, /^[\u3041-\u3096]+$/);
|
|
163
|
+
// 全角カタカナ
|
|
164
|
+
case 'katakana':
|
|
165
|
+
return this.isString(target) && checkRegex(target, /^[\u30a1-\u30fc]+$/);
|
|
166
|
+
// 半角英数字(大文字・小文字)
|
|
167
|
+
case 'alphanumeric':
|
|
168
|
+
return this.isString(target) && checkRegex(target, /^[0-9a-zA-Z]+$/);
|
|
169
|
+
// 半角数字
|
|
170
|
+
case 'numeric':
|
|
171
|
+
return this.isString(target) && checkRegex(target, /^[0-9]+$/);
|
|
172
|
+
// 半角英字(大文字・小文字)
|
|
173
|
+
case 'alpha':
|
|
174
|
+
return this.isString(target) && checkRegex(target, /^[a-zA-Z]+$/);
|
|
175
|
+
// 半角英字(大文字のみ)
|
|
176
|
+
case 'upper':
|
|
177
|
+
return this.isString(target) && checkRegex(target, /^[A-Z]+$/);
|
|
178
|
+
// 半角英字(小文字のみ)
|
|
179
|
+
case 'lower':
|
|
180
|
+
return this.isString(target) && checkRegex(target, /^[a-z]+$/);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
exports.ValidationUtils = ValidationUtils;
|
|
185
|
+
//# sourceMappingURL=validationUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validationUtils.js","sourceRoot":"","sources":["../../../../src/core/validation/validationUtils.ts"],"names":[],"mappings":"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"}
|
package/README.md
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@food-log/utils",
|
|
3
|
+
"version": "0.0.32",
|
|
4
|
+
"description": "foodlog-utils package",
|
|
5
|
+
"author": "foodlog team",
|
|
6
|
+
"license": "PRIVATE",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+ssh://git@github.com:Food-Log/foodlog-utils.git"
|
|
10
|
+
},
|
|
11
|
+
"main": ".build/index.js",
|
|
12
|
+
"types": ".build/index.d.ts",
|
|
13
|
+
"files": [
|
|
14
|
+
".build"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"clear": "rm -rf .build",
|
|
18
|
+
"compile": "npm run clear && npx tsc",
|
|
19
|
+
"eslint": "eslint --cache --config .eslintrc.json --ext .ts src/",
|
|
20
|
+
"eslint-fix": "eslint --cache --config .eslintrc.json --fix --ext .ts src/",
|
|
21
|
+
"update-version": "npm version patch && git push --tags && git push origin",
|
|
22
|
+
"pub": "npm run eslint-fix && npm run compile && npm run update-version && npm publish"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"dayjs": "^1.11.1",
|
|
26
|
+
"firebase": "^9.7.0",
|
|
27
|
+
"lodash": "^4.17.21"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/lodash": "^4.14.182",
|
|
31
|
+
"@types/node": "^17.0.31",
|
|
32
|
+
"@typescript-eslint/eslint-plugin": "^5.22.0",
|
|
33
|
+
"@typescript-eslint/parser": "^5.22.0",
|
|
34
|
+
"eslint": "^7.23.0",
|
|
35
|
+
"eslint-config-prettier": "^6.10.0",
|
|
36
|
+
"eslint-plugin-import": "^2.20.1",
|
|
37
|
+
"eslint-plugin-prettier": "^3.1.2",
|
|
38
|
+
"eslint-plugin-unused-imports": "^2.0.0",
|
|
39
|
+
"prettier": "^2.2.1",
|
|
40
|
+
"typescript": "^4.2.4"
|
|
41
|
+
}
|
|
42
|
+
}
|