@comasoft/nestjs 0.2.29 → 0.3.0
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/decorators/index.d.ts +2 -0
- package/dist/decorators/index.js +1 -1
- package/dist/decorators/password.decorators.d.ts +2 -0
- package/dist/decorators/password.decorators.js +1 -0
- package/dist/decorators/phone.validator.d.ts +7 -0
- package/dist/decorators/phone.validator.js +1 -0
- package/dist/utils/encryption.util.d.ts +2 -0
- package/dist/utils/encryption.util.js +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.js +1 -1
- package/dist/utils/pagination-qb.utils.js +1 -1
- package/package.json +2 -1
package/dist/decorators/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=this&&this.__createBinding||(Object.create?function(e,r,t
|
|
1
|
+
var e=this&&this.__createBinding||(Object.create?function(e,r,o,t){void 0===t&&(t=o);var a=Object.getOwnPropertyDescriptor(r,o);a&&!("get"in a?!r.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return r[o]}}),Object.defineProperty(e,t,a)}:function(e,r,o,t){void 0===t&&(t=o),e[t]=r[o]}),r=this&&this.__exportStar||function(r,o){for(var t in r)"default"===t||Object.prototype.hasOwnProperty.call(o,t)||e(o,r,t)};Object.defineProperty(exports,"__esModule",{value:!0}),r(require("./custom-params.decorator"),exports),r(require("./api-custom-params.decorator"),exports),r(require("./patch-body.decorator"),exports),r(require("./cookies.decorator"),exports),r(require("./timestamps.decorator"),exports),r(require("./soft-delete.decorator"),exports),r(require("./format.decorator"),exports),r(require("./masking.transform"),exports),r(require("./common-query.decorator"),exports),r(require("./password.decorators"),exports),r(require("./phone.validator"),exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:!0}),exports.StrongPassword=function StrongPassword(t){return function(e,a){(0,r.registerDecorator)({name:"strongPassword",target:e.constructor,propertyName:a,options:t,validator:{validate(r){if("string"!=typeof r)return!1;if(r.length<8)return!1;return/^(?=.*[A-Za-z])(?=.*\d)(?=.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?])[A-Za-z\d!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]{8,}$/.test(r)},defaultMessage:()=>"Password must be at least 8 characters long and contain letters, numbers, and special characters."}})}};const r=require("class-validator");
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface PhoneValidatorOptions {
|
|
2
|
+
message?: string;
|
|
3
|
+
minLength?: number;
|
|
4
|
+
maxLength?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function IsPhone(options?: PhoneValidatorOptions): <TFunction extends Function, Y>(target: TFunction | object, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:!0}),exports.IsPhone=function IsPhone(n){const{message:o="전화번호는 8-11자리 숫자여야 합니다",minLength:t=8,maxLength:a=11}=n||{};return(0,e.applyDecorators)((0,r.Transform)(({value:e})=>null==e?void 0:e.replaceAll(/-| /g,"").trim()),(0,s.Matches)(new RegExp(`^[0-9]{${t},${a}}$`),{message:o}))};const e=require("@nestjs/common"),r=require("class-transformer"),s=require("class-validator");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:!0}),exports.encrypt=function encrypt(n,o){if(!o||32!==o.length)throw new Error("Encryption key must be 32 characters long");const c=e.randomBytes(r),f=e.createCipheriv(t,Buffer.from(o,"utf8"),c);let u=f.update(n,"utf8","hex");return u+=f.final("hex"),`${c.toString("hex")}:${u}`},exports.decrypt=function decrypt(r,n){if(!n||32!==n.length)throw new Error("Encryption key must be 32 characters long");const o=r.split(":");if(2!==o.length)throw new Error("Invalid encrypted text format");const c=Buffer.from(o[0],"hex"),f=o[1],u=e.createDecipheriv(t,Buffer.from(n,"utf8"),c);let i=u.update(f,"hex","utf8");return i+=u.final("utf8"),i};const e=require("crypto"),t="aes-256-cbc",r=16;
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -4,3 +4,9 @@ export * from './enum.utils';
|
|
|
4
4
|
export * from './pagination.utils';
|
|
5
5
|
export * from './pagination-qb.utils';
|
|
6
6
|
export * from './file.utils';
|
|
7
|
+
export * from './encryption.util';
|
|
8
|
+
export declare const getIpAddress: (req: Request) => string;
|
|
9
|
+
export declare const getUserAgent: (req: Request) => string;
|
|
10
|
+
export declare function extractTextFromHtml(html: string | null | undefined, maxLength?: number): string | null;
|
|
11
|
+
export declare function replaceContentUrlsForStorage(content: string | null | undefined): string | null;
|
|
12
|
+
export declare function replaceContentUrlsForResponse(content: string | null | undefined): string | null;
|
package/dist/utils/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=this&&this.__createBinding||(Object.create?function(e,t,
|
|
1
|
+
var e=this&&this.__createBinding||(Object.create?function(e,r,t,o){void 0===o&&(o=t);var n=Object.getOwnPropertyDescriptor(r,t);n&&!("get"in n?!r.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,o,n)}:function(e,r,t,o){void 0===o&&(o=t),e[o]=r[t]}),r=this&&this.__exportStar||function(r,t){for(var o in r)"default"===o||Object.prototype.hasOwnProperty.call(t,o)||e(t,r,o)};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getUserAgent=exports.getIpAddress=void 0,exports.extractTextFromHtml=function extractTextFromHtml(e,r=255){if(!e)return null;return(0,t.default)(e,{allowedTags:[],allowedAttributes:{}}).replace(/\s+/g," ").trim().substring(0,r)||null},exports.replaceContentUrlsForStorage=function replaceContentUrlsForStorage(e){if(!e)return e;const r=process.env.CDN_URL;if(!r)return e;const t=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return e.replace(new RegExp(t,"g"),"/cdn")},exports.replaceContentUrlsForResponse=function replaceContentUrlsForResponse(e){if(!e)return e;const r=process.env.CDN_URL;return r?e.replace(/(['"])\/cdn(\/[^'"]+)(['"])/g,`$1${r}$2$3`):e};const t=require("sanitize-html");r(require("./common.utils"),exports),r(require("./object-diff"),exports),r(require("./enum.utils"),exports),r(require("./pagination.utils"),exports),r(require("./pagination-qb.utils"),exports),r(require("./file.utils"),exports),r(require("./encryption.util"),exports);exports.getIpAddress=e=>e.headers["x-real-ip"]||e.headers["x-forwarded-for"]||"";exports.getUserAgent=e=>e.headers["user-agent"]||"";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function validateAndParseDate(e){if(!/^\d{8}T\d{6}Z$/.test(e))throw new Error("Invalid date format. Use YYYYMMDDTHHMMSSZ (e.g., 20250122T150000Z)");const n=e.substring(0,4),t=e.substring(4,6),r=e.substring(6,8),i=e.substring(9,11),
|
|
1
|
+
function validateAndParseDate(e){if(!/^\d{8}T\d{6}Z$/.test(e))throw new Error("Invalid date format. Use YYYYMMDDTHHMMSSZ (e.g., 20250122T150000Z)");const n=e.substring(0,4),t=e.substring(4,6),r=e.substring(6,8),i=e.substring(9,11),s=e.substring(11,13),a=e.substring(13,15),l=new Date(`${n}-${t}-${r}T${i}:${s}:${a}Z`);if(isNaN(l.getTime()))throw new Error("Invalid date");return l}Object.defineProperty(exports,"__esModule",{value:!0}),exports.applyFiltersAndSorting=function applyFiltersAndSorting(n,t){const{_keyword:r,_group:i,_sort:s,aliasName:a="a",keywordFields:l=["name"],groupFields:$=[]}=t;return function applyKeywordFilter(e,n,t,r){if(n){const i=[],s={};r.length>0&&(r.forEach((e,r)=>{if(e.endsWith("*")){const a=e.slice(0,-1),l=a.includes(".")?a:`${t}.${a}`;i.push(`${l} = :keyword${r}`),s[`keyword${r}`]=n}else{const a=e.includes(".")?e:`${t}.${e}`;i.push(`${a} ILIKE :keyword${r}`),s[`keyword${r}`]=`%${n}%`}}),e.andWhere(`(${i.join(" OR ")})`,s))}}(n,r,a,l),function applyGroupFilter(n,t,r,i){if(!t)return;if(0===i.length)return;const s=t.split("|");if(s.some(e=>{const[n]=e.split("-");return!i.includes(n)}))throw new Error("Invalid field detected in group filter");const a=[],l={};s.forEach((n,t)=>{const[i,s]=n.split(/-(.+)/),$=i.includes(".")?i:`${r}.${i}`;let o;o=s.includes("__")?i.includes("_at")||i.includes("_date")?e.handleDateRange($,s,t):e.handleNumberRange($,s,t):e.handleEquals($,s,t),o.condition&&(a.push(o.condition),Object.assign(l,o.parameters))}),a.length>0&&n.andWhere(`(${a.join(" AND ")})`,l)}(n,i,a,$),function applySorting(e,n,t){if(n){n.split("|").forEach((n,r)=>{const[i,s]=n.split("-"),a=s.toUpperCase();if("ASC"!==a&&"DESC"!==a)throw new Error(`Invalid sort order: ${s}`);0===r?e.orderBy(`${t}.${i}`,a):e.addOrderBy(`${t}.${i}`,a)})}else{Object.keys(e.expressionMap.orderBys).length>0||e.orderBy(`${t}.id`,"DESC")}}(n,s,a),n};const e={handleEquals(e,n,t){if(n.includes(",")){const r=n.split(",").map(e=>e.trim()).filter(e=>e);return{condition:`${e} IN (:...${e}${t})`,parameters:{[`${e}${t}`]:r}}}return{condition:`${e} = :${e}${t}`,parameters:{[`${e}${t}`]:n}}},handleNumberRange(e,n,t){const[r,i]=n.split("__").map(e=>""===e?null:Number(e)),s=[],a={};return null!==r&&null!==i?(s.push(`${e} BETWEEN :${e}Min${t} AND :${e}Max${t}`),a[`${e}Min${t}`]=r,a[`${e}Max${t}`]=i):null!==r?(s.push(`${e} >= :${e}Min${t}`),a[`${e}Min${t}`]=r):null!==i&&(s.push(`${e} <= :${e}Max${t}`),a[`${e}Max${t}`]=i),{condition:s.join(" AND "),parameters:a}},handleDateRange(e,n,t){const[r,i]=n.split("__").map(e=>""===e?null:e),s=[],a={};return null!==r&&null!==i?(s.push(`${e} BETWEEN :${e}Min${t} AND :${e}Max${t}`),a[`${e}Min${t}`]=validateAndParseDate(r),a[`${e}Max${t}`]=validateAndParseDate(i)):null!==r?(s.push(`${e} >= :${e}Min${t}`),a[`${e}Min${t}`]=validateAndParseDate(r)):null!==i&&(s.push(`${e} <= :${e}Max${t}`),a[`${e}Max${t}`]=validateAndParseDate(i)),{condition:s.join(" AND "),parameters:a}}};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@comasoft/nestjs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"private": false,
|
|
6
6
|
"exports": {
|
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
"passport-naver": "^1.0.6",
|
|
48
48
|
"pino-pretty": "^13.0.0",
|
|
49
49
|
"resend": "^6.4.1",
|
|
50
|
+
"sanitize-html": "^2.17.0",
|
|
50
51
|
"ua-parser-js": "^2.0.3"
|
|
51
52
|
},
|
|
52
53
|
"devDependencies": {
|