@plyaz/types 1.14.11 → 1.15.0
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/api/index.cjs +82 -0
- package/dist/api/index.cjs.map +1 -1
- package/dist/api/index.js +82 -0
- package/dist/api/index.js.map +1 -1
- package/dist/campaign/enums.d.ts +50 -0
- package/dist/campaign/index.cjs +82 -0
- package/dist/campaign/index.cjs.map +1 -0
- package/dist/campaign/index.d.ts +3 -0
- package/dist/campaign/index.js +79 -0
- package/dist/campaign/index.js.map +1 -0
- package/dist/campaign/schemas.d.ts +16 -0
- package/dist/campaign/types.d.ts +59 -0
- package/dist/db/config.types.d.ts +1 -1
- package/dist/db/index.cjs.map +1 -1
- package/dist/db/index.js.map +1 -1
- package/dist/errors/codes.d.ts +16 -0
- package/dist/errors/index.cjs +91 -1
- package/dist/errors/index.cjs.map +1 -1
- package/dist/errors/index.js +91 -1
- package/dist/errors/index.js.map +1 -1
- package/dist/index.cjs +277 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +270 -2
- package/dist/index.js.map +1 -1
- package/dist/user/enums.d.ts +105 -0
- package/dist/user/index.cjs +122 -0
- package/dist/user/index.cjs.map +1 -0
- package/dist/user/index.d.ts +3 -0
- package/dist/user/index.js +115 -0
- package/dist/user/index.js.map +1 -0
- package/dist/user/schemas.d.ts +55 -0
- package/dist/user/types.d.ts +59 -0
- package/package.json +11 -1
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enum containing error message keys for campaign creation form validation.
|
|
3
|
+
* Contains localized error message keys that map to translation strings.
|
|
4
|
+
*/
|
|
5
|
+
export declare enum CREATE_CAMPAIGN_ERRORS {
|
|
6
|
+
/** Error when campaign title is required but not provided */
|
|
7
|
+
TitleRequired = "components.CreateCampaign.Form.errors.titleRequired",
|
|
8
|
+
/** Error when campaign title exceeds maximum length */
|
|
9
|
+
TitleMax = "components.CreateCampaign.Form.errors.titleMax",
|
|
10
|
+
/** Error when campaign subtitle is required but not provided */
|
|
11
|
+
SubtitleRequired = "components.CreateCampaign.Form.errors.subtitleRequired",
|
|
12
|
+
/** Error when campaign subtitle exceeds maximum length */
|
|
13
|
+
SubtitleMax = "components.CreateCampaign.Form.errors.subtitleMax",
|
|
14
|
+
/** Error when campaign image is required but not provided */
|
|
15
|
+
CampaignImageRequired = "components.CreateCampaign.Form.errors.campaignImageRequired",
|
|
16
|
+
/** Error when start date is required but not provided */
|
|
17
|
+
StartDateRequired = "components.CreateCampaign.Form.errors.startDateRequired",
|
|
18
|
+
/** Error when start date format is invalid */
|
|
19
|
+
StartDateInvalid = "components.CreateCampaign.Form.errors.startDateInvalid",
|
|
20
|
+
/** Error when start date is not in the future */
|
|
21
|
+
StartDateFuture = "components.CreateCampaign.Form.errors.startDateFuture",
|
|
22
|
+
/** Error when campaign duration is required but not selected */
|
|
23
|
+
DurationRequired = "components.CreateCampaign.Form.errors.durationRequired",
|
|
24
|
+
/** Error when campaign story is required but not provided */
|
|
25
|
+
StoryRequired = "components.CreateCampaign.Form.errors.storyRequired",
|
|
26
|
+
/** Error when campaign story exceeds maximum length */
|
|
27
|
+
StoryMax = "components.CreateCampaign.Form.errors.storyMax",
|
|
28
|
+
/** Error when video URL is from an unsupported provider */
|
|
29
|
+
VideoInvalidProvider = "components.CreateCampaign.Form.errors.videoInvalidProvider",
|
|
30
|
+
/** Error when funding target is required but not provided */
|
|
31
|
+
FundingRequired = "components.CreateCampaign.Form.errors.fundingRequired",
|
|
32
|
+
/** Error when funding target is outside allowed range */
|
|
33
|
+
FundingRange = "components.CreateCampaign.Form.errors.fundingRange",
|
|
34
|
+
/** Error when Instagram handle exceeds maximum length */
|
|
35
|
+
InstagramMax = "components.CreateCampaign.Form.errors.instagramMax",
|
|
36
|
+
/** Error when Instagram handle format is invalid */
|
|
37
|
+
InstagramInvalid = "components.CreateCampaign.Form.errors.instagramInvalid",
|
|
38
|
+
/** Error when TikTok handle exceeds maximum length */
|
|
39
|
+
TiktokMax = "components.CreateCampaign.Form.errors.tiktokMax",
|
|
40
|
+
/** Error when TikTok handle format is invalid */
|
|
41
|
+
TiktokInvalid = "components.CreateCampaign.Form.errors.tiktokInvalid",
|
|
42
|
+
/** Error when YouTube handle exceeds maximum length */
|
|
43
|
+
YoutubeMax = "components.CreateCampaign.Form.errors.youtubeMax",
|
|
44
|
+
/** Error when YouTube handle format is invalid */
|
|
45
|
+
YoutubeInvalid = "components.CreateCampaign.Form.errors.youtubeInvalid"
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Type representing all possible error keys for campaign creation form validation
|
|
49
|
+
*/
|
|
50
|
+
export type CreateCampaignErrorKey = keyof typeof CREATE_CAMPAIGN_ERRORS;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var zod = require('zod');
|
|
4
|
+
|
|
5
|
+
// @plyaz package - Built with tsup
|
|
6
|
+
var __defProp = Object.defineProperty;
|
|
7
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
|
+
|
|
9
|
+
// src/campaign/enums.ts
|
|
10
|
+
var CREATE_CAMPAIGN_ERRORS = /* @__PURE__ */ ((CREATE_CAMPAIGN_ERRORS2) => {
|
|
11
|
+
CREATE_CAMPAIGN_ERRORS2["TitleRequired"] = "components.CreateCampaign.Form.errors.titleRequired";
|
|
12
|
+
CREATE_CAMPAIGN_ERRORS2["TitleMax"] = "components.CreateCampaign.Form.errors.titleMax";
|
|
13
|
+
CREATE_CAMPAIGN_ERRORS2["SubtitleRequired"] = "components.CreateCampaign.Form.errors.subtitleRequired";
|
|
14
|
+
CREATE_CAMPAIGN_ERRORS2["SubtitleMax"] = "components.CreateCampaign.Form.errors.subtitleMax";
|
|
15
|
+
CREATE_CAMPAIGN_ERRORS2["CampaignImageRequired"] = "components.CreateCampaign.Form.errors.campaignImageRequired";
|
|
16
|
+
CREATE_CAMPAIGN_ERRORS2["StartDateRequired"] = "components.CreateCampaign.Form.errors.startDateRequired";
|
|
17
|
+
CREATE_CAMPAIGN_ERRORS2["StartDateInvalid"] = "components.CreateCampaign.Form.errors.startDateInvalid";
|
|
18
|
+
CREATE_CAMPAIGN_ERRORS2["StartDateFuture"] = "components.CreateCampaign.Form.errors.startDateFuture";
|
|
19
|
+
CREATE_CAMPAIGN_ERRORS2["DurationRequired"] = "components.CreateCampaign.Form.errors.durationRequired";
|
|
20
|
+
CREATE_CAMPAIGN_ERRORS2["StoryRequired"] = "components.CreateCampaign.Form.errors.storyRequired";
|
|
21
|
+
CREATE_CAMPAIGN_ERRORS2["StoryMax"] = "components.CreateCampaign.Form.errors.storyMax";
|
|
22
|
+
CREATE_CAMPAIGN_ERRORS2["VideoInvalidProvider"] = "components.CreateCampaign.Form.errors.videoInvalidProvider";
|
|
23
|
+
CREATE_CAMPAIGN_ERRORS2["FundingRequired"] = "components.CreateCampaign.Form.errors.fundingRequired";
|
|
24
|
+
CREATE_CAMPAIGN_ERRORS2["FundingRange"] = "components.CreateCampaign.Form.errors.fundingRange";
|
|
25
|
+
CREATE_CAMPAIGN_ERRORS2["InstagramMax"] = "components.CreateCampaign.Form.errors.instagramMax";
|
|
26
|
+
CREATE_CAMPAIGN_ERRORS2["InstagramInvalid"] = "components.CreateCampaign.Form.errors.instagramInvalid";
|
|
27
|
+
CREATE_CAMPAIGN_ERRORS2["TiktokMax"] = "components.CreateCampaign.Form.errors.tiktokMax";
|
|
28
|
+
CREATE_CAMPAIGN_ERRORS2["TiktokInvalid"] = "components.CreateCampaign.Form.errors.tiktokInvalid";
|
|
29
|
+
CREATE_CAMPAIGN_ERRORS2["YoutubeMax"] = "components.CreateCampaign.Form.errors.youtubeMax";
|
|
30
|
+
CREATE_CAMPAIGN_ERRORS2["YoutubeInvalid"] = "components.CreateCampaign.Form.errors.youtubeInvalid";
|
|
31
|
+
return CREATE_CAMPAIGN_ERRORS2;
|
|
32
|
+
})(CREATE_CAMPAIGN_ERRORS || {});
|
|
33
|
+
var formCampaignSchema = /* @__PURE__ */ __name(({ maxFunding }) => zod.z.object({
|
|
34
|
+
title: zod.z.string().min(1, "components.CreateCampaign.Form.errors.titleRequired" /* TitleRequired */).max(60, "components.CreateCampaign.Form.errors.titleMax" /* TitleMax */),
|
|
35
|
+
subtitle: zod.z.string().min(1, "components.CreateCampaign.Form.errors.subtitleRequired" /* SubtitleRequired */).max(200, "components.CreateCampaign.Form.errors.subtitleMax" /* SubtitleMax */),
|
|
36
|
+
campaignImage: zod.z.any().refine((val) => val instanceof File, {
|
|
37
|
+
message: "components.CreateCampaign.Form.errors.campaignImageRequired" /* CampaignImageRequired */
|
|
38
|
+
}),
|
|
39
|
+
startDate: zod.z.date({
|
|
40
|
+
error: "components.CreateCampaign.Form.errors.startDateRequired" /* StartDateRequired */
|
|
41
|
+
}).refine((date) => date instanceof Date && !isNaN(date.getTime()), {
|
|
42
|
+
message: "components.CreateCampaign.Form.errors.startDateInvalid" /* StartDateInvalid */
|
|
43
|
+
}).refine((date) => date >= /* @__PURE__ */ new Date(), {
|
|
44
|
+
message: "components.CreateCampaign.Form.errors.startDateFuture" /* StartDateFuture */
|
|
45
|
+
}),
|
|
46
|
+
duration: zod.z.union([zod.z.literal(30), zod.z.literal(60), zod.z.literal(90)]).nullable().refine((val) => val !== null, {
|
|
47
|
+
message: "components.CreateCampaign.Form.errors.durationRequired" /* DurationRequired */
|
|
48
|
+
}),
|
|
49
|
+
story: zod.z.string().min(1, "components.CreateCampaign.Form.errors.storyRequired" /* StoryRequired */).max(1e4, "components.CreateCampaign.Form.errors.storyMax" /* StoryMax */),
|
|
50
|
+
videoHighlight: zod.z.string().refine(
|
|
51
|
+
(url) => {
|
|
52
|
+
if (!url || url.trim() === "") return true;
|
|
53
|
+
try {
|
|
54
|
+
const urlObj = new URL(url);
|
|
55
|
+
const hostname = urlObj.hostname.toLowerCase();
|
|
56
|
+
return hostname.includes("youtube.com") || hostname.includes("youtu.be") || hostname.includes("tiktok.com") || hostname.includes("vimeo.com");
|
|
57
|
+
} catch {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
message: "components.CreateCampaign.Form.errors.videoInvalidProvider" /* VideoInvalidProvider */
|
|
63
|
+
}
|
|
64
|
+
).optional(),
|
|
65
|
+
fundingTarget: zod.z.string().min(1, "components.CreateCampaign.Form.errors.fundingRequired" /* FundingRequired */).refine(
|
|
66
|
+
(val) => {
|
|
67
|
+
const num = Number.parseFloat(val ?? "");
|
|
68
|
+
return !isNaN(num) && num > 0 && num <= maxFunding;
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
message: "components.CreateCampaign.Form.errors.fundingRange" /* FundingRange */
|
|
72
|
+
}
|
|
73
|
+
),
|
|
74
|
+
instagramHandle: zod.z.string().max(30, "components.CreateCampaign.Form.errors.instagramMax" /* InstagramMax */).regex(/^@?[a-zA-Z0-9._]{1,30}$/, "components.CreateCampaign.Form.errors.instagramInvalid" /* InstagramInvalid */).optional(),
|
|
75
|
+
tiktokHandle: zod.z.string().max(24, "components.CreateCampaign.Form.errors.tiktokMax" /* TiktokMax */).regex(/^@?[a-zA-Z0-9._]{1,24}$/, "components.CreateCampaign.Form.errors.tiktokInvalid" /* TiktokInvalid */).optional(),
|
|
76
|
+
youtubeHandle: zod.z.string().max(50, "components.CreateCampaign.Form.errors.youtubeMax" /* YoutubeMax */).regex(/^@?[a-zA-Z0-9._]{1,50}$/, "components.CreateCampaign.Form.errors.youtubeInvalid" /* YoutubeInvalid */).optional()
|
|
77
|
+
}), "formCampaignSchema");
|
|
78
|
+
|
|
79
|
+
exports.CREATE_CAMPAIGN_ERRORS = CREATE_CAMPAIGN_ERRORS;
|
|
80
|
+
exports.formCampaignSchema = formCampaignSchema;
|
|
81
|
+
//# sourceMappingURL=index.cjs.map
|
|
82
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/campaign/enums.ts","../../src/campaign/schemas.ts"],"names":["CREATE_CAMPAIGN_ERRORS","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","/* eslint-disable no-magic-numbers */\nimport { z } from 'zod';\n\nimport { CREATE_CAMPAIGN_ERRORS as ERR } 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 */\nexport const formCampaignSchema = ({ maxFunding }: { maxFunding: number }): z.ZodType =>\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._]{1,24}$/, ERR.TiktokInvalid)\n .optional(),\n youtubeHandle: z\n .string()\n .max(50, ERR.YoutubeMax)\n .regex(/^@?[a-zA-Z0-9._]{1,50}$/, ERR.YoutubeInvalid)\n .optional(),\n });\n"]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
// @plyaz package - Built with tsup
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
|
+
|
|
7
|
+
// src/campaign/enums.ts
|
|
8
|
+
var CREATE_CAMPAIGN_ERRORS = /* @__PURE__ */ ((CREATE_CAMPAIGN_ERRORS2) => {
|
|
9
|
+
CREATE_CAMPAIGN_ERRORS2["TitleRequired"] = "components.CreateCampaign.Form.errors.titleRequired";
|
|
10
|
+
CREATE_CAMPAIGN_ERRORS2["TitleMax"] = "components.CreateCampaign.Form.errors.titleMax";
|
|
11
|
+
CREATE_CAMPAIGN_ERRORS2["SubtitleRequired"] = "components.CreateCampaign.Form.errors.subtitleRequired";
|
|
12
|
+
CREATE_CAMPAIGN_ERRORS2["SubtitleMax"] = "components.CreateCampaign.Form.errors.subtitleMax";
|
|
13
|
+
CREATE_CAMPAIGN_ERRORS2["CampaignImageRequired"] = "components.CreateCampaign.Form.errors.campaignImageRequired";
|
|
14
|
+
CREATE_CAMPAIGN_ERRORS2["StartDateRequired"] = "components.CreateCampaign.Form.errors.startDateRequired";
|
|
15
|
+
CREATE_CAMPAIGN_ERRORS2["StartDateInvalid"] = "components.CreateCampaign.Form.errors.startDateInvalid";
|
|
16
|
+
CREATE_CAMPAIGN_ERRORS2["StartDateFuture"] = "components.CreateCampaign.Form.errors.startDateFuture";
|
|
17
|
+
CREATE_CAMPAIGN_ERRORS2["DurationRequired"] = "components.CreateCampaign.Form.errors.durationRequired";
|
|
18
|
+
CREATE_CAMPAIGN_ERRORS2["StoryRequired"] = "components.CreateCampaign.Form.errors.storyRequired";
|
|
19
|
+
CREATE_CAMPAIGN_ERRORS2["StoryMax"] = "components.CreateCampaign.Form.errors.storyMax";
|
|
20
|
+
CREATE_CAMPAIGN_ERRORS2["VideoInvalidProvider"] = "components.CreateCampaign.Form.errors.videoInvalidProvider";
|
|
21
|
+
CREATE_CAMPAIGN_ERRORS2["FundingRequired"] = "components.CreateCampaign.Form.errors.fundingRequired";
|
|
22
|
+
CREATE_CAMPAIGN_ERRORS2["FundingRange"] = "components.CreateCampaign.Form.errors.fundingRange";
|
|
23
|
+
CREATE_CAMPAIGN_ERRORS2["InstagramMax"] = "components.CreateCampaign.Form.errors.instagramMax";
|
|
24
|
+
CREATE_CAMPAIGN_ERRORS2["InstagramInvalid"] = "components.CreateCampaign.Form.errors.instagramInvalid";
|
|
25
|
+
CREATE_CAMPAIGN_ERRORS2["TiktokMax"] = "components.CreateCampaign.Form.errors.tiktokMax";
|
|
26
|
+
CREATE_CAMPAIGN_ERRORS2["TiktokInvalid"] = "components.CreateCampaign.Form.errors.tiktokInvalid";
|
|
27
|
+
CREATE_CAMPAIGN_ERRORS2["YoutubeMax"] = "components.CreateCampaign.Form.errors.youtubeMax";
|
|
28
|
+
CREATE_CAMPAIGN_ERRORS2["YoutubeInvalid"] = "components.CreateCampaign.Form.errors.youtubeInvalid";
|
|
29
|
+
return CREATE_CAMPAIGN_ERRORS2;
|
|
30
|
+
})(CREATE_CAMPAIGN_ERRORS || {});
|
|
31
|
+
var formCampaignSchema = /* @__PURE__ */ __name(({ maxFunding }) => z.object({
|
|
32
|
+
title: z.string().min(1, "components.CreateCampaign.Form.errors.titleRequired" /* TitleRequired */).max(60, "components.CreateCampaign.Form.errors.titleMax" /* TitleMax */),
|
|
33
|
+
subtitle: z.string().min(1, "components.CreateCampaign.Form.errors.subtitleRequired" /* SubtitleRequired */).max(200, "components.CreateCampaign.Form.errors.subtitleMax" /* SubtitleMax */),
|
|
34
|
+
campaignImage: z.any().refine((val) => val instanceof File, {
|
|
35
|
+
message: "components.CreateCampaign.Form.errors.campaignImageRequired" /* CampaignImageRequired */
|
|
36
|
+
}),
|
|
37
|
+
startDate: z.date({
|
|
38
|
+
error: "components.CreateCampaign.Form.errors.startDateRequired" /* StartDateRequired */
|
|
39
|
+
}).refine((date) => date instanceof Date && !isNaN(date.getTime()), {
|
|
40
|
+
message: "components.CreateCampaign.Form.errors.startDateInvalid" /* StartDateInvalid */
|
|
41
|
+
}).refine((date) => date >= /* @__PURE__ */ new Date(), {
|
|
42
|
+
message: "components.CreateCampaign.Form.errors.startDateFuture" /* StartDateFuture */
|
|
43
|
+
}),
|
|
44
|
+
duration: z.union([z.literal(30), z.literal(60), z.literal(90)]).nullable().refine((val) => val !== null, {
|
|
45
|
+
message: "components.CreateCampaign.Form.errors.durationRequired" /* DurationRequired */
|
|
46
|
+
}),
|
|
47
|
+
story: z.string().min(1, "components.CreateCampaign.Form.errors.storyRequired" /* StoryRequired */).max(1e4, "components.CreateCampaign.Form.errors.storyMax" /* StoryMax */),
|
|
48
|
+
videoHighlight: z.string().refine(
|
|
49
|
+
(url) => {
|
|
50
|
+
if (!url || url.trim() === "") return true;
|
|
51
|
+
try {
|
|
52
|
+
const urlObj = new URL(url);
|
|
53
|
+
const hostname = urlObj.hostname.toLowerCase();
|
|
54
|
+
return hostname.includes("youtube.com") || hostname.includes("youtu.be") || hostname.includes("tiktok.com") || hostname.includes("vimeo.com");
|
|
55
|
+
} catch {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
message: "components.CreateCampaign.Form.errors.videoInvalidProvider" /* VideoInvalidProvider */
|
|
61
|
+
}
|
|
62
|
+
).optional(),
|
|
63
|
+
fundingTarget: z.string().min(1, "components.CreateCampaign.Form.errors.fundingRequired" /* FundingRequired */).refine(
|
|
64
|
+
(val) => {
|
|
65
|
+
const num = Number.parseFloat(val ?? "");
|
|
66
|
+
return !isNaN(num) && num > 0 && num <= maxFunding;
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
message: "components.CreateCampaign.Form.errors.fundingRange" /* FundingRange */
|
|
70
|
+
}
|
|
71
|
+
),
|
|
72
|
+
instagramHandle: z.string().max(30, "components.CreateCampaign.Form.errors.instagramMax" /* InstagramMax */).regex(/^@?[a-zA-Z0-9._]{1,30}$/, "components.CreateCampaign.Form.errors.instagramInvalid" /* InstagramInvalid */).optional(),
|
|
73
|
+
tiktokHandle: z.string().max(24, "components.CreateCampaign.Form.errors.tiktokMax" /* TiktokMax */).regex(/^@?[a-zA-Z0-9._]{1,24}$/, "components.CreateCampaign.Form.errors.tiktokInvalid" /* TiktokInvalid */).optional(),
|
|
74
|
+
youtubeHandle: z.string().max(50, "components.CreateCampaign.Form.errors.youtubeMax" /* YoutubeMax */).regex(/^@?[a-zA-Z0-9._]{1,50}$/, "components.CreateCampaign.Form.errors.youtubeInvalid" /* YoutubeInvalid */).optional()
|
|
75
|
+
}), "formCampaignSchema");
|
|
76
|
+
|
|
77
|
+
export { CREATE_CAMPAIGN_ERRORS, formCampaignSchema };
|
|
78
|
+
//# sourceMappingURL=index.js.map
|
|
79
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/campaign/enums.ts","../../src/campaign/schemas.ts"],"names":["CREATE_CAMPAIGN_ERRORS"],"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","/* eslint-disable no-magic-numbers */\nimport { z } from 'zod';\n\nimport { CREATE_CAMPAIGN_ERRORS as ERR } 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 */\nexport const formCampaignSchema = ({ maxFunding }: { maxFunding: number }): z.ZodType =>\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._]{1,24}$/, ERR.TiktokInvalid)\n .optional(),\n youtubeHandle: z\n .string()\n .max(50, ERR.YoutubeMax)\n .regex(/^@?[a-zA-Z0-9._]{1,50}$/, ERR.YoutubeInvalid)\n .optional(),\n });\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Zod schema for campaign creation form validation.
|
|
4
|
+
* Validates all required fields for creating a new campaign including:
|
|
5
|
+
* - Basic info (title, subtitle, image)
|
|
6
|
+
* - Timeline (start date, duration)
|
|
7
|
+
* - Content (story, video highlight)
|
|
8
|
+
* - Funding target
|
|
9
|
+
* - Social media handles
|
|
10
|
+
*
|
|
11
|
+
* @param config - Configuration object
|
|
12
|
+
* @param config.maxFunding - Maximum funding amount allowed for campaigns
|
|
13
|
+
*/
|
|
14
|
+
export declare const formCampaignSchema: ({ maxFunding }: {
|
|
15
|
+
maxFunding: number;
|
|
16
|
+
}) => z.ZodType;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { z } from 'zod';
|
|
2
|
+
import type { formCampaignSchema } from './schemas';
|
|
3
|
+
import type { USER_TYPE } from '../payments';
|
|
4
|
+
/**
|
|
5
|
+
* Type inferred from the campaign form schema for form validation
|
|
6
|
+
*/
|
|
7
|
+
export type FormCampaignInput = z.infer<typeof formCampaignSchema>;
|
|
8
|
+
/**
|
|
9
|
+
* Represents a single data item in the campaign overview
|
|
10
|
+
*/
|
|
11
|
+
export interface OverviewDataItem {
|
|
12
|
+
/** Display title for the data item */
|
|
13
|
+
title: string;
|
|
14
|
+
/** String value to display */
|
|
15
|
+
value: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Campaign overview data structure containing user type and associated data
|
|
19
|
+
*/
|
|
20
|
+
export interface OverviewData {
|
|
21
|
+
/** Type of user (athlete or fan) */
|
|
22
|
+
userType: USER_TYPE;
|
|
23
|
+
/** Array of overview data items */
|
|
24
|
+
data: OverviewDataItem[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Campaign form data structure containing all required fields for campaign creation
|
|
28
|
+
*/
|
|
29
|
+
export interface FormData {
|
|
30
|
+
/** Campaign title */
|
|
31
|
+
title: string;
|
|
32
|
+
/** Campaign subtitle/description */
|
|
33
|
+
subtitle: string;
|
|
34
|
+
/** Campaign main image file */
|
|
35
|
+
campaignImage: File | null;
|
|
36
|
+
/** Campaign start date */
|
|
37
|
+
startDate: Date | undefined;
|
|
38
|
+
/** Campaign duration in days (30, 60, or 90) */
|
|
39
|
+
duration: number | null;
|
|
40
|
+
/** Campaign story/description text */
|
|
41
|
+
story: string;
|
|
42
|
+
/** Video highlight URL (YouTube, TikTok, Vimeo) */
|
|
43
|
+
videoHighlight: string;
|
|
44
|
+
/** Funding target amount as string */
|
|
45
|
+
fundingTarget: string;
|
|
46
|
+
/** Instagram handle (optional) */
|
|
47
|
+
instagramHandle: string;
|
|
48
|
+
/** TikTok handle (optional) */
|
|
49
|
+
tiktokHandle: string;
|
|
50
|
+
/** YouTube handle (optional) */
|
|
51
|
+
youtubeHandle: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Draft campaign data extending FormData with save timestamp
|
|
55
|
+
*/
|
|
56
|
+
export interface DraftCampaignData extends FormData {
|
|
57
|
+
/** Timestamp when the draft was last saved */
|
|
58
|
+
lastSavedAt: Date;
|
|
59
|
+
}
|
package/dist/db/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/db/dbEnums.ts","../../src/db/dbConstant.ts"],"names":["ADAPTERS","DATABASE_EVENT_TYPE","REPLICA_STRATEGY","DB_POOL_EVENTS","ALERT_SEVERITY","ALERT_SOURCE","AUDIT_OPERATION","ADAPTER_TYPES"],"mappings":";;;;;AAiFO,IAAK,QAAA,qBAAAA,SAAAA,KAAL;
|
|
1
|
+
{"version":3,"sources":["../../src/db/dbEnums.ts","../../src/db/dbConstant.ts"],"names":["ADAPTERS","DATABASE_EVENT_TYPE","REPLICA_STRATEGY","DB_POOL_EVENTS","ALERT_SEVERITY","ALERT_SOURCE","AUDIT_OPERATION","ADAPTER_TYPES"],"mappings":";;;;;AAiFO,IAAK,QAAA,qBAAAA,SAAAA,KAAL;AAEL,EAAAA,UAAA,UAAA,CAAA,GAAW,UAAA;AAGX,EAAAA,UAAA,SAAA,CAAA,GAAU,SAAA;AAGV,EAAAA,UAAA,UAAA,CAAA,GAAW,UAAA;AAGX,EAAAA,UAAA,KAAA,CAAA,GAAM,KAAA;AAXI,EAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA;AAeL,IAAK,mBAAA,qBAAAC,oBAAAA,KAAL;AACL,EAAAA,qBAAA,aAAA,CAAA,GAAc,aAAA;AACd,EAAAA,qBAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,qBAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,qBAAA,mBAAA,CAAA,GAAoB,mBAAA;AACpB,EAAAA,qBAAA,kBAAA,CAAA,GAAmB,kBAAA;AACnB,EAAAA,qBAAA,qBAAA,CAAA,GAAsB,qBAAA;AACtB,EAAAA,qBAAA,cAAA,CAAA,GAAe,cAAA;AAPL,EAAA,OAAAA,oBAAAA;AAAA,CAAA,EAAA,mBAAA,IAAA,EAAA;AAaL,IAAK,gBAAA,qBAAAC,iBAAAA,KAAL;AAEL,EAAAA,kBAAA,SAAA,CAAA,GAAU,SAAA;AAEV,EAAAA,kBAAA,SAAA,CAAA,GAAU,SAAA;AAEV,EAAAA,kBAAA,SAAA,CAAA,GAAU,SAAA;AAEV,EAAAA,kBAAA,SAAA,CAAA,GAAU,SAAA;AARA,EAAA,OAAAA,iBAAAA;AAAA,CAAA,EAAA,gBAAA,IAAA,EAAA;AAcL,IAAK,cAAA,qBAAAC,eAAAA,KAAL;AACL,EAAAA,gBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,gBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,gBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,gBAAA,QAAA,CAAA,GAAS,QAAA;AAJC,EAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;AAUL,IAAK,cAAA,qBAAAC,eAAAA,KAAL;AACL,EAAAA,gBAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,gBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,gBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,gBAAA,MAAA,CAAA,GAAO,MAAA;AAJG,EAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;AAUL,IAAK,YAAA,qBAAAC,aAAAA,KAAL;AACL,EAAAA,cAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,cAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,cAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,cAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,cAAA,QAAA,CAAA,GAAS,QAAA;AALC,EAAA,OAAAA,aAAAA;AAAA,CAAA,EAAA,YAAA,IAAA,EAAA;AAWL,IAAK,eAAA,qBAAAC,gBAAAA,KAAL;AACL,EAAAA,iBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,iBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,iBAAA,QAAA,CAAA,GAAS,QAAA;AAHC,EAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;AASL,IAAK,aAAA,qBAAAC,cAAAA,KAAL;AACL,EAAAA,eAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,eAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,eAAA,KAAA,CAAA,GAAM,KAAA;AAHI,EAAA,OAAAA,cAAAA;AAAA,CAAA,EAAA,aAAA,IAAA,EAAA;;;AC5JL,IAAM,mBAAA,GAAsB;AAAA;AAAA,EAEjC,SAAA,EAAW,aAAA;AAAA;AAAA,EAGX,SAAA,EAAW,EAAA;AAAA;AAAA,EAGX,qBAAA,EAAuB;AACzB;AAKO,IAAM,aAAA,GAAgB;AAAA,EAC3B,eAAA,EAAiB,iBAAA;AAAA,EACjB,UAAA,EAAY,YAAA;AAAA,EACZ,WAAA,EAAa;AACf","file":"index.cjs","sourcesContent":["/**\n * @fileoverview Database adapter type definitions\n *\n * Defines the enumeration of supported database adapter types used throughout\n * the database package. This enum provides type-safe identification of different\n * database integrations and is used in configuration, factory methods, and\n * adapter selection logic.\n *\n * **Application Flow Context:**\n * ```\n * Configuration → ADAPTERS Enum → AdapterFactory → Concrete Adapter\n * ↓ ↓ ↓ ↓\n * User Config → Type Safety → Adapter Creation → Database Connection\n * ```\n *\n * **Adapter Types:**\n * - **DRIZZLE**: Type-safe ORM with excellent TypeScript support\n * - **SUPABASE**: Hosted PostgreSQL with real-time capabilities\n * - **SQL**: Raw SQL execution for maximum control\n * - **DATABASE**: Generic fallback adapter\n *\n * @example\n * ```typescript\n * // Adapter selection in configuration\n * const config = {\n * adapter: ADAPTERS.DRIZZLE,\n * connectionString: process.env.DATABASE_URL\n * };\n *\n * // Type-safe adapter factory usage\n * const adapter = AdapterFactory.create(ADAPTERS.SUPABASE, supabaseConfig);\n *\n * // Switch statement with exhaustive checking\n * switch (config.adapter) {\n * case ADAPTERS.DRIZZLE:\n * // Handle Drizzle-specific logic\n * break;\n * case ADAPTERS.SUPABASE:\n * // Handle Supabase-specific logic\n * break;\n * case ADAPTERS.SQL:\n * // Handle SQL-specific logic\n * break;\n * default:\n * // TypeScript ensures all cases are handled\n * throw new Error(`Unsupported adapter: ${config.adapter}`);\n * }\n * ```\n *\n */\n/**\n * @enum ADAPTERS\n * @description\n * Enumeration of supported database adapter types.\n *\n * This enum provides type-safe identification of different database integrations\n * and is used throughout the package for configuration, factory methods, and\n * adapter selection. Each adapter type represents a different approach to\n * database connectivity and operations.\n *\n * **Adapter Characteristics:**\n * - **DATABASE**: Generic fallback, minimal functionality\n * - **DRIZZLE**: Full ORM with type safety and query building\n * - **SUPABASE**: Hosted solution with real-time and auth features\n * - **SQL**: Raw SQL for performance-critical applications\n *\n * @example\n * ```typescript\n * // Configuration with adapter selection\n * const configs = {\n * development: { adapter: ADAPTERS.DRIZZLE },\n * production: { adapter: ADAPTERS.SUPABASE },\n * performance: { adapter: ADAPTERS.SQL }\n * };\n *\n * // Type-safe adapter validation\n * function validateAdapter(adapter: ADAPTERS): boolean {\n * return Object.values(ADAPTERS).includes(adapter);\n * }\n * ```\n */\nexport enum ADAPTERS {\n /** Generic database adapter (default when no specific integration is set) */\n DATABASE = 'database',\n\n /** Drizzle ORM adapter (PostgreSQL, MySQL, SQLite, etc.) */\n DRIZZLE = 'drizzle',\n\n /** Supabase adapter (PostgreSQL backend with REST + Realtime APIs) */\n SUPABASE = 'supabase',\n\n /** Raw SQL adapter (direct database queries without ORM) */\n SQL = 'sql',\n}\n\n// Event type enum\nexport enum DATABASE_EVENT_TYPE {\n BeforeQuery = 'beforeQuery',\n AfterQuery = 'afterQuery',\n QueryError = 'queryError',\n BeforeTransaction = 'beforeTransaction',\n AfterTransaction = 'afterTransaction',\n TransactionRollback = 'transactionRollback',\n HealthChange = 'healthChange',\n}\n\n/**\n * Strategy options for replica selection.\n */\nexport enum REPLICA_STRATEGY {\n /** Always use primary database */\n PRIMARY = 'primary',\n /** Use any available replica */\n REPLICA = 'replica',\n /** Use geographically closest replica */\n CLOSEST = 'closest',\n /** Use fastest responding replica */\n FASTEST = 'fastest',\n}\n\n/**\n * Enum for pool event types.\n */\nexport enum DB_POOL_EVENTS {\n CONNECT = 'connect',\n ACQUIRE = 'acquire',\n RELEASE = 'release',\n REMOVE = 'remove',\n}\n\n/**\n * Alert severity levels\n */\nexport enum ALERT_SEVERITY {\n CRITICAL = 'critical',\n ERROR = 'error',\n WARNING = 'warning',\n INFO = 'info',\n}\n\n/**\n * Alert source types\n */\nexport enum ALERT_SOURCE {\n DATABASE = 'database',\n POOL = 'pool',\n REPLICA = 'replica',\n CACHE = 'cache',\n BACKUP = 'backup',\n}\n\n/**\n * Audit operation types\n */\nexport enum AUDIT_OPERATION {\n CREATE = 'CREATE',\n UPDATE = 'UPDATE',\n DELETE = 'DELETE',\n}\n\n/**\n * Database Adapter Types - Enum for adapter selection\n */\nexport enum ADAPTER_TYPES {\n DRIZZLE = 'drizzle',\n SUPABASE = 'supabase',\n SQL = 'sql',\n}\n","/**\n * Encryption Extension Constants\n *\n * Centralized constants for encryption configuration to prevent\n * hardcoded values and ensure consistency across the codebase.\n */\n\nexport const ENCRYPTION_DEFAULTS = {\n /** Default encryption algorithm - AES-256-GCM provides authenticated encryption */\n ALGORITHM: 'aes-256-gcm' as const,\n\n /** IV length for AES-256-GCM in bytes */\n IV_LENGTH: 16,\n\n /** Expected parts in encrypted text format (iv:authTag:encrypted) */\n ENCRYPTED_PARTS_COUNT: 3,\n} as const;\n\n/**\n * Alert rule IDs\n */\nexport const ALERT_RULE_ID = {\n POOL_EXHAUSTION: 'pool-exhaustion',\n SLOW_QUERY: 'slow-query',\n REPLICA_LAG: 'replica-lag',\n} as const;\n"]}
|
package/dist/db/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/db/dbEnums.ts","../../src/db/dbConstant.ts"],"names":["ADAPTERS","DATABASE_EVENT_TYPE","REPLICA_STRATEGY","DB_POOL_EVENTS","ALERT_SEVERITY","ALERT_SOURCE","AUDIT_OPERATION","ADAPTER_TYPES"],"mappings":";;;AAiFO,IAAK,QAAA,qBAAAA,SAAAA,KAAL;
|
|
1
|
+
{"version":3,"sources":["../../src/db/dbEnums.ts","../../src/db/dbConstant.ts"],"names":["ADAPTERS","DATABASE_EVENT_TYPE","REPLICA_STRATEGY","DB_POOL_EVENTS","ALERT_SEVERITY","ALERT_SOURCE","AUDIT_OPERATION","ADAPTER_TYPES"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @fileoverview Database adapter type definitions\n *\n * Defines the enumeration of supported database adapter types used throughout\n * the database package. This enum provides type-safe identification of different\n * database integrations and is used in configuration, factory methods, and\n * adapter selection logic.\n *\n * **Application Flow Context:**\n * ```\n * Configuration → ADAPTERS Enum → AdapterFactory → Concrete Adapter\n * ↓ ↓ ↓ ↓\n * User Config → Type Safety → Adapter Creation → Database Connection\n * ```\n *\n * **Adapter Types:**\n * - **DRIZZLE**: Type-safe ORM with excellent TypeScript support\n * - **SUPABASE**: Hosted PostgreSQL with real-time capabilities\n * - **SQL**: Raw SQL execution for maximum control\n * - **DATABASE**: Generic fallback adapter\n *\n * @example\n * ```typescript\n * // Adapter selection in configuration\n * const config = {\n * adapter: ADAPTERS.DRIZZLE,\n * connectionString: process.env.DATABASE_URL\n * };\n *\n * // Type-safe adapter factory usage\n * const adapter = AdapterFactory.create(ADAPTERS.SUPABASE, supabaseConfig);\n *\n * // Switch statement with exhaustive checking\n * switch (config.adapter) {\n * case ADAPTERS.DRIZZLE:\n * // Handle Drizzle-specific logic\n * break;\n * case ADAPTERS.SUPABASE:\n * // Handle Supabase-specific logic\n * break;\n * case ADAPTERS.SQL:\n * // Handle SQL-specific logic\n * break;\n * default:\n * // TypeScript ensures all cases are handled\n * throw new Error(`Unsupported adapter: ${config.adapter}`);\n * }\n * ```\n *\n */\n/**\n * @enum ADAPTERS\n * @description\n * Enumeration of supported database adapter types.\n *\n * This enum provides type-safe identification of different database integrations\n * and is used throughout the package for configuration, factory methods, and\n * adapter selection. Each adapter type represents a different approach to\n * database connectivity and operations.\n *\n * **Adapter Characteristics:**\n * - **DATABASE**: Generic fallback, minimal functionality\n * - **DRIZZLE**: Full ORM with type safety and query building\n * - **SUPABASE**: Hosted solution with real-time and auth features\n * - **SQL**: Raw SQL for performance-critical applications\n *\n * @example\n * ```typescript\n * // Configuration with adapter selection\n * const configs = {\n * development: { adapter: ADAPTERS.DRIZZLE },\n * production: { adapter: ADAPTERS.SUPABASE },\n * performance: { adapter: ADAPTERS.SQL }\n * };\n *\n * // Type-safe adapter validation\n * function validateAdapter(adapter: ADAPTERS): boolean {\n * return Object.values(ADAPTERS).includes(adapter);\n * }\n * ```\n */\nexport enum ADAPTERS {\n /** Generic database adapter (default when no specific integration is set) */\n DATABASE = 'database',\n\n /** Drizzle ORM adapter (PostgreSQL, MySQL, SQLite, etc.) */\n DRIZZLE = 'drizzle',\n\n /** Supabase adapter (PostgreSQL backend with REST + Realtime APIs) */\n SUPABASE = 'supabase',\n\n /** Raw SQL adapter (direct database queries without ORM) */\n SQL = 'sql',\n}\n\n// Event type enum\nexport enum DATABASE_EVENT_TYPE {\n BeforeQuery = 'beforeQuery',\n AfterQuery = 'afterQuery',\n QueryError = 'queryError',\n BeforeTransaction = 'beforeTransaction',\n AfterTransaction = 'afterTransaction',\n TransactionRollback = 'transactionRollback',\n HealthChange = 'healthChange',\n}\n\n/**\n * Strategy options for replica selection.\n */\nexport enum REPLICA_STRATEGY {\n /** Always use primary database */\n PRIMARY = 'primary',\n /** Use any available replica */\n REPLICA = 'replica',\n /** Use geographically closest replica */\n CLOSEST = 'closest',\n /** Use fastest responding replica */\n FASTEST = 'fastest',\n}\n\n/**\n * Enum for pool event types.\n */\nexport enum DB_POOL_EVENTS {\n CONNECT = 'connect',\n ACQUIRE = 'acquire',\n RELEASE = 'release',\n REMOVE = 'remove',\n}\n\n/**\n * Alert severity levels\n */\nexport enum ALERT_SEVERITY {\n CRITICAL = 'critical',\n ERROR = 'error',\n WARNING = 'warning',\n INFO = 'info',\n}\n\n/**\n * Alert source types\n */\nexport enum ALERT_SOURCE {\n DATABASE = 'database',\n POOL = 'pool',\n REPLICA = 'replica',\n CACHE = 'cache',\n BACKUP = 'backup',\n}\n\n/**\n * Audit operation types\n */\nexport enum AUDIT_OPERATION {\n CREATE = 'CREATE',\n UPDATE = 'UPDATE',\n DELETE = 'DELETE',\n}\n\n/**\n * Database Adapter Types - Enum for adapter selection\n */\nexport enum ADAPTER_TYPES {\n DRIZZLE = 'drizzle',\n SUPABASE = 'supabase',\n SQL = 'sql',\n}\n","/**\n * Encryption Extension Constants\n *\n * Centralized constants for encryption configuration to prevent\n * hardcoded values and ensure consistency across the codebase.\n */\n\nexport const ENCRYPTION_DEFAULTS = {\n /** Default encryption algorithm - AES-256-GCM provides authenticated encryption */\n ALGORITHM: 'aes-256-gcm' as const,\n\n /** IV length for AES-256-GCM in bytes */\n IV_LENGTH: 16,\n\n /** Expected parts in encrypted text format (iv:authTag:encrypted) */\n ENCRYPTED_PARTS_COUNT: 3,\n} as const;\n\n/**\n * Alert rule IDs\n */\nexport const ALERT_RULE_ID = {\n POOL_EXHAUSTION: 'pool-exhaustion',\n SLOW_QUERY: 'slow-query',\n REPLICA_LAG: 'replica-lag',\n} as const;\n"]}
|
package/dist/errors/codes.d.ts
CHANGED
|
@@ -185,6 +185,14 @@ export declare const ERROR_CODES: {
|
|
|
185
185
|
readonly DB_INVALID_BETWEEN_OPERATOR: "DB_INVALID_BETWEEN_OPERATOR";
|
|
186
186
|
readonly DB_INVALID_IN_OPERATOR: "DB_INVALID_IN_OPERATOR";
|
|
187
187
|
readonly DB_INVALID_COUNT: "DB_INVALID_COUNT";
|
|
188
|
+
readonly DB_CONNECTION_FAILED: "DB_CONNECTION_FAILED";
|
|
189
|
+
readonly DB_TIMEOUT: "DB_TIMEOUT";
|
|
190
|
+
readonly DB_CONSTRAINT_VIOLATION: "DB_CONSTRAINT_VIOLATION";
|
|
191
|
+
readonly DB_DEADLOCK: "DB_DEADLOCK";
|
|
192
|
+
readonly DB_DUPLICATE_ENTRY: "DB_DUPLICATE_ENTRY";
|
|
193
|
+
readonly DB_ENTITY_NOT_FOUND: "DB_ENTITY_NOT_FOUND";
|
|
194
|
+
readonly DB_MIGRATION_FAILED: "DB_MIGRATION_FAILED";
|
|
195
|
+
readonly DB_UNKNOWN_ERROR: "DB_UNKNOWN_ERROR";
|
|
188
196
|
readonly PAYMENT_REFUND_FAILED: "payment.refund.failed";
|
|
189
197
|
readonly PAYMENT_REFUND_NOT_FOUND: "payment.refund.not.found";
|
|
190
198
|
readonly PAYMENT_REFUND_ALREADY_PROCESSED: "payment.refund.already.processed";
|
|
@@ -515,6 +523,14 @@ export declare const DATABASE_ERROR_CODES: {
|
|
|
515
523
|
readonly INVALID_BETWEEN_OPERATOR: "DB_INVALID_BETWEEN_OPERATOR";
|
|
516
524
|
readonly INVALID_IN_OPERATOR: "DB_INVALID_IN_OPERATOR";
|
|
517
525
|
readonly INVALID_COUNT: "DB_INVALID_COUNT";
|
|
526
|
+
readonly CONNECTION_FAILED: "DB_CONNECTION_FAILED";
|
|
527
|
+
readonly CONSTRAINT_VIOLATION: "DB_CONSTRAINT_VIOLATION";
|
|
528
|
+
readonly TIMEOUT: "DB_TIMEOUT";
|
|
529
|
+
readonly DEADLOCK: "DB_DEADLOCK";
|
|
530
|
+
readonly ENTITY_NOT_FOUND: "DB_ENTITY_NOT_FOUND";
|
|
531
|
+
readonly DUPLICATE_ENTRY: "DB_DUPLICATE_ENTRY";
|
|
532
|
+
readonly MIGRATION_FAILED: "DB_MIGRATION_FAILED";
|
|
533
|
+
readonly UNKNOWN_ERROR: "DB_UNKNOWN_ERROR";
|
|
518
534
|
};
|
|
519
535
|
export type ApiErrorCodeValue = (typeof API_ERROR_CODES)[keyof typeof API_ERROR_CODES] | `HTTP_${number}`;
|
|
520
536
|
export type NotificationErrorCodeValue = (typeof NOTIFICATION_ERROR_CODES)[keyof typeof NOTIFICATION_ERROR_CODES];
|
package/dist/errors/index.cjs
CHANGED
|
@@ -550,6 +550,19 @@ var ERROR_CODES = {
|
|
|
550
550
|
DB_INVALID_BETWEEN_OPERATOR: "DB_INVALID_BETWEEN_OPERATOR",
|
|
551
551
|
DB_INVALID_IN_OPERATOR: "DB_INVALID_IN_OPERATOR",
|
|
552
552
|
DB_INVALID_COUNT: "DB_INVALID_COUNT",
|
|
553
|
+
// Connection & Network
|
|
554
|
+
DB_CONNECTION_FAILED: "DB_CONNECTION_FAILED",
|
|
555
|
+
DB_TIMEOUT: "DB_TIMEOUT",
|
|
556
|
+
// Constraints & Integrity
|
|
557
|
+
DB_CONSTRAINT_VIOLATION: "DB_CONSTRAINT_VIOLATION",
|
|
558
|
+
DB_DEADLOCK: "DB_DEADLOCK",
|
|
559
|
+
DB_DUPLICATE_ENTRY: "DB_DUPLICATE_ENTRY",
|
|
560
|
+
// Entity Operations
|
|
561
|
+
DB_ENTITY_NOT_FOUND: "DB_ENTITY_NOT_FOUND",
|
|
562
|
+
// Migration & Schema
|
|
563
|
+
DB_MIGRATION_FAILED: "DB_MIGRATION_FAILED",
|
|
564
|
+
// General
|
|
565
|
+
DB_UNKNOWN_ERROR: "DB_UNKNOWN_ERROR",
|
|
553
566
|
// ===== Payments Package Errors =====
|
|
554
567
|
// Refund
|
|
555
568
|
PAYMENT_REFUND_FAILED: "payment.refund.failed",
|
|
@@ -883,7 +896,15 @@ var DATABASE_ERROR_CODES = {
|
|
|
883
896
|
INVALID_SHELL_ARG: ERROR_CODES.DB_INVALID_SHELL_ARG,
|
|
884
897
|
INVALID_BETWEEN_OPERATOR: ERROR_CODES.DB_INVALID_BETWEEN_OPERATOR,
|
|
885
898
|
INVALID_IN_OPERATOR: ERROR_CODES.DB_INVALID_IN_OPERATOR,
|
|
886
|
-
INVALID_COUNT: ERROR_CODES.DB_INVALID_COUNT
|
|
899
|
+
INVALID_COUNT: ERROR_CODES.DB_INVALID_COUNT,
|
|
900
|
+
CONNECTION_FAILED: ERROR_CODES.DB_CONNECTION_FAILED,
|
|
901
|
+
CONSTRAINT_VIOLATION: ERROR_CODES.DB_CONSTRAINT_VIOLATION,
|
|
902
|
+
TIMEOUT: ERROR_CODES.DB_TIMEOUT,
|
|
903
|
+
DEADLOCK: ERROR_CODES.DB_DEADLOCK,
|
|
904
|
+
ENTITY_NOT_FOUND: ERROR_CODES.DB_ENTITY_NOT_FOUND,
|
|
905
|
+
DUPLICATE_ENTRY: ERROR_CODES.DB_DUPLICATE_ENTRY,
|
|
906
|
+
MIGRATION_FAILED: ERROR_CODES.DB_MIGRATION_FAILED,
|
|
907
|
+
UNKNOWN_ERROR: ERROR_CODES.DB_UNKNOWN_ERROR
|
|
887
908
|
};
|
|
888
909
|
var ERROR_DEFINITIONS = {
|
|
889
910
|
// ===== API Package Error Definitions =====
|
|
@@ -2736,6 +2757,75 @@ var ERROR_DEFINITIONS = {
|
|
|
2736
2757
|
severity: ERROR_SEVERITY.Medium,
|
|
2737
2758
|
retryable: false
|
|
2738
2759
|
},
|
|
2760
|
+
// Connection & Network
|
|
2761
|
+
[ERROR_CODES.DB_CONNECTION_FAILED]: {
|
|
2762
|
+
code: ERROR_CODES.DB_CONNECTION_FAILED,
|
|
2763
|
+
status: HTTP_STATUS.INTERNAL_SERVER_ERROR,
|
|
2764
|
+
category: ERROR_CATEGORY.Network,
|
|
2765
|
+
userMessage: "db.connection.failed",
|
|
2766
|
+
severity: ERROR_SEVERITY.High,
|
|
2767
|
+
retryable: true
|
|
2768
|
+
},
|
|
2769
|
+
[ERROR_CODES.DB_TIMEOUT]: {
|
|
2770
|
+
code: ERROR_CODES.DB_TIMEOUT,
|
|
2771
|
+
status: HTTP_STATUS.REQUEST_TIMEOUT,
|
|
2772
|
+
category: ERROR_CATEGORY.Timeout,
|
|
2773
|
+
userMessage: "db.connection.timeout",
|
|
2774
|
+
severity: ERROR_SEVERITY.High,
|
|
2775
|
+
retryable: true
|
|
2776
|
+
},
|
|
2777
|
+
// Constraints & Integrity
|
|
2778
|
+
[ERROR_CODES.DB_CONSTRAINT_VIOLATION]: {
|
|
2779
|
+
code: ERROR_CODES.DB_CONSTRAINT_VIOLATION,
|
|
2780
|
+
status: HTTP_STATUS.CONFLICT,
|
|
2781
|
+
category: ERROR_CATEGORY.Validation,
|
|
2782
|
+
userMessage: "db.constraint.violation",
|
|
2783
|
+
severity: ERROR_SEVERITY.Medium,
|
|
2784
|
+
retryable: false
|
|
2785
|
+
},
|
|
2786
|
+
[ERROR_CODES.DB_DEADLOCK]: {
|
|
2787
|
+
code: ERROR_CODES.DB_DEADLOCK,
|
|
2788
|
+
status: HTTP_STATUS.CONFLICT,
|
|
2789
|
+
category: ERROR_CATEGORY.Server,
|
|
2790
|
+
userMessage: "db.constraint.deadlock",
|
|
2791
|
+
severity: ERROR_SEVERITY.High,
|
|
2792
|
+
retryable: true
|
|
2793
|
+
},
|
|
2794
|
+
[ERROR_CODES.DB_DUPLICATE_ENTRY]: {
|
|
2795
|
+
code: ERROR_CODES.DB_DUPLICATE_ENTRY,
|
|
2796
|
+
status: HTTP_STATUS.CONFLICT,
|
|
2797
|
+
category: ERROR_CATEGORY.Validation,
|
|
2798
|
+
userMessage: "db.constraint.duplicate_entry",
|
|
2799
|
+
severity: ERROR_SEVERITY.Medium,
|
|
2800
|
+
retryable: false
|
|
2801
|
+
},
|
|
2802
|
+
// Entity Operations
|
|
2803
|
+
[ERROR_CODES.DB_ENTITY_NOT_FOUND]: {
|
|
2804
|
+
code: ERROR_CODES.DB_ENTITY_NOT_FOUND,
|
|
2805
|
+
status: HTTP_STATUS.NOT_FOUND,
|
|
2806
|
+
category: ERROR_CATEGORY.NotFound,
|
|
2807
|
+
userMessage: "db.entity.not_found",
|
|
2808
|
+
severity: ERROR_SEVERITY.Medium,
|
|
2809
|
+
retryable: false
|
|
2810
|
+
},
|
|
2811
|
+
// Migration & Schema
|
|
2812
|
+
[ERROR_CODES.DB_MIGRATION_FAILED]: {
|
|
2813
|
+
code: ERROR_CODES.DB_MIGRATION_FAILED,
|
|
2814
|
+
status: HTTP_STATUS.INTERNAL_SERVER_ERROR,
|
|
2815
|
+
category: ERROR_CATEGORY.Server,
|
|
2816
|
+
userMessage: "db.migration.failed",
|
|
2817
|
+
severity: ERROR_SEVERITY.Critical,
|
|
2818
|
+
retryable: false
|
|
2819
|
+
},
|
|
2820
|
+
// General
|
|
2821
|
+
[ERROR_CODES.DB_UNKNOWN_ERROR]: {
|
|
2822
|
+
code: ERROR_CODES.DB_UNKNOWN_ERROR,
|
|
2823
|
+
status: HTTP_STATUS.INTERNAL_SERVER_ERROR,
|
|
2824
|
+
category: ERROR_CATEGORY.Unknown,
|
|
2825
|
+
userMessage: "db.unknown_error",
|
|
2826
|
+
severity: ERROR_SEVERITY.Medium,
|
|
2827
|
+
retryable: false
|
|
2828
|
+
},
|
|
2739
2829
|
[ERROR_CODES.PAYMENT_ROUTING_RETRY_EXCEEDED]: {
|
|
2740
2830
|
code: ERROR_CODES.PAYMENT_ROUTING_RETRY_EXCEEDED,
|
|
2741
2831
|
status: HTTP_STATUS.TOO_MANY_REQUESTS,
|