@yimingliao/cms 0.0.56 → 0.0.57

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.
@@ -1153,13 +1153,54 @@ declare const fileCreateValidator: (schemas: ReturnType<typeof createSchemas>) =
1153
1153
  }[]>>;
1154
1154
  }, zod_v4_core.$strip>;
1155
1155
 
1156
- type FileCreateFormData = zod__default.infer<ReturnType<typeof fileCreateValidator>>;
1156
+ type FileCreateFormData = Omit<zod__default.infer<ReturnType<typeof fileCreateValidator>>, "folder"> & {
1157
+ folder: Folder | null;
1158
+ };
1157
1159
  declare function createFileCreateAction(ctx: ActionContext): ({ formData, }: {
1158
1160
  formData: FileCreateFormData;
1159
1161
  }) => Promise<Result<{
1160
1162
  file: FileFull;
1161
1163
  }>>;
1162
1164
 
1165
+ declare const fileUpdateValidator: (schemas: ReturnType<typeof createSchemas>) => zod.ZodObject<{
1166
+ key: zod.ZodOptional<zod.ZodString>;
1167
+ checksum: zod.ZodOptional<zod.ZodString>;
1168
+ fileMeta: zod.ZodObject<{
1169
+ type: zod.ZodString;
1170
+ size: zod.ZodPipe<zod.ZodTransform<number | undefined, unknown>, zod.ZodNumber>;
1171
+ name: zod.ZodString;
1172
+ }, zod_v4_core.$strip>;
1173
+ width: zod.ZodNullable<zod.ZodPipe<zod.ZodTransform<number | undefined, unknown>, zod.ZodNumber>>;
1174
+ height: zod.ZodNullable<zod.ZodPipe<zod.ZodTransform<number | undefined, unknown>, zod.ZodNumber>>;
1175
+ duration: zod.ZodNullable<zod.ZodPipe<zod.ZodTransform<number | undefined, unknown>, zod.ZodNumber>>;
1176
+ folder: zod.ZodOptional<zod.ZodNullable<zod.ZodObject<{
1177
+ id: zod.ZodString;
1178
+ }, zod_v4_core.$strip>>>;
1179
+ translations: zod.ZodPipe<zod.ZodArray<zod.ZodObject<{
1180
+ locale: zod.ZodString;
1181
+ name: zod.ZodNullable<zod.ZodString>;
1182
+ alt: zod.ZodNullable<zod.ZodString>;
1183
+ }, zod_v4_core.$strip>>, zod.ZodTransform<{
1184
+ locale: string;
1185
+ name: string | null;
1186
+ alt: string | null;
1187
+ }[], {
1188
+ locale: string;
1189
+ name: string | null;
1190
+ alt: string | null;
1191
+ }[]>>;
1192
+ }, zod_v4_core.$strip>;
1193
+
1194
+ type FileUpdateFormData = Omit<zod__default.infer<ReturnType<typeof fileUpdateValidator>>, "folder"> & {
1195
+ folder: Folder | null;
1196
+ };
1197
+ declare function createFileUpdateAction(ctx: ActionContext): ({ id, formData, }: {
1198
+ id: string;
1199
+ formData: FileUpdateFormData;
1200
+ }) => Promise<Result<{
1201
+ file: File$1;
1202
+ }>>;
1203
+
1163
1204
  declare const fileCreateManyValidator: (schemas: ReturnType<typeof createSchemas>) => zod.ZodObject<{
1164
1205
  uploadResults: zod.ZodPipe<zod.ZodArray<zod.ZodObject<{
1165
1206
  key: zod.ZodString;
@@ -1290,4 +1331,4 @@ declare class ServerError extends Error {
1290
1331
  static internalServerError(): ServerError;
1291
1332
  }
1292
1333
 
1293
- export { ADMIN_ORDER_BY, type ActionContext, type AdminCreateFormData, type AdminUpdateFormData, type ChangePasswordFormData, type EmailUnverifiedFormData, type FileCreateFormData, type FileCreateManyFormData, type ForgotPasswordFormData, ORDER_BY, POST_ORDER_BY, type RawCacheKey, type ResetPasswordFormData, ServerError, type SignInFormData, type VerifyEmailFormData, createAdminCommandRepository, createAdminCreateAction, createAdminDeleteAction, createAdminFindFullAction, createAdminFindListCardsAction, createAdminQueryRepository, createAdminRefreshTokenCommandRepository, createAdminRefreshTokenDeleteAction, createAdminRefreshTokenFindManyAction, createAdminRefreshTokenQueryRepository, createAdminUpdateAction, createArgon2Service, createAuthMiddleware, createAuthUseCases, createCache, createCacheResult, createChangePasswordAction, createCookieService, createCryptoService, createEmailUnverifiedAction, createEmailVerificationEmail, createExecuteAction, createExecuteApi, createExist, createFileCommandRepository, createFileCreateAction, createFileCreateManyAction, createFileFindFullAction, createFileFindListCardsAction, createFilePurgeManyAction, createFileQueryRepository, createFileRestoreManyAction, createFileSchema, createFileSoftDeleteAction, createFileSoftDeleteManyAction, createFolderCommandRepository, createFolderQueryRepository, createForgotPasswordAction, createForgotPasswordEmail, createIpRateLimiter, createJwtService, createMultiFileSchema, createPostCommandRepository, createPostQueryRepository, createRenderEmailTemplate, createResetPasswordAction, createSchemas, createSendEmail, createSeoMetadataCommandRepository, createSignInAction, createSignOutAction, createTocItemSchema, createTransporter, createUnique, createVerifyAccessToken, createVerifyAction, createVerifyEmailAction, createVerifyRefreshToken, createZod, normalizeCacheKey };
1334
+ export { ADMIN_ORDER_BY, type ActionContext, type AdminCreateFormData, type AdminUpdateFormData, type ChangePasswordFormData, type EmailUnverifiedFormData, type FileCreateFormData, type FileCreateManyFormData, type FileUpdateFormData, type ForgotPasswordFormData, ORDER_BY, POST_ORDER_BY, type RawCacheKey, type ResetPasswordFormData, ServerError, type SignInFormData, type VerifyEmailFormData, createAdminCommandRepository, createAdminCreateAction, createAdminDeleteAction, createAdminFindFullAction, createAdminFindListCardsAction, createAdminQueryRepository, createAdminRefreshTokenCommandRepository, createAdminRefreshTokenDeleteAction, createAdminRefreshTokenFindManyAction, createAdminRefreshTokenQueryRepository, createAdminUpdateAction, createArgon2Service, createAuthMiddleware, createAuthUseCases, createCache, createCacheResult, createChangePasswordAction, createCookieService, createCryptoService, createEmailUnverifiedAction, createEmailVerificationEmail, createExecuteAction, createExecuteApi, createExist, createFileCommandRepository, createFileCreateAction, createFileCreateManyAction, createFileFindFullAction, createFileFindListCardsAction, createFilePurgeManyAction, createFileQueryRepository, createFileRestoreManyAction, createFileSchema, createFileSoftDeleteAction, createFileSoftDeleteManyAction, createFileUpdateAction, createFolderCommandRepository, createFolderQueryRepository, createForgotPasswordAction, createForgotPasswordEmail, createIpRateLimiter, createJwtService, createMultiFileSchema, createPostCommandRepository, createPostQueryRepository, createRenderEmailTemplate, createResetPasswordAction, createSchemas, createSendEmail, createSeoMetadataCommandRepository, createSignInAction, createSignOutAction, createTocItemSchema, createTransporter, createUnique, createVerifyAccessToken, createVerifyAction, createVerifyEmailAction, createVerifyRefreshToken, createZod, normalizeCacheKey };
@@ -12,6 +12,7 @@ import { readFile } from 'fs/promises';
12
12
  import path from 'path';
13
13
  import { ulid } from 'ulid';
14
14
  import { NextResponse } from 'next/server';
15
+ import path2 from 'path/posix';
15
16
 
16
17
  function createJwtService({
17
18
  defaultSecret,
@@ -2772,6 +2773,94 @@ function createFileCreateAction(ctx) {
2772
2773
  };
2773
2774
  }
2774
2775
 
2776
+ // src/server/interfaces/actions/resources/file/commands/update/file-update-validator.ts
2777
+ var fileUpdateValidator = (schemas) => schemas.z.object({
2778
+ // core
2779
+ key: schemas.key().optional(),
2780
+ checksum: schemas.sha256Hash().optional(),
2781
+ // file meta
2782
+ fileMeta: schemas.z.object({
2783
+ type: schemas.text(),
2784
+ size: schemas.positiveNumber(),
2785
+ name: schemas.text()
2786
+ }),
2787
+ // media info
2788
+ width: schemas.positiveNumber().nullable(),
2789
+ height: schemas.positiveNumber().nullable(),
2790
+ duration: schemas.positiveNumber().nullable(),
2791
+ // ----------------------------------------------------------------------------
2792
+ // relations
2793
+ // ----------------------------------------------------------------------------
2794
+ folder: schemas.z.object({
2795
+ id: schemas.id().exist({ table: "folders", column: "id" })
2796
+ }).nullable().optional(),
2797
+ // ----------------------------------------------------------------------------
2798
+ // translation
2799
+ // ----------------------------------------------------------------------------
2800
+ translations: schemas.array(
2801
+ schemas.z.object({
2802
+ // core
2803
+ locale: schemas.locale(),
2804
+ // text
2805
+ name: schemas.text().nullable(),
2806
+ alt: schemas.text().nullable()
2807
+ })
2808
+ )
2809
+ });
2810
+ function createFileUpdateAction(ctx) {
2811
+ const {
2812
+ services: { storageService },
2813
+ repositories: { fileQueryRepository, fileCommandRepository },
2814
+ middlewares: { authMiddleware },
2815
+ action: { executeAction },
2816
+ schemas
2817
+ } = ctx;
2818
+ return async function fileUpdateAction({
2819
+ id,
2820
+ formData
2821
+ }) {
2822
+ return executeAction(
2823
+ async () => {
2824
+ await authMiddleware.authenticate();
2825
+ const { checksum, width, height, duration, translations } = await fileUpdateValidator(schemas).parseAsync(formData);
2826
+ const { folder, fileMeta, key: uploadedKey } = formData;
2827
+ const foundFile = await fileQueryRepository.findFull({ id });
2828
+ if (!foundFile) throw ServerError.notFound();
2829
+ const oldKey = foundFile.key;
2830
+ let newKey = oldKey;
2831
+ const folderChanged = folder?.key !== foundFile.folder?.key;
2832
+ if (uploadedKey) {
2833
+ newKey = uploadedKey;
2834
+ } else if (folderChanged) {
2835
+ const folderKey = folder?.key ?? "";
2836
+ newKey = path2.join(folderKey, path2.basename(oldKey));
2837
+ await storageService.move({ fromKey: oldKey, toKey: newKey });
2838
+ }
2839
+ const updatedFile = await fileCommandRepository.update({
2840
+ file: foundFile,
2841
+ id,
2842
+ key: newKey,
2843
+ checksum: checksum ?? foundFile.checksum,
2844
+ fileMeta,
2845
+ width,
2846
+ height,
2847
+ duration,
2848
+ folder,
2849
+ translations
2850
+ });
2851
+ if (uploadedKey) {
2852
+ await storageService.remove({ key: oldKey });
2853
+ }
2854
+ return {
2855
+ i18nKey: "ok.update-ok",
2856
+ data: { file: updatedFile }
2857
+ };
2858
+ },
2859
+ { type: "command" }
2860
+ );
2861
+ };
2862
+ }
2863
+
2775
2864
  // src/server/interfaces/actions/resources/file/commands/create-many/file-create-many-validator.ts
2776
2865
  var fileCreateManyValidator = (schemas) => schemas.z.object({
2777
2866
  uploadResults: schemas.array(
@@ -3370,4 +3459,4 @@ function createForgotPasswordEmail({
3370
3459
  };
3371
3460
  }
3372
3461
 
3373
- export { ADMIN_ORDER_BY, ORDER_BY, POST_ORDER_BY, ServerError, createAdminCommandRepository, createAdminCreateAction, createAdminDeleteAction, createAdminFindFullAction, createAdminFindListCardsAction, createAdminQueryRepository, createAdminRefreshTokenCommandRepository, createAdminRefreshTokenDeleteAction, createAdminRefreshTokenFindManyAction, createAdminRefreshTokenQueryRepository, createAdminUpdateAction, createArgon2Service, createAuthMiddleware, createAuthUseCases, createCache, createCacheResult, createChangePasswordAction, createCookieService, createCryptoService, createEmailUnverifiedAction, createEmailVerificationEmail, createExecuteAction, createExecuteApi, createExist, createFileCommandRepository, createFileCreateAction, createFileCreateManyAction, createFileFindFullAction, createFileFindListCardsAction, createFilePurgeManyAction, createFileQueryRepository, createFileRestoreManyAction, createFileSchema, createFileSoftDeleteAction, createFileSoftDeleteManyAction, createFolderCommandRepository, createFolderQueryRepository, createForgotPasswordAction, createForgotPasswordEmail, createIpRateLimiter, createJwtService, createMultiFileSchema, createPostCommandRepository, createPostQueryRepository, createRenderEmailTemplate, createResetPasswordAction, createSchemas, createSendEmail, createSeoMetadataCommandRepository, createSignInAction, createSignOutAction, createTocItemSchema, createTransporter, createUnique, createVerifyAccessToken, createVerifyAction, createVerifyEmailAction, createVerifyRefreshToken, createZod, normalizeCacheKey };
3462
+ export { ADMIN_ORDER_BY, ORDER_BY, POST_ORDER_BY, ServerError, createAdminCommandRepository, createAdminCreateAction, createAdminDeleteAction, createAdminFindFullAction, createAdminFindListCardsAction, createAdminQueryRepository, createAdminRefreshTokenCommandRepository, createAdminRefreshTokenDeleteAction, createAdminRefreshTokenFindManyAction, createAdminRefreshTokenQueryRepository, createAdminUpdateAction, createArgon2Service, createAuthMiddleware, createAuthUseCases, createCache, createCacheResult, createChangePasswordAction, createCookieService, createCryptoService, createEmailUnverifiedAction, createEmailVerificationEmail, createExecuteAction, createExecuteApi, createExist, createFileCommandRepository, createFileCreateAction, createFileCreateManyAction, createFileFindFullAction, createFileFindListCardsAction, createFilePurgeManyAction, createFileQueryRepository, createFileRestoreManyAction, createFileSchema, createFileSoftDeleteAction, createFileSoftDeleteManyAction, createFileUpdateAction, createFolderCommandRepository, createFolderQueryRepository, createForgotPasswordAction, createForgotPasswordEmail, createIpRateLimiter, createJwtService, createMultiFileSchema, createPostCommandRepository, createPostQueryRepository, createRenderEmailTemplate, createResetPasswordAction, createSchemas, createSendEmail, createSeoMetadataCommandRepository, createSignInAction, createSignOutAction, createTocItemSchema, createTransporter, createUnique, createVerifyAccessToken, createVerifyAction, createVerifyEmailAction, createVerifyRefreshToken, createZod, normalizeCacheKey };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yimingliao/cms",
3
- "version": "0.0.56",
3
+ "version": "0.0.57",
4
4
  "author": "Yiming Liao",
5
5
  "license": "MIT",
6
6
  "type": "module",