@plyaz/types 1.39.5 → 1.39.7

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.
@@ -81,19 +81,25 @@ var formCampaignSchema = /* @__PURE__ */ __name(({ maxFunding }) => zod.z.object
81
81
  youtubeHandle: zod.z.string().max(50, "components.CreateCampaign.Form.errors.youtubeMax" /* YoutubeMax */).regex(/^$|^@[a-zA-Z0-9][a-zA-Z0-9._-]{1,28}[a-zA-Z0-9]$/, "components.CreateCampaign.Form.errors.youtubeInvalid" /* YoutubeInvalid */).optional()
82
82
  }), "formCampaignSchema");
83
83
  var CreateCampaignSchema = zod.z.object({
84
+ // REQUIRED
84
85
  creator_id: zod.z.string().uuid(),
85
86
  title: zod.z.string().min(3).max(60),
86
87
  subtitle: zod.z.string().min(1).max(200),
87
88
  story: zod.z.string().min(10).max(1e3),
88
89
  funding_target: zod.z.number().positive(),
89
- duration: zod.z.number().min(7).max(365).optional(),
90
+ duration: zod.z.number().min(7).max(365),
91
+ start_date: zod.z.string(),
92
+ // ISO date string
93
+ campaign_images: zod.z.array(zod.z.string().uuid()).min(1),
94
+ campaign_videos: zod.z.array(zod.z.string().uuid()).min(1),
95
+ // OPTIONAL
90
96
  location_region: zod.z.string().max(100).optional(),
91
97
  location_city: zod.z.string().max(100).optional(),
92
98
  sport: zod.z.string().max(50).optional(),
93
99
  category: zod.z.string().max(50).optional(),
94
100
  tags: zod.z.array(zod.z.string()).optional(),
95
- campaign_images: zod.z.array(zod.z.string().uuid()).optional(),
96
- campaign_videos: zod.z.array(zod.z.string().uuid()).optional()
101
+ // OPTIONAL (DB default ACTIVE)
102
+ status: zod.z.enum(["DRAFT", "ACTIVE"]).optional()
97
103
  });
