@marmot-systems/common 2.0.0 → 2.0.2

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
@@ -21,7 +21,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
23
  CustomerFormSchema: () => CustomerFormSchema,
24
+ ISO_COUNTRY_CODES: () => ISO_COUNTRY_CODES,
24
25
  ProductFormSchema: () => ProductFormSchema,
26
+ RegisterFormSchema: () => RegisterFormSchema,
27
+ USER_ROLES: () => USER_ROLES,
25
28
  handleZodCurrency: () => handleZodCurrency,
26
29
  normalizeSpaces: () => normalizeSpaces,
27
30
  removeAllWhitespace: () => removeAllWhitespace,
@@ -31,9 +34,13 @@ __export(index_exports, {
31
34
  });
32
35
  module.exports = __toCommonJS(index_exports);
33
36
 
34
- // src/schemas/customer_schemas.ts
37
+ // src/schemas/companies_schemas.ts
35
38
  var import_zod2 = require("zod");
36
39
 
40
+ // src/types/company_types.ts
41
+ var ISO_COUNTRY_CODES = ["US", "HN"];
42
+ var USER_ROLES = ["admin", "driver"];
43
+
37
44
  // src/utils/utils.ts
38
45
  var import_zod = require("zod");
39
46
  function handleZodCurrency(minAmount, maxAmount) {
@@ -80,45 +87,83 @@ function roundWithPrecision(num, precision, opts) {
80
87
  );
81
88
  }
82
89
 
