Error if member regexps use different flags or a backreference and no
regexp override is given.
import { createCompositeValidator } from 'idnumbers/core';
import type { IdMetadata } from 'idnumbers/core';
const metadata = (regexp: RegExp, length: number): IdMetadata => ({
iso3166Alpha2: 'XX',
minLength: length,
maxLength: length,
parsable: false,
checksum: false,
regexp,
aliasOf: null,
names: [],
links: [],
deprecated: false,
});
const digits = {
METADATA: metadata(/^\d{6}$/, 6),
validate: (id: string) => /^\d{6}$/.test(id),
};
const prefixed = {
METADATA: metadata(/^XX\d{4}$/, 6),
validate: (id: string) => /^XX\d{4}$/.test(id),
};
const either = createCompositeValidator([digits, prefixed]);
either.validate('123456'); // true
either.validate('XX1234'); // true
either.validate('YY1234'); // false
Combine several ID formats a country accepts into one
CountryValidator.validate(id)is true when any member validates it.parse(id)returns the first non-null result among members that can parse, in member order (a.parse(id) ?? b.parse(id)); it is omitted when no member can parse.checksum()method is omitted: members use different check-digit algorithms.METADATAstarts from the first member's METADATA, then spans every member:minLength/maxLengthare the smallest/largest member bounds andregexpmatches any member's shape;maskslists every member's masks, in member order (#129).parsableis true when the composite hasparse, andchecksumonly when every member's format carries a checksum.overridesare applied last (e.g. a country-levelcountryName/idType, or a hand-writtenregexp); an override set toundefinedis ignored.The registry METADATA must describe every shape
validate()accepts (#117):getCountryIdFormat()and the failure-reason derivation both read it.The composite's parse result type is the union of its members' (#123).