@uniai-fe/util-functions 0.2.12 → 0.2.13
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/api/index.cjs +4 -2
- package/dist/api/index.cjs.map +1 -1
- package/dist/api/index.mjs +4 -2
- package/dist/api/index.mjs.map +1 -1
- package/dist/convert/index.cjs +4 -2
- package/dist/convert/index.cjs.map +1 -1
- package/dist/convert/index.d.cts +2 -1
- package/dist/convert/index.d.ts +2 -1
- package/dist/convert/index.mjs +4 -2
- package/dist/convert/index.mjs.map +1 -1
- package/dist/date/index.cjs.map +1 -1
- package/dist/date/index.mjs.map +1 -1
- package/dist/format/index.cjs.map +1 -1
- package/dist/format/index.mjs.map +1 -1
- package/dist/index.cjs +4 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +4 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/validation/module.ts","../../src/convert/module.ts","../../src/mask/module.ts","../../src/format/module.ts"],"names":["d"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * validation; 인덱스 데이터 체크\n * @util\n * @validation\n * @param {string | number} idxValue 인덱스 데이터\n * @return {boolean}\n */\nimport type {\n BuildingNoListString,\n NullableNumericIdentifier,\n NumericIdentifier,\n TimeFormatString,\n} from \"./type\";\n\nexport const isValidIdx = (idxValue?: NumericIdentifier): boolean =>\n typeof idxValue !== \"undefined\" &&\n idxValue !== \"\" &&\n !isNaN(Number(idxValue)) &&\n Number(idxValue) > 0;\n\n/**\n * validation; 배열 데이터 체크\n * @util\n * @validation\n * @param {unknown} array 배열 데이터\n * @return {boolean}\n */\nexport const isValidArray = (array?: unknown): boolean =>\n typeof array !== \"undefined\" && Array.isArray(array);\n\n/**\n * validation; 사업자등록번호 데이터 체크\n * @util\n * @validation\n * @param {unknown} businessCode 농장 사업자등록번호\n * @return {boolean}\n */\nexport const isValidBusinessCode = (businessCode: unknown): boolean => {\n if (!businessCode) return false;\n if (String(businessCode).length === 10) return !isNaN(Number(businessCode));\n return false;\n};\n\n/**\n * validation; 날짜 변환을 허용할 유효 number 시간값 체크\n * @util\n * @validation\n * @param {number} dateNumber\n * @return {boolean}\n */\nexport const isValidDateNumber = (dateNumber: number): boolean => {\n const DATE_MIN = 1672498800000; // 2023-01-01T00:00:00\n const DATE_MAX = 4828172400000; // 2123-01-01T00:00:00\n return DATE_MIN < dateNumber && dateNumber < DATE_MAX;\n};\n\n/**\n * validation; 날짜 데이터 체크\n * @util\n * @validation\n * @param {unknown} date 날짜\n * @return {boolean}\n */\nexport const isValidDateType = (date: unknown): boolean => {\n if (!date) return false;\n if (\n typeof date === \"string\" ||\n (typeof date === \"number\" && isValidDateNumber(date)) ||\n date instanceof Date\n )\n return new Date(date) instanceof Date && !isNaN(new Date(date).valueOf());\n return false;\n};\n\n/**\n * validation; uuidx 계군 식별코드 데이터 체크\n * @util\n * @validation\n * @param {string} uuidx 계군 식별코드\n * @return {boolean}\n */\nexport const isValidUuidx = (uuidx?: string): boolean =>\n typeof uuidx !== \"undefined\" && uuidx !== \"\";\n\n/**\n * validation; 사육동 번호 데이터 체크\n * @util\n * @validation\n * @param {string | number} buildingNo 사육동 번호\n * @return {boolean}\n */\nexport const isValidBuildingNo = (\n buildingNo?: NullableNumericIdentifier,\n): boolean =>\n typeof buildingNo !== \"undefined\" &&\n buildingNo !== \"\" &&\n !isNaN(Number(buildingNo)) &&\n Number(buildingNo) > 0;\n\n/**\n * validation; building_no_s 사육동 번호 복수형 데이터 체크\n * @util\n * @validation\n * @param {string} buildingNoList 사육동 번호 1,2,4,...\n * @return {boolean}\n */\nexport const isValidBuildingNoList = (\n buildingNoList?: BuildingNoListString,\n): boolean =>\n typeof buildingNoList === \"string\" &&\n buildingNoList !== \"\" &&\n buildingNoList.split(\",\").length > 0;\n\n/**\n * validation; 숫자 데이터 체크\n * @util\n * @validation\n * @param {unknown} value 숫자 확인 데이터\n * @return {boolean}\n */\nexport const isValidNumber = (value: unknown): boolean =>\n typeof value !== \"undefined\" && !isNaN(Number(value)) && value !== \"\";\n\n/**\n * validation; 카테고리 이름이 업체인지 여부\n * @util\n * @validation\n * @param {string} categoryName 카테고리 이름\n * @return {boolean}\n */\nexport const isValidFirmCategory = (categoryName?: string): boolean =>\n typeof categoryName === \"string\" &&\n /[농장|정부기관|유통사|수의사|병성기관|부화장|도계장|사료|약품|유니아이]/.test(\n categoryName,\n );\n\n/**\n * validation; 카테고리 이름이 약품/사료인지 여부\n * @util\n * @validation\n * @param {string} categoryName 카테고리 이름\n * @return {boolean}\n */\nexport const isValidFeedMedicineCategory = (categoryName?: string): boolean =>\n typeof categoryName === \"string\" && /[약품|사료]/.test(categoryName);\n\n/**\n * validation; 시간 데이터 HH:MM:SS 포맷 체크\n * @util\n * @validation\n * @param {string} time\n * @return {boolean}\n */\nexport const isValidTimeStringFormat = (time: TimeFormatString): boolean => {\n const hms = time.split(\":\");\n if (hms.length !== 3 || hms.some(t => isNaN(Number(t)))) return false;\n\n // hour\n if (Number(hms[0]) < 0 || Number(hms[0]) > 24) return false;\n // minutes\n if (Number(hms[1]) < 0 || Number(hms[1]) > 59) return false;\n // seconds\n if (Number(hms[2]) < 0 || Number(hms[2]) > 59) return false;\n\n return true;\n};\n","import { isValidDateType } from \"../validation/module\";\nimport { dateFormat } from \"../format/module\";\nimport type { KeyChainRecord } from \"./type\";\n\nconst isKeyChainRecord = (value: unknown): value is KeyChainRecord =>\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n typeof value !== \"function\";\n\n/**\n * 데이터를 문자열로 변환한다.\n * @util\n * @param {unknown} value 변환 대상\n * @param {string} [fallback=\"\"] null/undefined 또는 직렬화 실패 시 사용할 기본값\n * @return {string}\n */\nexport const string = (value: unknown, fallback: string = \"\"): string => {\n if (value === undefined || value === null) {\n return fallback;\n }\n\n if (typeof value === \"string\") {\n return value;\n }\n\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n try {\n return JSON.stringify(value);\n } catch {\n return fallback;\n }\n};\n\n/**\n * 세션/로컬 스토리지 데이터 parsing\n * @util\n * @param {string} data 세션/로컬 스토리지 데이터\n * @return {unknown}\n */\nexport const parseData = (data: string): unknown => {\n // 괄호 여부 -> object | array\n if (/^(\\{|\\[)/.test(data)) return JSON.parse(data);\n // 숫자 여부 -> number\n else if (!isNaN(Number(data))) return Number(data);\n // 불리언 여부 -> boolean\n else if (data === \"true\" || data === \"false\") return JSON.parse(data);\n // undefined\n else if (data === \"undefined\") return undefined;\n\n return data; // string\n};\n\n/**\n * 키체인에 해당하는 데이터 추출\n * @util\n * @param {unknown} data 세션/로컬 스토리지 데이터\n * @param {string} keyChain 키체인\n * @return {unknown}\n */\nexport const getValueByKeyChain = (\n data: unknown,\n keyChain: string,\n): unknown => {\n // 프로퍼티를 가진 객체인지 확인\n if (isKeyChainRecord(data)) {\n // 키 체인이 남았는지 확인\n const firstChainIndex: number = keyChain.indexOf(\".\");\n if (firstChainIndex === -1) return data[keyChain as keyof KeyChainRecord];\n\n // 키 체인이 끝나지 않은 경우\n const currentKey: string = keyChain.slice(0, firstChainIndex);\n const remainKeyChain: string = keyChain.slice(firstChainIndex + 1);\n const foundData = data[currentKey as keyof KeyChainRecord];\n return isKeyChainRecord(foundData)\n ? getValueByKeyChain(foundData, remainKeyChain)\n : undefined;\n }\n\n return data;\n};\n\n/**\n * object -> URLSearchParams 데이터 변환\n * @param {unknown} data\n * @return {URLSearchParams | string}\n */\nexport const convertObjectToSearchParams = (data: unknown): URLSearchParams => {\n if (!data) {\n console.log(\"[convertObjectToSearchParams] 데이터가 유효하지 않음\", {\n data,\n });\n return new URLSearchParams();\n }\n if (data instanceof URLSearchParams) {\n return data;\n }\n\n if (isKeyChainRecord(data) && Object.keys(data).length > 0) {\n const d = Object.fromEntries(\n Object.entries(data).map(([key, value]) => [key, string(value)]),\n );\n return new URLSearchParams(d);\n }\n\n console.log(\"[convertObjectToSearchParams] 데이터가 객체가 아님\", {\n data,\n type: typeof data,\n key: isKeyChainRecord(data) ? Object.keys(data) : [],\n array: Array.isArray(data),\n });\n return new URLSearchParams();\n};\n\n// /**\n// * 배열 추가형 입력 테이블 register rule 필터링\n// * @util\n// * @param {RegisterOptionsType} ruleCollection\n// * @param {boolean} isActive\n// * @return {RegisterOptionsType}\n// */\n// export function getFieldArrayValidOptions(\n// ruleCollection: RegisterOptionsType,\n// isActive: boolean,\n// ): RegisterOptionsType {\n// const entries = Object.entries(ruleCollection);\n// const filtered = entries.map(([dataName, rule]) => {\n// const ruleEntries = Object.entries(rule).filter(\n// ([ruleKey]) => ruleKey !== \"required\",\n// );\n// return [dataName, Object.fromEntries(ruleEntries)];\n// });\n\n// return isActive ? ruleCollection : Object.fromEntries(filtered);\n// }\n\n/**\n * 텍스트 capitalize 첫글자 대문자 변환\n * @util\n * @param {string} value 텍스트\n * @return {string}\n */\nexport const capitalize = (value: string): string => {\n const first = value.charAt(0).toUpperCase();\n const others = value.slice(1);\n return `${first}${others}`;\n};\n\n/**\n * kg -> g 변환\n * @util\n * @param {number | string} kg\n * @return {number} gram\n */\nexport const covertGram = (kg: number | string): number => Number(kg) * 1000;\n\n/**\n * g -> kg 변환\n * @util\n * @param {number | string} gram\n * @return {number} kg\n */\nexport const covertKilogram = (gram: number | string): number =>\n Number(gram) / 1000;\n\n/**\n * ml -> L 변환\n * @util\n * @param {number | string} ml\n * @return {number} liter\n */\nexport const convertLiter = (ml: number | string): number => Number(ml) / 1000;\n\n/**\n * L -> ml 변환\n * @util\n * @param {number | string} liter\n * @return {number} ml\n */\nexport const convertMilliliter = (liter: number | string): number =>\n Number(liter) * 1000;\n\n/**\n * 데이터 가공\n * @util\n * @param {unknown} value\n * @return {unknown}\n * @desc\n * - 빈칸 또는 줄바꿈 텍스트 모두 제거\n * - 날짜 데이터 yyyy-mm-ddTHH:MM:SS 변환\n */\nexport function extractCoreValue<TOriginType>(value: TOriginType): TOriginType {\n if (isValidDateType(value)) return dateFormat(value) as TOriginType;\n if (typeof value === \"string\")\n return value.replace(/[\\s\\n\\t]+/g, \"\") as TOriginType;\n return value;\n}\n\n/**\n * 자연수로 된 숫자를, 지정된 자리수만큼 0을 채워서 반환\n * @util\n * @param {number} v 소수점 제외\n * @param {number} [digitLength] 자릿수 (기본값 2)\n * @return {string}\n */\nexport function convertDigit(v: number, digitLength: number = 2): string {\n const valueLength = String(Math.floor(v)).length;\n const restLength = digitLength - valueLength;\n const fill = Array(restLength).fill(0).join(\"\");\n\n return `${fill}${v}`;\n}\n\n/**\n * 날짜 시간을 2-digit으로 맞춤\n * @util\n * @param {number} date_time\n * @return {string}\n */\nexport const convert2Digit = (date_time: number): string =>\n date_time < 10 ? `0${date_time}` : String(date_time);\n\n/**\n * 숫자 정규화\n * @util\n * @param {number | undefined} value 숫자 후보값\n * @param {number} fallback 대체 숫자\n * @return {number}\n */\nexport const toFiniteNumber = (\n value: number | undefined,\n fallback: number,\n): number =>\n typeof value === \"number\" && Number.isFinite(value) ? value : fallback;\n","import type { MaskDecimalSeparatorOptions, MaskNumericValue } from \"./type\";\n\n/**\n * 전화번호 포맷 마스크\n * @util\n * @param {string | number} value\n * @return {string}\n * @desc\n * - 규칙: [\n * 999-9999(7),\n * 9999-9999(8),\n * 99-999-9999(9),\n * 99-9999-9999(10),\n * 999-999-9999(10),\n * 999-9999-9999(11),\n * ];\n * - 지역번호 구분:\n * 01X: 휴대전화\n * 02 ~ 0XX: 지역번호\n */\nexport function maskPhone(value: MaskNumericValue): string {\n // 입력값\n const originValue = String(value).replace(/[^0-9]/g, \"\");\n\n if (isNaN(Number(originValue))) return originValue;\n\n // 11자리 제한\n const v = originValue.length > 11 ? originValue.slice(0, 11) : originValue;\n\n let maskValue = v;\n\n // 999-9999\n if (3 < v.length && v.length <= 7) {\n maskValue = `${v.slice(0, 3)}-${v.slice(3)}`;\n }\n // 9999-9999\n else if (v.length === 8) {\n maskValue = `${v.slice(0, 4)}-${v.slice(4)}`;\n }\n // 99-999-9999\n else if (v.length === 9) {\n maskValue = `${v.slice(0, 2)}-${v.slice(2, 5)}-${v.slice(5)}`;\n }\n // 99-9999-9999, 999-999-9999\n else if (v.length === 10) {\n const firstDigits = v.startsWith(\"02\") ? 2 : 3;\n // 02-9999-9999\n if (firstDigits === 2) {\n maskValue = `${v.slice(0, 2)}-${v.slice(2, 6)}-${v.slice(6)}`;\n }\n // 0XX-999-9999\n else {\n maskValue = `${v.slice(0, 3)}-${v.slice(3, 6)}-${v.slice(6)}`;\n }\n } else if (v.length > 10) {\n maskValue = `${v.slice(0, 3)}-${v.slice(3, 7)}-${v.slice(7)}`;\n }\n\n return maskValue;\n}\n\n/**\n * 주민등록번호 포맷 마스크\n * @util\n * @param {string | number} value\n * @return {string}\n * @desc\n * - 규칙: 999999-9999999\n */\nexport function maskResidentCode(value: MaskNumericValue): string {\n // 입력값\n const originValue = String(value).replace(/[^0-9]/g, \"\");\n\n if (isNaN(Number(originValue))) return originValue;\n\n // 11자리 제한\n const v = originValue.length > 6 ? originValue.slice(0, 6) : originValue;\n return v.length > 6 ? v.slice(0, 6) : v;\n\n let maskValue = v;\n\n // 999999-9999999\n if (6 < v.length) {\n maskValue = `${v.slice(0, 6)}-${v.slice(6)}`;\n }\n\n return maskValue;\n}\n\n/**\n * 사업자등록번호 포맷 마스크\n * @util\n * @param {string | number} value\n * @return {string}\n * @desc\n * - 규칙: 999-99-99999\n */\nexport function maskBusinessCode(value: MaskNumericValue): string {\n // 입력값\n const originValue = String(value).replace(/[^0-9]/g, \"\");\n\n if (isNaN(Number(originValue))) return originValue;\n\n // 11자리 제한\n const v = originValue.length > 10 ? originValue.slice(0, 10) : originValue;\n\n let maskValue = v;\n\n // 999-99-99999\n if (3 < v.length && v.length < 6) {\n maskValue = `${v.slice(0, 3)}-${v.slice(3)}`;\n } else if (6 <= v.length) {\n maskValue = `${v.slice(0, 3)}-${v.slice(3, 5)}-${v.slice(5)}`;\n }\n\n return maskValue;\n}\n\n/**\n * 1,000단위 숫자 구분 comma (decimal separator)\n * @util\n * @param {string | number} value\n * @param {Intl.NumberFormatOptions} options\n * @return {string}\n */\nexport function maskDecimalSeparator(\n value: MaskNumericValue,\n options?: MaskDecimalSeparatorOptions,\n): string {\n // 입력값\n const pureNumberValue = String(value).replace(/[^0-9.-]/g, \"\");\n\n if (isNaN(Number(pureNumberValue))) return pureNumberValue;\n\n const originValue = String(value).replace(/[^0-9,.-]/g, \"\");\n const isPoint =\n originValue !== \"\" && originValue.indexOf(\".\") === originValue.length - 1;\n\n const v = String(value).replace(/[^0-9.-]/g, \"\");\n if (isNaN(Number(v))) return String(originValue);\n\n return v === \"\"\n ? \"\"\n : `${new Intl.NumberFormat(\"en-US\", {\n style: \"decimal\",\n ...options,\n }).format(Number(v))}${isPoint ? \".\" : \"\"}`;\n}\n\n/**\n * 날짜 표현\n * @util\n * @param {string | number} value\n * @return {string}\n * @desc\n * - 규칙 : 9999-99-99\n */\nexport function maskDate(value: MaskNumericValue): string {\n // 입력값\n const originValue = String(value).replace(/[^0-9]/g, \"\");\n\n if (isNaN(Number(originValue))) return originValue;\n\n // 8자리 제한\n const v = originValue.length > 8 ? originValue.slice(0, 8) : originValue;\n\n let maskValue = v;\n\n // 9999.99.99.\n if (4 < v.length && v.length < 7) {\n maskValue = `${v.slice(0, 4)}-${v.slice(4)}`;\n } else if (7 <= v.length) {\n maskValue = `${v.slice(0, 4)}-${v.slice(4, 6)}-${v.slice(6)}`;\n }\n\n return maskValue;\n}\n","import { convert2Digit } from \"../convert/module\";\nimport { maskPhone } from \"../mask/module\";\nimport { isValidDateType } from \"../validation/module\";\nimport Decimal from \"decimal.js\";\nimport type { DateTimeFormatOptionsType, DurationFormatOptions } from \"./type\";\n\n// fileSize 계산 전용 Decimal 상수(1024^n)를 모듈 단위로 고정해 재사용한다.\nconst FILE_SIZE_AMOUNT = new Decimal(1024);\nconst FILE_SIZE_K_AMOUNT = FILE_SIZE_AMOUNT.mul(FILE_SIZE_AMOUNT);\nconst FILE_SIZE_M_AMOUNT = FILE_SIZE_K_AMOUNT.mul(FILE_SIZE_AMOUNT);\n\n/**\n * comma 마스킹된 숫자 Number 타입으로 변환\n * @util\n * @param {number | string} value 타입 변환 값\n * @param {boolean} [isString]\n * @return {number | string}\n */\nexport const getNumberReplaceComma = (\n value: unknown,\n isString?: boolean,\n): number | string => {\n if (\n ![\"number\", \"string\"].includes(typeof value) ||\n value === null ||\n value === \"\"\n )\n return \"\";\n\n if (typeof value === \"number\") return value;\n\n const v = Number(String(value).replace(/[^0-9.-]/g, \"\"));\n if (isNaN(Number(v))) return isString ? \"\" : 0;\n\n return isString ? String(v) : v;\n};\n\n/**\n * 수량을 1000단위로 comma표기\n * @util\n * @param {unknown} value 숫자\n * @param {number} [digit] 소수점 자리수 고정 옵션\n * @return {string}\n */\nexport const lengthFormat = (value: unknown, digit?: number): string => {\n if (\n ![\"number\", \"string\"].includes(typeof value) ||\n value === null ||\n value === \"\"\n )\n return \"-\";\n\n if (isNaN(Number(getNumberReplaceComma(value)))) return String(value);\n\n // 소수점 고정 옵션\n const digitOptions: Intl.NumberFormatOptions =\n typeof digit === \"number\"\n ? { minimumFractionDigits: digit, maximumFractionDigits: digit }\n : {};\n\n return new Intl.NumberFormat(\"en-US\", digitOptions).format(Number(value));\n};\n\n/**\n * 날짜 사용 옵션\n */\nconst DATE_FULL_OPTION: Intl.DateTimeFormatOptions = {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n};\n\n/**\n * 날짜 사용 안함 옵션\n */\nconst NO_DATE_OPTION: Intl.DateTimeFormatOptions = {\n year: undefined,\n month: undefined,\n day: undefined,\n};\n\n/**\n * 24시간 사용 옵션\n */\nconst TIME_FULL_OPTION: Intl.DateTimeFormatOptions = {\n hour12: false,\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n};\n\n/**\n * 시간 사용 안함 옵션\n */\nconst NO_TIME_OPTION: Intl.DateTimeFormatOptions = {\n hour: undefined,\n minute: undefined,\n second: undefined,\n};\n\n/**\n * 접속위치에 따른 시간대 보정\n * @util\n * @param {Date} date 보정할 시간\n * @return {Date} 보정된 시간\n */\n// 변경: correctTimezone 함수를 UTC 산출 후 KST로 변경\nexport const correctTimezone = (date: string | Date): Date => {\n const utc =\n new Date(date).getTime() + new Date(date).getTimezoneOffset() * 60000;\n return new Date(utc + 9 * 60 * 60000);\n};\n\n/**\n * Date 타입 데이터를 yyyy-mm-dd로 변환\n * @util\n * @param {unknown} date\n * @param {DateTimeFormatOptionsType} [options]\n * @param {Intl.LocalesArgument} [options.formatTimezone] 시간 기준; 기본값 ko-KR\n * @param {Intl.DateTimeFormatOptions} [options.formatOptions]\n * @param {boolean | boolean[]} [options.isKorean] // ymd 또는 [year, month?, day?]\n * @param {boolean} [options.isCorrection] 시간 보정\n * @param {boolean} [options.isISOString] ISO 문자열\n * @return {string} yyyy-mm-dd 또는 각 옵션에 대한 날짜포맷\n */\n// 변경: dateFormat 함수에서 isCorrection 옵션 사용 시 toISOString()의 결과를 슬라이스하여 \"YYYY-MM-DDTHH:MM:SS\" 형식 반환\nexport const dateFormat = (\n date: unknown,\n options?: Partial<DateTimeFormatOptionsType>,\n): string => {\n if (isValidDateType(date)) {\n const d = new Date(date as string | number | Date);\n const corrDate = correctTimezone(d);\n\n // toISOString()으로 변환 시, KST 적용되지 않음\n const defaultDateFormat = options?.isCorrection\n ? `${corrDate.getFullYear()}-${convert2Digit(corrDate.getMonth() + 1)}-${convert2Digit(corrDate.getDate())}`\n : `${d.getFullYear()}-${convert2Digit(d.getMonth() + 1)}-${convert2Digit(d.getDate())}`;\n\n if (options?.isISOString) return defaultDateFormat;\n\n const onlyDate = defaultDateFormat || \"\";\n\n if (options?.isKorean) {\n const [y, m, d] = onlyDate.split(\"-\");\n if (options.isKorean === true) return `${y}년 ${m}월 ${d}일`;\n const __ymd = options.isKorean.map((apply, index) => {\n switch (index) {\n case 0:\n return apply ? `${y}년` : \"\";\n case 1:\n return apply ? `${m}월` : \"\";\n case 2:\n return apply ? `${d}일` : \"\";\n default:\n return \"\";\n }\n });\n return __ymd.join(\" \");\n }\n\n if (typeof options?.formatOptions !== \"undefined\")\n return new Intl.DateTimeFormat(\n options?.formatTimezone ? options.formatTimezone : \"ko-KR\",\n { ...DATE_FULL_OPTION, ...options.formatOptions, ...NO_TIME_OPTION },\n ).format(d);\n return onlyDate;\n }\n return String(date);\n};\n\n/**\n * Date 타입 데이터를 HH:MM:SS 시간으로 변환\n * @util\n * @param {unknown} date\n * @param {DateTimeFormatOptionsType} [options]\n * @param {Intl.LocalesArgument} [options.formatTimezone] 시간 기준; 기본값 ko-KR\n * @param {Intl.DateTimeFormatOptions} [options.formatOptions]\n * @param {boolean | boolean[]} [options.isKorean] // ymd 또는 [year, month?, day?]\n * @param {boolean} [options.isCorrection] 시간 보정\n * @param {boolean} [options.isISOString] ISO 문자열\n * @return {string} HH:MM:SS\n */\n// 변경: timeFormat 함수에서 isCorrection 옵션 사용 시 toISOString()의 시간 부분만 슬라이스하여 \"HH:MM:SS\" 형식 반환\nexport const timeFormat = (\n date: unknown,\n options?: Partial<DateTimeFormatOptionsType>,\n): string => {\n if (isValidDateType(date)) {\n const d = new Date(date as string | number | Date);\n\n if (options?.isKST) {\n const utc = d.getTime() + 60 * 60 * 1000 * 9;\n d.setTime(utc);\n }\n\n const defaultDateFormat = options?.isCorrection\n ? correctTimezone(d).toISOString().split(\"T\")[1].split(\".\")[0]\n : new Intl.DateTimeFormat(\"en-US\", {\n ...TIME_FULL_OPTION,\n ...NO_DATE_OPTION,\n }).format(d);\n\n if (options?.isISOString) return defaultDateFormat;\n\n const onlyDate = defaultDateFormat || \"\";\n\n if (options?.isKorean) {\n const [hr, min, sec] = onlyDate.split(\":\");\n if (options.isKorean === true) return `${hr}시간 ${min}분 ${sec}초`;\n const __hms = options.isKorean.map((apply, index) => {\n switch (index) {\n case 0:\n return apply ? `${hr}시간` : \"\";\n case 1:\n return apply ? `${min}분` : \"\";\n case 2:\n return apply ? `${d}초` : \"\";\n default:\n return \"\";\n }\n });\n return __hms.join(\" \");\n }\n\n if (typeof options?.formatOptions !== \"undefined\") {\n const res = new Intl.DateTimeFormat(\n options?.formatTimezone ? options.formatTimezone : \"ko-KR\",\n { ...TIME_FULL_OPTION, ...options.formatOptions, ...NO_DATE_OPTION },\n ).format(d);\n\n // console.log(\"res\", res);\n return res;\n }\n\n return onlyDate;\n }\n return String(date);\n};\n\n/**\n * 소요시간 변환\n * @util\n * @param {number | null} duration 초 단위 시간값\n */\nexport const durationFormat = (\n duration: number | null,\n options?: Partial<DurationFormatOptions>,\n): string => {\n if (duration === null) return String(duration);\n\n const hours: number | null =\n options?.hours === false ? null : Math.floor(duration / (60 * 60));\n const minutes: number | null =\n options?.minutes === false ? null : Math.floor((duration % (60 * 60)) / 60);\n const seconds: number | null =\n options?.seconds === false ? null : duration % 60;\n\n const HH = hours !== null ? `${hours}시간 ` : \"\";\n const MM = minutes !== null ? `${minutes}분 ` : \"\";\n const SS = seconds !== null ? `${seconds}초` : \"\";\n\n return `${HH}${MM}${SS}`.trim();\n};\n\n/**\n * 전화번호 타입 데이터로 변환\n * @util\n * @param {string | number} value\n * @return {string}\n * @desc\n * - 규칙: [\n * 999-9999(7),\n * 9999-9999(8),\n * 99-999-9999(9),\n * 99-9999-9999(10),\n * 999-999-9999(10),\n * 999-9999-9999(11),\n * ];\n * - 지역번호 구분:\n * 01X: 휴대전화\n * 02 ~ 0XX: 지역번호\n */\nexport const phoneNumberFormat = maskPhone;\n\n/**\n * 정수 숫자를 +/-를 붙인 형태로 변환\n * @util\n * @param {unknown} value\n * @param {boolean} [isMaskLength] 길이 마스킹 여부\n * @return {string}\n */\nexport const deltaFormat = (\n value: unknown,\n digit: number = 0,\n isMaskLength: boolean = true,\n): string => {\n if (typeof value === \"undefined\" || value === null || isNaN(Number(value)))\n return \"-\";\n\n const v = Number(value);\n\n if (v > 0) return isMaskLength ? `+${lengthFormat(v, digit)}` : `+${v}`;\n return lengthFormat(v, digit);\n};\n\n/**\n * 거리를 m 또는 km로 변환\n * @util\n * @param {number | null} distance\n * @return {string}\n */\nexport const distanceFormat = (\n distance: number | null,\n isUseUnit: boolean = true,\n): string => {\n if (distance === null) return \"-\";\n if (distance < 1000) return `${distance}${isUseUnit ? \"m\" : \"\"}`;\n return `${Math.floor(distance / 1000)}${isUseUnit ? \"km\" : \"\"}`;\n};\n\n/**\n * 파일 용량 문자열 포맷\n * @util\n * @param {unknown} size byte 단위 파일 크기\n * @param {boolean} [unit=true] GB 표시 시 소수점 자릿수 정책\n * @return {string}\n */\nexport const fileSize = (size: unknown, unit: boolean = true): string => {\n if (typeof size !== \"number\" || (size && isNaN(Number(size)))) return \"\";\n\n const byte = new Decimal(size);\n const kb = byte.div(FILE_SIZE_AMOUNT);\n const mb = kb.div(FILE_SIZE_AMOUNT);\n const gb = mb.div(FILE_SIZE_AMOUNT);\n\n if (byte.lessThan(FILE_SIZE_AMOUNT)) return `${byte.toFixed(0)}B`;\n if (byte.lessThan(FILE_SIZE_K_AMOUNT)) return `${kb.toFixed(0)}KB`;\n if (byte.lessThan(FILE_SIZE_M_AMOUNT)) return `${mb.toFixed(0)}MB`;\n return unit ? `${gb.toFixed(0)}GB` : `${gb.toFixed(2)} GB`;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/validation/module.ts","../../src/convert/module.ts","../../src/mask/module.ts","../../src/format/module.ts"],"names":["d"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * validation; 인덱스 데이터 체크\n * @util\n * @validation\n * @param {string | number} idxValue 인덱스 데이터\n * @return {boolean}\n */\nimport type {\n BuildingNoListString,\n NullableNumericIdentifier,\n NumericIdentifier,\n TimeFormatString,\n} from \"./type\";\n\nexport const isValidIdx = (idxValue?: NumericIdentifier): boolean =>\n typeof idxValue !== \"undefined\" &&\n idxValue !== \"\" &&\n !isNaN(Number(idxValue)) &&\n Number(idxValue) > 0;\n\n/**\n * validation; 배열 데이터 체크\n * @util\n * @validation\n * @param {unknown} array 배열 데이터\n * @return {boolean}\n */\nexport const isValidArray = (array?: unknown): boolean =>\n typeof array !== \"undefined\" && Array.isArray(array);\n\n/**\n * validation; 사업자등록번호 데이터 체크\n * @util\n * @validation\n * @param {unknown} businessCode 농장 사업자등록번호\n * @return {boolean}\n */\nexport const isValidBusinessCode = (businessCode: unknown): boolean => {\n if (!businessCode) return false;\n if (String(businessCode).length === 10) return !isNaN(Number(businessCode));\n return false;\n};\n\n/**\n * validation; 날짜 변환을 허용할 유효 number 시간값 체크\n * @util\n * @validation\n * @param {number} dateNumber\n * @return {boolean}\n */\nexport const isValidDateNumber = (dateNumber: number): boolean => {\n const DATE_MIN = 1672498800000; // 2023-01-01T00:00:00\n const DATE_MAX = 4828172400000; // 2123-01-01T00:00:00\n return DATE_MIN < dateNumber && dateNumber < DATE_MAX;\n};\n\n/**\n * validation; 날짜 데이터 체크\n * @util\n * @validation\n * @param {unknown} date 날짜\n * @return {boolean}\n */\nexport const isValidDateType = (date: unknown): boolean => {\n if (!date) return false;\n if (\n typeof date === \"string\" ||\n (typeof date === \"number\" && isValidDateNumber(date)) ||\n date instanceof Date\n )\n return new Date(date) instanceof Date && !isNaN(new Date(date).valueOf());\n return false;\n};\n\n/**\n * validation; uuidx 계군 식별코드 데이터 체크\n * @util\n * @validation\n * @param {string} uuidx 계군 식별코드\n * @return {boolean}\n */\nexport const isValidUuidx = (uuidx?: string): boolean =>\n typeof uuidx !== \"undefined\" && uuidx !== \"\";\n\n/**\n * validation; 사육동 번호 데이터 체크\n * @util\n * @validation\n * @param {string | number} buildingNo 사육동 번호\n * @return {boolean}\n */\nexport const isValidBuildingNo = (\n buildingNo?: NullableNumericIdentifier,\n): boolean =>\n typeof buildingNo !== \"undefined\" &&\n buildingNo !== \"\" &&\n !isNaN(Number(buildingNo)) &&\n Number(buildingNo) > 0;\n\n/**\n * validation; building_no_s 사육동 번호 복수형 데이터 체크\n * @util\n * @validation\n * @param {string} buildingNoList 사육동 번호 1,2,4,...\n * @return {boolean}\n */\nexport const isValidBuildingNoList = (\n buildingNoList?: BuildingNoListString,\n): boolean =>\n typeof buildingNoList === \"string\" &&\n buildingNoList !== \"\" &&\n buildingNoList.split(\",\").length > 0;\n\n/**\n * validation; 숫자 데이터 체크\n * @util\n * @validation\n * @param {unknown} value 숫자 확인 데이터\n * @return {boolean}\n */\nexport const isValidNumber = (value: unknown): boolean =>\n typeof value !== \"undefined\" && !isNaN(Number(value)) && value !== \"\";\n\n/**\n * validation; 카테고리 이름이 업체인지 여부\n * @util\n * @validation\n * @param {string} categoryName 카테고리 이름\n * @return {boolean}\n */\nexport const isValidFirmCategory = (categoryName?: string): boolean =>\n typeof categoryName === \"string\" &&\n /[농장|정부기관|유통사|수의사|병성기관|부화장|도계장|사료|약품|유니아이]/.test(\n categoryName,\n );\n\n/**\n * validation; 카테고리 이름이 약품/사료인지 여부\n * @util\n * @validation\n * @param {string} categoryName 카테고리 이름\n * @return {boolean}\n */\nexport const isValidFeedMedicineCategory = (categoryName?: string): boolean =>\n typeof categoryName === \"string\" && /[약품|사료]/.test(categoryName);\n\n/**\n * validation; 시간 데이터 HH:MM:SS 포맷 체크\n * @util\n * @validation\n * @param {string} time\n * @return {boolean}\n */\nexport const isValidTimeStringFormat = (time: TimeFormatString): boolean => {\n const hms = time.split(\":\");\n if (hms.length !== 3 || hms.some(t => isNaN(Number(t)))) return false;\n\n // hour\n if (Number(hms[0]) < 0 || Number(hms[0]) > 24) return false;\n // minutes\n if (Number(hms[1]) < 0 || Number(hms[1]) > 59) return false;\n // seconds\n if (Number(hms[2]) < 0 || Number(hms[2]) > 59) return false;\n\n return true;\n};\n","import { isValidDateType } from \"../validation/module\";\nimport { dateFormat } from \"../format/module\";\nimport type { KeyChainRecord } from \"./type\";\n\nconst isKeyChainRecord = (value: unknown): value is KeyChainRecord =>\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n typeof value !== \"function\";\n\n/**\n * 데이터를 문자열로 변환한다.\n * @util\n * @param {unknown} value 변환 대상\n * @param {string} [fallback=\"\"] null/undefined 또는 직렬화 실패 시 사용할 기본값\n * @return {string}\n */\nexport const string = (value: unknown, fallback: string = \"\"): string => {\n if (value === undefined || value === null) {\n return fallback;\n }\n\n if (typeof value === \"string\") {\n return value;\n }\n\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n try {\n return JSON.stringify(value);\n } catch {\n return fallback;\n }\n};\n\n/**\n * 세션/로컬 스토리지 데이터 parsing\n * @util\n * @param {string} data 세션/로컬 스토리지 데이터\n * @return {unknown}\n */\nexport const parseData = (data: string): unknown => {\n // 괄호 여부 -> object | array\n if (/^(\\{|\\[)/.test(data)) return JSON.parse(data);\n // 숫자 여부 -> number\n else if (!isNaN(Number(data))) return Number(data);\n // 불리언 여부 -> boolean\n else if (data === \"true\" || data === \"false\") return JSON.parse(data);\n // undefined\n else if (data === \"undefined\") return undefined;\n\n return data; // string\n};\n\n/**\n * 키체인에 해당하는 데이터 추출\n * @util\n * @param {unknown} data 세션/로컬 스토리지 데이터\n * @param {string} keyChain 키체인\n * @return {unknown}\n */\nexport const getValueByKeyChain = (\n data: unknown,\n keyChain: string,\n): unknown => {\n // 프로퍼티를 가진 객체인지 확인\n if (isKeyChainRecord(data)) {\n // 키 체인이 남았는지 확인\n const firstChainIndex: number = keyChain.indexOf(\".\");\n if (firstChainIndex === -1) return data[keyChain as keyof KeyChainRecord];\n\n // 키 체인이 끝나지 않은 경우\n const currentKey: string = keyChain.slice(0, firstChainIndex);\n const remainKeyChain: string = keyChain.slice(firstChainIndex + 1);\n const foundData = data[currentKey as keyof KeyChainRecord];\n return isKeyChainRecord(foundData)\n ? getValueByKeyChain(foundData, remainKeyChain)\n : undefined;\n }\n\n return data;\n};\n\n/**\n * object -> URLSearchParams 데이터 변환\n * @param {unknown} data\n * @param {unknown} [debug] 디버그용 추가 파라미터\n * @return {URLSearchParams | string}\n */\nexport const convertObjectToSearchParams = (\n data: unknown,\n debug?: unknown,\n): URLSearchParams => {\n if (!data) {\n console.log(\"[convertObjectToSearchParams] 데이터가 유효하지 않음\", {\n data,\n debug,\n });\n return new URLSearchParams();\n }\n if (data instanceof URLSearchParams) {\n return data;\n }\n\n if (isKeyChainRecord(data) && Object.keys(data).length > 0) {\n const d = Object.fromEntries(\n Object.entries(data).map(([key, value]) => [key, string(value)]),\n );\n return new URLSearchParams(d);\n }\n\n console.log(\"[convertObjectToSearchParams] 데이터가 객체가 아님\", {\n data,\n debug,\n type: typeof data,\n key: isKeyChainRecord(data) ? Object.keys(data) : [],\n array: Array.isArray(data),\n });\n return new URLSearchParams();\n};\n\n// /**\n// * 배열 추가형 입력 테이블 register rule 필터링\n// * @util\n// * @param {RegisterOptionsType} ruleCollection\n// * @param {boolean} isActive\n// * @return {RegisterOptionsType}\n// */\n// export function getFieldArrayValidOptions(\n// ruleCollection: RegisterOptionsType,\n// isActive: boolean,\n// ): RegisterOptionsType {\n// const entries = Object.entries(ruleCollection);\n// const filtered = entries.map(([dataName, rule]) => {\n// const ruleEntries = Object.entries(rule).filter(\n// ([ruleKey]) => ruleKey !== \"required\",\n// );\n// return [dataName, Object.fromEntries(ruleEntries)];\n// });\n\n// return isActive ? ruleCollection : Object.fromEntries(filtered);\n// }\n\n/**\n * 텍스트 capitalize 첫글자 대문자 변환\n * @util\n * @param {string} value 텍스트\n * @return {string}\n */\nexport const capitalize = (value: string): string => {\n const first = value.charAt(0).toUpperCase();\n const others = value.slice(1);\n return `${first}${others}`;\n};\n\n/**\n * kg -> g 변환\n * @util\n * @param {number | string} kg\n * @return {number} gram\n */\nexport const covertGram = (kg: number | string): number => Number(kg) * 1000;\n\n/**\n * g -> kg 변환\n * @util\n * @param {number | string} gram\n * @return {number} kg\n */\nexport const covertKilogram = (gram: number | string): number =>\n Number(gram) / 1000;\n\n/**\n * ml -> L 변환\n * @util\n * @param {number | string} ml\n * @return {number} liter\n */\nexport const convertLiter = (ml: number | string): number => Number(ml) / 1000;\n\n/**\n * L -> ml 변환\n * @util\n * @param {number | string} liter\n * @return {number} ml\n */\nexport const convertMilliliter = (liter: number | string): number =>\n Number(liter) * 1000;\n\n/**\n * 데이터 가공\n * @util\n * @param {unknown} value\n * @return {unknown}\n * @desc\n * - 빈칸 또는 줄바꿈 텍스트 모두 제거\n * - 날짜 데이터 yyyy-mm-ddTHH:MM:SS 변환\n */\nexport function extractCoreValue<TOriginType>(value: TOriginType): TOriginType {\n if (isValidDateType(value)) return dateFormat(value) as TOriginType;\n if (typeof value === \"string\")\n return value.replace(/[\\s\\n\\t]+/g, \"\") as TOriginType;\n return value;\n}\n\n/**\n * 자연수로 된 숫자를, 지정된 자리수만큼 0을 채워서 반환\n * @util\n * @param {number} v 소수점 제외\n * @param {number} [digitLength] 자릿수 (기본값 2)\n * @return {string}\n */\nexport function convertDigit(v: number, digitLength: number = 2): string {\n const valueLength = String(Math.floor(v)).length;\n const restLength = digitLength - valueLength;\n const fill = Array(restLength).fill(0).join(\"\");\n\n return `${fill}${v}`;\n}\n\n/**\n * 날짜 시간을 2-digit으로 맞춤\n * @util\n * @param {number} date_time\n * @return {string}\n */\nexport const convert2Digit = (date_time: number): string =>\n date_time < 10 ? `0${date_time}` : String(date_time);\n\n/**\n * 숫자 정규화\n * @util\n * @param {number | undefined} value 숫자 후보값\n * @param {number} fallback 대체 숫자\n * @return {number}\n */\nexport const toFiniteNumber = (\n value: number | undefined,\n fallback: number,\n): number =>\n typeof value === \"number\" && Number.isFinite(value) ? value : fallback;\n","import type { MaskDecimalSeparatorOptions, MaskNumericValue } from \"./type\";\n\n/**\n * 전화번호 포맷 마스크\n * @util\n * @param {string | number} value\n * @return {string}\n * @desc\n * - 규칙: [\n * 999-9999(7),\n * 9999-9999(8),\n * 99-999-9999(9),\n * 99-9999-9999(10),\n * 999-999-9999(10),\n * 999-9999-9999(11),\n * ];\n * - 지역번호 구분:\n * 01X: 휴대전화\n * 02 ~ 0XX: 지역번호\n */\nexport function maskPhone(value: MaskNumericValue): string {\n // 입력값\n const originValue = String(value).replace(/[^0-9]/g, \"\");\n\n if (isNaN(Number(originValue))) return originValue;\n\n // 11자리 제한\n const v = originValue.length > 11 ? originValue.slice(0, 11) : originValue;\n\n let maskValue = v;\n\n // 999-9999\n if (3 < v.length && v.length <= 7) {\n maskValue = `${v.slice(0, 3)}-${v.slice(3)}`;\n }\n // 9999-9999\n else if (v.length === 8) {\n maskValue = `${v.slice(0, 4)}-${v.slice(4)}`;\n }\n // 99-999-9999\n else if (v.length === 9) {\n maskValue = `${v.slice(0, 2)}-${v.slice(2, 5)}-${v.slice(5)}`;\n }\n // 99-9999-9999, 999-999-9999\n else if (v.length === 10) {\n const firstDigits = v.startsWith(\"02\") ? 2 : 3;\n // 02-9999-9999\n if (firstDigits === 2) {\n maskValue = `${v.slice(0, 2)}-${v.slice(2, 6)}-${v.slice(6)}`;\n }\n // 0XX-999-9999\n else {\n maskValue = `${v.slice(0, 3)}-${v.slice(3, 6)}-${v.slice(6)}`;\n }\n } else if (v.length > 10) {\n maskValue = `${v.slice(0, 3)}-${v.slice(3, 7)}-${v.slice(7)}`;\n }\n\n return maskValue;\n}\n\n/**\n * 주민등록번호 포맷 마스크\n * @util\n * @param {string | number} value\n * @return {string}\n * @desc\n * - 규칙: 999999-9999999\n */\nexport function maskResidentCode(value: MaskNumericValue): string {\n // 입력값\n const originValue = String(value).replace(/[^0-9]/g, \"\");\n\n if (isNaN(Number(originValue))) return originValue;\n\n // 11자리 제한\n const v = originValue.length > 6 ? originValue.slice(0, 6) : originValue;\n return v.length > 6 ? v.slice(0, 6) : v;\n\n let maskValue = v;\n\n // 999999-9999999\n if (6 < v.length) {\n maskValue = `${v.slice(0, 6)}-${v.slice(6)}`;\n }\n\n return maskValue;\n}\n\n/**\n * 사업자등록번호 포맷 마스크\n * @util\n * @param {string | number} value\n * @return {string}\n * @desc\n * - 규칙: 999-99-99999\n */\nexport function maskBusinessCode(value: MaskNumericValue): string {\n // 입력값\n const originValue = String(value).replace(/[^0-9]/g, \"\");\n\n if (isNaN(Number(originValue))) return originValue;\n\n // 11자리 제한\n const v = originValue.length > 10 ? originValue.slice(0, 10) : originValue;\n\n let maskValue = v;\n\n // 999-99-99999\n if (3 < v.length && v.length < 6) {\n maskValue = `${v.slice(0, 3)}-${v.slice(3)}`;\n } else if (6 <= v.length) {\n maskValue = `${v.slice(0, 3)}-${v.slice(3, 5)}-${v.slice(5)}`;\n }\n\n return maskValue;\n}\n\n/**\n * 1,000단위 숫자 구분 comma (decimal separator)\n * @util\n * @param {string | number} value\n * @param {Intl.NumberFormatOptions} options\n * @return {string}\n */\nexport function maskDecimalSeparator(\n value: MaskNumericValue,\n options?: MaskDecimalSeparatorOptions,\n): string {\n // 입력값\n const pureNumberValue = String(value).replace(/[^0-9.-]/g, \"\");\n\n if (isNaN(Number(pureNumberValue))) return pureNumberValue;\n\n const originValue = String(value).replace(/[^0-9,.-]/g, \"\");\n const isPoint =\n originValue !== \"\" && originValue.indexOf(\".\") === originValue.length - 1;\n\n const v = String(value).replace(/[^0-9.-]/g, \"\");\n if (isNaN(Number(v))) return String(originValue);\n\n return v === \"\"\n ? \"\"\n : `${new Intl.NumberFormat(\"en-US\", {\n style: \"decimal\",\n ...options,\n }).format(Number(v))}${isPoint ? \".\" : \"\"}`;\n}\n\n/**\n * 날짜 표현\n * @util\n * @param {string | number} value\n * @return {string}\n * @desc\n * - 규칙 : 9999-99-99\n */\nexport function maskDate(value: MaskNumericValue): string {\n // 입력값\n const originValue = String(value).replace(/[^0-9]/g, \"\");\n\n if (isNaN(Number(originValue))) return originValue;\n\n // 8자리 제한\n const v = originValue.length > 8 ? originValue.slice(0, 8) : originValue;\n\n let maskValue = v;\n\n // 9999.99.99.\n if (4 < v.length && v.length < 7) {\n maskValue = `${v.slice(0, 4)}-${v.slice(4)}`;\n } else if (7 <= v.length) {\n maskValue = `${v.slice(0, 4)}-${v.slice(4, 6)}-${v.slice(6)}`;\n }\n\n return maskValue;\n}\n","import { convert2Digit } from \"../convert/module\";\nimport { maskPhone } from \"../mask/module\";\nimport { isValidDateType } from \"../validation/module\";\nimport Decimal from \"decimal.js\";\nimport type { DateTimeFormatOptionsType, DurationFormatOptions } from \"./type\";\n\n// fileSize 계산 전용 Decimal 상수(1024^n)를 모듈 단위로 고정해 재사용한다.\nconst FILE_SIZE_AMOUNT = new Decimal(1024);\nconst FILE_SIZE_K_AMOUNT = FILE_SIZE_AMOUNT.mul(FILE_SIZE_AMOUNT);\nconst FILE_SIZE_M_AMOUNT = FILE_SIZE_K_AMOUNT.mul(FILE_SIZE_AMOUNT);\n\n/**\n * comma 마스킹된 숫자 Number 타입으로 변환\n * @util\n * @param {number | string} value 타입 변환 값\n * @param {boolean} [isString]\n * @return {number | string}\n */\nexport const getNumberReplaceComma = (\n value: unknown,\n isString?: boolean,\n): number | string => {\n if (\n ![\"number\", \"string\"].includes(typeof value) ||\n value === null ||\n value === \"\"\n )\n return \"\";\n\n if (typeof value === \"number\") return value;\n\n const v = Number(String(value).replace(/[^0-9.-]/g, \"\"));\n if (isNaN(Number(v))) return isString ? \"\" : 0;\n\n return isString ? String(v) : v;\n};\n\n/**\n * 수량을 1000단위로 comma표기\n * @util\n * @param {unknown} value 숫자\n * @param {number} [digit] 소수점 자리수 고정 옵션\n * @return {string}\n */\nexport const lengthFormat = (value: unknown, digit?: number): string => {\n if (\n ![\"number\", \"string\"].includes(typeof value) ||\n value === null ||\n value === \"\"\n )\n return \"-\";\n\n if (isNaN(Number(getNumberReplaceComma(value)))) return String(value);\n\n // 소수점 고정 옵션\n const digitOptions: Intl.NumberFormatOptions =\n typeof digit === \"number\"\n ? { minimumFractionDigits: digit, maximumFractionDigits: digit }\n : {};\n\n return new Intl.NumberFormat(\"en-US\", digitOptions).format(Number(value));\n};\n\n/**\n * 날짜 사용 옵션\n */\nconst DATE_FULL_OPTION: Intl.DateTimeFormatOptions = {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n};\n\n/**\n * 날짜 사용 안함 옵션\n */\nconst NO_DATE_OPTION: Intl.DateTimeFormatOptions = {\n year: undefined,\n month: undefined,\n day: undefined,\n};\n\n/**\n * 24시간 사용 옵션\n */\nconst TIME_FULL_OPTION: Intl.DateTimeFormatOptions = {\n hour12: false,\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n};\n\n/**\n * 시간 사용 안함 옵션\n */\nconst NO_TIME_OPTION: Intl.DateTimeFormatOptions = {\n hour: undefined,\n minute: undefined,\n second: undefined,\n};\n\n/**\n * 접속위치에 따른 시간대 보정\n * @util\n * @param {Date} date 보정할 시간\n * @return {Date} 보정된 시간\n */\n// 변경: correctTimezone 함수를 UTC 산출 후 KST로 변경\nexport const correctTimezone = (date: string | Date): Date => {\n const utc =\n new Date(date).getTime() + new Date(date).getTimezoneOffset() * 60000;\n return new Date(utc + 9 * 60 * 60000);\n};\n\n/**\n * Date 타입 데이터를 yyyy-mm-dd로 변환\n * @util\n * @param {unknown} date\n * @param {DateTimeFormatOptionsType} [options]\n * @param {Intl.LocalesArgument} [options.formatTimezone] 시간 기준; 기본값 ko-KR\n * @param {Intl.DateTimeFormatOptions} [options.formatOptions]\n * @param {boolean | boolean[]} [options.isKorean] // ymd 또는 [year, month?, day?]\n * @param {boolean} [options.isCorrection] 시간 보정\n * @param {boolean} [options.isISOString] ISO 문자열\n * @return {string} yyyy-mm-dd 또는 각 옵션에 대한 날짜포맷\n */\n// 변경: dateFormat 함수에서 isCorrection 옵션 사용 시 toISOString()의 결과를 슬라이스하여 \"YYYY-MM-DDTHH:MM:SS\" 형식 반환\nexport const dateFormat = (\n date: unknown,\n options?: Partial<DateTimeFormatOptionsType>,\n): string => {\n if (isValidDateType(date)) {\n const d = new Date(date as string | number | Date);\n const corrDate = correctTimezone(d);\n\n // toISOString()으로 변환 시, KST 적용되지 않음\n const defaultDateFormat = options?.isCorrection\n ? `${corrDate.getFullYear()}-${convert2Digit(corrDate.getMonth() + 1)}-${convert2Digit(corrDate.getDate())}`\n : `${d.getFullYear()}-${convert2Digit(d.getMonth() + 1)}-${convert2Digit(d.getDate())}`;\n\n if (options?.isISOString) return defaultDateFormat;\n\n const onlyDate = defaultDateFormat || \"\";\n\n if (options?.isKorean) {\n const [y, m, d] = onlyDate.split(\"-\");\n if (options.isKorean === true) return `${y}년 ${m}월 ${d}일`;\n const __ymd = options.isKorean.map((apply, index) => {\n switch (index) {\n case 0:\n return apply ? `${y}년` : \"\";\n case 1:\n return apply ? `${m}월` : \"\";\n case 2:\n return apply ? `${d}일` : \"\";\n default:\n return \"\";\n }\n });\n return __ymd.join(\" \");\n }\n\n if (typeof options?.formatOptions !== \"undefined\")\n return new Intl.DateTimeFormat(\n options?.formatTimezone ? options.formatTimezone : \"ko-KR\",\n { ...DATE_FULL_OPTION, ...options.formatOptions, ...NO_TIME_OPTION },\n ).format(d);\n return onlyDate;\n }\n return String(date);\n};\n\n/**\n * Date 타입 데이터를 HH:MM:SS 시간으로 변환\n * @util\n * @param {unknown} date\n * @param {DateTimeFormatOptionsType} [options]\n * @param {Intl.LocalesArgument} [options.formatTimezone] 시간 기준; 기본값 ko-KR\n * @param {Intl.DateTimeFormatOptions} [options.formatOptions]\n * @param {boolean | boolean[]} [options.isKorean] // ymd 또는 [year, month?, day?]\n * @param {boolean} [options.isCorrection] 시간 보정\n * @param {boolean} [options.isISOString] ISO 문자열\n * @return {string} HH:MM:SS\n */\n// 변경: timeFormat 함수에서 isCorrection 옵션 사용 시 toISOString()의 시간 부분만 슬라이스하여 \"HH:MM:SS\" 형식 반환\nexport const timeFormat = (\n date: unknown,\n options?: Partial<DateTimeFormatOptionsType>,\n): string => {\n if (isValidDateType(date)) {\n const d = new Date(date as string | number | Date);\n\n if (options?.isKST) {\n const utc = d.getTime() + 60 * 60 * 1000 * 9;\n d.setTime(utc);\n }\n\n const defaultDateFormat = options?.isCorrection\n ? correctTimezone(d).toISOString().split(\"T\")[1].split(\".\")[0]\n : new Intl.DateTimeFormat(\"en-US\", {\n ...TIME_FULL_OPTION,\n ...NO_DATE_OPTION,\n }).format(d);\n\n if (options?.isISOString) return defaultDateFormat;\n\n const onlyDate = defaultDateFormat || \"\";\n\n if (options?.isKorean) {\n const [hr, min, sec] = onlyDate.split(\":\");\n if (options.isKorean === true) return `${hr}시간 ${min}분 ${sec}초`;\n const __hms = options.isKorean.map((apply, index) => {\n switch (index) {\n case 0:\n return apply ? `${hr}시간` : \"\";\n case 1:\n return apply ? `${min}분` : \"\";\n case 2:\n return apply ? `${d}초` : \"\";\n default:\n return \"\";\n }\n });\n return __hms.join(\" \");\n }\n\n if (typeof options?.formatOptions !== \"undefined\") {\n const res = new Intl.DateTimeFormat(\n options?.formatTimezone ? options.formatTimezone : \"ko-KR\",\n { ...TIME_FULL_OPTION, ...options.formatOptions, ...NO_DATE_OPTION },\n ).format(d);\n\n // console.log(\"res\", res);\n return res;\n }\n\n return onlyDate;\n }\n return String(date);\n};\n\n/**\n * 소요시간 변환\n * @util\n * @param {number | null} duration 초 단위 시간값\n */\nexport const durationFormat = (\n duration: number | null,\n options?: Partial<DurationFormatOptions>,\n): string => {\n if (duration === null) return String(duration);\n\n const hours: number | null =\n options?.hours === false ? null : Math.floor(duration / (60 * 60));\n const minutes: number | null =\n options?.minutes === false ? null : Math.floor((duration % (60 * 60)) / 60);\n const seconds: number | null =\n options?.seconds === false ? null : duration % 60;\n\n const HH = hours !== null ? `${hours}시간 ` : \"\";\n const MM = minutes !== null ? `${minutes}분 ` : \"\";\n const SS = seconds !== null ? `${seconds}초` : \"\";\n\n return `${HH}${MM}${SS}`.trim();\n};\n\n/**\n * 전화번호 타입 데이터로 변환\n * @util\n * @param {string | number} value\n * @return {string}\n * @desc\n * - 규칙: [\n * 999-9999(7),\n * 9999-9999(8),\n * 99-999-9999(9),\n * 99-9999-9999(10),\n * 999-999-9999(10),\n * 999-9999-9999(11),\n * ];\n * - 지역번호 구분:\n * 01X: 휴대전화\n * 02 ~ 0XX: 지역번호\n */\nexport const phoneNumberFormat = maskPhone;\n\n/**\n * 정수 숫자를 +/-를 붙인 형태로 변환\n * @util\n * @param {unknown} value\n * @param {boolean} [isMaskLength] 길이 마스킹 여부\n * @return {string}\n */\nexport const deltaFormat = (\n value: unknown,\n digit: number = 0,\n isMaskLength: boolean = true,\n): string => {\n if (typeof value === \"undefined\" || value === null || isNaN(Number(value)))\n return \"-\";\n\n const v = Number(value);\n\n if (v > 0) return isMaskLength ? `+${lengthFormat(v, digit)}` : `+${v}`;\n return lengthFormat(v, digit);\n};\n\n/**\n * 거리를 m 또는 km로 변환\n * @util\n * @param {number | null} distance\n * @return {string}\n */\nexport const distanceFormat = (\n distance: number | null,\n isUseUnit: boolean = true,\n): string => {\n if (distance === null) return \"-\";\n if (distance < 1000) return `${distance}${isUseUnit ? \"m\" : \"\"}`;\n return `${Math.floor(distance / 1000)}${isUseUnit ? \"km\" : \"\"}`;\n};\n\n/**\n * 파일 용량 문자열 포맷\n * @util\n * @param {unknown} size byte 단위 파일 크기\n * @param {boolean} [unit=true] GB 표시 시 소수점 자릿수 정책\n * @return {string}\n */\nexport const fileSize = (size: unknown, unit: boolean = true): string => {\n if (typeof size !== \"number\" || (size && isNaN(Number(size)))) return \"\";\n\n const byte = new Decimal(size);\n const kb = byte.div(FILE_SIZE_AMOUNT);\n const mb = kb.div(FILE_SIZE_AMOUNT);\n const gb = mb.div(FILE_SIZE_AMOUNT);\n\n if (byte.lessThan(FILE_SIZE_AMOUNT)) return `${byte.toFixed(0)}B`;\n if (byte.lessThan(FILE_SIZE_K_AMOUNT)) return `${kb.toFixed(0)}KB`;\n if (byte.lessThan(FILE_SIZE_M_AMOUNT)) return `${mb.toFixed(0)}MB`;\n return unit ? `${gb.toFixed(0)}GB` : `${gb.toFixed(2)} GB`;\n};\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -307,10 +307,11 @@ var getValueByKeyChain = (data, keyChain) => {
|
|
|
307
307
|
}
|
|
308
308
|
return data;
|
|
309
309
|
};
|
|
310
|
-
var convertObjectToSearchParams = (data) => {
|
|
310
|
+
var convertObjectToSearchParams = (data, debug) => {
|
|
311
311
|
if (!data) {
|
|
312
312
|
console.log("[convertObjectToSearchParams] \uB370\uC774\uD130\uAC00 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC74C", {
|
|
313
|
-
data
|
|
313
|
+
data,
|
|
314
|
+
debug
|
|
314
315
|
});
|
|
315
316
|
return new URLSearchParams();
|
|
316
317
|
}
|
|
@@ -325,6 +326,7 @@ var convertObjectToSearchParams = (data) => {
|
|
|
325
326
|
}
|
|
326
327
|
console.log("[convertObjectToSearchParams] \uB370\uC774\uD130\uAC00 \uAC1D\uCCB4\uAC00 \uC544\uB2D8", {
|
|
327
328
|
data,
|
|
329
|
+
debug,
|
|
328
330
|
type: typeof data,
|
|
329
331
|
key: isKeyChainRecord(data) ? Object.keys(data) : [],
|
|
330
332
|
array: Array.isArray(data)
|