@marmot-systems/common 1.0.0 → 2.0.1

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/index.cjs CHANGED
@@ -22,6 +22,7 @@ var index_exports = {};
22
22
  __export(index_exports, {
23
23
  CustomerFormSchema: () => CustomerFormSchema,
24
24
  ProductFormSchema: () => ProductFormSchema,
25
+ RegisterFormSchema: () => RegisterFormSchema,
25
26
  handleZodCurrency: () => handleZodCurrency,
26
27
  normalizeSpaces: () => normalizeSpaces,
27
28
  removeAllWhitespace: () => removeAllWhitespace,
@@ -31,7 +32,7 @@ __export(index_exports, {
31
32
  });
32
33
  module.exports = __toCommonJS(index_exports);
33
34
 
34
- // src/schemas/customer_schemas.ts
35
+ // src/schemas/companies_schemas.ts
35
36
  var import_zod2 = require("zod");
36
37
 
37
38
  // src/utils/utils.ts
@@ -45,10 +46,10 @@ function handleZodCurrency(minAmount, maxAmount) {
45
46
  return s;
46
47
  }
47
48
  return v;
48
- }, import_zod.z.coerce.number({ message: "Enter a valid number." }).refine(Number.isFinite, { message: "Enter a valid number." })).transform((x) => roundWithPrecision(x, 2)).refine((n) => n >= minAmount, {
49
- message: `Must be greater than ${minAmount}.`
49
+ }, import_zod.z.coerce.number({ error: "Enter a valid number." }).refine(Number.isFinite, { error: "Enter a valid number." })).transform((x) => roundWithPrecision(x, 2)).refine((n) => n >= minAmount, {
50
+ error: `Must be greater than ${minAmount}.`
50
51
  }).refine((n) => n <= maxAmount, {
51
- message: `Exceeds allowed limit ${maxAmount}.`
52
+ error: `Exceeds allowed limit ${maxAmount}.`
52
53
  });
53
54
  }
54
55
  var transformEmptyStringToUndefined = (s) => s.trim() === "" ? void 0 : s;
@@ -80,61 +81,97 @@ function roundWithPrecision(num, precision, opts) {
80
81
  );
81
82
  }
82
83
 
