@mac777/project-pinecone-schema 1.0.13 → 1.0.15

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.
@@ -1781,13 +1781,29 @@ export declare const approvedEventEditSchema: z.ZodObject<{
1781
1781
  tickets: z.ZodOptional<z.ZodArray<z.ZodObject<{
1782
1782
  _id: z.ZodOptional<z.ZodString>;
1783
1783
  name: z.ZodString;
1784
- price: z.ZodNumber;
1784
+ description: z.ZodOptional<z.ZodString>;
1785
+ price: z.ZodObject<{
1786
+ amount: z.ZodNumber;
1787
+ currency: z.ZodDefault<z.ZodString>;
1788
+ }, "strip", z.ZodTypeAny, {
1789
+ amount: number;
1790
+ currency: string;
1791
+ }, {
1792
+ amount: number;
1793
+ currency?: string | undefined;
1794
+ }>;
1785
1795
  quantity: z.ZodNumber;
1796
+ tier: z.ZodDefault<z.ZodString>;
1786
1797
  benefits: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1787
1798
  wristbandColor: z.ZodDefault<z.ZodString>;
1799
+ accentColor: z.ZodDefault<z.ZodString>;
1800
+ isDark: z.ZodDefault<z.ZodBoolean>;
1801
+ glassMode: z.ZodDefault<z.ZodBoolean>;
1802
+ cornerRadius: z.ZodDefault<z.ZodNumber>;
1803
+ perforationStyle: z.ZodDefault<z.ZodEnum<["solid", "dashed", "dotted"]>>;
1788
1804
  isVisible: z.ZodDefault<z.ZodBoolean>;
1789
1805
  isActive: z.ZodDefault<z.ZodBoolean>;
1790
- limits: z.ZodOptional<z.ZodObject<{
1806
+ limits: z.ZodEffects<z.ZodOptional<z.ZodObject<{
1791
1807
  minPerOrder: z.ZodNumber;
1792
1808
  maxPerOrder: z.ZodNumber;
1793
1809
  }, "strip", z.ZodTypeAny, {
@@ -1796,15 +1812,31 @@ export declare const approvedEventEditSchema: z.ZodObject<{
1796
1812
  }, {
1797
1813
  minPerOrder: number;
1798
1814
  maxPerOrder: number;
1799
- }>>;
1815
+ }>>, {
1816
+ minPerOrder: number;
1817
+ maxPerOrder: number;
1818
+ } | undefined, {
1819
+ minPerOrder: number;
1820
+ maxPerOrder: number;
1821
+ } | undefined>;
1800
1822
  }, "strip", z.ZodTypeAny, {
1801
1823
  name: string;
1802
- price: number;
1824
+ price: {
1825
+ amount: number;
1826
+ currency: string;
1827
+ };
1803
1828
  quantity: number;
1804
1829
  wristbandColor: string;
1830
+ accentColor: string;
1831
+ isDark: boolean;
1832
+ glassMode: boolean;
1833
+ cornerRadius: number;
1834
+ perforationStyle: "solid" | "dashed" | "dotted";
1805
1835
  isVisible: boolean;
1806
1836
  isActive: boolean;
1837
+ tier: string;
1807
1838
  _id?: string | undefined;
1839
+ description?: string | undefined;
1808
1840
  limits?: {
1809
1841
  minPerOrder: number;
1810
1842
  maxPerOrder: number;
@@ -1812,17 +1844,27 @@ export declare const approvedEventEditSchema: z.ZodObject<{
1812
1844
  benefits?: string[] | undefined;
1813
1845
  }, {
1814
1846
  name: string;
1815
- price: number;
1847
+ price: {
1848
+ amount: number;
1849
+ currency?: string | undefined;
1850
+ };
1816
1851
  quantity: number;
1817
1852
  _id?: string | undefined;
1853
+ description?: string | undefined;
1818
1854
  limits?: {
1819
1855
  minPerOrder: number;
1820
1856
  maxPerOrder: number;
1821
1857
  } | undefined;
1822
1858
  wristbandColor?: string | undefined;
1859
+ accentColor?: string | undefined;
1860
+ isDark?: boolean | undefined;
1861
+ glassMode?: boolean | undefined;
1862
+ cornerRadius?: number | undefined;
1863
+ perforationStyle?: "solid" | "dashed" | "dotted" | undefined;
1823
1864
  isVisible?: boolean | undefined;
1824
1865
  isActive?: boolean | undefined;
1825
1866
  benefits?: string[] | undefined;
1867
+ tier?: string | undefined;
1826
1868
  }>, "many">>;
1827
1869
  schedule: z.ZodEffects<z.ZodOptional<z.ZodObject<{
1828
1870
  startDate: z.ZodDate;
@@ -1864,12 +1906,22 @@ export declare const approvedEventEditSchema: z.ZodObject<{
1864
1906
  } | undefined;
1865
1907
  tickets?: {
1866
1908
  name: string;
1867
- price: number;
1909
+ price: {
1910
+ amount: number;
1911
+ currency: string;
1912
+ };
1868
1913
  quantity: number;
1869
1914
  wristbandColor: string;
1915
+ accentColor: string;
1916
+ isDark: boolean;
1917
+ glassMode: boolean;
1918
+ cornerRadius: number;
1919
+ perforationStyle: "solid" | "dashed" | "dotted";
1870
1920
  isVisible: boolean;
1871
1921
  isActive: boolean;
1922
+ tier: string;
1872
1923
  _id?: string | undefined;
1924
+ description?: string | undefined;
1873
1925
  limits?: {
1874
1926
  minPerOrder: number;
1875
1927
  maxPerOrder: number;
@@ -1901,17 +1953,27 @@ export declare const approvedEventEditSchema: z.ZodObject<{
1901
1953
  } | undefined;
1902
1954
  tickets?: {
1903
1955
  name: string;
1904
- price: number;
1956
+ price: {
1957
+ amount: number;
1958
+ currency?: string | undefined;
1959
+ };
1905
1960
  quantity: number;
1906
1961
  _id?: string | undefined;
1962
+ description?: string | undefined;
1907
1963
  limits?: {
1908
1964
  minPerOrder: number;
1909
1965
  maxPerOrder: number;
1910
1966
  } | undefined;
1911
1967
  wristbandColor?: string | undefined;
1968
+ accentColor?: string | undefined;
1969
+ isDark?: boolean | undefined;
1970
+ glassMode?: boolean | undefined;
1971
+ cornerRadius?: number | undefined;
1972
+ perforationStyle?: "solid" | "dashed" | "dotted" | undefined;
1912
1973
  isVisible?: boolean | undefined;
1913
1974
  isActive?: boolean | undefined;
1914
1975
  benefits?: string[] | undefined;
1976
+ tier?: string | undefined;
1915
1977
  }[] | undefined;
1916
1978
  languages?: string[] | undefined;
1917
1979
  }>;
@@ -120,31 +120,48 @@ exports.approvedEventEditSchema = zod_1.z.object({
120
120
  media: media_schema_1.mediaSchema.optional(),
121
121
  // Tickets (full control, no sales yet)
122
122
  tickets: zod_1.z.array(zod_1.z.object({
123
- _id: zod_1.z.string().optional(), // Undefined = new tier
124
- name: zod_1.z.string({ required_error: 'Ticket name is required' }),
125
- price: zod_1.z.number({ required_error: 'Ticket price is required' }).min(0, 'Ticket price cannot be negative'),
126
- quantity: zod_1.z.number({ required_error: 'Ticket quantity is required' }).min(1, 'Ticket quantity must be at least 1'),
127
- benefits: zod_1.z.array(zod_1.z.string()).optional(),
128
- wristbandColor: zod_1.z.string().default('#000000'),
123
+ _id: zod_1.z.string().regex(/^[0-9a-fA-F]{24}$/, 'Invalid ticket ID').optional(), // Undefined = new tier
124
+ name: zod_1.z.string({ required_error: 'Ticket name is required' }).min(1).max(100),
125
+ description: zod_1.z.string().max(500).optional(),
126
+ price: zod_1.z.object({
127
+ amount: zod_1.z.number({ required_error: 'Ticket price amount is required' }).min(0, 'Price cannot be negative').max(1000000, 'Price exceeds maximum'),
128
+ currency: zod_1.z.string().default('BDT')
129
+ }),
130
+ quantity: zod_1.z.number({ required_error: 'Ticket quantity is required' }).int('Quantity must be an integer').min(1, 'Ticket quantity must be at least 1').max(100000, 'Quantity exceeds maximum'),
131
+ tier: zod_1.z.string().min(1).max(50).default('regular'),
132
+ benefits: zod_1.z.array(zod_1.z.string().max(200)).max(20).optional(),
133
+ wristbandColor: zod_1.z.string().regex(/^#[0-9A-Fa-f]{6}$/, 'Invalid color format').default('#4f46e5'),
134
+ accentColor: zod_1.z.string().regex(/^#[0-9A-Fa-f]{6}$/, 'Invalid color format').default('#4f46e5'),
135
+ isDark: zod_1.z.boolean().default(false),
136
+ glassMode: zod_1.z.boolean().default(false),
137
+ cornerRadius: zod_1.z.number().min(0).max(50).default(32),
138
+ perforationStyle: zod_1.z.enum(['solid', 'dashed', 'dotted']).default('solid'),
129
139
  isVisible: zod_1.z.boolean().default(true),
130
140
  isActive: zod_1.z.boolean().default(true),
131
141
  limits: zod_1.z.object({
132
- minPerOrder: zod_1.z.number({ required_error: 'Min per order is required' }).min(1, 'Min per order must be at least 1'),
133
- maxPerOrder: zod_1.z.number({ required_error: 'Max per order is required' }).min(1, 'Max per order must be at least 1')
134
- }).optional()
142
+ minPerOrder: zod_1.z.number({ required_error: 'Min per order is required' }).int().min(1, 'Min per order must be at least 1').max(100),
143
+ maxPerOrder: zod_1.z.number({ required_error: 'Max per order is required' }).int().min(1, 'Max per order must be at least 1').max(100)
144
+ }).optional().refine((data) => {
145
+ if (!data)
146
+ return true;
147
+ return data.maxPerOrder >= data.minPerOrder;
148
+ }, {
149
+ message: 'Max per order must be greater than or equal to min per order',
150
+ path: ['maxPerOrder']
151
+ })
135
152
  })).optional(),
136
153
  // Minor date adjustments (±2 hours)
137
154
  schedule: zod_1.z.object({
138
- startDate: zod_1.z.date(),
139
- endDate: zod_1.z.date()
140
- }).optional().refine(data => {
141
- if (!data?.startDate || !data?.endDate)
142
- return false;
143
- const diff = Math.abs(data?.startDate?.getTime() - data?.endDate?.getTime());
144
- return diff <= 2 * 60 * 60 * 1000;
155
+ startDate: zod_1.z.coerce.date({ required_error: 'Start date is required' }),
156
+ endDate: zod_1.z.coerce.date({ required_error: 'End date is required' })
157
+ }).optional().refine((data) => {
158
+ if (!data)
159
+ return true;
160
+ // Ensure end date is after start date
161
+ return data.endDate > data.startDate;
145
162
  }, {
146
- message: 'Schedule must be within 2 hours of original',
147
- path: ['schedule', 'endDate']
163
+ message: 'End date must be after start date',
164
+ path: ['endDate']
148
165
  })
149
166
  });
150
167
  // Published
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mac777/project-pinecone-schema",
3
- "version": "1.0.13",
3
+ "version": "1.0.15",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "scripts": {
@@ -134,31 +134,47 @@ export const approvedEventEditSchema = z.object({
134
134
 
135
135
  // Tickets (full control, no sales yet)
136
136
  tickets: z.array(z.object({
137
- _id: z.string().optional(), // Undefined = new tier
138
- name: z.string({ required_error: 'Ticket name is required' }),
139
- price: z.number({ required_error: 'Ticket price is required' }).min(0, 'Ticket price cannot be negative'),
140
- quantity: z.number({ required_error: 'Ticket quantity is required' }).min(1, 'Ticket quantity must be at least 1'),
141
- benefits: z.array(z.string()).optional(),
142
- wristbandColor: z.string().default('#000000'),
137
+ _id: z.string().regex(/^[0-9a-fA-F]{24}$/, 'Invalid ticket ID').optional(), // Undefined = new tier
138
+ name: z.string({ required_error: 'Ticket name is required' }).min(1).max(100),
139
+ description: z.string().max(500).optional(),
140
+ price: z.object({
141
+ amount: z.number({ required_error: 'Ticket price amount is required' }).min(0, 'Price cannot be negative').max(1000000, 'Price exceeds maximum'),
142
+ currency: z.string().default('BDT')
143
+ }),
144
+ quantity: z.number({ required_error: 'Ticket quantity is required' }).int('Quantity must be an integer').min(1, 'Ticket quantity must be at least 1').max(100000, 'Quantity exceeds maximum'),
145
+ tier: z.string().min(1).max(50).default('regular'),
146
+ benefits: z.array(z.string().max(200)).max(20).optional(),
147
+ wristbandColor: z.string().regex(/^#[0-9A-Fa-f]{6}$/, 'Invalid color format').default('#4f46e5'),
148
+ accentColor: z.string().regex(/^#[0-9A-Fa-f]{6}$/, 'Invalid color format').default('#4f46e5'),
149
+ isDark: z.boolean().default(false),
150
+ glassMode: z.boolean().default(false),
151
+ cornerRadius: z.number().min(0).max(50).default(32),
152
+ perforationStyle: z.enum(['solid', 'dashed', 'dotted']).default('solid'),
143
153
  isVisible: z.boolean().default(true),
144
154
  isActive: z.boolean().default(true),
145
155
  limits: z.object({
146
- minPerOrder: z.number({ required_error: 'Min per order is required' }).min(1, 'Min per order must be at least 1'),
147
- maxPerOrder: z.number({ required_error: 'Max per order is required' }).min(1, 'Max per order must be at least 1')
148
- }).optional()
156
+ minPerOrder: z.number({ required_error: 'Min per order is required' }).int().min(1, 'Min per order must be at least 1').max(100),
157
+ maxPerOrder: z.number({ required_error: 'Max per order is required' }).int().min(1, 'Max per order must be at least 1').max(100)
158
+ }).optional().refine((data) => {
159
+ if (!data) return true;
160
+ return data.maxPerOrder >= data.minPerOrder;
161
+ }, {
162
+ message: 'Max per order must be greater than or equal to min per order',
163
+ path: ['maxPerOrder']
164
+ })
149
165
  })).optional(),
150
166
 
151
167
  // Minor date adjustments (±2 hours)
152
168
  schedule: z.object({
153
- startDate: z.date(),
154
- endDate: z.date()
155
- }).optional().refine(data => {
156
- if (!data?.startDate || !data?.endDate) return false;
157
- const diff = Math.abs(data?.startDate?.getTime() - data?.endDate?.getTime());
158
- return diff <= 2 * 60 * 60 * 1000;
169
+ startDate: z.coerce.date({ required_error: 'Start date is required' }),
170
+ endDate: z.coerce.date({ required_error: 'End date is required' })
171
+ }).optional().refine((data) => {
172
+ if (!data) return true;
173
+ // Ensure end date is after start date
174
+ return data.endDate > data.startDate;
159
175
  }, {
160
- message: 'Schedule must be within 2 hours of original',
161
- path: ['schedule', 'endDate']
176
+ message: 'End date must be after start date',
177
+ path: ['endDate']
162
178
  })
163
179
  });
164
180