@yimingliao/cms 0.0.55 → 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;
@@ -1242,6 +1283,10 @@ declare function createFileRestoreManyAction(ctx: ActionContext): ({ formData, }
1242
1283
  };
1243
1284
  }) => Promise<Result<void>>;
1244
1285
 
1286
+ declare function createFileSoftDeleteAction(ctx: ActionContext): ({ id }: {
1287
+ id: string;
1288
+ }) => Promise<Result<void>>;
1289
+
1245
1290
  declare function createFileSoftDeleteManyAction(ctx: ActionContext): ({ formData, }: {
1246
1291
  formData: {
1247
1292
  ids: string[];
@@ -1286,4 +1331,4 @@ declare class ServerError extends Error {
1286
1331
  static internalServerError(): ServerError;
1287
1332
  }
1288
1333
 
1289
- 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, 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(
@@ -3065,6 +3154,32 @@ function createFileRestoreManyAction(ctx) {
3065
3154
  };
3066
3155
  }
3067
3156
 
3157
+ // src/server/interfaces/actions/resources/file/commands/soft-delete/create-file-soft-delete-action.ts
3158
+ function createFileSoftDeleteAction(ctx) {
3159
+ const {
3160
+ repositories: { fileQueryRepository, fileCommandRepository },
3161
+ middlewares: { authMiddleware },
3162
+ action: { executeAction }
3163
+ } = ctx;
3164
+ return async function fileSoftDeleteAction({ id }) {
3165
+ return executeAction(
3166
+ async () => {
3167
+ await authMiddleware.authenticate();
3168
+ const foundFile = await fileQueryRepository.findFull({ id });
3169
+ if (!foundFile) throw ServerError.notFound();
3170
+ if (isFileLocked(foundFile)) {
3171
+ throw new ServerError({ i18nKey: "error.files-destroy-is-locked" });
3172
+ }
3173
+ await fileCommandRepository.softDelete({ id });
3174
+ return {
3175
+ i18nKey: "ok.destroy-ok"
3176
+ };
3177
+ },
3178
+ { type: "command" }
3179
+ );
3180
+ };
3181
+ }
3182
+
3068
3183
  // src/server/interfaces/actions/resources/file/commands/soft-delete-many/file-soft-delete-many-validator.ts
3069
3184
  var fileSoftDeleteManyValidator = (schemas) => schemas.z.object({
3070
3185
  ids: schemas.array(schemas.id().exist({ table: "files", column: "id" }))
@@ -3344,4 +3459,4 @@ function createForgotPasswordEmail({
3344
3459
  };
3345
3460
  }
3346
3461
 
3347
- 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, 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.55",
3
+ "version": "0.0.57",
4
4
  "author": "Yiming Liao",
5
5
  "license": "MIT",
6
6
  "type": "module",