90
+ // src/schemas/companies_schemas.ts
91
+ var iso_country_code = import_zod2.z.enum(ISO_COUNTRY_CODES, {
92
+ error: "Country code not supported."
93
+ });
94
+ var user_role = import_zod2.z.enum(USER_ROLES, {
95
+ error: "User role not supported."
96
+ });
97
+ var RegisterFormSchema = import_zod2.z.strictObject({
98
+ companyData: import_zod2.z.strictObject({
99
+ name: import_zod2.z.string().transform(normalizeSpaces).pipe(
100
+ import_zod2.z.string().min(1, "Company name is required").max(50, "Company name must be at most 50 characters.")
101
+ ),
102
+ address: import_zod2.z.string().transform(normalizeSpaces).pipe(
103
+ import_zod2.z.string().min(1, "Company address is required").max(100, "Company address must be at most 100 characters.")
104
+ ),
105
+ phone_number: import_zod2.z.string().transform(removeAllWhitespace).transform(removeDashesAndPlusSign).refine((s) => /^\d{1,15}$/.test(s), {
106
+ error: "Phone number required and must be from 1 to 15 digits."
107
+ }),
108
+ iso_country_code: import_zod2.z.string().transform(removeAllWhitespace).transform((s) => s.toUpperCase()).pipe(iso_country_code)
109
+ }),
110
+ adminUserData: import_zod2.z.strictObject({
111
+ first_name: import_zod2.z.string().transform(normalizeSpaces).pipe(
112
+ import_zod2.z.string().min(1, "First name is required").max(50, "First name must be at most 50 characters.")
113
+ ),
114
+ last_name: import_zod2.z.string().transform(normalizeSpaces).pipe(
115
+ import_zod2.z.string().min(1, "Last name is required").max(50, "Last name must be at most 50 characters.")
116
+ ),
117
+ email: import_zod2.z.string().transform(removeAllWhitespace).pipe(
118
+ import_zod2.z.email().max(254, "Customer email must be at most 254 characters.").transform((email) => email.toLowerCase())
119
+ ),
120
+ 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(
121
+ /[@$!%*?&#^_+=-]/,
122
+ "Password must contain at least one special character"
123
+ ).regex(/^\S*$/, "Password cannot contain spaces or other whitespace.")
124
+ })
125
+ });
126
+
83
127
  // src/schemas/customer_schemas.ts
84
- var CustomerFormSchema = import_zod2.z.strictObject({
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.")
128
+ var import_zod3 = require("zod");
129
+ var CustomerFormSchema = import_zod3.z.strictObject({
130
+ customer_name: import_zod3.z.string().transform(normalizeSpaces).pipe(
131
+ import_zod3.z.string().min(1, "Customer name is required").max(50, "Customer name must be at most 50 characters.")
87
132
  ),
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.")
133
+ customer_address: import_zod3.z.string().transform(normalizeSpaces).pipe(
134
+ import_zod3.z.string().max(100, "Customer address must be at most 100 characters.")
90
135
  ).transform(transformEmptyStringToUndefined).optional(),
91
- customer_phone_number: import_zod2.z.string().transform(removeAllWhitespace).transform(removeDashesAndPlusSign).refine((s) => s === "" || /^\d{1,15}$/.test(s), {
136
+ customer_phone_number: import_zod3.z.string().transform(removeAllWhitespace).transform(removeDashesAndPlusSign).refine((s) => s === "" || /^\d{1,15}$/.test(s), {
92
137
  error: "Phone number must be from 1 to 15 digits."
93
138
  }).transform(transformEmptyStringToUndefined).optional(),
94
- customer_email_address: import_zod2.z.string().transform(removeAllWhitespace).transform(transformEmptyStringToUndefined).pipe(
95
- import_zod2.z.email().max(254, "Customer email must be at most 254 characters.").transform((email) => email.toLowerCase()).optional()
139
+ customer_email_address: import_zod3.z.string().transform(removeAllWhitespace).transform(transformEmptyStringToUndefined).pipe(
140
+ import_zod3.z.email().max(254, "Customer email must be at most 254 characters.").transform((email) => email.toLowerCase()).optional()
96
141
  ).optional(),
97
142
  tax_rate: handleZodCurrency(0, 100)
98
143
  });
99
144
 
100
145
  // src/schemas/product_schemas.ts
101
- var import_zod3 = require("zod");
102
- var ProductFormSchema = import_zod3.z.strictObject({
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.")
146
+ var import_zod4 = require("zod");
147
+ var ProductFormSchema = import_zod4.z.strictObject({
148
+ product_name: import_zod4.z.string().transform(normalizeSpaces).pipe(
149
+ import_zod4.z.string().min(1, "Product name is required").max(50, "Product name must be at most 50 characters.")
105
150
  ),
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.")
151
+ product_description: import_zod4.z.string().transform(normalizeSpaces).pipe(
152
+ import_zod4.z.string().max(100, "Product desription must be at most 100 characters.")
108
153
  ).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), {
154
+ 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(),
155
+ product_upc: import_zod4.z.string().transform((s) => s.replace(/\s+/g, "")).refine((s) => s === "" || /^\d{12}$/.test(s), {
111
156
  error: "UPC must be exactly 12 digits"
112
157
  }).transform(transformEmptyStringToUndefined).optional(),
113
- product_gtin_14: import_zod3.z.string().transform((s) => s.replace(/\s+/g, "")).refine((s) => s === "" || /^\d{14}$/.test(s), {
158
+ product_gtin_14: import_zod4.z.string().transform((s) => s.replace(/\s+/g, "")).refine((s) => s === "" || /^\d{14}$/.test(s), {
114
159
  error: "GTIN14 must be exactly 14 digits"
115
160
  }).transform(transformEmptyStringToUndefined).optional(),
116
- product_type: import_zod3.z.enum(["unit", "weight", "case"], { error: "" }),
117
- weight_unit: import_zod3.z.preprocess((v) => {
161
+ product_type: import_zod4.z.enum(["unit", "weight", "case"], { error: "" }),
162
+ weight_unit: import_zod4.z.preprocess((v) => {
118
163
  if (v === "") return void 0;
119
164
  if (typeof v === "string") return v.trim().toLowerCase();
120
165
  return v;
121
- }, import_zod3.z.enum(["kg", "lb", "g", "oz"]).optional()),
166
+ }, import_zod4.z.enum(["kg", "lb", "g", "oz"]).optional()),
122
167
  price: handleZodCurrency(1, 99999),
123
168
  cost: handleZodCurrency(1, 99999)
124
169
  }).superRefine((data, ctx) => {
@@ -140,7 +185,10 @@ var ProductFormSchema = import_zod3.z.strictObject({
140
185
  // Annotate the CommonJS export names for ESM import in node:
141
186
  0 && (module.exports = {
142
187
  CustomerFormSchema,
188
+ ISO_COUNTRY_CODES,
143
189
  ProductFormSchema,
190
+ RegisterFormSchema,
191
+ USER_ROLES,
144
192
  handleZodCurrency,
145
193
  normalizeSpaces,
146
194
  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.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 * 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 *\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 .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"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/schemas/companies_schemas.ts","../src/types/company_types.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\";\nexport * from \"./types/company_types\";\n","import { z } from \"zod\";\nimport { ISO_COUNTRY_CODES, USER_ROLES } from \"../types/company_types\";\nimport * as GlobalUtils from \"../utils/utils\";\n\nconst iso_country_code = z.enum(ISO_COUNTRY_CODES, {\n error: \"Country code not supported.\",\n});\n\nconst user_role = z.enum(USER_ROLES, {\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","export const ISO_COUNTRY_CODES = [\"US\", \"HN\"] as const;\n\nexport type IsoCountryCode = (typeof ISO_COUNTRY_CODES)[number];\n\nexport const USER_ROLES = [\"admin\", \"driver\"] as const;\n\nexport type UserRole = (typeof USER_ROLES)[number];\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,5 +1,23 @@
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
22
  customer_name: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>;
5
23
  customer_address: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>, z.ZodTransform<string | undefined, string>>>;
@@ -83,6 +101,7 @@ declare const removeDashesAndPlusSign: (s: string) => string;
83
101
  * 2. Precision must be finite nonnegative and an integer.
84
102
  * 3. Precision must be <= Max precision
85
103
  * 4. Returns a number >= 0
104
+ * Default is round half up.
86
105
  *
87
106
  * @param num
88
107
  * @param precision
@@ -91,4 +110,9 @@ declare const removeDashesAndPlusSign: (s: string) => string;
91
110
  */
92
111
  declare function roundWithPrecision(num: number, precision: number, opts?: ToFixedOptions): number;
93
112
 
94
- export { CustomerFormSchema, ProductFormSchema, handleZodCurrency, normalizeSpaces, removeAllWhitespace, removeDashesAndPlusSign, roundWithPrecision, transformEmptyStringToUndefined };
113
+ declare const ISO_COUNTRY_CODES: readonly ["US", "HN"];
114
+ type IsoCountryCode = (typeof ISO_COUNTRY_CODES)[number];
115
+ declare const USER_ROLES: readonly ["admin", "driver"];
116
+ type UserRole = (typeof USER_ROLES)[number];
117
+
118
+ export { CustomerFormSchema, ISO_COUNTRY_CODES, type IsoCountryCode, ProductFormSchema, RegisterFormSchema, USER_ROLES, type UserRole, handleZodCurrency, normalizeSpaces, removeAllWhitespace, removeDashesAndPlusSign, roundWithPrecision, transformEmptyStringToUndefined };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,23 @@
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
22
  customer_name: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>;
5
23
  customer_address: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>, z.ZodTransform<string | undefined, string>>>;
@@ -83,6 +101,7 @@ declare const removeDashesAndPlusSign: (s: string) => string;
83
101
  * 2. Precision must be finite nonnegative and an integer.
84
102
  * 3. Precision must be <= Max precision
85
103
  * 4. Returns a number >= 0
104
+ * Default is round half up.
86
105
  *
87
106
  * @param num
88
107
  * @param precision
@@ -91,4 +110,9 @@ declare const removeDashesAndPlusSign: (s: string) => string;
91
110
  */
92
111
  declare function roundWithPrecision(num: number, precision: number, opts?: ToFixedOptions): number;
93
112
 
94
- export { CustomerFormSchema, ProductFormSchema, handleZodCurrency, normalizeSpaces, removeAllWhitespace, removeDashesAndPlusSign, roundWithPrecision, transformEmptyStringToUndefined };
113
+ declare const ISO_COUNTRY_CODES: readonly ["US", "HN"];
114
+ type IsoCountryCode = (typeof ISO_COUNTRY_CODES)[number];
115
+ declare const USER_ROLES: readonly ["admin", "driver"];
116
+ type UserRole = (typeof USER_ROLES)[number];
117
+
118
+ export { CustomerFormSchema, ISO_COUNTRY_CODES, type IsoCountryCode, ProductFormSchema, RegisterFormSchema, USER_ROLES, type UserRole, handleZodCurrency, normalizeSpaces, removeAllWhitespace, removeDashesAndPlusSign, roundWithPrecision, transformEmptyStringToUndefined };
package/dist/index.js CHANGED
@@ -1,6 +1,10 @@
1
- // src/schemas/customer_schemas.ts
1
+ // src/schemas/companies_schemas.ts
2
2
  import { z as z2 } from "zod";
3
3
 
4
+ // src/types/company_types.ts
5
+ var ISO_COUNTRY_CODES = ["US", "HN"];
6
+ var USER_ROLES = ["admin", "driver"];
7
+
4
8
  // src/utils/utils.ts
5
9
  import { z } from "zod";
6
10
  function handleZodCurrency(minAmount, maxAmount) {
@@ -47,45 +51,83 @@ function roundWithPrecision(num, precision, opts) {
47
51
  );
48
52
  }
49
53
 
54
+ // src/schemas/companies_schemas.ts
55
+ var iso_country_code = z2.enum(ISO_COUNTRY_CODES, {
56
+ error: "Country code not supported."
57
+ });
58
+ var user_role = z2.enum(USER_ROLES, {
59
+ error: "User role not supported."
60
+ });
61
+ var RegisterFormSchema = z2.strictObject({
62
+ companyData: z2.strictObject({
63
+ name: z2.string().transform(normalizeSpaces).pipe(
64
+ z2.string().min(1, "Company name is required").max(50, "Company name must be at most 50 characters.")
65
+ ),
66
+ address: z2.string().transform(normalizeSpaces).pipe(
67
+ z2.string().min(1, "Company address is required").max(100, "Company address must be at most 100 characters.")
68
+ ),
69
+ phone_number: z2.string().transform(removeAllWhitespace).transform(removeDashesAndPlusSign).refine((s) => /^\d{1,15}$/.test(s), {
70
+ error: "Phone number required and must be from 1 to 15 digits."
71
+ }),
72
+ iso_country_code: z2.string().transform(removeAllWhitespace).transform((s) => s.toUpperCase()).pipe(iso_country_code)
73
+ }),
74
+ adminUserData: z2.strictObject({
75
+ first_name: z2.string().transform(normalizeSpaces).pipe(
76
+ z2.string().min(1, "First name is required").max(50, "First name must be at most 50 characters.")
77
+ ),
78
+ last_name: z2.string().transform(normalizeSpaces).pipe(
79
+ z2.string().min(1, "Last name is required").max(50, "Last name must be at most 50 characters.")
80
+ ),
81
+ email: z2.string().transform(removeAllWhitespace).pipe(
82
+ z2.email().max(254, "Customer email must be at most 254 characters.").transform((email) => email.toLowerCase())
83
+ ),
84
+ 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(
85
+ /[@$!%*?&#^_+=-]/,
86
+ "Password must contain at least one special character"
87
+ ).regex(/^\S*$/, "Password cannot contain spaces or other whitespace.")
88
+ })
89
+ });
90
+
50
91
  // src/schemas/customer_schemas.ts
51
- var CustomerFormSchema = z2.strictObject({
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.")
92
+ import { z as z3 } from "zod";
93
+ var CustomerFormSchema = z3.strictObject({
94
+ customer_name: z3.string().transform(normalizeSpaces).pipe(
95
+ z3.string().min(1, "Customer name is required").max(50, "Customer name must be at most 50 characters.")
54
96
  ),
55
- customer_address: z2.string().transform(normalizeSpaces).pipe(
56
- z2.string().max(100, "Customer address must be at most 100 characters.")
97
+ customer_address: z3.string().transform(normalizeSpaces).pipe(
98
+ z3.string().max(100, "Customer address must be at most 100 characters.")
57
99
  ).transform(transformEmptyStringToUndefined).optional(),
58
- customer_phone_number: z2.string().transform(removeAllWhitespace).transform(removeDashesAndPlusSign).refine((s) => s === "" || /^\d{1,15}$/.test(s), {
100
+ customer_phone_number: z3.string().transform(removeAllWhitespace).transform(removeDashesAndPlusSign).refine((s) => s === "" || /^\d{1,15}$/.test(s), {
59
101
  error: "Phone number must be from 1 to 15 digits."
60
102
  }).transform(transformEmptyStringToUndefined).optional(),
61
- customer_email_address: z2.string().transform(removeAllWhitespace).transform(transformEmptyStringToUndefined).pipe(
62
- z2.email().max(254, "Customer email must be at most 254 characters.").transform((email) => email.toLowerCase()).optional()
103
+ customer_email_address: z3.string().transform(removeAllWhitespace).transform(transformEmptyStringToUndefined).pipe(
104
+ z3.email().max(254, "Customer email must be at most 254 characters.").transform((email) => email.toLowerCase()).optional()
63
105
  ).optional(),
64
106
  tax_rate: handleZodCurrency(0, 100)
65
107
  });
66
108
 
67
109
  // src/schemas/product_schemas.ts
68
- import { z as z3 } from "zod";
69
- var ProductFormSchema = z3.strictObject({
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.")
110
+ import { z as z4 } from "zod";
111
+ var ProductFormSchema = z4.strictObject({
112
+ product_name: z4.string().transform(normalizeSpaces).pipe(
113
+ z4.string().min(1, "Product name is required").max(50, "Product name must be at most 50 characters.")
72
114
  ),
73
- product_description: z3.string().transform(normalizeSpaces).pipe(
74
- z3.string().max(100, "Product desription must be at most 100 characters.")
115
+ product_description: z4.string().transform(normalizeSpaces).pipe(
116
+ z4.string().max(100, "Product desription must be at most 100 characters.")
75
117
  ).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), {
118
+ product_sku: z4.string().transform(normalizeSpaces).pipe(z4.string().max(30, "Product SKU must be at most 30 characters.")).transform(transformEmptyStringToUndefined).optional(),
119
+ product_upc: z4.string().transform((s) => s.replace(/\s+/g, "")).refine((s) => s === "" || /^\d{12}$/.test(s), {
78
120
  error: "UPC must be exactly 12 digits"
79
121
  }).transform(transformEmptyStringToUndefined).optional(),
80
- product_gtin_14: z3.string().transform((s) => s.replace(/\s+/g, "")).refine((s) => s === "" || /^\d{14}$/.test(s), {
122
+ product_gtin_14: z4.string().transform((s) => s.replace(/\s+/g, "")).refine((s) => s === "" || /^\d{14}$/.test(s), {
81
123
  error: "GTIN14 must be exactly 14 digits"
82
124
  }).transform(transformEmptyStringToUndefined).optional(),
83
- product_type: z3.enum(["unit", "weight", "case"], { error: "" }),
84
- weight_unit: z3.preprocess((v) => {
125
+ product_type: z4.enum(["unit", "weight", "case"], { error: "" }),
126
+ weight_unit: z4.preprocess((v) => {
85
127
  if (v === "") return void 0;
86
128
  if (typeof v === "string") return v.trim().toLowerCase();
87
129
  return v;
88
- }, z3.enum(["kg", "lb", "g", "oz"]).optional()),
130
+ }, z4.enum(["kg", "lb", "g", "oz"]).optional()),
89
131
  price: handleZodCurrency(1, 99999),
90
132
  cost: handleZodCurrency(1, 99999)
91
133
  }).superRefine((data, ctx) => {
@@ -106,7 +148,10 @@ var ProductFormSchema = z3.strictObject({
106
148
  });
107
149
  export {
108
150
  CustomerFormSchema,
151
+ ISO_COUNTRY_CODES,
109
152
  ProductFormSchema,
153
+ RegisterFormSchema,
154
+ USER_ROLES,
110
155
  handleZodCurrency,
111
156
  normalizeSpaces,
112
157
  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.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 * 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 *\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 .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"]}
1
+ {"version":3,"sources":["../src/schemas/companies_schemas.ts","../src/types/company_types.ts","../src/utils/utils.ts","../src/schemas/customer_schemas.ts","../src/schemas/product_schemas.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { ISO_COUNTRY_CODES, USER_ROLES } from \"../types/company_types\";\nimport * as GlobalUtils from \"../utils/utils\";\n\nconst iso_country_code = z.enum(ISO_COUNTRY_CODES, {\n error: \"Country code not supported.\",\n});\n\nconst user_role = z.enum(USER_ROLES, {\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","export const ISO_COUNTRY_CODES = [\"US\", \"HN\"] as const;\n\nexport type IsoCountryCode = (typeof ISO_COUNTRY_CODES)[number];\n\nexport const USER_ROLES = [\"admin\", \"driver\"] as const;\n\nexport type UserRole = (typeof USER_ROLES)[number];\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": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "description": "Schemas and utils shared across Marmot apps",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",