@plyaz/types 1.39.5 → 1.39.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/campaign/index.cjs +13 -7
- package/dist/campaign/index.cjs.map +1 -1
- package/dist/campaign/index.js +13 -7
- package/dist/campaign/index.js.map +1 -1
- package/dist/campaign/schemas.d.ts +32 -17
- package/dist/index.cjs +13 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +13 -7
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/campaign/index.cjs
CHANGED
|
@@ -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)
|
|
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
|
-
|
|
96
|
-
|
|
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())
|
|
135
|
-
start_date: zod.z.string().datetime()
|
|
136
|
-
duration: zod.z.number()
|
|
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())
|
|
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":";;;;;;;;;AAsDO,IAAK,eAAA,qBAAAA,gBAAAA,KAAL;AACL,EAAAA,iBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,iBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,iBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,iBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,iBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,iBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,iBAAA,UAAA,CAAA,GAAW,UAAA;AAPD,EAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;AAaL,IAAK,sBAAA,qBAAAC,uBAAAA,KAAL;AACL,EAAAA,wBAAA,mBAAA,CAAA,GAAoB,oBAAA;AACpB,EAAAA,wBAAA,eAAA,CAAA,GAAgB,gBAAA;AAChB,EAAAA,wBAAA,aAAA,CAAA,GAAc,cAAA;AACd,EAAAA,wBAAA,WAAA,CAAA,GAAY,YAAA;AACZ,EAAAA,wBAAA,QAAA,CAAA,GAAS,QAAA;AALC,EAAA,OAAAA,uBAAAA;AAAA,CAAA,EAAA,sBAAA,IAAA,EAAA;AAWL,IAAK,gBAAA,qBAAAC,iBAAAA,KAAL;AACL,EAAAA,kBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,kBAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,kBAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,kBAAA,aAAA,CAAA,GAAc,cAAA;AACd,EAAAA,kBAAA,WAAA,CAAA,GAAY,WAAA;AALF,EAAA,OAAAA,iBAAAA;AAAA,CAAA,EAAA,gBAAA,IAAA,EAAA;;;AC5DL,IAAM,qCAAqB,MAAA,CAAA,CAAC,EAAE,UAAA,EAAW,KAC9CC,MAAE,MAAA,CAAO;AAAA,EACP,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAA,EAAA,qDAAA,qBAAoB,CAAE,IAAI,EAAA,EAAA,gDAAA,gBAAgB;AAAA,EAChE,QAAA,EAAUA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAA,EAAA,wDAAA,wBAAuB,CAAE,IAAI,GAAA,EAAA,mDAAA,mBAAoB;AAAA,EAC1E,eAAeA,KAAA,CAAE,GAAA,GAAM,MAAA,CAAO,CAAA,GAAA,KAAO,eAAe,IAAA,EAAM;AAAA,IACxD,OAAA,EAAA,6DAAA;AAAA,GACD,CAAA;AAAA,EACD,SAAA,EAAWA,MACR,IAAA,CAAK;AAAA,IACJ,KAAA,EAAA,yDAAA;AAAA,GACD,CAAA,CACA,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,YAAgB,IAAA,IAAQ,CAAC,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,CAAA,EAAG;AAAA,IAC9D,OAAA,EAAA,wDAAA;AAAA,GACD,CAAA,CACA,MAAA,CAAO,UAAQ,IAAA,oBAAQ,IAAI,MAAK,EAAG;AAAA,IAClC,OAAA,EAAA,uDAAA;AAAA,GACD,CAAA;AAAA,EACH,QAAA,EAAUA,MACP,KAAA,CAAM,CAACA,MAAE,OAAA,CAAQ,EAAE,CAAA,EAAGA,KAAA,CAAE,OAAA,CAAQ,EAAE,GAAGA,KAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAC,CAAA,CACnD,UAAS,CACT,MAAA,CAAO,CAAA,GAAA,KAAO,GAAA,KAAQ,IAAA,EAAM;AAAA,IAC3B,OAAA,EAAA,wDAAA;AAAA,GACD,CAAA;AAAA,EACH,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAA,EAAA,qDAAA,qBAAoB,CAAE,IAAI,GAAA,EAAA,gDAAA,gBAAmB;AAAA,EACnE,cAAA,EAAgBA,KAAA,CACb,MAAA,EAAO,CACP,MAAA;AAAA,IACC,CAAA,GAAA,KAAO;AACL,MAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,IAAA,EAAK,KAAM,IAAI,OAAO,IAAA;AACtC,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,GAAG,CAAA;AAC1B,QAAA,MAAM,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,WAAA,EAAY;AAC7C,QAAA,OACE,QAAA,CAAS,QAAA,CAAS,aAAa,CAAA,IAC/B,SAAS,QAAA,CAAS,UAAU,CAAA,IAC5B,QAAA,CAAS,QAAA,CAAS,YAAY,CAAA,IAC9B,QAAA,CAAS,SAAS,WAAW,CAAA;AAAA,MAEjC,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,OAAA,EAAA,4DAAA;AAAA;AACF,IAED,QAAA,EAAS;AAAA,EACZ,eAAeA,KAAA,CACZ,MAAA,EAAO,CACP,GAAA,CAAI,iFAAsB,CAC1B,MAAA;AAAA,IACC,CAAA,GAAA,KAAO;AACL,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,GAAA,IAAO,EAAE,CAAA;AACvC,MAAA,OAAO,CAAC,KAAA,CAAM,GAAG,CAAA,IAAK,GAAA,GAAM,KAAK,GAAA,IAAO,UAAA;AAAA,IAC1C,CAAA;AAAA,IACA;AAAA,MACE,OAAA,EAAA,oDAAA;AAAA;AACF,GACF;AAAA,EACF,eAAA,EAAiBA,KAAA,CACd,MAAA,EAAO,CACP,GAAA,CAAI,4EAAoB,CACxB,KAAA,CAAM,+CAAA,EAAA,wDAAA,wBAAqE,CAC3E,QAAA,EAAS;AAAA,EACZ,YAAA,EAAcA,KAAA,CACX,MAAA,EAAO,CACP,GAAA,CAAI,sEAAiB,CACrB,KAAA,CAAM,uCAAA,EAAA,qDAAA,qBAA0D,CAChE,QAAA,EAAS;AAAA,EACZ,aAAA,EAAeA,KAAA,CACZ,MAAA,EAAO,CACP,GAAA,CAAI,wEAAkB,CACtB,KAAA,CAAM,kDAAA,EAAA,sDAAA,sBAAsE,CAC5E,QAAA;AACL,CAAC,CAAA,EA1E+B,oBAAA;AA+E3B,IAAM,oBAAA,GAAuBA,MAAE,MAAA,CAAO;AAAA,EAC3C,UAAA,EAAYA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAA,EAAK;AAAA,EAC5B,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,EAAE,CAAA;AAAA,EAC/B,QAAA,EAAUA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAG,CAAA;AAAA,EACnC,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,IAAI,EAAE,CAAA,CAAE,IAAI,GAAI,CAAA;AAAA,EAClC,cAAA,EAAgBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACpC,QAAA,EAAUA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,EAAS;AAAA,EAC9C,iBAAiBA,KAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA,EAAS;AAAA,EAC9C,eAAeA,KAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA,EAAS;AAAA,EAC5C,OAAOA,KAAA,CAAE,MAAA,GAAS,GAAA,CAAI,EAAE,EAAE,QAAA,EAAS;AAAA,EACnC,UAAUA,KAAA,CAAE,MAAA,GAAS,GAAA,CAAI,EAAE,EAAE,QAAA,EAAS;AAAA,EACtC,MAAMA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACnC,eAAA,EAAiBA,MAAE,KAAA,CAAMA,KAAA,CAAE,QAAO,CAAE,IAAA,EAAM,CAAA,CAAE,QAAA,EAAS;AAAA,EACrD,eAAA,EAAiBA,MAAE,KAAA,CAAMA,KAAA,CAAE,QAAO,CAAE,IAAA,EAAM,CAAA,CAAE,QAAA;AAC9C,CAAC;AAKM,IAAM,oBAAA,GAAuB,qBAAqB,MAAA,CAAO;AAAA,EAC9D,EAAA,EAAIA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAA;AACjB,CAAC;AAKM,IAAM,mBAAA,GAAsB,oBAAA,CAAqB,OAAA,EAAQ,CAAE,MAAA,CAAO;AAAA,EACvE,IAAIA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAA,GAAO,QAAA;AACxB,CAAC;AAKM,IAAM,oBAAA,GAAuBA,MAAE,MAAA,CAAO;AAAA;AAAA,EAE3C,IAAA,EAAMA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA;AAAA;AAAA,EAG9B,QAAQA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAA,GAAO,QAAA;AAC5B,CAAC;AAKM,IAAM,mBAAA,GAAsBA,MAAE,MAAA,CAAO;AAAA;AAAA,EAE1C,IAAA,EAAMA,KAAA,CAAE,MAAA,CAAO,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,EAClD,KAAA,EAAOA,KAAA,CAAE,MAAA,CAAO,MAAA,GAAS,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAQ,EAAE,CAAA;AAAA;AAAA,EAGzD,OAAA,EAASA,KAAA,CAAE,IAAA,CAAK,CAAC,OAAA,EAAS,gBAAA,EAAkB,YAAA,EAAc,YAAY,CAAC,CAAA,CAAE,OAAA,CAAQ,YAAY,CAAA;AAAA,EAC7F,UAAA,EAAYA,MAAE,IAAA,CAAK,CAAC,OAAO,MAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAA;AAAA;AAAA,EAGlD,MAAA,EAAQA,KAAA,CAAE,UAAA,CAAW,eAAe,EAAE,QAAA,EAAS;AAAA,EAC/C,YAAYA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAA,GAAO,QAAA,EAAS;AAAA,EACvC,KAAA,EAAOA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,QAAA,EAAUA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,eAAA,EAAiBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAGrC,QAAQA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAA,GAAO,QAAA;AAC5B,CAAC;AAKM,IAAM,sBAAA,GAAyBA,MAAE,MAAA,CAAO;AAAA,EAC7C,EAAA,EAAIA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAA,EAAK;AAAA,EACpB,UAAA,EAAYA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAA,EAAK;AAAA,EAC5B,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,QAAA,EAAUA,MAAE,MAAA,EAAO;AAAA,EACnB,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,cAAA,EAAgBA,MAAE,MAAA,EAAO;AAAA,EACzB,MAAA,EAAQA,KAAA,CAAE,UAAA,CAAW,eAAe,CAAA;AAAA,EACpC,iBAAiBA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EAC9C,YAAYA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,QAAA,EAAUA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,eAAA,EAAiBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACrC,aAAA,EAAeA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACnC,KAAA,EAAOA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,QAAA,EAAUA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,MAAMA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACnC,iBAAiBA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EAC9C,uBAAuBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACtD,UAAA,EAAYA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,UAAA,EAAYA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,YAAYA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACpC,CAAC;AAKM,IAAM,0BAAA,GAA6BA,MAAE,MAAA,CAAO;AAAA,EACjD,IAAA,EAAMA,KAAA,CAAE,KAAA,CAAM,sBAAsB,CAAA;AAAA,EACpC,IAAA,EAAMA,MAAE,MAAA,CAAO;AAAA,IACb,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,IACf,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,IAChB,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,IAChB,WAAA,EAAaA,MAAE,MAAA;AAAO,GACvB;AACH,CAAC","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>>;"]}
|
package/dist/campaign/index.js
CHANGED
|
@@ -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)
|
|
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
|
-
|
|
94
|
-
|
|
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())
|
|
133
|
-
start_date: z.string().datetime()
|
|
134
|
-
duration: z.number()
|
|
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())
|
|
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":";;;;;;;AAsDO,IAAK,eAAA,qBAAAA,gBAAAA,KAAL;AACL,EAAAA,iBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,iBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,iBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,iBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,iBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,iBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,iBAAA,UAAA,CAAA,GAAW,UAAA;AAPD,EAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;AAaL,IAAK,sBAAA,qBAAAC,uBAAAA,KAAL;AACL,EAAAA,wBAAA,mBAAA,CAAA,GAAoB,oBAAA;AACpB,EAAAA,wBAAA,eAAA,CAAA,GAAgB,gBAAA;AAChB,EAAAA,wBAAA,aAAA,CAAA,GAAc,cAAA;AACd,EAAAA,wBAAA,WAAA,CAAA,GAAY,YAAA;AACZ,EAAAA,wBAAA,QAAA,CAAA,GAAS,QAAA;AALC,EAAA,OAAAA,uBAAAA;AAAA,CAAA,EAAA,sBAAA,IAAA,EAAA;AAWL,IAAK,gBAAA,qBAAAC,iBAAAA,KAAL;AACL,EAAAA,kBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,kBAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,kBAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,kBAAA,aAAA,CAAA,GAAc,cAAA;AACd,EAAAA,kBAAA,WAAA,CAAA,GAAY,WAAA;AALF,EAAA,OAAAA,iBAAAA;AAAA,CAAA,EAAA,gBAAA,IAAA,EAAA;;;AC5DL,IAAM,qCAAqB,MAAA,CAAA,CAAC,EAAE,UAAA,EAAW,KAC9C,EAAE,MAAA,CAAO;AAAA,EACP,KAAA,EAAO,EAAE,MAAA,EAAO,CAAE,IAAI,CAAA,EAAA,qDAAA,qBAAoB,CAAE,IAAI,EAAA,EAAA,gDAAA,gBAAgB;AAAA,EAChE,QAAA,EAAU,EAAE,MAAA,EAAO,CAAE,IAAI,CAAA,EAAA,wDAAA,wBAAuB,CAAE,IAAI,GAAA,EAAA,mDAAA,mBAAoB;AAAA,EAC1E,eAAe,CAAA,CAAE,GAAA,GAAM,MAAA,CAAO,CAAA,GAAA,KAAO,eAAe,IAAA,EAAM;AAAA,IACxD,OAAA,EAAA,6DAAA;AAAA,GACD,CAAA;AAAA,EACD,SAAA,EAAW,EACR,IAAA,CAAK;AAAA,IACJ,KAAA,EAAA,yDAAA;AAAA,GACD,CAAA,CACA,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,YAAgB,IAAA,IAAQ,CAAC,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,CAAA,EAAG;AAAA,IAC9D,OAAA,EAAA,wDAAA;AAAA,GACD,CAAA,CACA,MAAA,CAAO,UAAQ,IAAA,oBAAQ,IAAI,MAAK,EAAG;AAAA,IAClC,OAAA,EAAA,uDAAA;AAAA,GACD,CAAA;AAAA,EACH,QAAA,EAAU,EACP,KAAA,CAAM,CAAC,EAAE,OAAA,CAAQ,EAAE,CAAA,EAAG,CAAA,CAAE,OAAA,CAAQ,EAAE,GAAG,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAC,CAAA,CACnD,UAAS,CACT,MAAA,CAAO,CAAA,GAAA,KAAO,GAAA,KAAQ,IAAA,EAAM;AAAA,IAC3B,OAAA,EAAA,wDAAA;AAAA,GACD,CAAA;AAAA,EACH,KAAA,EAAO,EAAE,MAAA,EAAO,CAAE,IAAI,CAAA,EAAA,qDAAA,qBAAoB,CAAE,IAAI,GAAA,EAAA,gDAAA,gBAAmB;AAAA,EACnE,cAAA,EAAgB,CAAA,CACb,MAAA,EAAO,CACP,MAAA;AAAA,IACC,CAAA,GAAA,KAAO;AACL,MAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,IAAA,EAAK,KAAM,IAAI,OAAO,IAAA;AACtC,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,GAAG,CAAA;AAC1B,QAAA,MAAM,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,WAAA,EAAY;AAC7C,QAAA,OACE,QAAA,CAAS,QAAA,CAAS,aAAa,CAAA,IAC/B,SAAS,QAAA,CAAS,UAAU,CAAA,IAC5B,QAAA,CAAS,QAAA,CAAS,YAAY,CAAA,IAC9B,QAAA,CAAS,SAAS,WAAW,CAAA;AAAA,MAEjC,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,OAAA,EAAA,4DAAA;AAAA;AACF,IAED,QAAA,EAAS;AAAA,EACZ,eAAe,CAAA,CACZ,MAAA,EAAO,CACP,GAAA,CAAI,iFAAsB,CAC1B,MAAA;AAAA,IACC,CAAA,GAAA,KAAO;AACL,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,GAAA,IAAO,EAAE,CAAA;AACvC,MAAA,OAAO,CAAC,KAAA,CAAM,GAAG,CAAA,IAAK,GAAA,GAAM,KAAK,GAAA,IAAO,UAAA;AAAA,IAC1C,CAAA;AAAA,IACA;AAAA,MACE,OAAA,EAAA,oDAAA;AAAA;AACF,GACF;AAAA,EACF,eAAA,EAAiB,CAAA,CACd,MAAA,EAAO,CACP,GAAA,CAAI,4EAAoB,CACxB,KAAA,CAAM,+CAAA,EAAA,wDAAA,wBAAqE,CAC3E,QAAA,EAAS;AAAA,EACZ,YAAA,EAAc,CAAA,CACX,MAAA,EAAO,CACP,GAAA,CAAI,sEAAiB,CACrB,KAAA,CAAM,uCAAA,EAAA,qDAAA,qBAA0D,CAChE,QAAA,EAAS;AAAA,EACZ,aAAA,EAAe,CAAA,CACZ,MAAA,EAAO,CACP,GAAA,CAAI,wEAAkB,CACtB,KAAA,CAAM,kDAAA,EAAA,sDAAA,sBAAsE,CAC5E,QAAA;AACL,CAAC,CAAA,EA1E+B,oBAAA;AA+E3B,IAAM,oBAAA,GAAuB,EAAE,MAAA,CAAO;AAAA,EAC3C,UAAA,EAAY,CAAA,CAAE,MAAA,EAAO,CAAE,IAAA,EAAK;AAAA,EAC5B,KAAA,EAAO,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,EAAE,CAAA;AAAA,EAC/B,QAAA,EAAU,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAG,CAAA;AAAA,EACnC,KAAA,EAAO,EAAE,MAAA,EAAO,CAAE,IAAI,EAAE,CAAA,CAAE,IAAI,GAAI,CAAA;AAAA,EAClC,cAAA,EAAgB,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACpC,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,EAAS;AAAA,EAC9C,iBAAiB,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA,EAAS;AAAA,EAC9C,eAAe,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA,EAAS;AAAA,EAC5C,OAAO,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,EAAE,EAAE,QAAA,EAAS;AAAA,EACnC,UAAU,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,EAAE,EAAE,QAAA,EAAS;AAAA,EACtC,MAAM,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACnC,eAAA,EAAiB,EAAE,KAAA,CAAM,CAAA,CAAE,QAAO,CAAE,IAAA,EAAM,CAAA,CAAE,QAAA,EAAS;AAAA,EACrD,eAAA,EAAiB,EAAE,KAAA,CAAM,CAAA,CAAE,QAAO,CAAE,IAAA,EAAM,CAAA,CAAE,QAAA;AAC9C,CAAC;AAKM,IAAM,oBAAA,GAAuB,qBAAqB,MAAA,CAAO;AAAA,EAC9D,EAAA,EAAI,CAAA,CAAE,MAAA,EAAO,CAAE,IAAA;AACjB,CAAC;AAKM,IAAM,mBAAA,GAAsB,oBAAA,CAAqB,OAAA,EAAQ,CAAE,MAAA,CAAO;AAAA,EACvE,IAAI,CAAA,CAAE,MAAA,EAAO,CAAE,IAAA,GAAO,QAAA;AACxB,CAAC;AAKM,IAAM,oBAAA,GAAuB,EAAE,MAAA,CAAO;AAAA;AAAA,EAE3C,IAAA,EAAM,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA;AAAA;AAAA,EAG9B,QAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,IAAA,GAAO,QAAA;AAC5B,CAAC;AAKM,IAAM,mBAAA,GAAsB,EAAE,MAAA,CAAO;AAAA;AAAA,EAE1C,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,EAClD,KAAA,EAAO,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAQ,EAAE,CAAA;AAAA;AAAA,EAGzD,OAAA,EAAS,CAAA,CAAE,IAAA,CAAK,CAAC,OAAA,EAAS,gBAAA,EAAkB,YAAA,EAAc,YAAY,CAAC,CAAA,CAAE,OAAA,CAAQ,YAAY,CAAA;AAAA,EAC7F,UAAA,EAAY,EAAE,IAAA,CAAK,CAAC,OAAO,MAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAA;AAAA;AAAA,EAGlD,MAAA,EAAQ,CAAA,CAAE,UAAA,CAAW,eAAe,EAAE,QAAA,EAAS;AAAA,EAC/C,YAAY,CAAA,CAAE,MAAA,EAAO,CAAE,IAAA,GAAO,QAAA,EAAS;AAAA,EACvC,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,eAAA,EAAiB,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAGrC,QAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,IAAA,GAAO,QAAA;AAC5B,CAAC;AAKM,IAAM,sBAAA,GAAyB,EAAE,MAAA,CAAO;AAAA,EAC7C,EAAA,EAAI,CAAA,CAAE,MAAA,EAAO,CAAE,IAAA,EAAK;AAAA,EACpB,UAAA,EAAY,CAAA,CAAE,MAAA,EAAO,CAAE,IAAA,EAAK;AAAA,EAC5B,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,EAChB,QAAA,EAAU,EAAE,MAAA,EAAO;AAAA,EACnB,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,EAChB,cAAA,EAAgB,EAAE,MAAA,EAAO;AAAA,EACzB,MAAA,EAAQ,CAAA,CAAE,UAAA,CAAW,eAAe,CAAA;AAAA,EACpC,iBAAiB,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EAC9C,YAAY,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,eAAA,EAAiB,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACrC,aAAA,EAAe,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACnC,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,MAAM,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACnC,iBAAiB,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EAC9C,uBAAuB,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACtD,UAAA,EAAY,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,UAAA,EAAY,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,YAAY,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACpC,CAAC;AAKM,IAAM,0BAAA,GAA6B,EAAE,MAAA,CAAO;AAAA,EACjD,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,sBAAsB,CAAA;AAAA,EACpC,IAAA,EAAM,EAAE,MAAA,CAAO;AAAA,IACb,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,IACf,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,IAChB,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,IAChB,WAAA,EAAa,EAAE,MAAA;AAAO,GACvB;AACH,CAAC","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.
|
|
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
|
-
|
|
46
|
-
|
|
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.
|
|
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
|
-
|
|
64
|
-
|
|
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.
|
|
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
|
-
|
|
83
|
-
|
|
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.
|
|
128
|
-
start_date: z.
|
|
129
|
-
duration: z.
|
|
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.
|
|
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.
|
|
154
|
-
start_date: z.
|
|
155
|
-
duration: z.
|
|
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.
|
|
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;
|
package/dist/index.cjs
CHANGED
|
@@ -7427,19 +7427,25 @@ var formCampaignSchema = /* @__PURE__ */ __name(({ maxFunding }) => zod.z.object
|
|
|
7427
7427
|
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()
|
|
7428
7428
|
}), "formCampaignSchema");
|
|
7429
7429
|
var CreateCampaignSchema = zod.z.object({
|
|
7430
|
+
// REQUIRED
|
|
7430
7431
|
creator_id: zod.z.string().uuid(),
|
|
7431
7432
|
title: zod.z.string().min(3).max(60),
|
|
7432
7433
|
subtitle: zod.z.string().min(1).max(200),
|
|
7433
7434
|
story: zod.z.string().min(10).max(1e3),
|
|
7434
7435
|
funding_target: zod.z.number().positive(),
|
|
7435
|
-
duration: zod.z.number().min(7).max(365)
|
|
7436
|
+
duration: zod.z.number().min(7).max(365),
|
|
7437
|
+
start_date: zod.z.string(),
|
|
7438
|
+
// ISO date string
|
|
7439
|
+
campaign_images: zod.z.array(zod.z.string().uuid()).min(1),
|
|
7440
|
+
campaign_videos: zod.z.array(zod.z.string().uuid()).min(1),
|
|
7441
|
+
// OPTIONAL
|
|
7436
7442
|
location_region: zod.z.string().max(100).optional(),
|
|
7437
7443
|
location_city: zod.z.string().max(100).optional(),
|
|
7438
7444
|
sport: zod.z.string().max(50).optional(),
|
|
7439
7445
|
category: zod.z.string().max(50).optional(),
|
|
7440
7446
|
tags: zod.z.array(zod.z.string()).optional(),
|
|
7441
|
-
|
|
7442
|
-
|
|
7447
|
+
// OPTIONAL (DB default ACTIVE)
|
|
7448
|
+
status: zod.z.enum(["DRAFT", "ACTIVE"]).optional()
|
|
7443
7449
|
});
|
|
7444
7450
|
var UpdateCampaignSchema = CreateCampaignSchema.extend({
|
|
7445
7451
|
id: zod.z.string().uuid()
|
|
@@ -7477,15 +7483,15 @@ var CampaignResponseSchema = zod.z.object({
|
|
|
7477
7483
|
story: zod.z.string(),
|
|
7478
7484
|
funding_target: zod.z.number(),
|
|
7479
7485
|
status: zod.z.nativeEnum(CAMPAIGN_STATUS),
|
|
7480
|
-
campaign_images: zod.z.array(zod.z.string())
|
|
7481
|
-
start_date: zod.z.string().datetime()
|
|
7482
|
-
duration: zod.z.number()
|
|
7486
|
+
campaign_images: zod.z.array(zod.z.string()),
|
|
7487
|
+
start_date: zod.z.string().datetime(),
|
|
7488
|
+
duration: zod.z.number(),
|
|
7483
7489
|
location_region: zod.z.string().optional(),
|
|
7484
7490
|
location_city: zod.z.string().optional(),
|
|
7485
7491
|
sport: zod.z.string().optional(),
|
|
7486
7492
|
category: zod.z.string().optional(),
|
|
7487
7493
|
tags: zod.z.array(zod.z.string()).optional(),
|
|
7488
|
-
campaign_videos: zod.z.array(zod.z.string())
|
|
7494
|
+
campaign_videos: zod.z.array(zod.z.string()),
|
|
7489
7495
|
first_contribution_at: zod.z.string().datetime().optional(),
|
|
7490
7496
|
created_at: zod.z.string().datetime(),
|
|
7491
7497
|
updated_at: zod.z.string().datetime(),
|