98
104
  var UpdateCampaignSchema = CreateCampaignSchema.extend({
99
105
  id: zod.z.string().uuid()
@@ -131,15 +137,15 @@ var CampaignResponseSchema = zod.z.object({
131
137
  story: zod.z.string(),
132
138
  funding_target: zod.z.number(),
133
139
  status: zod.z.nativeEnum(CAMPAIGN_STATUS),
134
- campaign_images: zod.z.array(zod.z.string()).optional(),
135
- start_date: zod.z.string().datetime().optional(),
136
- duration: zod.z.number().optional(),
140
+ campaign_images: zod.z.array(zod.z.string()),
141
+ start_date: zod.z.string().datetime(),
142
+ duration: zod.z.number(),
137
143
  location_region: zod.z.string().optional(),
138
144
  location_city: zod.z.string().optional(),
139
145
  sport: zod.z.string().optional(),
140
146
  category: zod.z.string().optional(),
141
147
  tags: zod.z.array(zod.z.string()).optional(),
142
- campaign_videos: zod.z.array(zod.z.string()).optional(),
148
+ campaign_videos: zod.z.array(zod.z.string()),
143
149
  first_contribution_at: zod.z.string().datetime().optional(),
144
150
  created_at: zod.z.string().datetime(),
145
151
  updated_at: zod.z.string().datetime(),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/campaign/enums.ts","../../src/campaign/schemas.ts"],"names":["CAMPAIGN_STATUS","MILESTONE_TRIGGER_TYPE","MILESTONE_STATUS","z"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Enum containing error message keys for campaign creation form validation.\n * Contains localized error message keys that map to translation strings.\n */\nexport enum CREATE_CAMPAIGN_ERRORS {\n /** Error when campaign title is required but not provided */\n TitleRequired = 'components.CreateCampaign.Form.errors.titleRequired',\n /** Error when campaign title exceeds maximum length */\n TitleMax = 'components.CreateCampaign.Form.errors.titleMax',\n /** Error when campaign subtitle is required but not provided */\n SubtitleRequired = 'components.CreateCampaign.Form.errors.subtitleRequired',\n /** Error when campaign subtitle exceeds maximum length */\n SubtitleMax = 'components.CreateCampaign.Form.errors.subtitleMax',\n /** Error when campaign image is required but not provided */\n CampaignImageRequired = 'components.CreateCampaign.Form.errors.campaignImageRequired',\n /** Error when start date is required but not provided */\n StartDateRequired = 'components.CreateCampaign.Form.errors.startDateRequired',\n /** Error when start date format is invalid */\n StartDateInvalid = 'components.CreateCampaign.Form.errors.startDateInvalid',\n /** Error when start date is not in the future */\n StartDateFuture = 'components.CreateCampaign.Form.errors.startDateFuture',\n /** Error when campaign duration is required but not selected */\n DurationRequired = 'components.CreateCampaign.Form.errors.durationRequired',\n /** Error when campaign story is required but not provided */\n StoryRequired = 'components.CreateCampaign.Form.errors.storyRequired',\n /** Error when campaign story exceeds maximum length */\n StoryMax = 'components.CreateCampaign.Form.errors.storyMax',\n /** Error when video URL is from an unsupported provider */\n VideoInvalidProvider = 'components.CreateCampaign.Form.errors.videoInvalidProvider',\n /** Error when funding target is required but not provided */\n FundingRequired = 'components.CreateCampaign.Form.errors.fundingRequired',\n /** Error when funding target is outside allowed range */\n FundingRange = 'components.CreateCampaign.Form.errors.fundingRange',\n /** Error when Instagram handle exceeds maximum length */\n InstagramMax = 'components.CreateCampaign.Form.errors.instagramMax',\n /** Error when Instagram handle format is invalid */\n InstagramInvalid = 'components.CreateCampaign.Form.errors.instagramInvalid',\n /** Error when TikTok handle exceeds maximum length */\n TiktokMax = 'components.CreateCampaign.Form.errors.tiktokMax',\n /** Error when TikTok handle format is invalid */\n TiktokInvalid = 'components.CreateCampaign.Form.errors.tiktokInvalid',\n /** Error when YouTube handle exceeds maximum length */\n YoutubeMax = 'components.CreateCampaign.Form.errors.youtubeMax',\n /** Error when YouTube handle format is invalid */\n YoutubeInvalid = 'components.CreateCampaign.Form.errors.youtubeInvalid',\n}\n\n/**\n * Type representing all possible error keys for campaign creation form validation\n */\nexport type CreateCampaignErrorKey = keyof typeof CREATE_CAMPAIGN_ERRORS;\n/**\n * Campaign status enum matching database schema\n */\nexport enum CAMPAIGN_STATUS {\n Draft = 'DRAFT',\n Pending = 'PENDING',\n Active = 'ACTIVE',\n Completed = 'COMPLETED',\n Closed = 'CLOSED',\n Cancelled = 'CANCELLED',\n Rejected = 'REJECTED',\n}\n\n/**\n * Milestone trigger types\n */\nexport enum MILESTONE_TRIGGER_TYPE {\n FundingPercentage = 'FUNDING_PERCENTAGE',\n FundingAmount = 'FUNDING_AMOUNT',\n BackerCount = 'BACKER_COUNT',\n TimeBased = 'TIME_BASED',\n Manual = 'MANUAL',\n}\n\n/**\n * Milestone status\n */\nexport enum MILESTONE_STATUS {\n Pending = 'PENDING',\n Achieved = 'ACHIEVED',\n Verified = 'VERIFIED',\n PayoutReady = 'PAYOUT_READY',\n Completed = 'COMPLETED',\n}\n","/* eslint-disable no-magic-numbers */\nimport { z } from 'zod';\n\nimport { CREATE_CAMPAIGN_ERRORS as ERR, CAMPAIGN_STATUS } from './enums';\n\n/**\n * Zod schema for campaign creation form validation.\n * Validates all required fields for creating a new campaign including:\n * - Basic info (title, subtitle, image)\n * - Timeline (start date, duration)\n * - Content (story, video highlight)\n * - Funding target\n * - Social media handles\n *\n * @param config - Configuration object\n * @param config.maxFunding - Maximum funding amount allowed for campaigns\n */\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type, @typescript-eslint/explicit-module-boundary-types\nexport const formCampaignSchema = ({ maxFunding }: { maxFunding: number }) =>\n z.object({\n title: z.string().min(1, ERR.TitleRequired).max(60, ERR.TitleMax),\n subtitle: z.string().min(1, ERR.SubtitleRequired).max(200, ERR.SubtitleMax),\n campaignImage: z.any().refine(val => val instanceof File, {\n message: ERR.CampaignImageRequired,\n }),\n startDate: z\n .date({\n error: ERR.StartDateRequired,\n })\n .refine(date => date instanceof Date && !isNaN(date.getTime()), {\n message: ERR.StartDateInvalid,\n })\n .refine(date => date >= new Date(), {\n message: ERR.StartDateFuture,\n }),\n duration: z\n .union([z.literal(30), z.literal(60), z.literal(90)])\n .nullable()\n .refine(val => val !== null, {\n message: ERR.DurationRequired,\n }),\n story: z.string().min(1, ERR.StoryRequired).max(10000, ERR.StoryMax),\n videoHighlight: z\n .string()\n .refine(\n url => {\n if (!url || url.trim() === '') return true;\n try {\n const urlObj = new URL(url);\n const hostname = urlObj.hostname.toLowerCase();\n return (\n hostname.includes('youtube.com') ||\n hostname.includes('youtu.be') ||\n hostname.includes('tiktok.com') ||\n hostname.includes('vimeo.com')\n );\n } catch {\n return false;\n }\n },\n {\n message: ERR.VideoInvalidProvider,\n }\n )\n .optional(),\n fundingTarget: z\n .string()\n .min(1, ERR.FundingRequired)\n .refine(\n val => {\n const num = Number.parseFloat(val ?? '');\n return !isNaN(num) && num > 0 && num <= maxFunding;\n },\n {\n message: ERR.FundingRange,\n }\n ),\n instagramHandle: z\n .string()\n .max(30, ERR.InstagramMax)\n .regex(/^$|^@?(?!.*\\.\\.)(?!.*\\.$)[a-zA-Z0-9._]{1,30}$/, ERR.InstagramInvalid)\n .optional(),\n tiktokHandle: z\n .string()\n .max(24, ERR.TiktokMax)\n .regex(/^$|^@?[a-zA-Z0-9][a-zA-Z0-9._]{1,23}$/, ERR.TiktokInvalid)\n .optional(),\n youtubeHandle: z\n .string()\n .max(50, ERR.YoutubeMax)\n .regex(/^$|^@[a-zA-Z0-9][a-zA-Z0-9._-]{1,28}[a-zA-Z0-9]$/, ERR.YoutubeInvalid)\n .optional(),\n });\n\n/**\n * Create campaign schema\n */\nexport const CreateCampaignSchema = z.object({\n creator_id: z.string().uuid(),\n title: z.string().min(3).max(60),\n subtitle: z.string().min(1).max(200),\n story: z.string().min(10).max(1000),\n funding_target: z.number().positive(),\n duration: z.number().min(7).max(365).optional(),\n location_region: z.string().max(100).optional(),\n location_city: z.string().max(100).optional(),\n sport: z.string().max(50).optional(),\n category: z.string().max(50).optional(),\n tags: z.array(z.string()).optional(),\n campaign_images: z.array(z.string().uuid()).optional(),\n campaign_videos: z.array(z.string().uuid()).optional(),\n});\n\n/**\n * Update campaign schema\n */\nexport const UpdateCampaignSchema = CreateCampaignSchema.extend({\n id: z.string().uuid(),\n});\n\n/**\n * Patch campaign schema\n */\nexport const PatchCampaignSchema = CreateCampaignSchema.partial().extend({\n id: z.string().uuid().optional(),\n});\n\n/**\n * Delete campaign schema\n */\nexport const DeleteCampaignSchema = z.object({\n // Soft delete flag\n soft: z.boolean().default(true),\n\n // Reason for audit\n reason: z.string().trim().optional(),\n});\n\n/**\n * Query campaign schema\n */\nexport const QueryCampaignSchema = z.object({\n // Pagination\n page: z.coerce.number().int().positive().default(1),\n limit: z.coerce.number().int().min(1).max(100).default(20),\n\n // Sorting\n sort_by: z.enum(['title', 'funding_target', 'created_at', 'updated_at']).default('created_at'),\n sort_order: z.enum(['asc', 'desc']).default('desc'),\n\n // Filters\n status: z.nativeEnum(CAMPAIGN_STATUS).optional(),\n creator_id: z.string().uuid().optional(),\n sport: z.string().optional(),\n category: z.string().optional(),\n location_region: z.string().optional(),\n\n // Search\n search: z.string().trim().optional(),\n});\n\n/**\n * Campaign response schema (API response shape - snake_case)\n */\nexport const CampaignResponseSchema = z.object({\n id: z.string().uuid(),\n creator_id: z.string().uuid(),\n title: z.string(),\n subtitle: z.string(),\n story: z.string(),\n funding_target: z.number(),\n status: z.nativeEnum(CAMPAIGN_STATUS),\n campaign_images: z.array(z.string()).optional(),\n start_date: z.string().datetime().optional(),\n duration: z.number().optional(),\n location_region: z.string().optional(),\n location_city: z.string().optional(),\n sport: z.string().optional(),\n category: z.string().optional(),\n tags: z.array(z.string()).optional(),\n campaign_videos: z.array(z.string()).optional(),\n first_contribution_at: z.string().datetime().optional(),\n created_at: z.string().datetime(),\n updated_at: z.string().datetime(),\n deleted_at: z.string().datetime().optional(),\n});\n\n/**\n * Campaign list response schema with pagination\n */\nexport const CampaignListResponseSchema = z.object({\n data: z.array(CampaignResponseSchema),\n meta: z.object({\n page: z.number(),\n limit: z.number(),\n total: z.number(),\n total_pages: z.number(),\n }),\n});\n\n/**\n * Type inferred from the campaign form schema for form validation\n */\nexport type FormCampaignData = z.infer<ReturnType<typeof formCampaignSchema>>;\n"]}
1
+ {"version":3,"sources":["../../src/campaign/enums.ts","../../src/campaign/schemas.ts"],"names":["CAMPAIGN_STATUS","MILESTONE_TRIGGER_TYPE","MILESTONE_STATUS","z"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Enum containing error message keys for campaign creation form validation.\n * Contains localized error message keys that map to translation strings.\n */\nexport enum CREATE_CAMPAIGN_ERRORS {\n /** Error when campaign title is required but not provided */\n TitleRequired = 'components.CreateCampaign.Form.errors.titleRequired',\n /** Error when campaign title exceeds maximum length */\n TitleMax = 'components.CreateCampaign.Form.errors.titleMax',\n /** Error when campaign subtitle is required but not provided */\n SubtitleRequired = 'components.CreateCampaign.Form.errors.subtitleRequired',\n /** Error when campaign subtitle exceeds maximum length */\n SubtitleMax = 'components.CreateCampaign.Form.errors.subtitleMax',\n /** Error when campaign image is required but not provided */\n CampaignImageRequired = 'components.CreateCampaign.Form.errors.campaignImageRequired',\n /** Error when start date is required but not provided */\n StartDateRequired = 'components.CreateCampaign.Form.errors.startDateRequired',\n /** Error when start date format is invalid */\n StartDateInvalid = 'components.CreateCampaign.Form.errors.startDateInvalid',\n /** Error when start date is not in the future */\n StartDateFuture = 'components.CreateCampaign.Form.errors.startDateFuture',\n /** Error when campaign duration is required but not selected */\n DurationRequired = 'components.CreateCampaign.Form.errors.durationRequired',\n /** Error when campaign story is required but not provided */\n StoryRequired = 'components.CreateCampaign.Form.errors.storyRequired',\n /** Error when campaign story exceeds maximum length */\n StoryMax = 'components.CreateCampaign.Form.errors.storyMax',\n /** Error when video URL is from an unsupported provider */\n VideoInvalidProvider = 'components.CreateCampaign.Form.errors.videoInvalidProvider',\n /** Error when funding target is required but not provided */\n FundingRequired = 'components.CreateCampaign.Form.errors.fundingRequired',\n /** Error when funding target is outside allowed range */\n FundingRange = 'components.CreateCampaign.Form.errors.fundingRange',\n /** Error when Instagram handle exceeds maximum length */\n InstagramMax = 'components.CreateCampaign.Form.errors.instagramMax',\n /** Error when Instagram handle format is invalid */\n InstagramInvalid = 'components.CreateCampaign.Form.errors.instagramInvalid',\n /** Error when TikTok handle exceeds maximum length */\n TiktokMax = 'components.CreateCampaign.Form.errors.tiktokMax',\n /** Error when TikTok handle format is invalid */\n TiktokInvalid = 'components.CreateCampaign.Form.errors.tiktokInvalid',\n /** Error when YouTube handle exceeds maximum length */\n YoutubeMax = 'components.CreateCampaign.Form.errors.youtubeMax',\n /** Error when YouTube handle format is invalid */\n YoutubeInvalid = 'components.CreateCampaign.Form.errors.youtubeInvalid',\n}\n\n/**\n * Type representing all possible error keys for campaign creation form validation\n */\nexport type CreateCampaignErrorKey = keyof typeof CREATE_CAMPAIGN_ERRORS;\n/**\n * Campaign status enum matching database schema\n */\nexport enum CAMPAIGN_STATUS {\n Draft = 'DRAFT',\n Pending = 'PENDING',\n Active = 'ACTIVE',\n Completed = 'COMPLETED',\n Closed = 'CLOSED',\n Cancelled = 'CANCELLED',\n Rejected = 'REJECTED',\n}\n\n/**\n * Milestone trigger types\n */\nexport enum MILESTONE_TRIGGER_TYPE {\n FundingPercentage = 'FUNDING_PERCENTAGE',\n FundingAmount = 'FUNDING_AMOUNT',\n BackerCount = 'BACKER_COUNT',\n TimeBased = 'TIME_BASED',\n Manual = 'MANUAL',\n}\n\n/**\n * Milestone status\n */\nexport enum MILESTONE_STATUS {\n Pending = 'PENDING',\n Achieved = 'ACHIEVED',\n Verified = 'VERIFIED',\n PayoutReady = 'PAYOUT_READY',\n Completed = 'COMPLETED',\n}\n","/* eslint-disable no-magic-numbers */\nimport { z } from 'zod';\n\nimport { CREATE_CAMPAIGN_ERRORS as ERR, CAMPAIGN_STATUS } from './enums';\n\n/**\n * Zod schema for campaign creation form validation.\n * Validates all required fields for creating a new campaign including:\n * - Basic info (title, subtitle, image)\n * - Timeline (start date, duration)\n * - Content (story, video highlight)\n * - Funding target\n * - Social media handles\n *\n * @param config - Configuration object\n * @param config.maxFunding - Maximum funding amount allowed for campaigns\n */\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type, @typescript-eslint/explicit-module-boundary-types\nexport const formCampaignSchema = ({ maxFunding }: { maxFunding: number }) =>\n z.object({\n title: z.string().min(1, ERR.TitleRequired).max(60, ERR.TitleMax),\n subtitle: z.string().min(1, ERR.SubtitleRequired).max(200, ERR.SubtitleMax),\n campaignImage: z.any().refine(val => val instanceof File, {\n message: ERR.CampaignImageRequired,\n }),\n startDate: z\n .date({\n error: ERR.StartDateRequired,\n })\n .refine(date => date instanceof Date && !isNaN(date.getTime()), {\n message: ERR.StartDateInvalid,\n })\n .refine(date => date >= new Date(), {\n message: ERR.StartDateFuture,\n }),\n duration: z\n .union([z.literal(30), z.literal(60), z.literal(90)])\n .nullable()\n .refine(val => val !== null, {\n message: ERR.DurationRequired,\n }),\n story: z.string().min(1, ERR.StoryRequired).max(10000, ERR.StoryMax),\n videoHighlight: z\n .string()\n .refine(\n url => {\n if (!url || url.trim() === '') return true;\n try {\n const urlObj = new URL(url);\n const hostname = urlObj.hostname.toLowerCase();\n return (\n hostname.includes('youtube.com') ||\n hostname.includes('youtu.be') ||\n hostname.includes('tiktok.com') ||\n hostname.includes('vimeo.com')\n );\n } catch {\n return false;\n }\n },\n {\n message: ERR.VideoInvalidProvider,\n }\n )\n .optional(),\n fundingTarget: z\n .string()\n .min(1, ERR.FundingRequired)\n .refine(\n val => {\n const num = Number.parseFloat(val ?? '');\n return !isNaN(num) && num > 0 && num <= maxFunding;\n },\n {\n message: ERR.FundingRange,\n }\n ),\n instagramHandle: z\n .string()\n .max(30, ERR.InstagramMax)\n .regex(/^$|^@?(?!.*\\.\\.)(?!.*\\.$)[a-zA-Z0-9._]{1,30}$/, ERR.InstagramInvalid)\n .optional(),\n tiktokHandle: z\n .string()\n .max(24, ERR.TiktokMax)\n .regex(/^$|^@?[a-zA-Z0-9][a-zA-Z0-9._]{1,23}$/, ERR.TiktokInvalid)\n .optional(),\n youtubeHandle: z\n .string()\n .max(50, ERR.YoutubeMax)\n .regex(/^$|^@[a-zA-Z0-9][a-zA-Z0-9._-]{1,28}[a-zA-Z0-9]$/, ERR.YoutubeInvalid)\n .optional(),\n });\n\n/**\n * Create campaign schema\n */\nexport const CreateCampaignSchema = z.object({\n // REQUIRED\n creator_id: z.string().uuid(),\n title: z.string().min(3).max(60),\n subtitle: z.string().min(1).max(200),\n story: z.string().min(10).max(1000),\n funding_target: z.number().positive(),\n duration: z.number().min(7).max(365),\n start_date: z.string(), // ISO date string\n campaign_images: z.array(z.string().uuid()).min(1),\n campaign_videos: z.array(z.string().uuid()).min(1),\n // OPTIONAL\n location_region: z.string().max(100).optional(),\n location_city: z.string().max(100).optional(),\n sport: z.string().max(50).optional(),\n category: z.string().max(50).optional(),\n tags: z.array(z.string()).optional(),\n // OPTIONAL (DB default ACTIVE)\n status: z.enum(['DRAFT', 'ACTIVE']).optional(),\n});\n\n/**\n * Update campaign schema\n */\nexport const UpdateCampaignSchema = CreateCampaignSchema.extend({\n id: z.string().uuid(),\n});\n\n/**\n * Patch campaign schema\n */\nexport const PatchCampaignSchema = CreateCampaignSchema.partial().extend({\n id: z.string().uuid().optional(),\n});\n\n/**\n * Delete campaign schema\n */\nexport const DeleteCampaignSchema = z.object({\n // Soft delete flag\n soft: z.boolean().default(true),\n\n // Reason for audit\n reason: z.string().trim().optional(),\n});\n\n/**\n * Query campaign schema\n */\nexport const QueryCampaignSchema = z.object({\n // Pagination\n page: z.coerce.number().int().positive().default(1),\n limit: z.coerce.number().int().min(1).max(100).default(20),\n\n // Sorting\n sort_by: z.enum(['title', 'funding_target', 'created_at', 'updated_at']).default('created_at'),\n sort_order: z.enum(['asc', 'desc']).default('desc'),\n\n // Filters\n status: z.nativeEnum(CAMPAIGN_STATUS).optional(),\n creator_id: z.string().uuid().optional(),\n sport: z.string().optional(),\n category: z.string().optional(),\n location_region: z.string().optional(),\n\n // Search\n search: z.string().trim().optional(),\n});\n\n/**\n * Campaign response schema (API response shape - snake_case)\n */\nexport const CampaignResponseSchema = z.object({\n id: z.string().uuid(),\n creator_id: z.string().uuid(),\n title: z.string(),\n subtitle: z.string(),\n story: z.string(),\n funding_target: z.number(),\n status: z.nativeEnum(CAMPAIGN_STATUS),\n campaign_images: z.array(z.string()),\n start_date: z.string().datetime(),\n duration: z.number(),\n location_region: z.string().optional(),\n location_city: z.string().optional(),\n sport: z.string().optional(),\n category: z.string().optional(),\n tags: z.array(z.string()).optional(),\n campaign_videos: z.array(z.string()),\n first_contribution_at: z.string().datetime().optional(),\n created_at: z.string().datetime(),\n updated_at: z.string().datetime(),\n deleted_at: z.string().datetime().optional(),\n});\n\n/**\n * Campaign list response schema with pagination\n */\nexport const CampaignListResponseSchema = z.object({\n data: z.array(CampaignResponseSchema),\n meta: z.object({\n page: z.number(),\n limit: z.number(),\n total: z.number(),\n total_pages: z.number(),\n }),\n});\n\n/**\n * Type inferred from the campaign form schema for form validation\n */\nexport type FormCampaignData = z.infer<ReturnType<typeof formCampaignSchema>>;"]}
@@ -79,19 +79,25 @@ var formCampaignSchema = /* @__PURE__ */ __name(({ maxFunding }) => z.object({
79
79
  youtubeHandle: z.string().max(50, "components.CreateCampaign.Form.errors.youtubeMax" /* YoutubeMax */).regex(/^$|^@[a-zA-Z0-9][a-zA-Z0-9._-]{1,28}[a-zA-Z0-9]$/, "components.CreateCampaign.Form.errors.youtubeInvalid" /* YoutubeInvalid */).optional()
80
80
  }), "formCampaignSchema");
81
81
  var CreateCampaignSchema = z.object({
82
+ // REQUIRED
82
83
  creator_id: z.string().uuid(),
83
84
  title: z.string().min(3).max(60),
84
85
  subtitle: z.string().min(1).max(200),
85
86
  story: z.string().min(10).max(1e3),
86
87
  funding_target: z.number().positive(),
87
- duration: z.number().min(7).max(365).optional(),
88
+ duration: z.number().min(7).max(365),
89
+ start_date: z.string(),
90
+ // ISO date string
91
+ campaign_images: z.array(z.string().uuid()).min(1),
92
+ campaign_videos: z.array(z.string().uuid()).min(1),
93
+ // OPTIONAL
88
94
  location_region: z.string().max(100).optional(),
89
95
  location_city: z.string().max(100).optional(),
90
96
  sport: z.string().max(50).optional(),
91
97
  category: z.string().max(50).optional(),
92
98
  tags: z.array(z.string()).optional(),
93
- campaign_images: z.array(z.string().uuid()).optional(),
94
- campaign_videos: z.array(z.string().uuid()).optional()
99
+ // OPTIONAL (DB default ACTIVE)
100
+ status: z.enum(["DRAFT", "ACTIVE"]).optional()
95
101
  });
96
102
  var UpdateCampaignSchema = CreateCampaignSchema.extend({
97
103
  id: z.string().uuid()
@@ -129,15 +135,15 @@ var CampaignResponseSchema = z.object({
129
135
  story: z.string(),
130
136
  funding_target: z.number(),
131
137
  status: z.nativeEnum(CAMPAIGN_STATUS),
132
- campaign_images: z.array(z.string()).optional(),
133
- start_date: z.string().datetime().optional(),
134
- duration: z.number().optional(),
138
+ campaign_images: z.array(z.string()),
139
+ start_date: z.string().datetime(),
140
+ duration: z.number(),
135
141
  location_region: z.string().optional(),
136
142
  location_city: z.string().optional(),
137
143
  sport: z.string().optional(),
138
144
  category: z.string().optional(),
139
145
  tags: z.array(z.string()).optional(),
140
- campaign_videos: z.array(z.string()).optional(),
146
+ campaign_videos: z.array(z.string()),
141
147
  first_contribution_at: z.string().datetime().optional(),
142
148
  created_at: z.string().datetime(),
143
149
  updated_at: z.string().datetime(),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/campaign/enums.ts","../../src/campaign/schemas.ts"],"names":["CAMPAIGN_STATUS","MILESTONE_TRIGGER_TYPE","MILESTONE_STATUS"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Enum containing error message keys for campaign creation form validation.\n * Contains localized error message keys that map to translation strings.\n */\nexport enum CREATE_CAMPAIGN_ERRORS {\n /** Error when campaign title is required but not provided */\n TitleRequired = 'components.CreateCampaign.Form.errors.titleRequired',\n /** Error when campaign title exceeds maximum length */\n TitleMax = 'components.CreateCampaign.Form.errors.titleMax',\n /** Error when campaign subtitle is required but not provided */\n SubtitleRequired = 'components.CreateCampaign.Form.errors.subtitleRequired',\n /** Error when campaign subtitle exceeds maximum length */\n SubtitleMax = 'components.CreateCampaign.Form.errors.subtitleMax',\n /** Error when campaign image is required but not provided */\n CampaignImageRequired = 'components.CreateCampaign.Form.errors.campaignImageRequired',\n /** Error when start date is required but not provided */\n StartDateRequired = 'components.CreateCampaign.Form.errors.startDateRequired',\n /** Error when start date format is invalid */\n StartDateInvalid = 'components.CreateCampaign.Form.errors.startDateInvalid',\n /** Error when start date is not in the future */\n StartDateFuture = 'components.CreateCampaign.Form.errors.startDateFuture',\n /** Error when campaign duration is required but not selected */\n DurationRequired = 'components.CreateCampaign.Form.errors.durationRequired',\n /** Error when campaign story is required but not provided */\n StoryRequired = 'components.CreateCampaign.Form.errors.storyRequired',\n /** Error when campaign story exceeds maximum length */\n StoryMax = 'components.CreateCampaign.Form.errors.storyMax',\n /** Error when video URL is from an unsupported provider */\n VideoInvalidProvider = 'components.CreateCampaign.Form.errors.videoInvalidProvider',\n /** Error when funding target is required but not provided */\n FundingRequired = 'components.CreateCampaign.Form.errors.fundingRequired',\n /** Error when funding target is outside allowed range */\n FundingRange = 'components.CreateCampaign.Form.errors.fundingRange',\n /** Error when Instagram handle exceeds maximum length */\n InstagramMax = 'components.CreateCampaign.Form.errors.instagramMax',\n /** Error when Instagram handle format is invalid */\n InstagramInvalid = 'components.CreateCampaign.Form.errors.instagramInvalid',\n /** Error when TikTok handle exceeds maximum length */\n TiktokMax = 'components.CreateCampaign.Form.errors.tiktokMax',\n /** Error when TikTok handle format is invalid */\n TiktokInvalid = 'components.CreateCampaign.Form.errors.tiktokInvalid',\n /** Error when YouTube handle exceeds maximum length */\n YoutubeMax = 'components.CreateCampaign.Form.errors.youtubeMax',\n /** Error when YouTube handle format is invalid */\n YoutubeInvalid = 'components.CreateCampaign.Form.errors.youtubeInvalid',\n}\n\n/**\n * Type representing all possible error keys for campaign creation form validation\n */\nexport type CreateCampaignErrorKey = keyof typeof CREATE_CAMPAIGN_ERRORS;\n/**\n * Campaign status enum matching database schema\n */\nexport enum CAMPAIGN_STATUS {\n Draft = 'DRAFT',\n Pending = 'PENDING',\n Active = 'ACTIVE',\n Completed = 'COMPLETED',\n Closed = 'CLOSED',\n Cancelled = 'CANCELLED',\n Rejected = 'REJECTED',\n}\n\n/**\n * Milestone trigger types\n */\nexport enum MILESTONE_TRIGGER_TYPE {\n FundingPercentage = 'FUNDING_PERCENTAGE',\n FundingAmount = 'FUNDING_AMOUNT',\n BackerCount = 'BACKER_COUNT',\n TimeBased = 'TIME_BASED',\n Manual = 'MANUAL',\n}\n\n/**\n * Milestone status\n */\nexport enum MILESTONE_STATUS {\n Pending = 'PENDING',\n Achieved = 'ACHIEVED',\n Verified = 'VERIFIED',\n PayoutReady = 'PAYOUT_READY',\n Completed = 'COMPLETED',\n}\n","/* eslint-disable no-magic-numbers */\nimport { z } from 'zod';\n\nimport { CREATE_CAMPAIGN_ERRORS as ERR, CAMPAIGN_STATUS } from './enums';\n\n/**\n * Zod schema for campaign creation form validation.\n * Validates all required fields for creating a new campaign including:\n * - Basic info (title, subtitle, image)\n * - Timeline (start date, duration)\n * - Content (story, video highlight)\n * - Funding target\n * - Social media handles\n *\n * @param config - Configuration object\n * @param config.maxFunding - Maximum funding amount allowed for campaigns\n */\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type, @typescript-eslint/explicit-module-boundary-types\nexport const formCampaignSchema = ({ maxFunding }: { maxFunding: number }) =>\n z.object({\n title: z.string().min(1, ERR.TitleRequired).max(60, ERR.TitleMax),\n subtitle: z.string().min(1, ERR.SubtitleRequired).max(200, ERR.SubtitleMax),\n campaignImage: z.any().refine(val => val instanceof File, {\n message: ERR.CampaignImageRequired,\n }),\n startDate: z\n .date({\n error: ERR.StartDateRequired,\n })\n .refine(date => date instanceof Date && !isNaN(date.getTime()), {\n message: ERR.StartDateInvalid,\n })\n .refine(date => date >= new Date(), {\n message: ERR.StartDateFuture,\n }),\n duration: z\n .union([z.literal(30), z.literal(60), z.literal(90)])\n .nullable()\n .refine(val => val !== null, {\n message: ERR.DurationRequired,\n }),\n story: z.string().min(1, ERR.StoryRequired).max(10000, ERR.StoryMax),\n videoHighlight: z\n .string()\n .refine(\n url => {\n if (!url || url.trim() === '') return true;\n try {\n const urlObj = new URL(url);\n const hostname = urlObj.hostname.toLowerCase();\n return (\n hostname.includes('youtube.com') ||\n hostname.includes('youtu.be') ||\n hostname.includes('tiktok.com') ||\n hostname.includes('vimeo.com')\n );\n } catch {\n return false;\n }\n },\n {\n message: ERR.VideoInvalidProvider,\n }\n )\n .optional(),\n fundingTarget: z\n .string()\n .min(1, ERR.FundingRequired)\n .refine(\n val => {\n const num = Number.parseFloat(val ?? '');\n return !isNaN(num) && num > 0 && num <= maxFunding;\n },\n {\n message: ERR.FundingRange,\n }\n ),\n instagramHandle: z\n .string()\n .max(30, ERR.InstagramMax)\n .regex(/^$|^@?(?!.*\\.\\.)(?!.*\\.$)[a-zA-Z0-9._]{1,30}$/, ERR.InstagramInvalid)\n .optional(),\n tiktokHandle: z\n .string()\n .max(24, ERR.TiktokMax)\n .regex(/^$|^@?[a-zA-Z0-9][a-zA-Z0-9._]{1,23}$/, ERR.TiktokInvalid)\n .optional(),\n youtubeHandle: z\n .string()\n .max(50, ERR.YoutubeMax)\n .regex(/^$|^@[a-zA-Z0-9][a-zA-Z0-9._-]{1,28}[a-zA-Z0-9]$/, ERR.YoutubeInvalid)\n .optional(),\n });\n\n/**\n * Create campaign schema\n */\nexport const CreateCampaignSchema = z.object({\n creator_id: z.string().uuid(),\n title: z.string().min(3).max(60),\n subtitle: z.string().min(1).max(200),\n story: z.string().min(10).max(1000),\n funding_target: z.number().positive(),\n duration: z.number().min(7).max(365).optional(),\n location_region: z.string().max(100).optional(),\n location_city: z.string().max(100).optional(),\n sport: z.string().max(50).optional(),\n category: z.string().max(50).optional(),\n tags: z.array(z.string()).optional(),\n campaign_images: z.array(z.string().uuid()).optional(),\n campaign_videos: z.array(z.string().uuid()).optional(),\n});\n\n/**\n * Update campaign schema\n */\nexport const UpdateCampaignSchema = CreateCampaignSchema.extend({\n id: z.string().uuid(),\n});\n\n/**\n * Patch campaign schema\n */\nexport const PatchCampaignSchema = CreateCampaignSchema.partial().extend({\n id: z.string().uuid().optional(),\n});\n\n/**\n * Delete campaign schema\n */\nexport const DeleteCampaignSchema = z.object({\n // Soft delete flag\n soft: z.boolean().default(true),\n\n // Reason for audit\n reason: z.string().trim().optional(),\n});\n\n/**\n * Query campaign schema\n */\nexport const QueryCampaignSchema = z.object({\n // Pagination\n page: z.coerce.number().int().positive().default(1),\n limit: z.coerce.number().int().min(1).max(100).default(20),\n\n // Sorting\n sort_by: z.enum(['title', 'funding_target', 'created_at', 'updated_at']).default('created_at'),\n sort_order: z.enum(['asc', 'desc']).default('desc'),\n\n // Filters\n status: z.nativeEnum(CAMPAIGN_STATUS).optional(),\n creator_id: z.string().uuid().optional(),\n sport: z.string().optional(),\n category: z.string().optional(),\n location_region: z.string().optional(),\n\n // Search\n search: z.string().trim().optional(),\n});\n\n/**\n * Campaign response schema (API response shape - snake_case)\n */\nexport const CampaignResponseSchema = z.object({\n id: z.string().uuid(),\n creator_id: z.string().uuid(),\n title: z.string(),\n subtitle: z.string(),\n story: z.string(),\n funding_target: z.number(),\n status: z.nativeEnum(CAMPAIGN_STATUS),\n campaign_images: z.array(z.string()).optional(),\n start_date: z.string().datetime().optional(),\n duration: z.number().optional(),\n location_region: z.string().optional(),\n location_city: z.string().optional(),\n sport: z.string().optional(),\n category: z.string().optional(),\n tags: z.array(z.string()).optional(),\n campaign_videos: z.array(z.string()).optional(),\n first_contribution_at: z.string().datetime().optional(),\n created_at: z.string().datetime(),\n updated_at: z.string().datetime(),\n deleted_at: z.string().datetime().optional(),\n});\n\n/**\n * Campaign list response schema with pagination\n */\nexport const CampaignListResponseSchema = z.object({\n data: z.array(CampaignResponseSchema),\n meta: z.object({\n page: z.number(),\n limit: z.number(),\n total: z.number(),\n total_pages: z.number(),\n }),\n});\n\n/**\n * Type inferred from the campaign form schema for form validation\n */\nexport type FormCampaignData = z.infer<ReturnType<typeof formCampaignSchema>>;\n"]}
1
+ {"version":3,"sources":["../../src/campaign/enums.ts","../../src/campaign/schemas.ts"],"names":["CAMPAIGN_STATUS","MILESTONE_TRIGGER_TYPE","MILESTONE_STATUS"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Enum containing error message keys for campaign creation form validation.\n * Contains localized error message keys that map to translation strings.\n */\nexport enum CREATE_CAMPAIGN_ERRORS {\n /** Error when campaign title is required but not provided */\n TitleRequired = 'components.CreateCampaign.Form.errors.titleRequired',\n /** Error when campaign title exceeds maximum length */\n TitleMax = 'components.CreateCampaign.Form.errors.titleMax',\n /** Error when campaign subtitle is required but not provided */\n SubtitleRequired = 'components.CreateCampaign.Form.errors.subtitleRequired',\n /** Error when campaign subtitle exceeds maximum length */\n SubtitleMax = 'components.CreateCampaign.Form.errors.subtitleMax',\n /** Error when campaign image is required but not provided */\n CampaignImageRequired = 'components.CreateCampaign.Form.errors.campaignImageRequired',\n /** Error when start date is required but not provided */\n StartDateRequired = 'components.CreateCampaign.Form.errors.startDateRequired',\n /** Error when start date format is invalid */\n StartDateInvalid = 'components.CreateCampaign.Form.errors.startDateInvalid',\n /** Error when start date is not in the future */\n StartDateFuture = 'components.CreateCampaign.Form.errors.startDateFuture',\n /** Error when campaign duration is required but not selected */\n DurationRequired = 'components.CreateCampaign.Form.errors.durationRequired',\n /** Error when campaign story is required but not provided */\n StoryRequired = 'components.CreateCampaign.Form.errors.storyRequired',\n /** Error when campaign story exceeds maximum length */\n StoryMax = 'components.CreateCampaign.Form.errors.storyMax',\n /** Error when video URL is from an unsupported provider */\n VideoInvalidProvider = 'components.CreateCampaign.Form.errors.videoInvalidProvider',\n /** Error when funding target is required but not provided */\n FundingRequired = 'components.CreateCampaign.Form.errors.fundingRequired',\n /** Error when funding target is outside allowed range */\n FundingRange = 'components.CreateCampaign.Form.errors.fundingRange',\n /** Error when Instagram handle exceeds maximum length */\n InstagramMax = 'components.CreateCampaign.Form.errors.instagramMax',\n /** Error when Instagram handle format is invalid */\n InstagramInvalid = 'components.CreateCampaign.Form.errors.instagramInvalid',\n /** Error when TikTok handle exceeds maximum length */\n TiktokMax = 'components.CreateCampaign.Form.errors.tiktokMax',\n /** Error when TikTok handle format is invalid */\n TiktokInvalid = 'components.CreateCampaign.Form.errors.tiktokInvalid',\n /** Error when YouTube handle exceeds maximum length */\n YoutubeMax = 'components.CreateCampaign.Form.errors.youtubeMax',\n /** Error when YouTube handle format is invalid */\n YoutubeInvalid = 'components.CreateCampaign.Form.errors.youtubeInvalid',\n}\n\n/**\n * Type representing all possible error keys for campaign creation form validation\n */\nexport type CreateCampaignErrorKey = keyof typeof CREATE_CAMPAIGN_ERRORS;\n/**\n * Campaign status enum matching database schema\n */\nexport enum CAMPAIGN_STATUS {\n Draft = 'DRAFT',\n Pending = 'PENDING',\n Active = 'ACTIVE',\n Completed = 'COMPLETED',\n Closed = 'CLOSED',\n Cancelled = 'CANCELLED',\n Rejected = 'REJECTED',\n}\n\n/**\n * Milestone trigger types\n */\nexport enum MILESTONE_TRIGGER_TYPE {\n FundingPercentage = 'FUNDING_PERCENTAGE',\n FundingAmount = 'FUNDING_AMOUNT',\n BackerCount = 'BACKER_COUNT',\n TimeBased = 'TIME_BASED',\n Manual = 'MANUAL',\n}\n\n/**\n * Milestone status\n */\nexport enum MILESTONE_STATUS {\n Pending = 'PENDING',\n Achieved = 'ACHIEVED',\n Verified = 'VERIFIED',\n PayoutReady = 'PAYOUT_READY',\n Completed = 'COMPLETED',\n}\n","/* eslint-disable no-magic-numbers */\nimport { z } from 'zod';\n\nimport { CREATE_CAMPAIGN_ERRORS as ERR, CAMPAIGN_STATUS } from './enums';\n\n/**\n * Zod schema for campaign creation form validation.\n * Validates all required fields for creating a new campaign including:\n * - Basic info (title, subtitle, image)\n * - Timeline (start date, duration)\n * - Content (story, video highlight)\n * - Funding target\n * - Social media handles\n *\n * @param config - Configuration object\n * @param config.maxFunding - Maximum funding amount allowed for campaigns\n */\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type, @typescript-eslint/explicit-module-boundary-types\nexport const formCampaignSchema = ({ maxFunding }: { maxFunding: number }) =>\n z.object({\n title: z.string().min(1, ERR.TitleRequired).max(60, ERR.TitleMax),\n subtitle: z.string().min(1, ERR.SubtitleRequired).max(200, ERR.SubtitleMax),\n campaignImage: z.any().refine(val => val instanceof File, {\n message: ERR.CampaignImageRequired,\n }),\n startDate: z\n .date({\n error: ERR.StartDateRequired,\n })\n .refine(date => date instanceof Date && !isNaN(date.getTime()), {\n message: ERR.StartDateInvalid,\n })\n .refine(date => date >= new Date(), {\n message: ERR.StartDateFuture,\n }),\n duration: z\n .union([z.literal(30), z.literal(60), z.literal(90)])\n .nullable()\n .refine(val => val !== null, {\n message: ERR.DurationRequired,\n }),\n story: z.string().min(1, ERR.StoryRequired).max(10000, ERR.StoryMax),\n videoHighlight: z\n .string()\n .refine(\n url => {\n if (!url || url.trim() === '') return true;\n try {\n const urlObj = new URL(url);\n const hostname = urlObj.hostname.toLowerCase();\n return (\n hostname.includes('youtube.com') ||\n hostname.includes('youtu.be') ||\n hostname.includes('tiktok.com') ||\n hostname.includes('vimeo.com')\n );\n } catch {\n return false;\n }\n },\n {\n message: ERR.VideoInvalidProvider,\n }\n )\n .optional(),\n fundingTarget: z\n .string()\n .min(1, ERR.FundingRequired)\n .refine(\n val => {\n const num = Number.parseFloat(val ?? '');\n return !isNaN(num) && num > 0 && num <= maxFunding;\n },\n {\n message: ERR.FundingRange,\n }\n ),\n instagramHandle: z\n .string()\n .max(30, ERR.InstagramMax)\n .regex(/^$|^@?(?!.*\\.\\.)(?!.*\\.$)[a-zA-Z0-9._]{1,30}$/, ERR.InstagramInvalid)\n .optional(),\n tiktokHandle: z\n .string()\n .max(24, ERR.TiktokMax)\n .regex(/^$|^@?[a-zA-Z0-9][a-zA-Z0-9._]{1,23}$/, ERR.TiktokInvalid)\n .optional(),\n youtubeHandle: z\n .string()\n .max(50, ERR.YoutubeMax)\n .regex(/^$|^@[a-zA-Z0-9][a-zA-Z0-9._-]{1,28}[a-zA-Z0-9]$/, ERR.YoutubeInvalid)\n .optional(),\n });\n\n/**\n * Create campaign schema\n */\nexport const CreateCampaignSchema = z.object({\n // REQUIRED\n creator_id: z.string().uuid(),\n title: z.string().min(3).max(60),\n subtitle: z.string().min(1).max(200),\n story: z.string().min(10).max(1000),\n funding_target: z.number().positive(),\n duration: z.number().min(7).max(365),\n start_date: z.string(), // ISO date string\n campaign_images: z.array(z.string().uuid()).min(1),\n campaign_videos: z.array(z.string().uuid()).min(1),\n // OPTIONAL\n location_region: z.string().max(100).optional(),\n location_city: z.string().max(100).optional(),\n sport: z.string().max(50).optional(),\n category: z.string().max(50).optional(),\n tags: z.array(z.string()).optional(),\n // OPTIONAL (DB default ACTIVE)\n status: z.enum(['DRAFT', 'ACTIVE']).optional(),\n});\n\n/**\n * Update campaign schema\n */\nexport const UpdateCampaignSchema = CreateCampaignSchema.extend({\n id: z.string().uuid(),\n});\n\n/**\n * Patch campaign schema\n */\nexport const PatchCampaignSchema = CreateCampaignSchema.partial().extend({\n id: z.string().uuid().optional(),\n});\n\n/**\n * Delete campaign schema\n */\nexport const DeleteCampaignSchema = z.object({\n // Soft delete flag\n soft: z.boolean().default(true),\n\n // Reason for audit\n reason: z.string().trim().optional(),\n});\n\n/**\n * Query campaign schema\n */\nexport const QueryCampaignSchema = z.object({\n // Pagination\n page: z.coerce.number().int().positive().default(1),\n limit: z.coerce.number().int().min(1).max(100).default(20),\n\n // Sorting\n sort_by: z.enum(['title', 'funding_target', 'created_at', 'updated_at']).default('created_at'),\n sort_order: z.enum(['asc', 'desc']).default('desc'),\n\n // Filters\n status: z.nativeEnum(CAMPAIGN_STATUS).optional(),\n creator_id: z.string().uuid().optional(),\n sport: z.string().optional(),\n category: z.string().optional(),\n location_region: z.string().optional(),\n\n // Search\n search: z.string().trim().optional(),\n});\n\n/**\n * Campaign response schema (API response shape - snake_case)\n */\nexport const CampaignResponseSchema = z.object({\n id: z.string().uuid(),\n creator_id: z.string().uuid(),\n title: z.string(),\n subtitle: z.string(),\n story: z.string(),\n funding_target: z.number(),\n status: z.nativeEnum(CAMPAIGN_STATUS),\n campaign_images: z.array(z.string()),\n start_date: z.string().datetime(),\n duration: z.number(),\n location_region: z.string().optional(),\n location_city: z.string().optional(),\n sport: z.string().optional(),\n category: z.string().optional(),\n tags: z.array(z.string()).optional(),\n campaign_videos: z.array(z.string()),\n first_contribution_at: z.string().datetime().optional(),\n created_at: z.string().datetime(),\n updated_at: z.string().datetime(),\n deleted_at: z.string().datetime().optional(),\n});\n\n/**\n * Campaign list response schema with pagination\n */\nexport const CampaignListResponseSchema = z.object({\n data: z.array(CampaignResponseSchema),\n meta: z.object({\n page: z.number(),\n limit: z.number(),\n total: z.number(),\n total_pages: z.number(),\n }),\n});\n\n/**\n * Type inferred from the campaign form schema for form validation\n */\nexport type FormCampaignData = z.infer<ReturnType<typeof formCampaignSchema>>;"]}
@@ -36,14 +36,19 @@ export declare const CreateCampaignSchema: z.ZodObject<{
36
36
  subtitle: z.ZodString;
37
37
  story: z.ZodString;
38
38
  funding_target: z.ZodNumber;
39
- duration: z.ZodOptional<z.ZodNumber>;
39
+ duration: z.ZodNumber;
40
+ start_date: z.ZodString;
41
+ campaign_images: z.ZodArray<z.ZodString>;
42
+ campaign_videos: z.ZodArray<z.ZodString>;
40
43
  location_region: z.ZodOptional<z.ZodString>;
41
44
  location_city: z.ZodOptional<z.ZodString>;
42
45
  sport: z.ZodOptional<z.ZodString>;
43
46
  category: z.ZodOptional<z.ZodString>;
44
47
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
45
- campaign_images: z.ZodOptional<z.ZodArray<z.ZodString>>;
46
- campaign_videos: z.ZodOptional<z.ZodArray<z.ZodString>>;
48
+ status: z.ZodOptional<z.ZodEnum<{
49
+ ACTIVE: "ACTIVE";
50
+ DRAFT: "DRAFT";
51
+ }>>;
47
52
  }, z.core.$strip>;
48
53
  /**
49
54
  * Update campaign schema
@@ -54,14 +59,19 @@ export declare const UpdateCampaignSchema: z.ZodObject<{
54
59
  subtitle: z.ZodString;
55
60
  story: z.ZodString;
56
61
  funding_target: z.ZodNumber;
57
- duration: z.ZodOptional<z.ZodNumber>;
62
+ duration: z.ZodNumber;
63
+ start_date: z.ZodString;
64
+ campaign_images: z.ZodArray<z.ZodString>;
65
+ campaign_videos: z.ZodArray<z.ZodString>;
58
66
  location_region: z.ZodOptional<z.ZodString>;
59
67
  location_city: z.ZodOptional<z.ZodString>;
60
68
  sport: z.ZodOptional<z.ZodString>;
61
69
  category: z.ZodOptional<z.ZodString>;
62
70
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
63
- campaign_images: z.ZodOptional<z.ZodArray<z.ZodString>>;
64
- campaign_videos: z.ZodOptional<z.ZodArray<z.ZodString>>;
71
+ status: z.ZodOptional<z.ZodEnum<{
72
+ ACTIVE: "ACTIVE";
73
+ DRAFT: "DRAFT";
74
+ }>>;
65
75
  id: z.ZodString;
66
76
  }, z.core.$strip>;
67
77
  /**
@@ -73,14 +83,19 @@ export declare const PatchCampaignSchema: z.ZodObject<{
73
83
  subtitle: z.ZodOptional<z.ZodString>;
74
84
  story: z.ZodOptional<z.ZodString>;
75
85
  funding_target: z.ZodOptional<z.ZodNumber>;
76
- duration: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
86
+ duration: z.ZodOptional<z.ZodNumber>;
87
+ start_date: z.ZodOptional<z.ZodString>;
88
+ campaign_images: z.ZodOptional<z.ZodArray<z.ZodString>>;
89
+ campaign_videos: z.ZodOptional<z.ZodArray<z.ZodString>>;
77
90
  location_region: z.ZodOptional<z.ZodOptional<z.ZodString>>;
78
91
  location_city: z.ZodOptional<z.ZodOptional<z.ZodString>>;
79
92
  sport: z.ZodOptional<z.ZodOptional<z.ZodString>>;
80
93
  category: z.ZodOptional<z.ZodOptional<z.ZodString>>;
81
94
  tags: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
82
- campaign_images: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
83
- campaign_videos: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
95
+ status: z.ZodOptional<z.ZodOptional<z.ZodEnum<{
96
+ ACTIVE: "ACTIVE";
97
+ DRAFT: "DRAFT";
98
+ }>>>;
84
99
  id: z.ZodOptional<z.ZodString>;
85
100
  }, z.core.$strip>;
86
101
  /**
@@ -124,15 +139,15 @@ export declare const CampaignResponseSchema: z.ZodObject<{
124
139
  story: z.ZodString;
125
140
  funding_target: z.ZodNumber;
126
141
  status: z.ZodEnum<typeof CAMPAIGN_STATUS>;
127
- campaign_images: z.ZodOptional<z.ZodArray<z.ZodString>>;
128
- start_date: z.ZodOptional<z.ZodString>;
129
- duration: z.ZodOptional<z.ZodNumber>;
142
+ campaign_images: z.ZodArray<z.ZodString>;
143
+ start_date: z.ZodString;
144
+ duration: z.ZodNumber;
130
145
  location_region: z.ZodOptional<z.ZodString>;
131
146
  location_city: z.ZodOptional<z.ZodString>;
132
147
  sport: z.ZodOptional<z.ZodString>;
133
148
  category: z.ZodOptional<z.ZodString>;
134
149
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
135
- campaign_videos: z.ZodOptional<z.ZodArray<z.ZodString>>;
150
+ campaign_videos: z.ZodArray<z.ZodString>;
136
151
  first_contribution_at: z.ZodOptional<z.ZodString>;
137
152
  created_at: z.ZodString;
138
153
  updated_at: z.ZodString;
@@ -150,15 +165,15 @@ export declare const CampaignListResponseSchema: z.ZodObject<{
150
165
  story: z.ZodString;
151
166
  funding_target: z.ZodNumber;
152
167
  status: z.ZodEnum<typeof CAMPAIGN_STATUS>;
153
- campaign_images: z.ZodOptional<z.ZodArray<z.ZodString>>;
154
- start_date: z.ZodOptional<z.ZodString>;
155
- duration: z.ZodOptional<z.ZodNumber>;
168
+ campaign_images: z.ZodArray<z.ZodString>;
169
+ start_date: z.ZodString;
170
+ duration: z.ZodNumber;
156
171
  location_region: z.ZodOptional<z.ZodString>;
157
172
  location_city: z.ZodOptional<z.ZodString>;
158
173
  sport: z.ZodOptional<z.ZodString>;
159
174
  category: z.ZodOptional<z.ZodString>;
160
175
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
161
- campaign_videos: z.ZodOptional<z.ZodArray<z.ZodString>>;
176
+ campaign_videos: z.ZodArray<z.ZodString>;
162
177
  first_contribution_at: z.ZodOptional<z.ZodString>;
163
178
  created_at: z.ZodString;
164
179
  updated_at: z.ZodString;
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Express Framework Types
3
+ *
4
+ * Types for Express route factory in @plyaz/core/frameworks/express.
5
+ */
6
+ import type { RouteContext, HandlersTypeMap, MethodHandlerTypes } from './route-types';
7
+ import type { CoreInjectedServices } from '../domain/types';
8
+ /**
9
+ * Minimal Express Request interface for compatibility
10
+ * Avoids direct dependency on @types/express
11
+ */
12
+ export interface CoreExpressRequest {
13
+ params: Record<string, string>;
14
+ query: Record<string, string | string[] | undefined>;
15
+ body: unknown;
16
+ headers: Record<string, string | string[] | undefined>;
17
+ method: string;
18
+ path: string;
19
+ url: string;
20
+ originalUrl: string;
21
+ get(name: string): string | undefined;
22
+ }
23
+ /**
24
+ * Minimal Express Response interface for compatibility
25
+ */
26
+ export interface CoreExpressResponse {
27
+ status(code: number): this;
28
+ json(data: unknown): this;
29
+ send(data?: unknown): this;
30
+ set(name: string, value: string): this;
31
+ setHeader(name: string, value: string): this;
32
+ end(): void;
33
+ }
34
+ /**
35
+ * Minimal Express NextFunction interface
36
+ */
37
+ export type CoreExpressNextFunction = (err?: unknown) => void;
38
+ /**
39
+ * Express-specific route context
40
+ */
41
+ export interface CoreExpressRouteContext<TParams extends Record<string, string> = Record<string, string>, TQuery extends Record<string, string> = Record<string, string>, TBody = unknown> extends RouteContext<TParams, TQuery> {
42
+ /** Parsed request body */
43
+ body: TBody;
44
+ /** Express request object */
45
+ req: CoreExpressRequest;
46
+ /** Express response object */
47
+ res: CoreExpressResponse;
48
+ /** Injected Core services (when injectServices is true) */
49
+ services?: CoreInjectedServices;
50
+ }
51
+ /**
52
+ * Express route handler function type
53
+ */
54
+ export type CoreExpressRouteHandler<TService, TResult = unknown, TTypes extends MethodHandlerTypes = MethodHandlerTypes> = (service: TService, ctx: CoreExpressRouteContext<TTypes['params'] extends Record<string, string> ? TTypes['params'] : Record<string, string>, TTypes['query'] extends Record<string, string> ? TTypes['query'] : Record<string, string>, TTypes['body']>) => Promise<TResult>;
55
+ /**
56
+ * Configuration for Express route factory
57
+ */
58
+ export interface CoreExpressRouteConfig<TService, THandlerTypes extends HandlersTypeMap = HandlersTypeMap> {
59
+ /** Service name (registered in ServiceRegistry) or factory function */
60
+ service: string | (() => Promise<TService>);
61
+ /** Handlers for each HTTP method */
62
+ handlers: {
63
+ [K in keyof THandlerTypes & keyof HandlersTypeMap]?: CoreExpressRouteHandler<TService, THandlerTypes[K] extends {
64
+ response: infer R;
65
+ } ? R : unknown, THandlerTypes[K] extends MethodHandlerTypes ? THandlerTypes[K] : MethodHandlerTypes>;
66
+ };
67
+ /** Function to get Core instance (for service resolution) */
68
+ getCore?: () => Promise<unknown>;
69
+ /** Custom success message or function */
70
+ successMessage?: string | ((method: string) => string);
71
+ /** Error source identifier for error handling */
72
+ errorSource?: string;
73
+ /** Whether to inject Core services into context (default: false) */
74
+ injectServices?: boolean;
75
+ }
76
+ /**
77
+ * Express middleware function type
78
+ */
79
+ export type CoreExpressMiddleware = (req: CoreExpressRequest, res: CoreExpressResponse, next: CoreExpressNextFunction) => void | Promise<void>;
80
+ /**
81
+ * Return type from createExpressRoute
82
+ */
83
+ export interface CoreExpressRouteExports {
84
+ /** Express router middleware for all configured methods */
85
+ handler: CoreExpressMiddleware;
86
+ /** Individual method handlers (for manual mounting) */
87
+ GET?: CoreExpressMiddleware;
88
+ POST?: CoreExpressMiddleware;
89
+ PUT?: CoreExpressMiddleware;
90
+ PATCH?: CoreExpressMiddleware;
91
+ DELETE?: CoreExpressMiddleware;
92
+ OPTIONS?: CoreExpressMiddleware;
93
+ HEAD?: CoreExpressMiddleware;
94
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * File Operation Types
3
+ *
4
+ * Types for file operation utilities (browser and Node.js).
5
+ * Used by @plyaz/core and @plyaz/storage packages.
6
+ */
7
+ /**
8
+ * Parsed file key components
9
+ */
10
+ export interface ParsedFileKey {
11
+ /** The entity type (e.g., 'user', 'organization') */
12
+ entityType?: string;
13
+ /** The entity ID */
14
+ entityId?: string;
15
+ /** The file category (e.g., 'documents', 'images') */
16
+ category?: string;
17
+ /** The filename with extension */
18
+ filename?: string;
19
+ /** The full original key */
20
+ raw: string;
21
+ }
22
+ /**
23
+ * Common MIME types and their extensions
24
+ */
25
+ export declare const MIME_TYPE_EXTENSIONS: Record<string, string>;
26
+ /**
27
+ * File size units
28
+ */
29
+ export declare const FILE_SIZE_UNITS: readonly ["Bytes", "KB", "MB", "GB", "TB", "PB"];
30
+ export type FileSizeUnit = (typeof FILE_SIZE_UNITS)[number];
31
+ /**
32
+ * Multipliers for file size units
33
+ */
34
+ export declare const FILE_SIZE_MULTIPLIERS: Record<string, number>;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Framework Types
3
+ *
4
+ * Types for @plyaz/core framework adapters (Next.js, Express, NestJS).
5
+ * Used by route factories and file operation utilities.
6
+ */
7
+ export type { RouteContext, RouteHandler, RouteHandlerConfig, MethodHandlerTypes, HandlersTypeMap, HttpMethod, } from './route-types';
8
+ export { DEFAULT_SUCCESS_MESSAGES } from './route-types';
9
+ export type { CoreNextRequestCompat, CoreNextRouteContext, CoreGenericRouteHandler, CoreNextJSRouteContext, CoreGetMethodTypes, CoreNextJSRouteHandler, CoreNextJSRouteConfig, CoreNextJSRouteExports, CorePlyazNextConfigOptions, CorePlyazNextConfig, } from './nextjs-types';
10
+ export type { CoreExpressRequest, CoreExpressResponse, CoreExpressNextFunction, CoreExpressRouteContext, CoreExpressRouteHandler, CoreExpressRouteConfig, CoreExpressMiddleware, CoreExpressRouteExports, } from './express-types';
11
+ export type { ParsedFileKey, FileSizeUnit } from './file-types';
12
+ export { MIME_TYPE_EXTENSIONS, FILE_SIZE_UNITS, FILE_SIZE_MULTIPLIERS } from './file-types';