@vritti/api-sdk 0.3.13 → 0.3.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/countries/is-country.decorator.ts","../src/countries/iso-countries.ts","../src/decorators/code-pattern.ts","../src/decorators/is-code.decorator.ts","../src/decorators/is-date-time.decorator.ts","../src/decorators/trim.decorator.ts","../src/decorators/uploaded-file.decorator.ts","../src/exceptions/bad-gateway.exception.ts","../src/exceptions/base-field.exception.ts","../src/exceptions/bad-request.exception.ts","../src/exceptions/conflict.exception.ts","../src/exceptions/forbidden.exception.ts","../src/exceptions/gone.exception.ts","../src/exceptions/internal-server-error.exception.ts","../src/exceptions/method-not-allowed.exception.ts","../src/exceptions/not-acceptable.exception.ts","../src/exceptions/not-found.exception.ts","../src/exceptions/not-implemented.exception.ts","../src/exceptions/payload-too-large.exception.ts","../src/exceptions/request-timeout.exception.ts","../src/exceptions/service-unavailable.exception.ts","../src/exceptions/too-many-requests.exception.ts","../src/exceptions/unauthorized.exception.ts","../src/exceptions/unprocessable-entity.exception.ts","../src/exceptions/unsupported-media-type.exception.ts","../src/exceptions/validation.exception.ts"],"sourcesContent":["import { registerDecorator, type ValidationArguments, type ValidationOptions } from 'class-validator';\nimport { ISO_COUNTRY_CODES } from './iso-countries';\n\nexport function IsCountry(validationOptions?: ValidationOptions): PropertyDecorator {\n return (target: object, propertyName: string | symbol) => {\n registerDecorator({\n name: 'isCountry',\n target: target.constructor,\n propertyName: String(propertyName),\n options: validationOptions,\n validator: {\n validate(value: unknown): boolean {\n if (typeof value !== 'string') return false;\n return ISO_COUNTRY_CODES.has(value.toUpperCase());\n },\n defaultMessage(args: ValidationArguments): string {\n return `${args.property} must be a valid ISO 3166-1 alpha-2 country code.`;\n },\n },\n });\n };\n}\n","export interface IsoCountry {\n code: string;\n name: string;\n defaultCurrency: string;\n callingCode: string;\n}\n\nexport const ISO_COUNTRIES: readonly IsoCountry[] = [\n { code: 'AD', name: 'Andorra', defaultCurrency: 'EUR', callingCode: '+376' },\n { code: 'AE', name: 'United Arab Emirates', defaultCurrency: 'AED', callingCode: '+971' },\n { code: 'AF', name: 'Afghanistan', defaultCurrency: 'AFN', callingCode: '+93' },\n { code: 'AG', name: 'Antigua and Barbuda', defaultCurrency: 'XCD', callingCode: '+1268' },\n { code: 'AI', name: 'Anguilla', defaultCurrency: 'XCD', callingCode: '+1264' },\n { code: 'AL', name: 'Albania', defaultCurrency: 'ALL', callingCode: '+355' },\n { code: 'AM', name: 'Armenia', defaultCurrency: 'AMD', callingCode: '+374' },\n { code: 'AO', name: 'Angola', defaultCurrency: 'AOA', callingCode: '+244' },\n { code: 'AQ', name: 'Antarctica', defaultCurrency: 'USD', callingCode: '+672' },\n { code: 'AR', name: 'Argentina', defaultCurrency: 'ARS', callingCode: '+54' },\n { code: 'AS', name: 'American Samoa', defaultCurrency: 'USD', callingCode: '+1684' },\n { code: 'AT', name: 'Austria', defaultCurrency: 'EUR', callingCode: '+43' },\n { code: 'AU', name: 'Australia', defaultCurrency: 'AUD', callingCode: '+61' },\n { code: 'AW', name: 'Aruba', defaultCurrency: 'AWG', callingCode: '+297' },\n { code: 'AX', name: 'Åland Islands', defaultCurrency: 'EUR', callingCode: '+358' },\n { code: 'AZ', name: 'Azerbaijan', defaultCurrency: 'AZN', callingCode: '+994' },\n { code: 'BA', name: 'Bosnia and Herzegovina', defaultCurrency: 'BAM', callingCode: '+387' },\n { code: 'BB', name: 'Barbados', defaultCurrency: 'BBD', callingCode: '+1246' },\n { code: 'BD', name: 'Bangladesh', defaultCurrency: 'BDT', callingCode: '+880' },\n { code: 'BE', name: 'Belgium', defaultCurrency: 'EUR', callingCode: '+32' },\n { code: 'BF', name: 'Burkina Faso', defaultCurrency: 'XOF', callingCode: '+226' },\n { code: 'BG', name: 'Bulgaria', defaultCurrency: 'BGN', callingCode: '+359' },\n { code: 'BH', name: 'Bahrain', defaultCurrency: 'BHD', callingCode: '+973' },\n { code: 'BI', name: 'Burundi', defaultCurrency: 'BIF', callingCode: '+257' },\n { code: 'BJ', name: 'Benin', defaultCurrency: 'XOF', callingCode: '+229' },\n { code: 'BL', name: 'Saint Barthélemy', defaultCurrency: 'EUR', callingCode: '+590' },\n { code: 'BM', name: 'Bermuda', defaultCurrency: 'BMD', callingCode: '+1441' },\n { code: 'BN', name: 'Brunei Darussalam', defaultCurrency: 'BND', callingCode: '+673' },\n { code: 'BO', name: 'Bolivia', defaultCurrency: 'BOB', callingCode: '+591' },\n { code: 'BQ', name: 'Bonaire, Sint Eustatius and Saba', defaultCurrency: 'USD', callingCode: '+599' },\n { code: 'BR', name: 'Brazil', defaultCurrency: 'BRL', callingCode: '+55' },\n { code: 'BS', name: 'Bahamas', defaultCurrency: 'BSD', callingCode: '+1242' },\n { code: 'BT', name: 'Bhutan', defaultCurrency: 'BTN', callingCode: '+975' },\n { code: 'BV', name: 'Bouvet Island', defaultCurrency: 'NOK', callingCode: '+47' },\n { code: 'BW', name: 'Botswana', defaultCurrency: 'BWP', callingCode: '+267' },\n { code: 'BY', name: 'Belarus', defaultCurrency: 'BYN', callingCode: '+375' },\n { code: 'BZ', name: 'Belize', defaultCurrency: 'BZD', callingCode: '+501' },\n { code: 'CA', name: 'Canada', defaultCurrency: 'CAD', callingCode: '+1' },\n { code: 'CC', name: 'Cocos (Keeling) Islands', defaultCurrency: 'AUD', callingCode: '+61' },\n { code: 'CD', name: 'Congo, Democratic Republic of the', defaultCurrency: 'CDF', callingCode: '+243' },\n { code: 'CF', name: 'Central African Republic', defaultCurrency: 'XAF', callingCode: '+236' },\n { code: 'CG', name: 'Congo', defaultCurrency: 'XAF', callingCode: '+242' },\n { code: 'CH', name: 'Switzerland', defaultCurrency: 'CHF', callingCode: '+41' },\n { code: 'CI', name: \"Côte d'Ivoire\", defaultCurrency: 'XOF', callingCode: '+225' },\n { code: 'CK', name: 'Cook Islands', defaultCurrency: 'NZD', callingCode: '+682' },\n { code: 'CL', name: 'Chile', defaultCurrency: 'CLP', callingCode: '+56' },\n { code: 'CM', name: 'Cameroon', defaultCurrency: 'XAF', callingCode: '+237' },\n { code: 'CN', name: 'China', defaultCurrency: 'CNY', callingCode: '+86' },\n { code: 'CO', name: 'Colombia', defaultCurrency: 'COP', callingCode: '+57' },\n { code: 'CR', name: 'Costa Rica', defaultCurrency: 'CRC', callingCode: '+506' },\n { code: 'CU', name: 'Cuba', defaultCurrency: 'CUP', callingCode: '+53' },\n { code: 'CV', name: 'Cabo Verde', defaultCurrency: 'CVE', callingCode: '+238' },\n { code: 'CW', name: 'Curaçao', defaultCurrency: 'ANG', callingCode: '+599' },\n { code: 'CX', name: 'Christmas Island', defaultCurrency: 'AUD', callingCode: '+61' },\n { code: 'CY', name: 'Cyprus', defaultCurrency: 'EUR', callingCode: '+357' },\n { code: 'CZ', name: 'Czechia', defaultCurrency: 'CZK', callingCode: '+420' },\n { code: 'DE', name: 'Germany', defaultCurrency: 'EUR', callingCode: '+49' },\n { code: 'DJ', name: 'Djibouti', defaultCurrency: 'DJF', callingCode: '+253' },\n { code: 'DK', name: 'Denmark', defaultCurrency: 'DKK', callingCode: '+45' },\n { code: 'DM', name: 'Dominica', defaultCurrency: 'XCD', callingCode: '+1767' },\n { code: 'DO', name: 'Dominican Republic', defaultCurrency: 'DOP', callingCode: '+1809' },\n { code: 'DZ', name: 'Algeria', defaultCurrency: 'DZD', callingCode: '+213' },\n { code: 'EC', name: 'Ecuador', defaultCurrency: 'USD', callingCode: '+593' },\n { code: 'EE', name: 'Estonia', defaultCurrency: 'EUR', callingCode: '+372' },\n { code: 'EG', name: 'Egypt', defaultCurrency: 'EGP', callingCode: '+20' },\n { code: 'EH', name: 'Western Sahara', defaultCurrency: 'MAD', callingCode: '+212' },\n { code: 'ER', name: 'Eritrea', defaultCurrency: 'ERN', callingCode: '+291' },\n { code: 'ES', name: 'Spain', defaultCurrency: 'EUR', callingCode: '+34' },\n { code: 'ET', name: 'Ethiopia', defaultCurrency: 'ETB', callingCode: '+251' },\n { code: 'FI', name: 'Finland', defaultCurrency: 'EUR', callingCode: '+358' },\n { code: 'FJ', name: 'Fiji', defaultCurrency: 'FJD', callingCode: '+679' },\n { code: 'FK', name: 'Falkland Islands (Malvinas)', defaultCurrency: 'FKP', callingCode: '+500' },\n { code: 'FM', name: 'Micronesia (Federated States of)', defaultCurrency: 'USD', callingCode: '+691' },\n { code: 'FO', name: 'Faroe Islands', defaultCurrency: 'DKK', callingCode: '+298' },\n { code: 'FR', name: 'France', defaultCurrency: 'EUR', callingCode: '+33' },\n { code: 'GA', name: 'Gabon', defaultCurrency: 'XAF', callingCode: '+241' },\n { code: 'GB', name: 'United Kingdom', defaultCurrency: 'GBP', callingCode: '+44' },\n { code: 'GD', name: 'Grenada', defaultCurrency: 'XCD', callingCode: '+1473' },\n { code: 'GE', name: 'Georgia', defaultCurrency: 'GEL', callingCode: '+995' },\n { code: 'GF', name: 'French Guiana', defaultCurrency: 'EUR', callingCode: '+594' },\n { code: 'GG', name: 'Guernsey', defaultCurrency: 'GBP', callingCode: '+44' },\n { code: 'GH', name: 'Ghana', defaultCurrency: 'GHS', callingCode: '+233' },\n { code: 'GI', name: 'Gibraltar', defaultCurrency: 'GIP', callingCode: '+350' },\n { code: 'GL', name: 'Greenland', defaultCurrency: 'DKK', callingCode: '+299' },\n { code: 'GM', name: 'Gambia', defaultCurrency: 'GMD', callingCode: '+220' },\n { code: 'GN', name: 'Guinea', defaultCurrency: 'GNF', callingCode: '+224' },\n { code: 'GP', name: 'Guadeloupe', defaultCurrency: 'EUR', callingCode: '+590' },\n { code: 'GQ', name: 'Equatorial Guinea', defaultCurrency: 'XAF', callingCode: '+240' },\n { code: 'GR', name: 'Greece', defaultCurrency: 'EUR', callingCode: '+30' },\n { code: 'GS', name: 'South Georgia and the South Sandwich Islands', defaultCurrency: 'GBP', callingCode: '+500' },\n { code: 'GT', name: 'Guatemala', defaultCurrency: 'GTQ', callingCode: '+502' },\n { code: 'GU', name: 'Guam', defaultCurrency: 'USD', callingCode: '+1671' },\n { code: 'GW', name: 'Guinea-Bissau', defaultCurrency: 'XOF', callingCode: '+245' },\n { code: 'GY', name: 'Guyana', defaultCurrency: 'GYD', callingCode: '+592' },\n { code: 'HK', name: 'Hong Kong', defaultCurrency: 'HKD', callingCode: '+852' },\n { code: 'HM', name: 'Heard Island and McDonald Islands', defaultCurrency: 'AUD', callingCode: '+672' },\n { code: 'HN', name: 'Honduras', defaultCurrency: 'HNL', callingCode: '+504' },\n { code: 'HR', name: 'Croatia', defaultCurrency: 'EUR', callingCode: '+385' },\n { code: 'HT', name: 'Haiti', defaultCurrency: 'HTG', callingCode: '+509' },\n { code: 'HU', name: 'Hungary', defaultCurrency: 'HUF', callingCode: '+36' },\n { code: 'ID', name: 'Indonesia', defaultCurrency: 'IDR', callingCode: '+62' },\n { code: 'IE', name: 'Ireland', defaultCurrency: 'EUR', callingCode: '+353' },\n { code: 'IL', name: 'Israel', defaultCurrency: 'ILS', callingCode: '+972' },\n { code: 'IM', name: 'Isle of Man', defaultCurrency: 'GBP', callingCode: '+44' },\n { code: 'IN', name: 'India', defaultCurrency: 'INR', callingCode: '+91' },\n { code: 'IO', name: 'British Indian Ocean Territory', defaultCurrency: 'USD', callingCode: '+246' },\n { code: 'IQ', name: 'Iraq', defaultCurrency: 'IQD', callingCode: '+964' },\n { code: 'IR', name: 'Iran', defaultCurrency: 'IRR', callingCode: '+98' },\n { code: 'IS', name: 'Iceland', defaultCurrency: 'ISK', callingCode: '+354' },\n { code: 'IT', name: 'Italy', defaultCurrency: 'EUR', callingCode: '+39' },\n { code: 'JE', name: 'Jersey', defaultCurrency: 'GBP', callingCode: '+44' },\n { code: 'JM', name: 'Jamaica', defaultCurrency: 'JMD', callingCode: '+1876' },\n { code: 'JO', name: 'Jordan', defaultCurrency: 'JOD', callingCode: '+962' },\n { code: 'JP', name: 'Japan', defaultCurrency: 'JPY', callingCode: '+81' },\n { code: 'KE', name: 'Kenya', defaultCurrency: 'KES', callingCode: '+254' },\n { code: 'KG', name: 'Kyrgyzstan', defaultCurrency: 'KGS', callingCode: '+996' },\n { code: 'KH', name: 'Cambodia', defaultCurrency: 'KHR', callingCode: '+855' },\n { code: 'KI', name: 'Kiribati', defaultCurrency: 'AUD', callingCode: '+686' },\n { code: 'KM', name: 'Comoros', defaultCurrency: 'KMF', callingCode: '+269' },\n { code: 'KN', name: 'Saint Kitts and Nevis', defaultCurrency: 'XCD', callingCode: '+1869' },\n { code: 'KP', name: \"Korea (Democratic People's Republic of)\", defaultCurrency: 'KPW', callingCode: '+850' },\n { code: 'KR', name: 'Korea (Republic of)', defaultCurrency: 'KRW', callingCode: '+82' },\n { code: 'KW', name: 'Kuwait', defaultCurrency: 'KWD', callingCode: '+965' },\n { code: 'KY', name: 'Cayman Islands', defaultCurrency: 'KYD', callingCode: '+1345' },\n { code: 'KZ', name: 'Kazakhstan', defaultCurrency: 'KZT', callingCode: '+7' },\n { code: 'LA', name: \"Lao People's Democratic Republic\", defaultCurrency: 'LAK', callingCode: '+856' },\n { code: 'LB', name: 'Lebanon', defaultCurrency: 'LBP', callingCode: '+961' },\n { code: 'LC', name: 'Saint Lucia', defaultCurrency: 'XCD', callingCode: '+1758' },\n { code: 'LI', name: 'Liechtenstein', defaultCurrency: 'CHF', callingCode: '+423' },\n { code: 'LK', name: 'Sri Lanka', defaultCurrency: 'LKR', callingCode: '+94' },\n { code: 'LR', name: 'Liberia', defaultCurrency: 'LRD', callingCode: '+231' },\n { code: 'LS', name: 'Lesotho', defaultCurrency: 'LSL', callingCode: '+266' },\n { code: 'LT', name: 'Lithuania', defaultCurrency: 'EUR', callingCode: '+370' },\n { code: 'LU', name: 'Luxembourg', defaultCurrency: 'EUR', callingCode: '+352' },\n { code: 'LV', name: 'Latvia', defaultCurrency: 'EUR', callingCode: '+371' },\n { code: 'LY', name: 'Libya', defaultCurrency: 'LYD', callingCode: '+218' },\n { code: 'MA', name: 'Morocco', defaultCurrency: 'MAD', callingCode: '+212' },\n { code: 'MC', name: 'Monaco', defaultCurrency: 'EUR', callingCode: '+377' },\n { code: 'MD', name: 'Moldova', defaultCurrency: 'MDL', callingCode: '+373' },\n { code: 'ME', name: 'Montenegro', defaultCurrency: 'EUR', callingCode: '+382' },\n { code: 'MF', name: 'Saint Martin (French part)', defaultCurrency: 'EUR', callingCode: '+590' },\n { code: 'MG', name: 'Madagascar', defaultCurrency: 'MGA', callingCode: '+261' },\n { code: 'MH', name: 'Marshall Islands', defaultCurrency: 'USD', callingCode: '+692' },\n { code: 'MK', name: 'North Macedonia', defaultCurrency: 'MKD', callingCode: '+389' },\n { code: 'ML', name: 'Mali', defaultCurrency: 'XOF', callingCode: '+223' },\n { code: 'MM', name: 'Myanmar', defaultCurrency: 'MMK', callingCode: '+95' },\n { code: 'MN', name: 'Mongolia', defaultCurrency: 'MNT', callingCode: '+976' },\n { code: 'MO', name: 'Macao', defaultCurrency: 'MOP', callingCode: '+853' },\n { code: 'MP', name: 'Northern Mariana Islands', defaultCurrency: 'USD', callingCode: '+1670' },\n { code: 'MQ', name: 'Martinique', defaultCurrency: 'EUR', callingCode: '+596' },\n { code: 'MR', name: 'Mauritania', defaultCurrency: 'MRU', callingCode: '+222' },\n { code: 'MS', name: 'Montserrat', defaultCurrency: 'XCD', callingCode: '+1664' },\n { code: 'MT', name: 'Malta', defaultCurrency: 'EUR', callingCode: '+356' },\n { code: 'MU', name: 'Mauritius', defaultCurrency: 'MUR', callingCode: '+230' },\n { code: 'MV', name: 'Maldives', defaultCurrency: 'MVR', callingCode: '+960' },\n { code: 'MW', name: 'Malawi', defaultCurrency: 'MWK', callingCode: '+265' },\n { code: 'MX', name: 'Mexico', defaultCurrency: 'MXN', callingCode: '+52' },\n { code: 'MY', name: 'Malaysia', defaultCurrency: 'MYR', callingCode: '+60' },\n { code: 'MZ', name: 'Mozambique', defaultCurrency: 'MZN', callingCode: '+258' },\n { code: 'NA', name: 'Namibia', defaultCurrency: 'NAD', callingCode: '+264' },\n { code: 'NC', name: 'New Caledonia', defaultCurrency: 'XPF', callingCode: '+687' },\n { code: 'NE', name: 'Niger', defaultCurrency: 'XOF', callingCode: '+227' },\n { code: 'NF', name: 'Norfolk Island', defaultCurrency: 'AUD', callingCode: '+672' },\n { code: 'NG', name: 'Nigeria', defaultCurrency: 'NGN', callingCode: '+234' },\n { code: 'NI', name: 'Nicaragua', defaultCurrency: 'NIO', callingCode: '+505' },\n { code: 'NL', name: 'Netherlands', defaultCurrency: 'EUR', callingCode: '+31' },\n { code: 'NO', name: 'Norway', defaultCurrency: 'NOK', callingCode: '+47' },\n { code: 'NP', name: 'Nepal', defaultCurrency: 'NPR', callingCode: '+977' },\n { code: 'NR', name: 'Nauru', defaultCurrency: 'AUD', callingCode: '+674' },\n { code: 'NU', name: 'Niue', defaultCurrency: 'NZD', callingCode: '+683' },\n { code: 'NZ', name: 'New Zealand', defaultCurrency: 'NZD', callingCode: '+64' },\n { code: 'OM', name: 'Oman', defaultCurrency: 'OMR', callingCode: '+968' },\n { code: 'PA', name: 'Panama', defaultCurrency: 'PAB', callingCode: '+507' },\n { code: 'PE', name: 'Peru', defaultCurrency: 'PEN', callingCode: '+51' },\n { code: 'PF', name: 'French Polynesia', defaultCurrency: 'XPF', callingCode: '+689' },\n { code: 'PG', name: 'Papua New Guinea', defaultCurrency: 'PGK', callingCode: '+675' },\n { code: 'PH', name: 'Philippines', defaultCurrency: 'PHP', callingCode: '+63' },\n { code: 'PK', name: 'Pakistan', defaultCurrency: 'PKR', callingCode: '+92' },\n { code: 'PL', name: 'Poland', defaultCurrency: 'PLN', callingCode: '+48' },\n { code: 'PM', name: 'Saint Pierre and Miquelon', defaultCurrency: 'EUR', callingCode: '+508' },\n { code: 'PN', name: 'Pitcairn', defaultCurrency: 'NZD', callingCode: '+64' },\n { code: 'PR', name: 'Puerto Rico', defaultCurrency: 'USD', callingCode: '+1787' },\n { code: 'PS', name: 'Palestine, State of', defaultCurrency: 'ILS', callingCode: '+970' },\n { code: 'PT', name: 'Portugal', defaultCurrency: 'EUR', callingCode: '+351' },\n { code: 'PW', name: 'Palau', defaultCurrency: 'USD', callingCode: '+680' },\n { code: 'PY', name: 'Paraguay', defaultCurrency: 'PYG', callingCode: '+595' },\n { code: 'QA', name: 'Qatar', defaultCurrency: 'QAR', callingCode: '+974' },\n { code: 'RE', name: 'Réunion', defaultCurrency: 'EUR', callingCode: '+262' },\n { code: 'RO', name: 'Romania', defaultCurrency: 'RON', callingCode: '+40' },\n { code: 'RS', name: 'Serbia', defaultCurrency: 'RSD', callingCode: '+381' },\n { code: 'RU', name: 'Russian Federation', defaultCurrency: 'RUB', callingCode: '+7' },\n { code: 'RW', name: 'Rwanda', defaultCurrency: 'RWF', callingCode: '+250' },\n { code: 'SA', name: 'Saudi Arabia', defaultCurrency: 'SAR', callingCode: '+966' },\n { code: 'SB', name: 'Solomon Islands', defaultCurrency: 'SBD', callingCode: '+677' },\n { code: 'SC', name: 'Seychelles', defaultCurrency: 'SCR', callingCode: '+248' },\n { code: 'SD', name: 'Sudan', defaultCurrency: 'SDG', callingCode: '+249' },\n { code: 'SE', name: 'Sweden', defaultCurrency: 'SEK', callingCode: '+46' },\n { code: 'SG', name: 'Singapore', defaultCurrency: 'SGD', callingCode: '+65' },\n { code: 'SH', name: 'Saint Helena, Ascension and Tristan da Cunha', defaultCurrency: 'SHP', callingCode: '+290' },\n { code: 'SI', name: 'Slovenia', defaultCurrency: 'EUR', callingCode: '+386' },\n { code: 'SJ', name: 'Svalbard and Jan Mayen', defaultCurrency: 'NOK', callingCode: '+47' },\n { code: 'SK', name: 'Slovakia', defaultCurrency: 'EUR', callingCode: '+421' },\n { code: 'SL', name: 'Sierra Leone', defaultCurrency: 'SLE', callingCode: '+232' },\n { code: 'SM', name: 'San Marino', defaultCurrency: 'EUR', callingCode: '+378' },\n { code: 'SN', name: 'Senegal', defaultCurrency: 'XOF', callingCode: '+221' },\n { code: 'SO', name: 'Somalia', defaultCurrency: 'SOS', callingCode: '+252' },\n { code: 'SR', name: 'Suriname', defaultCurrency: 'SRD', callingCode: '+597' },\n { code: 'SS', name: 'South Sudan', defaultCurrency: 'SSP', callingCode: '+211' },\n { code: 'ST', name: 'Sao Tome and Principe', defaultCurrency: 'STN', callingCode: '+239' },\n { code: 'SV', name: 'El Salvador', defaultCurrency: 'USD', callingCode: '+503' },\n { code: 'SX', name: 'Sint Maarten (Dutch part)', defaultCurrency: 'ANG', callingCode: '+1721' },\n { code: 'SY', name: 'Syrian Arab Republic', defaultCurrency: 'SYP', callingCode: '+963' },\n { code: 'SZ', name: 'Eswatini', defaultCurrency: 'SZL', callingCode: '+268' },\n { code: 'TC', name: 'Turks and Caicos Islands', defaultCurrency: 'USD', callingCode: '+1649' },\n { code: 'TD', name: 'Chad', defaultCurrency: 'XAF', callingCode: '+235' },\n { code: 'TF', name: 'French Southern Territories', defaultCurrency: 'EUR', callingCode: '+262' },\n { code: 'TG', name: 'Togo', defaultCurrency: 'XOF', callingCode: '+228' },\n { code: 'TH', name: 'Thailand', defaultCurrency: 'THB', callingCode: '+66' },\n { code: 'TJ', name: 'Tajikistan', defaultCurrency: 'TJS', callingCode: '+992' },\n { code: 'TK', name: 'Tokelau', defaultCurrency: 'NZD', callingCode: '+690' },\n { code: 'TL', name: 'Timor-Leste', defaultCurrency: 'USD', callingCode: '+670' },\n { code: 'TM', name: 'Turkmenistan', defaultCurrency: 'TMT', callingCode: '+993' },\n { code: 'TN', name: 'Tunisia', defaultCurrency: 'TND', callingCode: '+216' },\n { code: 'TO', name: 'Tonga', defaultCurrency: 'TOP', callingCode: '+676' },\n { code: 'TR', name: 'Türkiye', defaultCurrency: 'TRY', callingCode: '+90' },\n { code: 'TT', name: 'Trinidad and Tobago', defaultCurrency: 'TTD', callingCode: '+1868' },\n { code: 'TV', name: 'Tuvalu', defaultCurrency: 'AUD', callingCode: '+688' },\n { code: 'TW', name: 'Taiwan (Province of China)', defaultCurrency: 'TWD', callingCode: '+886' },\n { code: 'TZ', name: 'Tanzania, United Republic of', defaultCurrency: 'TZS', callingCode: '+255' },\n { code: 'UA', name: 'Ukraine', defaultCurrency: 'UAH', callingCode: '+380' },\n { code: 'UG', name: 'Uganda', defaultCurrency: 'UGX', callingCode: '+256' },\n { code: 'UM', name: 'United States Minor Outlying Islands', defaultCurrency: 'USD', callingCode: '+1' },\n { code: 'US', name: 'United States of America', defaultCurrency: 'USD', callingCode: '+1' },\n { code: 'UY', name: 'Uruguay', defaultCurrency: 'UYU', callingCode: '+598' },\n { code: 'UZ', name: 'Uzbekistan', defaultCurrency: 'UZS', callingCode: '+998' },\n { code: 'VA', name: 'Holy See', defaultCurrency: 'EUR', callingCode: '+379' },\n { code: 'VC', name: 'Saint Vincent and the Grenadines', defaultCurrency: 'XCD', callingCode: '+1784' },\n { code: 'VE', name: 'Venezuela (Bolivarian Republic of)', defaultCurrency: 'VES', callingCode: '+58' },\n { code: 'VG', name: 'Virgin Islands (British)', defaultCurrency: 'USD', callingCode: '+1284' },\n { code: 'VI', name: 'Virgin Islands (U.S.)', defaultCurrency: 'USD', callingCode: '+1340' },\n { code: 'VN', name: 'Viet Nam', defaultCurrency: 'VND', callingCode: '+84' },\n { code: 'VU', name: 'Vanuatu', defaultCurrency: 'VUV', callingCode: '+678' },\n { code: 'WF', name: 'Wallis and Futuna', defaultCurrency: 'XPF', callingCode: '+681' },\n { code: 'WS', name: 'Samoa', defaultCurrency: 'WST', callingCode: '+685' },\n { code: 'YE', name: 'Yemen', defaultCurrency: 'YER', callingCode: '+967' },\n { code: 'YT', name: 'Mayotte', defaultCurrency: 'EUR', callingCode: '+262' },\n { code: 'ZA', name: 'South Africa', defaultCurrency: 'ZAR', callingCode: '+27' },\n { code: 'ZM', name: 'Zambia', defaultCurrency: 'ZMW', callingCode: '+260' },\n { code: 'ZW', name: 'Zimbabwe', defaultCurrency: 'ZWG', callingCode: '+263' },\n];\n\nexport const ISO_COUNTRY_CODES: ReadonlySet<string> = new Set(ISO_COUNTRIES.map((country) => country.code));\n","// Canonical entity \"code\" format — the single source of truth for DTOs, DB checks, and frontend forms.\n// A code is a single lowercase word: starts with a letter, then lowercase letters, digits, or hyphens.\n// The dotted variant allows dot-separated segments (e.g. permission codes like \"add.salt\").\n\nconst SEGMENT = '[a-z][a-z0-9-]*';\n\nexport const CODE_PATTERN_SOURCE = `^${SEGMENT}$`;\nexport const DOTTED_CODE_PATTERN_SOURCE = `^${SEGMENT}(\\\\.${SEGMENT})*$`;\n\nexport const CODE_PATTERN = new RegExp(CODE_PATTERN_SOURCE);\nexport const DOTTED_CODE_PATTERN = new RegExp(DOTTED_CODE_PATTERN_SOURCE);\n\nexport interface CodeOptions {\n dotted?: boolean;\n}\n\n// Returns the regex for the requested code variant\nexport function codePattern(options?: CodeOptions): RegExp {\n return options?.dotted ? DOTTED_CODE_PATTERN : CODE_PATTERN;\n}\n\n// Returns the Postgres regex source string for the requested code variant (for CHECK constraints)\nexport function codePatternSource(options?: CodeOptions): string {\n return options?.dotted ? DOTTED_CODE_PATTERN_SOURCE : CODE_PATTERN_SOURCE;\n}\n\n// Human-readable validation message for the requested code variant\nexport function codeMessage(property: string, options?: CodeOptions): string {\n return options?.dotted\n ? `${property} must be lowercase words separated by dots.`\n : `${property} must be lowercase letters, numbers, and hyphens only.`;\n}\n","import { registerDecorator, type ValidationArguments, type ValidationOptions } from 'class-validator';\nimport { type CodeOptions, codeMessage, codePattern } from './code-pattern';\n\n// Validates a canonical lowercase-kebab code. Pass { dotted: true } for dot-separated codes (permissions).\nexport function IsCode(options?: CodeOptions, validationOptions?: ValidationOptions): PropertyDecorator {\n const pattern = codePattern(options);\n return (target: object, propertyName: string | symbol) => {\n registerDecorator({\n name: 'isCode',\n target: target.constructor,\n propertyName: String(propertyName),\n options: validationOptions,\n validator: {\n validate(value: unknown): boolean {\n return typeof value === 'string' && pattern.test(value);\n },\n defaultMessage(args: ValidationArguments): string {\n return codeMessage(args.property, options);\n },\n },\n });\n };\n}\n","import { registerDecorator, type ValidationArguments, type ValidationOptions } from 'class-validator';\n\nconst UTC_ISO_DATETIME_REGEX = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,3})?Z$/;\n\nexport function IsDateTime(validationOptions?: ValidationOptions): PropertyDecorator {\n return (target: object, propertyName: string | symbol) => {\n registerDecorator({\n name: 'isDateTime',\n target: target.constructor,\n propertyName: String(propertyName),\n options: validationOptions,\n validator: {\n validate(value: unknown): boolean {\n if (typeof value !== 'string') return false;\n if (!UTC_ISO_DATETIME_REGEX.test(value)) return false;\n return !Number.isNaN(Date.parse(value));\n },\n defaultMessage(args: ValidationArguments): string {\n return `${args.property} must be a UTC ISO date-time string ending with Z.`;\n },\n },\n });\n };\n}\n","import { Transform } from 'class-transformer';\n\nexport interface TrimOptions {\n nullify?: boolean;\n}\n\n// Trims a string field; by default converts a blank result ('') to null. Leaves non-strings\n// (undefined stays undefined → skip, null stays null → clear) untouched, preserving update semantics.\nexport function Trim(options?: TrimOptions): PropertyDecorator {\n const nullify = options?.nullify ?? true;\n return Transform(({ value }) => {\n if (typeof value !== 'string') return value;\n const trimmed = value.trim();\n return nullify ? trimmed || null : trimmed;\n });\n}\n","import type { MultipartFile } from '@fastify/multipart';\nimport { createParamDecorator, type ExecutionContext } from '@nestjs/common';\nimport type { FastifyRequest } from 'fastify';\nimport { BadRequestException } from '../exceptions';\n\nexport interface UploadedFileResult {\n buffer: Buffer;\n filename: string;\n mimetype: string;\n}\n\nasync function collectFiles(\n request: FastifyRequest,\n fieldName?: string,\n): Promise<{ files: MultipartFile[]; consumed: boolean }> {\n // Single-file shortcut when no fieldName filter is needed\n if (!fieldName) {\n const file = await request.file();\n return { files: file ? [file] : [], consumed: true };\n }\n\n const matched: MultipartFile[] = [];\n for await (const file of request.files()) {\n if (file.fieldname === fieldName) {\n matched.push(file);\n }\n }\n return { files: matched, consumed: true };\n}\n\nexport const UploadedFile = createParamDecorator(\n async (fieldName: string | undefined, ctx: ExecutionContext): Promise<UploadedFileResult> => {\n const request = ctx.switchToHttp().getRequest<FastifyRequest>();\n const { files } = await collectFiles(request, fieldName);\n const file = files[0];\n\n if (!file) {\n const field = fieldName ?? 'file';\n throw new BadRequestException({\n label: 'File Required',\n detail: `Please attach a file${fieldName ? ` under \"${fieldName}\"` : ''} to your request.`,\n errors: [{ field, message: 'File required' }],\n });\n }\n\n const buffer = await file.toBuffer();\n return { buffer, filename: file.filename, mimetype: file.mimetype };\n },\n);\n\nexport const UploadedFiles = createParamDecorator(\n async (fieldName: string | undefined, ctx: ExecutionContext): Promise<UploadedFileResult[]> => {\n const request = ctx.switchToHttp().getRequest<FastifyRequest>();\n const { files } = await collectFiles(request, fieldName);\n\n if (files.length === 0) {\n const field = fieldName ?? 'files';\n throw new BadRequestException({\n label: 'Files Required',\n detail: `Please attach at least one file${fieldName ? ` under \"${fieldName}\"` : ''} to your request.`,\n errors: [{ field, message: 'At least one file is required' }],\n });\n }\n\n const results: UploadedFileResult[] = [];\n for (const file of files) {\n const buffer = await file.toBuffer();\n results.push({ buffer, filename: file.filename, mimetype: file.mimetype });\n }\n return results;\n },\n);\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class BadGatewayException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Bad Gateway', HttpStatus.BAD_GATEWAY);\n }\n}\n","import { HttpException, HttpStatus } from '@nestjs/common';\nimport type { FieldError } from '../types/error-response.types';\n\n// Re-export FieldError for backwards compatibility\nexport type { FieldError } from '../types/error-response.types';\n\nexport interface ProblemOptions {\n type?: string;\n label?: string;\n detail?: string;\n errors?: FieldError[];\n}\n\nexport abstract class HttpProblemException extends HttpException {\n constructor(detailOrOptions: string | ProblemOptions, httpStatus: HttpStatus) {\n const options = typeof detailOrOptions === 'string' ? { detail: detailOrOptions } : detailOrOptions;\n\n super(\n {\n type: options.type ?? 'about:blank',\n label: options.label,\n detail: options.detail,\n errors: options.errors ?? [],\n },\n httpStatus,\n );\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class BadRequestException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Bad Request', HttpStatus.BAD_REQUEST);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class ConflictException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Conflict', HttpStatus.CONFLICT);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class ForbiddenException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Forbidden', HttpStatus.FORBIDDEN);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class GoneException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Gone', HttpStatus.GONE);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class InternalServerErrorException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Internal Server Error', HttpStatus.INTERNAL_SERVER_ERROR);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class MethodNotAllowedException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Method Not Allowed', HttpStatus.METHOD_NOT_ALLOWED);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class NotAcceptableException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Not Acceptable', HttpStatus.NOT_ACCEPTABLE);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class NotFoundException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Not Found', HttpStatus.NOT_FOUND);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class NotImplementedException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Not Implemented', HttpStatus.NOT_IMPLEMENTED);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class PayloadTooLargeException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Payload Too Large', HttpStatus.PAYLOAD_TOO_LARGE);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class RequestTimeoutException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Request Timeout', HttpStatus.REQUEST_TIMEOUT);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class ServiceUnavailableException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Service Unavailable', HttpStatus.SERVICE_UNAVAILABLE);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class TooManyRequestsException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Too Many Requests', HttpStatus.TOO_MANY_REQUESTS);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class UnauthorizedException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Unauthorized', HttpStatus.UNAUTHORIZED);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class UnprocessableEntityException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Unprocessable Entity', HttpStatus.UNPROCESSABLE_ENTITY);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class UnsupportedMediaTypeException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Unsupported Media Type', HttpStatus.UNSUPPORTED_MEDIA_TYPE);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class ValidationException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Validation Failed', HttpStatus.UNPROCESSABLE_ENTITY);\n }\n}\n"],"mappings":"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","names":["registerDecorator","ISO_COUNTRIES","code","name","defaultCurrency","callingCode","ISO_COUNTRY_CODES","Set","map","country","IsCountry","validationOptions","target","propertyName","registerDecorator","name","String","options","validator","validate","value","ISO_COUNTRY_CODES","has","toUpperCase","defaultMessage","args","property","SEGMENT","CODE_PATTERN_SOURCE","DOTTED_CODE_PATTERN_SOURCE","CODE_PATTERN","RegExp","DOTTED_CODE_PATTERN","codePattern","options","dotted","codePatternSource","codeMessage","property","registerDecorator","IsCode","options","validationOptions","pattern","codePattern","target","propertyName","registerDecorator","name","String","validator","validate","value","test","defaultMessage","args","codeMessage","property","registerDecorator","UTC_ISO_DATETIME_REGEX","IsDateTime","validationOptions","target","propertyName","registerDecorator","name","String","options","validator","validate","value","test","Number","isNaN","Date","parse","defaultMessage","args","property","Transform","Trim","options","nullify","Transform","value","trimmed","trim","createParamDecorator","HttpStatus","HttpException","HttpProblemException","HttpException","detailOrOptions","httpStatus","options","detail","type","label","errors","HttpStatus","BadRequestException","HttpProblemException","detailOrOptions","HttpStatus","BAD_REQUEST","HttpStatus","HttpStatus","HttpStatus","HttpStatus","HttpStatus","HttpStatus","HttpStatus","HttpStatus","HttpStatus","HttpStatus","HttpStatus","HttpStatus","HttpStatus","HttpStatus","HttpStatus","HttpStatus","collectFiles","request","fieldName","file","files","consumed","matched","fieldname","push","UploadedFile","createParamDecorator","ctx","switchToHttp","getRequest","field","BadRequestException","label","detail","errors","message","buffer","toBuffer","filename","mimetype","UploadedFiles","length","results"]}
1
+ {"version":3,"sources":["../src/countries/is-country.decorator.ts","../src/countries/iso-countries.ts","../src/decorators/code-pattern.ts","../src/decorators/is-code.decorator.ts","../src/decorators/is-date-time.decorator.ts","../src/decorators/trim.decorator.ts"],"sourcesContent":["import { registerDecorator, type ValidationArguments, type ValidationOptions } from 'class-validator';\nimport { ISO_COUNTRY_CODES } from './iso-countries';\n\nexport function IsCountry(validationOptions?: ValidationOptions): PropertyDecorator {\n return (target: object, propertyName: string | symbol) => {\n registerDecorator({\n name: 'isCountry',\n target: target.constructor,\n propertyName: String(propertyName),\n options: validationOptions,\n validator: {\n validate(value: unknown): boolean {\n if (typeof value !== 'string') return false;\n return ISO_COUNTRY_CODES.has(value.toUpperCase());\n },\n defaultMessage(args: ValidationArguments): string {\n return `${args.property} must be a valid ISO 3166-1 alpha-2 country code.`;\n },\n },\n });\n };\n}\n","export interface IsoCountry {\n code: string;\n name: string;\n defaultCurrency: string;\n callingCode: string;\n}\n\nexport const ISO_COUNTRIES: readonly IsoCountry[] = [\n { code: 'AD', name: 'Andorra', defaultCurrency: 'EUR', callingCode: '+376' },\n { code: 'AE', name: 'United Arab Emirates', defaultCurrency: 'AED', callingCode: '+971' },\n { code: 'AF', name: 'Afghanistan', defaultCurrency: 'AFN', callingCode: '+93' },\n { code: 'AG', name: 'Antigua and Barbuda', defaultCurrency: 'XCD', callingCode: '+1268' },\n { code: 'AI', name: 'Anguilla', defaultCurrency: 'XCD', callingCode: '+1264' },\n { code: 'AL', name: 'Albania', defaultCurrency: 'ALL', callingCode: '+355' },\n { code: 'AM', name: 'Armenia', defaultCurrency: 'AMD', callingCode: '+374' },\n { code: 'AO', name: 'Angola', defaultCurrency: 'AOA', callingCode: '+244' },\n { code: 'AQ', name: 'Antarctica', defaultCurrency: 'USD', callingCode: '+672' },\n { code: 'AR', name: 'Argentina', defaultCurrency: 'ARS', callingCode: '+54' },\n { code: 'AS', name: 'American Samoa', defaultCurrency: 'USD', callingCode: '+1684' },\n { code: 'AT', name: 'Austria', defaultCurrency: 'EUR', callingCode: '+43' },\n { code: 'AU', name: 'Australia', defaultCurrency: 'AUD', callingCode: '+61' },\n { code: 'AW', name: 'Aruba', defaultCurrency: 'AWG', callingCode: '+297' },\n { code: 'AX', name: 'Åland Islands', defaultCurrency: 'EUR', callingCode: '+358' },\n { code: 'AZ', name: 'Azerbaijan', defaultCurrency: 'AZN', callingCode: '+994' },\n { code: 'BA', name: 'Bosnia and Herzegovina', defaultCurrency: 'BAM', callingCode: '+387' },\n { code: 'BB', name: 'Barbados', defaultCurrency: 'BBD', callingCode: '+1246' },\n { code: 'BD', name: 'Bangladesh', defaultCurrency: 'BDT', callingCode: '+880' },\n { code: 'BE', name: 'Belgium', defaultCurrency: 'EUR', callingCode: '+32' },\n { code: 'BF', name: 'Burkina Faso', defaultCurrency: 'XOF', callingCode: '+226' },\n { code: 'BG', name: 'Bulgaria', defaultCurrency: 'BGN', callingCode: '+359' },\n { code: 'BH', name: 'Bahrain', defaultCurrency: 'BHD', callingCode: '+973' },\n { code: 'BI', name: 'Burundi', defaultCurrency: 'BIF', callingCode: '+257' },\n { code: 'BJ', name: 'Benin', defaultCurrency: 'XOF', callingCode: '+229' },\n { code: 'BL', name: 'Saint Barthélemy', defaultCurrency: 'EUR', callingCode: '+590' },\n { code: 'BM', name: 'Bermuda', defaultCurrency: 'BMD', callingCode: '+1441' },\n { code: 'BN', name: 'Brunei Darussalam', defaultCurrency: 'BND', callingCode: '+673' },\n { code: 'BO', name: 'Bolivia', defaultCurrency: 'BOB', callingCode: '+591' },\n { code: 'BQ', name: 'Bonaire, Sint Eustatius and Saba', defaultCurrency: 'USD', callingCode: '+599' },\n { code: 'BR', name: 'Brazil', defaultCurrency: 'BRL', callingCode: '+55' },\n { code: 'BS', name: 'Bahamas', defaultCurrency: 'BSD', callingCode: '+1242' },\n { code: 'BT', name: 'Bhutan', defaultCurrency: 'BTN', callingCode: '+975' },\n { code: 'BV', name: 'Bouvet Island', defaultCurrency: 'NOK', callingCode: '+47' },\n { code: 'BW', name: 'Botswana', defaultCurrency: 'BWP', callingCode: '+267' },\n { code: 'BY', name: 'Belarus', defaultCurrency: 'BYN', callingCode: '+375' },\n { code: 'BZ', name: 'Belize', defaultCurrency: 'BZD', callingCode: '+501' },\n { code: 'CA', name: 'Canada', defaultCurrency: 'CAD', callingCode: '+1' },\n { code: 'CC', name: 'Cocos (Keeling) Islands', defaultCurrency: 'AUD', callingCode: '+61' },\n { code: 'CD', name: 'Congo, Democratic Republic of the', defaultCurrency: 'CDF', callingCode: '+243' },\n { code: 'CF', name: 'Central African Republic', defaultCurrency: 'XAF', callingCode: '+236' },\n { code: 'CG', name: 'Congo', defaultCurrency: 'XAF', callingCode: '+242' },\n { code: 'CH', name: 'Switzerland', defaultCurrency: 'CHF', callingCode: '+41' },\n { code: 'CI', name: \"Côte d'Ivoire\", defaultCurrency: 'XOF', callingCode: '+225' },\n { code: 'CK', name: 'Cook Islands', defaultCurrency: 'NZD', callingCode: '+682' },\n { code: 'CL', name: 'Chile', defaultCurrency: 'CLP', callingCode: '+56' },\n { code: 'CM', name: 'Cameroon', defaultCurrency: 'XAF', callingCode: '+237' },\n { code: 'CN', name: 'China', defaultCurrency: 'CNY', callingCode: '+86' },\n { code: 'CO', name: 'Colombia', defaultCurrency: 'COP', callingCode: '+57' },\n { code: 'CR', name: 'Costa Rica', defaultCurrency: 'CRC', callingCode: '+506' },\n { code: 'CU', name: 'Cuba', defaultCurrency: 'CUP', callingCode: '+53' },\n { code: 'CV', name: 'Cabo Verde', defaultCurrency: 'CVE', callingCode: '+238' },\n { code: 'CW', name: 'Curaçao', defaultCurrency: 'ANG', callingCode: '+599' },\n { code: 'CX', name: 'Christmas Island', defaultCurrency: 'AUD', callingCode: '+61' },\n { code: 'CY', name: 'Cyprus', defaultCurrency: 'EUR', callingCode: '+357' },\n { code: 'CZ', name: 'Czechia', defaultCurrency: 'CZK', callingCode: '+420' },\n { code: 'DE', name: 'Germany', defaultCurrency: 'EUR', callingCode: '+49' },\n { code: 'DJ', name: 'Djibouti', defaultCurrency: 'DJF', callingCode: '+253' },\n { code: 'DK', name: 'Denmark', defaultCurrency: 'DKK', callingCode: '+45' },\n { code: 'DM', name: 'Dominica', defaultCurrency: 'XCD', callingCode: '+1767' },\n { code: 'DO', name: 'Dominican Republic', defaultCurrency: 'DOP', callingCode: '+1809' },\n { code: 'DZ', name: 'Algeria', defaultCurrency: 'DZD', callingCode: '+213' },\n { code: 'EC', name: 'Ecuador', defaultCurrency: 'USD', callingCode: '+593' },\n { code: 'EE', name: 'Estonia', defaultCurrency: 'EUR', callingCode: '+372' },\n { code: 'EG', name: 'Egypt', defaultCurrency: 'EGP', callingCode: '+20' },\n { code: 'EH', name: 'Western Sahara', defaultCurrency: 'MAD', callingCode: '+212' },\n { code: 'ER', name: 'Eritrea', defaultCurrency: 'ERN', callingCode: '+291' },\n { code: 'ES', name: 'Spain', defaultCurrency: 'EUR', callingCode: '+34' },\n { code: 'ET', name: 'Ethiopia', defaultCurrency: 'ETB', callingCode: '+251' },\n { code: 'FI', name: 'Finland', defaultCurrency: 'EUR', callingCode: '+358' },\n { code: 'FJ', name: 'Fiji', defaultCurrency: 'FJD', callingCode: '+679' },\n { code: 'FK', name: 'Falkland Islands (Malvinas)', defaultCurrency: 'FKP', callingCode: '+500' },\n { code: 'FM', name: 'Micronesia (Federated States of)', defaultCurrency: 'USD', callingCode: '+691' },\n { code: 'FO', name: 'Faroe Islands', defaultCurrency: 'DKK', callingCode: '+298' },\n { code: 'FR', name: 'France', defaultCurrency: 'EUR', callingCode: '+33' },\n { code: 'GA', name: 'Gabon', defaultCurrency: 'XAF', callingCode: '+241' },\n { code: 'GB', name: 'United Kingdom', defaultCurrency: 'GBP', callingCode: '+44' },\n { code: 'GD', name: 'Grenada', defaultCurrency: 'XCD', callingCode: '+1473' },\n { code: 'GE', name: 'Georgia', defaultCurrency: 'GEL', callingCode: '+995' },\n { code: 'GF', name: 'French Guiana', defaultCurrency: 'EUR', callingCode: '+594' },\n { code: 'GG', name: 'Guernsey', defaultCurrency: 'GBP', callingCode: '+44' },\n { code: 'GH', name: 'Ghana', defaultCurrency: 'GHS', callingCode: '+233' },\n { code: 'GI', name: 'Gibraltar', defaultCurrency: 'GIP', callingCode: '+350' },\n { code: 'GL', name: 'Greenland', defaultCurrency: 'DKK', callingCode: '+299' },\n { code: 'GM', name: 'Gambia', defaultCurrency: 'GMD', callingCode: '+220' },\n { code: 'GN', name: 'Guinea', defaultCurrency: 'GNF', callingCode: '+224' },\n { code: 'GP', name: 'Guadeloupe', defaultCurrency: 'EUR', callingCode: '+590' },\n { code: 'GQ', name: 'Equatorial Guinea', defaultCurrency: 'XAF', callingCode: '+240' },\n { code: 'GR', name: 'Greece', defaultCurrency: 'EUR', callingCode: '+30' },\n { code: 'GS', name: 'South Georgia and the South Sandwich Islands', defaultCurrency: 'GBP', callingCode: '+500' },\n { code: 'GT', name: 'Guatemala', defaultCurrency: 'GTQ', callingCode: '+502' },\n { code: 'GU', name: 'Guam', defaultCurrency: 'USD', callingCode: '+1671' },\n { code: 'GW', name: 'Guinea-Bissau', defaultCurrency: 'XOF', callingCode: '+245' },\n { code: 'GY', name: 'Guyana', defaultCurrency: 'GYD', callingCode: '+592' },\n { code: 'HK', name: 'Hong Kong', defaultCurrency: 'HKD', callingCode: '+852' },\n { code: 'HM', name: 'Heard Island and McDonald Islands', defaultCurrency: 'AUD', callingCode: '+672' },\n { code: 'HN', name: 'Honduras', defaultCurrency: 'HNL', callingCode: '+504' },\n { code: 'HR', name: 'Croatia', defaultCurrency: 'EUR', callingCode: '+385' },\n { code: 'HT', name: 'Haiti', defaultCurrency: 'HTG', callingCode: '+509' },\n { code: 'HU', name: 'Hungary', defaultCurrency: 'HUF', callingCode: '+36' },\n { code: 'ID', name: 'Indonesia', defaultCurrency: 'IDR', callingCode: '+62' },\n { code: 'IE', name: 'Ireland', defaultCurrency: 'EUR', callingCode: '+353' },\n { code: 'IL', name: 'Israel', defaultCurrency: 'ILS', callingCode: '+972' },\n { code: 'IM', name: 'Isle of Man', defaultCurrency: 'GBP', callingCode: '+44' },\n { code: 'IN', name: 'India', defaultCurrency: 'INR', callingCode: '+91' },\n { code: 'IO', name: 'British Indian Ocean Territory', defaultCurrency: 'USD', callingCode: '+246' },\n { code: 'IQ', name: 'Iraq', defaultCurrency: 'IQD', callingCode: '+964' },\n { code: 'IR', name: 'Iran', defaultCurrency: 'IRR', callingCode: '+98' },\n { code: 'IS', name: 'Iceland', defaultCurrency: 'ISK', callingCode: '+354' },\n { code: 'IT', name: 'Italy', defaultCurrency: 'EUR', callingCode: '+39' },\n { code: 'JE', name: 'Jersey', defaultCurrency: 'GBP', callingCode: '+44' },\n { code: 'JM', name: 'Jamaica', defaultCurrency: 'JMD', callingCode: '+1876' },\n { code: 'JO', name: 'Jordan', defaultCurrency: 'JOD', callingCode: '+962' },\n { code: 'JP', name: 'Japan', defaultCurrency: 'JPY', callingCode: '+81' },\n { code: 'KE', name: 'Kenya', defaultCurrency: 'KES', callingCode: '+254' },\n { code: 'KG', name: 'Kyrgyzstan', defaultCurrency: 'KGS', callingCode: '+996' },\n { code: 'KH', name: 'Cambodia', defaultCurrency: 'KHR', callingCode: '+855' },\n { code: 'KI', name: 'Kiribati', defaultCurrency: 'AUD', callingCode: '+686' },\n { code: 'KM', name: 'Comoros', defaultCurrency: 'KMF', callingCode: '+269' },\n { code: 'KN', name: 'Saint Kitts and Nevis', defaultCurrency: 'XCD', callingCode: '+1869' },\n { code: 'KP', name: \"Korea (Democratic People's Republic of)\", defaultCurrency: 'KPW', callingCode: '+850' },\n { code: 'KR', name: 'Korea (Republic of)', defaultCurrency: 'KRW', callingCode: '+82' },\n { code: 'KW', name: 'Kuwait', defaultCurrency: 'KWD', callingCode: '+965' },\n { code: 'KY', name: 'Cayman Islands', defaultCurrency: 'KYD', callingCode: '+1345' },\n { code: 'KZ', name: 'Kazakhstan', defaultCurrency: 'KZT', callingCode: '+7' },\n { code: 'LA', name: \"Lao People's Democratic Republic\", defaultCurrency: 'LAK', callingCode: '+856' },\n { code: 'LB', name: 'Lebanon', defaultCurrency: 'LBP', callingCode: '+961' },\n { code: 'LC', name: 'Saint Lucia', defaultCurrency: 'XCD', callingCode: '+1758' },\n { code: 'LI', name: 'Liechtenstein', defaultCurrency: 'CHF', callingCode: '+423' },\n { code: 'LK', name: 'Sri Lanka', defaultCurrency: 'LKR', callingCode: '+94' },\n { code: 'LR', name: 'Liberia', defaultCurrency: 'LRD', callingCode: '+231' },\n { code: 'LS', name: 'Lesotho', defaultCurrency: 'LSL', callingCode: '+266' },\n { code: 'LT', name: 'Lithuania', defaultCurrency: 'EUR', callingCode: '+370' },\n { code: 'LU', name: 'Luxembourg', defaultCurrency: 'EUR', callingCode: '+352' },\n { code: 'LV', name: 'Latvia', defaultCurrency: 'EUR', callingCode: '+371' },\n { code: 'LY', name: 'Libya', defaultCurrency: 'LYD', callingCode: '+218' },\n { code: 'MA', name: 'Morocco', defaultCurrency: 'MAD', callingCode: '+212' },\n { code: 'MC', name: 'Monaco', defaultCurrency: 'EUR', callingCode: '+377' },\n { code: 'MD', name: 'Moldova', defaultCurrency: 'MDL', callingCode: '+373' },\n { code: 'ME', name: 'Montenegro', defaultCurrency: 'EUR', callingCode: '+382' },\n { code: 'MF', name: 'Saint Martin (French part)', defaultCurrency: 'EUR', callingCode: '+590' },\n { code: 'MG', name: 'Madagascar', defaultCurrency: 'MGA', callingCode: '+261' },\n { code: 'MH', name: 'Marshall Islands', defaultCurrency: 'USD', callingCode: '+692' },\n { code: 'MK', name: 'North Macedonia', defaultCurrency: 'MKD', callingCode: '+389' },\n { code: 'ML', name: 'Mali', defaultCurrency: 'XOF', callingCode: '+223' },\n { code: 'MM', name: 'Myanmar', defaultCurrency: 'MMK', callingCode: '+95' },\n { code: 'MN', name: 'Mongolia', defaultCurrency: 'MNT', callingCode: '+976' },\n { code: 'MO', name: 'Macao', defaultCurrency: 'MOP', callingCode: '+853' },\n { code: 'MP', name: 'Northern Mariana Islands', defaultCurrency: 'USD', callingCode: '+1670' },\n { code: 'MQ', name: 'Martinique', defaultCurrency: 'EUR', callingCode: '+596' },\n { code: 'MR', name: 'Mauritania', defaultCurrency: 'MRU', callingCode: '+222' },\n { code: 'MS', name: 'Montserrat', defaultCurrency: 'XCD', callingCode: '+1664' },\n { code: 'MT', name: 'Malta', defaultCurrency: 'EUR', callingCode: '+356' },\n { code: 'MU', name: 'Mauritius', defaultCurrency: 'MUR', callingCode: '+230' },\n { code: 'MV', name: 'Maldives', defaultCurrency: 'MVR', callingCode: '+960' },\n { code: 'MW', name: 'Malawi', defaultCurrency: 'MWK', callingCode: '+265' },\n { code: 'MX', name: 'Mexico', defaultCurrency: 'MXN', callingCode: '+52' },\n { code: 'MY', name: 'Malaysia', defaultCurrency: 'MYR', callingCode: '+60' },\n { code: 'MZ', name: 'Mozambique', defaultCurrency: 'MZN', callingCode: '+258' },\n { code: 'NA', name: 'Namibia', defaultCurrency: 'NAD', callingCode: '+264' },\n { code: 'NC', name: 'New Caledonia', defaultCurrency: 'XPF', callingCode: '+687' },\n { code: 'NE', name: 'Niger', defaultCurrency: 'XOF', callingCode: '+227' },\n { code: 'NF', name: 'Norfolk Island', defaultCurrency: 'AUD', callingCode: '+672' },\n { code: 'NG', name: 'Nigeria', defaultCurrency: 'NGN', callingCode: '+234' },\n { code: 'NI', name: 'Nicaragua', defaultCurrency: 'NIO', callingCode: '+505' },\n { code: 'NL', name: 'Netherlands', defaultCurrency: 'EUR', callingCode: '+31' },\n { code: 'NO', name: 'Norway', defaultCurrency: 'NOK', callingCode: '+47' },\n { code: 'NP', name: 'Nepal', defaultCurrency: 'NPR', callingCode: '+977' },\n { code: 'NR', name: 'Nauru', defaultCurrency: 'AUD', callingCode: '+674' },\n { code: 'NU', name: 'Niue', defaultCurrency: 'NZD', callingCode: '+683' },\n { code: 'NZ', name: 'New Zealand', defaultCurrency: 'NZD', callingCode: '+64' },\n { code: 'OM', name: 'Oman', defaultCurrency: 'OMR', callingCode: '+968' },\n { code: 'PA', name: 'Panama', defaultCurrency: 'PAB', callingCode: '+507' },\n { code: 'PE', name: 'Peru', defaultCurrency: 'PEN', callingCode: '+51' },\n { code: 'PF', name: 'French Polynesia', defaultCurrency: 'XPF', callingCode: '+689' },\n { code: 'PG', name: 'Papua New Guinea', defaultCurrency: 'PGK', callingCode: '+675' },\n { code: 'PH', name: 'Philippines', defaultCurrency: 'PHP', callingCode: '+63' },\n { code: 'PK', name: 'Pakistan', defaultCurrency: 'PKR', callingCode: '+92' },\n { code: 'PL', name: 'Poland', defaultCurrency: 'PLN', callingCode: '+48' },\n { code: 'PM', name: 'Saint Pierre and Miquelon', defaultCurrency: 'EUR', callingCode: '+508' },\n { code: 'PN', name: 'Pitcairn', defaultCurrency: 'NZD', callingCode: '+64' },\n { code: 'PR', name: 'Puerto Rico', defaultCurrency: 'USD', callingCode: '+1787' },\n { code: 'PS', name: 'Palestine, State of', defaultCurrency: 'ILS', callingCode: '+970' },\n { code: 'PT', name: 'Portugal', defaultCurrency: 'EUR', callingCode: '+351' },\n { code: 'PW', name: 'Palau', defaultCurrency: 'USD', callingCode: '+680' },\n { code: 'PY', name: 'Paraguay', defaultCurrency: 'PYG', callingCode: '+595' },\n { code: 'QA', name: 'Qatar', defaultCurrency: 'QAR', callingCode: '+974' },\n { code: 'RE', name: 'Réunion', defaultCurrency: 'EUR', callingCode: '+262' },\n { code: 'RO', name: 'Romania', defaultCurrency: 'RON', callingCode: '+40' },\n { code: 'RS', name: 'Serbia', defaultCurrency: 'RSD', callingCode: '+381' },\n { code: 'RU', name: 'Russian Federation', defaultCurrency: 'RUB', callingCode: '+7' },\n { code: 'RW', name: 'Rwanda', defaultCurrency: 'RWF', callingCode: '+250' },\n { code: 'SA', name: 'Saudi Arabia', defaultCurrency: 'SAR', callingCode: '+966' },\n { code: 'SB', name: 'Solomon Islands', defaultCurrency: 'SBD', callingCode: '+677' },\n { code: 'SC', name: 'Seychelles', defaultCurrency: 'SCR', callingCode: '+248' },\n { code: 'SD', name: 'Sudan', defaultCurrency: 'SDG', callingCode: '+249' },\n { code: 'SE', name: 'Sweden', defaultCurrency: 'SEK', callingCode: '+46' },\n { code: 'SG', name: 'Singapore', defaultCurrency: 'SGD', callingCode: '+65' },\n { code: 'SH', name: 'Saint Helena, Ascension and Tristan da Cunha', defaultCurrency: 'SHP', callingCode: '+290' },\n { code: 'SI', name: 'Slovenia', defaultCurrency: 'EUR', callingCode: '+386' },\n { code: 'SJ', name: 'Svalbard and Jan Mayen', defaultCurrency: 'NOK', callingCode: '+47' },\n { code: 'SK', name: 'Slovakia', defaultCurrency: 'EUR', callingCode: '+421' },\n { code: 'SL', name: 'Sierra Leone', defaultCurrency: 'SLE', callingCode: '+232' },\n { code: 'SM', name: 'San Marino', defaultCurrency: 'EUR', callingCode: '+378' },\n { code: 'SN', name: 'Senegal', defaultCurrency: 'XOF', callingCode: '+221' },\n { code: 'SO', name: 'Somalia', defaultCurrency: 'SOS', callingCode: '+252' },\n { code: 'SR', name: 'Suriname', defaultCurrency: 'SRD', callingCode: '+597' },\n { code: 'SS', name: 'South Sudan', defaultCurrency: 'SSP', callingCode: '+211' },\n { code: 'ST', name: 'Sao Tome and Principe', defaultCurrency: 'STN', callingCode: '+239' },\n { code: 'SV', name: 'El Salvador', defaultCurrency: 'USD', callingCode: '+503' },\n { code: 'SX', name: 'Sint Maarten (Dutch part)', defaultCurrency: 'ANG', callingCode: '+1721' },\n { code: 'SY', name: 'Syrian Arab Republic', defaultCurrency: 'SYP', callingCode: '+963' },\n { code: 'SZ', name: 'Eswatini', defaultCurrency: 'SZL', callingCode: '+268' },\n { code: 'TC', name: 'Turks and Caicos Islands', defaultCurrency: 'USD', callingCode: '+1649' },\n { code: 'TD', name: 'Chad', defaultCurrency: 'XAF', callingCode: '+235' },\n { code: 'TF', name: 'French Southern Territories', defaultCurrency: 'EUR', callingCode: '+262' },\n { code: 'TG', name: 'Togo', defaultCurrency: 'XOF', callingCode: '+228' },\n { code: 'TH', name: 'Thailand', defaultCurrency: 'THB', callingCode: '+66' },\n { code: 'TJ', name: 'Tajikistan', defaultCurrency: 'TJS', callingCode: '+992' },\n { code: 'TK', name: 'Tokelau', defaultCurrency: 'NZD', callingCode: '+690' },\n { code: 'TL', name: 'Timor-Leste', defaultCurrency: 'USD', callingCode: '+670' },\n { code: 'TM', name: 'Turkmenistan', defaultCurrency: 'TMT', callingCode: '+993' },\n { code: 'TN', name: 'Tunisia', defaultCurrency: 'TND', callingCode: '+216' },\n { code: 'TO', name: 'Tonga', defaultCurrency: 'TOP', callingCode: '+676' },\n { code: 'TR', name: 'Türkiye', defaultCurrency: 'TRY', callingCode: '+90' },\n { code: 'TT', name: 'Trinidad and Tobago', defaultCurrency: 'TTD', callingCode: '+1868' },\n { code: 'TV', name: 'Tuvalu', defaultCurrency: 'AUD', callingCode: '+688' },\n { code: 'TW', name: 'Taiwan (Province of China)', defaultCurrency: 'TWD', callingCode: '+886' },\n { code: 'TZ', name: 'Tanzania, United Republic of', defaultCurrency: 'TZS', callingCode: '+255' },\n { code: 'UA', name: 'Ukraine', defaultCurrency: 'UAH', callingCode: '+380' },\n { code: 'UG', name: 'Uganda', defaultCurrency: 'UGX', callingCode: '+256' },\n { code: 'UM', name: 'United States Minor Outlying Islands', defaultCurrency: 'USD', callingCode: '+1' },\n { code: 'US', name: 'United States of America', defaultCurrency: 'USD', callingCode: '+1' },\n { code: 'UY', name: 'Uruguay', defaultCurrency: 'UYU', callingCode: '+598' },\n { code: 'UZ', name: 'Uzbekistan', defaultCurrency: 'UZS', callingCode: '+998' },\n { code: 'VA', name: 'Holy See', defaultCurrency: 'EUR', callingCode: '+379' },\n { code: 'VC', name: 'Saint Vincent and the Grenadines', defaultCurrency: 'XCD', callingCode: '+1784' },\n { code: 'VE', name: 'Venezuela (Bolivarian Republic of)', defaultCurrency: 'VES', callingCode: '+58' },\n { code: 'VG', name: 'Virgin Islands (British)', defaultCurrency: 'USD', callingCode: '+1284' },\n { code: 'VI', name: 'Virgin Islands (U.S.)', defaultCurrency: 'USD', callingCode: '+1340' },\n { code: 'VN', name: 'Viet Nam', defaultCurrency: 'VND', callingCode: '+84' },\n { code: 'VU', name: 'Vanuatu', defaultCurrency: 'VUV', callingCode: '+678' },\n { code: 'WF', name: 'Wallis and Futuna', defaultCurrency: 'XPF', callingCode: '+681' },\n { code: 'WS', name: 'Samoa', defaultCurrency: 'WST', callingCode: '+685' },\n { code: 'YE', name: 'Yemen', defaultCurrency: 'YER', callingCode: '+967' },\n { code: 'YT', name: 'Mayotte', defaultCurrency: 'EUR', callingCode: '+262' },\n { code: 'ZA', name: 'South Africa', defaultCurrency: 'ZAR', callingCode: '+27' },\n { code: 'ZM', name: 'Zambia', defaultCurrency: 'ZMW', callingCode: '+260' },\n { code: 'ZW', name: 'Zimbabwe', defaultCurrency: 'ZWG', callingCode: '+263' },\n];\n\nexport const ISO_COUNTRY_CODES: ReadonlySet<string> = new Set(ISO_COUNTRIES.map((country) => country.code));\n","// Canonical entity \"code\" format — the single source of truth for DTOs, DB checks, and frontend forms.\n// A code is a single lowercase word: starts with a letter, then lowercase letters, digits, or hyphens.\n// The dotted variant allows dot-separated segments (e.g. permission codes like \"add.salt\").\n\nconst SEGMENT = '[a-z][a-z0-9-]*';\n\nexport const CODE_PATTERN_SOURCE = `^${SEGMENT}$`;\nexport const DOTTED_CODE_PATTERN_SOURCE = `^${SEGMENT}(\\\\.${SEGMENT})*$`;\n\nexport const CODE_PATTERN = new RegExp(CODE_PATTERN_SOURCE);\nexport const DOTTED_CODE_PATTERN = new RegExp(DOTTED_CODE_PATTERN_SOURCE);\n\nexport interface CodeOptions {\n dotted?: boolean;\n}\n\n// Returns the regex for the requested code variant\nexport function codePattern(options?: CodeOptions): RegExp {\n return options?.dotted ? DOTTED_CODE_PATTERN : CODE_PATTERN;\n}\n\n// Returns the Postgres regex source string for the requested code variant (for CHECK constraints)\nexport function codePatternSource(options?: CodeOptions): string {\n return options?.dotted ? DOTTED_CODE_PATTERN_SOURCE : CODE_PATTERN_SOURCE;\n}\n\n// Human-readable validation message for the requested code variant\nexport function codeMessage(property: string, options?: CodeOptions): string {\n return options?.dotted\n ? `${property} must be lowercase words separated by dots.`\n : `${property} must be lowercase letters, numbers, and hyphens only.`;\n}\n","import { registerDecorator, type ValidationArguments, type ValidationOptions } from 'class-validator';\nimport { type CodeOptions, codeMessage, codePattern } from './code-pattern';\n\n// Validates a canonical lowercase-kebab code. Pass { dotted: true } for dot-separated codes (permissions).\nexport function IsCode(options?: CodeOptions, validationOptions?: ValidationOptions): PropertyDecorator {\n const pattern = codePattern(options);\n return (target: object, propertyName: string | symbol) => {\n registerDecorator({\n name: 'isCode',\n target: target.constructor,\n propertyName: String(propertyName),\n options: validationOptions,\n validator: {\n validate(value: unknown): boolean {\n return typeof value === 'string' && pattern.test(value);\n },\n defaultMessage(args: ValidationArguments): string {\n return codeMessage(args.property, options);\n },\n },\n });\n };\n}\n","import { registerDecorator, type ValidationArguments, type ValidationOptions } from 'class-validator';\n\nconst UTC_ISO_DATETIME_REGEX = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,3})?Z$/;\n\nexport function IsDateTime(validationOptions?: ValidationOptions): PropertyDecorator {\n return (target: object, propertyName: string | symbol) => {\n registerDecorator({\n name: 'isDateTime',\n target: target.constructor,\n propertyName: String(propertyName),\n options: validationOptions,\n validator: {\n validate(value: unknown): boolean {\n if (typeof value !== 'string') return false;\n if (!UTC_ISO_DATETIME_REGEX.test(value)) return false;\n return !Number.isNaN(Date.parse(value));\n },\n defaultMessage(args: ValidationArguments): string {\n return `${args.property} must be a UTC ISO date-time string ending with Z.`;\n },\n },\n });\n };\n}\n","import { Transform } from 'class-transformer';\n\nexport interface TrimOptions {\n nullify?: boolean;\n}\n\n// Trims a string field; by default converts a blank result ('') to null. Leaves non-strings\n// (undefined stays undefined → skip, null stays null → clear) untouched, preserving update semantics.\nexport function Trim(options?: TrimOptions): PropertyDecorator {\n const nullify = options?.nullify ?? true;\n return Transform(({ value }) => {\n if (typeof value !== 'string') return value;\n const trimmed = value.trim();\n return nullify ? trimmed || null : trimmed;\n });\n}\n"],"mappings":"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","names":["registerDecorator","ISO_COUNTRIES","code","name","defaultCurrency","callingCode","ISO_COUNTRY_CODES","Set","map","country","IsCountry","validationOptions","target","propertyName","registerDecorator","name","String","options","validator","validate","value","ISO_COUNTRY_CODES","has","toUpperCase","defaultMessage","args","property","SEGMENT","CODE_PATTERN_SOURCE","DOTTED_CODE_PATTERN_SOURCE","CODE_PATTERN","RegExp","DOTTED_CODE_PATTERN","codePattern","options","dotted","codePatternSource","codeMessage","property","registerDecorator","IsCode","options","validationOptions","pattern","codePattern","target","propertyName","registerDecorator","name","String","validator","validate","value","test","defaultMessage","args","codeMessage","property","registerDecorator","UTC_ISO_DATETIME_REGEX","IsDateTime","validationOptions","target","propertyName","registerDecorator","name","String","options","validator","validate","value","test","Number","isNaN","Date","parse","defaultMessage","args","property","Transform","Trim","options","nullify","Transform","value","trimmed","trim"]}
package/dist/files.cjs ADDED
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/files/index.ts
22
+ var files_exports = {};
23
+ __export(files_exports, {
24
+ MultipartDto: () => MultipartDto,
25
+ UploadedFile: () => UploadedFile,
26
+ UploadedFiles: () => UploadedFiles,
27
+ readMultipart: () => readMultipart
28
+ });
29
+ module.exports = __toCommonJS(files_exports);
30
+
31
+ // src/files/uploaded-file.decorator.ts
32
+ var import_common20 = require("@nestjs/common");
33
+ var import_class_transformer = require("class-transformer");
34
+ var import_class_validator = require("class-validator");
35
+
36
+ // src/exceptions/bad-gateway.exception.ts
37
+ var import_common2 = require("@nestjs/common");
38
+
39
+ // src/exceptions/base-field.exception.ts
40
+ var import_common = require("@nestjs/common");
41
+ var HttpProblemException = class extends import_common.HttpException {
42
+ static {
43
+ __name(this, "HttpProblemException");
44
+ }
45
+ constructor(detailOrOptions, httpStatus) {
46
+ const options = typeof detailOrOptions === "string" ? {
47
+ detail: detailOrOptions
48
+ } : detailOrOptions;
49
+ super({
50
+ type: options.type ?? "about:blank",
51
+ label: options.label,
52
+ detail: options.detail,
53
+ errors: options.errors ?? []
54
+ }, httpStatus);
55
+ }
56
+ };
57
+
58
+ // src/exceptions/bad-request.exception.ts
59
+ var import_common3 = require("@nestjs/common");
60
+ var BadRequestException = class extends HttpProblemException {
61
+ static {
62
+ __name(this, "BadRequestException");
63
+ }
64
+ constructor(detailOrOptions) {
65
+ super(detailOrOptions ?? "Bad Request", import_common3.HttpStatus.BAD_REQUEST);
66
+ }
67
+ };
68
+
69
+ // src/exceptions/conflict.exception.ts
70
+ var import_common4 = require("@nestjs/common");
71
+
72
+ // src/exceptions/forbidden.exception.ts
73
+ var import_common5 = require("@nestjs/common");
74
+
75
+ // src/exceptions/gone.exception.ts
76
+ var import_common6 = require("@nestjs/common");
77
+
78
+ // src/exceptions/internal-server-error.exception.ts
79
+ var import_common7 = require("@nestjs/common");
80
+
81
+ // src/exceptions/method-not-allowed.exception.ts
82
+ var import_common8 = require("@nestjs/common");
83
+
84
+ // src/exceptions/not-acceptable.exception.ts
85
+ var import_common9 = require("@nestjs/common");
86
+
87
+ // src/exceptions/not-found.exception.ts
88
+ var import_common10 = require("@nestjs/common");
89
+
90
+ // src/exceptions/not-implemented.exception.ts
91
+ var import_common11 = require("@nestjs/common");
92
+
93
+ // src/exceptions/payload-too-large.exception.ts
94
+ var import_common12 = require("@nestjs/common");
95
+
96
+ // src/exceptions/request-timeout.exception.ts
97
+ var import_common13 = require("@nestjs/common");
98
+
99
+ // src/exceptions/service-unavailable.exception.ts
100
+ var import_common14 = require("@nestjs/common");
101
+
102
+ // src/exceptions/too-many-requests.exception.ts
103
+ var import_common15 = require("@nestjs/common");
104
+
105
+ // src/exceptions/unauthorized.exception.ts
106
+ var import_common16 = require("@nestjs/common");
107
+
108
+ // src/exceptions/unprocessable-entity.exception.ts
109
+ var import_common17 = require("@nestjs/common");
110
+
111
+ // src/exceptions/unsupported-media-type.exception.ts
112
+ var import_common18 = require("@nestjs/common");
113
+
114
+ // src/exceptions/validation.exception.ts
115
+ var import_common19 = require("@nestjs/common");
116
+
117
+ // src/files/uploaded-file.decorator.ts
118
+ var PARSED = Symbol("vritti.multipart");
119
+ function readMultipart(request) {
120
+ const cached = request;
121
+ cached[PARSED] ??= (async () => {
122
+ const content = {
123
+ fields: {},
124
+ files: {}
125
+ };
126
+ for await (const part of request.parts()) {
127
+ if (part.type === "file") {
128
+ const file = {
129
+ buffer: await part.toBuffer(),
130
+ filename: part.filename,
131
+ mimetype: part.mimetype
132
+ };
133
+ const existing = content.files[part.fieldname];
134
+ if (existing) existing.push(file);
135
+ else content.files[part.fieldname] = [
136
+ file
137
+ ];
138
+ } else {
139
+ content.fields[part.fieldname] = part.value;
140
+ }
141
+ }
142
+ return content;
143
+ })();
144
+ return cached[PARSED];
145
+ }
146
+ __name(readMultipart, "readMultipart");
147
+ function flatten(files) {
148
+ return Object.values(files).flat();
149
+ }
150
+ __name(flatten, "flatten");
151
+ var UploadedFile = (0, import_common20.createParamDecorator)(async (fieldName, ctx) => {
152
+ const { files } = await readMultipart(ctx.switchToHttp().getRequest());
153
+ const file = (fieldName ? files[fieldName] : flatten(files))?.[0];
154
+ if (!file) {
155
+ const field = fieldName ?? "file";
156
+ throw new BadRequestException({
157
+ label: "File Required",
158
+ detail: `Please attach a file${fieldName ? ` under "${fieldName}"` : ""} to your request.`,
159
+ errors: [
160
+ {
161
+ field,
162
+ message: "File required"
163
+ }
164
+ ]
165
+ });
166
+ }
167
+ return file;
168
+ });
169
+ var UploadedFiles = (0, import_common20.createParamDecorator)(async (fieldName, ctx) => {
170
+ const { files } = await readMultipart(ctx.switchToHttp().getRequest());
171
+ if (!fieldName) return files;
172
+ const matched = files[fieldName] ?? [];
173
+ if (matched.length === 0) {
174
+ throw new BadRequestException({
175
+ label: "Files Required",
176
+ detail: `Please attach at least one file under "${fieldName}" to your request.`,
177
+ errors: [
178
+ {
179
+ field: fieldName,
180
+ message: "At least one file is required"
181
+ }
182
+ ]
183
+ });
184
+ }
185
+ return matched;
186
+ });
187
+ var MultipartDto = (0, import_common20.createParamDecorator)(async (dtoClass, ctx) => {
188
+ const { fields } = await readMultipart(ctx.switchToHttp().getRequest());
189
+ const dto = (0, import_class_transformer.plainToInstance)(dtoClass, fields);
190
+ const errors = await (0, import_class_validator.validate)(dto);
191
+ if (errors.length > 0) {
192
+ throw new BadRequestException({
193
+ label: "Validation Failed",
194
+ detail: "One or more fields are invalid.",
195
+ errors: errors.map((e) => ({
196
+ field: e.property,
197
+ message: Object.values(e.constraints ?? {})[0] ?? "Invalid value"
198
+ }))
199
+ });
200
+ }
201
+ return dto;
202
+ });
203
+ // Annotate the CommonJS export names for ESM import in node:
204
+ 0 && (module.exports = {
205
+ MultipartDto,
206
+ UploadedFile,
207
+ UploadedFiles,
208
+ readMultipart
209
+ });
210
+ //# sourceMappingURL=files.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/files/index.ts","../src/files/uploaded-file.decorator.ts","../src/exceptions/bad-gateway.exception.ts","../src/exceptions/base-field.exception.ts","../src/exceptions/bad-request.exception.ts","../src/exceptions/conflict.exception.ts","../src/exceptions/forbidden.exception.ts","../src/exceptions/gone.exception.ts","../src/exceptions/internal-server-error.exception.ts","../src/exceptions/method-not-allowed.exception.ts","../src/exceptions/not-acceptable.exception.ts","../src/exceptions/not-found.exception.ts","../src/exceptions/not-implemented.exception.ts","../src/exceptions/payload-too-large.exception.ts","../src/exceptions/request-timeout.exception.ts","../src/exceptions/service-unavailable.exception.ts","../src/exceptions/too-many-requests.exception.ts","../src/exceptions/unauthorized.exception.ts","../src/exceptions/unprocessable-entity.exception.ts","../src/exceptions/unsupported-media-type.exception.ts","../src/exceptions/validation.exception.ts"],"sourcesContent":["export {\n type MultipartContent,\n MultipartDto,\n readMultipart,\n UploadedFile,\n type UploadedFileMap,\n type UploadedFileResult,\n UploadedFiles,\n} from './uploaded-file.decorator';\n","import type {} from '@fastify/multipart';\nimport { createParamDecorator, type ExecutionContext } from '@nestjs/common';\nimport { type ClassConstructor, plainToInstance } from 'class-transformer';\nimport { validate } from 'class-validator';\nimport type { FastifyRequest } from 'fastify';\nimport { BadRequestException } from '../exceptions';\n\nexport interface UploadedFileResult {\n buffer: Buffer;\n filename: string;\n mimetype: string;\n}\n\nexport type UploadedFileMap = Record<string, UploadedFileResult[]>;\n\nexport interface MultipartContent {\n fields: Record<string, unknown>;\n files: UploadedFileMap;\n}\n\nconst PARSED = Symbol('vritti.multipart');\n\ntype ParsedRequest = FastifyRequest & { [PARSED]?: Promise<MultipartContent> };\n\n// Reads the whole multipart body once and caches it — the part stream cannot be walked twice\nexport function readMultipart(request: FastifyRequest): Promise<MultipartContent> {\n const cached = request as ParsedRequest;\n cached[PARSED] ??= (async () => {\n const content: MultipartContent = { fields: {}, files: {} };\n for await (const part of request.parts()) {\n if (part.type === 'file') {\n const file = { buffer: await part.toBuffer(), filename: part.filename, mimetype: part.mimetype };\n const existing = content.files[part.fieldname];\n if (existing) existing.push(file);\n else content.files[part.fieldname] = [file];\n } else {\n content.fields[part.fieldname] = part.value;\n }\n }\n return content;\n })();\n return cached[PARSED];\n}\n\nfunction flatten(files: Record<string, UploadedFileResult[]>): UploadedFileResult[] {\n return Object.values(files).flat();\n}\n\n// The single file sent under `fieldName`, or the only file on the request; throws when absent\nexport const UploadedFile = createParamDecorator(\n async (fieldName: string | undefined, ctx: ExecutionContext): Promise<UploadedFileResult> => {\n const { files } = await readMultipart(ctx.switchToHttp().getRequest<FastifyRequest>());\n const file = (fieldName ? files[fieldName] : flatten(files))?.[0];\n\n if (!file) {\n const field = fieldName ?? 'file';\n throw new BadRequestException({\n label: 'File Required',\n detail: `Please attach a file${fieldName ? ` under \"${fieldName}\"` : ''} to your request.`,\n errors: [{ field, message: 'File required' }],\n });\n }\n return file;\n },\n);\n\n// Every file under `fieldName` (throws when none), or with no name every file keyed by field name (never throws)\nexport const UploadedFiles = createParamDecorator(\n async (\n fieldName: string | undefined,\n ctx: ExecutionContext,\n ): Promise<UploadedFileResult[] | Record<string, UploadedFileResult[]>> => {\n const { files } = await readMultipart(ctx.switchToHttp().getRequest<FastifyRequest>());\n if (!fieldName) return files;\n\n const matched = files[fieldName] ?? [];\n if (matched.length === 0) {\n throw new BadRequestException({\n label: 'Files Required',\n detail: `Please attach at least one file under \"${fieldName}\" to your request.`,\n errors: [{ field: fieldName, message: 'At least one file is required' }],\n });\n }\n return matched;\n },\n);\n\n// The request's text fields validated into `dto`, for a multipart form whose body cannot reach @Body() —\n// fastify only surfaces fields while walking the parts, so request.body is empty without attachFieldsToBody.\nexport const MultipartDto = createParamDecorator(\n async <T extends object>(dtoClass: ClassConstructor<T>, ctx: ExecutionContext): Promise<T> => {\n const { fields } = await readMultipart(ctx.switchToHttp().getRequest<FastifyRequest>());\n const dto = plainToInstance(dtoClass, fields);\n const errors = await validate(dto as object);\n\n if (errors.length > 0) {\n throw new BadRequestException({\n label: 'Validation Failed',\n detail: 'One or more fields are invalid.',\n errors: errors.map((e) => ({\n field: e.property,\n message: Object.values(e.constraints ?? {})[0] ?? 'Invalid value',\n })),\n });\n }\n return dto;\n },\n);\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class BadGatewayException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Bad Gateway', HttpStatus.BAD_GATEWAY);\n }\n}\n","import { HttpException, HttpStatus } from '@nestjs/common';\nimport type { FieldError } from '../types/error-response.types';\n\n// Re-export FieldError for backwards compatibility\nexport type { FieldError } from '../types/error-response.types';\n\nexport interface ProblemOptions {\n type?: string;\n label?: string;\n detail?: string;\n errors?: FieldError[];\n}\n\nexport abstract class HttpProblemException extends HttpException {\n constructor(detailOrOptions: string | ProblemOptions, httpStatus: HttpStatus) {\n const options = typeof detailOrOptions === 'string' ? { detail: detailOrOptions } : detailOrOptions;\n\n super(\n {\n type: options.type ?? 'about:blank',\n label: options.label,\n detail: options.detail,\n errors: options.errors ?? [],\n },\n httpStatus,\n );\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class BadRequestException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Bad Request', HttpStatus.BAD_REQUEST);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class ConflictException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Conflict', HttpStatus.CONFLICT);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class ForbiddenException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Forbidden', HttpStatus.FORBIDDEN);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class GoneException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Gone', HttpStatus.GONE);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class InternalServerErrorException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Internal Server Error', HttpStatus.INTERNAL_SERVER_ERROR);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class MethodNotAllowedException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Method Not Allowed', HttpStatus.METHOD_NOT_ALLOWED);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class NotAcceptableException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Not Acceptable', HttpStatus.NOT_ACCEPTABLE);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class NotFoundException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Not Found', HttpStatus.NOT_FOUND);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class NotImplementedException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Not Implemented', HttpStatus.NOT_IMPLEMENTED);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class PayloadTooLargeException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Payload Too Large', HttpStatus.PAYLOAD_TOO_LARGE);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class RequestTimeoutException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Request Timeout', HttpStatus.REQUEST_TIMEOUT);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class ServiceUnavailableException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Service Unavailable', HttpStatus.SERVICE_UNAVAILABLE);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class TooManyRequestsException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Too Many Requests', HttpStatus.TOO_MANY_REQUESTS);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class UnauthorizedException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Unauthorized', HttpStatus.UNAUTHORIZED);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class UnprocessableEntityException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Unprocessable Entity', HttpStatus.UNPROCESSABLE_ENTITY);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class UnsupportedMediaTypeException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Unsupported Media Type', HttpStatus.UNSUPPORTED_MEDIA_TYPE);\n }\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class ValidationException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Validation Failed', HttpStatus.UNPROCESSABLE_ENTITY);\n }\n}\n"],"mappings":"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","names":["import_common","import_common","HttpProblemException","HttpException","detailOrOptions","httpStatus","options","detail","type","label","errors","import_common","BadRequestException","HttpProblemException","detailOrOptions","HttpStatus","BAD_REQUEST","import_common","import_common","import_common","import_common","import_common","import_common","import_common","import_common","import_common","import_common","import_common","import_common","import_common","import_common","import_common","import_common","PARSED","Symbol","readMultipart","request","cached","content","fields","files","part","parts","type","file","buffer","toBuffer","filename","mimetype","existing","fieldname","push","value","flatten","Object","values","flat","UploadedFile","createParamDecorator","fieldName","ctx","switchToHttp","getRequest","field","BadRequestException","label","detail","errors","message","UploadedFiles","matched","length","MultipartDto","dtoClass","dto","plainToInstance","validate","map","e","property","constraints"]}
@@ -0,0 +1,20 @@
1
+ import * as _nestjs_common from '@nestjs/common';
2
+ import { ClassConstructor } from 'class-transformer';
3
+ import { FastifyRequest } from 'fastify';
4
+
5
+ interface UploadedFileResult {
6
+ buffer: Buffer;
7
+ filename: string;
8
+ mimetype: string;
9
+ }
10
+ type UploadedFileMap = Record<string, UploadedFileResult[]>;
11
+ interface MultipartContent {
12
+ fields: Record<string, unknown>;
13
+ files: UploadedFileMap;
14
+ }
15
+ declare function readMultipart(request: FastifyRequest): Promise<MultipartContent>;
16
+ declare const UploadedFile: (...dataOrPipes: (string | _nestjs_common.PipeTransform<any, any> | _nestjs_common.Type<_nestjs_common.PipeTransform<any, any>> | undefined)[]) => ParameterDecorator;
17
+ declare const UploadedFiles: (...dataOrPipes: (string | _nestjs_common.PipeTransform<any, any> | _nestjs_common.Type<_nestjs_common.PipeTransform<any, any>> | undefined)[]) => ParameterDecorator;
18
+ declare const MultipartDto: <T extends object>(...dataOrPipes: (ClassConstructor<T> | _nestjs_common.PipeTransform<any, any> | _nestjs_common.Type<_nestjs_common.PipeTransform<any, any>>)[]) => ParameterDecorator;
19
+
20
+ export { type MultipartContent, MultipartDto, UploadedFile, type UploadedFileMap, type UploadedFileResult, UploadedFiles, readMultipart };
@@ -0,0 +1,20 @@
1
+ import * as _nestjs_common from '@nestjs/common';
2
+ import { ClassConstructor } from 'class-transformer';
3
+ import { FastifyRequest } from 'fastify';
4
+
5
+ interface UploadedFileResult {
6
+ buffer: Buffer;
7
+ filename: string;
8
+ mimetype: string;
9
+ }
10
+ type UploadedFileMap = Record<string, UploadedFileResult[]>;
11
+ interface MultipartContent {
12
+ fields: Record<string, unknown>;
13
+ files: UploadedFileMap;
14
+ }
15
+ declare function readMultipart(request: FastifyRequest): Promise<MultipartContent>;
16
+ declare const UploadedFile: (...dataOrPipes: (string | _nestjs_common.PipeTransform<any, any> | _nestjs_common.Type<_nestjs_common.PipeTransform<any, any>> | undefined)[]) => ParameterDecorator;
17
+ declare const UploadedFiles: (...dataOrPipes: (string | _nestjs_common.PipeTransform<any, any> | _nestjs_common.Type<_nestjs_common.PipeTransform<any, any>> | undefined)[]) => ParameterDecorator;
18
+ declare const MultipartDto: <T extends object>(...dataOrPipes: (ClassConstructor<T> | _nestjs_common.PipeTransform<any, any> | _nestjs_common.Type<_nestjs_common.PipeTransform<any, any>>)[]) => ParameterDecorator;
19
+
20
+ export { type MultipartContent, MultipartDto, UploadedFile, type UploadedFileMap, type UploadedFileResult, UploadedFiles, readMultipart };