@marmot-systems/common 2.0.26 → 2.0.28

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
@@ -248,8 +248,11 @@ var BaseInvoice = import_zod6.z.object({
248
248
  var LineItemBase = import_zod6.z.object({
249
249
  invoice_id: import_zod6.z.uuid().optional(),
250
250
  product_id: import_zod6.z.uuid({ error: "Select a product" }),
251
- quantity: handleZodCurrency(0.01, 99999.99),
252
- amount: handleZodCurrency(0.01, 999999.99).optional()
251
+ product_description: import_zod6.z.string().optional(),
252
+ product_type: import_zod6.z.enum(["unit", "weight", "case"]).optional(),
253
+ product_upc: import_zod6.z.string().optional(),
254
+ weight_unit: import_zod6.z.enum(["kg", "lb", "g", "oz"]).optional(),
255
+ quantity: handleZodCurrency(0.01, 99999.99)
253
256
  });
254
257
  var SalesItem = LineItemBase.safeExtend({
255
258
  price: handleZodCurrency(0, 99999.99),
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/schemas/companies_schemas.ts","../src/types/company_types.ts","../src/utils/types.ts","../src/utils/utils.ts","../src/schemas/customer_schemas.ts","../src/schemas/product_schemas.ts","../src/types/shared_types.ts","../src/domains/invoices/invoices_schemas.ts","../src/domains/invoices/invoices_types.ts","../src/utils/date_utils.ts","../src/utils/errors_utils.ts","../src/utils/money_utils.ts"],"sourcesContent":["export * from \"./schemas/companies_schemas\";\nexport * from \"./schemas/customer_schemas\";\nexport * from \"./schemas/product_schemas\";\nexport * from \"./utils/utils\";\nexport {\n UserRole,\n IsoCountryCode,\n InventorySystem,\n} from \"./types/company_types\";\nexport { CreatedLocation, UUID } from \"./types/shared_types\";\nexport { SyncInvoice } from \"./types/sync_types\";\nexport * from \"./types/customers_types\";\nexport * from \"./types/vendors_types\";\nexport * from \"./domains/invoices/invoices_schemas\";\nexport * from \"./domains/invoices/invoices_types\";\nexport * from \"./domains/products/products_types\";\nexport * from \"./utils/date_utils\";\nexport * from \"./utils/errors_utils\";\nexport * from \"./utils/money_utils\";\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 company_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 company_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 company_phone_number: z\n .string()\n .transform(GlobalUtils.removeAllWhitespace)\n .transform(GlobalUtils.removeDashesAndPlusSign)\n .refine((s) => /^\\d{4,15}$/.test(s), {\n error: \"Phone number required and must be from 4 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 user_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 user_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 user_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\nexport type InventorySystem = \"warehouse_only\" | \"dsd\";\n","import { IsoCountryCode } from \"../types/company_types\";\n\ntype RoundType = \"half_up\";\n\nexport interface ToFixedOptions {\n roundType?: RoundType;\n}\n\nexport type WhitespaceMode = \"normalize\" | \"remove\";\n\nexport type IsoCurrencyCode = \"USD\" | \"HNL\";\n\nexport const countryToCurrency: Record<IsoCountryCode, IsoCurrencyCode> = {\n US: \"USD\",\n HN: \"HNL\",\n};\n","import * as GlobalTypes from \"./types\";\nimport { IsoCountryCode } from \"../types/company_types\";\n\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 const fromString = z\n .string({\n error: \"Enter a valid number\",\n })\n .refine((s) => s.trim().length > 0, { error: \"Enter a valid number\" })\n .transform((s) => s.replace(/[,\\s]/g, \"\"))\n .refine((s) => s !== \"\" && !Number.isNaN(Number(s)), {\n error: \"Enter a valid number\",\n })\n .refine((s) => Number.isFinite(Number(s)), {\n error: \"Enter a valid number\",\n })\n .refine((s) => Number(s) >= 0, { error: \"Enter a positive number\" })\n .transform((s) => Number(s));\n\n const fromNumber = z\n .number()\n .refine((n) => Number.isFinite(n), { error: \"Enter a valid number\" })\n .refine((n) => n >= 0, { error: \"Enter a positive number\" });\n\n return z\n .union([fromString, fromNumber])\n .transform((n) => roundWithPrecision(n, 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\nexport function getCurrencyFromCountry(\n country: IsoCountryCode\n): GlobalTypes.IsoCurrencyCode {\n return GlobalTypes.countryToCurrency[country];\n}\n\nexport function formatMoneyCurrency(\n value: number,\n cur: GlobalTypes.IsoCurrencyCode\n) {\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: cur,\n }).format(value);\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{4,15}$/.test(s), {\n error: \"Phone number must be from 4 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\"], {\n error: \"Product type must be unit, weight, or case.\",\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(0, 99_999.99),\n cost: GlobalUtils.handleZodCurrency(0, 99_999.99),\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","import { z } from \"zod\";\n\nexport const CREATED_LOCATION = [\"web\", \"mobile\"] as const;\n\nexport type CreatedLocation = (typeof CREATED_LOCATION)[number];\n\nexport type IntBool = 0 | 1;\n\nexport const uuidSchema = z.uuid();\nexport type UUID = z.infer<typeof uuidSchema>;\n","import { z } from \"zod\";\nimport { CREDIT_TYPE, INVOICE_STATUS, INVOICE_TYPE } from \"./invoices_types\";\nimport { handleZodCurrency } from \"../../utils/utils\";\n\nconst YmdDateSchema = z.string().regex(/^\\d{4}-\\d{2}-\\d{2}$/, \"Use YYYY-MM-DD\");\n\nconst BaseInvoice = z\n .object({\n invoice_type: z.enum(INVOICE_TYPE, { error: \"Invoice type not found.\" }),\n invoice_date: YmdDateSchema,\n due_date: YmdDateSchema,\n tax_rate: z.number().default(0),\n tax_amount: z.number().default(0),\n warehouse_id: z.uuid().optional(),\n invoice_status: z.enum(INVOICE_STATUS).default(\"finalized\"),\n })\n .superRefine(({ invoice_date, due_date }, ctx) => {\n if (due_date < invoice_date) {\n ctx.addIssue({\n code: \"custom\",\n message: \"Due date can't be earlier than the invoice date.\",\n path: [\"due_date\"],\n });\n }\n });\n\nconst LineItemBase = z.object({\n invoice_id: z.uuid().optional(),\n product_id: z.uuid({ error: \"Select a product\" }),\n quantity: handleZodCurrency(0.01, 99_999.99),\n amount: handleZodCurrency(0.01, 999_999.99).optional(),\n});\n\nconst SalesItem = LineItemBase.safeExtend({\n price: handleZodCurrency(0, 99_999.99),\n credit_type: z.undefined(),\n});\n\nconst CreditItem = LineItemBase.safeExtend({\n price: handleZodCurrency(0, 99_999.99),\n credit_type: z.enum(CREDIT_TYPE, {\n error: \"Select a credit type\",\n }),\n});\n\nconst PurchaseItem = LineItemBase.safeExtend({\n price: handleZodCurrency(0, 99_999.99),\n credit_type: z.undefined(),\n});\n\nexport const SalesInvoiceSchema = BaseInvoice.safeExtend({\n invoice_type: z.literal(\"sales\"),\n party_id: z.uuid({ message: \"Select a customer\" }),\n invoice_items: z.array(SalesItem).min(1, \"Add at least one invoice item\"),\n});\n\nexport const CreditInvoiceSchema = BaseInvoice.safeExtend({\n invoice_type: z.literal(\"credit\"),\n party_id: z.uuid({ message: \"Select a customer\" }),\n invoice_items: z.array(CreditItem).min(1, \"Add at least one invoice item\"),\n});\n\nexport const PurchaseInvoiceSchema = BaseInvoice.safeExtend({\n invoice_type: z.literal(\"purchase\"),\n party_id: z.uuid({ message: \"Select a vendor\" }),\n invoice_items: z.array(PurchaseItem).min(1, \"Add at least one invoice item\"),\n});\n\nexport const AnyInvoiceSchema = z.discriminatedUnion(\"invoice_type\", [\n SalesInvoiceSchema,\n PurchaseInvoiceSchema,\n CreditInvoiceSchema,\n]);\n","import { z } from \"zod\";\nimport * as InvoiceSchemas from \"./invoices_schemas\";\n\nexport type SalesInvoice = z.infer<typeof InvoiceSchemas.SalesInvoiceSchema>;\nexport type CreditInvoice = z.infer<typeof InvoiceSchemas.CreditInvoiceSchema>;\nexport type PurchaseInvoice = z.infer<\n typeof InvoiceSchemas.PurchaseInvoiceSchema\n>;\nexport type AnyInvoiceOut = z.output<typeof InvoiceSchemas.AnyInvoiceSchema>;\n\nexport const INVOICE_TYPE = [\"sales\", \"credit\", \"purchase\"] as const;\n\nexport type InvoiceType = (typeof INVOICE_TYPE)[number];\n\nexport const INVOICE_STATUS = [\"finalized\", \"voided\"] as const;\n\nexport type InvoiceStatus = (typeof INVOICE_STATUS)[number];\n\nexport const CREDIT_TYPE = [\"dump\", \"return\"] as const;\n\nexport type CreditType = (typeof CREDIT_TYPE)[number];\n","// \"Today\" in the user's LOCAL timezone as YMD\nexport function todayLocalYmd(): string {\n const now = new Date();\n const y = now.getFullYear();\n const m = String(now.getMonth() + 1).padStart(2, \"0\");\n const d = String(now.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${d}`;\n}\n\n// Add days in LOCAL time (no drift)\nexport function addDaysLocalYmd(ymd: string, days: number): string {\n const dt = localDateFromYmd(ymd);\n dt.setDate(dt.getDate() + days);\n return ymdFromLocalDate(dt);\n}\n\nexport function formatYmdLong(ymd: string, locale = \"en-US\"): string {\n const { y, m, d } = parseYmd(ymd);\n const utcDate = new Date(Date.UTC(y, m - 1, d)); // 00:00Z\n return new Intl.DateTimeFormat(locale, {\n dateStyle: \"long\",\n timeZone: \"UTC\",\n }).format(utcDate);\n}\n\nexport function localDateFromYmd(ymd: string): Date {\n const { y, m, d } = parseYmd(ymd);\n return new Date(y, m - 1, d); // LOCAL midnight\n}\n\nexport function ymdFromLocalDate(dt: Date): string {\n const y = dt.getFullYear();\n const m = String(dt.getMonth() + 1).padStart(2, \"0\");\n const d = String(dt.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${d}`;\n}\n\nfunction parseYmd(ymd: string): { y: number; m: number; d: number } {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(ymd);\n if (!m) throw new Error(\"Bad YMD\");\n return { y: Number(m[1]), m: Number(m[2]), d: Number(m[3]) };\n}\n","import type { FieldError, FieldErrorsImpl, Merge } from \"react-hook-form\";\n\ntype RHFError =\n | string\n | FieldError\n | Merge<FieldError, FieldErrorsImpl<any>>\n | undefined;\n\nexport const getErrorMessage = (err: RHFError): string | undefined => {\n if (!err) return undefined;\n if (typeof err === \"string\") return err;\n // FieldError has .message (string | undefined)\n const msg = (err as FieldError).message as string | undefined;\n return typeof msg === \"string\" ? msg : undefined;\n};\n","export const exceedsTwoDecimals = (raw: string) => {\n const s = String(raw ?? \"\").replace(/[,\\s]/g, \"\");\n const dot = s.indexOf(\".\");\n if (dot === -1) return false;\n const after = s.slice(dot + 1);\n const digitsAfter = (after.match(/\\d/g) ?? []).length;\n return digitsAfter > 2;\n};\n"],"mappings":"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","names":["import_zod","import_zod","import_zod","import_zod","import_zod"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/schemas/companies_schemas.ts","../src/types/company_types.ts","../src/utils/types.ts","../src/utils/utils.ts","../src/schemas/customer_schemas.ts","../src/schemas/product_schemas.ts","../src/types/shared_types.ts","../src/domains/invoices/invoices_schemas.ts","../src/domains/invoices/invoices_types.ts","../src/utils/date_utils.ts","../src/utils/errors_utils.ts","../src/utils/money_utils.ts"],"sourcesContent":["export * from \"./schemas/companies_schemas\";\nexport * from \"./schemas/customer_schemas\";\nexport * from \"./schemas/product_schemas\";\nexport * from \"./utils/utils\";\nexport {\n UserRole,\n IsoCountryCode,\n InventorySystem,\n} from \"./types/company_types\";\nexport { CreatedLocation, UUID } from \"./types/shared_types\";\nexport { SyncInvoice } from \"./types/sync_types\";\nexport * from \"./types/customers_types\";\nexport * from \"./types/vendors_types\";\nexport * from \"./domains/invoices/invoices_schemas\";\nexport * from \"./domains/invoices/invoices_types\";\nexport * from \"./domains/products/products_types\";\nexport * from \"./utils/date_utils\";\nexport * from \"./utils/errors_utils\";\nexport * from \"./utils/money_utils\";\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 company_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 company_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 company_phone_number: z\n .string()\n .transform(GlobalUtils.removeAllWhitespace)\n .transform(GlobalUtils.removeDashesAndPlusSign)\n .refine((s) => /^\\d{4,15}$/.test(s), {\n error: \"Phone number required and must be from 4 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 user_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 user_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 user_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\nexport type InventorySystem = \"warehouse_only\" | \"dsd\";\n","import { IsoCountryCode } from \"../types/company_types\";\n\ntype RoundType = \"half_up\";\n\nexport interface ToFixedOptions {\n roundType?: RoundType;\n}\n\nexport type WhitespaceMode = \"normalize\" | \"remove\";\n\nexport type IsoCurrencyCode = \"USD\" | \"HNL\";\n\nexport const countryToCurrency: Record<IsoCountryCode, IsoCurrencyCode> = {\n US: \"USD\",\n HN: \"HNL\",\n};\n","import * as GlobalTypes from \"./types\";\nimport { IsoCountryCode } from \"../types/company_types\";\n\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 const fromString = z\n .string({\n error: \"Enter a valid number\",\n })\n .refine((s) => s.trim().length > 0, { error: \"Enter a valid number\" })\n .transform((s) => s.replace(/[,\\s]/g, \"\"))\n .refine((s) => s !== \"\" && !Number.isNaN(Number(s)), {\n error: \"Enter a valid number\",\n })\n .refine((s) => Number.isFinite(Number(s)), {\n error: \"Enter a valid number\",\n })\n .refine((s) => Number(s) >= 0, { error: \"Enter a positive number\" })\n .transform((s) => Number(s));\n\n const fromNumber = z\n .number()\n .refine((n) => Number.isFinite(n), { error: \"Enter a valid number\" })\n .refine((n) => n >= 0, { error: \"Enter a positive number\" });\n\n return z\n .union([fromString, fromNumber])\n .transform((n) => roundWithPrecision(n, 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\nexport function getCurrencyFromCountry(\n country: IsoCountryCode\n): GlobalTypes.IsoCurrencyCode {\n return GlobalTypes.countryToCurrency[country];\n}\n\nexport function formatMoneyCurrency(\n value: number,\n cur: GlobalTypes.IsoCurrencyCode\n) {\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: cur,\n }).format(value);\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{4,15}$/.test(s), {\n error: \"Phone number must be from 4 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\"], {\n error: \"Product type must be unit, weight, or case.\",\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(0, 99_999.99),\n cost: GlobalUtils.handleZodCurrency(0, 99_999.99),\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","import { z } from \"zod\";\n\nexport const CREATED_LOCATION = [\"web\", \"mobile\"] as const;\n\nexport type CreatedLocation = (typeof CREATED_LOCATION)[number];\n\nexport type IntBool = 0 | 1;\n\nexport const uuidSchema = z.uuid();\nexport type UUID = z.infer<typeof uuidSchema>;\n","import { z } from \"zod\";\nimport { CREDIT_TYPE, INVOICE_STATUS, INVOICE_TYPE } from \"./invoices_types\";\nimport { handleZodCurrency } from \"../../utils/utils\";\n\nconst YmdDateSchema = z.string().regex(/^\\d{4}-\\d{2}-\\d{2}$/, \"Use YYYY-MM-DD\");\n\nconst BaseInvoice = z\n .object({\n invoice_type: z.enum(INVOICE_TYPE, { error: \"Invoice type not found.\" }),\n invoice_date: YmdDateSchema,\n due_date: YmdDateSchema,\n tax_rate: z.number().default(0),\n tax_amount: z.number().default(0),\n warehouse_id: z.uuid().optional(),\n invoice_status: z.enum(INVOICE_STATUS).default(\"finalized\"),\n })\n .superRefine(({ invoice_date, due_date }, ctx) => {\n if (due_date < invoice_date) {\n ctx.addIssue({\n code: \"custom\",\n message: \"Due date can't be earlier than the invoice date.\",\n path: [\"due_date\"],\n });\n }\n });\n\nconst LineItemBase = z.object({\n invoice_id: z.uuid().optional(),\n product_id: z.uuid({ error: \"Select a product\" }),\n product_description: z.string().optional(),\n product_type: z.enum([\"unit\", \"weight\", \"case\"]).optional(),\n product_upc: z.string().optional(),\n weight_unit: z.enum([\"kg\", \"lb\", \"g\", \"oz\"]).optional(),\n quantity: handleZodCurrency(0.01, 99_999.99),\n});\n\nconst SalesItem = LineItemBase.safeExtend({\n price: handleZodCurrency(0, 99_999.99),\n credit_type: z.undefined(),\n});\n\nconst CreditItem = LineItemBase.safeExtend({\n price: handleZodCurrency(0, 99_999.99),\n credit_type: z.enum(CREDIT_TYPE, {\n error: \"Select a credit type\",\n }),\n});\n\nconst PurchaseItem = LineItemBase.safeExtend({\n price: handleZodCurrency(0, 99_999.99),\n credit_type: z.undefined(),\n});\n\nexport const SalesInvoiceSchema = BaseInvoice.safeExtend({\n invoice_type: z.literal(\"sales\"),\n party_id: z.uuid({ message: \"Select a customer\" }),\n invoice_items: z.array(SalesItem).min(1, \"Add at least one invoice item\"),\n});\n\nexport const CreditInvoiceSchema = BaseInvoice.safeExtend({\n invoice_type: z.literal(\"credit\"),\n party_id: z.uuid({ message: \"Select a customer\" }),\n invoice_items: z.array(CreditItem).min(1, \"Add at least one invoice item\"),\n});\n\nexport const PurchaseInvoiceSchema = BaseInvoice.safeExtend({\n invoice_type: z.literal(\"purchase\"),\n party_id: z.uuid({ message: \"Select a vendor\" }),\n invoice_items: z.array(PurchaseItem).min(1, \"Add at least one invoice item\"),\n});\n\nexport const AnyInvoiceSchema = z.discriminatedUnion(\"invoice_type\", [\n SalesInvoiceSchema,\n PurchaseInvoiceSchema,\n CreditInvoiceSchema,\n]);\n","import { z } from \"zod\";\nimport * as InvoiceSchemas from \"./invoices_schemas\";\n\nexport type SalesInvoice = z.infer<typeof InvoiceSchemas.SalesInvoiceSchema>;\nexport type CreditInvoice = z.infer<typeof InvoiceSchemas.CreditInvoiceSchema>;\nexport type PurchaseInvoice = z.infer<\n typeof InvoiceSchemas.PurchaseInvoiceSchema\n>;\nexport type AnyInvoiceOut = z.output<typeof InvoiceSchemas.AnyInvoiceSchema>;\n\nexport const INVOICE_TYPE = [\"sales\", \"credit\", \"purchase\"] as const;\n\nexport type InvoiceType = (typeof INVOICE_TYPE)[number];\n\nexport const INVOICE_STATUS = [\"finalized\", \"voided\"] as const;\n\nexport type InvoiceStatus = (typeof INVOICE_STATUS)[number];\n\nexport const CREDIT_TYPE = [\"dump\", \"return\"] as const;\n\nexport type CreditType = (typeof CREDIT_TYPE)[number];\n","// \"Today\" in the user's LOCAL timezone as YMD\nexport function todayLocalYmd(): string {\n const now = new Date();\n const y = now.getFullYear();\n const m = String(now.getMonth() + 1).padStart(2, \"0\");\n const d = String(now.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${d}`;\n}\n\n// Add days in LOCAL time (no drift)\nexport function addDaysLocalYmd(ymd: string, days: number): string {\n const dt = localDateFromYmd(ymd);\n dt.setDate(dt.getDate() + days);\n return ymdFromLocalDate(dt);\n}\n\nexport function formatYmdLong(ymd: string, locale = \"en-US\"): string {\n const { y, m, d } = parseYmd(ymd);\n const utcDate = new Date(Date.UTC(y, m - 1, d)); // 00:00Z\n return new Intl.DateTimeFormat(locale, {\n dateStyle: \"long\",\n timeZone: \"UTC\",\n }).format(utcDate);\n}\n\nexport function localDateFromYmd(ymd: string): Date {\n const { y, m, d } = parseYmd(ymd);\n return new Date(y, m - 1, d); // LOCAL midnight\n}\n\nexport function ymdFromLocalDate(dt: Date): string {\n const y = dt.getFullYear();\n const m = String(dt.getMonth() + 1).padStart(2, \"0\");\n const d = String(dt.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${d}`;\n}\n\nfunction parseYmd(ymd: string): { y: number; m: number; d: number } {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(ymd);\n if (!m) throw new Error(\"Bad YMD\");\n return { y: Number(m[1]), m: Number(m[2]), d: Number(m[3]) };\n}\n","import type { FieldError, FieldErrorsImpl, Merge } from \"react-hook-form\";\n\ntype RHFError =\n | string\n | FieldError\n | Merge<FieldError, FieldErrorsImpl<any>>\n | undefined;\n\nexport const getErrorMessage = (err: RHFError): string | undefined => {\n if (!err) return undefined;\n if (typeof err === \"string\") return err;\n // FieldError has .message (string | undefined)\n const msg = (err as FieldError).message as string | undefined;\n return typeof msg === \"string\" ? msg : undefined;\n};\n","export const exceedsTwoDecimals = (raw: string) => {\n const s = String(raw ?? \"\").replace(/[,\\s]/g, \"\");\n const dot = s.indexOf(\".\");\n if (dot === -1) return false;\n const after = s.slice(dot + 1);\n const digitsAfter = (after.match(/\\d/g) ?? []).length;\n return digitsAfter > 2;\n};\n"],"mappings":"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","names":["import_zod","import_zod","import_zod","import_zod","import_zod"]}
package/dist/index.d.cts CHANGED
@@ -141,8 +141,20 @@ declare const SalesInvoiceSchema: z.ZodObject<{
141
141
  invoice_items: z.ZodArray<z.ZodObject<{
142
142
  invoice_id: z.ZodOptional<z.ZodUUID>;
143
143
  product_id: z.ZodUUID;
144
+ product_description: z.ZodOptional<z.ZodString>;
145
+ product_type: z.ZodOptional<z.ZodEnum<{
146
+ unit: "unit";
147
+ weight: "weight";
148
+ case: "case";
149
+ }>>;
150
+ product_upc: z.ZodOptional<z.ZodString>;
151
+ weight_unit: z.ZodOptional<z.ZodEnum<{
152
+ kg: "kg";
153
+ lb: "lb";
154
+ g: "g";
155
+ oz: "oz";
156
+ }>>;
144
157
  quantity: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
145
- amount: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>>;
146
158
  price: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
147
159
  credit_type: z.ZodUndefined;
148
160
  }, z.core.$strip>>;
@@ -162,8 +174,20 @@ declare const CreditInvoiceSchema: z.ZodObject<{
162
174
  invoice_items: z.ZodArray<z.ZodObject<{
163
175
  invoice_id: z.ZodOptional<z.ZodUUID>;
164
176
  product_id: z.ZodUUID;
177
+ product_description: z.ZodOptional<z.ZodString>;
178
+ product_type: z.ZodOptional<z.ZodEnum<{
179
+ unit: "unit";
180
+ weight: "weight";
181
+ case: "case";
182
+ }>>;
183
+ product_upc: z.ZodOptional<z.ZodString>;
184
+ weight_unit: z.ZodOptional<z.ZodEnum<{
185
+ kg: "kg";
186
+ lb: "lb";
187
+ g: "g";
188
+ oz: "oz";
189
+ }>>;
165
190
  quantity: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
166
- amount: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>>;
167
191
  price: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
168
192
  credit_type: z.ZodEnum<{
169
193
  dump: "dump";
@@ -186,8 +210,20 @@ declare const PurchaseInvoiceSchema: z.ZodObject<{
186
210
  invoice_items: z.ZodArray<z.ZodObject<{
187
211
  invoice_id: z.ZodOptional<z.ZodUUID>;
188
212
  product_id: z.ZodUUID;
213
+ product_description: z.ZodOptional<z.ZodString>;
214
+ product_type: z.ZodOptional<z.ZodEnum<{
215
+ unit: "unit";
216
+ weight: "weight";
217
+ case: "case";
218
+ }>>;
219
+ product_upc: z.ZodOptional<z.ZodString>;
220
+ weight_unit: z.ZodOptional<z.ZodEnum<{
221
+ kg: "kg";
222
+ lb: "lb";
223
+ g: "g";
224
+ oz: "oz";
225
+ }>>;
189
226
  quantity: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
190
- amount: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>>;
191
227
  price: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
192
228
  credit_type: z.ZodUndefined;
193
229
  }, z.core.$strip>>;
@@ -207,8 +243,20 @@ declare const AnyInvoiceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
207
243
  invoice_items: z.ZodArray<z.ZodObject<{
208
244
  invoice_id: z.ZodOptional<z.ZodUUID>;
209
245
  product_id: z.ZodUUID;
246
+ product_description: z.ZodOptional<z.ZodString>;
247
+ product_type: z.ZodOptional<z.ZodEnum<{
248
+ unit: "unit";
249
+ weight: "weight";
250
+ case: "case";
251
+ }>>;
252
+ product_upc: z.ZodOptional<z.ZodString>;
253
+ weight_unit: z.ZodOptional<z.ZodEnum<{
254
+ kg: "kg";
255
+ lb: "lb";
256
+ g: "g";
257
+ oz: "oz";
258
+ }>>;
210
259
  quantity: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
211
- amount: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>>;
212
260
  price: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
213
261
  credit_type: z.ZodUndefined;
214
262
  }, z.core.$strip>>;
@@ -227,8 +275,20 @@ declare const AnyInvoiceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
227
275
  invoice_items: z.ZodArray<z.ZodObject<{
228
276
  invoice_id: z.ZodOptional<z.ZodUUID>;
229
277
  product_id: z.ZodUUID;
278
+ product_description: z.ZodOptional<z.ZodString>;
279
+ product_type: z.ZodOptional<z.ZodEnum<{
280
+ unit: "unit";
281
+ weight: "weight";
282
+ case: "case";
283
+ }>>;
284
+ product_upc: z.ZodOptional<z.ZodString>;
285
+ weight_unit: z.ZodOptional<z.ZodEnum<{
286
+ kg: "kg";
287
+ lb: "lb";
288
+ g: "g";
289
+ oz: "oz";
290
+ }>>;
230
291
  quantity: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
231
- amount: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>>;
232
292
  price: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
233
293
  credit_type: z.ZodUndefined;
234
294
  }, z.core.$strip>>;
@@ -247,8 +307,20 @@ declare const AnyInvoiceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
247
307
  invoice_items: z.ZodArray<z.ZodObject<{
248
308
  invoice_id: z.ZodOptional<z.ZodUUID>;
249
309
  product_id: z.ZodUUID;
310
+ product_description: z.ZodOptional<z.ZodString>;
311
+ product_type: z.ZodOptional<z.ZodEnum<{
312
+ unit: "unit";
313
+ weight: "weight";
314
+ case: "case";
315
+ }>>;
316
+ product_upc: z.ZodOptional<z.ZodString>;
317
+ weight_unit: z.ZodOptional<z.ZodEnum<{
318
+ kg: "kg";
319
+ lb: "lb";
320
+ g: "g";
321
+ oz: "oz";
322
+ }>>;
250
323
  quantity: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
251
- amount: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>>;
252
324
  price: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
253
325
  credit_type: z.ZodEnum<{
254
326
  dump: "dump";
package/dist/index.d.ts CHANGED
@@ -141,8 +141,20 @@ declare const SalesInvoiceSchema: z.ZodObject<{
141
141
  invoice_items: z.ZodArray<z.ZodObject<{
142
142
  invoice_id: z.ZodOptional<z.ZodUUID>;
143
143
  product_id: z.ZodUUID;
144
+ product_description: z.ZodOptional<z.ZodString>;
145
+ product_type: z.ZodOptional<z.ZodEnum<{
146
+ unit: "unit";
147
+ weight: "weight";
148
+ case: "case";
149
+ }>>;
150
+ product_upc: z.ZodOptional<z.ZodString>;
151
+ weight_unit: z.ZodOptional<z.ZodEnum<{
152
+ kg: "kg";
153
+ lb: "lb";
154
+ g: "g";
155
+ oz: "oz";
156
+ }>>;
144
157
  quantity: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
145
- amount: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>>;
146
158
  price: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
147
159
  credit_type: z.ZodUndefined;
148
160
  }, z.core.$strip>>;
@@ -162,8 +174,20 @@ declare const CreditInvoiceSchema: z.ZodObject<{
162
174
  invoice_items: z.ZodArray<z.ZodObject<{
163
175
  invoice_id: z.ZodOptional<z.ZodUUID>;
164
176
  product_id: z.ZodUUID;
177
+ product_description: z.ZodOptional<z.ZodString>;
178
+ product_type: z.ZodOptional<z.ZodEnum<{
179
+ unit: "unit";
180
+ weight: "weight";
181
+ case: "case";
182
+ }>>;
183
+ product_upc: z.ZodOptional<z.ZodString>;
184
+ weight_unit: z.ZodOptional<z.ZodEnum<{
185
+ kg: "kg";
186
+ lb: "lb";
187
+ g: "g";
188
+ oz: "oz";
189
+ }>>;
165
190
  quantity: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
166
- amount: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>>;
167
191
  price: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
168
192
  credit_type: z.ZodEnum<{
169
193
  dump: "dump";
@@ -186,8 +210,20 @@ declare const PurchaseInvoiceSchema: z.ZodObject<{
186
210
  invoice_items: z.ZodArray<z.ZodObject<{
187
211
  invoice_id: z.ZodOptional<z.ZodUUID>;
188
212
  product_id: z.ZodUUID;
213
+ product_description: z.ZodOptional<z.ZodString>;
214
+ product_type: z.ZodOptional<z.ZodEnum<{
215
+ unit: "unit";
216
+ weight: "weight";
217
+ case: "case";
218
+ }>>;
219
+ product_upc: z.ZodOptional<z.ZodString>;
220
+ weight_unit: z.ZodOptional<z.ZodEnum<{
221
+ kg: "kg";
222
+ lb: "lb";
223
+ g: "g";
224
+ oz: "oz";
225
+ }>>;
189
226
  quantity: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
190
- amount: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>>;
191
227
  price: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
192
228
  credit_type: z.ZodUndefined;
193
229
  }, z.core.$strip>>;
@@ -207,8 +243,20 @@ declare const AnyInvoiceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
207
243
  invoice_items: z.ZodArray<z.ZodObject<{
208
244
  invoice_id: z.ZodOptional<z.ZodUUID>;
209
245
  product_id: z.ZodUUID;
246
+ product_description: z.ZodOptional<z.ZodString>;
247
+ product_type: z.ZodOptional<z.ZodEnum<{
248
+ unit: "unit";
249
+ weight: "weight";
250
+ case: "case";
251
+ }>>;
252
+ product_upc: z.ZodOptional<z.ZodString>;
253
+ weight_unit: z.ZodOptional<z.ZodEnum<{
254
+ kg: "kg";
255
+ lb: "lb";
256
+ g: "g";
257
+ oz: "oz";
258
+ }>>;
210
259
  quantity: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
211
- amount: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>>;
212
260
  price: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
213
261
  credit_type: z.ZodUndefined;
214
262
  }, z.core.$strip>>;
@@ -227,8 +275,20 @@ declare const AnyInvoiceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
227
275
  invoice_items: z.ZodArray<z.ZodObject<{
228
276
  invoice_id: z.ZodOptional<z.ZodUUID>;
229
277
  product_id: z.ZodUUID;
278
+ product_description: z.ZodOptional<z.ZodString>;
279
+ product_type: z.ZodOptional<z.ZodEnum<{
280
+ unit: "unit";
281
+ weight: "weight";
282
+ case: "case";
283
+ }>>;
284
+ product_upc: z.ZodOptional<z.ZodString>;
285
+ weight_unit: z.ZodOptional<z.ZodEnum<{
286
+ kg: "kg";
287
+ lb: "lb";
288
+ g: "g";
289
+ oz: "oz";
290
+ }>>;
230
291
  quantity: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
231
- amount: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>>;
232
292
  price: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
233
293
  credit_type: z.ZodUndefined;
234
294
  }, z.core.$strip>>;
@@ -247,8 +307,20 @@ declare const AnyInvoiceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
247
307
  invoice_items: z.ZodArray<z.ZodObject<{
248
308
  invoice_id: z.ZodOptional<z.ZodUUID>;
249
309
  product_id: z.ZodUUID;
310
+ product_description: z.ZodOptional<z.ZodString>;
311
+ product_type: z.ZodOptional<z.ZodEnum<{
312
+ unit: "unit";
313
+ weight: "weight";
314
+ case: "case";
315
+ }>>;
316
+ product_upc: z.ZodOptional<z.ZodString>;
317
+ weight_unit: z.ZodOptional<z.ZodEnum<{
318
+ kg: "kg";
319
+ lb: "lb";
320
+ g: "g";
321
+ oz: "oz";
322
+ }>>;
250
323
  quantity: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
251
- amount: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>>;
252
324
  price: z.ZodPipe<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodTransform<number, string>>, z.ZodNumber]>, z.ZodTransform<number, number>>;
253
325
  credit_type: z.ZodEnum<{
254
326
  dump: "dump";
package/dist/index.js CHANGED
@@ -198,8 +198,11 @@ var BaseInvoice = z6.object({
198
198
  var LineItemBase = z6.object({
199
199
  invoice_id: z6.uuid().optional(),
200
200
  product_id: z6.uuid({ error: "Select a product" }),
201
- quantity: handleZodCurrency(0.01, 99999.99),
202
- amount: handleZodCurrency(0.01, 999999.99).optional()
201
+ product_description: z6.string().optional(),
202
+ product_type: z6.enum(["unit", "weight", "case"]).optional(),
203
+ product_upc: z6.string().optional(),
204
+ weight_unit: z6.enum(["kg", "lb", "g", "oz"]).optional(),
205
+ quantity: handleZodCurrency(0.01, 99999.99)
203
206
  });
204
207
  var SalesItem = LineItemBase.safeExtend({
205
208
  price: handleZodCurrency(0, 99999.99),
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schemas/companies_schemas.ts","../src/types/company_types.ts","../src/utils/types.ts","../src/utils/utils.ts","../src/schemas/customer_schemas.ts","../src/schemas/product_schemas.ts","../src/types/shared_types.ts","../src/domains/invoices/invoices_schemas.ts","../src/domains/invoices/invoices_types.ts","../src/utils/date_utils.ts","../src/utils/errors_utils.ts","../src/utils/money_utils.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 company_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 company_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 company_phone_number: z\n .string()\n .transform(GlobalUtils.removeAllWhitespace)\n .transform(GlobalUtils.removeDashesAndPlusSign)\n .refine((s) => /^\\d{4,15}$/.test(s), {\n error: \"Phone number required and must be from 4 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 user_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 user_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 user_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\nexport type InventorySystem = \"warehouse_only\" | \"dsd\";\n","import { IsoCountryCode } from \"../types/company_types\";\n\ntype RoundType = \"half_up\";\n\nexport interface ToFixedOptions {\n roundType?: RoundType;\n}\n\nexport type WhitespaceMode = \"normalize\" | \"remove\";\n\nexport type IsoCurrencyCode = \"USD\" | \"HNL\";\n\nexport const countryToCurrency: Record<IsoCountryCode, IsoCurrencyCode> = {\n US: \"USD\",\n HN: \"HNL\",\n};\n","import * as GlobalTypes from \"./types\";\nimport { IsoCountryCode } from \"../types/company_types\";\n\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 const fromString = z\n .string({\n error: \"Enter a valid number\",\n })\n .refine((s) => s.trim().length > 0, { error: \"Enter a valid number\" })\n .transform((s) => s.replace(/[,\\s]/g, \"\"))\n .refine((s) => s !== \"\" && !Number.isNaN(Number(s)), {\n error: \"Enter a valid number\",\n })\n .refine((s) => Number.isFinite(Number(s)), {\n error: \"Enter a valid number\",\n })\n .refine((s) => Number(s) >= 0, { error: \"Enter a positive number\" })\n .transform((s) => Number(s));\n\n const fromNumber = z\n .number()\n .refine((n) => Number.isFinite(n), { error: \"Enter a valid number\" })\n .refine((n) => n >= 0, { error: \"Enter a positive number\" });\n\n return z\n .union([fromString, fromNumber])\n .transform((n) => roundWithPrecision(n, 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\nexport function getCurrencyFromCountry(\n country: IsoCountryCode\n): GlobalTypes.IsoCurrencyCode {\n return GlobalTypes.countryToCurrency[country];\n}\n\nexport function formatMoneyCurrency(\n value: number,\n cur: GlobalTypes.IsoCurrencyCode\n) {\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: cur,\n }).format(value);\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{4,15}$/.test(s), {\n error: \"Phone number must be from 4 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\"], {\n error: \"Product type must be unit, weight, or case.\",\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(0, 99_999.99),\n cost: GlobalUtils.handleZodCurrency(0, 99_999.99),\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","import { z } from \"zod\";\n\nexport const CREATED_LOCATION = [\"web\", \"mobile\"] as const;\n\nexport type CreatedLocation = (typeof CREATED_LOCATION)[number];\n\nexport type IntBool = 0 | 1;\n\nexport const uuidSchema = z.uuid();\nexport type UUID = z.infer<typeof uuidSchema>;\n","import { z } from \"zod\";\nimport { CREDIT_TYPE, INVOICE_STATUS, INVOICE_TYPE } from \"./invoices_types\";\nimport { handleZodCurrency } from \"../../utils/utils\";\n\nconst YmdDateSchema = z.string().regex(/^\\d{4}-\\d{2}-\\d{2}$/, \"Use YYYY-MM-DD\");\n\nconst BaseInvoice = z\n .object({\n invoice_type: z.enum(INVOICE_TYPE, { error: \"Invoice type not found.\" }),\n invoice_date: YmdDateSchema,\n due_date: YmdDateSchema,\n tax_rate: z.number().default(0),\n tax_amount: z.number().default(0),\n warehouse_id: z.uuid().optional(),\n invoice_status: z.enum(INVOICE_STATUS).default(\"finalized\"),\n })\n .superRefine(({ invoice_date, due_date }, ctx) => {\n if (due_date < invoice_date) {\n ctx.addIssue({\n code: \"custom\",\n message: \"Due date can't be earlier than the invoice date.\",\n path: [\"due_date\"],\n });\n }\n });\n\nconst LineItemBase = z.object({\n invoice_id: z.uuid().optional(),\n product_id: z.uuid({ error: \"Select a product\" }),\n quantity: handleZodCurrency(0.01, 99_999.99),\n amount: handleZodCurrency(0.01, 999_999.99).optional(),\n});\n\nconst SalesItem = LineItemBase.safeExtend({\n price: handleZodCurrency(0, 99_999.99),\n credit_type: z.undefined(),\n});\n\nconst CreditItem = LineItemBase.safeExtend({\n price: handleZodCurrency(0, 99_999.99),\n credit_type: z.enum(CREDIT_TYPE, {\n error: \"Select a credit type\",\n }),\n});\n\nconst PurchaseItem = LineItemBase.safeExtend({\n price: handleZodCurrency(0, 99_999.99),\n credit_type: z.undefined(),\n});\n\nexport const SalesInvoiceSchema = BaseInvoice.safeExtend({\n invoice_type: z.literal(\"sales\"),\n party_id: z.uuid({ message: \"Select a customer\" }),\n invoice_items: z.array(SalesItem).min(1, \"Add at least one invoice item\"),\n});\n\nexport const CreditInvoiceSchema = BaseInvoice.safeExtend({\n invoice_type: z.literal(\"credit\"),\n party_id: z.uuid({ message: \"Select a customer\" }),\n invoice_items: z.array(CreditItem).min(1, \"Add at least one invoice item\"),\n});\n\nexport const PurchaseInvoiceSchema = BaseInvoice.safeExtend({\n invoice_type: z.literal(\"purchase\"),\n party_id: z.uuid({ message: \"Select a vendor\" }),\n invoice_items: z.array(PurchaseItem).min(1, \"Add at least one invoice item\"),\n});\n\nexport const AnyInvoiceSchema = z.discriminatedUnion(\"invoice_type\", [\n SalesInvoiceSchema,\n PurchaseInvoiceSchema,\n CreditInvoiceSchema,\n]);\n","import { z } from \"zod\";\nimport * as InvoiceSchemas from \"./invoices_schemas\";\n\nexport type SalesInvoice = z.infer<typeof InvoiceSchemas.SalesInvoiceSchema>;\nexport type CreditInvoice = z.infer<typeof InvoiceSchemas.CreditInvoiceSchema>;\nexport type PurchaseInvoice = z.infer<\n typeof InvoiceSchemas.PurchaseInvoiceSchema\n>;\nexport type AnyInvoiceOut = z.output<typeof InvoiceSchemas.AnyInvoiceSchema>;\n\nexport const INVOICE_TYPE = [\"sales\", \"credit\", \"purchase\"] as const;\n\nexport type InvoiceType = (typeof INVOICE_TYPE)[number];\n\nexport const INVOICE_STATUS = [\"finalized\", \"voided\"] as const;\n\nexport type InvoiceStatus = (typeof INVOICE_STATUS)[number];\n\nexport const CREDIT_TYPE = [\"dump\", \"return\"] as const;\n\nexport type CreditType = (typeof CREDIT_TYPE)[number];\n","// \"Today\" in the user's LOCAL timezone as YMD\nexport function todayLocalYmd(): string {\n const now = new Date();\n const y = now.getFullYear();\n const m = String(now.getMonth() + 1).padStart(2, \"0\");\n const d = String(now.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${d}`;\n}\n\n// Add days in LOCAL time (no drift)\nexport function addDaysLocalYmd(ymd: string, days: number): string {\n const dt = localDateFromYmd(ymd);\n dt.setDate(dt.getDate() + days);\n return ymdFromLocalDate(dt);\n}\n\nexport function formatYmdLong(ymd: string, locale = \"en-US\"): string {\n const { y, m, d } = parseYmd(ymd);\n const utcDate = new Date(Date.UTC(y, m - 1, d)); // 00:00Z\n return new Intl.DateTimeFormat(locale, {\n dateStyle: \"long\",\n timeZone: \"UTC\",\n }).format(utcDate);\n}\n\nexport function localDateFromYmd(ymd: string): Date {\n const { y, m, d } = parseYmd(ymd);\n return new Date(y, m - 1, d); // LOCAL midnight\n}\n\nexport function ymdFromLocalDate(dt: Date): string {\n const y = dt.getFullYear();\n const m = String(dt.getMonth() + 1).padStart(2, \"0\");\n const d = String(dt.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${d}`;\n}\n\nfunction parseYmd(ymd: string): { y: number; m: number; d: number } {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(ymd);\n if (!m) throw new Error(\"Bad YMD\");\n return { y: Number(m[1]), m: Number(m[2]), d: Number(m[3]) };\n}\n","import type { FieldError, FieldErrorsImpl, Merge } from \"react-hook-form\";\n\ntype RHFError =\n | string\n | FieldError\n | Merge<FieldError, FieldErrorsImpl<any>>\n | undefined;\n\nexport const getErrorMessage = (err: RHFError): string | undefined => {\n if (!err) return undefined;\n if (typeof err === \"string\") return err;\n // FieldError has .message (string | undefined)\n const msg = (err as FieldError).message as string | undefined;\n return typeof msg === \"string\" ? msg : undefined;\n};\n","export const exceedsTwoDecimals = (raw: string) => {\n const s = String(raw ?? \"\").replace(/[,\\s]/g, \"\");\n const dot = s.indexOf(\".\");\n if (dot === -1) return false;\n const after = s.slice(dot + 1);\n const digitsAfter = (after.match(/\\d/g) ?? []).length;\n return digitsAfter > 2;\n};\n"],"mappings":"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","names":["z","z","z","z","z","z","z","z","z","z"]}
1
+ {"version":3,"sources":["../src/schemas/companies_schemas.ts","../src/types/company_types.ts","../src/utils/types.ts","../src/utils/utils.ts","../src/schemas/customer_schemas.ts","../src/schemas/product_schemas.ts","../src/types/shared_types.ts","../src/domains/invoices/invoices_schemas.ts","../src/domains/invoices/invoices_types.ts","../src/utils/date_utils.ts","../src/utils/errors_utils.ts","../src/utils/money_utils.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 company_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 company_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 company_phone_number: z\n .string()\n .transform(GlobalUtils.removeAllWhitespace)\n .transform(GlobalUtils.removeDashesAndPlusSign)\n .refine((s) => /^\\d{4,15}$/.test(s), {\n error: \"Phone number required and must be from 4 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 user_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 user_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 user_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\nexport type InventorySystem = \"warehouse_only\" | \"dsd\";\n","import { IsoCountryCode } from \"../types/company_types\";\n\ntype RoundType = \"half_up\";\n\nexport interface ToFixedOptions {\n roundType?: RoundType;\n}\n\nexport type WhitespaceMode = \"normalize\" | \"remove\";\n\nexport type IsoCurrencyCode = \"USD\" | \"HNL\";\n\nexport const countryToCurrency: Record<IsoCountryCode, IsoCurrencyCode> = {\n US: \"USD\",\n HN: \"HNL\",\n};\n","import * as GlobalTypes from \"./types\";\nimport { IsoCountryCode } from \"../types/company_types\";\n\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 const fromString = z\n .string({\n error: \"Enter a valid number\",\n })\n .refine((s) => s.trim().length > 0, { error: \"Enter a valid number\" })\n .transform((s) => s.replace(/[,\\s]/g, \"\"))\n .refine((s) => s !== \"\" && !Number.isNaN(Number(s)), {\n error: \"Enter a valid number\",\n })\n .refine((s) => Number.isFinite(Number(s)), {\n error: \"Enter a valid number\",\n })\n .refine((s) => Number(s) >= 0, { error: \"Enter a positive number\" })\n .transform((s) => Number(s));\n\n const fromNumber = z\n .number()\n .refine((n) => Number.isFinite(n), { error: \"Enter a valid number\" })\n .refine((n) => n >= 0, { error: \"Enter a positive number\" });\n\n return z\n .union([fromString, fromNumber])\n .transform((n) => roundWithPrecision(n, 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\nexport function getCurrencyFromCountry(\n country: IsoCountryCode\n): GlobalTypes.IsoCurrencyCode {\n return GlobalTypes.countryToCurrency[country];\n}\n\nexport function formatMoneyCurrency(\n value: number,\n cur: GlobalTypes.IsoCurrencyCode\n) {\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: cur,\n }).format(value);\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{4,15}$/.test(s), {\n error: \"Phone number must be from 4 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\"], {\n error: \"Product type must be unit, weight, or case.\",\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(0, 99_999.99),\n cost: GlobalUtils.handleZodCurrency(0, 99_999.99),\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","import { z } from \"zod\";\n\nexport const CREATED_LOCATION = [\"web\", \"mobile\"] as const;\n\nexport type CreatedLocation = (typeof CREATED_LOCATION)[number];\n\nexport type IntBool = 0 | 1;\n\nexport const uuidSchema = z.uuid();\nexport type UUID = z.infer<typeof uuidSchema>;\n","import { z } from \"zod\";\nimport { CREDIT_TYPE, INVOICE_STATUS, INVOICE_TYPE } from \"./invoices_types\";\nimport { handleZodCurrency } from \"../../utils/utils\";\n\nconst YmdDateSchema = z.string().regex(/^\\d{4}-\\d{2}-\\d{2}$/, \"Use YYYY-MM-DD\");\n\nconst BaseInvoice = z\n .object({\n invoice_type: z.enum(INVOICE_TYPE, { error: \"Invoice type not found.\" }),\n invoice_date: YmdDateSchema,\n due_date: YmdDateSchema,\n tax_rate: z.number().default(0),\n tax_amount: z.number().default(0),\n warehouse_id: z.uuid().optional(),\n invoice_status: z.enum(INVOICE_STATUS).default(\"finalized\"),\n })\n .superRefine(({ invoice_date, due_date }, ctx) => {\n if (due_date < invoice_date) {\n ctx.addIssue({\n code: \"custom\",\n message: \"Due date can't be earlier than the invoice date.\",\n path: [\"due_date\"],\n });\n }\n });\n\nconst LineItemBase = z.object({\n invoice_id: z.uuid().optional(),\n product_id: z.uuid({ error: \"Select a product\" }),\n product_description: z.string().optional(),\n product_type: z.enum([\"unit\", \"weight\", \"case\"]).optional(),\n product_upc: z.string().optional(),\n weight_unit: z.enum([\"kg\", \"lb\", \"g\", \"oz\"]).optional(),\n quantity: handleZodCurrency(0.01, 99_999.99),\n});\n\nconst SalesItem = LineItemBase.safeExtend({\n price: handleZodCurrency(0, 99_999.99),\n credit_type: z.undefined(),\n});\n\nconst CreditItem = LineItemBase.safeExtend({\n price: handleZodCurrency(0, 99_999.99),\n credit_type: z.enum(CREDIT_TYPE, {\n error: \"Select a credit type\",\n }),\n});\n\nconst PurchaseItem = LineItemBase.safeExtend({\n price: handleZodCurrency(0, 99_999.99),\n credit_type: z.undefined(),\n});\n\nexport const SalesInvoiceSchema = BaseInvoice.safeExtend({\n invoice_type: z.literal(\"sales\"),\n party_id: z.uuid({ message: \"Select a customer\" }),\n invoice_items: z.array(SalesItem).min(1, \"Add at least one invoice item\"),\n});\n\nexport const CreditInvoiceSchema = BaseInvoice.safeExtend({\n invoice_type: z.literal(\"credit\"),\n party_id: z.uuid({ message: \"Select a customer\" }),\n invoice_items: z.array(CreditItem).min(1, \"Add at least one invoice item\"),\n});\n\nexport const PurchaseInvoiceSchema = BaseInvoice.safeExtend({\n invoice_type: z.literal(\"purchase\"),\n party_id: z.uuid({ message: \"Select a vendor\" }),\n invoice_items: z.array(PurchaseItem).min(1, \"Add at least one invoice item\"),\n});\n\nexport const AnyInvoiceSchema = z.discriminatedUnion(\"invoice_type\", [\n SalesInvoiceSchema,\n PurchaseInvoiceSchema,\n CreditInvoiceSchema,\n]);\n","import { z } from \"zod\";\nimport * as InvoiceSchemas from \"./invoices_schemas\";\n\nexport type SalesInvoice = z.infer<typeof InvoiceSchemas.SalesInvoiceSchema>;\nexport type CreditInvoice = z.infer<typeof InvoiceSchemas.CreditInvoiceSchema>;\nexport type PurchaseInvoice = z.infer<\n typeof InvoiceSchemas.PurchaseInvoiceSchema\n>;\nexport type AnyInvoiceOut = z.output<typeof InvoiceSchemas.AnyInvoiceSchema>;\n\nexport const INVOICE_TYPE = [\"sales\", \"credit\", \"purchase\"] as const;\n\nexport type InvoiceType = (typeof INVOICE_TYPE)[number];\n\nexport const INVOICE_STATUS = [\"finalized\", \"voided\"] as const;\n\nexport type InvoiceStatus = (typeof INVOICE_STATUS)[number];\n\nexport const CREDIT_TYPE = [\"dump\", \"return\"] as const;\n\nexport type CreditType = (typeof CREDIT_TYPE)[number];\n","// \"Today\" in the user's LOCAL timezone as YMD\nexport function todayLocalYmd(): string {\n const now = new Date();\n const y = now.getFullYear();\n const m = String(now.getMonth() + 1).padStart(2, \"0\");\n const d = String(now.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${d}`;\n}\n\n// Add days in LOCAL time (no drift)\nexport function addDaysLocalYmd(ymd: string, days: number): string {\n const dt = localDateFromYmd(ymd);\n dt.setDate(dt.getDate() + days);\n return ymdFromLocalDate(dt);\n}\n\nexport function formatYmdLong(ymd: string, locale = \"en-US\"): string {\n const { y, m, d } = parseYmd(ymd);\n const utcDate = new Date(Date.UTC(y, m - 1, d)); // 00:00Z\n return new Intl.DateTimeFormat(locale, {\n dateStyle: \"long\",\n timeZone: \"UTC\",\n }).format(utcDate);\n}\n\nexport function localDateFromYmd(ymd: string): Date {\n const { y, m, d } = parseYmd(ymd);\n return new Date(y, m - 1, d); // LOCAL midnight\n}\n\nexport function ymdFromLocalDate(dt: Date): string {\n const y = dt.getFullYear();\n const m = String(dt.getMonth() + 1).padStart(2, \"0\");\n const d = String(dt.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${d}`;\n}\n\nfunction parseYmd(ymd: string): { y: number; m: number; d: number } {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(ymd);\n if (!m) throw new Error(\"Bad YMD\");\n return { y: Number(m[1]), m: Number(m[2]), d: Number(m[3]) };\n}\n","import type { FieldError, FieldErrorsImpl, Merge } from \"react-hook-form\";\n\ntype RHFError =\n | string\n | FieldError\n | Merge<FieldError, FieldErrorsImpl<any>>\n | undefined;\n\nexport const getErrorMessage = (err: RHFError): string | undefined => {\n if (!err) return undefined;\n if (typeof err === \"string\") return err;\n // FieldError has .message (string | undefined)\n const msg = (err as FieldError).message as string | undefined;\n return typeof msg === \"string\" ? msg : undefined;\n};\n","export const exceedsTwoDecimals = (raw: string) => {\n const s = String(raw ?? \"\").replace(/[,\\s]/g, \"\");\n const dot = s.indexOf(\".\");\n if (dot === -1) return false;\n const after = s.slice(dot + 1);\n const digitsAfter = (after.match(/\\d/g) ?? []).length;\n return digitsAfter > 2;\n};\n"],"mappings":"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","names":["z","z","z","z","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.26",
3
+ "version": "2.0.28",
4
4
  "description": "Schemas and utils shared across Marmot apps",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",