@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 +72 -34
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +50 -72
- package/dist/index.d.ts +50 -72
- package/dist/index.js +71 -34
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
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/
|
|
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({
|
|
49
|
-
|
|
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
|
-
|
|
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
|
|
85
|
-
|
|
86
|
-
|
|
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:
|
|
89
|
-
|
|
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:
|
|
92
|
-
|
|
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:
|
|
95
|
-
|
|
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
|
|
102
|
-
var ProductFormSchema =
|
|
103
|
-
product_name:
|
|
104
|
-
|
|
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:
|
|
107
|
-
|
|
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:
|
|
110
|
-
product_upc:
|
|
111
|
-
|
|
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:
|
|
114
|
-
|
|
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:
|
|
117
|
-
|
|
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
|
-
},
|
|
160
|
+
}, import_zod4.z.enum(["kg", "lb", "g", "oz"]).optional()),
|
|
124
161
|
price: handleZodCurrency(1, 99999),
|
|
125
162
|
cost: handleZodCurrency(1, 99999)
|
|
126
|
-
}).
|
|
163
|
+
}).superRefine((data, ctx) => {
|
|
127
164
|
if (data.product_type === "weight" && !data.weight_unit) {
|
|
128
165
|
ctx.addIssue({
|
|
129
|
-
code:
|
|
130
|
-
|
|
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:
|
|
137
|
-
|
|
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,
|
package/dist/index.cjs.map
CHANGED
|
@@ -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.
|
|
5
|
-
customer_address: z.ZodOptional<z.
|
|
6
|
-
customer_phone_number: z.ZodOptional<z.
|
|
7
|
-
customer_email_address: z.ZodOptional<z.
|
|
8
|
-
tax_rate: z.
|
|
9
|
-
},
|
|
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.
|
|
24
|
-
product_name: z.
|
|
25
|
-
product_description: z.ZodOptional<z.
|
|
26
|
-
product_sku: z.ZodOptional<z.
|
|
27
|
-
product_upc: z.ZodOptional<z.
|
|
28
|
-
product_gtin_14: z.ZodOptional<z.
|
|
29
|
-
product_type: z.ZodEnum<
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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.
|
|
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,
|
|
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.
|
|
5
|
-
customer_address: z.ZodOptional<z.
|
|
6
|
-
customer_phone_number: z.ZodOptional<z.
|
|
7
|
-
customer_email_address: z.ZodOptional<z.
|
|
8
|
-
tax_rate: z.
|
|
9
|
-
},
|
|
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.
|
|
24
|
-
product_name: z.
|
|
25
|
-
product_description: z.ZodOptional<z.
|
|
26
|
-
product_sku: z.ZodOptional<z.
|
|
27
|
-
product_upc: z.ZodOptional<z.
|
|
28
|
-
product_gtin_14: z.ZodOptional<z.
|
|
29
|
-
product_type: z.ZodEnum<
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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.
|
|
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,
|
|
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/
|
|
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({
|
|
16
|
-
|
|
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
|
-
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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:
|
|
56
|
-
|
|
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:
|
|
59
|
-
|
|
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:
|
|
62
|
-
|
|
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
|
|
69
|
-
var ProductFormSchema =
|
|
70
|
-
product_name:
|
|
71
|
-
|
|
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:
|
|
74
|
-
|
|
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:
|
|
77
|
-
product_upc:
|
|
78
|
-
|
|
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:
|
|
81
|
-
|
|
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:
|
|
84
|
-
|
|
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
|
-
},
|
|
126
|
+
}, z4.enum(["kg", "lb", "g", "oz"]).optional()),
|
|
91
127
|
price: handleZodCurrency(1, 99999),
|
|
92
128
|
cost: handleZodCurrency(1, 99999)
|
|
93
|
-
}).
|
|
129
|
+
}).superRefine((data, ctx) => {
|
|
94
130
|
if (data.product_type === "weight" && !data.weight_unit) {
|
|
95
131
|
ctx.addIssue({
|
|
96
|
-
code:
|
|
97
|
-
|
|
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:
|
|
104
|
-
|
|
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": "
|
|
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": "^
|
|
40
|
+
"zod": "^4.1.12"
|
|
41
41
|
}
|
|
42
42
|
}
|