UNPKG

@sroussey/parse-address

Version:
182 lines 5.05 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AddressRulesetUS = void 0; const xregexp_1 = __importDefault(require("xregexp")); const utils_1 = require("../../utils"); const states_1 = require("./states"); const directions_1 = require("./directions"); const street_type_1 = require("./street-type"); xregexp_1.default.uninstall("namespacing"); const type = (0, utils_1.flatten)(street_type_1.streetTypeMap) .sort() .filter(function (v, i, arr) { return arr.indexOf(v) === i; }) .join("|"); const fraction = "\\d+\\/\\d+"; const state = "\\b(?:" + (0, utils_1.keys)(states_1.stateCodesMap) .concat((0, utils_1.values)(states_1.stateCodesMap)) .map(xregexp_1.default.escape) .join("|") + ")\\b"; const direct = (0, utils_1.values)(directions_1.directionsMap) .sort((a, b) => Number(a.length < b.length)) .reduce(function (prev, curr) { return prev.concat([xregexp_1.default.escape(curr.replace(/\w/g, "$&.")), curr]); }, (0, utils_1.keys)(directions_1.directionsMap)) .join("|"); const directionCode = (0, utils_1.invert)(directions_1.directionsMap); const dircode = (0, utils_1.keys)(directionCode).join("|"); const postal_code = "(?<postal_code>\\d{5})(?:[- ]?(?<plus4>\\d{4}))?"; const corner = "(?:\\band\\b|\\bat\\b|&|\\@)"; const namednumber = `(one|two|three|four|five|six|seven|eight|nine)`; const stnumber = `(?<number>${namednumber}(?=\\W)|(\\d+-?\\d*)|([N|S|E|W]\\d{1,3}[N|S|E|W]\\d{1,6}))(?=\\D)`; const namedfloor = ` (?: (?:\\W+) (?<sec_unit_num_5>\\d+)(?:st|nd|rd|th)\\W+ (?<sec_unit_type_5>Flo*r)\\W* )`; const street = ` (?: (?:(?<street_0>${direct})\\W+ (?<type_0>${type})\\b ) | (?:(?<prefix_0>${direct})\\W+)? (?: (?<street_4>[\\w\\s]+) (?:[^\\w]+(?<type_4>${type})\\b) (?:[^\\w]+(?<suffix_4>${direct})\\b)? (?:${namedfloor.replace(/_\d/g, "$&1")}) | (?<street_1>[^,]*\\d) (?:[^\\w,]*(?<suffix_1>${direct})\\b) | (?<street_2>[^,]+) (?:[^\\w,]+(?<type_2>${type})\\b) (?:[^\\w,]+(?<suffix_2>${direct})\\b)? | (?<street_3>[^,]+?) (?:[^\\w,]+(?<type_3>${type})\\b)? (?:[^\\w,]+(?<suffix_3>${direct})\\b)? ) )`; const po_box = "p\\W*(?:[om]|ost\\ ?office)\\W*b(?:ox)?"; const sec_unit_type_numbered = ` (?<sec_unit_type_1>su?i?te |${po_box} |(?:ap|dep)(?:ar)?t(?:me?nt)? |ro*m |flo*r? |uni?t |bu?i?ldi?n?g |ha?nga?r |lo?t |pier |slip |spa?ce? |stop |tra?i?le?r |box)(?![a-z] ) `; const sec_unit_type_unnumbered = ` (?<sec_unit_type_2>ba?se?me?n?t |fro?nt |lo?bby |lowe?r |off?i?ce? |pe?n?t?ho?u?s?e? |rear |side |uppe?r )\\b`; const sec_unit = ` (?: #fix3 (?: #fix1 (?: (?:${sec_unit_type_numbered}\\W*) |(?<sec_unit_type_3>\\#)\\W* ) (?<sec_unit_num_1>[\\w-]+) ) | ${sec_unit_type_unnumbered} )`; const city_and_state = ` (?: (?<city>[^\\d,]+?)\\W+ (?<state>${state}) ) `; const country = `(?<country>(?:U\\.?S\\.?|U\\.?S\\.?A\\.?|United States|United States of America))`; const place = ` (?:${city_and_state}\\W*)? (?:${postal_code}\\W*)? (?:${country})? `; const address = (0, xregexp_1.default)(` ^ [^\\w\\#]* (${stnumber})\\W* (?:${fraction}\\W*)? ${street}\\W+ (?:${sec_unit})?\\W* #fix2 ${place} \\W*$`, "ix"); const sep = "(?:\\W+|$)"; // no support for \Z const informal_address = (0, xregexp_1.default)(` ^ \\s* (?:${sec_unit + sep})? (?:${stnumber})?\\W* (?:${fraction}\\W*)? ${street + sep} (?:${sec_unit.replace(/_\d/g, "$&1") + sep})? (?:${place})? `, "ix"); const street_address = (0, xregexp_1.default)(` ^ \\s* (?:${sec_unit + sep})? (?:${stnumber})?\\W* (?:${fraction}\\W*)? ${street + sep} (?:${sec_unit.replace(/_\d/g, "$&1") + sep})? `, "ix"); const po_address = (0, xregexp_1.default)(` ^ \\s* (?:${sec_unit.replace(/_\d/g, "$&1") + sep})? (?:${place})? `, "ix"); const intersection = (0, xregexp_1.default)(`^\\W* ${street.replace(/_\d/g, "1$&")}\\W*? \\s+${corner}\\s+ ${street.replace(/_\d/g, "2$&")}($|\\W+) ${place}\\W*$`, "ix"); exports.AddressRulesetUS = { type, fraction, state, direct, dircode, postal_code, corner, street, stnumber, po_box, street_address, address, intersection, po_address, informal_address, directionCode, }; exports.default = exports.AddressRulesetUS; //# sourceMappingURL=ruleset.js.map