@exyconn/common 1.0.0 → 2.0.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/README.md +121 -36
- package/dist/client/index.d.mts +2 -2
- package/dist/client/index.d.ts +2 -2
- package/dist/client/index.js +2330 -176
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +2284 -178
- package/dist/client/index.mjs.map +1 -1
- package/dist/client/utils/index.d.mts +123 -1
- package/dist/client/utils/index.d.ts +123 -1
- package/dist/client/utils/index.js +207 -0
- package/dist/client/utils/index.js.map +1 -1
- package/dist/client/utils/index.mjs +204 -1
- package/dist/client/utils/index.mjs.map +1 -1
- package/dist/index-BLltj-zN.d.ts +1236 -0
- package/dist/index-CIUdLBjA.d.mts +1236 -0
- package/dist/{index-iTKxFa78.d.ts → index-DEzgM15j.d.ts} +10 -2
- package/dist/{index-ClWtDfwk.d.ts → index-DNFVgQx8.d.ts} +544 -2
- package/dist/{index-CcrANHAQ.d.mts → index-DbV04Dx8.d.mts} +10 -2
- package/dist/{index-DSW6JfD-.d.mts → index-DfqEP6Oe.d.mts} +544 -2
- package/dist/index.d.mts +582 -7
- package/dist/index.d.ts +582 -7
- package/dist/index.js +3428 -221
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3430 -223
- package/dist/index.mjs.map +1 -1
- package/dist/server/index.d.mts +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +197 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +194 -2
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/utils/index.d.mts +73 -1
- package/dist/server/utils/index.d.ts +73 -1
- package/dist/server/utils/index.js +199 -0
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs +195 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/dist/shared/index.d.mts +1 -1
- package/dist/shared/index.d.ts +1 -1
- package/dist/shared/index.js +296 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/index.mjs +274 -1
- package/dist/shared/index.mjs.map +1 -1
- package/package.json +9 -2
- package/dist/index-BNdT-2X4.d.ts +0 -229
- package/dist/index-Du0LLt9f.d.mts +0 -229
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var fs = require('fs');
|
|
4
|
+
var path = require('path');
|
|
5
|
+
|
|
3
6
|
// src/server/utils/filter-builder.ts
|
|
4
7
|
var buildFilter = (options) => {
|
|
5
8
|
const {
|
|
@@ -102,12 +105,208 @@ var omitFields = (obj, fieldsToOmit) => {
|
|
|
102
105
|
});
|
|
103
106
|
return result;
|
|
104
107
|
};
|
|
108
|
+
function parseVersion(version) {
|
|
109
|
+
return version.replace(/[\^~>=<|*x\s]/g, "").split(" ")[0] || "0.0.0";
|
|
110
|
+
}
|
|
111
|
+
function compareVersions(current, latest) {
|
|
112
|
+
const currentClean = parseVersion(current);
|
|
113
|
+
const latestClean = parseVersion(latest);
|
|
114
|
+
if (currentClean === latestClean) return "none";
|
|
115
|
+
const [curMajor, curMinor, curPatch] = currentClean.split(".").map(Number);
|
|
116
|
+
const [latMajor, latMinor, latPatch] = latestClean.split(".").map(Number);
|
|
117
|
+
if (latest.includes("-")) return "prerelease";
|
|
118
|
+
if (latMajor > curMajor) return "major";
|
|
119
|
+
if (latMinor > curMinor) return "minor";
|
|
120
|
+
if (latPatch > curPatch) return "patch";
|
|
121
|
+
return "none";
|
|
122
|
+
}
|
|
123
|
+
async function fetchLatestVersion(packageName) {
|
|
124
|
+
try {
|
|
125
|
+
const encodedName = packageName.startsWith("@") ? `@${encodeURIComponent(packageName.slice(1))}` : encodeURIComponent(packageName);
|
|
126
|
+
const response = await fetch(`https://registry.npmjs.org/${encodedName}`);
|
|
127
|
+
if (!response.ok) return null;
|
|
128
|
+
const data = await response.json();
|
|
129
|
+
return data["dist-tags"]?.latest || null;
|
|
130
|
+
} catch {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async function loadPackageJson(source) {
|
|
135
|
+
if (typeof source === "object") {
|
|
136
|
+
return source;
|
|
137
|
+
}
|
|
138
|
+
if (source.startsWith("http://") || source.startsWith("https://")) {
|
|
139
|
+
const response = await fetch(source);
|
|
140
|
+
if (!response.ok) {
|
|
141
|
+
throw new Error(`Failed to fetch: ${response.status}`);
|
|
142
|
+
}
|
|
143
|
+
return response.json();
|
|
144
|
+
}
|
|
145
|
+
const filePath = path.resolve(source);
|
|
146
|
+
if (!fs.existsSync(filePath)) {
|
|
147
|
+
throw new Error(`File not found: ${filePath}`);
|
|
148
|
+
}
|
|
149
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
150
|
+
return JSON.parse(content);
|
|
151
|
+
}
|
|
152
|
+
async function checkDeps(deps, type, errors) {
|
|
153
|
+
if (!deps) return [];
|
|
154
|
+
const results = [];
|
|
155
|
+
const entries = Object.entries(deps);
|
|
156
|
+
const concurrencyLimit = 10;
|
|
157
|
+
for (let i = 0; i < entries.length; i += concurrencyLimit) {
|
|
158
|
+
const batch = entries.slice(i, i + concurrencyLimit);
|
|
159
|
+
const batchResults = await Promise.all(
|
|
160
|
+
batch.map(async ([name, currentVersion]) => {
|
|
161
|
+
try {
|
|
162
|
+
const latest = await fetchLatestVersion(name);
|
|
163
|
+
if (!latest) {
|
|
164
|
+
errors.push(`Could not fetch: ${name}`);
|
|
165
|
+
return {
|
|
166
|
+
name,
|
|
167
|
+
current: currentVersion,
|
|
168
|
+
latest: "unknown",
|
|
169
|
+
hasUpdate: false,
|
|
170
|
+
updateType: "none",
|
|
171
|
+
dependencyType: type
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
const updateType = compareVersions(currentVersion, latest);
|
|
175
|
+
return {
|
|
176
|
+
name,
|
|
177
|
+
current: currentVersion,
|
|
178
|
+
latest,
|
|
179
|
+
hasUpdate: updateType !== "none",
|
|
180
|
+
updateType,
|
|
181
|
+
dependencyType: type
|
|
182
|
+
};
|
|
183
|
+
} catch (err) {
|
|
184
|
+
errors.push(`Error: ${name} - ${err}`);
|
|
185
|
+
return {
|
|
186
|
+
name,
|
|
187
|
+
current: currentVersion,
|
|
188
|
+
latest: "error",
|
|
189
|
+
hasUpdate: false,
|
|
190
|
+
updateType: "none",
|
|
191
|
+
dependencyType: type
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
})
|
|
195
|
+
);
|
|
196
|
+
results.push(...batchResults);
|
|
197
|
+
}
|
|
198
|
+
return results;
|
|
199
|
+
}
|
|
200
|
+
async function checkPackageServer(source) {
|
|
201
|
+
const errors = [];
|
|
202
|
+
const pkg = await loadPackageJson(source);
|
|
203
|
+
const [dependencies, devDependencies, peerDependencies, optionalDependencies] = await Promise.all([
|
|
204
|
+
checkDeps(pkg.dependencies, "dependencies", errors),
|
|
205
|
+
checkDeps(pkg.devDependencies, "devDependencies", errors),
|
|
206
|
+
checkDeps(pkg.peerDependencies, "peerDependencies", errors),
|
|
207
|
+
checkDeps(pkg.optionalDependencies, "optionalDependencies", errors)
|
|
208
|
+
]);
|
|
209
|
+
const allDeps = [...dependencies, ...devDependencies, ...peerDependencies, ...optionalDependencies];
|
|
210
|
+
return {
|
|
211
|
+
packageName: pkg.name || "unknown",
|
|
212
|
+
packageVersion: pkg.version || "0.0.0",
|
|
213
|
+
totalDependencies: allDeps.length,
|
|
214
|
+
outdatedCount: allDeps.filter((d) => d.hasUpdate).length,
|
|
215
|
+
dependencies: allDeps,
|
|
216
|
+
byType: { dependencies, devDependencies, peerDependencies, optionalDependencies },
|
|
217
|
+
byUpdateType: {
|
|
218
|
+
major: allDeps.filter((d) => d.updateType === "major"),
|
|
219
|
+
minor: allDeps.filter((d) => d.updateType === "minor"),
|
|
220
|
+
patch: allDeps.filter((d) => d.updateType === "patch"),
|
|
221
|
+
prerelease: allDeps.filter((d) => d.updateType === "prerelease")
|
|
222
|
+
},
|
|
223
|
+
checkedAt: /* @__PURE__ */ new Date(),
|
|
224
|
+
errors
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
function formatPackageCheckResult(result) {
|
|
228
|
+
const lines = [];
|
|
229
|
+
lines.push(`
|
|
230
|
+
\u{1F4E6} Package: ${result.packageName}@${result.packageVersion}`);
|
|
231
|
+
lines.push(`\u{1F4C5} Checked: ${result.checkedAt.toISOString()}`);
|
|
232
|
+
lines.push(`\u{1F4CA} Total: ${result.totalDependencies} | Outdated: ${result.outdatedCount}
|
|
233
|
+
`);
|
|
234
|
+
const formatDep = (d) => ` ${d.name.padEnd(35)} ${d.current.padEnd(15)} \u2192 ${d.latest}`;
|
|
235
|
+
if (result.byUpdateType.major.length > 0) {
|
|
236
|
+
lines.push("\u{1F534} MAJOR Updates:");
|
|
237
|
+
result.byUpdateType.major.forEach((d) => lines.push(formatDep(d)));
|
|
238
|
+
lines.push("");
|
|
239
|
+
}
|
|
240
|
+
if (result.byUpdateType.minor.length > 0) {
|
|
241
|
+
lines.push("\u{1F7E1} MINOR Updates:");
|
|
242
|
+
result.byUpdateType.minor.forEach((d) => lines.push(formatDep(d)));
|
|
243
|
+
lines.push("");
|
|
244
|
+
}
|
|
245
|
+
if (result.byUpdateType.patch.length > 0) {
|
|
246
|
+
lines.push("\u{1F7E2} PATCH Updates:");
|
|
247
|
+
result.byUpdateType.patch.forEach((d) => lines.push(formatDep(d)));
|
|
248
|
+
lines.push("");
|
|
249
|
+
}
|
|
250
|
+
if (result.errors.length > 0) {
|
|
251
|
+
lines.push("\u26A0\uFE0F Errors:");
|
|
252
|
+
result.errors.forEach((e) => lines.push(` ${e}`));
|
|
253
|
+
}
|
|
254
|
+
return lines.join("\n");
|
|
255
|
+
}
|
|
256
|
+
function generateNcuCommand(result, options = {}) {
|
|
257
|
+
const { updateType = "all", interactive = false, upgrade = false } = options;
|
|
258
|
+
let packages = [];
|
|
259
|
+
switch (updateType) {
|
|
260
|
+
case "major":
|
|
261
|
+
packages = result.byUpdateType.major.map((d) => d.name);
|
|
262
|
+
break;
|
|
263
|
+
case "minor":
|
|
264
|
+
packages = result.byUpdateType.minor.map((d) => d.name);
|
|
265
|
+
break;
|
|
266
|
+
case "patch":
|
|
267
|
+
packages = result.byUpdateType.patch.map((d) => d.name);
|
|
268
|
+
break;
|
|
269
|
+
default:
|
|
270
|
+
packages = result.dependencies.filter((d) => d.hasUpdate).map((d) => d.name);
|
|
271
|
+
}
|
|
272
|
+
if (packages.length === 0) return "# No updates available";
|
|
273
|
+
let cmd = "npx npm-check-updates";
|
|
274
|
+
if (packages.length < result.dependencies.length) {
|
|
275
|
+
cmd += ` --filter "${packages.join(",")}"`;
|
|
276
|
+
}
|
|
277
|
+
if (interactive) cmd += " --interactive";
|
|
278
|
+
if (upgrade) cmd += " --upgrade";
|
|
279
|
+
return cmd;
|
|
280
|
+
}
|
|
281
|
+
function printPackageCheckSummary(result) {
|
|
282
|
+
console.log(formatPackageCheckResult(result));
|
|
283
|
+
if (result.outdatedCount > 0) {
|
|
284
|
+
console.log("\n\u{1F4DD} Quick Commands:");
|
|
285
|
+
console.log(" Check all: npx npm-check-updates");
|
|
286
|
+
console.log(" Interactive: npx npm-check-updates --interactive");
|
|
287
|
+
console.log(" Update all: npx npm-check-updates --upgrade && npm install");
|
|
288
|
+
if (result.byUpdateType.patch.length > 0) {
|
|
289
|
+
console.log(` Patch only: ${generateNcuCommand(result, { updateType: "patch", upgrade: true })}`);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
var packageCheckServer = {
|
|
294
|
+
check: checkPackageServer,
|
|
295
|
+
format: formatPackageCheckResult,
|
|
296
|
+
generateNcuCommand,
|
|
297
|
+
print: printPackageCheckSummary
|
|
298
|
+
};
|
|
105
299
|
|
|
106
300
|
exports.buildFilter = buildFilter;
|
|
107
301
|
exports.buildPagination = buildPagination;
|
|
108
302
|
exports.buildPaginationMeta = buildPaginationMeta;
|
|
303
|
+
exports.checkPackageServer = checkPackageServer;
|
|
304
|
+
exports.formatPackageCheckResult = formatPackageCheckResult;
|
|
305
|
+
exports.generateNcuCommand = generateNcuCommand;
|
|
109
306
|
exports.omitFields = omitFields;
|
|
307
|
+
exports.packageCheckServer = packageCheckServer;
|
|
110
308
|
exports.pickFields = pickFields;
|
|
309
|
+
exports.printPackageCheckSummary = printPackageCheckSummary;
|
|
111
310
|
exports.sanitizeDocument = sanitizeDocument;
|
|
112
311
|
exports.sanitizeUser = sanitizeUser;
|
|
113
312
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/server/utils/filter-builder.ts","../../../src/server/utils/sanitize.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\r\n * Filter Builder Options\r\n */\r\nexport interface FilterOptions {\r\n organizationId?: string;\r\n search?: string;\r\n searchFields?: string[];\r\n dateField?: string;\r\n startDate?: string;\r\n endDate?: string;\r\n status?: string;\r\n isActive?: boolean;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Pagination Options\r\n */\r\nexport interface PaginationOptions {\r\n page?: number;\r\n limit?: number;\r\n defaultLimit?: number;\r\n maxLimit?: number;\r\n}\r\n\r\n/**\r\n * Pagination Result\r\n */\r\nexport interface PaginationResult {\r\n skip: number;\r\n limit: number;\r\n page: number;\r\n}\r\n\r\n/**\r\n * Build MongoDB filter query dynamically\r\n */\r\nexport const buildFilter = (options: FilterOptions): Record<string, unknown> => {\r\n const {\r\n organizationId,\r\n search,\r\n searchFields = [],\r\n dateField = 'createdAt',\r\n startDate,\r\n endDate,\r\n status,\r\n isActive,\r\n ...additionalFilters\r\n } = options;\r\n\r\n const filter: Record<string, unknown> = {};\r\n\r\n // Add organizationId if provided\r\n if (organizationId) {\r\n filter.organizationId = organizationId;\r\n }\r\n\r\n // Handle text search with regex (min 2 characters)\r\n if (search && search.trim().length >= 2 && searchFields.length > 0) {\r\n const searchRegex = new RegExp(search.trim(), 'i');\r\n filter.$or = searchFields.map((field) => ({ [field]: searchRegex }));\r\n }\r\n\r\n // Handle date range filtering\r\n if (startDate || endDate) {\r\n filter[dateField] = {};\r\n if (startDate) {\r\n (filter[dateField] as Record<string, unknown>).$gte = new Date(startDate);\r\n }\r\n if (endDate) {\r\n (filter[dateField] as Record<string, unknown>).$lte = new Date(endDate);\r\n }\r\n }\r\n\r\n // Handle status filter\r\n if (status !== undefined) {\r\n filter.status = status;\r\n }\r\n\r\n // Handle isActive filter\r\n if (isActive !== undefined) {\r\n filter.isActive = isActive;\r\n }\r\n\r\n // Add any additional filters\r\n Object.entries(additionalFilters).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null && value !== '') {\r\n filter[key] = value;\r\n }\r\n });\r\n\r\n return filter;\r\n};\r\n\r\n/**\r\n * Calculate pagination values\r\n */\r\nexport const buildPagination = (options: PaginationOptions): PaginationResult => {\r\n const { page = 1, limit, defaultLimit = 10, maxLimit = 100 } = options;\r\n\r\n const finalPage = Math.max(1, page);\r\n const finalLimit = Math.min(maxLimit, Math.max(1, limit || defaultLimit));\r\n const skip = (finalPage - 1) * finalLimit;\r\n\r\n return {\r\n skip,\r\n limit: finalLimit,\r\n page: finalPage,\r\n };\r\n};\r\n\r\n/**\r\n * Calculate pagination metadata for response\r\n */\r\nexport const buildPaginationMeta = (\r\n total: number,\r\n page: number,\r\n limit: number\r\n): {\r\n total: number;\r\n page: number;\r\n limit: number;\r\n totalPages: number;\r\n hasNextPage: boolean;\r\n hasPrevPage: boolean;\r\n} => {\r\n const totalPages = Math.ceil(total / limit);\r\n\r\n return {\r\n total,\r\n page,\r\n limit,\r\n totalPages,\r\n hasNextPage: page < totalPages,\r\n hasPrevPage: page > 1,\r\n };\r\n};\r\n\r\nexport default {\r\n buildFilter,\r\n buildPagination,\r\n buildPaginationMeta,\r\n};\r\n","/**\r\n * Sanitize user object by removing sensitive fields\r\n */\r\nexport const sanitizeUser = <T extends Record<string, unknown>>(\r\n user: T | null | undefined,\r\n additionalFieldsToRemove: string[] = []\r\n): Omit<T, 'password' | '__v' | '_id'> | null => {\r\n if (!user) return null;\r\n\r\n const fieldsToRemove = ['password', '__v', '_id', ...additionalFieldsToRemove];\r\n\r\n // Handle mongoose documents\r\n const obj = typeof (user as any).toObject === 'function' \r\n ? (user as any).toObject() \r\n : { ...user };\r\n\r\n fieldsToRemove.forEach((field) => {\r\n delete obj[field];\r\n });\r\n\r\n return obj;\r\n};\r\n\r\n/**\r\n * Sanitize document by removing specified fields\r\n */\r\nexport const sanitizeDocument = <T extends Record<string, unknown>>(\r\n doc: T | null | undefined,\r\n fieldsToRemove: string[]\r\n): Partial<T> | null => {\r\n if (!doc) return null;\r\n\r\n // Handle mongoose documents\r\n const obj = typeof (doc as any).toObject === 'function' \r\n ? (doc as any).toObject() \r\n : { ...doc };\r\n\r\n fieldsToRemove.forEach((field) => {\r\n delete obj[field];\r\n });\r\n\r\n return obj;\r\n};\r\n\r\n/**\r\n * Pick specific fields from an object\r\n */\r\nexport const pickFields = <T extends Record<string, unknown>>(\r\n obj: T | null | undefined,\r\n fieldsToPick: (keyof T)[]\r\n): Partial<T> | null => {\r\n if (!obj) return null;\r\n\r\n const result: Partial<T> = {};\r\n\r\n fieldsToPick.forEach((field) => {\r\n if (field in obj) {\r\n result[field] = obj[field];\r\n }\r\n });\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Omit specific fields from an object\r\n */\r\nexport const omitFields = <T extends Record<string, unknown>, K extends keyof T>(\r\n obj: T | null | undefined,\r\n fieldsToOmit: K[]\r\n): Omit<T, K> | null => {\r\n if (!obj) return null;\r\n\r\n const result = { ...obj };\r\n\r\n fieldsToOmit.forEach((field) => {\r\n delete result[field];\r\n });\r\n\r\n return result as Omit<T, K>;\r\n};\r\n\r\nexport default {\r\n sanitizeUser,\r\n sanitizeDocument,\r\n pickFields,\r\n omitFields,\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/server/utils/filter-builder.ts","../../../src/server/utils/sanitize.ts","../../../src/server/utils/packageCheck.ts"],"names":["resolve","existsSync","readFileSync"],"mappings":"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","file":"index.js","sourcesContent":["/**\r\n * Filter Builder Options\r\n */\r\nexport interface FilterOptions {\r\n organizationId?: string;\r\n search?: string;\r\n searchFields?: string[];\r\n dateField?: string;\r\n startDate?: string;\r\n endDate?: string;\r\n status?: string;\r\n isActive?: boolean;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Pagination Options\r\n */\r\nexport interface PaginationOptions {\r\n page?: number;\r\n limit?: number;\r\n defaultLimit?: number;\r\n maxLimit?: number;\r\n}\r\n\r\n/**\r\n * Pagination Result\r\n */\r\nexport interface PaginationResult {\r\n skip: number;\r\n limit: number;\r\n page: number;\r\n}\r\n\r\n/**\r\n * Build MongoDB filter query dynamically\r\n */\r\nexport const buildFilter = (options: FilterOptions): Record<string, unknown> => {\r\n const {\r\n organizationId,\r\n search,\r\n searchFields = [],\r\n dateField = 'createdAt',\r\n startDate,\r\n endDate,\r\n status,\r\n isActive,\r\n ...additionalFilters\r\n } = options;\r\n\r\n const filter: Record<string, unknown> = {};\r\n\r\n // Add organizationId if provided\r\n if (organizationId) {\r\n filter.organizationId = organizationId;\r\n }\r\n\r\n // Handle text search with regex (min 2 characters)\r\n if (search && search.trim().length >= 2 && searchFields.length > 0) {\r\n const searchRegex = new RegExp(search.trim(), 'i');\r\n filter.$or = searchFields.map((field) => ({ [field]: searchRegex }));\r\n }\r\n\r\n // Handle date range filtering\r\n if (startDate || endDate) {\r\n filter[dateField] = {};\r\n if (startDate) {\r\n (filter[dateField] as Record<string, unknown>).$gte = new Date(startDate);\r\n }\r\n if (endDate) {\r\n (filter[dateField] as Record<string, unknown>).$lte = new Date(endDate);\r\n }\r\n }\r\n\r\n // Handle status filter\r\n if (status !== undefined) {\r\n filter.status = status;\r\n }\r\n\r\n // Handle isActive filter\r\n if (isActive !== undefined) {\r\n filter.isActive = isActive;\r\n }\r\n\r\n // Add any additional filters\r\n Object.entries(additionalFilters).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null && value !== '') {\r\n filter[key] = value;\r\n }\r\n });\r\n\r\n return filter;\r\n};\r\n\r\n/**\r\n * Calculate pagination values\r\n */\r\nexport const buildPagination = (options: PaginationOptions): PaginationResult => {\r\n const { page = 1, limit, defaultLimit = 10, maxLimit = 100 } = options;\r\n\r\n const finalPage = Math.max(1, page);\r\n const finalLimit = Math.min(maxLimit, Math.max(1, limit || defaultLimit));\r\n const skip = (finalPage - 1) * finalLimit;\r\n\r\n return {\r\n skip,\r\n limit: finalLimit,\r\n page: finalPage,\r\n };\r\n};\r\n\r\n/**\r\n * Calculate pagination metadata for response\r\n */\r\nexport const buildPaginationMeta = (\r\n total: number,\r\n page: number,\r\n limit: number\r\n): {\r\n total: number;\r\n page: number;\r\n limit: number;\r\n totalPages: number;\r\n hasNextPage: boolean;\r\n hasPrevPage: boolean;\r\n} => {\r\n const totalPages = Math.ceil(total / limit);\r\n\r\n return {\r\n total,\r\n page,\r\n limit,\r\n totalPages,\r\n hasNextPage: page < totalPages,\r\n hasPrevPage: page > 1,\r\n };\r\n};\r\n\r\nexport default {\r\n buildFilter,\r\n buildPagination,\r\n buildPaginationMeta,\r\n};\r\n","/**\r\n * Sanitize user object by removing sensitive fields\r\n */\r\nexport const sanitizeUser = <T extends Record<string, unknown>>(\r\n user: T | null | undefined,\r\n additionalFieldsToRemove: string[] = []\r\n): Omit<T, 'password' | '__v' | '_id'> | null => {\r\n if (!user) return null;\r\n\r\n const fieldsToRemove = ['password', '__v', '_id', ...additionalFieldsToRemove];\r\n\r\n // Handle mongoose documents\r\n const obj = typeof (user as any).toObject === 'function' \r\n ? (user as any).toObject() \r\n : { ...user };\r\n\r\n fieldsToRemove.forEach((field) => {\r\n delete obj[field];\r\n });\r\n\r\n return obj;\r\n};\r\n\r\n/**\r\n * Sanitize document by removing specified fields\r\n */\r\nexport const sanitizeDocument = <T extends Record<string, unknown>>(\r\n doc: T | null | undefined,\r\n fieldsToRemove: string[]\r\n): Partial<T> | null => {\r\n if (!doc) return null;\r\n\r\n // Handle mongoose documents\r\n const obj = typeof (doc as any).toObject === 'function' \r\n ? (doc as any).toObject() \r\n : { ...doc };\r\n\r\n fieldsToRemove.forEach((field) => {\r\n delete obj[field];\r\n });\r\n\r\n return obj;\r\n};\r\n\r\n/**\r\n * Pick specific fields from an object\r\n */\r\nexport const pickFields = <T extends Record<string, unknown>>(\r\n obj: T | null | undefined,\r\n fieldsToPick: (keyof T)[]\r\n): Partial<T> | null => {\r\n if (!obj) return null;\r\n\r\n const result: Partial<T> = {};\r\n\r\n fieldsToPick.forEach((field) => {\r\n if (field in obj) {\r\n result[field] = obj[field];\r\n }\r\n });\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Omit specific fields from an object\r\n */\r\nexport const omitFields = <T extends Record<string, unknown>, K extends keyof T>(\r\n obj: T | null | undefined,\r\n fieldsToOmit: K[]\r\n): Omit<T, K> | null => {\r\n if (!obj) return null;\r\n\r\n const result = { ...obj };\r\n\r\n fieldsToOmit.forEach((field) => {\r\n delete result[field];\r\n });\r\n\r\n return result as Omit<T, K>;\r\n};\r\n\r\nexport default {\r\n sanitizeUser,\r\n sanitizeDocument,\r\n pickFields,\r\n omitFields,\r\n};\r\n","/**\r\n * Package Check Utility - Server/Node.js Version\r\n * Analyzes package.json dependencies and checks for updates\r\n * \r\n * This version supports reading from file paths using Node.js fs\r\n */\r\nimport { readFileSync, existsSync } from 'fs';\r\nimport { resolve } from 'path';\r\n\r\nexport interface PackageVersion {\r\n name: string;\r\n current: string;\r\n latest: string;\r\n hasUpdate: boolean;\r\n updateType: 'major' | 'minor' | 'patch' | 'prerelease' | 'none';\r\n dependencyType: 'dependencies' | 'devDependencies' | 'peerDependencies' | 'optionalDependencies';\r\n}\r\n\r\nexport interface PackageCheckResult {\r\n packageName: string;\r\n packageVersion: string;\r\n totalDependencies: number;\r\n outdatedCount: number;\r\n dependencies: PackageVersion[];\r\n byType: {\r\n dependencies: PackageVersion[];\r\n devDependencies: PackageVersion[];\r\n peerDependencies: PackageVersion[];\r\n optionalDependencies: PackageVersion[];\r\n };\r\n byUpdateType: {\r\n major: PackageVersion[];\r\n minor: PackageVersion[];\r\n patch: PackageVersion[];\r\n prerelease: PackageVersion[];\r\n };\r\n checkedAt: Date;\r\n errors: string[];\r\n}\r\n\r\nexport interface PackageJson {\r\n name?: string;\r\n version?: string;\r\n dependencies?: Record<string, string>;\r\n devDependencies?: Record<string, string>;\r\n peerDependencies?: Record<string, string>;\r\n optionalDependencies?: Record<string, string>;\r\n}\r\n\r\n/**\r\n * Parse version string, removing range operators\r\n */\r\nfunction parseVersion(version: string): string {\r\n return version.replace(/[\\^~>=<|*x\\s]/g, '').split(' ')[0] || '0.0.0';\r\n}\r\n\r\n/**\r\n * Compare two semver versions\r\n */\r\nfunction compareVersions(current: string, latest: string): 'major' | 'minor' | 'patch' | 'prerelease' | 'none' {\r\n const currentClean = parseVersion(current);\r\n const latestClean = parseVersion(latest);\r\n\r\n if (currentClean === latestClean) return 'none';\r\n\r\n const [curMajor, curMinor, curPatch] = currentClean.split('.').map(Number);\r\n const [latMajor, latMinor, latPatch] = latestClean.split('.').map(Number);\r\n\r\n if (latest.includes('-')) return 'prerelease';\r\n if (latMajor > curMajor) return 'major';\r\n if (latMinor > curMinor) return 'minor';\r\n if (latPatch > curPatch) return 'patch';\r\n\r\n return 'none';\r\n}\r\n\r\n/**\r\n * Fetch latest version from npm registry\r\n */\r\nasync function fetchLatestVersion(packageName: string): Promise<string | null> {\r\n try {\r\n const encodedName = packageName.startsWith('@')\r\n ? `@${encodeURIComponent(packageName.slice(1))}`\r\n : encodeURIComponent(packageName);\r\n\r\n const response = await fetch(`https://registry.npmjs.org/${encodedName}`);\r\n\r\n if (!response.ok) return null;\r\n\r\n const data = await response.json();\r\n return data['dist-tags']?.latest || null;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Load package.json from file path, URL, or object\r\n */\r\nasync function loadPackageJson(source: string | PackageJson): Promise<PackageJson> {\r\n if (typeof source === 'object') {\r\n return source;\r\n }\r\n\r\n // URL\r\n if (source.startsWith('http://') || source.startsWith('https://')) {\r\n const response = await fetch(source);\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch: ${response.status}`);\r\n }\r\n return response.json() as Promise<PackageJson>;\r\n }\r\n\r\n // File path\r\n const filePath = resolve(source);\r\n if (!existsSync(filePath)) {\r\n throw new Error(`File not found: ${filePath}`);\r\n }\r\n\r\n const content = readFileSync(filePath, 'utf-8');\r\n return JSON.parse(content) as PackageJson;\r\n}\r\n\r\n/**\r\n * Check dependencies\r\n */\r\nasync function checkDeps(\r\n deps: Record<string, string> | undefined,\r\n type: PackageVersion['dependencyType'],\r\n errors: string[]\r\n): Promise<PackageVersion[]> {\r\n if (!deps) return [];\r\n\r\n const results: PackageVersion[] = [];\r\n const entries = Object.entries(deps);\r\n\r\n const concurrencyLimit = 10;\r\n for (let i = 0; i < entries.length; i += concurrencyLimit) {\r\n const batch = entries.slice(i, i + concurrencyLimit);\r\n const batchResults = await Promise.all(\r\n batch.map(async ([name, currentVersion]) => {\r\n try {\r\n const latest = await fetchLatestVersion(name);\r\n\r\n if (!latest) {\r\n errors.push(`Could not fetch: ${name}`);\r\n return {\r\n name,\r\n current: currentVersion,\r\n latest: 'unknown',\r\n hasUpdate: false,\r\n updateType: 'none' as const,\r\n dependencyType: type,\r\n };\r\n }\r\n\r\n const updateType = compareVersions(currentVersion, latest);\r\n\r\n return {\r\n name,\r\n current: currentVersion,\r\n latest,\r\n hasUpdate: updateType !== 'none',\r\n updateType,\r\n dependencyType: type,\r\n };\r\n } catch (err) {\r\n errors.push(`Error: ${name} - ${err}`);\r\n return {\r\n name,\r\n current: currentVersion,\r\n latest: 'error',\r\n hasUpdate: false,\r\n updateType: 'none' as const,\r\n dependencyType: type,\r\n };\r\n }\r\n })\r\n );\r\n results.push(...batchResults);\r\n }\r\n\r\n return results;\r\n}\r\n\r\n/**\r\n * Check package.json for outdated dependencies\r\n * \r\n * @example\r\n * // From file path\r\n * const result = await checkPackageServer('./package.json');\r\n * \r\n * @example\r\n * // From URL\r\n * const result = await checkPackageServer('https://raw.githubusercontent.com/user/repo/main/package.json');\r\n */\r\nexport async function checkPackageServer(\r\n source: string | PackageJson\r\n): Promise<PackageCheckResult> {\r\n const errors: string[] = [];\r\n const pkg = await loadPackageJson(source);\r\n\r\n const [dependencies, devDependencies, peerDependencies, optionalDependencies] =\r\n await Promise.all([\r\n checkDeps(pkg.dependencies, 'dependencies', errors),\r\n checkDeps(pkg.devDependencies, 'devDependencies', errors),\r\n checkDeps(pkg.peerDependencies, 'peerDependencies', errors),\r\n checkDeps(pkg.optionalDependencies, 'optionalDependencies', errors),\r\n ]);\r\n\r\n const allDeps = [...dependencies, ...devDependencies, ...peerDependencies, ...optionalDependencies];\r\n\r\n return {\r\n packageName: pkg.name || 'unknown',\r\n packageVersion: pkg.version || '0.0.0',\r\n totalDependencies: allDeps.length,\r\n outdatedCount: allDeps.filter((d) => d.hasUpdate).length,\r\n dependencies: allDeps,\r\n byType: { dependencies, devDependencies, peerDependencies, optionalDependencies },\r\n byUpdateType: {\r\n major: allDeps.filter((d) => d.updateType === 'major'),\r\n minor: allDeps.filter((d) => d.updateType === 'minor'),\r\n patch: allDeps.filter((d) => d.updateType === 'patch'),\r\n prerelease: allDeps.filter((d) => d.updateType === 'prerelease'),\r\n },\r\n checkedAt: new Date(),\r\n errors,\r\n };\r\n}\r\n\r\n/**\r\n * Format result as colored console output\r\n */\r\nexport function formatPackageCheckResult(result: PackageCheckResult): string {\r\n const lines: string[] = [];\r\n\r\n lines.push(`\\n📦 Package: ${result.packageName}@${result.packageVersion}`);\r\n lines.push(`📅 Checked: ${result.checkedAt.toISOString()}`);\r\n lines.push(`📊 Total: ${result.totalDependencies} | Outdated: ${result.outdatedCount}\\n`);\r\n\r\n const formatDep = (d: PackageVersion) => ` ${d.name.padEnd(35)} ${d.current.padEnd(15)} → ${d.latest}`;\r\n\r\n if (result.byUpdateType.major.length > 0) {\r\n lines.push('🔴 MAJOR Updates:');\r\n result.byUpdateType.major.forEach((d) => lines.push(formatDep(d)));\r\n lines.push('');\r\n }\r\n\r\n if (result.byUpdateType.minor.length > 0) {\r\n lines.push('🟡 MINOR Updates:');\r\n result.byUpdateType.minor.forEach((d) => lines.push(formatDep(d)));\r\n lines.push('');\r\n }\r\n\r\n if (result.byUpdateType.patch.length > 0) {\r\n lines.push('🟢 PATCH Updates:');\r\n result.byUpdateType.patch.forEach((d) => lines.push(formatDep(d)));\r\n lines.push('');\r\n }\r\n\r\n if (result.errors.length > 0) {\r\n lines.push('⚠️ Errors:');\r\n result.errors.forEach((e) => lines.push(` ${e}`));\r\n }\r\n\r\n return lines.join('\\n');\r\n}\r\n\r\n/**\r\n * Generate ncu command\r\n */\r\nexport function generateNcuCommand(\r\n result: PackageCheckResult,\r\n options: { updateType?: 'major' | 'minor' | 'patch' | 'all'; interactive?: boolean; upgrade?: boolean } = {}\r\n): string {\r\n const { updateType = 'all', interactive = false, upgrade = false } = options;\r\n\r\n let packages: string[] = [];\r\n\r\n switch (updateType) {\r\n case 'major':\r\n packages = result.byUpdateType.major.map((d) => d.name);\r\n break;\r\n case 'minor':\r\n packages = result.byUpdateType.minor.map((d) => d.name);\r\n break;\r\n case 'patch':\r\n packages = result.byUpdateType.patch.map((d) => d.name);\r\n break;\r\n default:\r\n packages = result.dependencies.filter((d) => d.hasUpdate).map((d) => d.name);\r\n }\r\n\r\n if (packages.length === 0) return '# No updates available';\r\n\r\n let cmd = 'npx npm-check-updates';\r\n\r\n if (packages.length < result.dependencies.length) {\r\n cmd += ` --filter \"${packages.join(',')}\"`;\r\n }\r\n\r\n if (interactive) cmd += ' --interactive';\r\n if (upgrade) cmd += ' --upgrade';\r\n\r\n return cmd;\r\n}\r\n\r\n/**\r\n * Print summary to console\r\n */\r\nexport function printPackageCheckSummary(result: PackageCheckResult): void {\r\n console.log(formatPackageCheckResult(result));\r\n\r\n if (result.outdatedCount > 0) {\r\n console.log('\\n📝 Quick Commands:');\r\n console.log(' Check all: npx npm-check-updates');\r\n console.log(' Interactive: npx npm-check-updates --interactive');\r\n console.log(' Update all: npx npm-check-updates --upgrade && npm install');\r\n\r\n if (result.byUpdateType.patch.length > 0) {\r\n console.log(` Patch only: ${generateNcuCommand(result, { updateType: 'patch', upgrade: true })}`);\r\n }\r\n }\r\n}\r\n\r\nexport const packageCheckServer = {\r\n check: checkPackageServer,\r\n format: formatPackageCheckResult,\r\n generateNcuCommand,\r\n print: printPackageCheckSummary,\r\n} as const;\r\n\r\nexport default packageCheckServer;\r\n"]}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'fs';
|
|
2
|
+
import { resolve } from 'path';
|
|
3
|
+
|
|
1
4
|
// src/server/utils/filter-builder.ts
|
|
2
5
|
var buildFilter = (options) => {
|
|
3
6
|
const {
|
|
@@ -100,7 +103,198 @@ var omitFields = (obj, fieldsToOmit) => {
|
|
|
100
103
|
});
|
|
101
104
|
return result;
|
|
102
105
|
};
|
|
106
|
+
function parseVersion(version) {
|
|
107
|
+
return version.replace(/[\^~>=<|*x\s]/g, "").split(" ")[0] || "0.0.0";
|
|
108
|
+
}
|
|
109
|
+
function compareVersions(current, latest) {
|
|
110
|
+
const currentClean = parseVersion(current);
|
|
111
|
+
const latestClean = parseVersion(latest);
|
|
112
|
+
if (currentClean === latestClean) return "none";
|
|
113
|
+
const [curMajor, curMinor, curPatch] = currentClean.split(".").map(Number);
|
|
114
|
+
const [latMajor, latMinor, latPatch] = latestClean.split(".").map(Number);
|
|
115
|
+
if (latest.includes("-")) return "prerelease";
|
|
116
|
+
if (latMajor > curMajor) return "major";
|
|
117
|
+
if (latMinor > curMinor) return "minor";
|
|
118
|
+
if (latPatch > curPatch) return "patch";
|
|
119
|
+
return "none";
|
|
120
|
+
}
|
|
121
|
+
async function fetchLatestVersion(packageName) {
|
|
122
|
+
try {
|
|
123
|
+
const encodedName = packageName.startsWith("@") ? `@${encodeURIComponent(packageName.slice(1))}` : encodeURIComponent(packageName);
|
|
124
|
+
const response = await fetch(`https://registry.npmjs.org/${encodedName}`);
|
|
125
|
+
if (!response.ok) return null;
|
|
126
|
+
const data = await response.json();
|
|
127
|
+
return data["dist-tags"]?.latest || null;
|
|
128
|
+
} catch {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
async function loadPackageJson(source) {
|
|
133
|
+
if (typeof source === "object") {
|
|
134
|
+
return source;
|
|
135
|
+
}
|
|
136
|
+
if (source.startsWith("http://") || source.startsWith("https://")) {
|
|
137
|
+
const response = await fetch(source);
|
|
138
|
+
if (!response.ok) {
|
|
139
|
+
throw new Error(`Failed to fetch: ${response.status}`);
|
|
140
|
+
}
|
|
141
|
+
return response.json();
|
|
142
|
+
}
|
|
143
|
+
const filePath = resolve(source);
|
|
144
|
+
if (!existsSync(filePath)) {
|
|
145
|
+
throw new Error(`File not found: ${filePath}`);
|
|
146
|
+
}
|
|
147
|
+
const content = readFileSync(filePath, "utf-8");
|
|
148
|
+
return JSON.parse(content);
|
|
149
|
+
}
|
|
150
|
+
async function checkDeps(deps, type, errors) {
|
|
151
|
+
if (!deps) return [];
|
|
152
|
+
const results = [];
|
|
153
|
+
const entries = Object.entries(deps);
|
|
154
|
+
const concurrencyLimit = 10;
|
|
155
|
+
for (let i = 0; i < entries.length; i += concurrencyLimit) {
|
|
156
|
+
const batch = entries.slice(i, i + concurrencyLimit);
|
|
157
|
+
const batchResults = await Promise.all(
|
|
158
|
+
batch.map(async ([name, currentVersion]) => {
|
|
159
|
+
try {
|
|
160
|
+
const latest = await fetchLatestVersion(name);
|
|
161
|
+
if (!latest) {
|
|
162
|
+
errors.push(`Could not fetch: ${name}`);
|
|
163
|
+
return {
|
|
164
|
+
name,
|
|
165
|
+
current: currentVersion,
|
|
166
|
+
latest: "unknown",
|
|
167
|
+
hasUpdate: false,
|
|
168
|
+
updateType: "none",
|
|
169
|
+
dependencyType: type
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
const updateType = compareVersions(currentVersion, latest);
|
|
173
|
+
return {
|
|
174
|
+
name,
|
|
175
|
+
current: currentVersion,
|
|
176
|
+
latest,
|
|
177
|
+
hasUpdate: updateType !== "none",
|
|
178
|
+
updateType,
|
|
179
|
+
dependencyType: type
|
|
180
|
+
};
|
|
181
|
+
} catch (err) {
|
|
182
|
+
errors.push(`Error: ${name} - ${err}`);
|
|
183
|
+
return {
|
|
184
|
+
name,
|
|
185
|
+
current: currentVersion,
|
|
186
|
+
latest: "error",
|
|
187
|
+
hasUpdate: false,
|
|
188
|
+
updateType: "none",
|
|
189
|
+
dependencyType: type
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
})
|
|
193
|
+
);
|
|
194
|
+
results.push(...batchResults);
|
|
195
|
+
}
|
|
196
|
+
return results;
|
|
197
|
+
}
|
|
198
|
+
async function checkPackageServer(source) {
|
|
199
|
+
const errors = [];
|
|
200
|
+
const pkg = await loadPackageJson(source);
|
|
201
|
+
const [dependencies, devDependencies, peerDependencies, optionalDependencies] = await Promise.all([
|
|
202
|
+
checkDeps(pkg.dependencies, "dependencies", errors),
|
|
203
|
+
checkDeps(pkg.devDependencies, "devDependencies", errors),
|
|
204
|
+
checkDeps(pkg.peerDependencies, "peerDependencies", errors),
|
|
205
|
+
checkDeps(pkg.optionalDependencies, "optionalDependencies", errors)
|
|
206
|
+
]);
|
|
207
|
+
const allDeps = [...dependencies, ...devDependencies, ...peerDependencies, ...optionalDependencies];
|
|
208
|
+
return {
|
|
209
|
+
packageName: pkg.name || "unknown",
|
|
210
|
+
packageVersion: pkg.version || "0.0.0",
|
|
211
|
+
totalDependencies: allDeps.length,
|
|
212
|
+
outdatedCount: allDeps.filter((d) => d.hasUpdate).length,
|
|
213
|
+
dependencies: allDeps,
|
|
214
|
+
byType: { dependencies, devDependencies, peerDependencies, optionalDependencies },
|
|
215
|
+
byUpdateType: {
|
|
216
|
+
major: allDeps.filter((d) => d.updateType === "major"),
|
|
217
|
+
minor: allDeps.filter((d) => d.updateType === "minor"),
|
|
218
|
+
patch: allDeps.filter((d) => d.updateType === "patch"),
|
|
219
|
+
prerelease: allDeps.filter((d) => d.updateType === "prerelease")
|
|
220
|
+
},
|
|
221
|
+
checkedAt: /* @__PURE__ */ new Date(),
|
|
222
|
+
errors
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
function formatPackageCheckResult(result) {
|
|
226
|
+
const lines = [];
|
|
227
|
+
lines.push(`
|
|
228
|
+
\u{1F4E6} Package: ${result.packageName}@${result.packageVersion}`);
|
|
229
|
+
lines.push(`\u{1F4C5} Checked: ${result.checkedAt.toISOString()}`);
|
|
230
|
+
lines.push(`\u{1F4CA} Total: ${result.totalDependencies} | Outdated: ${result.outdatedCount}
|
|
231
|
+
`);
|
|
232
|
+
const formatDep = (d) => ` ${d.name.padEnd(35)} ${d.current.padEnd(15)} \u2192 ${d.latest}`;
|
|
233
|
+
if (result.byUpdateType.major.length > 0) {
|
|
234
|
+
lines.push("\u{1F534} MAJOR Updates:");
|
|
235
|
+
result.byUpdateType.major.forEach((d) => lines.push(formatDep(d)));
|
|
236
|
+
lines.push("");
|
|
237
|
+
}
|
|
238
|
+
if (result.byUpdateType.minor.length > 0) {
|
|
239
|
+
lines.push("\u{1F7E1} MINOR Updates:");
|
|
240
|
+
result.byUpdateType.minor.forEach((d) => lines.push(formatDep(d)));
|
|
241
|
+
lines.push("");
|
|
242
|
+
}
|
|
243
|
+
if (result.byUpdateType.patch.length > 0) {
|
|
244
|
+
lines.push("\u{1F7E2} PATCH Updates:");
|
|
245
|
+
result.byUpdateType.patch.forEach((d) => lines.push(formatDep(d)));
|
|
246
|
+
lines.push("");
|
|
247
|
+
}
|
|
248
|
+
if (result.errors.length > 0) {
|
|
249
|
+
lines.push("\u26A0\uFE0F Errors:");
|
|
250
|
+
result.errors.forEach((e) => lines.push(` ${e}`));
|
|
251
|
+
}
|
|
252
|
+
return lines.join("\n");
|
|
253
|
+
}
|
|
254
|
+
function generateNcuCommand(result, options = {}) {
|
|
255
|
+
const { updateType = "all", interactive = false, upgrade = false } = options;
|
|
256
|
+
let packages = [];
|
|
257
|
+
switch (updateType) {
|
|
258
|
+
case "major":
|
|
259
|
+
packages = result.byUpdateType.major.map((d) => d.name);
|
|
260
|
+
break;
|
|
261
|
+
case "minor":
|
|
262
|
+
packages = result.byUpdateType.minor.map((d) => d.name);
|
|
263
|
+
break;
|
|
264
|
+
case "patch":
|
|
265
|
+
packages = result.byUpdateType.patch.map((d) => d.name);
|
|
266
|
+
break;
|
|
267
|
+
default:
|
|
268
|
+
packages = result.dependencies.filter((d) => d.hasUpdate).map((d) => d.name);
|
|
269
|
+
}
|
|
270
|
+
if (packages.length === 0) return "# No updates available";
|
|
271
|
+
let cmd = "npx npm-check-updates";
|
|
272
|
+
if (packages.length < result.dependencies.length) {
|
|
273
|
+
cmd += ` --filter "${packages.join(",")}"`;
|
|
274
|
+
}
|
|
275
|
+
if (interactive) cmd += " --interactive";
|
|
276
|
+
if (upgrade) cmd += " --upgrade";
|
|
277
|
+
return cmd;
|
|
278
|
+
}
|
|
279
|
+
function printPackageCheckSummary(result) {
|
|
280
|
+
console.log(formatPackageCheckResult(result));
|
|
281
|
+
if (result.outdatedCount > 0) {
|
|
282
|
+
console.log("\n\u{1F4DD} Quick Commands:");
|
|
283
|
+
console.log(" Check all: npx npm-check-updates");
|
|
284
|
+
console.log(" Interactive: npx npm-check-updates --interactive");
|
|
285
|
+
console.log(" Update all: npx npm-check-updates --upgrade && npm install");
|
|
286
|
+
if (result.byUpdateType.patch.length > 0) {
|
|
287
|
+
console.log(` Patch only: ${generateNcuCommand(result, { updateType: "patch", upgrade: true })}`);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
var packageCheckServer = {
|
|
292
|
+
check: checkPackageServer,
|
|
293
|
+
format: formatPackageCheckResult,
|
|
294
|
+
generateNcuCommand,
|
|
295
|
+
print: printPackageCheckSummary
|
|
296
|
+
};
|
|
103
297
|
|
|
104
|
-
export { buildFilter, buildPagination, buildPaginationMeta, omitFields, pickFields, sanitizeDocument, sanitizeUser };
|
|
298
|
+
export { buildFilter, buildPagination, buildPaginationMeta, checkPackageServer, formatPackageCheckResult, generateNcuCommand, omitFields, packageCheckServer, pickFields, printPackageCheckSummary, sanitizeDocument, sanitizeUser };
|
|
105
299
|
//# sourceMappingURL=index.mjs.map
|
|
106
300
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/server/utils/filter-builder.ts","../../../src/server/utils/sanitize.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\r\n * Filter Builder Options\r\n */\r\nexport interface FilterOptions {\r\n organizationId?: string;\r\n search?: string;\r\n searchFields?: string[];\r\n dateField?: string;\r\n startDate?: string;\r\n endDate?: string;\r\n status?: string;\r\n isActive?: boolean;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Pagination Options\r\n */\r\nexport interface PaginationOptions {\r\n page?: number;\r\n limit?: number;\r\n defaultLimit?: number;\r\n maxLimit?: number;\r\n}\r\n\r\n/**\r\n * Pagination Result\r\n */\r\nexport interface PaginationResult {\r\n skip: number;\r\n limit: number;\r\n page: number;\r\n}\r\n\r\n/**\r\n * Build MongoDB filter query dynamically\r\n */\r\nexport const buildFilter = (options: FilterOptions): Record<string, unknown> => {\r\n const {\r\n organizationId,\r\n search,\r\n searchFields = [],\r\n dateField = 'createdAt',\r\n startDate,\r\n endDate,\r\n status,\r\n isActive,\r\n ...additionalFilters\r\n } = options;\r\n\r\n const filter: Record<string, unknown> = {};\r\n\r\n // Add organizationId if provided\r\n if (organizationId) {\r\n filter.organizationId = organizationId;\r\n }\r\n\r\n // Handle text search with regex (min 2 characters)\r\n if (search && search.trim().length >= 2 && searchFields.length > 0) {\r\n const searchRegex = new RegExp(search.trim(), 'i');\r\n filter.$or = searchFields.map((field) => ({ [field]: searchRegex }));\r\n }\r\n\r\n // Handle date range filtering\r\n if (startDate || endDate) {\r\n filter[dateField] = {};\r\n if (startDate) {\r\n (filter[dateField] as Record<string, unknown>).$gte = new Date(startDate);\r\n }\r\n if (endDate) {\r\n (filter[dateField] as Record<string, unknown>).$lte = new Date(endDate);\r\n }\r\n }\r\n\r\n // Handle status filter\r\n if (status !== undefined) {\r\n filter.status = status;\r\n }\r\n\r\n // Handle isActive filter\r\n if (isActive !== undefined) {\r\n filter.isActive = isActive;\r\n }\r\n\r\n // Add any additional filters\r\n Object.entries(additionalFilters).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null && value !== '') {\r\n filter[key] = value;\r\n }\r\n });\r\n\r\n return filter;\r\n};\r\n\r\n/**\r\n * Calculate pagination values\r\n */\r\nexport const buildPagination = (options: PaginationOptions): PaginationResult => {\r\n const { page = 1, limit, defaultLimit = 10, maxLimit = 100 } = options;\r\n\r\n const finalPage = Math.max(1, page);\r\n const finalLimit = Math.min(maxLimit, Math.max(1, limit || defaultLimit));\r\n const skip = (finalPage - 1) * finalLimit;\r\n\r\n return {\r\n skip,\r\n limit: finalLimit,\r\n page: finalPage,\r\n };\r\n};\r\n\r\n/**\r\n * Calculate pagination metadata for response\r\n */\r\nexport const buildPaginationMeta = (\r\n total: number,\r\n page: number,\r\n limit: number\r\n): {\r\n total: number;\r\n page: number;\r\n limit: number;\r\n totalPages: number;\r\n hasNextPage: boolean;\r\n hasPrevPage: boolean;\r\n} => {\r\n const totalPages = Math.ceil(total / limit);\r\n\r\n return {\r\n total,\r\n page,\r\n limit,\r\n totalPages,\r\n hasNextPage: page < totalPages,\r\n hasPrevPage: page > 1,\r\n };\r\n};\r\n\r\nexport default {\r\n buildFilter,\r\n buildPagination,\r\n buildPaginationMeta,\r\n};\r\n","/**\r\n * Sanitize user object by removing sensitive fields\r\n */\r\nexport const sanitizeUser = <T extends Record<string, unknown>>(\r\n user: T | null | undefined,\r\n additionalFieldsToRemove: string[] = []\r\n): Omit<T, 'password' | '__v' | '_id'> | null => {\r\n if (!user) return null;\r\n\r\n const fieldsToRemove = ['password', '__v', '_id', ...additionalFieldsToRemove];\r\n\r\n // Handle mongoose documents\r\n const obj = typeof (user as any).toObject === 'function' \r\n ? (user as any).toObject() \r\n : { ...user };\r\n\r\n fieldsToRemove.forEach((field) => {\r\n delete obj[field];\r\n });\r\n\r\n return obj;\r\n};\r\n\r\n/**\r\n * Sanitize document by removing specified fields\r\n */\r\nexport const sanitizeDocument = <T extends Record<string, unknown>>(\r\n doc: T | null | undefined,\r\n fieldsToRemove: string[]\r\n): Partial<T> | null => {\r\n if (!doc) return null;\r\n\r\n // Handle mongoose documents\r\n const obj = typeof (doc as any).toObject === 'function' \r\n ? (doc as any).toObject() \r\n : { ...doc };\r\n\r\n fieldsToRemove.forEach((field) => {\r\n delete obj[field];\r\n });\r\n\r\n return obj;\r\n};\r\n\r\n/**\r\n * Pick specific fields from an object\r\n */\r\nexport const pickFields = <T extends Record<string, unknown>>(\r\n obj: T | null | undefined,\r\n fieldsToPick: (keyof T)[]\r\n): Partial<T> | null => {\r\n if (!obj) return null;\r\n\r\n const result: Partial<T> = {};\r\n\r\n fieldsToPick.forEach((field) => {\r\n if (field in obj) {\r\n result[field] = obj[field];\r\n }\r\n });\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Omit specific fields from an object\r\n */\r\nexport const omitFields = <T extends Record<string, unknown>, K extends keyof T>(\r\n obj: T | null | undefined,\r\n fieldsToOmit: K[]\r\n): Omit<T, K> | null => {\r\n if (!obj) return null;\r\n\r\n const result = { ...obj };\r\n\r\n fieldsToOmit.forEach((field) => {\r\n delete result[field];\r\n });\r\n\r\n return result as Omit<T, K>;\r\n};\r\n\r\nexport default {\r\n sanitizeUser,\r\n sanitizeDocument,\r\n pickFields,\r\n omitFields,\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/server/utils/filter-builder.ts","../../../src/server/utils/sanitize.ts","../../../src/server/utils/packageCheck.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\r\n * Filter Builder Options\r\n */\r\nexport interface FilterOptions {\r\n organizationId?: string;\r\n search?: string;\r\n searchFields?: string[];\r\n dateField?: string;\r\n startDate?: string;\r\n endDate?: string;\r\n status?: string;\r\n isActive?: boolean;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Pagination Options\r\n */\r\nexport interface PaginationOptions {\r\n page?: number;\r\n limit?: number;\r\n defaultLimit?: number;\r\n maxLimit?: number;\r\n}\r\n\r\n/**\r\n * Pagination Result\r\n */\r\nexport interface PaginationResult {\r\n skip: number;\r\n limit: number;\r\n page: number;\r\n}\r\n\r\n/**\r\n * Build MongoDB filter query dynamically\r\n */\r\nexport const buildFilter = (options: FilterOptions): Record<string, unknown> => {\r\n const {\r\n organizationId,\r\n search,\r\n searchFields = [],\r\n dateField = 'createdAt',\r\n startDate,\r\n endDate,\r\n status,\r\n isActive,\r\n ...additionalFilters\r\n } = options;\r\n\r\n const filter: Record<string, unknown> = {};\r\n\r\n // Add organizationId if provided\r\n if (organizationId) {\r\n filter.organizationId = organizationId;\r\n }\r\n\r\n // Handle text search with regex (min 2 characters)\r\n if (search && search.trim().length >= 2 && searchFields.length > 0) {\r\n const searchRegex = new RegExp(search.trim(), 'i');\r\n filter.$or = searchFields.map((field) => ({ [field]: searchRegex }));\r\n }\r\n\r\n // Handle date range filtering\r\n if (startDate || endDate) {\r\n filter[dateField] = {};\r\n if (startDate) {\r\n (filter[dateField] as Record<string, unknown>).$gte = new Date(startDate);\r\n }\r\n if (endDate) {\r\n (filter[dateField] as Record<string, unknown>).$lte = new Date(endDate);\r\n }\r\n }\r\n\r\n // Handle status filter\r\n if (status !== undefined) {\r\n filter.status = status;\r\n }\r\n\r\n // Handle isActive filter\r\n if (isActive !== undefined) {\r\n filter.isActive = isActive;\r\n }\r\n\r\n // Add any additional filters\r\n Object.entries(additionalFilters).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null && value !== '') {\r\n filter[key] = value;\r\n }\r\n });\r\n\r\n return filter;\r\n};\r\n\r\n/**\r\n * Calculate pagination values\r\n */\r\nexport const buildPagination = (options: PaginationOptions): PaginationResult => {\r\n const { page = 1, limit, defaultLimit = 10, maxLimit = 100 } = options;\r\n\r\n const finalPage = Math.max(1, page);\r\n const finalLimit = Math.min(maxLimit, Math.max(1, limit || defaultLimit));\r\n const skip = (finalPage - 1) * finalLimit;\r\n\r\n return {\r\n skip,\r\n limit: finalLimit,\r\n page: finalPage,\r\n };\r\n};\r\n\r\n/**\r\n * Calculate pagination metadata for response\r\n */\r\nexport const buildPaginationMeta = (\r\n total: number,\r\n page: number,\r\n limit: number\r\n): {\r\n total: number;\r\n page: number;\r\n limit: number;\r\n totalPages: number;\r\n hasNextPage: boolean;\r\n hasPrevPage: boolean;\r\n} => {\r\n const totalPages = Math.ceil(total / limit);\r\n\r\n return {\r\n total,\r\n page,\r\n limit,\r\n totalPages,\r\n hasNextPage: page < totalPages,\r\n hasPrevPage: page > 1,\r\n };\r\n};\r\n\r\nexport default {\r\n buildFilter,\r\n buildPagination,\r\n buildPaginationMeta,\r\n};\r\n","/**\r\n * Sanitize user object by removing sensitive fields\r\n */\r\nexport const sanitizeUser = <T extends Record<string, unknown>>(\r\n user: T | null | undefined,\r\n additionalFieldsToRemove: string[] = []\r\n): Omit<T, 'password' | '__v' | '_id'> | null => {\r\n if (!user) return null;\r\n\r\n const fieldsToRemove = ['password', '__v', '_id', ...additionalFieldsToRemove];\r\n\r\n // Handle mongoose documents\r\n const obj = typeof (user as any).toObject === 'function' \r\n ? (user as any).toObject() \r\n : { ...user };\r\n\r\n fieldsToRemove.forEach((field) => {\r\n delete obj[field];\r\n });\r\n\r\n return obj;\r\n};\r\n\r\n/**\r\n * Sanitize document by removing specified fields\r\n */\r\nexport const sanitizeDocument = <T extends Record<string, unknown>>(\r\n doc: T | null | undefined,\r\n fieldsToRemove: string[]\r\n): Partial<T> | null => {\r\n if (!doc) return null;\r\n\r\n // Handle mongoose documents\r\n const obj = typeof (doc as any).toObject === 'function' \r\n ? (doc as any).toObject() \r\n : { ...doc };\r\n\r\n fieldsToRemove.forEach((field) => {\r\n delete obj[field];\r\n });\r\n\r\n return obj;\r\n};\r\n\r\n/**\r\n * Pick specific fields from an object\r\n */\r\nexport const pickFields = <T extends Record<string, unknown>>(\r\n obj: T | null | undefined,\r\n fieldsToPick: (keyof T)[]\r\n): Partial<T> | null => {\r\n if (!obj) return null;\r\n\r\n const result: Partial<T> = {};\r\n\r\n fieldsToPick.forEach((field) => {\r\n if (field in obj) {\r\n result[field] = obj[field];\r\n }\r\n });\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Omit specific fields from an object\r\n */\r\nexport const omitFields = <T extends Record<string, unknown>, K extends keyof T>(\r\n obj: T | null | undefined,\r\n fieldsToOmit: K[]\r\n): Omit<T, K> | null => {\r\n if (!obj) return null;\r\n\r\n const result = { ...obj };\r\n\r\n fieldsToOmit.forEach((field) => {\r\n delete result[field];\r\n });\r\n\r\n return result as Omit<T, K>;\r\n};\r\n\r\nexport default {\r\n sanitizeUser,\r\n sanitizeDocument,\r\n pickFields,\r\n omitFields,\r\n};\r\n","/**\r\n * Package Check Utility - Server/Node.js Version\r\n * Analyzes package.json dependencies and checks for updates\r\n * \r\n * This version supports reading from file paths using Node.js fs\r\n */\r\nimport { readFileSync, existsSync } from 'fs';\r\nimport { resolve } from 'path';\r\n\r\nexport interface PackageVersion {\r\n name: string;\r\n current: string;\r\n latest: string;\r\n hasUpdate: boolean;\r\n updateType: 'major' | 'minor' | 'patch' | 'prerelease' | 'none';\r\n dependencyType: 'dependencies' | 'devDependencies' | 'peerDependencies' | 'optionalDependencies';\r\n}\r\n\r\nexport interface PackageCheckResult {\r\n packageName: string;\r\n packageVersion: string;\r\n totalDependencies: number;\r\n outdatedCount: number;\r\n dependencies: PackageVersion[];\r\n byType: {\r\n dependencies: PackageVersion[];\r\n devDependencies: PackageVersion[];\r\n peerDependencies: PackageVersion[];\r\n optionalDependencies: PackageVersion[];\r\n };\r\n byUpdateType: {\r\n major: PackageVersion[];\r\n minor: PackageVersion[];\r\n patch: PackageVersion[];\r\n prerelease: PackageVersion[];\r\n };\r\n checkedAt: Date;\r\n errors: string[];\r\n}\r\n\r\nexport interface PackageJson {\r\n name?: string;\r\n version?: string;\r\n dependencies?: Record<string, string>;\r\n devDependencies?: Record<string, string>;\r\n peerDependencies?: Record<string, string>;\r\n optionalDependencies?: Record<string, string>;\r\n}\r\n\r\n/**\r\n * Parse version string, removing range operators\r\n */\r\nfunction parseVersion(version: string): string {\r\n return version.replace(/[\\^~>=<|*x\\s]/g, '').split(' ')[0] || '0.0.0';\r\n}\r\n\r\n/**\r\n * Compare two semver versions\r\n */\r\nfunction compareVersions(current: string, latest: string): 'major' | 'minor' | 'patch' | 'prerelease' | 'none' {\r\n const currentClean = parseVersion(current);\r\n const latestClean = parseVersion(latest);\r\n\r\n if (currentClean === latestClean) return 'none';\r\n\r\n const [curMajor, curMinor, curPatch] = currentClean.split('.').map(Number);\r\n const [latMajor, latMinor, latPatch] = latestClean.split('.').map(Number);\r\n\r\n if (latest.includes('-')) return 'prerelease';\r\n if (latMajor > curMajor) return 'major';\r\n if (latMinor > curMinor) return 'minor';\r\n if (latPatch > curPatch) return 'patch';\r\n\r\n return 'none';\r\n}\r\n\r\n/**\r\n * Fetch latest version from npm registry\r\n */\r\nasync function fetchLatestVersion(packageName: string): Promise<string | null> {\r\n try {\r\n const encodedName = packageName.startsWith('@')\r\n ? `@${encodeURIComponent(packageName.slice(1))}`\r\n : encodeURIComponent(packageName);\r\n\r\n const response = await fetch(`https://registry.npmjs.org/${encodedName}`);\r\n\r\n if (!response.ok) return null;\r\n\r\n const data = await response.json();\r\n return data['dist-tags']?.latest || null;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Load package.json from file path, URL, or object\r\n */\r\nasync function loadPackageJson(source: string | PackageJson): Promise<PackageJson> {\r\n if (typeof source === 'object') {\r\n return source;\r\n }\r\n\r\n // URL\r\n if (source.startsWith('http://') || source.startsWith('https://')) {\r\n const response = await fetch(source);\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch: ${response.status}`);\r\n }\r\n return response.json() as Promise<PackageJson>;\r\n }\r\n\r\n // File path\r\n const filePath = resolve(source);\r\n if (!existsSync(filePath)) {\r\n throw new Error(`File not found: ${filePath}`);\r\n }\r\n\r\n const content = readFileSync(filePath, 'utf-8');\r\n return JSON.parse(content) as PackageJson;\r\n}\r\n\r\n/**\r\n * Check dependencies\r\n */\r\nasync function checkDeps(\r\n deps: Record<string, string> | undefined,\r\n type: PackageVersion['dependencyType'],\r\n errors: string[]\r\n): Promise<PackageVersion[]> {\r\n if (!deps) return [];\r\n\r\n const results: PackageVersion[] = [];\r\n const entries = Object.entries(deps);\r\n\r\n const concurrencyLimit = 10;\r\n for (let i = 0; i < entries.length; i += concurrencyLimit) {\r\n const batch = entries.slice(i, i + concurrencyLimit);\r\n const batchResults = await Promise.all(\r\n batch.map(async ([name, currentVersion]) => {\r\n try {\r\n const latest = await fetchLatestVersion(name);\r\n\r\n if (!latest) {\r\n errors.push(`Could not fetch: ${name}`);\r\n return {\r\n name,\r\n current: currentVersion,\r\n latest: 'unknown',\r\n hasUpdate: false,\r\n updateType: 'none' as const,\r\n dependencyType: type,\r\n };\r\n }\r\n\r\n const updateType = compareVersions(currentVersion, latest);\r\n\r\n return {\r\n name,\r\n current: currentVersion,\r\n latest,\r\n hasUpdate: updateType !== 'none',\r\n updateType,\r\n dependencyType: type,\r\n };\r\n } catch (err) {\r\n errors.push(`Error: ${name} - ${err}`);\r\n return {\r\n name,\r\n current: currentVersion,\r\n latest: 'error',\r\n hasUpdate: false,\r\n updateType: 'none' as const,\r\n dependencyType: type,\r\n };\r\n }\r\n })\r\n );\r\n results.push(...batchResults);\r\n }\r\n\r\n return results;\r\n}\r\n\r\n/**\r\n * Check package.json for outdated dependencies\r\n * \r\n * @example\r\n * // From file path\r\n * const result = await checkPackageServer('./package.json');\r\n * \r\n * @example\r\n * // From URL\r\n * const result = await checkPackageServer('https://raw.githubusercontent.com/user/repo/main/package.json');\r\n */\r\nexport async function checkPackageServer(\r\n source: string | PackageJson\r\n): Promise<PackageCheckResult> {\r\n const errors: string[] = [];\r\n const pkg = await loadPackageJson(source);\r\n\r\n const [dependencies, devDependencies, peerDependencies, optionalDependencies] =\r\n await Promise.all([\r\n checkDeps(pkg.dependencies, 'dependencies', errors),\r\n checkDeps(pkg.devDependencies, 'devDependencies', errors),\r\n checkDeps(pkg.peerDependencies, 'peerDependencies', errors),\r\n checkDeps(pkg.optionalDependencies, 'optionalDependencies', errors),\r\n ]);\r\n\r\n const allDeps = [...dependencies, ...devDependencies, ...peerDependencies, ...optionalDependencies];\r\n\r\n return {\r\n packageName: pkg.name || 'unknown',\r\n packageVersion: pkg.version || '0.0.0',\r\n totalDependencies: allDeps.length,\r\n outdatedCount: allDeps.filter((d) => d.hasUpdate).length,\r\n dependencies: allDeps,\r\n byType: { dependencies, devDependencies, peerDependencies, optionalDependencies },\r\n byUpdateType: {\r\n major: allDeps.filter((d) => d.updateType === 'major'),\r\n minor: allDeps.filter((d) => d.updateType === 'minor'),\r\n patch: allDeps.filter((d) => d.updateType === 'patch'),\r\n prerelease: allDeps.filter((d) => d.updateType === 'prerelease'),\r\n },\r\n checkedAt: new Date(),\r\n errors,\r\n };\r\n}\r\n\r\n/**\r\n * Format result as colored console output\r\n */\r\nexport function formatPackageCheckResult(result: PackageCheckResult): string {\r\n const lines: string[] = [];\r\n\r\n lines.push(`\\n📦 Package: ${result.packageName}@${result.packageVersion}`);\r\n lines.push(`📅 Checked: ${result.checkedAt.toISOString()}`);\r\n lines.push(`📊 Total: ${result.totalDependencies} | Outdated: ${result.outdatedCount}\\n`);\r\n\r\n const formatDep = (d: PackageVersion) => ` ${d.name.padEnd(35)} ${d.current.padEnd(15)} → ${d.latest}`;\r\n\r\n if (result.byUpdateType.major.length > 0) {\r\n lines.push('🔴 MAJOR Updates:');\r\n result.byUpdateType.major.forEach((d) => lines.push(formatDep(d)));\r\n lines.push('');\r\n }\r\n\r\n if (result.byUpdateType.minor.length > 0) {\r\n lines.push('🟡 MINOR Updates:');\r\n result.byUpdateType.minor.forEach((d) => lines.push(formatDep(d)));\r\n lines.push('');\r\n }\r\n\r\n if (result.byUpdateType.patch.length > 0) {\r\n lines.push('🟢 PATCH Updates:');\r\n result.byUpdateType.patch.forEach((d) => lines.push(formatDep(d)));\r\n lines.push('');\r\n }\r\n\r\n if (result.errors.length > 0) {\r\n lines.push('⚠️ Errors:');\r\n result.errors.forEach((e) => lines.push(` ${e}`));\r\n }\r\n\r\n return lines.join('\\n');\r\n}\r\n\r\n/**\r\n * Generate ncu command\r\n */\r\nexport function generateNcuCommand(\r\n result: PackageCheckResult,\r\n options: { updateType?: 'major' | 'minor' | 'patch' | 'all'; interactive?: boolean; upgrade?: boolean } = {}\r\n): string {\r\n const { updateType = 'all', interactive = false, upgrade = false } = options;\r\n\r\n let packages: string[] = [];\r\n\r\n switch (updateType) {\r\n case 'major':\r\n packages = result.byUpdateType.major.map((d) => d.name);\r\n break;\r\n case 'minor':\r\n packages = result.byUpdateType.minor.map((d) => d.name);\r\n break;\r\n case 'patch':\r\n packages = result.byUpdateType.patch.map((d) => d.name);\r\n break;\r\n default:\r\n packages = result.dependencies.filter((d) => d.hasUpdate).map((d) => d.name);\r\n }\r\n\r\n if (packages.length === 0) return '# No updates available';\r\n\r\n let cmd = 'npx npm-check-updates';\r\n\r\n if (packages.length < result.dependencies.length) {\r\n cmd += ` --filter \"${packages.join(',')}\"`;\r\n }\r\n\r\n if (interactive) cmd += ' --interactive';\r\n if (upgrade) cmd += ' --upgrade';\r\n\r\n return cmd;\r\n}\r\n\r\n/**\r\n * Print summary to console\r\n */\r\nexport function printPackageCheckSummary(result: PackageCheckResult): void {\r\n console.log(formatPackageCheckResult(result));\r\n\r\n if (result.outdatedCount > 0) {\r\n console.log('\\n📝 Quick Commands:');\r\n console.log(' Check all: npx npm-check-updates');\r\n console.log(' Interactive: npx npm-check-updates --interactive');\r\n console.log(' Update all: npx npm-check-updates --upgrade && npm install');\r\n\r\n if (result.byUpdateType.patch.length > 0) {\r\n console.log(` Patch only: ${generateNcuCommand(result, { updateType: 'patch', upgrade: true })}`);\r\n }\r\n }\r\n}\r\n\r\nexport const packageCheckServer = {\r\n check: checkPackageServer,\r\n format: formatPackageCheckResult,\r\n generateNcuCommand,\r\n print: printPackageCheckSummary,\r\n} as const;\r\n\r\nexport default packageCheckServer;\r\n"]}
|
package/dist/shared/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { A as ApiErrorResponse, a as ApiResponse, b as ApiSuccessResponse, B as BaseFilterParams, C as CreateResponse, D as DeleteResponse, F as FilterWithPagination, G as GetResponse, L as ListResponse, P as PaginatedResponse, c as PaginationMeta, d as PaginationParams, U as UpdateResponse } from '../response.types-D--UhLJq.mjs';
|
|
2
|
-
export { e as AuditableEntity, b as AuthResponse, A as AuthTokens, d as BaseEntity, B as BaseUser, C as ChangePasswordRequest,
|
|
2
|
+
export { e as AuditableEntity, b as AuthResponse, A as AuthTokens, a7 as BREAKPOINTS, d as BaseEntity, B as BaseUser, D as Breakpoint, aa as CONTAINER_WIDTHS, C as ChangePasswordRequest, af as DATE_FORMAT, az as DATE_FORMATS, W as DateFormat, aw as DateInput, ai as ENUMS, ai as ENUMS_DEFAULT, E as EnvConfig, ab as FILE_TYPE, G as FileType, F as ForgotPasswordRequest, ah as GENDER, Y as Gender, aj as HTTP_STATUS, al as HTTP_STATUS_MESSAGES, ak as HttpStatusCode, I as ID, ag as INTERVAL, X as Interval, J as JwtPayload, K as KeyValuePair, ae as LOCALE, Q as Locale, L as LoginCredentials, a8 as MEDIA_QUERIES, a9 as MEDIA_QUERIES_MAX, ac as NOTIFICATION_TYPE, H as NotificationType, N as Nullable, Z as ORDER_STATUS, f as ObjectId, g as Optional, r as OrderStatus, O as OrganizationEntity, as as PAGINATION, _ as PAYMENT_STATUS, a4 as PERMISSION_LEVEL, a5 as PRIORITY, P as PaymentStatus, y as PermissionLevel, z as Priority, a3 as ROLE, aq as ROLES, R as RegisterCredentials, h as RequiredFields, c as ResetPasswordRequest, x as Role, ar as RoleValue, a2 as SORT, a1 as SORT_DIRECTION, am as STATUS, a0 as SUBSCRIPTION_STATUS, j as SelectOption, S as SoftDeleteEntity, w as Sort, l as SortConfig, u as SortDirection, k as SortOrder, an as StatusValue, t as SubscriptionStatus, $ as TASK_STATUS, ad as THEME, at as TOKEN_TYPES, s as TaskStatus, M as Theme, T as Timestamps, au as TokenType, ao as USER_STATUS, a as UserRole, ap as UserStatusValue, U as UserWithRole, bb as VALIDATION_MESSAGES, b4 as VALIDATION_PATTERNS, bc as VALIDATION_RULES, a6 as VISIBILITY, V as Visibility, aK as addTime, b3 as combineDateAndTime, av as dateTime, a_ as daysSince, aZ as daysUntil, aV as doDateRangesOverlap, aA as formatDate, aC as formatDateInTimezone, aF as formatDateRange, aB as formatDateTime, aD as formatRelativeTime, aE as formatSmartDate, aH as fromTimezone, aW as getAge, aM as getDateDifference, aQ as getDayBoundaries, aN as getDaysInRange, m as getEnv, n as getEnvOptional, aS as getMonthBoundaries, aP as getMonthsInRange, aJ as getTimezoneDifference, aR as getWeekBoundaries, aO as getWeeksInRange, aT as getYearBoundaries, aU as isDateBetween, p as isDev, o as isProd, q as isTest, ay as isValidDate, b5 as isValidEmail, b6 as isValidPassword, b7 as isValidPhone, ba as isValidSlug, b8 as isValidUrl, b9 as isValidUsername, aY as isWeekday, aX as isWeekend, aI as nowInTimezone, ax as parseDate, b2 as setTime, aL as subtractTime, a$ as toDateInputValue, b0 as toDateTimeInputValue, b1 as toTimeInputValue, aG as toTimezone, v as validateEnv } from '../index-DfqEP6Oe.mjs';
|
|
3
3
|
export { addDays, addHours, addMinutes, addMonths, addWeeks, addYears, differenceInDays, differenceInHours, differenceInMinutes, differenceInMonths, differenceInSeconds, differenceInWeeks, differenceInYears, eachDayOfInterval, eachMonthOfInterval, eachWeekOfInterval, endOfDay, endOfMonth, endOfWeek, endOfYear, format, formatDistance, formatDistanceToNow, formatDuration, formatRelative, getDate, getDay, getHours, getMinutes, getMonth, getSeconds, getYear, intervalToDuration, isAfter, isBefore, isEqual, isFuture, isPast, isSameDay, isSameMonth, isSameWeek, isSameYear, isThisMonth, isThisWeek, isThisYear, isToday, isTomorrow, isValid, isYesterday, parseISO, setHours, setMinutes, setSeconds, startOfDay, startOfMonth, startOfWeek, startOfYear, subDays, subHours, subMinutes, subMonths, subWeeks, subYears } from 'date-fns';
|
|
4
4
|
export { formatInTimeZone, fromZonedTime, toZonedTime } from 'date-fns-tz';
|
package/dist/shared/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { A as ApiErrorResponse, a as ApiResponse, b as ApiSuccessResponse, B as BaseFilterParams, C as CreateResponse, D as DeleteResponse, F as FilterWithPagination, G as GetResponse, L as ListResponse, P as PaginatedResponse, c as PaginationMeta, d as PaginationParams, U as UpdateResponse } from '../response.types-D--UhLJq.js';
|
|
2
|
-
export { e as AuditableEntity, b as AuthResponse, A as AuthTokens, d as BaseEntity, B as BaseUser, C as ChangePasswordRequest,
|
|
2
|
+
export { e as AuditableEntity, b as AuthResponse, A as AuthTokens, a7 as BREAKPOINTS, d as BaseEntity, B as BaseUser, D as Breakpoint, aa as CONTAINER_WIDTHS, C as ChangePasswordRequest, af as DATE_FORMAT, az as DATE_FORMATS, W as DateFormat, aw as DateInput, ai as ENUMS, ai as ENUMS_DEFAULT, E as EnvConfig, ab as FILE_TYPE, G as FileType, F as ForgotPasswordRequest, ah as GENDER, Y as Gender, aj as HTTP_STATUS, al as HTTP_STATUS_MESSAGES, ak as HttpStatusCode, I as ID, ag as INTERVAL, X as Interval, J as JwtPayload, K as KeyValuePair, ae as LOCALE, Q as Locale, L as LoginCredentials, a8 as MEDIA_QUERIES, a9 as MEDIA_QUERIES_MAX, ac as NOTIFICATION_TYPE, H as NotificationType, N as Nullable, Z as ORDER_STATUS, f as ObjectId, g as Optional, r as OrderStatus, O as OrganizationEntity, as as PAGINATION, _ as PAYMENT_STATUS, a4 as PERMISSION_LEVEL, a5 as PRIORITY, P as PaymentStatus, y as PermissionLevel, z as Priority, a3 as ROLE, aq as ROLES, R as RegisterCredentials, h as RequiredFields, c as ResetPasswordRequest, x as Role, ar as RoleValue, a2 as SORT, a1 as SORT_DIRECTION, am as STATUS, a0 as SUBSCRIPTION_STATUS, j as SelectOption, S as SoftDeleteEntity, w as Sort, l as SortConfig, u as SortDirection, k as SortOrder, an as StatusValue, t as SubscriptionStatus, $ as TASK_STATUS, ad as THEME, at as TOKEN_TYPES, s as TaskStatus, M as Theme, T as Timestamps, au as TokenType, ao as USER_STATUS, a as UserRole, ap as UserStatusValue, U as UserWithRole, bb as VALIDATION_MESSAGES, b4 as VALIDATION_PATTERNS, bc as VALIDATION_RULES, a6 as VISIBILITY, V as Visibility, aK as addTime, b3 as combineDateAndTime, av as dateTime, a_ as daysSince, aZ as daysUntil, aV as doDateRangesOverlap, aA as formatDate, aC as formatDateInTimezone, aF as formatDateRange, aB as formatDateTime, aD as formatRelativeTime, aE as formatSmartDate, aH as fromTimezone, aW as getAge, aM as getDateDifference, aQ as getDayBoundaries, aN as getDaysInRange, m as getEnv, n as getEnvOptional, aS as getMonthBoundaries, aP as getMonthsInRange, aJ as getTimezoneDifference, aR as getWeekBoundaries, aO as getWeeksInRange, aT as getYearBoundaries, aU as isDateBetween, p as isDev, o as isProd, q as isTest, ay as isValidDate, b5 as isValidEmail, b6 as isValidPassword, b7 as isValidPhone, ba as isValidSlug, b8 as isValidUrl, b9 as isValidUsername, aY as isWeekday, aX as isWeekend, aI as nowInTimezone, ax as parseDate, b2 as setTime, aL as subtractTime, a$ as toDateInputValue, b0 as toDateTimeInputValue, b1 as toTimeInputValue, aG as toTimezone, v as validateEnv } from '../index-DNFVgQx8.js';
|
|
3
3
|
export { addDays, addHours, addMinutes, addMonths, addWeeks, addYears, differenceInDays, differenceInHours, differenceInMinutes, differenceInMonths, differenceInSeconds, differenceInWeeks, differenceInYears, eachDayOfInterval, eachMonthOfInterval, eachWeekOfInterval, endOfDay, endOfMonth, endOfWeek, endOfYear, format, formatDistance, formatDistanceToNow, formatDuration, formatRelative, getDate, getDay, getHours, getMinutes, getMonth, getSeconds, getYear, intervalToDuration, isAfter, isBefore, isEqual, isFuture, isPast, isSameDay, isSameMonth, isSameWeek, isSameYear, isThisMonth, isThisWeek, isThisYear, isToday, isTomorrow, isValid, isYesterday, parseISO, setHours, setMinutes, setSeconds, startOfDay, startOfMonth, startOfWeek, startOfYear, subDays, subHours, subMinutes, subMonths, subWeeks, subYears } from 'date-fns';
|
|
4
4
|
export { formatInTimeZone, fromZonedTime, toZonedTime } from 'date-fns-tz';
|