84
+ // src/schemas/companies_schemas.ts
85
+ var iso_country_code = import_zod2.z.enum(["US", "HN"], {
86
+ error: "Country code not supported."
87
+ });
88
+ var user_role = import_zod2.z.enum(["admin", "driver"], {
89
+ error: "User role not supported."
90
+ });
91
+ var RegisterFormSchema = import_zod2.z.strictObject({
92
+ companyData: import_zod2.z.strictObject({
93
+ name: import_zod2.z.string().transform(normalizeSpaces).pipe(
94
+ import_zod2.z.string().min(1, "Company name is required").max(50, "Company name must be at most 50 characters.")
95
+ ),
96
+ address: import_zod2.z.string().transform(normalizeSpaces).pipe(
97
+ import_zod2.z.string().min(1, "Company address is required").max(100, "Company address must be at most 100 characters.")
98
+ ),
99
+ phone_number: import_zod2.z.string().transform(removeAllWhitespace).transform(removeDashesAndPlusSign).refine((s) => /^\d{1,15}$/.test(s), {
100
+ error: "Phone number required and must be from 1 to 15 digits."
101
+ }),
102
+ iso_country_code: import_zod2.z.string().transform(removeAllWhitespace).transform((s) => s.toUpperCase()).pipe(iso_country_code)
103
+ }),
104
+ adminUserData: import_zod2.z.strictObject({
105
+ first_name: import_zod2.z.string().transform(normalizeSpaces).pipe(
106
+ import_zod2.z.string().min(1, "First name is required").max(50, "First name must be at most 50 characters.")
107
+ ),
108
+ last_name: import_zod2.z.string().transform(normalizeSpaces).pipe(
109
+ import_zod2.z.string().min(1, "Last name is required").max(50, "Last name must be at most 50 characters.")
110
+ ),
111
+ email: import_zod2.z.string().transform(removeAllWhitespace).pipe(
112
+ import_zod2.z.email().max(254, "Customer email must be at most 254 characters.").transform((email) => email.toLowerCase())
113
+ ),
114
+ password: import_zod2.z.string().min(8, "Password must be at least 8 characters").max(25, "Password must be at most 25 characters").regex(/[A-Z]/, "Password must contain at least one uppercase letter").regex(/[a-z]/, "Password must contain at least one lowercase letter").regex(/\d/, "Password must contain at least one number").regex(
115
+ /[@$!%*?&#^_+=-]/,
116
+ "Password must contain at least one special character"
117
+ ).regex(/^\S*$/, "Password cannot contain spaces or other whitespace.")
118
+ })
119
+ });
120
+
83
121
  // src/schemas/customer_schemas.ts
84
- var CustomerFormSchema = import_zod2.z.object({
85
- customer_name: import_zod2.z.string().transform(normalizeSpaces).pipe(
86
- import_zod2.z.string().min(1, "Customer name is required").max(50, "Customer name must be at most 50 characters.")
122
+ var import_zod3 = require("zod");
123
+ var CustomerFormSchema = import_zod3.z.strictObject({
124
+ customer_name: import_zod3.z.string().transform(normalizeSpaces).pipe(
125
+ import_zod3.z.string().min(1, "Customer name is required").max(50, "Customer name must be at most 50 characters.")
87
126
  ),
88
- customer_address: import_zod2.z.string().transform(normalizeSpaces).pipe(
89
- import_zod2.z.string().max(100, "Customer address must be at most 100 characters.")
127
+ customer_address: import_zod3.z.string().transform(normalizeSpaces).pipe(
128
+ import_zod3.z.string().max(100, "Customer address must be at most 100 characters.")
90
129
  ).transform(transformEmptyStringToUndefined).optional(),
91
- customer_phone_number: import_zod2.z.string().transform(removeAllWhitespace).transform(removeDashesAndPlusSign).refine((s) => s === "" || /^\d{1,15}$/.test(s), {
92
- message: "Phone number must be from 1 to 15 digits."
130
+ customer_phone_number: import_zod3.z.string().transform(removeAllWhitespace).transform(removeDashesAndPlusSign).refine((s) => s === "" || /^\d{1,15}$/.test(s), {
131
+ error: "Phone number must be from 1 to 15 digits."
93
132
  }).transform(transformEmptyStringToUndefined).optional(),
94
- customer_email_address: import_zod2.z.string().transform(removeAllWhitespace).transform(transformEmptyStringToUndefined).pipe(
95
- import_zod2.z.string().email().max(254, "Customer email must be at most 254 characters.").transform((email) => email.toLowerCase()).optional()
133
+ customer_email_address: import_zod3.z.string().transform(removeAllWhitespace).transform(transformEmptyStringToUndefined).pipe(
134
+ import_zod3.z.email().max(254, "Customer email must be at most 254 characters.").transform((email) => email.toLowerCase()).optional()
96
135
  ).optional(),
97
136
  tax_rate: handleZodCurrency(0, 100)
98
137
  });
99
138
 
100
139
  // src/schemas/product_schemas.ts
101
- var import_zod3 = require("zod");
102
- var ProductFormSchema = import_zod3.z.object({
103
- product_name: import_zod3.z.string().transform(normalizeSpaces).pipe(
104
- import_zod3.z.string().min(1, "Product name is required").max(50, "Product name must be at most 50 characters.")
140
+ var import_zod4 = require("zod");
141
+ var ProductFormSchema = import_zod4.z.strictObject({
142
+ product_name: import_zod4.z.string().transform(normalizeSpaces).pipe(
143
+ import_zod4.z.string().min(1, "Product name is required").max(50, "Product name must be at most 50 characters.")
105
144
  ),
106
- product_description: import_zod3.z.string().transform(normalizeSpaces).pipe(
107
- import_zod3.z.string().max(100, "Product desription must be at most 100 characters.")
145
+ product_description: import_zod4.z.string().transform(normalizeSpaces).pipe(
146
+ import_zod4.z.string().max(100, "Product desription must be at most 100 characters.")
108
147
  ).transform(transformEmptyStringToUndefined).optional(),
109
- product_sku: import_zod3.z.string().transform(normalizeSpaces).pipe(import_zod3.z.string().max(30, "Product SKU must be at most 30 characters.")).transform(transformEmptyStringToUndefined).optional(),
110
- product_upc: import_zod3.z.string().transform((s) => s.replace(/\s+/g, "")).refine((s) => s === "" || /^\d{12}$/.test(s), {
111
- message: "UPC must be exactly 12 digits"
148
+ product_sku: import_zod4.z.string().transform(normalizeSpaces).pipe(import_zod4.z.string().max(30, "Product SKU must be at most 30 characters.")).transform(transformEmptyStringToUndefined).optional(),
149
+ product_upc: import_zod4.z.string().transform((s) => s.replace(/\s+/g, "")).refine((s) => s === "" || /^\d{12}$/.test(s), {
150
+ error: "UPC must be exactly 12 digits"
112
151
  }).transform(transformEmptyStringToUndefined).optional(),
113
- product_gtin_14: import_zod3.z.string().transform((s) => s.replace(/\s+/g, "")).refine((s) => s === "" || /^\d{14}$/.test(s), {
114
- message: "GTIN14 must be exactly 14 digits"
152
+ product_gtin_14: import_zod4.z.string().transform((s) => s.replace(/\s+/g, "")).refine((s) => s === "" || /^\d{14}$/.test(s), {
153
+ error: "GTIN14 must be exactly 14 digits"
115
154
  }).transform(transformEmptyStringToUndefined).optional(),
116
- product_type: import_zod3.z.enum(["unit", "weight", "case"], {
117
- errorMap: () => ({ message: "Product type is required" })
118
- }),
119
- weight_unit: import_zod3.z.preprocess((v) => {
155
+ product_type: import_zod4.z.enum(["unit", "weight", "case"], { error: "" }),
156
+ weight_unit: import_zod4.z.preprocess((v) => {
120
157
  if (v === "") return void 0;
121
158
  if (typeof v === "string") return v.trim().toLowerCase();
122
159
  return v;
123
- }, import_zod3.z.enum(["kg", "lb", "g", "oz"]).optional()),
160
+ }, import_zod4.z.enum(["kg", "lb", "g", "oz"]).optional()),
124
161
  price: handleZodCurrency(1, 99999),
125
162
  cost: handleZodCurrency(1, 99999)
126
- }).strict().superRefine((data, ctx) => {
163
+ }).superRefine((data, ctx) => {
127
164
  if (data.product_type === "weight" && !data.weight_unit) {
128
165
  ctx.addIssue({
129
- code: import_zod3.z.ZodIssueCode.custom,
130
- message: "Weight unit is required.",
166
+ code: "custom",
167
+ error: "Weight unit is required.",
131
168
  path: ["weight_unit"]
132
169
  });
133
170
  }
134
171
  if (data.product_type !== "weight" && typeof data.weight_unit !== "undefined") {
135
172
  ctx.addIssue({
136
- code: import_zod3.z.ZodIssueCode.custom,
137
- message: "Weight unit must be empty",
173
+ code: "custom",
174
+ error: "Weight unit must be empty",
138
175
  path: ["weight_unit"]
139
176
  });
140
177
  }
@@ -143,6 +180,7 @@ var ProductFormSchema = import_zod3.z.object({
143
180
  0 && (module.exports = {
144
181
  CustomerFormSchema,
145
182
  ProductFormSchema,
183
+ RegisterFormSchema,
146
184
  handleZodCurrency,
147
185
  normalizeSpaces,
148
186
  removeAllWhitespace,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/schemas/customer_schemas.ts","../src/utils/utils.ts","../src/schemas/product_schemas.ts"],"sourcesContent":["export * from \"./schemas/customer_schemas\";\nexport * from \"./schemas/product_schemas\";\nexport * from \"./utils/utils\";\n","import { z } from \"zod\";\nimport * as GlobalUtils from \"../utils/utils\";\n\nexport const CustomerFormSchema = z.object({\n customer_name: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z\n .string()\n .min(1, \"Customer name is required\")\n .max(50, \"Customer name must be at most 50 characters.\")\n ),\n\n customer_address: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z.string().max(100, \"Customer address must be at most 100 characters.\")\n )\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n customer_phone_number: z\n .string()\n .transform(GlobalUtils.removeAllWhitespace)\n .transform(GlobalUtils.removeDashesAndPlusSign)\n .refine((s) => s === \"\" || /^\\d{1,15}$/.test(s), {\n message: \"Phone number must be from 1 to 15 digits.\",\n })\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n customer_email_address: z\n .string()\n .transform(GlobalUtils.removeAllWhitespace)\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .pipe(\n z\n .string()\n .email()\n .max(254, \"Customer email must be at most 254 characters.\")\n .transform((email) => email.toLowerCase())\n .optional()\n )\n .optional(),\n\n tax_rate: GlobalUtils.handleZodCurrency(0, 100),\n});\n","import * as GlobalTypes from \"./types\";\nimport { z } from \"zod\";\n\n/**\n * Validates zod currency with precision.\n *\n *\n * @param minAmount\n * @param maxAmount\n * @returns\n */\nexport function handleZodCurrency(minAmount: number, maxAmount: number) {\n return z\n .preprocess((v) => {\n if (v === null || v === undefined) return NaN;\n\n if (typeof v === \"string\") {\n const s = v.replace(/[,\\s]/g, \"\");\n if (s === \"\") return NaN;\n return s;\n }\n\n return v;\n }, z.coerce.number({ message: \"Enter a valid number.\" }).refine(Number.isFinite, { message: \"Enter a valid number.\" }))\n .transform((x) => roundWithPrecision(x, 2))\n .refine((n) => n >= minAmount, {\n message: `Must be greater than ${minAmount}.`,\n })\n .refine((n) => n <= maxAmount, {\n message: `Exceeds allowed limit ${maxAmount}.`,\n });\n}\n\n/**\n * Trims any leading or trailing spaces\n * Transforms empty strings into undefined.\n *\n * @param s\n * @returns\n */\nexport const transformEmptyStringToUndefined = (s: string) =>\n s.trim() === \"\" ? undefined : s;\n\n/**\n * - Collapses any run of whitespace in a string (spaces, tabs, newlines, etc.) into a single ASCII space.\n * - Trims leading and trailing whitespace.\n *\n * @param s\n * @returns\n */\nexport const normalizeSpaces = (s: string) => whitespace(s, \"normalize\");\n\n/**\n * Removes all whitespace from a string\n * @param s\n * @returns\n */\nexport const removeAllWhitespace = (s: string) => whitespace(s, \"remove\");\n\nconst whitespace = (s: string, mode: GlobalTypes.WhitespaceMode) => {\n if (mode === \"remove\") {\n return s.replace(/\\s+/g, \"\");\n }\n\n return s.replace(/\\s+/g, \" \").trim();\n};\n\n/**\n * Removes all dashes and + signs from a string\n * +1-305-555-0123 -> \"13055550123\"\n * 305-555-0123 -> \"3055550123\"\n *\n * @param s\n * @returns\n */\nexport const removeDashesAndPlusSign = (s: string): string =>\n s.replace(/[+-]/g, \"\");\n\n/**\n * Rounds a number to a certain precision.\n * Contract:\n * 1. Number must be finite and non negative.\n * 2. Precision must be finite nonnegative and an integer.\n * 3. Precision must be <= Max precision\n * 4. Returns a number >= 0\n *\n * @param num\n * @param precision\n * @param opts\n * @returns\n */\nexport function roundWithPrecision(\n num: number,\n precision: number,\n opts?: GlobalTypes.ToFixedOptions\n): number {\n const MAX_PRECISION = 2;\n const { roundType = \"half_up\" } = opts ?? {};\n\n if (!Number.isFinite(num) || num < 0) {\n throw new RangeError(\"Number must be finite and greater than 0.\");\n }\n\n if (\n !Number.isFinite(precision) ||\n !Number.isInteger(precision) ||\n precision < 1\n ) {\n throw new RangeError(\"Precision must be a finite integer greater than 0.\");\n }\n\n if (precision > MAX_PRECISION) {\n throw new RangeError(\"Max precision allowed is 2.\");\n }\n\n return Number(\n (+(Math.round(+(num + \"e\" + precision)) + \"e\" + -precision)).toFixed(\n precision\n )\n );\n}\n","import { z } from \"zod\";\nimport * as GlobalUtils from \"../utils/utils\";\n\nexport const ProductFormSchema = z\n .object({\n product_name: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z\n .string()\n .min(1, \"Product name is required\")\n .max(50, \"Product name must be at most 50 characters.\")\n ),\n\n product_description: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z\n .string()\n .max(100, \"Product desription must be at most 100 characters.\")\n )\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n product_sku: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(z.string().max(30, \"Product SKU must be at most 30 characters.\"))\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n product_upc: z\n .string()\n .transform((s) => s.replace(/\\s+/g, \"\"))\n .refine((s) => s === \"\" || /^\\d{12}$/.test(s), {\n message: \"UPC must be exactly 12 digits\",\n })\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n product_gtin_14: z\n .string()\n .transform((s) => s.replace(/\\s+/g, \"\"))\n .refine((s) => s === \"\" || /^\\d{14}$/.test(s), {\n message: \"GTIN14 must be exactly 14 digits\",\n })\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n product_type: z.enum([\"unit\", \"weight\", \"case\"], {\n errorMap: () => ({ message: \"Product type is required\" }),\n }),\n\n weight_unit: z.preprocess((v) => {\n if (v === \"\") return undefined;\n if (typeof v === \"string\") return v.trim().toLowerCase();\n return v;\n }, z.enum([\"kg\", \"lb\", \"g\", \"oz\"]).optional()),\n\n price: GlobalUtils.handleZodCurrency(1, 99_999),\n cost: GlobalUtils.handleZodCurrency(1, 99_999),\n })\n .strict()\n\n .superRefine((data, ctx) => {\n if (data.product_type === \"weight\" && !data.weight_unit) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Weight unit is required.\",\n path: [\"weight_unit\"],\n });\n }\n\n if (\n data.product_type !== \"weight\" &&\n typeof data.weight_unit !== \"undefined\"\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Weight unit must be empty\",\n path: [\"weight_unit\"],\n });\n }\n });\n"],"mappings":"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","names":["import_zod","import_zod"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/schemas/companies_schemas.ts","../src/utils/utils.ts","../src/schemas/customer_schemas.ts","../src/schemas/product_schemas.ts"],"sourcesContent":["export * from \"./schemas/companies_schemas\";\nexport * from \"./schemas/customer_schemas\";\nexport * from \"./schemas/product_schemas\";\nexport * from \"./utils/utils\";\n","import { z } from \"zod\";\nimport * as GlobalUtils from \"../utils/utils\";\n\nconst iso_country_code = z.enum([\"US\", \"HN\"], {\n error: \"Country code not supported.\",\n});\n\nconst user_role = z.enum([\"admin\", \"driver\"], {\n error: \"User role not supported.\",\n});\n\nexport const RegisterFormSchema = z.strictObject({\n companyData: z.strictObject({\n name: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z\n .string()\n .min(1, \"Company name is required\")\n .max(50, \"Company name must be at most 50 characters.\")\n ),\n address: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z\n .string()\n .min(1, \"Company address is required\")\n .max(100, \"Company address must be at most 100 characters.\")\n ),\n phone_number: z\n .string()\n .transform(GlobalUtils.removeAllWhitespace)\n .transform(GlobalUtils.removeDashesAndPlusSign)\n .refine((s) => /^\\d{1,15}$/.test(s), {\n error: \"Phone number required and must be from 1 to 15 digits.\",\n }),\n iso_country_code: z\n .string()\n .transform(GlobalUtils.removeAllWhitespace)\n .transform((s) => s.toUpperCase())\n .pipe(iso_country_code),\n }),\n adminUserData: z.strictObject({\n first_name: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z\n .string()\n .min(1, \"First name is required\")\n .max(50, \"First name must be at most 50 characters.\")\n ),\n last_name: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z\n .string()\n .min(1, \"Last name is required\")\n .max(50, \"Last name must be at most 50 characters.\")\n ),\n email: z\n .string()\n .transform(GlobalUtils.removeAllWhitespace)\n .pipe(\n z\n .email()\n .max(254, \"Customer email must be at most 254 characters.\")\n .transform((email) => email.toLowerCase())\n ),\n password: z\n .string()\n .min(8, \"Password must be at least 8 characters\")\n .max(25, \"Password must be at most 25 characters\")\n .regex(/[A-Z]/, \"Password must contain at least one uppercase letter\")\n .regex(/[a-z]/, \"Password must contain at least one lowercase letter\")\n .regex(/\\d/, \"Password must contain at least one number\")\n .regex(\n /[@$!%*?&#^_+=-]/,\n \"Password must contain at least one special character\"\n )\n .regex(/^\\S*$/, \"Password cannot contain spaces or other whitespace.\"),\n }),\n});\n","import * as GlobalTypes from \"./types\";\nimport { z } from \"zod\";\n\n/**\n * Validates zod currency with precision.\n *\n *\n * @param minAmount\n * @param maxAmount\n * @returns\n */\nexport function handleZodCurrency(minAmount: number, maxAmount: number) {\n return z\n .preprocess((v) => {\n if (v === null || v === undefined) return NaN;\n\n if (typeof v === \"string\") {\n const s = v.replace(/[,\\s]/g, \"\");\n if (s === \"\") return NaN;\n return s;\n }\n\n return v;\n }, z.coerce.number({ error: \"Enter a valid number.\" }).refine(Number.isFinite, { error: \"Enter a valid number.\" }))\n .transform((x) => roundWithPrecision(x, 2))\n .refine((n) => n >= minAmount, {\n error: `Must be greater than ${minAmount}.`,\n })\n .refine((n) => n <= maxAmount, {\n error: `Exceeds allowed limit ${maxAmount}.`,\n });\n}\n\n/**\n * Trims any leading or trailing spaces\n * Transforms empty strings into undefined.\n *\n * @param s\n * @returns\n */\nexport const transformEmptyStringToUndefined = (s: string) =>\n s.trim() === \"\" ? undefined : s;\n\n/**\n * - Collapses any run of whitespace in a string (spaces, tabs, newlines, nbspb, and other weird unicode spaces etc.)\n * into a single ASCII space.\n * - Trims leading and trailing whitespace.\n * \" Jared \\n Gomez \\t Driver\\t \" -> \"Jared Gomez Driver\"\n *\n * @param s\n * @returns\n */\nexport const normalizeSpaces = (s: string) => whitespace(s, \"normalize\");\n\n/**\n * Removes all whitespace from a string\n * @param s\n * @returns\n */\nexport const removeAllWhitespace = (s: string) => whitespace(s, \"remove\");\n\nconst whitespace = (s: string, mode: GlobalTypes.WhitespaceMode) => {\n if (mode === \"remove\") {\n return s.replace(/\\s+/g, \"\");\n }\n\n return s.replace(/\\s+/g, \" \").trim();\n};\n\n/**\n * Removes all dashes and + signs from a string\n * +1-305-555-0123 -> \"13055550123\"\n * 305-555-0123 -> \"3055550123\"\n *\n * @param s\n * @returns\n */\nexport const removeDashesAndPlusSign = (s: string): string =>\n s.replace(/[+-]/g, \"\");\n\n/**\n * Rounds a number to a certain precision.\n * Contract:\n * 1. Number must be finite and non negative.\n * 2. Precision must be finite nonnegative and an integer.\n * 3. Precision must be <= Max precision\n * 4. Returns a number >= 0\n * Default is round half up.\n *\n * @param num\n * @param precision\n * @param opts\n * @returns\n */\nexport function roundWithPrecision(\n num: number,\n precision: number,\n opts?: GlobalTypes.ToFixedOptions\n): number {\n const MAX_PRECISION = 2;\n const { roundType = \"half_up\" } = opts ?? {};\n\n if (!Number.isFinite(num) || num < 0) {\n throw new RangeError(\"Number must be finite and greater than 0.\");\n }\n\n if (\n !Number.isFinite(precision) ||\n !Number.isInteger(precision) ||\n precision < 1\n ) {\n throw new RangeError(\"Precision must be a finite integer greater than 0.\");\n }\n\n if (precision > MAX_PRECISION) {\n throw new RangeError(\"Max precision allowed is 2.\");\n }\n\n return Number(\n (+(Math.round(+(num + \"e\" + precision)) + \"e\" + -precision)).toFixed(\n precision\n )\n );\n}\n","import { z } from \"zod\";\nimport * as GlobalUtils from \"../utils/utils\";\n\nexport const CustomerFormSchema = z.strictObject({\n customer_name: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z\n .string()\n .min(1, \"Customer name is required\")\n .max(50, \"Customer name must be at most 50 characters.\")\n ),\n\n customer_address: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z.string().max(100, \"Customer address must be at most 100 characters.\")\n )\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n customer_phone_number: z\n .string()\n .transform(GlobalUtils.removeAllWhitespace)\n .transform(GlobalUtils.removeDashesAndPlusSign)\n .refine((s) => s === \"\" || /^\\d{1,15}$/.test(s), {\n error: \"Phone number must be from 1 to 15 digits.\",\n })\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n customer_email_address: z\n .string()\n .transform(GlobalUtils.removeAllWhitespace)\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .pipe(\n z\n .email()\n .max(254, \"Customer email must be at most 254 characters.\")\n .transform((email) => email.toLowerCase())\n .optional()\n )\n .optional(),\n\n tax_rate: GlobalUtils.handleZodCurrency(0, 100),\n});\n","import { z } from \"zod\";\nimport * as GlobalUtils from \"../utils/utils\";\n\nexport const ProductFormSchema = z\n .strictObject({\n product_name: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z\n .string()\n .min(1, \"Product name is required\")\n .max(50, \"Product name must be at most 50 characters.\")\n ),\n\n product_description: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z\n .string()\n .max(100, \"Product desription must be at most 100 characters.\")\n )\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n product_sku: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(z.string().max(30, \"Product SKU must be at most 30 characters.\"))\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n product_upc: z\n .string()\n .transform((s) => s.replace(/\\s+/g, \"\"))\n .refine((s) => s === \"\" || /^\\d{12}$/.test(s), {\n error: \"UPC must be exactly 12 digits\",\n })\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n product_gtin_14: z\n .string()\n .transform((s) => s.replace(/\\s+/g, \"\"))\n .refine((s) => s === \"\" || /^\\d{14}$/.test(s), {\n error: \"GTIN14 must be exactly 14 digits\",\n })\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n product_type: z.enum([\"unit\", \"weight\", \"case\"], { error: \"\" }),\n\n weight_unit: z.preprocess((v) => {\n if (v === \"\") return undefined;\n if (typeof v === \"string\") return v.trim().toLowerCase();\n return v;\n }, z.enum([\"kg\", \"lb\", \"g\", \"oz\"]).optional()),\n\n price: GlobalUtils.handleZodCurrency(1, 99_999),\n cost: GlobalUtils.handleZodCurrency(1, 99_999),\n })\n\n .superRefine((data, ctx) => {\n if (data.product_type === \"weight\" && !data.weight_unit) {\n ctx.addIssue({\n code: \"custom\",\n error: \"Weight unit is required.\",\n path: [\"weight_unit\"],\n });\n }\n\n if (\n data.product_type !== \"weight\" &&\n typeof data.weight_unit !== \"undefined\"\n ) {\n ctx.addIssue({\n code: \"custom\",\n error: \"Weight unit must be empty\",\n path: [\"weight_unit\"],\n });\n }\n });\n"],"mappings":"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","names":["import_zod","import_zod","import_zod"]}
package/dist/index.d.cts CHANGED
@@ -1,76 +1,51 @@
1
1
  import { z } from 'zod';
2
2
 
3
+ declare const RegisterFormSchema: z.ZodObject<{
4
+ companyData: z.ZodObject<{
5
+ name: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>;
6
+ address: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>;
7
+ phone_number: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<string, string>>;
8
+ iso_country_code: z.ZodPipe<z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<string, string>>, z.ZodEnum<{
9
+ US: "US";
10
+ HN: "HN";
11
+ }>>;
12
+ }, z.core.$strict>;
13
+ adminUserData: z.ZodObject<{
14
+ first_name: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>;
15
+ last_name: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>;
16
+ email: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodPipe<z.ZodEmail, z.ZodTransform<string, string>>>;
17
+ password: z.ZodString;
18
+ }, z.core.$strict>;
19
+ }, z.core.$strict>;
20
+
3
21
  declare const CustomerFormSchema: z.ZodObject<{
4
- customer_name: z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>;
5
- customer_address: z.ZodOptional<z.ZodEffects<z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>, string | undefined, string>>;
6
- customer_phone_number: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>, string | undefined, string>>;
7
- customer_email_address: z.ZodOptional<z.ZodPipeline<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string | undefined, string>, z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>>>;
8
- tax_rate: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodNumber, number, number>, number, unknown>, number, unknown>, number, unknown>, number, unknown>;
9
- }, "strip", z.ZodTypeAny, {
10
- customer_name: string;
11
- tax_rate: number;
12
- customer_address?: string | undefined;
13
- customer_phone_number?: string | undefined;
14
- customer_email_address?: string | undefined;
15
- }, {
16
- customer_name: string;
17
- customer_address?: string | undefined;
18
- customer_phone_number?: string | undefined;
19
- customer_email_address?: string | undefined;
20
- tax_rate?: unknown;
21
- }>;
22
+ customer_name: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>;
23
+ customer_address: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>, z.ZodTransform<string | undefined, string>>>;
24
+ customer_phone_number: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<string, string>>, z.ZodTransform<string | undefined, string>>>;
25
+ customer_email_address: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<string | undefined, string>>, z.ZodOptional<z.ZodPipe<z.ZodEmail, z.ZodTransform<string, string>>>>>;
26
+ tax_rate: z.ZodPipe<z.ZodPipe<z.ZodTransform<{}, unknown>, z.ZodCoercedNumber<unknown>>, z.ZodTransform<number, number>>;
27
+ }, z.core.$strict>;
22
28
 
23
- declare const ProductFormSchema: z.ZodEffects<z.ZodObject<{
24
- product_name: z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>;
25
- product_description: z.ZodOptional<z.ZodEffects<z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>, string | undefined, string>>;
26
- product_sku: z.ZodOptional<z.ZodEffects<z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>, string | undefined, string>>;
27
- product_upc: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string | undefined, string>>;
28
- product_gtin_14: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string | undefined, string>>;
29
- product_type: z.ZodEnum<["unit", "weight", "case"]>;
30
- weight_unit: z.ZodEffects<z.ZodOptional<z.ZodEnum<["kg", "lb", "g", "oz"]>>, "kg" | "lb" | "g" | "oz" | undefined, unknown>;
31
- price: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodNumber, number, number>, number, unknown>, number, unknown>, number, unknown>, number, unknown>;
32
- cost: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodNumber, number, number>, number, unknown>, number, unknown>, number, unknown>, number, unknown>;
33
- }, "strict", z.ZodTypeAny, {
34
- product_name: string;
35
- product_type: "unit" | "weight" | "case";
36
- price: number;
37
- cost: number;
38
- product_description?: string | undefined;
39
- product_sku?: string | undefined;
40
- product_upc?: string | undefined;
41
- product_gtin_14?: string | undefined;
42
- weight_unit?: "kg" | "lb" | "g" | "oz" | undefined;
43
- }, {
44
- product_name: string;
45
- product_type: "unit" | "weight" | "case";
46
- product_description?: string | undefined;
47
- product_sku?: string | undefined;
48
- product_upc?: string | undefined;
49
- product_gtin_14?: string | undefined;
50
- weight_unit?: unknown;
51
- price?: unknown;
52
- cost?: unknown;
53
- }>, {
54
- product_name: string;
55
- product_type: "unit" | "weight" | "case";
56
- price: number;
57
- cost: number;
58
- product_description?: string | undefined;
59
- product_sku?: string | undefined;
60
- product_upc?: string | undefined;
61
- product_gtin_14?: string | undefined;
62
- weight_unit?: "kg" | "lb" | "g" | "oz" | undefined;
63
- }, {
64
- product_name: string;
65
- product_type: "unit" | "weight" | "case";
66
- product_description?: string | undefined;
67
- product_sku?: string | undefined;
68
- product_upc?: string | undefined;
69
- product_gtin_14?: string | undefined;
70
- weight_unit?: unknown;
71
- price?: unknown;
72
- cost?: unknown;
73
- }>;
29
+ declare const ProductFormSchema: z.ZodObject<{
30
+ product_name: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>;
31
+ product_description: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>, z.ZodTransform<string | undefined, string>>>;
32
+ product_sku: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>, z.ZodTransform<string | undefined, string>>>;
33
+ product_upc: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<string | undefined, string>>>;
34
+ product_gtin_14: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<string | undefined, string>>>;
35
+ product_type: z.ZodEnum<{
36
+ unit: "unit";
37
+ weight: "weight";
38
+ case: "case";
39
+ }>;
40
+ weight_unit: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodOptional<z.ZodEnum<{
41
+ kg: "kg";
42
+ lb: "lb";
43
+ g: "g";
44
+ oz: "oz";
45
+ }>>>;
46
+ price: z.ZodPipe<z.ZodPipe<z.ZodTransform<{}, unknown>, z.ZodCoercedNumber<unknown>>, z.ZodTransform<number, number>>;
47
+ cost: z.ZodPipe<z.ZodPipe<z.ZodTransform<{}, unknown>, z.ZodCoercedNumber<unknown>>, z.ZodTransform<number, number>>;
48
+ }, z.core.$strict>;
74
49
 
75
50
  type RoundType = "half_up";
76
51
  interface ToFixedOptions {
@@ -85,7 +60,7 @@ interface ToFixedOptions {
85
60
  * @param maxAmount
86
61
  * @returns
87
62
  */
88
- declare function handleZodCurrency(minAmount: number, maxAmount: number): z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodNumber, number, number>, number, unknown>, number, unknown>, number, unknown>, number, unknown>;
63
+ declare function handleZodCurrency(minAmount: number, maxAmount: number): z.ZodPipe<z.ZodPipe<z.ZodTransform<{}, unknown>, z.ZodCoercedNumber<unknown>>, z.ZodTransform<number, number>>;
89
64
  /**
90
65
  * Trims any leading or trailing spaces
91
66
  * Transforms empty strings into undefined.
@@ -95,8 +70,10 @@ declare function handleZodCurrency(minAmount: number, maxAmount: number): z.ZodE
95
70
  */
96
71
  declare const transformEmptyStringToUndefined: (s: string) => string | undefined;
97
72
  /**
98
- * - Collapses any run of whitespace in a string (spaces, tabs, newlines, etc.) into a single ASCII space.
73
+ * - Collapses any run of whitespace in a string (spaces, tabs, newlines, nbspb, and other weird unicode spaces etc.)
74
+ * into a single ASCII space.
99
75
  * - Trims leading and trailing whitespace.
76
+ * " Jared \n Gomez \t Driver\t " -> "Jared Gomez Driver"
100
77
  *
101
78
  * @param s
102
79
  * @returns
@@ -124,6 +101,7 @@ declare const removeDashesAndPlusSign: (s: string) => string;
124
101
  * 2. Precision must be finite nonnegative and an integer.
125
102
  * 3. Precision must be <= Max precision
126
103
  * 4. Returns a number >= 0
104
+ * Default is round half up.
127
105
  *
128
106
  * @param num
129
107
  * @param precision
@@ -132,4 +110,4 @@ declare const removeDashesAndPlusSign: (s: string) => string;
132
110
  */
133
111
  declare function roundWithPrecision(num: number, precision: number, opts?: ToFixedOptions): number;
134
112
 
135
- export { CustomerFormSchema, ProductFormSchema, handleZodCurrency, normalizeSpaces, removeAllWhitespace, removeDashesAndPlusSign, roundWithPrecision, transformEmptyStringToUndefined };
113
+ export { CustomerFormSchema, ProductFormSchema, RegisterFormSchema, handleZodCurrency, normalizeSpaces, removeAllWhitespace, removeDashesAndPlusSign, roundWithPrecision, transformEmptyStringToUndefined };
package/dist/index.d.ts CHANGED
@@ -1,76 +1,51 @@
1
1
  import { z } from 'zod';
2
2
 
3
+ declare const RegisterFormSchema: z.ZodObject<{
4
+ companyData: z.ZodObject<{
5
+ name: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>;
6
+ address: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>;
7
+ phone_number: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<string, string>>;
8
+ iso_country_code: z.ZodPipe<z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<string, string>>, z.ZodEnum<{
9
+ US: "US";
10
+ HN: "HN";
11
+ }>>;
12
+ }, z.core.$strict>;
13
+ adminUserData: z.ZodObject<{
14
+ first_name: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>;
15
+ last_name: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>;
16
+ email: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodPipe<z.ZodEmail, z.ZodTransform<string, string>>>;
17
+ password: z.ZodString;
18
+ }, z.core.$strict>;
19
+ }, z.core.$strict>;
20
+
3
21
  declare const CustomerFormSchema: z.ZodObject<{
4
- customer_name: z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>;
5
- customer_address: z.ZodOptional<z.ZodEffects<z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>, string | undefined, string>>;
6
- customer_phone_number: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>, string | undefined, string>>;
7
- customer_email_address: z.ZodOptional<z.ZodPipeline<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string | undefined, string>, z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>>>;
8
- tax_rate: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodNumber, number, number>, number, unknown>, number, unknown>, number, unknown>, number, unknown>;
9
- }, "strip", z.ZodTypeAny, {
10
- customer_name: string;
11
- tax_rate: number;
12
- customer_address?: string | undefined;
13
- customer_phone_number?: string | undefined;
14
- customer_email_address?: string | undefined;
15
- }, {
16
- customer_name: string;
17
- customer_address?: string | undefined;
18
- customer_phone_number?: string | undefined;
19
- customer_email_address?: string | undefined;
20
- tax_rate?: unknown;
21
- }>;
22
+ customer_name: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>;
23
+ customer_address: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>, z.ZodTransform<string | undefined, string>>>;
24
+ customer_phone_number: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<string, string>>, z.ZodTransform<string | undefined, string>>>;
25
+ customer_email_address: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<string | undefined, string>>, z.ZodOptional<z.ZodPipe<z.ZodEmail, z.ZodTransform<string, string>>>>>;
26
+ tax_rate: z.ZodPipe<z.ZodPipe<z.ZodTransform<{}, unknown>, z.ZodCoercedNumber<unknown>>, z.ZodTransform<number, number>>;
27
+ }, z.core.$strict>;
22
28
 
23
- declare const ProductFormSchema: z.ZodEffects<z.ZodObject<{
24
- product_name: z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>;
25
- product_description: z.ZodOptional<z.ZodEffects<z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>, string | undefined, string>>;
26
- product_sku: z.ZodOptional<z.ZodEffects<z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>, string | undefined, string>>;
27
- product_upc: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string | undefined, string>>;
28
- product_gtin_14: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string | undefined, string>>;
29
- product_type: z.ZodEnum<["unit", "weight", "case"]>;
30
- weight_unit: z.ZodEffects<z.ZodOptional<z.ZodEnum<["kg", "lb", "g", "oz"]>>, "kg" | "lb" | "g" | "oz" | undefined, unknown>;
31
- price: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodNumber, number, number>, number, unknown>, number, unknown>, number, unknown>, number, unknown>;
32
- cost: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodNumber, number, number>, number, unknown>, number, unknown>, number, unknown>, number, unknown>;
33
- }, "strict", z.ZodTypeAny, {
34
- product_name: string;
35
- product_type: "unit" | "weight" | "case";
36
- price: number;
37
- cost: number;
38
- product_description?: string | undefined;
39
- product_sku?: string | undefined;
40
- product_upc?: string | undefined;
41
- product_gtin_14?: string | undefined;
42
- weight_unit?: "kg" | "lb" | "g" | "oz" | undefined;
43
- }, {
44
- product_name: string;
45
- product_type: "unit" | "weight" | "case";
46
- product_description?: string | undefined;
47
- product_sku?: string | undefined;
48
- product_upc?: string | undefined;
49
- product_gtin_14?: string | undefined;
50
- weight_unit?: unknown;
51
- price?: unknown;
52
- cost?: unknown;
53
- }>, {
54
- product_name: string;
55
- product_type: "unit" | "weight" | "case";
56
- price: number;
57
- cost: number;
58
- product_description?: string | undefined;
59
- product_sku?: string | undefined;
60
- product_upc?: string | undefined;
61
- product_gtin_14?: string | undefined;
62
- weight_unit?: "kg" | "lb" | "g" | "oz" | undefined;
63
- }, {
64
- product_name: string;
65
- product_type: "unit" | "weight" | "case";
66
- product_description?: string | undefined;
67
- product_sku?: string | undefined;
68
- product_upc?: string | undefined;
69
- product_gtin_14?: string | undefined;
70
- weight_unit?: unknown;
71
- price?: unknown;
72
- cost?: unknown;
73
- }>;
29
+ declare const ProductFormSchema: z.ZodObject<{
30
+ product_name: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>;
31
+ product_description: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>, z.ZodTransform<string | undefined, string>>>;
32
+ product_sku: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>, z.ZodTransform<string | undefined, string>>>;
33
+ product_upc: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<string | undefined, string>>>;
34
+ product_gtin_14: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<string | undefined, string>>>;
35
+ product_type: z.ZodEnum<{
36
+ unit: "unit";
37
+ weight: "weight";
38
+ case: "case";
39
+ }>;
40
+ weight_unit: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodOptional<z.ZodEnum<{
41
+ kg: "kg";
42
+ lb: "lb";
43
+ g: "g";
44
+ oz: "oz";
45
+ }>>>;
46
+ price: z.ZodPipe<z.ZodPipe<z.ZodTransform<{}, unknown>, z.ZodCoercedNumber<unknown>>, z.ZodTransform<number, number>>;
47
+ cost: z.ZodPipe<z.ZodPipe<z.ZodTransform<{}, unknown>, z.ZodCoercedNumber<unknown>>, z.ZodTransform<number, number>>;
48
+ }, z.core.$strict>;
74
49
 
75
50
  type RoundType = "half_up";
76
51
  interface ToFixedOptions {
@@ -85,7 +60,7 @@ interface ToFixedOptions {
85
60
  * @param maxAmount
86
61
  * @returns
87
62
  */
88
- declare function handleZodCurrency(minAmount: number, maxAmount: number): z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodNumber, number, number>, number, unknown>, number, unknown>, number, unknown>, number, unknown>;
63
+ declare function handleZodCurrency(minAmount: number, maxAmount: number): z.ZodPipe<z.ZodPipe<z.ZodTransform<{}, unknown>, z.ZodCoercedNumber<unknown>>, z.ZodTransform<number, number>>;
89
64
  /**
90
65
  * Trims any leading or trailing spaces
91
66
  * Transforms empty strings into undefined.
@@ -95,8 +70,10 @@ declare function handleZodCurrency(minAmount: number, maxAmount: number): z.ZodE
95
70
  */
96
71
  declare const transformEmptyStringToUndefined: (s: string) => string | undefined;
97
72
  /**
98
- * - Collapses any run of whitespace in a string (spaces, tabs, newlines, etc.) into a single ASCII space.
73
+ * - Collapses any run of whitespace in a string (spaces, tabs, newlines, nbspb, and other weird unicode spaces etc.)
74
+ * into a single ASCII space.
99
75
  * - Trims leading and trailing whitespace.
76
+ * " Jared \n Gomez \t Driver\t " -> "Jared Gomez Driver"
100
77
  *
101
78
  * @param s
102
79
  * @returns
@@ -124,6 +101,7 @@ declare const removeDashesAndPlusSign: (s: string) => string;
124
101
  * 2. Precision must be finite nonnegative and an integer.
125
102
  * 3. Precision must be <= Max precision
126
103
  * 4. Returns a number >= 0
104
+ * Default is round half up.
127
105
  *
128
106
  * @param num
129
107
  * @param precision
@@ -132,4 +110,4 @@ declare const removeDashesAndPlusSign: (s: string) => string;
132
110
  */
133
111
  declare function roundWithPrecision(num: number, precision: number, opts?: ToFixedOptions): number;
134
112
 
135
- export { CustomerFormSchema, ProductFormSchema, handleZodCurrency, normalizeSpaces, removeAllWhitespace, removeDashesAndPlusSign, roundWithPrecision, transformEmptyStringToUndefined };
113
+ export { CustomerFormSchema, ProductFormSchema, RegisterFormSchema, handleZodCurrency, normalizeSpaces, removeAllWhitespace, removeDashesAndPlusSign, roundWithPrecision, transformEmptyStringToUndefined };
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- // src/schemas/customer_schemas.ts
1
+ // src/schemas/companies_schemas.ts
2
2
  import { z as z2 } from "zod";
3
3
 
4
4
  // src/utils/utils.ts
@@ -12,10 +12,10 @@ function handleZodCurrency(minAmount, maxAmount) {
12
12
  return s;
13
13
  }
14
14
  return v;
15
- }, z.coerce.number({ message: "Enter a valid number." }).refine(Number.isFinite, { message: "Enter a valid number." })).transform((x) => roundWithPrecision(x, 2)).refine((n) => n >= minAmount, {
16
- message: `Must be greater than ${minAmount}.`
15
+ }, z.coerce.number({ error: "Enter a valid number." }).refine(Number.isFinite, { error: "Enter a valid number." })).transform((x) => roundWithPrecision(x, 2)).refine((n) => n >= minAmount, {
16
+ error: `Must be greater than ${minAmount}.`
17
17
  }).refine((n) => n <= maxAmount, {
18
- message: `Exceeds allowed limit ${maxAmount}.`
18
+ error: `Exceeds allowed limit ${maxAmount}.`
19
19
  });
20
20
  }
21
21
  var transformEmptyStringToUndefined = (s) => s.trim() === "" ? void 0 : s;
@@ -47,61 +47,97 @@ function roundWithPrecision(num, precision, opts) {
47
47
  );
48
48
  }
49
49
 
50
+ // src/schemas/companies_schemas.ts
51
+ var iso_country_code = z2.enum(["US", "HN"], {
52
+ error: "Country code not supported."
53
+ });
54
+ var user_role = z2.enum(["admin", "driver"], {
55
+ error: "User role not supported."
56
+ });
57
+ var RegisterFormSchema = z2.strictObject({
58
+ companyData: z2.strictObject({
59
+ name: z2.string().transform(normalizeSpaces).pipe(
60
+ z2.string().min(1, "Company name is required").max(50, "Company name must be at most 50 characters.")
61
+ ),
62
+ address: z2.string().transform(normalizeSpaces).pipe(
63
+ z2.string().min(1, "Company address is required").max(100, "Company address must be at most 100 characters.")
64
+ ),
65
+ phone_number: z2.string().transform(removeAllWhitespace).transform(removeDashesAndPlusSign).refine((s) => /^\d{1,15}$/.test(s), {
66
+ error: "Phone number required and must be from 1 to 15 digits."
67
+ }),
68
+ iso_country_code: z2.string().transform(removeAllWhitespace).transform((s) => s.toUpperCase()).pipe(iso_country_code)
69
+ }),
70
+ adminUserData: z2.strictObject({
71
+ first_name: z2.string().transform(normalizeSpaces).pipe(
72
+ z2.string().min(1, "First name is required").max(50, "First name must be at most 50 characters.")
73
+ ),
74
+ last_name: z2.string().transform(normalizeSpaces).pipe(
75
+ z2.string().min(1, "Last name is required").max(50, "Last name must be at most 50 characters.")
76
+ ),
77
+ email: z2.string().transform(removeAllWhitespace).pipe(
78
+ z2.email().max(254, "Customer email must be at most 254 characters.").transform((email) => email.toLowerCase())
79
+ ),
80
+ password: z2.string().min(8, "Password must be at least 8 characters").max(25, "Password must be at most 25 characters").regex(/[A-Z]/, "Password must contain at least one uppercase letter").regex(/[a-z]/, "Password must contain at least one lowercase letter").regex(/\d/, "Password must contain at least one number").regex(
81
+ /[@$!%*?&#^_+=-]/,
82
+ "Password must contain at least one special character"
83
+ ).regex(/^\S*$/, "Password cannot contain spaces or other whitespace.")
84
+ })
85
+ });
86
+
50
87
  // src/schemas/customer_schemas.ts
51
- var CustomerFormSchema = z2.object({
52
- customer_name: z2.string().transform(normalizeSpaces).pipe(
53
- z2.string().min(1, "Customer name is required").max(50, "Customer name must be at most 50 characters.")
88
+ import { z as z3 } from "zod";
89
+ var CustomerFormSchema = z3.strictObject({
90
+ customer_name: z3.string().transform(normalizeSpaces).pipe(
91
+ z3.string().min(1, "Customer name is required").max(50, "Customer name must be at most 50 characters.")
54
92
  ),
55
- customer_address: z2.string().transform(normalizeSpaces).pipe(
56
- z2.string().max(100, "Customer address must be at most 100 characters.")
93
+ customer_address: z3.string().transform(normalizeSpaces).pipe(
94
+ z3.string().max(100, "Customer address must be at most 100 characters.")
57
95
  ).transform(transformEmptyStringToUndefined).optional(),
58
- customer_phone_number: z2.string().transform(removeAllWhitespace).transform(removeDashesAndPlusSign).refine((s) => s === "" || /^\d{1,15}$/.test(s), {
59
- message: "Phone number must be from 1 to 15 digits."
96
+ customer_phone_number: z3.string().transform(removeAllWhitespace).transform(removeDashesAndPlusSign).refine((s) => s === "" || /^\d{1,15}$/.test(s), {
97
+ error: "Phone number must be from 1 to 15 digits."
60
98
  }).transform(transformEmptyStringToUndefined).optional(),
61
- customer_email_address: z2.string().transform(removeAllWhitespace).transform(transformEmptyStringToUndefined).pipe(
62
- z2.string().email().max(254, "Customer email must be at most 254 characters.").transform((email) => email.toLowerCase()).optional()
99
+ customer_email_address: z3.string().transform(removeAllWhitespace).transform(transformEmptyStringToUndefined).pipe(
100
+ z3.email().max(254, "Customer email must be at most 254 characters.").transform((email) => email.toLowerCase()).optional()
63
101
  ).optional(),
64
102
  tax_rate: handleZodCurrency(0, 100)
65
103
  });
66
104
 
67
105
  // src/schemas/product_schemas.ts
68
- import { z as z3 } from "zod";
69
- var ProductFormSchema = z3.object({
70
- product_name: z3.string().transform(normalizeSpaces).pipe(
71
- z3.string().min(1, "Product name is required").max(50, "Product name must be at most 50 characters.")
106
+ import { z as z4 } from "zod";
107
+ var ProductFormSchema = z4.strictObject({
108
+ product_name: z4.string().transform(normalizeSpaces).pipe(
109
+ z4.string().min(1, "Product name is required").max(50, "Product name must be at most 50 characters.")
72
110
  ),
73
- product_description: z3.string().transform(normalizeSpaces).pipe(
74
- z3.string().max(100, "Product desription must be at most 100 characters.")
111
+ product_description: z4.string().transform(normalizeSpaces).pipe(
112
+ z4.string().max(100, "Product desription must be at most 100 characters.")
75
113
  ).transform(transformEmptyStringToUndefined).optional(),
76
- product_sku: z3.string().transform(normalizeSpaces).pipe(z3.string().max(30, "Product SKU must be at most 30 characters.")).transform(transformEmptyStringToUndefined).optional(),
77
- product_upc: z3.string().transform((s) => s.replace(/\s+/g, "")).refine((s) => s === "" || /^\d{12}$/.test(s), {
78
- message: "UPC must be exactly 12 digits"
114
+ product_sku: z4.string().transform(normalizeSpaces).pipe(z4.string().max(30, "Product SKU must be at most 30 characters.")).transform(transformEmptyStringToUndefined).optional(),
115
+ product_upc: z4.string().transform((s) => s.replace(/\s+/g, "")).refine((s) => s === "" || /^\d{12}$/.test(s), {
116
+ error: "UPC must be exactly 12 digits"
79
117
  }).transform(transformEmptyStringToUndefined).optional(),
80
- product_gtin_14: z3.string().transform((s) => s.replace(/\s+/g, "")).refine((s) => s === "" || /^\d{14}$/.test(s), {
81
- message: "GTIN14 must be exactly 14 digits"
118
+ product_gtin_14: z4.string().transform((s) => s.replace(/\s+/g, "")).refine((s) => s === "" || /^\d{14}$/.test(s), {
119
+ error: "GTIN14 must be exactly 14 digits"
82
120
  }).transform(transformEmptyStringToUndefined).optional(),
83
- product_type: z3.enum(["unit", "weight", "case"], {
84
- errorMap: () => ({ message: "Product type is required" })
85
- }),
86
- weight_unit: z3.preprocess((v) => {
121
+ product_type: z4.enum(["unit", "weight", "case"], { error: "" }),
122
+ weight_unit: z4.preprocess((v) => {
87
123
  if (v === "") return void 0;
88
124
  if (typeof v === "string") return v.trim().toLowerCase();
89
125
  return v;
90
- }, z3.enum(["kg", "lb", "g", "oz"]).optional()),
126
+ }, z4.enum(["kg", "lb", "g", "oz"]).optional()),
91
127
  price: handleZodCurrency(1, 99999),
92
128
  cost: handleZodCurrency(1, 99999)
93
- }).strict().superRefine((data, ctx) => {
129
+ }).superRefine((data, ctx) => {
94
130
  if (data.product_type === "weight" && !data.weight_unit) {
95
131
  ctx.addIssue({
96
- code: z3.ZodIssueCode.custom,
97
- message: "Weight unit is required.",
132
+ code: "custom",
133
+ error: "Weight unit is required.",
98
134
  path: ["weight_unit"]
99
135
  });
100
136
  }
101
137
  if (data.product_type !== "weight" && typeof data.weight_unit !== "undefined") {
102
138
  ctx.addIssue({
103
- code: z3.ZodIssueCode.custom,
104
- message: "Weight unit must be empty",
139
+ code: "custom",
140
+ error: "Weight unit must be empty",
105
141
  path: ["weight_unit"]
106
142
  });
107
143
  }
@@ -109,6 +145,7 @@ var ProductFormSchema = z3.object({
109
145
  export {
110
146
  CustomerFormSchema,
111
147
  ProductFormSchema,
148
+ RegisterFormSchema,
112
149
  handleZodCurrency,
113
150
  normalizeSpaces,
114
151
  removeAllWhitespace,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schemas/customer_schemas.ts","../src/utils/utils.ts","../src/schemas/product_schemas.ts"],"sourcesContent":["import { z } from \"zod\";\nimport * as GlobalUtils from \"../utils/utils\";\n\nexport const CustomerFormSchema = z.object({\n customer_name: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z\n .string()\n .min(1, \"Customer name is required\")\n .max(50, \"Customer name must be at most 50 characters.\")\n ),\n\n customer_address: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z.string().max(100, \"Customer address must be at most 100 characters.\")\n )\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n customer_phone_number: z\n .string()\n .transform(GlobalUtils.removeAllWhitespace)\n .transform(GlobalUtils.removeDashesAndPlusSign)\n .refine((s) => s === \"\" || /^\\d{1,15}$/.test(s), {\n message: \"Phone number must be from 1 to 15 digits.\",\n })\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n customer_email_address: z\n .string()\n .transform(GlobalUtils.removeAllWhitespace)\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .pipe(\n z\n .string()\n .email()\n .max(254, \"Customer email must be at most 254 characters.\")\n .transform((email) => email.toLowerCase())\n .optional()\n )\n .optional(),\n\n tax_rate: GlobalUtils.handleZodCurrency(0, 100),\n});\n","import * as GlobalTypes from \"./types\";\nimport { z } from \"zod\";\n\n/**\n * Validates zod currency with precision.\n *\n *\n * @param minAmount\n * @param maxAmount\n * @returns\n */\nexport function handleZodCurrency(minAmount: number, maxAmount: number) {\n return z\n .preprocess((v) => {\n if (v === null || v === undefined) return NaN;\n\n if (typeof v === \"string\") {\n const s = v.replace(/[,\\s]/g, \"\");\n if (s === \"\") return NaN;\n return s;\n }\n\n return v;\n }, z.coerce.number({ message: \"Enter a valid number.\" }).refine(Number.isFinite, { message: \"Enter a valid number.\" }))\n .transform((x) => roundWithPrecision(x, 2))\n .refine((n) => n >= minAmount, {\n message: `Must be greater than ${minAmount}.`,\n })\n .refine((n) => n <= maxAmount, {\n message: `Exceeds allowed limit ${maxAmount}.`,\n });\n}\n\n/**\n * Trims any leading or trailing spaces\n * Transforms empty strings into undefined.\n *\n * @param s\n * @returns\n */\nexport const transformEmptyStringToUndefined = (s: string) =>\n s.trim() === \"\" ? undefined : s;\n\n/**\n * - Collapses any run of whitespace in a string (spaces, tabs, newlines, etc.) into a single ASCII space.\n * - Trims leading and trailing whitespace.\n *\n * @param s\n * @returns\n */\nexport const normalizeSpaces = (s: string) => whitespace(s, \"normalize\");\n\n/**\n * Removes all whitespace from a string\n * @param s\n * @returns\n */\nexport const removeAllWhitespace = (s: string) => whitespace(s, \"remove\");\n\nconst whitespace = (s: string, mode: GlobalTypes.WhitespaceMode) => {\n if (mode === \"remove\") {\n return s.replace(/\\s+/g, \"\");\n }\n\n return s.replace(/\\s+/g, \" \").trim();\n};\n\n/**\n * Removes all dashes and + signs from a string\n * +1-305-555-0123 -> \"13055550123\"\n * 305-555-0123 -> \"3055550123\"\n *\n * @param s\n * @returns\n */\nexport const removeDashesAndPlusSign = (s: string): string =>\n s.replace(/[+-]/g, \"\");\n\n/**\n * Rounds a number to a certain precision.\n * Contract:\n * 1. Number must be finite and non negative.\n * 2. Precision must be finite nonnegative and an integer.\n * 3. Precision must be <= Max precision\n * 4. Returns a number >= 0\n *\n * @param num\n * @param precision\n * @param opts\n * @returns\n */\nexport function roundWithPrecision(\n num: number,\n precision: number,\n opts?: GlobalTypes.ToFixedOptions\n): number {\n const MAX_PRECISION = 2;\n const { roundType = \"half_up\" } = opts ?? {};\n\n if (!Number.isFinite(num) || num < 0) {\n throw new RangeError(\"Number must be finite and greater than 0.\");\n }\n\n if (\n !Number.isFinite(precision) ||\n !Number.isInteger(precision) ||\n precision < 1\n ) {\n throw new RangeError(\"Precision must be a finite integer greater than 0.\");\n }\n\n if (precision > MAX_PRECISION) {\n throw new RangeError(\"Max precision allowed is 2.\");\n }\n\n return Number(\n (+(Math.round(+(num + \"e\" + precision)) + \"e\" + -precision)).toFixed(\n precision\n )\n );\n}\n","import { z } from \"zod\";\nimport * as GlobalUtils from \"../utils/utils\";\n\nexport const ProductFormSchema = z\n .object({\n product_name: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z\n .string()\n .min(1, \"Product name is required\")\n .max(50, \"Product name must be at most 50 characters.\")\n ),\n\n product_description: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z\n .string()\n .max(100, \"Product desription must be at most 100 characters.\")\n )\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n product_sku: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(z.string().max(30, \"Product SKU must be at most 30 characters.\"))\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n product_upc: z\n .string()\n .transform((s) => s.replace(/\\s+/g, \"\"))\n .refine((s) => s === \"\" || /^\\d{12}$/.test(s), {\n message: \"UPC must be exactly 12 digits\",\n })\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n product_gtin_14: z\n .string()\n .transform((s) => s.replace(/\\s+/g, \"\"))\n .refine((s) => s === \"\" || /^\\d{14}$/.test(s), {\n message: \"GTIN14 must be exactly 14 digits\",\n })\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n product_type: z.enum([\"unit\", \"weight\", \"case\"], {\n errorMap: () => ({ message: \"Product type is required\" }),\n }),\n\n weight_unit: z.preprocess((v) => {\n if (v === \"\") return undefined;\n if (typeof v === \"string\") return v.trim().toLowerCase();\n return v;\n }, z.enum([\"kg\", \"lb\", \"g\", \"oz\"]).optional()),\n\n price: GlobalUtils.handleZodCurrency(1, 99_999),\n cost: GlobalUtils.handleZodCurrency(1, 99_999),\n })\n .strict()\n\n .superRefine((data, ctx) => {\n if (data.product_type === \"weight\" && !data.weight_unit) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Weight unit is required.\",\n path: [\"weight_unit\"],\n });\n }\n\n if (\n data.product_type !== \"weight\" &&\n typeof data.weight_unit !== \"undefined\"\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Weight unit must be empty\",\n path: [\"weight_unit\"],\n });\n }\n });\n"],"mappings":"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","names":["z","z","z","z"]}
1
+ {"version":3,"sources":["../src/schemas/companies_schemas.ts","../src/utils/utils.ts","../src/schemas/customer_schemas.ts","../src/schemas/product_schemas.ts"],"sourcesContent":["import { z } from \"zod\";\nimport * as GlobalUtils from \"../utils/utils\";\n\nconst iso_country_code = z.enum([\"US\", \"HN\"], {\n error: \"Country code not supported.\",\n});\n\nconst user_role = z.enum([\"admin\", \"driver\"], {\n error: \"User role not supported.\",\n});\n\nexport const RegisterFormSchema = z.strictObject({\n companyData: z.strictObject({\n name: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z\n .string()\n .min(1, \"Company name is required\")\n .max(50, \"Company name must be at most 50 characters.\")\n ),\n address: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z\n .string()\n .min(1, \"Company address is required\")\n .max(100, \"Company address must be at most 100 characters.\")\n ),\n phone_number: z\n .string()\n .transform(GlobalUtils.removeAllWhitespace)\n .transform(GlobalUtils.removeDashesAndPlusSign)\n .refine((s) => /^\\d{1,15}$/.test(s), {\n error: \"Phone number required and must be from 1 to 15 digits.\",\n }),\n iso_country_code: z\n .string()\n .transform(GlobalUtils.removeAllWhitespace)\n .transform((s) => s.toUpperCase())\n .pipe(iso_country_code),\n }),\n adminUserData: z.strictObject({\n first_name: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z\n .string()\n .min(1, \"First name is required\")\n .max(50, \"First name must be at most 50 characters.\")\n ),\n last_name: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z\n .string()\n .min(1, \"Last name is required\")\n .max(50, \"Last name must be at most 50 characters.\")\n ),\n email: z\n .string()\n .transform(GlobalUtils.removeAllWhitespace)\n .pipe(\n z\n .email()\n .max(254, \"Customer email must be at most 254 characters.\")\n .transform((email) => email.toLowerCase())\n ),\n password: z\n .string()\n .min(8, \"Password must be at least 8 characters\")\n .max(25, \"Password must be at most 25 characters\")\n .regex(/[A-Z]/, \"Password must contain at least one uppercase letter\")\n .regex(/[a-z]/, \"Password must contain at least one lowercase letter\")\n .regex(/\\d/, \"Password must contain at least one number\")\n .regex(\n /[@$!%*?&#^_+=-]/,\n \"Password must contain at least one special character\"\n )\n .regex(/^\\S*$/, \"Password cannot contain spaces or other whitespace.\"),\n }),\n});\n","import * as GlobalTypes from \"./types\";\nimport { z } from \"zod\";\n\n/**\n * Validates zod currency with precision.\n *\n *\n * @param minAmount\n * @param maxAmount\n * @returns\n */\nexport function handleZodCurrency(minAmount: number, maxAmount: number) {\n return z\n .preprocess((v) => {\n if (v === null || v === undefined) return NaN;\n\n if (typeof v === \"string\") {\n const s = v.replace(/[,\\s]/g, \"\");\n if (s === \"\") return NaN;\n return s;\n }\n\n return v;\n }, z.coerce.number({ error: \"Enter a valid number.\" }).refine(Number.isFinite, { error: \"Enter a valid number.\" }))\n .transform((x) => roundWithPrecision(x, 2))\n .refine((n) => n >= minAmount, {\n error: `Must be greater than ${minAmount}.`,\n })\n .refine((n) => n <= maxAmount, {\n error: `Exceeds allowed limit ${maxAmount}.`,\n });\n}\n\n/**\n * Trims any leading or trailing spaces\n * Transforms empty strings into undefined.\n *\n * @param s\n * @returns\n */\nexport const transformEmptyStringToUndefined = (s: string) =>\n s.trim() === \"\" ? undefined : s;\n\n/**\n * - Collapses any run of whitespace in a string (spaces, tabs, newlines, nbspb, and other weird unicode spaces etc.)\n * into a single ASCII space.\n * - Trims leading and trailing whitespace.\n * \" Jared \\n Gomez \\t Driver\\t \" -> \"Jared Gomez Driver\"\n *\n * @param s\n * @returns\n */\nexport const normalizeSpaces = (s: string) => whitespace(s, \"normalize\");\n\n/**\n * Removes all whitespace from a string\n * @param s\n * @returns\n */\nexport const removeAllWhitespace = (s: string) => whitespace(s, \"remove\");\n\nconst whitespace = (s: string, mode: GlobalTypes.WhitespaceMode) => {\n if (mode === \"remove\") {\n return s.replace(/\\s+/g, \"\");\n }\n\n return s.replace(/\\s+/g, \" \").trim();\n};\n\n/**\n * Removes all dashes and + signs from a string\n * +1-305-555-0123 -> \"13055550123\"\n * 305-555-0123 -> \"3055550123\"\n *\n * @param s\n * @returns\n */\nexport const removeDashesAndPlusSign = (s: string): string =>\n s.replace(/[+-]/g, \"\");\n\n/**\n * Rounds a number to a certain precision.\n * Contract:\n * 1. Number must be finite and non negative.\n * 2. Precision must be finite nonnegative and an integer.\n * 3. Precision must be <= Max precision\n * 4. Returns a number >= 0\n * Default is round half up.\n *\n * @param num\n * @param precision\n * @param opts\n * @returns\n */\nexport function roundWithPrecision(\n num: number,\n precision: number,\n opts?: GlobalTypes.ToFixedOptions\n): number {\n const MAX_PRECISION = 2;\n const { roundType = \"half_up\" } = opts ?? {};\n\n if (!Number.isFinite(num) || num < 0) {\n throw new RangeError(\"Number must be finite and greater than 0.\");\n }\n\n if (\n !Number.isFinite(precision) ||\n !Number.isInteger(precision) ||\n precision < 1\n ) {\n throw new RangeError(\"Precision must be a finite integer greater than 0.\");\n }\n\n if (precision > MAX_PRECISION) {\n throw new RangeError(\"Max precision allowed is 2.\");\n }\n\n return Number(\n (+(Math.round(+(num + \"e\" + precision)) + \"e\" + -precision)).toFixed(\n precision\n )\n );\n}\n","import { z } from \"zod\";\nimport * as GlobalUtils from \"../utils/utils\";\n\nexport const CustomerFormSchema = z.strictObject({\n customer_name: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z\n .string()\n .min(1, \"Customer name is required\")\n .max(50, \"Customer name must be at most 50 characters.\")\n ),\n\n customer_address: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z.string().max(100, \"Customer address must be at most 100 characters.\")\n )\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n customer_phone_number: z\n .string()\n .transform(GlobalUtils.removeAllWhitespace)\n .transform(GlobalUtils.removeDashesAndPlusSign)\n .refine((s) => s === \"\" || /^\\d{1,15}$/.test(s), {\n error: \"Phone number must be from 1 to 15 digits.\",\n })\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n customer_email_address: z\n .string()\n .transform(GlobalUtils.removeAllWhitespace)\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .pipe(\n z\n .email()\n .max(254, \"Customer email must be at most 254 characters.\")\n .transform((email) => email.toLowerCase())\n .optional()\n )\n .optional(),\n\n tax_rate: GlobalUtils.handleZodCurrency(0, 100),\n});\n","import { z } from \"zod\";\nimport * as GlobalUtils from \"../utils/utils\";\n\nexport const ProductFormSchema = z\n .strictObject({\n product_name: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z\n .string()\n .min(1, \"Product name is required\")\n .max(50, \"Product name must be at most 50 characters.\")\n ),\n\n product_description: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(\n z\n .string()\n .max(100, \"Product desription must be at most 100 characters.\")\n )\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n product_sku: z\n .string()\n .transform(GlobalUtils.normalizeSpaces)\n .pipe(z.string().max(30, \"Product SKU must be at most 30 characters.\"))\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n product_upc: z\n .string()\n .transform((s) => s.replace(/\\s+/g, \"\"))\n .refine((s) => s === \"\" || /^\\d{12}$/.test(s), {\n error: \"UPC must be exactly 12 digits\",\n })\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n product_gtin_14: z\n .string()\n .transform((s) => s.replace(/\\s+/g, \"\"))\n .refine((s) => s === \"\" || /^\\d{14}$/.test(s), {\n error: \"GTIN14 must be exactly 14 digits\",\n })\n .transform(GlobalUtils.transformEmptyStringToUndefined)\n .optional(),\n\n product_type: z.enum([\"unit\", \"weight\", \"case\"], { error: \"\" }),\n\n weight_unit: z.preprocess((v) => {\n if (v === \"\") return undefined;\n if (typeof v === \"string\") return v.trim().toLowerCase();\n return v;\n }, z.enum([\"kg\", \"lb\", \"g\", \"oz\"]).optional()),\n\n price: GlobalUtils.handleZodCurrency(1, 99_999),\n cost: GlobalUtils.handleZodCurrency(1, 99_999),\n })\n\n .superRefine((data, ctx) => {\n if (data.product_type === \"weight\" && !data.weight_unit) {\n ctx.addIssue({\n code: \"custom\",\n error: \"Weight unit is required.\",\n path: [\"weight_unit\"],\n });\n }\n\n if (\n data.product_type !== \"weight\" &&\n typeof data.weight_unit !== \"undefined\"\n ) {\n ctx.addIssue({\n code: \"custom\",\n error: \"Weight unit must be empty\",\n path: [\"weight_unit\"],\n });\n }\n });\n"],"mappings":"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","names":["z","z","z","z","z","z"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marmot-systems/common",
3
- "version": "1.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "Schemas and utils shared across Marmot apps",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -37,6 +37,6 @@
37
37
  "vitest": "^3.2.4"
38
38
  },
39
39
  "dependencies": {
40
- "zod": "^3.24.1"
40
+ "zod": "^4.1.12"
41
41
  }
42
42
  }