@yimingliao/cms 0.0.30 → 0.0.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -170,7 +170,7 @@ declare function createSchemas({ z, localeArray, exist, }: {
170
170
  declare function createFileSchema({ z, maxSizeInMb, }: {
171
171
  z: ReturnType<typeof createZod>;
172
172
  maxSizeInMb: number;
173
- }): ({ size, extensions, }: {
173
+ }): ({ size, extensions, }?: {
174
174
  size?: number;
175
175
  extensions?: string[];
176
176
  }) => zod.ZodPipe<zod.ZodCustom<File, File>, zod.ZodTransform<BlobFile, File>>;
@@ -829,4 +829,4 @@ declare class ServerError extends Error {
829
829
  static internalServerError(): ServerError;
830
830
  }
831
831
 
832
- export { ADMIN_ORDER_BY, ORDER_BY, POST_ORDER_BY, type RawCacheKey, ServerError, createAdminCommandRepository, createAdminQueryRepository, createAdminRefreshTokenCommandRepository, createAdminRefreshTokenQueryRepository, createArgon2Service, createAuthMiddleware, createAuthUseCases, createCache, createCacheResult, createCookieService, createCryptoService, createExecuteAction, createExecuteApi, createFileCommandRepository, createFileQueryRepository, createFileSchema, createFolderCommandRepository, createFolderQueryRepository, createIpRateLimiter, createJwtService, createMultiFileSchema, createPostCommandRepository, createPostQueryRepository, createSchemas, createSeoMetadataCommandRepository, createTocItemSchema, createVerifyAccessToken, createVerifyRefreshToken, createZod, normalizeCacheKey };
832
+ export { ADMIN_ORDER_BY, ORDER_BY, POST_ORDER_BY, type RawCacheKey, ServerError, createAdminCommandRepository, createAdminQueryRepository, createAdminRefreshTokenCommandRepository, createAdminRefreshTokenQueryRepository, createArgon2Service, createAuthMiddleware, createAuthUseCases, createCache, createCacheResult, createCookieService, createCryptoService, createExecuteAction, createExecuteApi, createExist, createFileCommandRepository, createFileQueryRepository, createFileSchema, createFolderCommandRepository, createFolderQueryRepository, createIpRateLimiter, createJwtService, createMultiFileSchema, createPostCommandRepository, createPostQueryRepository, createSchemas, createSeoMetadataCommandRepository, createTocItemSchema, createUnique, createVerifyAccessToken, createVerifyRefreshToken, createZod, normalizeCacheKey };
@@ -310,6 +310,65 @@ function createIpRateLimiter(cache, appName) {
310
310
  };
311
311
  }
312
312
 
313
+ // src/server/infrastructure/zod/rules/unique.ts
314
+ function createUnique(prisma) {
315
+ return async function unique(value, options) {
316
+ if (!value) return true;
317
+ let query = `
318
+ SELECT COUNT(*) AS count
319
+ FROM ${options.table}
320
+ WHERE ${options.column} = $1
321
+ `;
322
+ const params = [value];
323
+ const appendCondition = (op, sc) => {
324
+ const paramIndex = params.length + 1;
325
+ const cast = sc.cast ? `::"${sc.cast}"` : "";
326
+ query += ` AND ${sc.name} ${op} $${paramIndex}${cast}`;
327
+ params.push(sc.value);
328
+ };
329
+ if (options.scope) {
330
+ options.scope.forEach((sc) => appendCondition("=", sc));
331
+ }
332
+ if (options.excludeSelf) {
333
+ appendCondition("!=", options.excludeSelf);
334
+ }
335
+ try {
336
+ const result2 = await prisma.$queryRawUnsafe(
337
+ query,
338
+ ...params
339
+ );
340
+ return Number(result2[0]?.count || 0) === 0;
341
+ } catch (error) {
342
+ console.error("Unique check failed:", error);
343
+ return false;
344
+ }
345
+ };
346
+ }
347
+
348
+ // src/server/infrastructure/zod/rules/exist.ts
349
+ function createExist(prisma) {
350
+ return async function exist(value, options) {
351
+ if (!value) return false;
352
+ const column = options.column || "id";
353
+ const query = `
354
+ SELECT COUNT(*) AS count
355
+ FROM ${options.table}
356
+ WHERE ${column} = $1
357
+ `;
358
+ try {
359
+ const result2 = await prisma.$queryRawUnsafe(
360
+ query,
361
+ value
362
+ );
363
+ const count = Number(result2[0]?.count || 0);
364
+ return count > 0;
365
+ } catch (error) {
366
+ console.error("Exist check failed:", error);
367
+ return false;
368
+ }
369
+ };
370
+ }
371
+
313
372
  // src/server/infrastructure/zod/rules/bcp47.ts
314
373
  function bcp47(locale) {
315
374
  if (typeof locale !== "string") return false;
@@ -496,7 +555,7 @@ function createFileSchema({
496
555
  return function fileSchema({
497
556
  size = maxSizeInMb * SIZE.MB,
498
557
  extensions = []
499
- }) {
558
+ } = {}) {
500
559
  return z2.instanceof(File, { error: "Invalid file" }).refine((file) => file.size <= size, {
501
560
  error: `File is too large, max ${size / SIZE.MB}MB`
502
561
  }).refine(
@@ -1985,4 +2044,4 @@ function createAuthUseCases({
1985
2044
  };
1986
2045
  }
1987
2046
 
1988
- export { ADMIN_ORDER_BY, ORDER_BY, POST_ORDER_BY, ServerError, createAdminCommandRepository, createAdminQueryRepository, createAdminRefreshTokenCommandRepository, createAdminRefreshTokenQueryRepository, createArgon2Service, createAuthMiddleware, createAuthUseCases, createCache, createCacheResult, createCookieService, createCryptoService, createExecuteAction, createExecuteApi, createFileCommandRepository, createFileQueryRepository, createFileSchema, createFolderCommandRepository, createFolderQueryRepository, createIpRateLimiter, createJwtService, createMultiFileSchema, createPostCommandRepository, createPostQueryRepository, createSchemas, createSeoMetadataCommandRepository, createTocItemSchema, createVerifyAccessToken, createVerifyRefreshToken, createZod, normalizeCacheKey };
2047
+ export { ADMIN_ORDER_BY, ORDER_BY, POST_ORDER_BY, ServerError, createAdminCommandRepository, createAdminQueryRepository, createAdminRefreshTokenCommandRepository, createAdminRefreshTokenQueryRepository, createArgon2Service, createAuthMiddleware, createAuthUseCases, createCache, createCacheResult, createCookieService, createCryptoService, createExecuteAction, createExecuteApi, createExist, createFileCommandRepository, createFileQueryRepository, createFileSchema, createFolderCommandRepository, createFolderQueryRepository, createIpRateLimiter, createJwtService, createMultiFileSchema, createPostCommandRepository, createPostQueryRepository, createSchemas, createSeoMetadataCommandRepository, createTocItemSchema, createUnique, createVerifyAccessToken, createVerifyRefreshToken, createZod, normalizeCacheKey };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yimingliao/cms",
3
- "version": "0.0.30",
3
+ "version": "0.0.32",
4
4
  "author": "Yiming Liao",
5
5
  "license": "MIT",
6
6
  "type": "module",